Salome HOME
Merge 'master' branch into 'V9_dev' branch. V9_dev V9_0_0
authorrnv <rnv@opencascade.com>
Wed, 17 Jan 2018 13:20:50 +0000 (16:20 +0300)
committerrnv <rnv@opencascade.com>
Thu, 18 Jan 2018 16:31:08 +0000 (19:31 +0300)
783 files changed:
CMakeLists.txt
SalomeSMESHConfig.cmake.in
bin/smesh_setenv.py
doc/salome/examples/3dmesh.py
doc/salome/examples/a3DmeshOnModified2Dmesh.py
doc/salome/examples/cartesian_algo.py
doc/salome/examples/create_penta_biquad.py
doc/salome/examples/creating_meshes_ex01.py
doc/salome/examples/creating_meshes_ex02.py
doc/salome/examples/creating_meshes_ex03.py
doc/salome/examples/creating_meshes_ex04.py
doc/salome/examples/creating_meshes_ex05.py
doc/salome/examples/creating_meshes_ex06.py
doc/salome/examples/creating_meshes_ex07.py
doc/salome/examples/creating_meshes_ex08.py
doc/salome/examples/defining_hypotheses_adaptive1d.py
doc/salome/examples/defining_hypotheses_ex01.py
doc/salome/examples/defining_hypotheses_ex02.py
doc/salome/examples/defining_hypotheses_ex03.py
doc/salome/examples/defining_hypotheses_ex04.py
doc/salome/examples/defining_hypotheses_ex05.py
doc/salome/examples/defining_hypotheses_ex06.py
doc/salome/examples/defining_hypotheses_ex07.py
doc/salome/examples/defining_hypotheses_ex08.py
doc/salome/examples/defining_hypotheses_ex09.py
doc/salome/examples/defining_hypotheses_ex10.py
doc/salome/examples/defining_hypotheses_ex11.py
doc/salome/examples/defining_hypotheses_ex12.py
doc/salome/examples/defining_hypotheses_ex13.py
doc/salome/examples/defining_hypotheses_ex14.py
doc/salome/examples/defining_hypotheses_ex15.py
doc/salome/examples/defining_hypotheses_ex16.py
doc/salome/examples/defining_hypotheses_ex17.py
doc/salome/examples/ex_MakePolyLine.py
doc/salome/examples/extrusion_penta_biquad.py
doc/salome/examples/filters_belong2group.py
doc/salome/examples/filters_ex01.py
doc/salome/examples/filters_ex02.py
doc/salome/examples/filters_ex03.py
doc/salome/examples/filters_ex04.py
doc/salome/examples/filters_ex05.py
doc/salome/examples/filters_ex06.py
doc/salome/examples/filters_ex07.py
doc/salome/examples/filters_ex08.py
doc/salome/examples/filters_ex09.py
doc/salome/examples/filters_ex10.py
doc/salome/examples/filters_ex11.py
doc/salome/examples/filters_ex12.py
doc/salome/examples/filters_ex13.py
doc/salome/examples/filters_ex14.py
doc/salome/examples/filters_ex15.py
doc/salome/examples/filters_ex16.py
doc/salome/examples/filters_ex17.py
doc/salome/examples/filters_ex18.py
doc/salome/examples/filters_ex19.py
doc/salome/examples/filters_ex20.py
doc/salome/examples/filters_ex21.py
doc/salome/examples/filters_ex22.py
doc/salome/examples/filters_ex23.py
doc/salome/examples/filters_ex24.py
doc/salome/examples/filters_ex25.py
doc/salome/examples/filters_ex26.py
doc/salome/examples/filters_ex27.py
doc/salome/examples/filters_ex28.py
doc/salome/examples/filters_ex29.py
doc/salome/examples/filters_ex30.py
doc/salome/examples/filters_ex31.py
doc/salome/examples/filters_ex32.py
doc/salome/examples/filters_ex33.py
doc/salome/examples/filters_ex34.py
doc/salome/examples/filters_ex35.py
doc/salome/examples/filters_ex37.py
doc/salome/examples/filters_ex38.py
doc/salome/examples/filters_ex39.py
doc/salome/examples/filters_node_nb_conn.py
doc/salome/examples/generate_flat_elements.py
doc/salome/examples/grouping_elements_ex01.py
doc/salome/examples/grouping_elements_ex02.py
doc/salome/examples/grouping_elements_ex03.py
doc/salome/examples/grouping_elements_ex04.py
doc/salome/examples/grouping_elements_ex05.py
doc/salome/examples/grouping_elements_ex06.py
doc/salome/examples/grouping_elements_ex07.py
doc/salome/examples/grouping_elements_ex08.py
doc/salome/examples/measurements_ex01.py
doc/salome/examples/measurements_ex02.py
doc/salome/examples/measurements_ex03.py
doc/salome/examples/modifying_meshes_ex01.py
doc/salome/examples/modifying_meshes_ex02.py
doc/salome/examples/modifying_meshes_ex03.py
doc/salome/examples/modifying_meshes_ex04.py
doc/salome/examples/modifying_meshes_ex05.py
doc/salome/examples/modifying_meshes_ex06.py
doc/salome/examples/modifying_meshes_ex07.py
doc/salome/examples/modifying_meshes_ex08.py
doc/salome/examples/modifying_meshes_ex09.py
doc/salome/examples/modifying_meshes_ex10.py
doc/salome/examples/modifying_meshes_ex11.py
doc/salome/examples/modifying_meshes_ex12.py
doc/salome/examples/modifying_meshes_ex13.py
doc/salome/examples/modifying_meshes_ex15.py
doc/salome/examples/modifying_meshes_ex16.py
doc/salome/examples/modifying_meshes_ex17.py
doc/salome/examples/modifying_meshes_ex18.py
doc/salome/examples/modifying_meshes_ex19.py
doc/salome/examples/modifying_meshes_ex21.py
doc/salome/examples/modifying_meshes_ex22.py
doc/salome/examples/modifying_meshes_ex23.py
doc/salome/examples/modifying_meshes_ex25.py
doc/salome/examples/modifying_meshes_ex26.py
doc/salome/examples/notebook_smesh.py
doc/salome/examples/prism_3d_algo.py
doc/salome/examples/quality_controls_defl.py
doc/salome/examples/quality_controls_ex01.py
doc/salome/examples/quality_controls_ex02.py
doc/salome/examples/quality_controls_ex03.py
doc/salome/examples/quality_controls_ex04.py
doc/salome/examples/quality_controls_ex05.py
doc/salome/examples/quality_controls_ex06.py
doc/salome/examples/quality_controls_ex07.py
doc/salome/examples/quality_controls_ex08.py
doc/salome/examples/quality_controls_ex09.py
doc/salome/examples/quality_controls_ex10.py
doc/salome/examples/quality_controls_ex11.py
doc/salome/examples/quality_controls_ex12.py
doc/salome/examples/quality_controls_ex13.py
doc/salome/examples/quality_controls_ex14.py
doc/salome/examples/quality_controls_ex15.py
doc/salome/examples/quality_controls_ex16.py
doc/salome/examples/quality_controls_ex17.py
doc/salome/examples/quality_controls_ex18.py
doc/salome/examples/quality_controls_ex19.py
doc/salome/examples/quality_controls_ex20.py
doc/salome/examples/quality_controls_ex21.py
doc/salome/examples/quality_controls_ex22.py
doc/salome/examples/split_biquad.py
doc/salome/examples/testme.py
doc/salome/examples/transforming_meshes_ex03.py
doc/salome/examples/transforming_meshes_ex06.py
doc/salome/examples/transforming_meshes_ex07.py
doc/salome/examples/transforming_meshes_ex08.py
doc/salome/examples/transforming_meshes_ex09.py
doc/salome/examples/transforming_meshes_ex10.py
doc/salome/examples/transforming_meshes_ex11.py
doc/salome/examples/transforming_meshes_ex12.py
doc/salome/examples/transforming_meshes_ex13.py
doc/salome/examples/use_existing_faces.py
doc/salome/examples/viewing_meshes_ex01.py
doc/salome/examples/viewing_meshes_ex02.py
doc/salome/gui/SMESH/collect_mesh_methods.py
doc/salome/gui/SMESH/input/smesh_migration.doc
doc/salome/gui/SMESH/input/smeshpy_interface.doc
idl/SMESH_Filter.idl
idl/SMESH_Gen.idl
idl/SMESH_Group.idl
idl/SMESH_Mesh.idl
resources/SMESHCatalog.xml.in
src/DriverMED/CMakeLists.txt
src/DriverMED/DriverMED_Family.cxx
src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_W_Field.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.h
src/MEDWrapper/Base/CMakeLists.txt [deleted file]
src/MEDWrapper/Base/MED_Algorithm.cxx [deleted file]
src/MEDWrapper/Base/MED_Algorithm.hxx [deleted file]
src/MEDWrapper/Base/MED_Common.hxx [deleted file]
src/MEDWrapper/Base/MED_CoordUtils.cxx [deleted file]
src/MEDWrapper/Base/MED_CoordUtils.hxx [deleted file]
src/MEDWrapper/Base/MED_GaussDef.cxx [deleted file]
src/MEDWrapper/Base/MED_GaussDef.hxx [deleted file]
src/MEDWrapper/Base/MED_GaussUtils.cxx [deleted file]
src/MEDWrapper/Base/MED_GaussUtils.hxx [deleted file]
src/MEDWrapper/Base/MED_SharedPtr.hxx [deleted file]
src/MEDWrapper/Base/MED_SliceArray.hxx [deleted file]
src/MEDWrapper/Base/MED_Structures.cxx [deleted file]
src/MEDWrapper/Base/MED_Structures.hxx [deleted file]
src/MEDWrapper/Base/MED_TStructures.hxx [deleted file]
src/MEDWrapper/Base/MED_TWrapper.hxx [deleted file]
src/MEDWrapper/Base/MED_Utilities.cxx [deleted file]
src/MEDWrapper/Base/MED_Utilities.hxx [deleted file]
src/MEDWrapper/Base/MED_Vector.hxx [deleted file]
src/MEDWrapper/Base/MED_Wrapper.cxx [deleted file]
src/MEDWrapper/Base/MED_Wrapper.hxx [deleted file]
src/MEDWrapper/Base/MED_WrapperBase.hxx [deleted file]
src/MEDWrapper/CMakeLists.txt
src/MEDWrapper/Factory/CMakeLists.txt [deleted file]
src/MEDWrapper/Factory/MED_Factory.cxx [deleted file]
src/MEDWrapper/Factory/MED_Factory.hxx [deleted file]
src/MEDWrapper/Factory/MED_Test.cxx [deleted file]
src/MEDWrapper/Factory/MED_WrapperFactory.hxx [deleted file]
src/MEDWrapper/Factory/mprint_version.cxx [deleted file]
src/MEDWrapper/MED_Algorithm.cxx [new file with mode: 0644]
src/MEDWrapper/MED_Algorithm.hxx [new file with mode: 0644]
src/MEDWrapper/MED_Common.cxx [new file with mode: 0644]
src/MEDWrapper/MED_Common.hxx [new file with mode: 0644]
src/MEDWrapper/MED_CoordUtils.cxx [new file with mode: 0644]
src/MEDWrapper/MED_CoordUtils.hxx [new file with mode: 0644]
src/MEDWrapper/MED_Factory.cxx [new file with mode: 0644]
src/MEDWrapper/MED_Factory.hxx [new file with mode: 0644]
src/MEDWrapper/MED_GaussDef.cxx [new file with mode: 0644]
src/MEDWrapper/MED_GaussDef.hxx [new file with mode: 0644]
src/MEDWrapper/MED_GaussUtils.cxx [new file with mode: 0644]
src/MEDWrapper/MED_GaussUtils.hxx [new file with mode: 0644]
src/MEDWrapper/MED_SharedPtr.hxx [new file with mode: 0644]
src/MEDWrapper/MED_SliceArray.hxx [new file with mode: 0644]
src/MEDWrapper/MED_Structures.cxx [new file with mode: 0644]
src/MEDWrapper/MED_Structures.hxx [new file with mode: 0644]
src/MEDWrapper/MED_TStructures.hxx [new file with mode: 0644]
src/MEDWrapper/MED_Utilities.cxx [new file with mode: 0644]
src/MEDWrapper/MED_Utilities.hxx [new file with mode: 0644]
src/MEDWrapper/MED_Vector.hxx [new file with mode: 0644]
src/MEDWrapper/MED_Wrapper.cxx [new file with mode: 0644]
src/MEDWrapper/MED_Wrapper.hxx [new file with mode: 0644]
src/MEDWrapper/MED_WrapperDef.hxx [new file with mode: 0755]
src/MEDWrapper/V2_2/CMakeLists.txt [deleted file]
src/MEDWrapper/V2_2/MED_V2_2_Wrapper.cxx [deleted file]
src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx [deleted file]
src/MEDWrapper/mprint_version.cxx [new file with mode: 0644]
src/PluginUtils/GeomSelectionTools.cxx
src/PluginUtils/GeomSelectionTools.h
src/SMESH/CMakeLists.txt
src/SMESH/SMESH_Algo.cxx
src/SMESH/SMESH_Algo.hxx
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_Gen.hxx
src/SMESH/SMESH_Hypothesis.cxx
src/SMESH/SMESH_Hypothesis.hxx
src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_Mesh.hxx
src/SMESHClient/CMakeLists.txt
src/SMESHDS/SMESHDS_Document.cxx
src/SMESHDS/SMESHDS_Document.hxx
src/SMESHGUI/CMakeLists.txt
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI.h
src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.cxx
src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx
src/SMESHGUI/SMESHGUI_ClippingDlg.cxx
src/SMESHGUI/SMESHGUI_ComputeDlg.cxx
src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx
src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx
src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx
src/SMESHGUI/SMESHGUI_DisplayEntitiesDlg.cxx
src/SMESHGUI/SMESHGUI_Displayer.cxx
src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx
src/SMESHGUI/SMESHGUI_FieldSelectorWdg.cxx
src/SMESHGUI/SMESHGUI_FileInfoDlg.cxx
src/SMESHGUI/SMESHGUI_FilterDlg.cxx
src/SMESHGUI/SMESHGUI_FindElemByPointDlg.cxx
src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx
src/SMESHGUI/SMESHGUI_GroupDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx
src/SMESHGUI/SMESHGUI_Hypotheses.cxx
src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx
src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx
src/SMESHGUI/SMESHGUI_MergeDlg.cxx
src/SMESHGUI/SMESHGUI_MeshInfo.cxx
src/SMESHGUI/SMESHGUI_MeshOp.cxx
src/SMESHGUI/SMESHGUI_MeshOrderOp.cxx
src/SMESHGUI/SMESHGUI_MeshPatternDlg.cxx
src/SMESHGUI/SMESHGUI_MeshUtils.cxx
src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx
src/SMESHGUI/SMESHGUI_NodesDlg.cxx
src/SMESHGUI/SMESHGUI_Operation.cxx
src/SMESHGUI/SMESHGUI_Operation.h
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx
src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx
src/SMESHGUI/SMESHGUI_ReorientFacesDlg.cxx
src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx
src/SMESHGUI/SMESHGUI_RotationDlg.cxx
src/SMESHGUI/SMESHGUI_ScaleDlg.cxx
src/SMESHGUI/SMESHGUI_Selection.cxx
src/SMESHGUI/SMESHGUI_Selection.h
src/SMESHGUI/SMESHGUI_SelectionOp.cxx
src/SMESHGUI/SMESHGUI_SewingDlg.cxx
src/SMESHGUI/SMESHGUI_ShapeByMeshDlg.cxx
src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx
src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx
src/SMESHGUI/SMESHGUI_SplitBiQuad.cxx
src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx
src/SMESHGUI/SMESHGUI_TranslationDlg.cxx
src/SMESHGUI/SMESHGUI_Utils.cxx
src/SMESHGUI/SMESHGUI_Utils.h
src/SMESHGUI/SMESHGUI_VTKUtils.cxx
src/SMESHGUI/SMESHGUI_VTKUtils.h
src/SMESHGUI/SMESH_msg_en.ts
src/SMESHGUI/SMESH_msg_fr.ts
src/SMESHGUI/SMESH_msg_ja.ts
src/SMESHUtils/SMESH_MAT2d.cxx
src/SMESH_I/CMakeLists.txt
src/SMESH_I/SMESH_2smeshpy.cxx
src/SMESH_I/SMESH_2smeshpy.hxx
src/SMESH_I/SMESH_DumpPython.cxx [deleted file]
src/SMESH_I/SMESH_Filter_i.cxx
src/SMESH_I/SMESH_Gen_i.cxx
src/SMESH_I/SMESH_Gen_i.hxx
src/SMESH_I/SMESH_Gen_i_1.cxx
src/SMESH_I/SMESH_Group_i.cxx
src/SMESH_I/SMESH_Hypothesis_i.cxx
src/SMESH_I/SMESH_Hypothesis_i.hxx
src/SMESH_I/SMESH_MeshEditor_i.cxx
src/SMESH_I/SMESH_Mesh_i.cxx
src/SMESH_I/SMESH_Mesh_i.hxx
src/SMESH_I/SMESH_NoteBook.cxx
src/SMESH_I/SMESH_Pattern_i.cxx
src/SMESH_I/SMESH_PreMeshInfo.cxx
src/SMESH_I/SMESH_PythonDump.cxx [new file with mode: 0644]
src/SMESH_I/SMESH_PythonDump.hxx
src/SMESH_PY/smeshstudytools.py
src/SMESH_SWIG/PAL_MESH_041_mesh.py
src/SMESH_SWIG/PAL_MESH_043_2D.py
src/SMESH_SWIG/PAL_MESH_043_3D.py
src/SMESH_SWIG/SMESH_AdvancedEditor.py
src/SMESH_SWIG/SMESH_BelongToGeom.py
src/SMESH_SWIG/SMESH_BuildCompound.py
src/SMESH_SWIG/SMESH_GroupFromGeom.py
src/SMESH_SWIG/SMESH_GroupFromGeom2.py
src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py
src/SMESH_SWIG/SMESH_Nut.py
src/SMESH_SWIG/SMESH_Partition1_tetra.py
src/SMESH_SWIG/SMESH_Sphere.py
src/SMESH_SWIG/SMESH_blocks.py
src/SMESH_SWIG/SMESH_box.py
src/SMESH_SWIG/SMESH_box2_tetra.py
src/SMESH_SWIG/SMESH_box3_tetra.py
src/SMESH_SWIG/SMESH_box_tetra.py
src/SMESH_SWIG/SMESH_controls.py
src/SMESH_SWIG/SMESH_demo_hexa2_upd.py
src/SMESH_SWIG/SMESH_fixation.py
src/SMESH_SWIG/SMESH_fixation_hexa.py
src/SMESH_SWIG/SMESH_fixation_netgen.py
src/SMESH_SWIG/SMESH_fixation_tetra.py
src/SMESH_SWIG/SMESH_flight_skin.py
src/SMESH_SWIG/SMESH_freebord.py
src/SMESH_SWIG/SMESH_hexaedre.py
src/SMESH_SWIG/SMESH_mechanic.py
src/SMESH_SWIG/SMESH_mechanic_editor.py
src/SMESH_SWIG/SMESH_mechanic_netgen.py
src/SMESH_SWIG/SMESH_mechanic_tetra.py
src/SMESH_SWIG/SMESH_reg.py
src/SMESH_SWIG/SMESH_shared_modules.py
src/SMESH_SWIG/SMESH_test.py
src/SMESH_SWIG/SMESH_test0.py
src/SMESH_SWIG/SMESH_test1.py
src/SMESH_SWIG/SMESH_test1_AndDisplay.py
src/SMESH_SWIG/SMESH_test2.py
src/SMESH_SWIG/SMESH_test3.py
src/SMESH_SWIG/SMESH_test4.py
src/SMESH_SWIG/SMESH_test5.py
src/SMESH_SWIG/StdMeshersBuilder.py
src/SMESH_SWIG/ex01_cube2build.py
src/SMESH_SWIG/ex02_cube2primitive.py
src/SMESH_SWIG/ex03_cube2partition.py
src/SMESH_SWIG/ex04_cube5tetraHexa.py
src/SMESH_SWIG/ex05_hole1build.py
src/SMESH_SWIG/ex06_hole1boolean.py
src/SMESH_SWIG/ex07_hole1partition.py
src/SMESH_SWIG/ex08_hole2build.py
src/SMESH_SWIG/ex09_grid4build.py
src/SMESH_SWIG/ex10_grid4geometry.py
src/SMESH_SWIG/ex11_grid3partition.py
src/SMESH_SWIG/ex12_grid17partition.py
src/SMESH_SWIG/ex13_hole1partial.py
src/SMESH_SWIG/ex14_cyl1holed.py
src/SMESH_SWIG/ex15_cyl2geometry.py
src/SMESH_SWIG/ex16_cyl2complementary.py
src/SMESH_SWIG/ex17_dome1.py
src/SMESH_SWIG/ex18_dome2.py
src/SMESH_SWIG/ex19_sphereINcube.py
src/SMESH_SWIG/ex21_lamp.py
src/SMESH_SWIG/ex24_cylinder.py
src/SMESH_SWIG/ex29_refine.py
src/SMESH_SWIG/ex30_groupsOp.py
src/SMESH_SWIG/ex30_tepal.py
src/SMESH_SWIG/ex31_dimGroup.py
src/SMESH_SWIG/smesh.py
src/SMESH_SWIG/smeshBuilder.py
src/SMESH_SWIG/smesh_algorithm.py
src/SMESH_SWIG/smesh_selection.py
src/SMESH_SWIG_WITHIHM/CMakeLists.txt
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.h
src/SMESH_SWIG_WITHIHM/libSMESH_Swig.i
src/StdMeshers/StdMeshers_Adaptive1D.cxx
src/StdMeshers/StdMeshers_Adaptive1D.hxx
src/StdMeshers/StdMeshers_Arithmetic1D.cxx
src/StdMeshers/StdMeshers_Arithmetic1D.hxx
src/StdMeshers/StdMeshers_AutomaticLength.cxx
src/StdMeshers/StdMeshers_AutomaticLength.hxx
src/StdMeshers/StdMeshers_CartesianParameters3D.cxx
src/StdMeshers/StdMeshers_CartesianParameters3D.hxx
src/StdMeshers/StdMeshers_Cartesian_3D.cxx
src/StdMeshers/StdMeshers_Cartesian_3D.hxx
src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx
src/StdMeshers/StdMeshers_CompositeHexa_3D.hxx
src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx
src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx
src/StdMeshers/StdMeshers_Deflection1D.cxx
src/StdMeshers/StdMeshers_Deflection1D.hxx
src/StdMeshers/StdMeshers_FixedPoints1D.cxx
src/StdMeshers/StdMeshers_FixedPoints1D.hxx
src/StdMeshers/StdMeshers_Geometric1D.cxx
src/StdMeshers/StdMeshers_Geometric1D.hxx
src/StdMeshers/StdMeshers_HexaFromSkin_3D.cxx
src/StdMeshers/StdMeshers_HexaFromSkin_3D.hxx
src/StdMeshers/StdMeshers_Hexa_3D.cxx
src/StdMeshers/StdMeshers_Hexa_3D.hxx
src/StdMeshers/StdMeshers_ImportSource.cxx
src/StdMeshers/StdMeshers_ImportSource.hxx
src/StdMeshers/StdMeshers_Import_1D.cxx
src/StdMeshers/StdMeshers_Import_1D.hxx
src/StdMeshers/StdMeshers_Import_1D2D.cxx
src/StdMeshers/StdMeshers_Import_1D2D.hxx
src/StdMeshers/StdMeshers_LayerDistribution.cxx
src/StdMeshers/StdMeshers_LayerDistribution.hxx
src/StdMeshers/StdMeshers_LayerDistribution2D.cxx
src/StdMeshers/StdMeshers_LayerDistribution2D.hxx
src/StdMeshers/StdMeshers_LengthFromEdges.cxx
src/StdMeshers/StdMeshers_LengthFromEdges.hxx
src/StdMeshers/StdMeshers_LocalLength.cxx
src/StdMeshers/StdMeshers_LocalLength.hxx
src/StdMeshers/StdMeshers_MEFISTO_2D.cxx
src/StdMeshers/StdMeshers_MEFISTO_2D.hxx
src/StdMeshers/StdMeshers_MaxElementArea.cxx
src/StdMeshers/StdMeshers_MaxElementArea.hxx
src/StdMeshers/StdMeshers_MaxElementVolume.cxx
src/StdMeshers/StdMeshers_MaxElementVolume.hxx
src/StdMeshers/StdMeshers_MaxLength.cxx
src/StdMeshers/StdMeshers_MaxLength.hxx
src/StdMeshers/StdMeshers_NotConformAllowed.cxx
src/StdMeshers/StdMeshers_NotConformAllowed.hxx
src/StdMeshers/StdMeshers_NumberOfLayers.cxx
src/StdMeshers/StdMeshers_NumberOfLayers.hxx
src/StdMeshers/StdMeshers_NumberOfLayers2D.cxx
src/StdMeshers/StdMeshers_NumberOfLayers2D.hxx
src/StdMeshers/StdMeshers_NumberOfSegments.cxx
src/StdMeshers/StdMeshers_NumberOfSegments.hxx
src/StdMeshers/StdMeshers_PolygonPerFace_2D.cxx
src/StdMeshers/StdMeshers_PolygonPerFace_2D.hxx
src/StdMeshers/StdMeshers_Prism_3D.cxx
src/StdMeshers/StdMeshers_Prism_3D.hxx
src/StdMeshers/StdMeshers_ProjectionSource1D.cxx
src/StdMeshers/StdMeshers_ProjectionSource1D.hxx
src/StdMeshers/StdMeshers_ProjectionSource2D.cxx
src/StdMeshers/StdMeshers_ProjectionSource2D.hxx
src/StdMeshers/StdMeshers_ProjectionSource3D.cxx
src/StdMeshers/StdMeshers_ProjectionSource3D.hxx
src/StdMeshers/StdMeshers_Projection_1D.cxx
src/StdMeshers/StdMeshers_Projection_1D.hxx
src/StdMeshers/StdMeshers_Projection_1D2D.cxx
src/StdMeshers/StdMeshers_Projection_1D2D.hxx
src/StdMeshers/StdMeshers_Projection_2D.cxx
src/StdMeshers/StdMeshers_Projection_2D.hxx
src/StdMeshers/StdMeshers_Projection_3D.cxx
src/StdMeshers/StdMeshers_Projection_3D.hxx
src/StdMeshers/StdMeshers_Propagation.cxx
src/StdMeshers/StdMeshers_Propagation.hxx
src/StdMeshers/StdMeshers_QuadFromMedialAxis_1D2D.cxx
src/StdMeshers/StdMeshers_QuadFromMedialAxis_1D2D.hxx
src/StdMeshers/StdMeshers_QuadrangleParams.cxx
src/StdMeshers/StdMeshers_QuadrangleParams.hxx
src/StdMeshers/StdMeshers_QuadranglePreference.cxx
src/StdMeshers/StdMeshers_QuadranglePreference.hxx
src/StdMeshers/StdMeshers_Quadrangle_2D.cxx
src/StdMeshers/StdMeshers_Quadrangle_2D.hxx
src/StdMeshers/StdMeshers_QuadraticMesh.cxx
src/StdMeshers/StdMeshers_QuadraticMesh.hxx
src/StdMeshers/StdMeshers_RadialPrism_3D.cxx
src/StdMeshers/StdMeshers_RadialPrism_3D.hxx
src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.cxx
src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.hxx
src/StdMeshers/StdMeshers_Regular_1D.cxx
src/StdMeshers/StdMeshers_Regular_1D.hxx
src/StdMeshers/StdMeshers_Reversible1D.cxx
src/StdMeshers/StdMeshers_Reversible1D.hxx
src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.cxx
src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx
src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.cxx
src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx
src/StdMeshers/StdMeshers_StartEndLength.cxx
src/StdMeshers/StdMeshers_StartEndLength.hxx
src/StdMeshers/StdMeshers_UseExisting_1D2D.cxx
src/StdMeshers/StdMeshers_UseExisting_1D2D.hxx
src/StdMeshers/StdMeshers_ViscousLayers.cxx
src/StdMeshers/StdMeshers_ViscousLayers.hxx
src/StdMeshers/StdMeshers_ViscousLayers2D.cxx
src/StdMeshers/StdMeshers_ViscousLayers2D.hxx
src/StdMeshersGUI/CMakeLists.txt
src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_SubShapeSelectorWdg.cxx
src/StdMeshers_I/StdMeshers_Adaptive1D_i.cxx
src/StdMeshers_I/StdMeshers_Adaptive1D_i.hxx
src/StdMeshers_I/StdMeshers_Arithmetic1D_i.cxx
src/StdMeshers_I/StdMeshers_Arithmetic1D_i.hxx
src/StdMeshers_I/StdMeshers_AutomaticLength_i.cxx
src/StdMeshers_I/StdMeshers_AutomaticLength_i.hxx
src/StdMeshers_I/StdMeshers_CartesianParameters3D_i.cxx
src/StdMeshers_I/StdMeshers_CartesianParameters3D_i.hxx
src/StdMeshers_I/StdMeshers_Cartesian_3D_i.cxx
src/StdMeshers_I/StdMeshers_Cartesian_3D_i.hxx
src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.cxx
src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.hxx
src/StdMeshers_I/StdMeshers_Deflection1D_i.cxx
src/StdMeshers_I/StdMeshers_Deflection1D_i.hxx
src/StdMeshers_I/StdMeshers_FixedPoints1D_i.cxx
src/StdMeshers_I/StdMeshers_FixedPoints1D_i.hxx
src/StdMeshers_I/StdMeshers_Geometric1D_i.cxx
src/StdMeshers_I/StdMeshers_Geometric1D_i.hxx
src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx
src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx
src/StdMeshers_I/StdMeshers_ImportSource1D_i.cxx
src/StdMeshers_I/StdMeshers_ImportSource1D_i.hxx
src/StdMeshers_I/StdMeshers_ImportSource2D_i.cxx
src/StdMeshers_I/StdMeshers_ImportSource2D_i.hxx
src/StdMeshers_I/StdMeshers_Import_1D2D_i.cxx
src/StdMeshers_I/StdMeshers_Import_1D2D_i.hxx
src/StdMeshers_I/StdMeshers_Import_1D_i.cxx
src/StdMeshers_I/StdMeshers_Import_1D_i.hxx
src/StdMeshers_I/StdMeshers_LayerDistribution2D_i.cxx
src/StdMeshers_I/StdMeshers_LayerDistribution2D_i.hxx
src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx
src/StdMeshers_I/StdMeshers_LayerDistribution_i.hxx
src/StdMeshers_I/StdMeshers_LengthFromEdges_i.cxx
src/StdMeshers_I/StdMeshers_LengthFromEdges_i.hxx
src/StdMeshers_I/StdMeshers_LocalLength_i.cxx
src/StdMeshers_I/StdMeshers_LocalLength_i.hxx
src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx
src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx
src/StdMeshers_I/StdMeshers_MaxElementArea_i.cxx
src/StdMeshers_I/StdMeshers_MaxElementArea_i.hxx
src/StdMeshers_I/StdMeshers_MaxElementVolume_i.cxx
src/StdMeshers_I/StdMeshers_MaxElementVolume_i.hxx
src/StdMeshers_I/StdMeshers_MaxLength_i.cxx
src/StdMeshers_I/StdMeshers_MaxLength_i.hxx
src/StdMeshers_I/StdMeshers_NotConformAllowed_i.cxx
src/StdMeshers_I/StdMeshers_NotConformAllowed_i.hxx
src/StdMeshers_I/StdMeshers_NumberOfLayers2D_i.cxx
src/StdMeshers_I/StdMeshers_NumberOfLayers2D_i.hxx
src/StdMeshers_I/StdMeshers_NumberOfLayers_i.cxx
src/StdMeshers_I/StdMeshers_NumberOfLayers_i.hxx
src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx
src/StdMeshers_I/StdMeshers_NumberOfSegments_i.hxx
src/StdMeshers_I/StdMeshers_ObjRefUlils.cxx
src/StdMeshers_I/StdMeshers_ObjRefUlils.hxx
src/StdMeshers_I/StdMeshers_PolygonPerFace_2D_i.cxx
src/StdMeshers_I/StdMeshers_PolygonPerFace_2D_i.hxx
src/StdMeshers_I/StdMeshers_Prism_3D_i.cxx
src/StdMeshers_I/StdMeshers_Prism_3D_i.hxx
src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx
src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx
src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.cxx
src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.hxx
src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.cxx
src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.hxx
src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.cxx
src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.hxx
src/StdMeshers_I/StdMeshers_Propagation_i.cxx
src/StdMeshers_I/StdMeshers_Propagation_i.hxx
src/StdMeshers_I/StdMeshers_QuadrangleParams_i.cxx
src/StdMeshers_I/StdMeshers_QuadrangleParams_i.hxx
src/StdMeshers_I/StdMeshers_QuadranglePreference_i.cxx
src/StdMeshers_I/StdMeshers_QuadranglePreference_i.hxx
src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.cxx
src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.hxx
src/StdMeshers_I/StdMeshers_QuadraticMesh_i.cxx
src/StdMeshers_I/StdMeshers_QuadraticMesh_i.hxx
src/StdMeshers_I/StdMeshers_RadialQuadrangle_1D2D_i.cxx
src/StdMeshers_I/StdMeshers_RadialQuadrangle_1D2D_i.hxx
src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx
src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx
src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.cxx
src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.hxx
src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.cxx
src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.hxx
src/StdMeshers_I/StdMeshers_StartEndLength_i.cxx
src/StdMeshers_I/StdMeshers_StartEndLength_i.hxx
src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx
src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.hxx
src/StdMeshers_I/StdMeshers_ViscousLayers2D_i.cxx
src/StdMeshers_I/StdMeshers_ViscousLayers2D_i.hxx
src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx
src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx
src/StdMeshers_I/StdMeshers_i.cxx
src/Tools/MGCleanerPlug/MGCleanerMonPlugDialog.py
src/Tools/MGCleanerPlug/MGCleanerMonViewText.py
src/Tools/MGCleanerPlug/MGCleanerplug_plugin.py
src/Tools/MacMesh/Example/PressureValve.py.in
src/Tools/MacMesh/MacMesh/Alarms.py
src/Tools/MacMesh/MacMesh/CentralUnrefine.py
src/Tools/MacMesh/MacMesh/CompositeBox.py
src/Tools/MacMesh/MacMesh/CompositeBoxF.py
src/Tools/MacMesh/MacMesh/CutnGroup.py
src/Tools/MacMesh/MacMesh/Cylinder.py
src/Tools/MacMesh/MacMesh/GenFunctions.py
src/Tools/MacMesh/MacMesh/MacObject.py
src/Tools/MacMesh/MacMesh/PublishGroups.py
src/Tools/MacMesh/MacMesh/SharpAngle.py
src/Tools/MeshCut/meshcut_plugin.py
src/Tools/Verima/Base/dataBase.py
src/Tools/Verima/Base/exportToCSV.py
src/Tools/Verima/Base/importFromCSV.py
src/Tools/Verima/Base/tableDeBase.py
src/Tools/Verima/Base/tableGroupeRatios.py
src/Tools/Verima/Base/tableGroupeTailles.py
src/Tools/Verima/Base/tableGroupes.py
src/Tools/Verima/Base/tableGroupesRef.py
src/Tools/Verima/Base/tableMachines.py
src/Tools/Verima/Base/tableMaillages.py
src/Tools/Verima/Base/tableMailles.py
src/Tools/Verima/Base/tableMailleurs.py
src/Tools/Verima/Base/tablePerfs.py
src/Tools/Verima/Base/tableRatios.py
src/Tools/Verima/Base/tableTailles.py
src/Tools/Verima/Base/tableVersions.py
src/Tools/Verima/Base/versions.py
src/Tools/Verima/CreeDocuments/jobHtml.py
src/Tools/Verima/Doc/usage_outil.rst
src/Tools/Verima/Gui/desFenetreChoix.py
src/Tools/Verima/Gui/maFenetreChoix.py
src/Tools/Verima/Gui/monEditor.py
src/Tools/Verima/Gui/visualiseDatabase.py
src/Tools/Verima/Stats/getCritere.py
src/Tools/Verima/Stats/getStats.py
src/Tools/Verima/Stats/job.py
src/Tools/Verima/Stats/ref.py
src/Tools/Verima/Stats/utiles.py
src/Tools/Verima/ajoutEnreg.py
src/Tools/Verima/compareVersions.py
src/Tools/Verima/createDatabase.py
src/Tools/Verima/lance.py
src/Tools/Verima/passeJobs.py
src/Tools/YamsPlug/monViewText.py
src/Tools/YamsPlug/monYamsPlugDialog.py
src/Tools/YamsPlug/yamsplug_plugin.py
src/Tools/ZCracksPlug/CMakeLists.txt
src/Tools/ZCracksPlug/Zset.py
src/Tools/ZCracksPlug/__init__.py
src/Tools/ZCracksPlug/casTests/genereCube.py
src/Tools/ZCracksPlug/casTests/launchCas.py
src/Tools/ZCracksPlug/casTests/launchManuel.py
src/Tools/ZCracksPlug/ellipse.py
src/Tools/ZCracksPlug/genereCrack.py
src/Tools/ZCracksPlug/images_rc.py [deleted file]
src/Tools/ZCracksPlug/main.py
src/Tools/ZCracksPlug/rectangle.py
src/Tools/ZCracksPlug/sphere.py
src/Tools/ZCracksPlug/utilityFunctions.py
src/Tools/ZCracksPlug/zcracksLaunch.py
src/Tools/ZCracksPlug/zcracks_plugin.py
src/Tools/ZCracksPlug/zcracks_ui.py [deleted file]
src/Tools/blocFissure/AREextradosLauncher.py
src/Tools/blocFissure/AREintradosLauncher.py
src/Tools/blocFissure/CasTests/cubeAngle2.py
src/Tools/blocFissure/CasTests/cylindre_2.py
src/Tools/blocFissure/CasTests/ellipse_2.py
src/Tools/blocFissure/CasTests/eprouvetteDroite_2.py
src/Tools/blocFissure/CasTests/execution_Cas.py
src/Tools/blocFissure/CasTests/fissure_Coude_4.py
src/Tools/blocFissure/exemple2.py
src/Tools/blocFissure/fissureLauncher.py
src/Tools/blocFissure/gmu/__init__.py
src/Tools/blocFissure/gmu/ajustePointsEdgePipeFissure.py
src/Tools/blocFissure/gmu/blocDefaut.py
src/Tools/blocFissure/gmu/calculePointsAxiauxPipe.py
src/Tools/blocFissure/gmu/casStandard.py
src/Tools/blocFissure/gmu/checkDecoupePartition.py
src/Tools/blocFissure/gmu/commonSubShapes.py
src/Tools/blocFissure/gmu/compoundFromList.py
src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes.py
src/Tools/blocFissure/gmu/construitFissureGenerale.py
src/Tools/blocFissure/gmu/construitMaillagePipe.py
src/Tools/blocFissure/gmu/construitPartitionsPeauFissure.py
src/Tools/blocFissure/gmu/creePointsPipePeau.py
src/Tools/blocFissure/gmu/creeZoneDefautDansObjetSain.py
src/Tools/blocFissure/gmu/creeZoneDefautFilling.py
src/Tools/blocFissure/gmu/creeZoneDefautGeom.py
src/Tools/blocFissure/gmu/creeZoneDefautMaillage.py
src/Tools/blocFissure/gmu/eliminateDoubles.py
src/Tools/blocFissure/gmu/elimineExtremitesPipe.py
src/Tools/blocFissure/gmu/ellipsoideDefaut.py
src/Tools/blocFissure/gmu/extractionOrientee.py
src/Tools/blocFissure/gmu/extractionOrienteeMulti.py
src/Tools/blocFissure/gmu/facesCirculaires.py
src/Tools/blocFissure/gmu/facesFissure.py
src/Tools/blocFissure/gmu/facesToreInBloc.py
src/Tools/blocFissure/gmu/facesVolumesToriques.py
src/Tools/blocFissure/gmu/findWireEndVertices.py
src/Tools/blocFissure/gmu/findWireIntermediateVertices.py
src/Tools/blocFissure/gmu/fissureCoude.py
src/Tools/blocFissure/gmu/fusionMaillageAttributionDefaut.py
src/Tools/blocFissure/gmu/genereElemsFissureElliptique.py
src/Tools/blocFissure/gmu/genereMeshCalculZoneDefaut.py
src/Tools/blocFissure/gmu/geomsmesh.py
src/Tools/blocFissure/gmu/getCentreFondFiss.py
src/Tools/blocFissure/gmu/getStatsMaillageFissure.py
src/Tools/blocFissure/gmu/getSubshapeIds.py
src/Tools/blocFissure/gmu/identifieEdgesPeau.py
src/Tools/blocFissure/gmu/identifieElementsDebouchants.py
src/Tools/blocFissure/gmu/identifieElementsFissure.py
src/Tools/blocFissure/gmu/identifieElementsGeometriquesPeau.py
src/Tools/blocFissure/gmu/identifieFacesEdgesFissureExterne.py
src/Tools/blocFissure/gmu/identifieFacesPeau.py
src/Tools/blocFissure/gmu/initEtude.py
src/Tools/blocFissure/gmu/insereFissureElliptique.py
src/Tools/blocFissure/gmu/insereFissureGenerale.py
src/Tools/blocFissure/gmu/insereFissureLongue.py
src/Tools/blocFissure/gmu/listOfExtraFunctions.py
src/Tools/blocFissure/gmu/mailleAretesEtJonction.py
src/Tools/blocFissure/gmu/mailleFacesFissure.py
src/Tools/blocFissure/gmu/mailleFacesPeau.py
src/Tools/blocFissure/gmu/meshBlocPart.py
src/Tools/blocFissure/gmu/orderEdgesFromWire.py
src/Tools/blocFissure/gmu/partitionBlocDefaut.py
src/Tools/blocFissure/gmu/partitionVolumeSain.py
src/Tools/blocFissure/gmu/partitionneFissureParPipe.py
src/Tools/blocFissure/gmu/peauInterne.py
src/Tools/blocFissure/gmu/produitMixte.py
src/Tools/blocFissure/gmu/projettePointSurCourbe.py
src/Tools/blocFissure/gmu/prolongeVertices.py
src/Tools/blocFissure/gmu/prolongeWire.py
src/Tools/blocFissure/gmu/propagateTore.py
src/Tools/blocFissure/gmu/putName.py
src/Tools/blocFissure/gmu/quadranglesToShape.py
src/Tools/blocFissure/gmu/quadranglesToShapeNoCorner.py
src/Tools/blocFissure/gmu/quadranglesToShapeWithCorner.py
src/Tools/blocFissure/gmu/regroupeSainEtDefaut.py
src/Tools/blocFissure/gmu/restreintFaceFissure.py
src/Tools/blocFissure/gmu/rotTrans.py
src/Tools/blocFissure/gmu/shapeSurFissure.py
src/Tools/blocFissure/gmu/shapesSurFissure.py
src/Tools/blocFissure/gmu/sortEdges.py
src/Tools/blocFissure/gmu/sortFaces.py
src/Tools/blocFissure/gmu/sortGeneratrices.py
src/Tools/blocFissure/gmu/sortSolids.py
src/Tools/blocFissure/gmu/substractSubShapes.py
src/Tools/blocFissure/gmu/toreFissure.py
src/Tools/blocFissure/gmu/triedreBase.py
src/Tools/blocFissure/gmu/trouveEdgesFissPeau.py
src/Tools/blocFissure/gmu/whichSide.py
src/Tools/blocFissure/gmu/whichSideMulti.py
src/Tools/blocFissure/gmu/whichSideVertex.py
src/Tools/blocFissure/ihm/CMakeLists.txt
src/Tools/blocFissure/ihm/fissureCoude_ihm.py
src/Tools/blocFissure/ihm/fissureCoude_plugin.py
src/Tools/blocFissure/ihm/fissureGenerale_plugin.py
src/Tools/blocFissure/lanceurSoudureArrondieTest.py
src/Tools/blocFissure/lanceurSoudureViveTest.py
src/Tools/blocFissure/lanceurTestAubry.py
src/Tools/blocFissure/materielCasTests/cubeAngle.py
src/Tools/blocFissure/materielCasTests/cubeFin.py
src/Tools/blocFissure/materielCasTests/decoupeCylindre.py
src/Tools/blocFissure/materielCasTests/disque_perce.py
src/Tools/blocFissure/materielCasTests/ellipse.py
src/Tools/blocFissure/materielCasTests/ellipse_disque.py
src/Tools/blocFissure/materielCasTests/ellipse_probleme.py
src/Tools/blocFissure/materielCasTests/eprouvetteCourbe.py
src/Tools/blocFissure/materielCasTests/eprouvetteDroite.py
src/Tools/blocFissure/materielCasTests/fissureGauche.py
src/Tools/blocFissure/materielCasTests/fissureGauche2.py
src/Tools/blocFissure/materielCasTests/vis.py
src/Tools/padder/meshjob/idl/SPADDERPluginTest.idl
src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx
src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx
src/Tools/padder/resources/testdata/buildparticules.py
src/Tools/padder/spadderpy/__init__.py
src/Tools/padder/spadderpy/configreader.py
src/Tools/padder/spadderpy/gui/inputdialog.py
src/Tools/padder/spadderpy/gui/plugindialog.py
src/Tools/padder/spadderpy/plugin/spadderPlugin.py
src/Tools/padder/unittests/usecase_meshJobManager.py
src/Tools/padder/unittests/usecase_spadderPluginTester.py
src/Tools/smesh_plugins.py

index 083efdcec8cb26abf18de25cd763e01771423cda..b207ae53e6f982c57d1ec91f96db9a366da3fd14 100755 (executable)
@@ -301,7 +301,7 @@ INCLUDE(CMakePackageConfigHelpers)
 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
 SET(_${PROJECT_NAME}_exposed_targets 
   SMESHControls MeshDriver MeshDriverDAT MeshDriverGMF MeshDriverMED
-  MeshDriverSTL MeshDriverUNV MEDWrapperBase MEDWrapper MEDWrapper_V2_2
+  MeshDriverSTL MeshDriverUNV MEDWrapper
   SMDS SMESHimpl SMESHEngine SMESHClient SMESHDS
   SMESHUtils StdMeshers StdMeshersEngine MeshJobManagerEngine
   SPADDERPluginTesterEngine SalomeIDLSMESH SalomeIDLSPADDER
index 7ff429caf41dff8191ddc3a50e380dc6499ed54d..0012b2f6b022a1cf587b64f0afa18baeac71dbb9 100644 (file)
@@ -138,9 +138,7 @@ SET(SMESH_MeshDriverGMF MeshDriverGMF)
 SET(SMESH_MeshDriverMED MeshDriverMED)
 SET(SMESH_MeshDriverSTL MeshDriverSTL)
 SET(SMESH_MeshDriverUNV MeshDriverUNV)
-SET(SMESH_MEDWrapperBase MEDWrapperBase)
 SET(SMESH_MEDWrapper MEDWrapper)
-SET(SMESH_MEDWrapper_V2_2 MEDWrapper_V2_2)
 IF(SALOME_SMESH_ENABLE_MEFISTO)
   SET(SMESH_MEFISTO2D MEFISTO2D)
 ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
index 8c888cb9ede14b2d161c77d199e44348ebcebc77..a2af9d7160a6bd9a81bb9be8fce335eaa3f9f58b 100644 (file)
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-#  -*- coding: iso-8859-1 -*-
+#!/usr/bin/env python3
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
@@ -30,7 +29,7 @@ def set_env(args):
     python_version="python%d.%d" % sys.version_info[0:2]
 
 
-    if not os.environ.has_key("SALOME_StdMeshersResources"):
+    if "SALOME_StdMeshersResources" not in os.environ:
         os.environ["SALOME_StdMeshersResources"] \
         = os.path.join(os.environ["SMESH_ROOT_DIR"],"share",salome_subdir,"resources","smesh")
         pass
@@ -38,7 +37,7 @@ def set_env(args):
     # find plugins
     plugin_list = ["StdMeshers"]
     resource_path_list = []
-    for env_var in os.environ.keys():
+    for env_var in list(os.environ.keys()):
         value = os.environ[env_var]
         if env_var[-9:] == "_ROOT_DIR" and value:
             plugin_root = value
@@ -60,14 +59,14 @@ def set_env(args):
                 if plugin in plugin_list: continue
 
                 # add paths of plugin
-               plugin_list.append(plugin)
-                if not os.environ.has_key("SALOME_"+plugin+"Resources"):
+                plugin_list.append(plugin)
+                if "SALOME_"+plugin+"Resources" not in os.environ:
                     resource_path = os.path.join(plugin_root,"share",salome_subdir,"resources",plugin.lower())
                     os.environ["SALOME_"+plugin+"Resources"] = resource_path
                     resource_path_list.append( resource_path )
                     add_path(os.path.join(plugin_root,get_lib_dir(),python_version, "site-packages",salome_subdir), "PYTHONPATH")
                     add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "PYTHONPATH")
-                    
+
                     if sys.platform == "win32":
                         add_path(os.path.join(plugin_root,get_lib_dir(),salome_subdir), "PATH")
                         add_path(os.path.join(plugin_root,"bin",salome_subdir), "PYTHONPATH")
@@ -80,4 +79,3 @@ def set_env(args):
                 break
     os.environ["SMESH_MeshersList"] = ":".join(plugin_list)
     os.environ["SalomeAppConfig"] = os.environ["SalomeAppConfig"] + psep + psep.join(resource_path_list)
-
index 47383fee949f4dd77b97f7b85292073caff4e7e3..04d6073bdb2adb486e8850e0ff6338214ac9c90d 100644 (file)
@@ -3,11 +3,11 @@
 import salome
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 ###
 # Geometry: an assembly of a box, a cylinder and a truncated cone
index 5520d7afe9089ca3660ff1f3b031a5828debb274..ae03906c89068e7861633390ead318d182009078 100644 (file)
@@ -2,7 +2,7 @@ import salome
 salome.salome_init()
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 # This script demonstrates generation of 3D mesh basing on a modified 2D mesh
 #
@@ -31,7 +31,7 @@ Sph_Face = geompy.GetInPlace(Cut_1, Sph_Face, isNewImplementation=True, theName=
 
 import  SMESH
 from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New(salome.myStudy)
+smesh = smeshBuilder.New()
 
 Mesh_1 = smesh.Mesh(Cut_1)
 
@@ -59,4 +59,4 @@ Mesh_1.Tetrahedron()
 Mesh_1.Compute()
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index e5651cb670a2a96a2e9c8492e8220d647ddd0582..e9d7748c7319a8ce0b0f620b753492ac0b1d6038 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -22,23 +22,23 @@ mesh = smesh.Mesh( sphere )
 cartAlgo = mesh.BodyFitted()
 
 # define a cartesian grid using Coordinates
-coords = range(-100,100,10)
+coords = list(range(-100,100,10))
 cartHyp = cartAlgo.SetGrid( coords,coords,coords, 1000000)
 
 # compute the mesh
 mesh.Compute()
-print "nb hexahedra",mesh.NbHexas()
-print "nb tetrahedra",mesh.NbTetras()
-print "nb polyhedra",mesh.NbPolyhedrons()
-print
+print("nb hexahedra",mesh.NbHexas())
+print("nb tetrahedra",mesh.NbTetras())
+print("nb polyhedra",mesh.NbPolyhedrons())
+print()
 
 # define the grid by setting constant spacing
 cartHyp = cartAlgo.SetGrid( "10","10","10", 1000000)
 
 mesh.Compute()
-print "nb hexahedra",mesh.NbHexas()
-print "nb tetrahedra",mesh.NbTetras()
-print "nb polyhedra",mesh.NbPolyhedrons()
+print("nb hexahedra",mesh.NbHexas())
+print("nb tetrahedra",mesh.NbTetras())
+print("nb polyhedra",mesh.NbPolyhedrons())
 
 
 # define the grid by setting different spacing in 2 sub-ranges of geometry
@@ -46,10 +46,10 @@ spaceFuns = ["5","10+10*t"]
 cartAlgo.SetGrid( [spaceFuns, [0.5]], [spaceFuns, [0.5]], [spaceFuns, [0.25]], 10 )
 
 mesh.Compute()
-print "nb hexahedra",mesh.NbHexas()
-print "nb tetrahedra",mesh.NbTetras()
-print "nb polyhedra",mesh.NbPolyhedrons()
-print
+print("nb hexahedra",mesh.NbHexas())
+print("nb tetrahedra",mesh.NbTetras())
+print("nb polyhedra",mesh.NbPolyhedrons())
+print()
 
 # Example of customization of dirtections of the grid axes
 
@@ -67,23 +67,23 @@ mesh = smesh.Mesh( box, "custom axes")
 algo = mesh.BodyFitted()
 algo.SetGrid( spc, spc, spc, 10000 )
 mesh.Compute()
-print "Default axes"
-print "   nb hex:",mesh.NbHexas()
+print("Default axes")
+print("   nb hex:",mesh.NbHexas())
 
 # set axes using edges of the box
 algo.SetAxesDirs( xDir, [-0.1,1,0], zDir )
 mesh.Compute()
-print "Manual axes"
-print "   nb hex:",mesh.NbHexas()
+print("Manual axes")
+print("   nb hex:",mesh.NbHexas())
 
 # set optimal orthogonal axes
 algo.SetOptimalAxesDirs( isOrthogonal=True )
 mesh.Compute()
-print "Optimal orthogonal axes"
-print "   nb hex:",mesh.NbHexas()
+print("Optimal orthogonal axes")
+print("   nb hex:",mesh.NbHexas())
 
 # set optimal non-orthogonal axes
 algo.SetOptimalAxesDirs( isOrthogonal=False )
 mesh.Compute()
-print "Optimal non-orthogonal axes"
-print "   nb hex:",mesh.NbHexas()
+print("Optimal non-orthogonal axes")
+print("   nb hex:",mesh.NbHexas())
index 60b1b617ccd0ab25801564148063557b7d64ac2a..9e7ec271a1c5d761d95327f61aa50ce891cc11da 100644 (file)
@@ -4,12 +4,11 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 unPentaBiQuad = smesh.Mesh()
 nodeID = unPentaBiQuad.AddNode( 0, 0, 0 )
 nodeID = unPentaBiQuad.AddNode( 10, 0, 0 )
@@ -32,7 +31,7 @@ nodeID = unPentaBiQuad.AddNode( -1, 5, 5 )
 volID = unPentaBiQuad.AddVolume( [ 4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9, 13, 14, 15, 16, 17, 18 ] )
 
 infos = unPentaBiQuad.GetMeshInfo()
-print "Number of biquadratic pentahedrons:", infos[SMESH.Entity_BiQuad_Penta]
+print("Number of biquadratic pentahedrons:", infos[SMESH.Entity_BiQuad_Penta])
 if (infos[SMESH.Entity_BiQuad_Penta] != 1):
   raise RuntimeError("Bad number of biquadratic pentahedrons: should be 1")
 
@@ -40,4 +39,4 @@ if (infos[SMESH.Entity_BiQuad_Penta] != 1):
 smesh.SetName(unPentaBiQuad.GetMesh(), 'unPentaBiQuad')
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index f328d0582e19ccf5bbd6199beef539fa537d20f0..110f6269a74f09e989e2ce0c5f45812af502f25e 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
@@ -29,7 +29,7 @@ algo3D.MaxElementVolume(900.)
 # compute the mesh
 ret = tetra.Compute()
 if ret == 0:
-    print "problem when computing the mesh"
+    print("problem when computing the mesh")
 else:
-    print "mesh computed"
+    print("mesh computed")
     pass
index 230e67a00f8f9ec9886c5288fc37d5941c5d3677..522f72bf4c1d05a2d0fd6e7d27618766e5d7ccb7 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
index 30d263caaa2ed7f6a65cd90980afcd508c426427..42bf8c91a40b10a63def6afdb76b89f9b6528c4e 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
 [Face_1,Face_2,Face_3,Face_4,Face_5,Face_6] = geompy.SubShapeAllSorted(Box_1, geompy.ShapeType["FACE"])
@@ -45,15 +45,15 @@ SubMesh_3 = MEFISTO_2D_3.GetSubMesh()
 # check existing sub-mesh priority order
 [ [ SubMesh_1, SubMesh_3, SubMesh_2 ] ] = Mesh_1.GetMeshOrder()
 isDone = Mesh_1.Compute()
-print "Nb elements at initial order of sub-meshes:", Mesh_1.NbElements()
+print("Nb elements at initial order of sub-meshes:", Mesh_1.NbElements())
 
 # set new sub-mesh order
 isDone = Mesh_1.SetMeshOrder( [ [ SubMesh_1, SubMesh_2, SubMesh_3 ] ])
 # compute mesh
 isDone = Mesh_1.Compute()
-print "Nb elements at new order of sub-meshes:", Mesh_1.NbElements()
+print("Nb elements at new order of sub-meshes:", Mesh_1.NbElements())
 
 # compute with other sub-mesh order
 isDone = Mesh_1.SetMeshOrder( [ [ SubMesh_2, SubMesh_1, SubMesh_3 ] ])
 isDone = Mesh_1.Compute()
-print "Nb elements at another order of sub-meshes:", Mesh_1.NbElements()
+print("Nb elements at another order of sub-meshes:", Mesh_1.NbElements())
index 82408d5a3e5da222e9cc6863f046ed4f703f2a5d..0a3cc9faf13f710919c02622eb7f73b3124a7028 100644 (file)
@@ -4,19 +4,19 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 def PrintMeshInfo(theMesh):
     aMesh = theMesh.GetMesh()
-    print "Information about mesh:"
-    print "Number of nodes       : ", aMesh.NbNodes()
-    print "Number of edges       : ", aMesh.NbEdges()
-    print "Number of faces       : ", aMesh.NbFaces()
-    print "Number of volumes     : ", aMesh.NbVolumes()
+    print("Information about mesh:")
+    print("Number of nodes       : ", aMesh.NbNodes())
+    print("Number of edges       : ", aMesh.NbEdges())
+    print("Number of faces       : ", aMesh.NbFaces())
+    print("Number of volumes     : ", aMesh.NbVolumes())
     pass
 
 # create a box
index ae1d073b4260139f5deb0c7502f018dae48cbbcd..6eb550c9ce338e741509375d91016471a6af7ed8 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
@@ -47,12 +47,12 @@ import MEDLoader, os
 # on XOY plane, and autoDimension=True by default
 mesh2D.ExportMED( medFile )
 medMesh = MEDLoader.MEDLoader.ReadUMeshFromFile(medFile,mesh2D.GetName(),0)
-print "autoDimension==True, exported mesh is in %sD"%medMesh.getSpaceDimension()
+print("autoDimension==True, exported mesh is in %sD"%medMesh.getSpaceDimension())
 
 # exported mesh is in 3D space, same as in Mesh module,
 # thanks to autoDimension=False
 mesh2D.ExportMED( medFile, autoDimension=False )
 medMesh = MEDLoader.MEDLoader.ReadUMeshFromFile(medFile,mesh2D.GetName(),0)
-print "autoDimension==False, exported mesh is in %sD"%medMesh.getSpaceDimension()
+print("autoDimension==False, exported mesh is in %sD"%medMesh.getSpaceDimension())
 
 os.remove( medFile )
index 90fe2765e5b6b636bfedc6d5eb8ded6fd86eb14a..3cc4dc1023d98decd129ae2f8b66bf58b4ed444f 100644 (file)
@@ -8,11 +8,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -84,7 +84,7 @@ geompy.DifferenceList(group_1, [group_1_box])
 # Mesh the blocks with hexahedral
 # -------------------------------
 
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 def discretize(x, y, z,  nbSeg, shape=blocks):
     vert = geompy.MakeVertex( x, y, z )
index 4ddb69702ac8697566ef2d860b3353d0d890deec..db825507bef1abb08950b2c1c542778596744d81 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 ## create a bottom box
 Box_inf = geompy.MakeBox(0., 0., 0., 200., 200., 50.)
@@ -39,7 +39,7 @@ geompy.addToStudy(Box_sup, "Box_sup")
 geompy.addToStudyInFather(Box_sup, Fsup2, "Fsup")
 geompy.addToStudyInFather(Box_sup, Finf2, "Finf")
 
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 ## create a bottom mesh
 Mesh_inf = smesh.Mesh(Box_inf, "Mesh_inf")
@@ -78,4 +78,4 @@ Compound2 = smesh.Concatenate([Mesh_inf, Mesh_sup], 1, 0, 1e-05, True,
                               name='Compound with UniteGrps and GrpsOfAllElems')
 
 if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
+    salome.sg.updateObjBrowser()
index 0cb4b229f54375aa01601e9d9bf1a6260e84d118..7fa7a7dcffc3161a293aa5e6a3624c2c5608166e 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # make geometry of a box
 box = geompy.MakeBoxDXDYDZ(100,100,100)
index 96e2fabfe1912ce45ff7bcdad8640cd474d92771..579d14de5fc5eb1b7db98e7c1c76160f73ede789 100644 (file)
@@ -1,9 +1,9 @@
 import salome, math
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 box   = geompy.MakeBoxDXDYDZ( 100, 100, 100 )
index c9f02bc12a2a7a1ac717e974c5bc72245cb6abbf..a4083ba4934b66f69906f097d3c8b50f7930e2fd 100644 (file)
@@ -4,10 +4,10 @@ import salome
 salome.salome_init()
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
index 572404569d8f53c16feb88a1eb40316e787f574c..9473354b3733b2a868c419dba5ea758f85a2400d 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a face from arc and straight segment
 px = geompy.MakeVertex(100., 0.  , 0.  )
index 05a984b77d2f68cf296e6ccfd5dff0959c1cf3cd..3e0a5a7defa0305b8bcab7b0047620395c899adf 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
index 8ebddfc5c3fd32d58a57fd9d9902ced2ddd71cf1..c15e4421bf2fc0cc7efb69216994f9e43b379fcb 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
index 204496ce039b7803cfda6d7611052b4ce996b094..d998447184cc5e6efb400c60ddd83273584d5ac9 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a face
 px   = geompy.MakeVertex(100., 0.  , 0.  )
index 495067aa6e5a909bcc3345337522a713459691ec..f0a02aee40a678cce4934509b6c000e6fe425ef7 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a cylinder
 cyl = geompy.MakeCylinderRH(30., 50.)
@@ -32,6 +32,6 @@ algo3D.MaxElementVolume(200.)
 # compute the mesh
 ret = tetra.Compute()
 if ret == 0:
-    print "problem when computing the mesh"
+    print("problem when computing the mesh")
 else:
-    print "Computation succeeded"
+    print("Computation succeeded")
index 1630a9047e757f61e3c2b606c565c7de857f12f9..a8a8e9fd2ef9041241ca9c921836f87fd4b4a952 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create sketchers
 sketcher1 = geompy.MakeSketcher("Sketcher:F 0 0:TT 70 0:TT 70 70:TT 0 70:WW")
index 3c877f3dae45e8a6edf4e58273178c8c17725508..285eae2ad63f29e0c67f65e220dfad39d51f241f 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 base = geompy.MakeSketcher("Sketcher:F 0 0:TT 10 0:TT 20 10:TT 0 10:WF", theName="F")
index 8490a4b8c753ba679727cab2ec80da62818640b8..6e86cc95ea7c7bf6d955c4a5a94610d500cb713e 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
index 6e6bf84bbc185d38dc8616ec9143a892d4055822..9fea80b144c82531ea5b1b7cff2e98cfa8b3bfe3 100644 (file)
@@ -6,11 +6,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Prepare geometry
 
index 2510ed6f0b75275e70dd9dd6196aaaee79dc203f..a57d0781dd5784c335893ca02d172433589e2f43 100644 (file)
@@ -6,11 +6,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Prepare geometry
 
index 827c4c5e2d4d02d6d6205c7573ccf60af2dca203..7ead18cbf3b81ea45db38ee1e4afdaf27c683198 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 
 # Create face and explode it on edges
index 339cd200d4e62d56127d5036b2838726dbfdb5b8..0bcdcf60a2bc2b777cf8576d8c4fdcf2f743b0fd 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Create face from the wire and add to study
 Face = geompy.MakeSketcher("Sketcher:F 0 0:TT 20 0:R 90:C 20 90:WF", [0, 0, 0, 1, 0, 0, 0, 0, 1])
index 3f55844cff79e68af6171aa669e98dcff52a7b0b..b0ef9f6af9b8f0054d65f6d70dd033ca5fc64fba 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Get 1/4 part from the disk face.
 Box_1 = geompy.MakeBoxDXDYDZ(100, 100, 100)
index 2e01e1b323114c76c004d8f1a136b0aa4ef38e8c..80b430e2a608a90c328942e91ceccc238227d192 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 
 # Make quadrangle face and explode it on edges.
index ce11e3e400821e463ca833a689a03736e202757f..575601f1ef18da00b548e86878f3112c6ef8ad9d 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Make a patritioned box
 
index 36d8f6c1f4f2e091cd456e00e7a7a9c23f21e147..f2b7d8c20f4f21207ef87ac3a0e2c92ddcb80820 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 X = geompy.MakeVectorDXDYDZ( 1,0,0 )
 O = geompy.MakeVertex( 100,50,50 )
index 530d39cd766eef265f0aab9964f06fe40398eabb..0a9c67b1b8f742df37353b0960c1ef6463187815 100644 (file)
@@ -34,4 +34,4 @@ Mesh_1.MakePolyLine( segments, "1D group")
 
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 90cc2087e690861558382500b54715d8ff382095..b98f8cd4bbdd0c739446f59dfa4fef9f23ef9969 100644 (file)
@@ -4,14 +4,13 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import GEOM
 from salome.geom import geomBuilder
 import math
 import SALOMEDS
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -27,7 +26,7 @@ geompy.addToStudy( Divided_Disk_1, 'Divided Disk_1' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 aFilterManager = smesh.CreateFilterManager()
 Mesh_1 = smesh.Mesh(Divided_Disk_1)
 Regular_1D = Mesh_1.Segment()
@@ -40,7 +39,7 @@ Mesh_1.ExtrusionSweepObjects( [ Mesh_1 ], [ Mesh_1 ], [ Mesh_1 ], [ 0, 0, 50 ],
 Mesh_1.ConvertToQuadratic(0, Mesh_1,True)
 
 infos = Mesh_1.GetMeshInfo()
-print "Number of biquadratic pentahedrons:", infos[SMESH.Entity_BiQuad_Penta]
+print("Number of biquadratic pentahedrons:", infos[SMESH.Entity_BiQuad_Penta])
 if (infos[SMESH.Entity_BiQuad_Penta] != 1080):
   raise RuntimeError("Bad number of biquadratic pentahedrons: should be 1080")
   
@@ -52,4 +51,4 @@ smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
 
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index f500d1b145c87abdab6c4b7e4018654acb1f50f3..b3b5b61b7c8c8b9e16502c0e6745c94683a8e1d8 100644 (file)
@@ -2,11 +2,11 @@
 
 # create mesh
 from SMESH_mechanic import *
-print
+print()
 
 # create a group of all faces (quadrangles) generated on sub_face3
 quads_on_face3 = mesh.MakeGroup("quads_on_face3", SMESH.FACE, SMESH.FT_BelongToGeom,'=',sub_face3)
-print "There are %s quadrangles generated on '%s' and included in the group '%s'" % ( quads_on_face3.Size(), sub_face3.GetName(), quads_on_face3.GetName() )
+print("There are %s quadrangles generated on '%s' and included in the group '%s'" % ( quads_on_face3.Size(), sub_face3.GetName(), quads_on_face3.GetName() ))
 
 # create a group of all the rest quadrangles, generated on other faces by combining 2 criteria:
 # - negated FT_BelongToMeshGroup to select elements not included in quads_on_face3
@@ -15,5 +15,5 @@ not_on_face3 = smesh.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=',qu
 quadrangles  = smesh.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=',SMESH.Geom_QUADRANGLE )
 
 rest_quads = mesh.MakeGroupByCriteria("rest_quads", [ not_on_face3, quadrangles ])
-print "'%s' group includes all the rest %s quadrangles" % ( rest_quads.GetName(), rest_quads.Size() )
+print("'%s' group includes all the rest %s quadrangles" % ( rest_quads.GetName(), rest_quads.Size() ))
 
index 9ee7ce8521df9a58c1bc95032ece239dac750433..f323ecb768c0b8a9569c23eec250e77c95944c26 100644 (file)
@@ -7,38 +7,38 @@ from SMESH_mechanic import *
 # get faces with aspect ratio > 2.5
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 2.5)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with aspect ratio > 2.5:", len(ids)
+print("Number of faces with aspect ratio > 2.5:", len(ids))
 
 # get faces with aspect ratio > 1.5
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, '>', 1.5, mesh=mesh)
 ids = filter.GetIDs()
-print "Number of faces with aspect ratio > 1.5:", len(ids)
+print("Number of faces with aspect ratio > 1.5:", len(ids))
 
 # copy the faces with aspect ratio > 1.5 to another mesh;
 # this demonstrates that a filter can be used where usually a group or sub-mesh is acceptable
 filter.SetMesh( mesh.GetMesh() ) # - actually non necessary as mesh is set at filter creation
 mesh2 = smesh.CopyMesh( filter, "AR > 1.5" )
-print "Number of copied faces with aspect ratio > 1.5:", mesh2.NbFaces()
+print("Number of copied faces with aspect ratio > 1.5:", mesh2.NbFaces())
 
 # create a group (Group on Filter) of faces with Aspect Ratio < 1.5
 group = mesh.MakeGroup("AR < 1.5", SMESH.FACE, SMESH.FT_AspectRatio, '<', 1.5)
-print "Number of faces with aspect ratio < 1.5:", group.Size()
+print("Number of faces with aspect ratio < 1.5:", group.Size())
 
 # combine several criteria to Create a Group of only Triangular faces with Aspect Ratio < 1.5;
 # note that contents of a GroupOnFilter is dynamically updated as the mesh changes
 crit = [ smesh.GetCriterion( SMESH.FACE, SMESH.FT_AspectRatio, '<', 1.5, BinaryOp=SMESH.FT_LogicalAND ),
          smesh.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=', SMESH.Geom_TRIANGLE ) ]
 triaGroup = mesh.MakeGroupByCriteria( "Tria AR < 1.5", crit )
-print "Number of triangles with aspect ratio < 1.5:", triaGroup.Size()
+print("Number of triangles with aspect ratio < 1.5:", triaGroup.Size())
 
 # get range of values of Aspect Ratio of all faces in the mesh
 aspects = mesh.GetMinMax( SMESH.FT_AspectRatio )
-print "MESH: Min aspect = %s, Max aspect = %s" % ( aspects[0], aspects[1] )
+print("MESH: Min aspect = %s, Max aspect = %s" % ( aspects[0], aspects[1] ))
 
 # get max value of Aspect Ratio of faces in triaGroup
 grAspects = mesh.GetMinMax( SMESH.FT_AspectRatio, triaGroup )
-print "GROUP: Max aspect = %s" % grAspects[1]
+print("GROUP: Max aspect = %s" % grAspects[1])
 
 # get Aspect Ratio of an element
 aspect = mesh.FunctorValue( SMESH.FT_AspectRatio, ids[0] )
-print "Aspect ratio of the face %s = %s" % ( ids[0], aspect )
+print("Aspect ratio of the face %s = %s" % ( ids[0], aspect ))
index 5709ef4b04440312c1f579fff1360308b1f15947..6a392ce41e7f6e887057835317c1a8a972d928e6 100644 (file)
@@ -7,4 +7,4 @@ mesh.Compute()
 # get volumes with aspect ratio < 2.0
 filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_AspectRatio3D, SMESH.FT_LessThan, 2.0)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of volumes with aspect ratio < 2.0:", len(ids)
+print("Number of volumes with aspect ratio < 2.0:", len(ids))
index 9d5467e6fe638ca80ef2ec3843048a9abea8f68d..e01b60df506121b30f309a5b354ef049751a5dca 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get faces with warping angle = 2.0e-13 with tolerance 5.0e-14
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Warping, "=", 2.0e-13, Tolerance=5.0e-14)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with warping angle = 2.0e-13 (tolerance 5.0e-14):", len(ids)
+print("Number of faces with warping angle = 2.0e-13 (tolerance 5.0e-14):", len(ids))
index fef619c80bf39ebf350934addd4679b7628907d9..2b274837a1541d71ce2e59cf28eb3d8bd3ad1c40 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get faces with minimum angle > 75
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MinimumAngle,">", 75)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with minimum angle > 75:", len(ids)
+print("Number of faces with minimum angle > 75:", len(ids))
index c1c185275c448da0dee9e05ef935f9cfc185f619..c470db6bccb0a1c439bf540b07a078b016526dc1 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get faces with taper < 1.e-15
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Taper, SMESH.FT_LessThan, 1.e-15)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with taper < 1.e-15:", len(ids)
+print("Number of faces with taper < 1.e-15:", len(ids))
index 610a9a9e84da63bfc4dcd1c128205590b78aa9de..94666f70c1a57a416c59135928063f58e56c6b99 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get faces with skew > 50
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreThan, 50)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with skew > 50:", len(ids)
+print("Number of faces with skew > 50:", len(ids))
index 3afee5e1a705b941b5591b6146c5af90b5f8823b..7d781dc226a27f817c00a990a1f647560a8f371a 100644 (file)
@@ -7,4 +7,4 @@ criterion1 = smesh.GetCriterion(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 60
 criterion2 = smesh.GetCriterion(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 90)
 filter = smesh.GetFilterFromCriteria([criterion1,criterion2], SMESH.FT_LogicalAND)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with area in range (60,90):", len(ids)
+print("Number of faces with area in range (60,90):", len(ids))
index d87f974536acd273cad7b9dc82ce6db7efc4e8ce..479de961e7c061f56bf537826163930a12ef8da7 100644 (file)
@@ -7,4 +7,4 @@ mesh.Compute()
 # get volumes faces with volume > 100
 filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_Volume3D, SMESH.FT_MoreThan, 100)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of volumes with volume > 100:", len(ids)
+print("Number of volumes with volume > 100:", len(ids))
index 032d55ddda5f6b4f2c239f727c00908adeed016d..21c1d6c94795c94b828fc8b1e1c75b238c366528 100644 (file)
@@ -4,9 +4,9 @@
 import salome, SMESH
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create mesh
 face = geompy.MakeFaceHW(100, 100, 1, theName="quadrangle")
@@ -18,4 +18,4 @@ mesh.Compute()
 # get all free borders
 filter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_FreeBorders)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of edges on free borders:", len(ids)
+print("Number of edges on free borders:", len(ids))
index bf6f7419bb9de4a1c4f6821cb538c2bbed1b38af..d1f5023eb70ad4b36ea6b7600a54946da225fdf6 100644 (file)
@@ -4,9 +4,9 @@
 import salome, SMESH
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create mesh
 face = geompy.MakeFaceHW(100, 100, 1)
@@ -19,4 +19,4 @@ mesh.Compute()
 # get all faces with free edges
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_FreeEdges)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with free edges:", len(ids)
+print("Number of faces with free edges:", len(ids))
index 5f1bf4c68a5cf726479bf1d10386737801156d52..47b62e2825a9c737857174101aee73ec45edff85 100644 (file)
@@ -7,4 +7,4 @@ mesh.AddNode(0,0,0)
 # get all free nodes
 filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_FreeNodes)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of free nodes:", len(ids)
+print("Number of free nodes:", len(ids))
index a1f20dcf35681b3d2ebbc2ce0d84d003c522e6fa..5dfd81ad453fca706b0f672c78fa0abcf276ee0e 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get all free faces
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_FreeFaces)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of free faces:", len(ids)
+print("Number of free faces:", len(ids))
index 8d8077083042963ac8c2101c21e268149d518b18..ae64b565a63f30770db16ce2e88dddbb9249f987 100644 (file)
@@ -7,4 +7,4 @@ mesh.RemoveElements( mesh.GetElementsByType(SMESH.FACE)[0:5] )
 # get all faces with bare borders
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BareBorderFace)
 ids = mesh.GetIdsFromFilter(filter)
-print "Faces with bare borders:", ids
+print("Faces with bare borders:", ids)
index a9021f98ce67f9411552866d5e293dbd87b154c2..2e68ae8f2db64e6109a62d93a3e75258cfa2d8dd 100644 (file)
@@ -6,4 +6,4 @@ faceID = mesh.GetElementsByType(SMESH.FACE)[0]
 # get all faces co-planar to the first face with tolerance 5 degrees
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_CoplanarFaces,faceID,Tolerance=5.0)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces coplanar with the first one:", len(ids)
+print("Number of faces coplanar with the first one:", len(ids))
index 3f1344704c45bca4265c399fdee9b95a760e2a2f..70c8cae5cd1b6daf1ca380994fb481dabb848b59 100644 (file)
@@ -4,4 +4,4 @@ from SMESH_mechanic import *
 # get all over-constrained faces
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_OverConstrainedFace)
 ids = mesh.GetIdsFromFilter(filter)
-print "Over-constrained faces:", ids
+print("Over-constrained faces:", ids)
index bdca2d86a14d5a41df283d52ddf616c4c40cb351..e417ca2fa31d8d08a0335f8f4ee115b50ca503ea 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 # make a mesh on a box
@@ -27,6 +27,6 @@ equalEdgesFilter   = smesh.GetFilter(SMESH.EDGE, SMESH.FT_EqualEdges)
 equalFacesFilter   = smesh.GetFilter(SMESH.FACE, SMESH.FT_EqualFaces)
 equalVolumesFilter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_EqualVolumes)
 # get equal elements
-print "Number of equal edges:",   len( mesh.GetIdsFromFilter( equalEdgesFilter ))
-print "Number of equal faces:",   len( mesh.GetIdsFromFilter( equalFacesFilter ))
-print "Number of equal volumes:", len( mesh.GetIdsFromFilter( equalVolumesFilter ))
+print("Number of equal edges:",   len( mesh.GetIdsFromFilter( equalEdgesFilter )))
+print("Number of equal faces:",   len( mesh.GetIdsFromFilter( equalFacesFilter )))
+print("Number of equal volumes:", len( mesh.GetIdsFromFilter( equalVolumesFilter )))
index 9dc01b49c49bb495b2ac56f4e16314b1ea7a4069..a05fbaa210792c2386ba139c3efd56e3eab5df11 100644 (file)
@@ -3,10 +3,10 @@
 import salome
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 import SMESH
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # make a mesh on a box
 box = geompy.MakeBoxDXDYDZ(100,100,100)
@@ -20,4 +20,4 @@ mesh.TranslateObject( mesh, [10,0,0], Copy=True )
 # create  a filter to find nodes equal within tolerance of 1e-5
 filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_EqualNodes, Tolerance=1e-5)
 # get equal nodes
-print "Number of equal nodes:", len( mesh.GetIdsFromFilter( filter ))
+print("Number of equal nodes:", len( mesh.GetIdsFromFilter( filter )))
index 32950cc50302504776e80f81f7fb4cdd94962ff2..6fcba2650c1bc4c0f2f038d4153bdfc8e49eb5f1 100644 (file)
@@ -3,10 +3,10 @@
 import salome
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 import SMESH
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # make a mesh on a box
 box = geompy.MakeBoxDXDYDZ(100,100,100)
@@ -22,4 +22,4 @@ mesh.MergeNodes( mesh.FindCoincidentNodes( 1e-5 ))
 # get mesh edges with number of connected elements (faces and volumes) == 3
 filter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_MultiConnection, 3)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of border edges with 3 faces connected:", len(ids)
+print("Number of border edges with 3 faces connected:", len(ids))
index 3ac78794fa9e4081850a812d723d47df3b7c3fc6..cb1c545a353e130478a74aad6c905fcaf65d1d16 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get faces which consist of edges belonging to 2 mesh elements
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MultiConnection2D, 2)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces consisting of edges belonging to 2 faces:", len(ids)
+print("Number of faces consisting of edges belonging to 2 faces:", len(ids))
index 1bdc00b535cbde8a19932855f5fc11477538d563..c55b56b23ef8f72c143c521b1957f99cd90702de 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get edges with length > 14
 filter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_Length, SMESH.FT_MoreThan, 14)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of edges with length > 14:", len(ids)
+print("Number of edges with length > 14:", len(ids))
index 79c88434bbae5291907d5a0f0eded07ad39a63a8..81d408701847302801c6cd2eb78561abf71fd0d9 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get all faces that have edges with length > 14
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Length2D, SMESH.FT_MoreThan, 14)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with maximum edge length > 14:", len(ids)
+print("Number of faces with maximum edge length > 14:", len(ids))
index 0271110fe854e92b401eacae2ad62ebacc3f8ab9..cb7971bd6962fb9b26b80bc8f4288b361ba45607 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get all faces that have elements with length > 10
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_MoreThan, 10)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces with maximum element length > 10:", len(ids)
+print("Number of faces with maximum element length > 10:", len(ids))
index 49569dfe8f977acc1cca0bee627e416c188230e0..8c995090b9fa2845f92a01bb8672e8ad0916c477 100644 (file)
@@ -7,4 +7,4 @@ mesh.Compute()
 # get all volumes that have elements with length > 10
 filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_MaxElementLength3D, SMESH.FT_MoreThan, 10)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of volumes with maximum element length > 10:", len(ids)
+print("Number of volumes with maximum element length > 10:", len(ids))
index bab47e2a7f5da58fce099f495d322428196db7cc..ffe9226915d2cdda61e0c5517bea0133e8a28e82 100644 (file)
@@ -5,8 +5,8 @@ from SMESH_mechanic import *
 mesh.Tetrahedron()
 mesh.Compute()
 # remove some volumes to have volumes with bare borders
-mesh.RemoveElements( mesh.GetElementsByType(VOLUME)[0:5] )
+mesh.RemoveElements(mesh.GetElementsByType(SMESH.VOLUME)[0:5])
 # get all volumes with bare borders
 filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_BareBorderVolume)
 ids = mesh.GetIdsFromFilter(filter)
-print "Volumes with bare borders:", ids
+print("Volumes with bare borders:", ids)
index 06862c75fa356cb087ba7fc062970e9ed49eca5a..f3083f7fbef88413bf47fb68839e56ecbc7f2736 100644 (file)
@@ -7,4 +7,4 @@ mesh.Compute()
 # get all over-constrained volumes
 filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_OverConstrainedVolume)
 ids = mesh.GetIdsFromFilter(filter)
-print "Over-constrained volumes:", ids
+print("Over-constrained volumes:", ids)
index d544466e45db66cd39471c60b8909c3e6fd320ba..ea7cff8acf59dcc6d98988ba79565c224d4ca66e 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get all faces which nodes lie on the face sub_face3
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BelongToGeom, sub_face3)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces which nodes lie on sub_face3:", len(ids)
+print("Number of faces which nodes lie on sub_face3:", len(ids))
index 4c38bd92f2857a1934a714a4742cb5849c576be2..e05ecbeff14b1c0ac2a405c2cea301fa2e2e8d81 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get all faces at least one node of each lies on the face sub_face3
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_LyingOnGeom, sub_face3)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces at least one node of each lies on sub_face3:", len(ids)
+print("Number of faces at least one node of each lies on sub_face3:", len(ids))
index 12da64cc707a2c4c056c68a4aa07264f18ad4952..f0382ac65e26b5007b3b0f2a473259a19fb8ec77 100644 (file)
@@ -8,4 +8,4 @@ geompy.addToStudy(plane_1, "plane_1")
 # get all nodes which lie on the plane \a plane_1
 filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_BelongToPlane, plane_1)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of nodes which lie on the plane plane_1:", len(ids)
+print("Number of nodes which lie on the plane plane_1:", len(ids))
index b4a454ad72eb0ed3a2a8983031e2da958e4c9fa3..e6b817a4c27d9e8c226d120e4aa68bd058e5f617 100644 (file)
@@ -5,4 +5,4 @@ from SMESH_mechanic import *
 # get all faces which lie on the cylindrical face \a sub_face1
 filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BelongToCylinder, sub_face1)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of faces which lie on the cylindrical surface sub_face1:", len(ids)
+print("Number of faces which lie on the cylindrical surface sub_face1:", len(ids))
index 9d161a763715dbfde81625189d0d9ecaa277303b..856010b9d9168932a445d5a7abeeb79ff16ca790 100644 (file)
@@ -9,4 +9,4 @@ geompy.addToStudy(surface_1, "surface_1")
 # get all nodes which lie on the surface \a surface_1
 filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_BelongToGenSurface, surface_1)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of nodes which lie on the surface surface_1:", len(ids)
+print("Number of nodes which lie on the surface surface_1:", len(ids))
index ea9b99e0e7b12604353614d4c4184f6a3c6c36e0..209bb9f77f124b2c5232125e2bf00f721c43da04 100644 (file)
@@ -9,4 +9,4 @@ criterion2 = smesh.GetCriterion(SMESH.NODE, SMESH.FT_RangeOfIds, Threshold="15-3
 filter = smesh.CreateFilterManager().CreateFilter()
 filter.SetCriteria([criterion1,criterion2])
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of nodes in ranges [5-10] and [15-30]:", len(ids)
+print("Number of nodes in ranges [5-10] and [15-30]:", len(ids))
index 5ce64d6255a0383acb29dd6c2d3ae5bfd9a11975..5630f7812b5db20804ec3fffabf4a94f031d766d 100644 (file)
@@ -7,4 +7,4 @@ mesh.Compute()
 # get all badly oriented volumes
 filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_BadOrientedVolume)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of badly oriented volumes:", len(ids)
+print("Number of badly oriented volumes:", len(ids))
index 7ffb5548f7fcaeeb09f887137cedddf6ee98b9f2..4e54e55a749ca2687de3c07b3abf7c6592204b28 100644 (file)
@@ -8,13 +8,13 @@ filter_linear    = smesh.GetFilter(SMESH.EDGE, SMESH.FT_LinearOrQuadratic)
 filter_quadratic = smesh.GetFilter(SMESH.EDGE, SMESH.FT_LinearOrQuadratic, SMESH.FT_LogicalNOT)
 ids_linear    = mesh.GetIdsFromFilter(filter_linear)
 ids_quadratic = mesh.GetIdsFromFilter(filter_quadratic)
-print "Number of linear edges:", len(ids_linear), "; number of quadratic edges:", len(ids_quadratic)
+print("Number of linear edges:", len(ids_linear), "; number of quadratic edges:", len(ids_quadratic))
 
 # convert mesh to quadratic
-print "Convert to quadratic..."
+print("Convert to quadratic...")
 mesh.ConvertToQuadratic()
 
 # get linear and quadratic edges
 ids_linear    = mesh.GetIdsFromFilter(filter_linear)
 ids_quadratic = mesh.GetIdsFromFilter(filter_quadratic)
-print "Number of linear edges:", len(ids_linear), "; number of quadratic edges:", len(ids_quadratic)
+print("Number of linear edges:", len(ids_linear), "; number of quadratic edges:", len(ids_quadratic))
index 980509dbe6d62f4d688f75ef4e71b6a58c1773be..4f20b299ddb2b3b2d0520606812467aa347a85a7 100644 (file)
@@ -4,11 +4,11 @@
 from SMESH_mechanic import *
 # create group of edges
 all_edges = mesh.GetElementsByType(SMESH.EDGE)
-grp = mesh.MakeGroupByIds("edges group", SMESH.EDGE, all_edges[:len(all_edges)/4])
+grp = mesh.MakeGroupByIds("edges group", SMESH.EDGE, all_edges[:len(all_edges) // 4])
 import SALOMEDS
 c = SALOMEDS.Color(0.1, 0.5, 1.0)
 grp.SetColor(c)
 # get number of the edges not belonging to the group with the given color
 filter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_GroupColor, c, SMESH.FT_LogicalNOT)
 ids = mesh.GetIdsFromFilter(filter)
-print "Number of edges not beloging to the group with color (0.1, 0.5, 1.0):", len(ids)
+print("Number of edges not beloging to the group with color (0.1, 0.5, 1.0):", len(ids))
index 99c5ef546ec69a5458701f51543e5e250f335adc..fea0902b9acaae5b2670cf2d0bbb2cf4998cb2a9 100644 (file)
@@ -13,7 +13,7 @@ ids_tri = mesh.GetIdsFromFilter(filter_tri)
 ids_qua = mesh.GetIdsFromFilter(filter_qua)
 ids_tet = mesh.GetIdsFromFilter(filter_tet)
 ids_pyr = mesh.GetIdsFromFilter(filter_pyr)
-print "Number of triangles:", len(ids_tri)
-print "Number of quadrangles:", len(ids_qua)
-print "Number of tetrahedrons:", len(ids_tet)
-print "Number of pyramids:", len(ids_pyr)
+print("Number of triangles:", len(ids_tri))
+print("Number of quadrangles:", len(ids_qua))
+print("Number of tetrahedrons:", len(ids_tet))
+print("Number of pyramids:", len(ids_pyr))
index 85dcb33cd119a48f7602fec12a13d3bd0fc22abf..0f1a0a8ff9e35f81f382491ec400f828a95666e4 100644 (file)
@@ -6,10 +6,10 @@ from SMESH_mechanic import *
 # make the mesh quadratic
 mesh.ConvertToQuadratic()
 # make some elements bi-quadratic
-for face in SubFaceL[: len(SubFaceL)/2]:
+for face in SubFaceL[: len(SubFaceL) // 2]:
     mesh.ConvertToQuadratic( theSubMesh=mesh.Group( face ), theToBiQuad=True )
 
 # get triangles with 7 nodes
 filter_tri = smesh.GetFilter(SMESH.FACE, SMESH.FT_EntityType,'=', SMESH.Entity_BiQuad_Triangle )
 ids_tri = mesh.GetIdsFromFilter(filter_tri)
-print "Number of bi-quadratic triangles:", len(ids_tri)
+print("Number of bi-quadratic triangles:", len(ids_tri))
index e597608d344283470684886da05b9b2ba4e715ba..2193c6615b6a717911263c75bd36e6abc83cc5db 100644 (file)
@@ -12,4 +12,4 @@ for i in range(1,10):
 # get balls with diameter > 5.
 diam_filter = smesh.GetFilter(SMESH.BALL, SMESH.FT_BallDiameter,'>', 5. )
 ids = mesh.GetIdsFromFilter( diam_filter )
-print "Number of balls with diameter > 5:", len(ids)
+print("Number of balls with diameter > 5:", len(ids))
index ebbb0b936591ae9f5ed76af956d91d70a3ea47d5..2d3c907d680ea0ded5c26b849be95fc55ad3d6ca 100644 (file)
@@ -3,9 +3,9 @@
 import salome, SMESH
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create two boxes to have two domains in the mesh
 
@@ -29,17 +29,17 @@ mesh.Compute()
 
 # using point coordinates in box_1
 nodeFilter = smesh.GetFilter( SMESH.NODE, SMESH.FT_ConnectedElements, "=", "1.,2,10", mesh=mesh )
-print "Nb. nodes in box_1:", len( nodeFilter.GetIDs())
+print("Nb. nodes in box_1:", len( nodeFilter.GetIDs()))
 
 # using point coordinates in box_2
 edgeFilter = smesh.GetFilter( SMESH.EDGE, SMESH.FT_ConnectedElements, "=", [202,1,1 ], mesh=mesh )
-print "Nb. segments in box_2:", len( edgeFilter.GetIDs())
+print("Nb. segments in box_2:", len( edgeFilter.GetIDs()))
 
 # using a geom vertex of box_1
 faceFilter = smesh.GetFilter( SMESH.FACE, SMESH.FT_ConnectedElements, "=", vertex, mesh=mesh )
-print "Nb. faces in box_1:", len( edgeFilter.GetIDs())
+print("Nb. faces in box_1:", len( edgeFilter.GetIDs()))
 
 # using node ID in box_2
 voluFilter = smesh.GetFilter( SMESH.VOLUME, SMESH.FT_ConnectedElements, "=", 10, mesh=mesh )
-print "Nb. volumes in box_2:", len( voluFilter.GetIDs())
+print("Nb. volumes in box_2:", len( voluFilter.GetIDs()))
 
index c7f73f13dc10af689360b4e7ad8effc6b0ed3dca..dc7ce0ea14c4e4d19d8f2b52c8d93f300536ee9a 100644 (file)
@@ -6,4 +6,4 @@ from SMESH_mechanic import *
 # get nodes connected to more than 6 tetrahedra
 conn_nb_filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_NodeConnectivityNumber,'>', 6 )
 ids = mesh.GetIdsFromFilter( conn_nb_filter )
-print "Number of nodes connected to more than 6 tetrahedra:", len(ids)
+print("Number of nodes connected to more than 6 tetrahedra:", len(ids))
index df187188b8d9399d9fd703e9fc3660fead430691..b81d80155179a2c85d7036a1003020c1853c5f25 100644 (file)
@@ -8,11 +8,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 # geometry 
index 0bb1b9a2f9321571a12c41620dbfe5995773017d..c35de336b5124323d641857e1bb1a7f17042f69c 100644 (file)
@@ -28,37 +28,37 @@ aGroup = mesh.CreateEmptyGroup(SMESH.NODE, "aGroup")
 
 # set/get group name
 aGroup.SetName( "new name" )
-print "name", aGroup.GetName()
+print("name", aGroup.GetName())
 
 # get group type (type of entities in the group, SMESH.NODE in our case)
-print "type", aGroup.GetType()
+print("type", aGroup.GetType())
 
 # get number of entities (nodes in our case) in the group
-print "size", aGroup.Size()
+print("size", aGroup.Size())
 
 # check of emptiness
-print "is empty", aGroup.IsEmpty()
+print("is empty", aGroup.IsEmpty())
 
 # check of presence of an entity in the group
 aGroup.Add([1,2]) # Add() method is specific to the standalone group
-print "contains node 2", aGroup.Contains(2)
+print("contains node 2", aGroup.Contains(2))
 
 # get an entity by index
-print "1st node", aGroup.GetID(1)
+print("1st node", aGroup.GetID(1))
 
 # get all entities
-print "all", aGroup.GetIDs()
+print("all", aGroup.GetIDs())
 
 # get number of nodes (actual for groups of elements)
-print "nb nodes", aGroup.GetNumberOfNodes()
+print("nb nodes", aGroup.GetNumberOfNodes())
 
 # get underlying nodes (actual for groups of elements)
-print "nodes", aGroup.GetNodeIDs()
+print("nodes", aGroup.GetNodeIDs())
 
 # set/get color
 import SALOMEDS
 aGroup.SetColor( SALOMEDS.Color(1.,1.,0.));
-print "color", aGroup.GetColor()
+print("color", aGroup.GetColor())
 
 # ----------------------------------------------------------------------------
 # methods specific to the standalone group and not present in GroupOnGeometry
@@ -77,4 +77,4 @@ aGroup.Remove( [2,3,4] )
 
 
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 84150125395d82cef55866fbdaee70042cda101a..4e2a4957f763ca1625c2312af6b021bcfc599a04 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBox(0., 0., 0., 100., 100., 100.)
@@ -43,4 +43,4 @@ aSmeshGroup1 = quadra.GroupOnGeom(face, "SMESHGroup1")
 # create SMESH group on <aGeomGroupE> with default name
 aSmeshGroup2 = quadra.GroupOnGeom(aGeomGroupE) 
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index abe275c64e28993bc54fb01b3df622fd208f78e6..97e1de9452eeb98d66c192f2e8e4623fc050d94a 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -28,22 +28,22 @@ critaria = [ \
     ]
 filt = smesh.GetFilterFromCriteria( critaria )
 filtGroup = mesh.GroupOnFilter( SMESH.FACE, "group on filter", filt )
-print "Group on filter contains %s elements" % filtGroup.Size()
+print("Group on filter contains %s elements" % filtGroup.Size())
 
 # group on filter is updated if the mesh is modified
 hyp1D.SetStartLength( 2.5 )
 hyp1D.SetEndLength( 2.5 )
 mesh.Compute()
-print "After mesh change, group on filter contains %s elements" % filtGroup.Size()
+print("After mesh change, group on filter contains %s elements" % filtGroup.Size())
 
 # set a new filter defining the group
 filt2 = smesh.GetFilter( SMESH.FACE, SMESH.FT_RangeOfIds, "1-50" )
 filtGroup.SetFilter( filt2 )
-print "With a new filter, group on filter contains %s elements" % filtGroup.Size()
+print("With a new filter, group on filter contains %s elements" % filtGroup.Size())
 
 # group is updated at modification of the filter
 filt2.SetCriteria( [ smesh.GetCriterion( SMESH.FACE, SMESH.FT_RangeOfIds, "1-70" )])
 filtIDs3 = filtGroup.GetIDs()
-print "After filter modification, group on filter contains %s elements" % filtGroup.Size()
+print("After filter modification, group on filter contains %s elements" % filtGroup.Size())
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 9beb77e364512bac452ac2f5b2520bc1114ad37c..e0e58acc9e2829472c1a94b9212b01e61428f943 100644 (file)
@@ -12,7 +12,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 35.)
 
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
-print "Criterion: Area > 35, Nb = ", len(anIds)
+print("Criterion: Area > 35, Nb = ", len(anIds))
 
 # create a group by adding elements with area > 35
 aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 35")
@@ -23,7 +23,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 40.)
 
 anIds = mesh.GetIdsFromFilter(aFilter)
 
-print "Criterion: Area > 40, Nb = ", len(anIds
+print("Criterion: Area > 40, Nb = ", len(anIds)
 
 # create a group of elements with area [35; 40] by removing elements with area > 40 from group aGroup
 aGroup.Remove(anIds) 
@@ -32,14 +32,14 @@ aGroup.SetName("35 < Area < 40")
 # print the result
 aGroupElemIDs = aGroup.GetListOfID()
 
-print "Criterion: 35 < Area < 40, Nb = ", len(aGroupElemIDs)
+print("Criterion: 35 < Area < 40, Nb = ", len(aGroupElemIDs))
 
 j = 1
 for i in range(len(aGroupElemIDs)):
-  if j > 20: j = 1; print ""
-  print aGroupElemIDs[i],
+  if j > 20: j = 1; print("")
+  print(aGroupElemIDs[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 047691b863aba6b0a22d4baa88c72b181fe0c5ae..96aa7fa5688081721bfa6e64e9b51033a73c34f7 100644 (file)
@@ -12,7 +12,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
 
 anIds = mesh.GetIdsFromFilter(aFilter)
 
-print "Criterion: Area > 20, Nb = ", len( anIds 
+print("Criterion: Area > 20, Nb = ", len( anIds )
 
 # create a group by adding elements with area > 20
 aGroup1 = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 20")
@@ -23,7 +23,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_EqualTo, 20.)
 
 anIds = mesh.GetIdsFromFilter(aFilter)
 
-print "Criterion: Area = 20, Nb = ", len( anIds 
+print("Criterion: Area = 20, Nb = ", len( anIds )
 
 # create a group by adding elements with area = 20
 aGroup2 = mesh.CreateEmptyGroup( SMESH.FACE, "Area = 20" )
@@ -33,7 +33,7 @@ aGroup2.Add(anIds)
 # create union group : area >= 20
 aGroup3 = mesh.UnionListOfGroups([aGroup1, aGroup2], "Area >= 20")
 aGroup3.SetColor( SALOMEDS.Color(1.,1.,0.));
-print "Criterion: Area >= 20, Nb = ", len(aGroup3.GetListOfID())
+print("Criterion: Area >= 20, Nb = ", len(aGroup3.GetListOfID()))
 # Please note that also there is UnionGroups() method which works with two groups only
 
 # Criterion : AREA < 20
@@ -41,7 +41,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 20.)
 
 anIds = mesh.GetIdsFromFilter(aFilter)
 
-print "Criterion: Area < 20, Nb = ", len(anIds)
+print("Criterion: Area < 20, Nb = ", len(anIds))
 
 # create a group by adding elements with area < 20
 aGroup4 = mesh.CreateEmptyGroup(SMESH.FACE, "Area < 20")
@@ -50,6 +50,6 @@ aGroup4.SetColor( SALOMEDS.Color(1.,0.,0.));
 
 # create union group : area >= 20 and area < 20
 aGroup5 = mesh.UnionListOfGroups([aGroup3, aGroup4], "Any Area")
-print "Criterion: Any Area, Nb = ", len(aGroup5.GetListOfID())
+print("Criterion: Any Area, Nb = ", len(aGroup5.GetListOfID()))
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index bf9e3708ba26be7f6c38a80be7779aa4e28ba5cc..9423cf7d402ac8a271741086ac224b03fabaf9f0 100644 (file)
@@ -12,7 +12,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
 
 anIds = mesh.GetIdsFromFilter(aFilter)
 
-print "Criterion: Area > 20, Nb = ", len(anIds
+print("Criterion: Area > 20, Nb = ", len(anIds)
 
 # create a group by adding elements with area > 20
 aGroup1 = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 20")
@@ -23,7 +23,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 60.)
 
 anIds = mesh.GetIdsFromFilter(aFilter)
 
-print "Criterion: Area < 60, Nb = ", len(anIds
+print("Criterion: Area < 60, Nb = ", len(anIds)
 
 # create a group by adding elements with area < 60
 aGroup2 = mesh.CreateEmptyGroup(SMESH.FACE, "Area < 60")
@@ -31,7 +31,7 @@ aGroup2.Add(anIds)
 
 # create an intersection of groups : 20 < area < 60
 aGroup3 = mesh.IntersectListOfGroups([aGroup1, aGroup2], "20 < Area < 60")
-print "Criterion: 20 < Area < 60, Nb = ", len(aGroup3.GetListOfID())
+print("Criterion: 20 < Area < 60, Nb = ", len(aGroup3.GetListOfID()))
 # Please note that also there is IntersectGroups() method which works with two groups only
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 1a79c5fe27a2ee2c714e771b000d16deed61439d..800e8e80abfa5dbf572e383aa058326392740baa 100644 (file)
@@ -12,7 +12,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
 
 anIds = mesh.GetIdsFromFilter(aFilter)
 
-print "Criterion: Area > 20, Nb = ", len(anIds
+print("Criterion: Area > 20, Nb = ", len(anIds)
 
 # create a group by adding elements with area > 20
 aGroupMain = mesh.MakeGroupByIds("Area > 20", SMESH.FACE, anIds)
@@ -22,14 +22,14 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 60.)
 
 anIds = mesh.GetIdsFromFilter(aFilter)
 
-print "Criterion: Area < 60, Nb = ", len(anIds
+print("Criterion: Area < 60, Nb = ", len(anIds)
 
 # create a group by adding elements with area < 60
 aGroupTool = mesh.MakeGroupByIds("Area < 60", SMESH.FACE, anIds)
  
 # create a cut of groups : area >= 60
 aGroupRes = mesh.CutGroups(aGroupMain, aGroupTool, "Area >= 60")
-print "Criterion: Area >= 60, Nb = ", len(aGroupRes.GetListOfID())
+print("Criterion: Area >= 60, Nb = ", len(aGroupRes.GetListOfID()))
 # Please note that also there is CutListOfGroups() method which works with lists of groups of any lengths
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 459a50dc24a8556aec8db00120e699013495dfe8..76dc93fcc32d432ae76159b8a7c0f8a80b3eb49e 100644 (file)
@@ -13,7 +13,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 100.)
 # create a group by adding elements with area > 100
 aSrcGroup1 = mesh.GroupOnFilter(SMESH.FACE, "Area > 100", aFilter)
 aSrcGroup1.SetColor( SALOMEDS.Color(1.,1.,0.))
-print "Criterion: Area > 100, Nb = ", aSrcGroup1.Size()
+print("Criterion: Area > 100, Nb = ", aSrcGroup1.Size())
 
 # Criterion : AREA < 30
 aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 30.)
@@ -21,7 +21,7 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 30.)
 # create a group by adding elements with area < 30
 aSrcGroup2 = mesh.GroupOnFilter(SMESH.FACE, "Area < 30", aFilter)
 aSrcGroup2.SetColor( SALOMEDS.Color(1.,0.,0.))
-print "Criterion: Area < 30, Nb = ", aSrcGroup2.Size()
+print("Criterion: Area < 30, Nb = ", aSrcGroup2.Size())
 
 
 # Create group of edges using source groups of faces
@@ -30,4 +30,4 @@ aGrp = mesh.CreateDimGroup( [aSrcGroup1, aSrcGroup2], SMESH.EDGE, "Edges" )
 # Create group of nodes using source groups of faces
 aGrp = mesh.CreateDimGroup( [aSrcGroup1, aSrcGroup2], SMESH.NODE, "Nodes" )
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index d8a5bd71c02764351d7c231ad175c41c42be0dc4..b94f59cbb8d5411fb9ecb9942966a1c855202e29 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 from SMESH_mechanic import mesh as mesh1
index b5fbf8b1f3e929ca7c3842f9b829acfaf426c505..a11a47dfb5a98f24d9d6c420df51385730c4f262 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 from SMESH_mechanic import mesh as mesh1
index 5a44cdaca9f25e5d0f8278a7a2d00462a315d7fa..d936878835d43670e5d6ad16572b900e5089c9b9 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBoxDXDYDZ(100,100,100)
@@ -29,51 +29,51 @@ group_2d = mesh.Group(face)
 
 # compute basic properties
 
-print "Get basic properties: approach 1 (via measurements tool) ----"
+print("Get basic properties: approach 1 (via measurements tool) ----")
 
 measure = smesh.CreateMeasurements()
 
-print "* for mesh:"
-print "  length:", measure.Length(mesh.mesh)
-print "  area:",   measure.Area(mesh.mesh)
-print "  volume:", measure.Volume(mesh.mesh)
+print("* for mesh:")
+print("  length:", measure.Length(mesh.mesh))
+print("  area:",   measure.Area(mesh.mesh))
+print("  volume:", measure.Volume(mesh.mesh))
 
-print "* for group (2d):"
-print "  length:", measure.Length(group_2d)
-print "  area:",   measure.Area(group_2d)
-print "  volume:", measure.Volume(group_2d)
+print("* for group (2d):")
+print("  length:", measure.Length(group_2d))
+print("  area:",   measure.Area(group_2d))
+print("  volume:", measure.Volume(group_2d))
 
-print "* for submesh (2d):"
-print "  length:", measure.Length(submesh_2d_face.GetSubMesh())
-print "  area:",   measure.Area(submesh_2d_face.GetSubMesh())
-print "  volume:", measure.Volume(submesh_2d_face.GetSubMesh())
+print("* for submesh (2d):")
+print("  length:", measure.Length(submesh_2d_face.GetSubMesh()))
+print("  area:",   measure.Area(submesh_2d_face.GetSubMesh()))
+print("  volume:", measure.Volume(submesh_2d_face.GetSubMesh()))
 
 measure.UnRegister()
 
-print "Get basic properties: approach 2 (via smeshBuilder) ----"
+print("Get basic properties: approach 2 (via smeshBuilder) ----")
 
-print "* for mesh:"
-print "  length:", smesh.GetLength(mesh)
-print "  area:",   smesh.GetArea(mesh)
-print "  volume:", smesh.GetVolume(mesh)
+print("* for mesh:")
+print("  length:", smesh.GetLength(mesh))
+print("  area:",   smesh.GetArea(mesh))
+print("  volume:", smesh.GetVolume(mesh))
 
-print "* for group (2d):"
-print "  length:", smesh.GetLength(group_2d)
-print "  area:",   smesh.GetArea(group_2d)
-print "  volume:", smesh.GetVolume(group_2d)
+print("* for group (2d):")
+print("  length:", smesh.GetLength(group_2d))
+print("  area:",   smesh.GetArea(group_2d))
+print("  volume:", smesh.GetVolume(group_2d))
 
-print "* for submesh (2d):"
-print "  length:", smesh.GetLength(submesh_2d_face)
-print "  area:",   smesh.GetArea(submesh_2d_face)
-print "  volume:", smesh.GetVolume(submesh_2d_face)
+print("* for submesh (2d):")
+print("  length:", smesh.GetLength(submesh_2d_face))
+print("  area:",   smesh.GetArea(submesh_2d_face))
+print("  volume:", smesh.GetVolume(submesh_2d_face))
 
-print "Get basic properties: approach 3 (via smeshBuilder.Mesh) ----"
+print("Get basic properties: approach 3 (via smeshBuilder.Mesh) ----")
 
-print "* for mesh:"
-print "  length:", mesh.GetLength()
-print "  area:",   mesh.GetArea()
-print "  volume:", mesh.GetVolume()
+print("* for mesh:")
+print("  length:", mesh.GetLength())
+print("  area:",   mesh.GetArea())
+print("  volume:", mesh.GetVolume())
 
-print "* for group (2d): unsupported"
+print("* for group (2d): unsupported")
 
-print "* for submesh (2d): unsupported"
+print("* for submesh (2d): unsupported")
index 0ef07aa7af0eae18dea177cb23309eeff9bb3345..5950a00cf209b292b0df13f6b50bc7914a341d02 100644 (file)
@@ -4,13 +4,13 @@ import salome
 salome.salome_init()
 
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 mesh = smesh.Mesh()
 
 # add node
 new_id = mesh.AddNode(50, 10, 0)
-print ""
-if new_id == 0: print "KO node addition."
-else:           print "New Node has been added with ID ", new_id
+print("")
+if new_id == 0: print("KO node addition.")
+else:           print("New Node has been added with ID ", new_id)
index 7948ed3dc1e74dae7bd4048aec0da124e53266bf..78aff713cea8aac31396febc5023f18023115f70 100644 (file)
@@ -4,7 +4,7 @@ import salome
 salome.salome_init()
 
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 mesh = smesh.Mesh()
@@ -15,6 +15,6 @@ node_id = mesh.AddNode(50, 10, 0)
 # add 0D Element
 new_id = mesh.Add0DElement(node_id)
 
-print ""
-if new_id == 0: print "KO node addition."
-else:           print "New 0D Element has been added with ID ", new_id
+print("")
+if new_id == 0: print("KO node addition.")
+else:           print("New 0D Element has been added with ID ", new_id)
index 0c6bc61dd1a24aa4381e53cd51cf5d5677c82ed5..46df84e8f84176444d451100e1e188c49986189d 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 # create a geometry
@@ -48,5 +48,5 @@ res = mesh.Add0DElementsToAllNodes( mesh.GetElementsId() )
 mesh.RemoveElements( mesh.GetElementsByType( SMESH.ELEM0D ))
 
 # create 0D elements on some nodes
-nodes = range(1,10)
+nodes = list(range(1,10))
 res = mesh.Add0DElementsToAllNodes( mesh.GetIDSource( nodes, SMESH.NODE ))
index 5aad0f551cd0d0c66e5728799775ef7b3aa2b37f..ad8d151b0de7505b45be7d7e33eccdf51ae8374e 100644 (file)
@@ -3,13 +3,13 @@
 import SMESH_mechanic
 
 mesh = SMESH_mechanic.mesh
-print ""
+print("")
 
 # add node
 n1 = mesh.AddNode(50, 10, 0)
-if n1 == 0: print "KO node addition." 
+if n1 == 0: print("KO node addition.") 
 
 # add edge
 e1 = mesh.AddEdge([n1, 38])
-if e1 == 0: print "KO edge addition."
-else:       print "New Edge has been added with ID ", e1
+if e1 == 0: print("KO edge addition.")
+else:       print("New Edge has been added with ID ", e1)
index bd1e1438bf39ef51de5ae3438cd7817b935d9c90..c48042a6fab9cd22551bb6fee2a3928abafaae18 100644 (file)
@@ -3,13 +3,13 @@
 import SMESH_mechanic
 
 mesh = SMESH_mechanic.mesh
-print ""
+print("")
 
 # add node
 n1 = mesh.AddNode(50, 10, 0)
-if n1 == 0: print "KO node addition."
+if n1 == 0: print("KO node addition.")
 
 # add triangle
 t1 = mesh.AddFace([n1, 38, 39])
-if t1 == 0: print "KO triangle addition."
-else:       print "New Triangle has been added with ID ", t1
+if t1 == 0: print("KO triangle addition.")
+else:       print("New Triangle has been added with ID ", t1)
index b05c880890328d5d6a7db4b23ceed07c37dac838..ff568e0f18b1b401e3eb727821c1006973a6fc40 100644 (file)
@@ -3,16 +3,16 @@
 import SMESH_mechanic
 
 mesh = SMESH_mechanic.mesh
-print ""
+print("")
 
 # add node
 n1 = mesh.AddNode(50, 10, 0)
-if n1 == 0: print "KO node addition."
+if n1 == 0: print("KO node addition.")
 
 n2 = mesh.AddNode(40, 20, 0)
-if n2 == 0: print "KO node addition."
+if n2 == 0: print("KO node addition.")
 
 # add quadrangle
 q1 = mesh.AddFace([n2, n1, 38, 39])
-if q1 == 0: print "KO quadrangle addition."
-else:       print "New Quadrangle has been added with ID ", q1
+if q1 == 0: print("KO quadrangle addition.")
+else:       print("New Quadrangle has been added with ID ", q1)
index 5dfa8da031f04e78a903d23e70e81369fdc9a157..93fa2d1cc95fa67079e5f570bb5881ad421ea89a 100644 (file)
@@ -3,13 +3,13 @@
 import SMESH_mechanic
 
 mesh = SMESH_mechanic.mesh
-print ""
+print("")
 
 # add node
 n1 = mesh.AddNode(50, 10, 0)
-if n1 == 0: print "KO node addition."
+if n1 == 0: print("KO node addition.")
 
 # add tetrahedron
 t1 = mesh.AddVolume([n1, 38, 39, 246])
-if t1 == 0: print "KO tetrahedron addition."
-else:       print "New Tetrahedron has been added with ID ", t1
+if t1 == 0: print("KO tetrahedron addition.")
+else:       print("New Tetrahedron has been added with ID ", t1)
index 4cfa89ee4f8fd727b0cb5a9f30fd68873e6e22e1..1cf27c5dfce97f23369807701add34db508b4e69 100644 (file)
@@ -3,7 +3,7 @@
 import SMESH_mechanic
 
 mesh = SMESH_mechanic.mesh
-print ""
+print("")
 
 # add nodes
 nId1 = mesh.AddNode(50, 10, 0)
@@ -11,9 +11,9 @@ nId2 = mesh.AddNode(47, 12, 0)
 nId3 = mesh.AddNode(50, 10, 10)
 nId4 = mesh.AddNode(47, 12, 10)
 
-if nId1 == 0 or nId2 == 0 or nId3 == 0 or nId4 == 0: print "KO node addition."
+if nId1 == 0 or nId2 == 0 or nId3 == 0 or nId4 == 0: print("KO node addition.")
 
 # add hexahedron
 vId = mesh.AddVolume([nId2, nId1, 38, 39, nId4, nId3, 245, 246])
-if vId == 0: print "KO Hexahedron addition."
-else:        print "New Hexahedron has been added with ID ", vId
+if vId == 0: print("KO Hexahedron addition.")
+else:        print("New Hexahedron has been added with ID ", vId)
index c09cb62c6b97293d11f577fae191f9debc710344..401fda8d6edc6feb88305aeb0e666a8eb185d1a1 100644 (file)
@@ -7,7 +7,7 @@ salome.salome_init()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 # create an empty mesh structure
@@ -34,4 +34,4 @@ f1 = MakePolygon(mesh, 0, 0,  0, 30, 13)
 f2 = MakePolygon(mesh, 0, 0, 10, 21,  9)
 f3 = MakePolygon(mesh, 0, 0, 20, 13,  6)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index bf13423ed898c3075aca7d19f092b3d765480453..fe8ec68c6d887954a4dcc65744e531705d8e9a19 100644 (file)
@@ -5,7 +5,7 @@ import salome
 salome.salome_init()
 
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -60,4 +60,4 @@ mesh.AddPolyhedralVolume([dd[0], dd[1], dd[2], dd[3], dd[4],  # top
                          [5,5,5,5,5,5,5,5,5,5,5,5])
 
 if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
+    salome.sg.updateObjBrowser()
index 6ba78c3313f8f9f58806f81b1802aa7a0472f1e1..28b544bc0ed681898a247eb529f8d3b5488f764f 100644 (file)
@@ -6,5 +6,5 @@ mesh = SMESH_mechanic.mesh
 
 # remove nodes #246 and #255
 res = mesh.RemoveNodes([246, 255])
-if res == 1: print "Nodes removing is OK!"
-else:        print "KO nodes removing."
+if res == 1: print("Nodes removing is OK!")
+else:        print("KO nodes removing.")
index 5437b3815b841b4edd7f7a900eb2824bef421533..8ef8356f07291193d200fb050c38c234c1ea0313 100644 (file)
@@ -6,5 +6,5 @@ mesh = SMESH_mechanic.mesh
 
 # remove three elements: #850, #859 and #814
 res = mesh.RemoveElements([850, 859, 814])
-if res == 1: print "Elements removing is OK!"
-else:        print "KO Elements removing."
+if res == 1: print("Elements removing is OK!")
+else:        print("KO Elements removing.")
index 4189b852b885631d699ebd07d23ae037da3e6fcf..3c2e4e0bf9ca6825ac92d44fa03eac9ff9a668a1 100644 (file)
@@ -9,5 +9,5 @@ mesh.AddNode(0,0,0)
 mesh.AddNode(1,1,1)
 # remove just created orphan nodes
 res = mesh.RemoveOrphanNodes()
-if res == 1: print "Removed %d nodes!" % res
-else:        print "KO nodes removing."
+if res == 1: print("Removed %d nodes!" % res)
+else:        print("KO nodes removing.")
index 5985c0844f45656b2d2b3ccdb465dc8f8b7ad5b0..2656ea300bc2d625d2cb0ca2cc4ccfece26793ca 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 box = geompy.MakeBoxDXDYDZ(200, 200, 200)
@@ -33,20 +33,20 @@ for vId in geompy.SubShapeAllIDs( box, geompy.ShapeType["VERTEX"]):
     pass
 
 if not node000:
-    raise "node000 not found"
+    raise Exception("node000 not found")
 
 # find node000 using a dedicated function 
 n = mesh.FindNodeClosestTo( -1,-1,-1 )
 if not n == node000:
-    raise "FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 )
+    raise Exception("FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 ))
 
 # move node000 to a new location
 x,y,z = -10, -10, -10
 n = mesh.MoveNode( n,x,y,z )
 if not n:
-    raise "MoveNode() returns " + n
+    raise Exception("MoveNode() returns " + n)
 
 # check the coordinates of the node000
 xyz = mesh.GetNodeXYZ( node000 )
 if not ( xyz[0] == x and xyz[1] == y and xyz[2] == z) :
-    raise "Wrong coordinates: " + str( xyz ) + " != " + str( [x,y,z] )
+    raise Exception("Wrong coordinates: " + str( xyz ) + " != " + str( [x,y,z] ))
index 0786445eb2c95326c580aeb2d59c52be6e763f70..2ecc4ed079a6690efc2d11050f9083ed5521340c 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -46,9 +46,9 @@ ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
 ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]])
 
 # inverse the diagonal bb[1] - tt[2]
-print "\nDiagonal inversion ... ",
+print("\nDiagonal inversion ... ", end=' ')
 res = mesh.InverseDiag(bb[1], tt[2])
-if not res: print "failed!"
-else:       print "done."
+if not res: print("failed!")
+else:       print("done.")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index ebeb247a81a017a094f2d6b29343712cefd5424b..1fe0c466bf63780b0a2316fdd73475aa178ffa1b 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -46,9 +46,9 @@ ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
 ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]]) 
 
 # delete the diagonal bb[1] - tt[2]
-print "\nUnite two triangles ... ",
+print("\nUnite two triangles ... ", end=' ')
 res = mesh.DeleteDiag(bb[1], tt[2])
-if not res: print "failed!"
-else:       print "done."
+if not res: print("failed!")
+else:       print("done.")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 458b0fe2557e817c5bda56198f7ba1d38eb960c6..fd21b376e0919185c8604365e73584a33b463c7b 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -46,9 +46,9 @@ ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
 ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]])
 
 # unite a set of triangles
-print "\nUnite a set of triangles ... ",
+print("\nUnite a set of triangles ... ", end=' ')
 res = mesh.TriToQuad([ff[2], ff[3], ff[4], ff[5]], SMESH.FT_MinimumAngle, 60.)
-if not res: print "failed!"
-else:       print "done."
+if not res: print("failed!")
+else:       print("done.")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 8ef2c7c8a581fd56ad21bf6582e194068b888849..7e3c723c52ea956c7da551804b924b0e0f0f7da2 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -42,4 +42,4 @@ f5 = mesh.AddFace([n5, n6, n12, n11])
 # Change the orientation of the second and the fourth faces.
 mesh.Reorient([2, 4])
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 650d998e5e8014792c80e71f53add61d01bffefb..a2b92a9f9015419f7f2cff1e00e84c8a8f4ecf9d 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import SMESH_mechanic
 
@@ -28,8 +28,8 @@ GroupSmooth = mesh.GroupOnGeom(face, "Group of faces (smooth)", SMESH.FACE)
 
 # boolean SmoothObject(Object, IDsOfFixedNodes, MaxNbOfIterations, MaxAspectRatio, Method)
 res = mesh.SmoothObject(GroupSmooth, [], 20, 2., smesh.CENTROIDAL_SMOOTH)
-print "\nSmoothing ... ",
-if not res: print "failed!"
-else:       print "done."
+print("\nSmoothing ... ", end=' ')
+if not res: print("failed!")
+else:       print("done.")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 8444ee567faec359ce4814d606da9079ae6d15cf..d9e1f97d9431a6ca63509bb465fe4d45310abb0a 100644 (file)
@@ -4,11 +4,11 @@
 import salome, math
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create an empty mesh
 mesh = smesh.Mesh() 
@@ -87,4 +87,4 @@ stepSize = 5.
 nbSteps  = 2
 mesh.ExtrusionByNormal( elements, stepSize, nbSteps )
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 3db2c3e1246c38de83e02b6806bbe5b0a5c9745e..ac8556262d0f21cf97065a290c274e701dc88e93 100644 (file)
@@ -6,11 +6,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # 1. Create points
 points = [[0, 0], [50, 30], [50, 110], [0, 150], [-80, 150], [-130, 70], [-130, -20]]
@@ -19,7 +19,7 @@ iv = 1
 vertices = []
 for point in points:
     vert = geompy.MakeVertex(point[0], point[1], 0)
-    geompy.addToStudy(vert, "Vertex_" + `iv`)
+    geompy.addToStudy(vert, "Vertex_" + repr(iv))
     vertices.append(vert)
     iv += 1
     pass
@@ -38,7 +38,7 @@ geompy.addToStudy(Edge_Circle  , "Edge_Circle")
 # 3. Explode wire on edges, as they will be used for mesh extrusion
 Wire_polyline_edges = geompy.SubShapeAll(Wire_polyline, geompy.ShapeType["EDGE"])
 for ii in range(len(Wire_polyline_edges)):
-    geompy.addToStudyInFather(Wire_polyline, Wire_polyline_edges[ii], "Edge_" + `ii + 1`)
+    geompy.addToStudyInFather(Wire_polyline, Wire_polyline_edges[ii], "Edge_" + repr(ii + 1))
     pass
 
 # Mesh
@@ -49,7 +49,7 @@ def Mesh1D(shape1d, nbSeg, name):
   algo = mesh1d_tool.Segment()
   hyp  = algo.NumberOfSegments(nbSeg)
   isDone = mesh1d_tool.Compute()
-  if not isDone: print 'Mesh ', name, ': computation failed'
+  if not isDone: print('Mesh ', name, ': computation failed')
   return mesh1d_tool
 
 # Create a mesh with six nodes, seven edges and two quadrangle faces
@@ -128,4 +128,4 @@ error = quad_6.ExtrusionAlongPath(ff_6 , Edge_Circle_mesh, Edge_Circle, 1,
 error = quad_7.ExtrusionAlongPath(ff_7, Edge_Circle_mesh, Edge_Circle, 1,
                                   1, [a45, -a45, a45, -a45, a45, -a45, a45, -a45], 0, refPoint)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 4072560c45ac47dc73ba96647945f8779320ecea..82af9b1874cb5b465cec59dc243c908c930b1ba0 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # define the geometry
 Box_1 = geompy.MakeBoxDXDYDZ(200., 200., 200.)
@@ -29,7 +29,7 @@ algo1D.NumberOfSegments(3)
 Mesh_1.Quadrangle()
 
 isDone = Mesh_1.Compute()
-if not isDone: print 'Mesh Mesh_1 : computation failed'
+if not isDone: print('Mesh Mesh_1 : computation failed')
 
 # build a triangle mesh on Face_2
 Mesh_2 = smesh.Mesh(Face_2)
@@ -40,20 +40,20 @@ algo2D = Mesh_2.Triangle()
 algo2D.MaxElementArea(240)
 
 isDone = Mesh_2.Compute()
-if not isDone: print 'Mesh Mesh_2 : computation failed'
+if not isDone: print('Mesh Mesh_2 : computation failed')
 
 # create a 2d pattern
 pattern = smesh.GetPattern()
 
 isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), Face_2, 0)
-if (isDone != 1): print 'LoadFromFace :', pattern.GetErrorCode()
+if (isDone != 1): print('LoadFromFace :', pattern.GetErrorCode())
 
 # apply the pattern to a face of the first mesh
 facesToSplit = Mesh_1.GetElementsByType(SMESH.FACE)
-print "Splitting %d rectangular face(s) to %d triangles..."%(len(facesToSplit), 2*len(facesToSplit))
+print("Splitting %d rectangular face(s) to %d triangles..."%(len(facesToSplit), 2*len(facesToSplit)))
 pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), facesToSplit, 0, 0)
 isDone = pattern.MakeMesh(Mesh_1.GetMesh(), 0, 0)
-if (isDone != 1): print 'MakeMesh :', pattern.GetErrorCode()  
+if (isDone != 1): print('MakeMesh :', pattern.GetErrorCode())  
 
 # create quadrangle mesh
 Mesh_3 = smesh.Mesh(Box_1)
@@ -61,7 +61,7 @@ Mesh_3.Segment().NumberOfSegments(1)
 Mesh_3.Quadrangle()
 Mesh_3.Hexahedron()
 isDone = Mesh_3.Compute()
-if not isDone: print 'Mesh Mesh_3 : computation failed'
+if not isDone: print('Mesh Mesh_3 : computation failed')
 
 # create a 3d pattern (hexahedrons)
 pattern_hexa = smesh.GetPattern()
@@ -93,10 +93,10 @@ pattern_hexa.LoadFromFile(smp_hexa)
 
 # apply the pattern to a mesh
 volsToSplit = Mesh_3.GetElementsByType(SMESH.VOLUME)
-print "Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 4*len(volsToSplit))
+print("Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 4*len(volsToSplit)))
 pattern_hexa.ApplyToHexahedrons(Mesh_3.GetMesh(), volsToSplit,0,3)
 isDone = pattern_hexa.MakeMesh(Mesh_3.GetMesh(), True, True)
-if (isDone != 1): print 'MakeMesh :', pattern_hexa.GetErrorCode()  
+if (isDone != 1): print('MakeMesh :', pattern_hexa.GetErrorCode())  
 
 # create one more quadrangle mesh
 Mesh_4 = smesh.Mesh(Box_1)
@@ -104,7 +104,7 @@ Mesh_4.Segment().NumberOfSegments(1)
 Mesh_4.Quadrangle()
 Mesh_4.Hexahedron()
 isDone = Mesh_4.Compute()
-if not isDone: print 'Mesh Mesh_4 : computation failed'
+if not isDone: print('Mesh Mesh_4 : computation failed')
 
 # create another 3d pattern (pyramids)
 pattern_pyra = smesh.GetPattern()
@@ -132,7 +132,7 @@ pattern_pyra.LoadFromFile(smp_pyra)
 
 # apply the pattern to a face mesh
 volsToSplit = Mesh_4.GetElementsByType(SMESH.VOLUME)
-print "Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 6*len(volsToSplit))
+print("Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 6*len(volsToSplit)))
 pattern_pyra.ApplyToHexahedrons(Mesh_4.GetMesh(), volsToSplit,1,0)
 isDone = pattern_pyra.MakeMesh(Mesh_4.GetMesh(), True, True)
-if (isDone != 1): print 'MakeMesh :', pattern_pyra.GetErrorCode()  
+if (isDone != 1): print('MakeMesh :', pattern_pyra.GetErrorCode())  
index 4a8eba75ee35a8e86c469753fecdeb50040cf6bf..53059ff96c9f7f7c7edba2ae0b2649264511809e 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create sphere of radius 100
 
index e52ef1b540def8dbac9bf39224465d343ac69837..376e511634196636a6b61f2bb1a6e53e0a1d0e83 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 # set variables
index 5aa283edf05d352b2efae68d455fc9b10ff49beb..6c2a9d6d4bdef5762011b559d796a4d767b08c79 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 OX = geompy.MakeVectorDXDYDZ(1,0,0)
 OY = geompy.MakeVectorDXDYDZ(0,1,0)
index 9105fee6a37d445e42e50be7e2c6856775b05a6c..9c018e8ded479b58cd8746fc9127458c389406d2 100644 (file)
@@ -4,11 +4,11 @@
 import salome
 salome.salome_init()
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # fuse a box and a sphere
 Sphere_1 = geompy.MakeSphereR(100)
@@ -24,22 +24,22 @@ mesh.Compute()
 
 # get min and max deflection
 minMax = mesh.GetMinMax( SMESH.FT_Deflection2D )
-print "min and max deflection: ", minMax
+print("min and max deflection: ", minMax)
 
 # get deflection of a certain face
 faceID = mesh.NbEdges() + mesh.NbFaces()
 defl = mesh.FunctorValue( SMESH.FT_Deflection2D, faceID )
-print "deflection of face %s = %s" % ( faceID, defl )
+print("deflection of face %s = %s" % ( faceID, defl ))
 
 margin = minMax[1] / 2
 
 # get all faces with deflection LESS than the margin
 aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Deflection2D, '<', margin, mesh=mesh)
 anIds = aFilter.GetIDs()
-print "%s faces have deflection less than %s" %( len(anIds), margin )
+print("%s faces have deflection less than %s" %( len(anIds), margin ))
 
 # create a group of faces with deflection MORE than the margin
-aGroup = mesh.MakeGroup("Deflection > " + `margin`, SMESH.FACE, SMESH.FT_Deflection2D,'>',margin)
-print "%s faces have deflection more than %s: %s ..." %( aGroup.Size(), margin, aGroup.GetIDs()[:10] )
+aGroup = mesh.MakeGroup("Deflection > " + repr(margin), SMESH.FACE, SMESH.FT_Deflection2D,'>',margin)
+print("%s faces have deflection more than %s: %s ..." %( aGroup.Size(), margin, aGroup.GetIDs()[:10] ))
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 6990aa66b43b7790bd417dd3f8222e577508aaf1..30648a3ce6fcd3aab297c29f5743fa7be0c8f991 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create open shell: a box without one plane
 box = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
@@ -31,17 +31,17 @@ aFilter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_FreeBorders)
 anIds = mesh.GetIdsFromFilter(aFilter)
 
 # print the result
-print "Criterion: Free borders Nb = ", len(anIds)
+print("Criterion: Free borders Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
 aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Free borders")
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index c2fc56f86496d9019bba127d76a8956c74932049..62a312ca7ed293bae7a1fbf5401b63a4f7c2b094 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create open shell: a box without one plane
 box = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
@@ -33,17 +33,17 @@ aFilter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_MultiConnection, SMESH.FT_EqualTo
 anIds = mesh.GetIdsFromFilter(aFilter)
 
 # print the result
-print "Criterion: Borders at multi-connections Nb = ", len(anIds)
+print("Criterion: Borders at multi-connections Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
 aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Borders at multi-connections")
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 7c5a804f5067b992e20c39a3f6c0c159dbd9b0c5..fca52fddf3a1b9ad5e7472efdff5aa66b9f8c056 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create open shell: a box without one plane
 box = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
@@ -33,17 +33,17 @@ aFilter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_Length, SMESH.FT_MoreThan, length
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Edges length > ", length_margin, " Nb = ", len(anIds)
+print("Criterion: Edges length > ", length_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Edges with length > " + `length_margin`)
+aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Edges with length > " + repr(length_margin))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 373ddbe024fc6f28397b0b3ccdc55852c770eb22..07867cc2f909f120b90fe41477c6dc6f109618d1 100644 (file)
@@ -27,14 +27,14 @@ aGroupF = mesh.CreateEmptyGroup(SMESH.FACE, "Faces with free edges")
 aGroupN = mesh.CreateEmptyGroup(SMESH.NODE, "Nodes on free edges")
 
 # fill groups with elements, corresponding to the criterion
-print ""
-print "Criterion: Free edges Nb = ", len(aBorders)
+print("")
+print("Criterion: Free edges Nb = ", len(aBorders))
 for i in range(len(aBorders)):
   aBorder = aBorders[i]
-  print "Face # ", aBorder.myElemId, " : Edge between nodes (",
-  print aBorder.myPnt1, ", ", aBorder.myPnt2, ")"
+  print("Face # ", aBorder.myElemId, " : Edge between nodes (", end=' ')
+  print(aBorder.myPnt1, ", ", aBorder.myPnt2, ")")
 
   aGroupF.Add([aBorder.myElemId])
   aGroupN.Add([aBorder.myPnt1, aBorder.myPnt2])
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index cbd2178391639e24954293f4a1508252f8938321..1ec552f752896f40d3c7bccc26f7ab1a2742cc2d 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create box
 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
@@ -42,13 +42,13 @@ aGroup = mesh.CreateEmptyGroup(SMESH.NODE, "Free_nodes")
 aGroup.Add(anNodeIds)
 
 # print the result
-print "Criterion: Free nodes Nb = ", len(anNodeIds)
+print("Criterion: Free nodes Nb = ", len(anNodeIds))
 j = 1
 for i in range(len(anNodeIds)):
-  if j > 20: j = 1; print ""
-  print anNodeIds[i],
+  if j > 20: j = 1; print("")
+  print(anNodeIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 1bd007bf632849eb81c673ca44b65ec2226a01df..8dd8e9cf6b2846c9864ca882eccc5ee0a522cf11 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 ####### GEOM part ########
 
@@ -54,14 +54,14 @@ aGroup = Mesh_1.CreateEmptyGroup(SMESH.FACE, "Free_faces")
 aGroup.Add(aFaceIds)
 
 # print the result
-print "Criterion: Free faces Nb = ", len(aFaceIds)
+print("Criterion: Free faces Nb = ", len(aFaceIds))
 j = 1
 for i in range(len(aFaceIds)):
-  if j > 20: j = 1; print ""
-  print aFaceIds[i],
+  if j > 20: j = 1; print("")
+  print(aFaceIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 #filter faces from plane 2
 aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BelongToPlane, Plane_2)
@@ -75,4 +75,4 @@ aFaceIds = Mesh_1.GetIdsFromFilter(aFilter)
 aGroup = Mesh_1.CreateEmptyGroup(SMESH.FACE, "Shared_faces")
 aGroup.Add(aFaceIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 5e84f2bfce6cd4c0e96ac87444170971eef5e048..e85b27d73c86131637c50a359b4a6969c6457a09 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
index 541af64a3220053bbef14b31940daa61e6eda7e6..157bf5f8cafd7ddf592d1ba3ba6c81ce0a615c86 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -25,7 +25,7 @@ mesh.AutomaticHexahedralization();
 
 # remove half of mesh faces from the smallest face
 faceFaces = mesh.GetSubMeshElementsId(face)
-faceToRemove = faceFaces[: len(faceFaces)/2]
+faceToRemove = faceFaces[: len(faceFaces) // 2]
 mesh.RemoveElements( faceToRemove )
 
 # make a group of volumes missing the removed faces
index aca903ae0112fe7710953ae60ecfbfe8fae30f2b..82050cbc0b6e711546246267aff19e16e4f086f6 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
index 041183224a670360309ca0675df25a0c5f16d754..1a4287fc7211463e9c1a46295012263b7cd39227 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
index b0b5e3f24dd89dd4ed2985988446afd66845456a..7c00278dcf1e5f112a4c9d21c28936a838733356 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create open shell: a box without one plane
 box = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
@@ -34,17 +34,17 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Length2D, SMESH.FT_MoreThan, leng
 anIds = mesh.GetIdsFromFilter(aFilter)
 
 # print the result
-print "Criterion: Edges length 2D > ", length_margin, " Nb = ", len(anIds)
+print("Criterion: Edges length 2D > ", length_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Faces with length 2D > " + `length_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Faces with length 2D > " + repr(length_margin))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index ba6fb9d7deccba5a1096a3cec211ed01772154c8..adedda57db5b67a462ca8f674b8304f6bcaeb43c 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a compound of two glued boxes
 box1 = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
@@ -34,17 +34,17 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MultiConnection2D, SMESH.FT_Equal
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Borders at multi-connection 2D = ", nb_conn, " Nb = ", len(anIds)
+print("Criterion: Borders at multi-connection 2D = ", nb_conn, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Borders at multi-connection 2D = " + `nb_conn`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Borders at multi-connection 2D = " + repr(nb_conn))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 3b52dbc126b03608ce3fb8c5fed2c13a3de45c8e..5cee2a8ddb9fb41625a0c031ab2ea86a761f71d9 100644 (file)
@@ -15,17 +15,17 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, area_mar
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Area > ", area_margin, " Nb = ", len(anIds)
+print("Criterion: Area > ", area_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Area > " + `area_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Area > " + repr(area_margin))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index b66d9413a80a067030efd2574ba911187dc7656b..ab939bae8c1cd16ae425cd0c09a8117107390405 100644 (file)
@@ -15,17 +15,17 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Taper, SMESH.FT_MoreThan, taper_m
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Taper > ", taper_margin, " Nb = ", len(anIds)
+print("Criterion: Taper > ", taper_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Taper > " + `taper_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Taper > " + repr(taper_margin))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 0aeedbfa8b65923e50a3b24d8095c8b9c135f9d3..d7cb29071de0281ccadc0e7093a77990d9a34903 100644 (file)
@@ -15,17 +15,17 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, a
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Aspect Ratio > ", ar_margin, " Nb = ", len(anIds)
+print("Criterion: Aspect Ratio > ", ar_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Aspect Ratio > " + `ar_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Aspect Ratio > " + repr(ar_margin))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index e80e91f48c9f0e25f8be9fa8068b7d52a9731644..645b2cd237ff96a4fc77de881a0c6fe5a317af70 100644 (file)
@@ -15,18 +15,18 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MinimumAngle, SMESH.FT_LessThan,
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Minimum Angle < ", min_angle, " Nb = ", len(anIds)
+print("Criterion: Minimum Angle < ", min_angle, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Minimum Angle < " + `min_angle`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Minimum Angle < " + repr(min_angle))
 
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 8f7f39c488929e89c2d06213bdde4d1eed27cc8b..a22f5e5ff1c6a50df1134c6867adda5b1ecfc64f 100644 (file)
@@ -15,18 +15,18 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Warping, SMESH.FT_MoreThan, wa_ma
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Warp > ", wa_margin, " Nb = ", len(anIds)
+print("Criterion: Warp > ", wa_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Warp > " + `wa_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Warp > " + repr(wa_margin))
 
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index ad6dff1850cfef7d881d7dcc2d525d64e7ebc7f4..9f6f7a3f333829dfd0e9f80f205ea364d7cc0a83 100644 (file)
@@ -15,17 +15,17 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreThan, skew_mar
 anIds = mesh.GetIdsFromFilter(aFilter)
 
 # print the result
-print "Criterion: Skew > ", skew_margin, " Nb = ", len(anIds)
+print("Criterion: Skew > ", skew_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Skew > " + `skew_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Skew > " + repr(skew_margin))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 814cb5ba527fe71282cec130fb914ceff36a0ab2..62ef71030bad8f9840cdfcd51a1f87856adb2fae 100644 (file)
@@ -15,17 +15,17 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_More
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Element Diameter 2D Ratio > ", mel_2d_margin, " Nb = ", len(anIds)
+print("Criterion: Element Diameter 2D Ratio > ", mel_2d_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Element Diameter 2D > " + `mel_2d_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Element Diameter 2D > " + repr(mel_2d_margin))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 3a7c44f940fac163e130ba4857999d916f2c6908..dd594c1933824dcc9322c7b1439e04d8e9494b77 100644 (file)
@@ -15,18 +15,18 @@ aFilter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_AspectRatio3D, SMESH.FT_MoreTha
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Aspect Ratio 3D > ", ar_margin, " Nb = ", len(anIds)
+print("Criterion: Aspect Ratio 3D > ", ar_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Aspect Ratio 3D > " + `ar_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Aspect Ratio 3D > " + repr(ar_margin))
 
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 1f27eef3af06bf07fd1b7a98ff609bb5173e09f3..683e314b74ea305812536aaf2088ce274cac8a25 100644 (file)
@@ -15,19 +15,19 @@ aFilter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_Volume3D, SMESH.FT_LessThan, vo
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print ""
-print "Criterion: Volume < ", volume_margin, " Nb = ", len(anIds)
+print("")
+print("Criterion: Volume < ", volume_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Volume < " + `volume_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Volume < " + repr(volume_margin))
 
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index e43e5c1b8e3ea764670dd2ec85a4d4e436a04c44..131091f8cc5ff0e787bf11bbfd97c0ad077d0b6c 100644 (file)
@@ -15,17 +15,17 @@ aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength3D, SMESH.FT_More
 anIds = mesh.GetIdsFromFilter(aFilter) 
 
 # print the result
-print "Criterion: Element Diameter 3D Ratio > ", mel_3d_margin, " Nb = ", len(anIds)
+print("Criterion: Element Diameter 3D Ratio > ", mel_3d_margin, " Nb = ", len(anIds))
 j = 1
 for i in range(len(anIds)):
-  if j > 20: j = 1; print ""
-  print anIds[i],
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
   j = j + 1
   pass
-print ""
+print("")
 
 # create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Element Diameter 3D > " + `mel_3d_margin`)
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Element Diameter 3D > " + repr(mel_3d_margin))
 aGroup.Add(anIds)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index e53e7b0b1c7ced203074345d505e31dd8b739a52..235d491578e2221f975263a08a14a2c6d0dfce98 100644 (file)
@@ -4,10 +4,10 @@ import salome
 salome.salome_init()
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New(salome.myStudy)
+smesh = smeshBuilder.New()
 
 # make a shape consisting of two quadranges
 OY  = geompy.MakeVectorDXDYDZ(0, 1, 0)
index 6a502d00d71a7577de3117ec25c2b687db32dba9..5deb4c7bc28bfb6113161dcb0f40fd12b5c81e85 100755 (executable)
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
 # Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
@@ -17,7 +18,6 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-#!/usr/bin/env python
 
 import unittest, sys, os
 
index a6f7701f841ae862ece320927ae95efadc213e67..8184e24508ec36a7b17c80457c64e5d5bdc4ce58 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 Box = geompy.MakeBoxDXDYDZ(200, 200, 200)
 f = geompy.SubShapeAllSorted(Box, geompy.ShapeType["FACE"])
index 47c25b1ea79e934b19e175a617a465d5fb15dd95..1d973dadb6546d3272457a48ec50cbe6c555b685 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a face to be meshed
 px = geompy.MakeVertex(100., 0.  , 0.  )
@@ -54,27 +54,27 @@ trias.ExtrusionAlongPath([], circlemesh, circle,
                          1, 0, [], 0, SMESH.PointStruct(0, 0, 0))
 
 # merge nodes
-print "Number of nodes before MergeNodes:", 
+print("Number of nodes before MergeNodes:", end=' ') 
 trias.NbNodes()
 tolerance = 0.001
 array_of_nodes_groups = trias.FindCoincidentNodes(tolerance)
 
 trias.MergeNodes(array_of_nodes_groups)
 
-print "Number of nodes after MergeNodes:", trias.NbNodes()
-print ""
-print "Number of elements before MergeEqualElements:"
-print "Edges      : ", trias.NbEdges()
-print "Triangles  : ", trias.NbTriangles()
-print "Quadrangles: ", trias.NbQuadrangles()
-print "Volumes    : ", trias.NbVolumes()
+print("Number of nodes after MergeNodes:", trias.NbNodes())
+print("")
+print("Number of elements before MergeEqualElements:")
+print("Edges      : ", trias.NbEdges())
+print("Triangles  : ", trias.NbTriangles())
+print("Quadrangles: ", trias.NbQuadrangles())
+print("Volumes    : ", trias.NbVolumes())
 
 # merge elements
 trias.MergeEqualElements()
-print "Number of elements after MergeEqualElements:"
-print "Edges      : ", trias.NbEdges()
-print "Triangles  : ", trias.NbTriangles()
-print "Quadrangles: ", trias.NbQuadrangles()
-print "Volumes    : ", trias.NbVolumes()
+print("Number of elements after MergeEqualElements:")
+print("Edges      : ", trias.NbEdges())
+print("Triangles  : ", trias.NbTriangles())
+print("Quadrangles: ", trias.NbQuadrangles())
+print("Volumes    : ", trias.NbVolumes())
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 227eb636e4da210b060f1c45ecdbb6962214eb44..f14c2ca62be8fa4b3aaf7c1d3325d359a303c719 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create two faces of a box
 box1 = geompy.MakeBox(0., 0., -10., 30., 20., 25.)
index 77042de9981579ca6af4b32dea7dc01088d8d9ab..b593e0ef1864813baad55f4501b7ce3c6a545d00 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
index 9264a5c4c508aa81410e9db22f167098ddb7a7b4..59403f7db215d44b7748eae8a2359614c8ba62e5 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # make two not sewed quadranges
 OY0 = geompy.MakeVectorDXDYDZ(0, 1, 0)
@@ -45,6 +45,6 @@ CreatePolyedrs = False
 res = mesh.SewFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1,
                           FirstNodeID2, SecondNodeID2, LastNodeID2,
                           CreatePolygons, CreatePolyedrs )
-print res
-print "nb polygons:", mesh.NbPolygons()
+print(res)
+print("nb polygons:", mesh.NbPolygons())
 
index e0120b4810f5dc87b5a03dfc88aac0dc32bf8cfa..af3d9ff8e69e96f9521bbf12c7bfb1317278e062 100644 (file)
@@ -4,11 +4,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create two boxes
 box1 = geompy.MakeBox(0.,  0., 0., 10., 10., 10.)
@@ -37,27 +37,27 @@ mesh.Compute()
 # find elements to sew
 face1 = geompy.GetFaceNearPoint( aComp, geompy.MakeVertex( 5, 10, 5 ))
 IDsOfSide1Elements = mesh.GetSubMeshElementsId( face1 )
-print "side faces 1:",IDsOfSide1Elements
+print("side faces 1:",IDsOfSide1Elements)
 
 face1Translated = geompy.MakeTranslation( face1, 0,5,0 )
 faceFilter = smesh.GetFilter( SMESH.FACE, SMESH.FT_BelongToGeom,'=', face1Translated )
 IDsOfSide2Elements = mesh.GetIdsFromFilter( faceFilter )
-print "side faces 2:",IDsOfSide2Elements
+print("side faces 2:",IDsOfSide2Elements)
 
 # find corresponding nodes on sides
 edge1 = geompy.GetEdgeNearPoint( aComp, geompy.MakeVertex( 0, 10, 5 ))
 segs1 = mesh.GetSubMeshElementsId( edge1 ) # mesh segments generated on edge1
 NodeID1OfSide1ToMerge = mesh.GetElemNode( segs1[0], 0 )
 NodeID2OfSide1ToMerge = mesh.GetElemNode( segs1[0], 1 )
-print "nodes of side1:", [NodeID1OfSide1ToMerge,NodeID2OfSide1ToMerge]
+print("nodes of side1:", [NodeID1OfSide1ToMerge,NodeID2OfSide1ToMerge])
 
 edge2 = geompy.GetEdgeNearPoint( aComp, geompy.MakeVertex( 0, 15, 5 ))
 segs2 = mesh.GetSubMeshElementsId( edge2 ) # mesh segments generated on edge2
 NodeID1OfSide2ToMerge = mesh.GetElemNode( segs2[0], 0 )
 NodeID2OfSide2ToMerge = mesh.GetElemNode( segs2[0], 1 )
-print "nodes of side2:", [NodeID1OfSide2ToMerge,NodeID2OfSide2ToMerge]
+print("nodes of side2:", [NodeID1OfSide2ToMerge,NodeID2OfSide2ToMerge])
 
 res = mesh.SewSideElements(IDsOfSide1Elements, IDsOfSide2Elements,
                            NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge,
                            NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge)
-print res
+print(res)
index 0abe520131492f6585d342c2a73a2577f244ee3c..2e6a8c6d5f8c795a0177fe0fb9a4e2d1b3760fd9 100644 (file)
@@ -6,11 +6,11 @@ salome.salome_init()
 
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Create a box
 
@@ -36,18 +36,18 @@ faces1 = mesh.CreateEmptyGroup( SMESH.FACE, 'faces1' )
 faces1.Add( [ 144, 151, 158 ] )
 
 # Duplicate nodes
-print "\nMesh before the first nodes duplication:"
-print "Nodes       : ", mesh.NbNodes()
-print "Edges       : ", mesh.NbEdges()
-print "Quadrangles : ", mesh.NbQuadrangles()
+print("\nMesh before the first nodes duplication:")
+print("Nodes       : ", mesh.NbNodes())
+print("Edges       : ", mesh.NbEdges())
+print("Quadrangles : ", mesh.NbQuadrangles())
 
 groupOfCreatedNodes = mesh.DoubleNodeGroup(nodes1, faces1, theMakeGroup=True)
-print "New nodes:", groupOfCreatedNodes.GetIDs()
+print("New nodes:", groupOfCreatedNodes.GetIDs())
 
-print "\nMesh after the first nodes duplication:"
-print "Nodes       : ", mesh.NbNodes()
-print "Edges       : ", mesh.NbEdges()
-print "Quadrangles : ", mesh.NbQuadrangles()
+print("\nMesh after the first nodes duplication:")
+print("Nodes       : ", mesh.NbNodes())
+print("Edges       : ", mesh.NbEdges())
+print("Quadrangles : ", mesh.NbQuadrangles())
 
 # Duplicate nodes and border elements
 
@@ -64,18 +64,18 @@ faces2 = mesh.CreateEmptyGroup( SMESH.FACE, 'faces2' )
 faces2.Add( [ 141, 148, 155 ] )
 
 # Duplicate nodes
-print "\nMesh before the second nodes duplication:"
-print "Nodes       : ", mesh.NbNodes()
-print "Edges       : ", mesh.NbEdges()
-print "Quadrangles : ", mesh.NbQuadrangles()
+print("\nMesh before the second nodes duplication:")
+print("Nodes       : ", mesh.NbNodes())
+print("Edges       : ", mesh.NbEdges())
+print("Quadrangles : ", mesh.NbQuadrangles())
 
 groupOfNewEdges = mesh.DoubleNodeElemGroup( edges, nodes2, faces2, theMakeGroup=True )
-print "New edges:", groupOfNewEdges.GetIDs()
+print("New edges:", groupOfNewEdges.GetIDs())
 
-print "\nMesh after the second nodes duplication:"
-print "Nodes       : ", mesh.NbNodes()
-print "Edges       : ", mesh.NbEdges()
-print "Quadrangles : ", mesh.NbQuadrangles()
+print("\nMesh after the second nodes duplication:")
+print("Nodes       : ", mesh.NbNodes())
+print("Edges       : ", mesh.NbEdges())
+print("Quadrangles : ", mesh.NbQuadrangles())
 
 
 # Duplicate elements only
@@ -92,4 +92,4 @@ mesh.DoubleElements([ 1, 2 ])
 
 # Update object browser
 if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(False)
+    salome.sg.updateObjBrowser()
index e1d850ec6a6e29464aece45a54302dd1ff61bd34..072fc3ca1903f124a3f9de36dc80559224221345 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -35,7 +35,7 @@ init_mesh.AutomaticHexahedralization() # it makes 3 x 3 x 3 hexahedrons
 # remove some faces
 faces = init_mesh.GetElementsByType( SMESH.FACE )
 nb_faces = len( faces )
-rm_face = faces[ : nb_faces/2]
+rm_face = faces[ : nb_faces // 2]
 init_mesh.RemoveElements( rm_face )
 
 # restore boundary in this mesh
@@ -65,7 +65,7 @@ init_mesh.AutomaticHexahedralization()
 # remove some edges
 edges = init_mesh.GetElementsByType( SMESH.EDGE )
 nb_edges = len( edges )
-rm_edge = edges[ : nb_edges/2]
+rm_edge = edges[ : nb_edges // 2]
 init_mesh.RemoveElements( rm_edge )
 
 
index 37a3f5eed20b01b3dbb18da1b46a60dc3fc56a83..12d03892fa8f5fce8012bf9fe7424fdf4a9e4e0b 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 
@@ -63,9 +63,9 @@ group1 = mesh3D.Group( faces[1] )
 
 # pass group0 and ids of faces of group1 to inverse
 nbRev = mesh3D.Reorient2DBy3D([ group0, group1.GetIDs() ], mesh3D, theOutsideNormal=False)
-print "Nb reoriented faces:", nbRev
+print("Nb reoriented faces:", nbRev)
 
 # orient the reversed faces back
 nbRev = mesh3D.Reorient2DBy3D( mesh3D, mesh3D, theOutsideNormal=True)
-print "Nb re-reoriented faces:", nbRev
+print("Nb re-reoriented faces:", nbRev)
 
index c4b95fdafd945440e9733368422c9f6c32f90760..1af8322e308f5279bf3f5201be1573152f1c1c13 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import salome_notebook
 
 import numpy as np
index 85bc69fbca2457e2af92fdcab8574347b7e09818..d90d24a3a8f875508bff279b7947f9482d0aa9d2 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # create a box
 box = geompy.MakeBox(0., 0., 0., 20., 20., 20.)
@@ -44,40 +44,40 @@ group = tetra.CreateEmptyGroup( SMESH.FACE, 'Group' )
 nbAdd = group.Add( [ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 ] )
 
 # Print information about the mesh
-print "Information about mesh:" 
-print "Number of nodes       : ", tetra.NbNodes()
-print "Number of edges       : ", tetra.NbEdges()
-print "Number of faces       : ", tetra.NbFaces()
-print "          triangles   : ", tetra.NbTriangles()
-print "          quadrangles : ", tetra.NbQuadrangles()
-print "          polygons    : ", tetra.NbPolygons()
-print "Number of volumes     : ", tetra.NbVolumes()
-print "          tetrahedrons: ", tetra.NbTetras()
-print "          hexahedrons : ", tetra.NbHexas()
-print "          prisms      : ", tetra.NbPrisms()
-print "          pyramids    : ", tetra.NbPyramids()
-print "          polyhedrons : ", tetra.NbPolyhedrons(
+print("Information about mesh:") 
+print("Number of nodes       : ", tetra.NbNodes())
+print("Number of edges       : ", tetra.NbEdges())
+print("Number of faces       : ", tetra.NbFaces())
+print("          triangles   : ", tetra.NbTriangles())
+print("          quadrangles : ", tetra.NbQuadrangles())
+print("          polygons    : ", tetra.NbPolygons())
+print("Number of volumes     : ", tetra.NbVolumes())
+print("          tetrahedrons: ", tetra.NbTetras())
+print("          hexahedrons : ", tetra.NbHexas())
+print("          prisms      : ", tetra.NbPrisms())
+print("          pyramids    : ", tetra.NbPyramids())
+print("          polyhedrons : ", tetra.NbPolyhedrons()
 
 # Get Information About Mesh by GetMeshInfo
-print "\nInformation about mesh by GetMeshInfo:"
+print("\nInformation about mesh by GetMeshInfo:")
 info = smesh.GetMeshInfo(tetra)
-keys = info.keys(); keys.sort()
+keys = list(info.keys()); keys.sort()
 for i in keys:
-  print "  %s   :  %d" % ( i, info[i] )
+  print("  %s   :  %d" % ( i, info[i] ))
   pass
 
 # Get Information About Group by GetMeshInfo
-print "\nInformation about group by GetMeshInfo:"
+print("\nInformation about group by GetMeshInfo:")
 info = smesh.GetMeshInfo(group)
-keys = info.keys(); keys.sort()
+keys = list(info.keys()); keys.sort()
 for i in keys:
-  print "  %s  :  %d" % ( i, info[i] )
+  print("  %s  :  %d" % ( i, info[i] ))
   pass
 
 # Get Information About SubMesh by GetMeshInfo
-print "\nInformation about Submesh by GetMeshInfo:"
+print("\nInformation about Submesh by GetMeshInfo:")
 info = smesh.GetMeshInfo(submesh)
-keys = info.keys(); keys.sort()
+keys = list(info.keys()); keys.sort()
 for i in keys:
-  print "  %s  :  %d" % ( i, info[i] )
+  print("  %s  :  %d" % ( i, info[i] ))
   pass
index 2ed0a214b0e3c5b08bd1e9f98defa8d4d4eca198..0dfa09a8557feed77f5746a8bc64d833208ef44b 100644 (file)
@@ -5,11 +5,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Create a geometry to mesh
 box = geompy.MakeBoxDXDYDZ(100,100,100)
index 7aa83b0849f15c5ed13eee0345671303feb711ed..542c5d7fdb3985b6296f7c5ae41d0a83947b800d 100755 (executable)
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-#  -*- coding: iso-8859-1 -*-
+#!/usr/bin/env python3
 # Copyright (C) 2012-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
@@ -31,7 +30,7 @@
 # class.
 # 
 # This script is intended for internal usage - only
-# for generatation of the extra developer documentation for
+# for generation of the extra developer documentation for
 # the meshing plug-in(s).
 # 
 # Usage:
 #
 ################################################################################
 
+import inspect
 import sys
 
 def main(plugin_name, dummymeshhelp = True, output_file = "smeshBuilder.py"):
     plugin_module_name  = plugin_name + "Builder"
     plugin_module       = "salome.%s.%s" % (plugin_name, plugin_module_name)
     try:
-        exec( "from salome.smesh.smeshBuilder import *")
-        exec( "import %s" % plugin_module )
-        exec( "mod = %s" % plugin_module )
+        exec("from salome.smesh.smeshBuilder import *", globals())
+        exec("import %s" % plugin_module, globals())
+        exec("mod = %s" % plugin_module , globals())
         methods = {}
         for attr in dir( mod ):
             if attr.startswith( '_' ): continue
             algo = getattr( mod, attr )
-            if type( algo ).__name__ == 'classobj' and hasattr( algo, "meshMethod" ):
+            if inspect.isclass(algo) and hasattr(algo, "meshMethod"):
                 method = getattr( algo, "meshMethod" )
                 if method not in methods: methods[ method ] = []
                 methods[ method ].append( algo )
@@ -98,44 +98,43 @@ def main(plugin_name, dummymeshhelp = True, output_file = "smeshBuilder.py"):
                     if docHelper: break
                     pass
                 if not docHelper: docHelper = "Creates new algorithm."
-                output.append( " ## %s" % docHelper )
-                output.append( " #" )
-                output.append( " #  This method is dynamically added to %Mesh class by the meshing plug-in(s). " )
-                output.append( " #" )
-                output.append( " #  If the optional @a geom_shape parameter is not set, this algorithm is global (applied to whole mesh)." )
-                output.append( " #  Otherwise, this algorithm defines a submesh based on @a geom_shape subshape." )
-                output.append( " #  @param algo_type type of algorithm to be created; allowed values are specified by classes implemented by plug-in (see below)" )
-                output.append( " #  @param geom_shape if defined, the subshape to be meshed (GEOM_Object)" )
-                output.append( " #  @return An instance of Mesh_Algorithm sub-class according to the specified @a algo_type, see " )
-                output.append( " #  %s" % ", ".join( [ "%s.%s" % ( plugin_module_name, algo.__name__ ) for algo in methods[ method ] ] ) )
-                output.append( " def %s(algo_type, geom_shape=0):" % method )
-                output.append( "   pass" )
+                output.append( "  ## %s" % docHelper )
+                output.append( "  #" )
+                output.append( "  #  This method is dynamically added to %Mesh class by the meshing plug-in(s). " )
+                output.append( "  #" )
+                output.append( "  #  If the optional @a geom_shape parameter is not set, this algorithm is global (applied to whole mesh)." )
+                output.append( "  #  Otherwise, this algorithm defines a submesh based on @a geom_shape subshape." )
+                output.append( "  #  @param algo_type type of algorithm to be created; allowed values are specified by classes implemented by plug-in (see below)" )
+                output.append( "  #  @param geom_shape if defined, the subshape to be meshed (GEOM_Object)" )
+                output.append( "  #  @return An instance of Mesh_Algorithm sub-class according to the specified @a algo_type, see " )
+                output.append( "  #  %s" % ", ".join( [ "%s.%s" % ( plugin_module_name, algo.__name__ ) for algo in methods[ method ] ] ) )
+                output.append( "  def %s(algo_type, geom_shape=0):" % method )
+                output.append( "    pass" )
                 pass
-            f = open(output_file, "w")
-            for line in output: f.write( line + "\n" )
-            f.close()
+            with open(output_file, "w", encoding='utf8') as f:
+                f.write('\n'.join(output))
             pass
         pass
-    except Exception, e:
-        print e
+    except Exception as e:
+        print(e)
         pass
     pass
     
 if __name__ == "__main__":
-    import optparse
-    parser = optparse.OptionParser(usage="%prog [options] plugin")
+    import argparse
+    parser = argparse.ArgumentParser()
     h  = "Output file (smesh.py by default)"
-    parser.add_option("-o", "--output", dest="output",
-                      action="store", default=None, metavar="file",
+    parser.add_argument("-o", "--output", dest="output",
+                      action="store", default='smesh.py', metavar="file",
                       help=h)
     h  = "If this option is True, dummy help for Mesh class is added. "
     h += "This option should be False (default) when building documentation for SMESH module "
     h += "and True when building documentation for meshing plug-ins."
-    parser.add_option("-d", "--dummy-mesh-help", dest="dummymeshhelp",
+    parser.add_argument("-d", "--dummy-mesh-help", dest="dummymeshhelp",
                       action="store_true", default=False,
                       help=h)
-    (options, args) = parser.parse_args()
+    parser.add_argument("plugin", help='Name of plugin')
+    args = parser.parse_args()
 
-    if len( args ) < 1: sys.exit("Plugin name is not specified")
-    main( args[0], options.dummymeshhelp, options.output )
+    main( args.plugin, args.dummymeshhelp, args.output )
     pass
index 71c18b1e08ebc1f88c99b04179b782dadeaecacc..9c8af6c9d9ccb7937d89cb0a1415dee657a3cfea 100644 (file)
@@ -20,13 +20,13 @@ salome.salome_init()
 \n the old mode (from dump):
 \code
 import smesh, SMESH, SALOMEDS
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 \endcode
 \n the new mode:
 \code
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 \endcode
 
 
index 524a4ceb074281232f912b8c8fcfec83ef7b397b..5a24ee76ca5cecd844edb715fc3ccd0845ca58e0 100644 (file)
@@ -28,7 +28,7 @@ A usual workflow to generate a mesh on geometry is following:
   <li>Create an instance of \ref smeshBuilder.smeshBuilder "smeshBuilder":
     <pre>
       from salome.smesh import smeshBuilder
-      smesh = smeshBuilder.New( salome.myStudy )
+      smesh = smeshBuilder.New()
     </pre></li>
   <li>Create a \ref smeshBuilder.Mesh "mesh" object:
     <pre>
index 283aa1b297b1a83e6c852eb2991b2a8401470a77..2784e4591bb747fb6074da7de4c241105f8207c5 100644 (file)
@@ -480,7 +480,7 @@ module SMESH
   /*!
   *  Filter
   */
-  interface Filter: SALOME::GenericObj, SMESH_IDSource
+  interface Filter: SMESH_IDSource
   {
     /*!
     * Structure containing information about one criterion
index dd0866f8a240579c824e61ceea0755e75a0217b6..ec7b9ebba6250876b1eee7ca8e349bf89de83d02 100644 (file)
@@ -139,14 +139,19 @@ module SMESH
     boolean IsEmbeddedMode();
 
     /*!
-      Set the current study
+      Update the study
      */
-    void SetCurrentStudy( in SALOMEDS::Study theStudy );
-
+    void UpdateStudy();
+    
+    /*!
+      Set enable publishing in the study
+     */
+    void SetEnablePublish( in boolean theIsEnablePublish );
+    
     /*!
-      Get the current study
+      Get enable publishing in the study
      */
-    SALOMEDS::Study GetCurrentStudy();
+    boolean IsEnablePublish();
 
     /*!
      * Create a hypothesis that can be shared by different parts of the mesh.
@@ -406,10 +411,20 @@ module SMESH
      */
     long GetObjectId(in Object theObject);
 
+    /*!
+     * \brief Get version of MED format being used.
+     */
+    string GetMEDFileVersion();
+
     /*!
      * \brief Get MED version of the file by its name.
      */
-    boolean GetMEDVersion(in string theFileName, out MED_VERSION theVersion);
+    string GetMEDVersion(in string theFileName);
+
+    /*!
+     * \brief Check compatibility of file with MED format being used.
+     */
+    boolean CheckCompatibility(in string theFileName);
 
     /*!
      * \brief Get names of meshes defined in file with the specified name.
index e5e533d18c67d850c1c748520c5351c393a61f3f..71a256525ace6ee46303283edfe9deb391ce7fea 100644 (file)
@@ -41,7 +41,7 @@ module SMESH
   /*!
    * SMESH_Group: base interface of group object
    */
-  interface SMESH_GroupBase : SALOME::GenericObj, SMESH_IDSource
+  interface SMESH_GroupBase : SMESH_IDSource
   {
     /*!
      * Sets group name
index f01de1d07abfc3791452470d0c6f3102a469412d..69c41d4d64a49f314ea73ef9f558ab4ef02afbb1 100644 (file)
@@ -236,32 +236,6 @@ module SMESH
     DRS_FAIL            // general failure (exception etc.)
   };
 
-  /*!
-   * Enumeration for ExportToMED*()
-   * MED_V2_1 and MED_V2_2 are here for compatibility and mean respectively obsolete and MED_LATEST.
-   * MED_MINOR_0 to MED_MINOR_9 are use to specify the minor version used by MEDfichier
-   * to write MED files (major version cannot be changed).
-   * This allows backward compatibility from a newer version of SALOME to an older one:
-   * for instance, a MESH produced in SALOME 8.4 (med 3.3) can be written in med 3.2 format
-   * to be read in SALOME 8.3.
-   */
-  enum MED_VERSION
-  {
-    MED_V2_1,
-    MED_V2_2,
-    MED_LATEST,
-    MED_MINOR_0,
-    MED_MINOR_1,
-    MED_MINOR_2,
-    MED_MINOR_3,
-    MED_MINOR_4,
-    MED_MINOR_5,
-    MED_MINOR_6,
-    MED_MINOR_7,
-    MED_MINOR_8,
-    MED_MINOR_9
-  };
-
   /*! 
    * \brief A structure containing information about MED file
    */
@@ -358,7 +332,7 @@ module SMESH
   typedef sequence<SMESH_subMesh>     submesh_array;
   typedef sequence<submesh_array>     submesh_array_array;
 
-  interface SMESH_Mesh : SALOME::GenericObj, SMESH_IDSource
+  interface SMESH_Mesh : SMESH_IDSource
   {
     /*!
      * Return true if there is a geometry to be meshed
@@ -615,11 +589,6 @@ module SMESH
      */
     long GetId();
 
-    /*!
-     * Get the study Id
-     */
-    long GetStudyId();
-
     /*!
      * Obtain instance of SMESH_MeshEditor
      */
@@ -646,13 +615,12 @@ module SMESH
     boolean HasDuplicatedGroupNamesMED();
 
     /*!
-     * Export Mesh to a MED Format file
+     * Export a Mesh to MED file.
      * @params
-     * - file : name of the MED file
+     * - fileName : name of the MED file
      * - auto_groups : boolean parameter for creating/not creating
      *                 the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
      *                 the typical use is auto_groups=false.
-     * - version : defines the version of format of MED file, that will be created
      * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
      * - autoDimension : if @c true, a space dimension of a MED mesh can be either
      *         - 1D if all mesh nodes lie on OX coordinate axis, or
@@ -660,18 +628,16 @@ module SMESH
      *         - 3D in the rest cases.
      *         If @a autoDimension is @c false, the space dimension is always 3.
      */
-    void ExportToMEDX( in string      file, 
-                       in boolean     auto_groups, 
-                       in MED_VERSION version, 
-                       in boolean     overwrite,
-                       in boolean     autoDimension) raises (SALOME::SALOME_Exception);
+    void ExportMED( in string      fileName, 
+                   in boolean     auto_groups, 
+                   in boolean     overwrite,
+                   in boolean     autoDimension) raises (SALOME::SALOME_Exception);
 
     /*!
      * Export a [part of] Mesh into a MED file
      * @params
      * - meshPart : a part of mesh to store
-     * - file : name of the MED file
-     * - version : define the version of format of MED file, that will be created
+     * - fileName : name of the MED file
      * - overwrite : boolean parameter for overwriting/not overwriting the file, if it exists
      * - autoDimension : if @c True, a space dimension for export is defined by mesh 
      *                 configuration; for example a planar mesh lying on XOY plane
@@ -686,31 +652,13 @@ module SMESH
      *         - 's' stands for _solids_ field.
      */
     void ExportPartToMED( in SMESH_IDSource     meshPart,
-                          in string             file,
+                          in string             fileName,
                           in boolean            auto_groups,
-                          in MED_VERSION        version,
                           in boolean            overwrite,
                           in boolean            autoDimension,
                           in GEOM::ListOfFields fields,
                           in string             geomAssocFields ) raises (SALOME::SALOME_Exception);
 
-    /*!
-     * Export Mesh to a MED Format file
-     * Works, just the same as ExportToMEDX, with overwrite parameter equal to true.
-     * The method is kept in order to support old functionality
-     */
-    void ExportToMED( in string file, in boolean auto_groups, in MED_VERSION theVersion )
-      raises (SALOME::SALOME_Exception);
-
-    /*!
-     * Export Mesh to MED_LATEST MED format
-     * Works, just the same as ExportToMEDX with MED_VERSION parameter equal to MED_LATEST
-     * and overwrite parameter equal to true
-     * The method is kept in order to support old functionality
-     */
-    void ExportMED( in string file, in boolean auto_groups )
-      raises (SALOME::SALOME_Exception);
-
     /*!
      * Export Mesh to SAUV formatted file
      * Write a temporary med file and use med2sauv
@@ -718,11 +666,6 @@ module SMESH
     void ExportSAUV( in string file, in boolean auto_groups )
       raises (SALOME::SALOME_Exception);
 
-    /*!
-     * Return string representation of a MED file version comprising nbDigits
-     */
-    string GetVersionString(in MED_VERSION version, in short nbDigits);
-
     /*!
      * Export Mesh to different Formats
      * (UNV supported version is I-DEAS 10)
@@ -1041,7 +984,7 @@ module SMESH
     string_array GetLastParameters();
   };
 
-  interface SMESH_subMesh : SALOME::GenericObj, SMESH_IDSource
+  interface SMESH_subMesh : SMESH_IDSource
   {
     /*!
      *
index a1d573d7f51c8af47b62f40587d7c53e21a74ccc..3e18f1535d40f54c5ea2475f4ba38018c1b9a25c 100644 (file)
             <service-by-default>0</service-by-default>
             <inParameter-list>
               <inParameter>
-               <inParameter-type>string</inParameter-type>
-               <inParameter-name>anHyp</inParameter-name>
-               <inParameter-comment></inParameter-comment>
-              </inParameter>
-              <inParameter>
-               <inParameter-type>long</inParameter-type>
-               <inParameter-name>studyId</inParameter-name>
-               <inParameter-comment></inParameter-comment>
+                <inParameter-type>string</inParameter-type>
+                <inParameter-name>anHyp</inParameter-name>
+                <inParameter-comment></inParameter-comment>
               </inParameter>
             </inParameter-list>
             <outParameter-list>
               <inParameter-name>geomEngine</inParameter-name>
               <inParameter-comment></inParameter-comment>
             </inParameter>
-            <inParameter>
-              <inParameter-type>long</inParameter-type>
-              <inParameter-name>studyId</inParameter-name>
-              <inParameter-comment></inParameter-comment>
-            </inParameter>
             <inParameter>
               <inParameter-type>GEOM/GEOM_Object</inParameter-type>
               <inParameter-name>aShape</inParameter-name>
index c392d12ac5b53e2ea9b5fd95190b54610336b6df..ce7b79ae452489bb2979179ea678da907ef87d3f 100644 (file)
@@ -25,8 +25,7 @@ INCLUDE_DIRECTORIES(
   ${CAS_INCLUDE_DIRS}
   ${VTK_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
-  ${PROJECT_SOURCE_DIR}/src/MEDWrapper/Base
-  ${PROJECT_SOURCE_DIR}/src/MEDWrapper/Factory
+  ${PROJECT_SOURCE_DIR}/src/MEDWrapper
   ${PROJECT_SOURCE_DIR}/src/Driver
   ${PROJECT_SOURCE_DIR}/src/SMDS
   ${PROJECT_SOURCE_DIR}/src/SMESHUtils
@@ -45,8 +44,6 @@ SET(_link_LIBRARIES
   ${Boost_LIBRARIES}
   MeshDriver
   MEDWrapper
-  MEDWrapperBase
-  MEDWrapper_V2_2
 )
 
 SET(_link_LIBRARIES_bin
index a11ba4860bc88e09e8ef0f58ee1213ca38189fca..b758617e988e1f4a67cf7e878daafffdbb94bdb6 100644 (file)
@@ -383,11 +383,7 @@ DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper,
   }
   string aValue = aStr.str();
   // PAL19785,0019867 - med forbids whitespace to be the last char in the name
-  int maxSize;
-  //if ( theWrapper->GetVersion() == MED::eV2_1 )
-  //  maxSize = MED::GetNOMLength<MED::eV2_1>();
-  //else
-    maxSize = MED::GetNOMLength<MED::eV2_2>();
+  int maxSize = MED::GetNOMLength();
   int lastCharPos = min( maxSize, (int) aValue.size() ) - 1;
   while ( isspace( aValue[ lastCharPos ] ))
     aValue.resize( lastCharPos-- );
index 000316955a73241fe05852f971e80d25461f14b6..b8d73352b99bac97cfa98667350f9a222664f265 100644 (file)
@@ -110,7 +110,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
 #endif
     myFamilies.clear();
     if(MYDEBUG) MESSAGE("Perform - myFile : "<<myFile);
-    PWrapper aMed = CrWrapper(myFile,true);
+    PWrapper aMed = CrWrapperR(myFile);
 
     aResult = DRS_EMPTY;
     TInt aNbMeshes = aMed->GetNbMeshes();
@@ -1058,7 +1058,7 @@ list<string> DriverMED_R_SMESHDS_Mesh::GetMeshNames(Status& theStatus)
   try {
     if(MYDEBUG) MESSAGE("GetMeshNames - myFile : " << myFile);
     theStatus = DRS_OK;
-    PWrapper aMed = CrWrapper(myFile);
+    PWrapper aMed = CrWrapperR(myFile);
 
     if (TInt aNbMeshes = aMed->GetNbMeshes()) {
       for (int iMesh = 0; iMesh < aNbMeshes; iMesh++) {
index 57e8edf19482b6db36f39ebea2646fcad0a6d9e5..d0e89a2b9a1865cd8746f60b8d65c6bbac075a1a 100644 (file)
@@ -254,7 +254,7 @@ Driver_Mesh::Status DriverMED_W_Field::Perform()
   if ( !myMesh )
     return addMessage("Supporting mesh not set", /*isFatal=*/true );
 
-  MED::PWrapper medFile = MED::CrWrapper( myFile, MED::eV2_2 );
+  MED::PWrapper medFile = MED::CrWrapperW( myFile );
   MED::PMeshInfo meshInfo;
   if ( myMeshId > 0 )
   {
index 75ebf667aef77b4fd8a0999a6abb512c48e3385a..55e80fbfd4cf52e54a3add0f87a80d873f0738d7 100644 (file)
@@ -52,7 +52,6 @@ using namespace MED;
 
 
 DriverMED_W_SMESHDS_Mesh::DriverMED_W_SMESHDS_Mesh():
-  myMedVersion(MED::eV2_2),
   myAllSubMeshes (false),
   myDoGroupOfNodes (false),
   myDoGroupOfEdges (false),
@@ -65,57 +64,11 @@ DriverMED_W_SMESHDS_Mesh::DriverMED_W_SMESHDS_Mesh():
   myDoAllInGroups(false)
 {}
 
-void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName, 
-                                       MED::EVersion      theId)
-{
-  Driver_SMESHDS_Mesh::SetFile(theFileName);
-  myMedVersion = theId;
-  //MESSAGE("myMedVersion:"<<myMedVersion);
-}
-
 void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName)
 {
   Driver_SMESHDS_Mesh::SetFile(theFileName);
 }
 
-/*!
- * MED version is either the latest available, or with an inferior minor,
- * to ensure backward compatibility on writing med files.
- */
-string DriverMED_W_SMESHDS_Mesh::GetVersionString(const MED::EVersion theVersion, int theNbDigits)
-{
-  TInt majeur, mineur, release;
-  majeur =  mineur = release = 0;
-  MED::GetVersionRelease<eV2_2>(majeur, mineur, release);
-  TInt imposedMineur = mineur;
-  switch( theVersion ) {
-    case MED::eV2_1     :
-    case MED::eV2_2     :
-    case MED::eLATEST   : break;
-    case MED::eMINOR_0  : imposedMineur = 0; break;
-    case MED::eMINOR_1  : imposedMineur = 1; break;
-    case MED::eMINOR_2  : imposedMineur = 2; break;
-    case MED::eMINOR_3  : imposedMineur = 3; break;
-    case MED::eMINOR_4  : imposedMineur = 4; break;
-    case MED::eMINOR_5  : imposedMineur = 5; break;
-    case MED::eMINOR_6  : imposedMineur = 6; break;
-    case MED::eMINOR_7  : imposedMineur = 7; break;
-    case MED::eMINOR_8  : imposedMineur = 8; break;
-    case MED::eMINOR_9  : imposedMineur = 9; break;
-    case MED::eVUnknown : imposedMineur = mineur; break;
-  }
-  if (imposedMineur > mineur)
-    imposedMineur = mineur;
-  ostringstream name;
-  if ( theNbDigits > 0 )
-    name << majeur;
-  if ( theNbDigits > 1 )
-    name << "." << imposedMineur;
-  if ( theNbDigits > 2 )
-    name << "." << release;
-  return name.str();
-}
-
 void DriverMED_W_SMESHDS_Mesh::AddGroup(SMESHDS_GroupBase* theGroup)
 {
   myGroups.push_back(theGroup);
@@ -477,8 +430,8 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         break;
       }
     }
-    //MESSAGE("myMedVersion:"<<myMedVersion);
-    MED::PWrapper myMed = CrWrapper(myFile,myMedVersion);
+
+    MED::PWrapper myMed = CrWrapperW(myFile);
     PMeshInfo aMeshInfo = myMed->CrMeshInfo(aMeshDimension,aSpaceDimension,aMeshName);
     //MESSAGE("Add - aMeshName : "<<aMeshName<<"; "<<aMeshInfo->GetName());
     myMed->SetMeshInfo(aMeshInfo);
index a9539b9e8741fe509dc95803d76eab4d74c5e345..fb45dc1b2fec150204943c4d2458ebf17960fbad 100644 (file)
@@ -47,12 +47,9 @@ class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 
   DriverMED_W_SMESHDS_Mesh();
 
-  virtual void SetFile(const std::string& theFileName);
-  void SetFile(const std::string& theFileName, MED::EVersion theId);
+  void SetFile(const std::string& theFileName);
   void SetAutoDimension(bool toFindOutDimension) { myAutoDimension = toFindOutDimension; }
 
-  static std::string GetVersionString(const MED::EVersion theVersion, int theNbDigits=2);
-
   void AddGroupOfNodes();
   void AddGroupOfEdges();
   void AddGroupOfFaces();
@@ -77,7 +74,6 @@ class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 
  private:
 
-  MED::EVersion myMedVersion;
   std::list<SMESHDS_GroupBase*> myGroups;
   bool myAllSubMeshes;
   std::vector<SMESHDS_SubMesh*> mySubMeshes;
diff --git a/src/MEDWrapper/Base/CMakeLists.txt b/src/MEDWrapper/Base/CMakeLists.txt
deleted file mode 100644 (file)
index 85f66d8..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (C) 2012-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# --- options ---
-# additional include directories
-INCLUDE_DIRECTORIES(
-  ${HDF5_INCLUDE_DIRS}
-  ${Boost_INCLUDE_DIRS}
-  ${KERNEL_INCLUDE_DIRS}
-  ${MEDFILE_INCLUDE_DIRS}
-)
-
-# additional preprocessor / compiler flags
-ADD_DEFINITIONS(
-  ${HDF5_DEFINITIONS}
-  ${BOOST_DEFINITIONS}
-)
-
-SET(_link_LIBRARIES
-  ${Boost_LIBRARIES}
-)
-
-# --- headers ---
-
-# header files / no moc processing
-SET(MEDWrapperBase_HEADERS
-  MED_Common.hxx
-  MED_Vector.hxx
-  MED_SharedPtr.hxx
-  MED_SliceArray.hxx
-  MED_Wrapper.hxx
-  MED_TWrapper.hxx
-  MED_Structures.hxx
-  MED_TStructures.hxx
-  MED_Algorithm.hxx
-  MED_GaussUtils.hxx
-  MED_CoordUtils.hxx
-  MED_Utilities.hxx
-  MED_GaussDef.hxx
-  MED_WrapperBase.hxx
-)
-
-# --- sources ---
-
-# sources / static
-SET(MEDWrapperBase_SOURCES
-  MED_Structures.cxx
-  MED_Wrapper.cxx
-  MED_Algorithm.cxx
-  MED_GaussUtils.cxx
-  MED_CoordUtils.cxx
-  MED_Utilities.cxx
-  MED_GaussDef.cxx
-)
-
-# --- rules ---
-ADD_LIBRARY(MEDWrapperBase ${MEDWrapperBase_SOURCES})
-TARGET_LINK_LIBRARIES(MEDWrapperBase ${_link_LIBRARIES})
-INSTALL(TARGETS MEDWrapperBase EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
-
-INSTALL(FILES ${MEDWrapperBase_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
diff --git a/src/MEDWrapper/Base/MED_Algorithm.cxx b/src/MEDWrapper/Base/MED_Algorithm.cxx
deleted file mode 100644 (file)
index b363572..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "MED_Algorithm.hxx"
-#include "MED_Wrapper.hxx"
-
-#include "MED_Utilities.hxx"
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-static int MYVALUEDEBUG = 0;
-#else
-// static int MYDEBUG = 0;
-// static int MYVALUEDEBUG = 0;
-#endif
-
-namespace MED
-{
-  //---------------------------------------------------------------
-  TEntity2TGeom2ElemInfo 
-  GetEntity2TGeom2ElemInfo(const PWrapper& theWrapper, 
-                           const PMeshInfo& theMeshInfo,
-                           const MED::TEntityInfo& theEntityInfo)
-  {
-    MSG(MYDEBUG,"GetElemsByEntity(...)");
-    TEntity2TGeom2ElemInfo anEntity2TGeom2ElemInfo;
-    MED::TEntityInfo::const_iterator anIter = theEntityInfo.begin();
-    PElemInfo anElemInfo;
-    TErr anErr;
-    for(; anIter != theEntityInfo.end(); anIter++){
-      const EEntiteMaillage& anEntity = anIter->first;
-      const TGeom2Size& aGeom2Size = anIter->second;
-      TGeom2ElemInfo& aGeom2ElemInfo = anEntity2TGeom2ElemInfo[anEntity];
-
-      if(anEntity == eNOEUD){
-        aGeom2ElemInfo[ePOINT1] = theWrapper->GetPElemInfo(theMeshInfo);
-        continue;
-      }
-
-      TGeom2Size::const_iterator anIter2 = aGeom2Size.begin();
-      for(; anIter2 != aGeom2Size.end(); anIter2++){
-        const EGeometrieElement& aGeom = anIter2->first;
-        aGeom2ElemInfo[aGeom] = theWrapper->GetPElemInfo(theMeshInfo,anEntity,aGeom,MED::eNOD,&anErr);
-      }
-    }
-    ADDMSG(MYDEBUG,"\n");
-    return anEntity2TGeom2ElemInfo;
-  }
-  
-  
-  //---------------------------------------------------------------
-  TFamilyInfoSet
-  GetFamilyInfoSet(const PWrapper& theWrapper,
-                   const PMeshInfo& theMeshInfo)
-  {
-    MSG(MYDEBUG,"GetFamilies(...)");
-    TErr anErr;
-    TFamilyInfoSet aFamilyInfoSet;
-    TInt aNbFam = theWrapper->GetNbFamilies(*theMeshInfo);
-    INITMSG(MYDEBUG,"GetNbFamilies() = "<<aNbFam<<"\n");
-    for(TInt iFam = 1; iFam <= aNbFam; iFam++){
-      PFamilyInfo aFamilyInfo = theWrapper->GetPFamilyInfo(theMeshInfo,iFam,&anErr);
-      if(anErr >= 0)
-        aFamilyInfoSet.insert(aFamilyInfo);
-    }
-    ADDMSG(MYDEBUG,"\n");
-    return aFamilyInfoSet;
-  }
-
-
-  //---------------------------------------------------------------
-  TGroupInfo
-  GetGroupInfo(const TFamilyInfoSet& theFamilyInfoSet)
-  {
-    MSG(MYDEBUG,"GetFamiliesByGroup(...)");
-    TGroupInfo aGroup;
-    TFamilyInfoSet::const_iterator anIter = theFamilyInfoSet.begin();
-    for(; anIter != theFamilyInfoSet.end(); anIter++){
-      const PFamilyInfo& aFamilyInfo = *anIter;
-      TInt aNbGroup = aFamilyInfo->GetNbGroup();
-      for(TInt iGroup = 0; iGroup < aNbGroup; iGroup++){
-        aGroup[aFamilyInfo->GetGroupName(iGroup)].insert(aFamilyInfo);
-      } 
-    }
-
-#ifdef _DEBUG_
-    if(MYDEBUG){
-      TGroupInfo::const_iterator anIter = aGroup.begin();
-      for(; anIter != aGroup.end(); anIter++){
-        const std::string& aName = anIter->first;
-        INITMSG(MYDEBUG,"aGroupName = '"<<aName<<"'\n");
-        const TFamilyInfoSet& aFamilyInfoSet = anIter->second;
-        TFamilyInfoSet::const_iterator anFamIter = aFamilyInfoSet.begin();
-        for(; anFamIter != aFamilyInfoSet.end(); anFamIter++){
-          const PFamilyInfo& aFamilyInfo = *anFamIter;
-          INITMSG(MYDEBUG,"aFamilyName = '"<<aFamilyInfo->GetName()<<"'\n");
-        }
-      }
-      ADDMSG(MYDEBUG,"\n");
-    }
-#endif
-
-    return aGroup;
-  }
-
-
-  //---------------------------------------------------------------
-  TFieldInfo2TimeStampInfoSet 
-  GetFieldInfo2TimeStampInfoSet(const PWrapper& theWrapper, 
-                                const PMeshInfo& theMeshInfo,
-                                const MED::TEntityInfo& theEntityInfo)
-  {
-    MSG(MYDEBUG,"GetFieldsByEntity(...)");
-    TFieldInfo2TimeStampInfoSet aFieldInfo2TimeStampInfoSet;
-    TInt aNbFields = theWrapper->GetNbFields();
-    INITMSG(MYDEBUG,"GetNbFields() = "<<aNbFields<<"\n");
-    for(TInt iField = 1; iField <= aNbFields; iField++){
-      PFieldInfo aFieldInfo = theWrapper->GetPFieldInfo(theMeshInfo,iField);
-      INITMSG(MYDEBUG,"aFieldName = '"<<aFieldInfo->GetName()<<
-              "'; aNbComp = "<<aFieldInfo->GetNbComp()<<"; ");
-      TGeom2Size aGeom2Size;
-      EEntiteMaillage anEntity = EEntiteMaillage(-1);
-      TInt aNbTimeStamps = theWrapper->GetNbTimeStamps(aFieldInfo,theEntityInfo,anEntity,aGeom2Size);
-      ADDMSG(MYDEBUG,"anEntity = "<<anEntity<<"; GetNbTimeStamps = "<<aNbTimeStamps<<"\n");
-      for(TInt iTimeStamp = 1; iTimeStamp <= aNbTimeStamps; iTimeStamp++){
-        PTimeStampInfo aTimeStamp = 
-          theWrapper->GetPTimeStampInfo(aFieldInfo,anEntity,aGeom2Size,iTimeStamp);
-        aFieldInfo2TimeStampInfoSet[aFieldInfo].insert(aTimeStamp);
-        INITMSG(MYDEBUG,
-                "aDt = "<<aTimeStamp->GetDt()<<
-                ", Unit = \'"<<aTimeStamp->GetUnitDt()<<"\n");
-      }
-    }
-    ADDMSG(MYDEBUG,"\n");
-    return aFieldInfo2TimeStampInfoSet;
-  }
-  
-
-  //---------------------------------------------------------------
-  TEntite2TFieldInfo2TimeStampInfoSet 
-  GetEntite2TFieldInfo2TimeStampInfoSet(const TFieldInfo2TimeStampInfoSet& theFieldInfo2TimeStampInfoSet)
-  {
-    TEntite2TFieldInfo2TimeStampInfoSet anEntite2TFieldInfo2TimeStampInfoSet;
-    TFieldInfo2TimeStampInfoSet::const_iterator anIter = theFieldInfo2TimeStampInfoSet.begin();
-    for(; anIter != theFieldInfo2TimeStampInfoSet.end(); anIter++){
-      const TTimeStampInfoSet& aTimeStampInfoSet = anIter->second;
-      //const PFieldInfo& aFieldInfo = anIter->first;
-      if(aTimeStampInfoSet.empty()) 
-        continue;
-      const PTimeStampInfo& aTimeStampInfo = *aTimeStampInfoSet.begin();
-      anEntite2TFieldInfo2TimeStampInfoSet[ConvertEntity(aTimeStampInfo->GetEntity())].insert(*anIter);
-    }
-    return anEntite2TFieldInfo2TimeStampInfoSet;
-  }
-  
-
-  //---------------------------------------------------------------
-  bool
-  operator<(const TFamilyTSize& theLeft, const TFamilyTSize& theRight)
-  {
-    const MED::PFamilyInfo& aLeftInfo = boost::get<0>(theLeft);
-    const MED::PFamilyInfo& aRightInfo = boost::get<0>(theRight);
-    return aLeftInfo->GetId() < aRightInfo->GetId();
-  }
-
-
-  //---------------------------------------------------------------
-  TEntity2FamilySet 
-  GetEntity2FamilySet(const PWrapper& theWrapper, 
-                      const TEntity2TGeom2ElemInfo& theEntity2TGeom2ElemInfo,
-                      const TFamilyInfoSet& theFamilyInfoSet)
-  {
-    MSG(MYDEBUG,"GetFamiliesByEntity(...)");
-    TEntity2FamilySet anEntity2FamilySet;
-    
-    typedef std::map<TInt,PFamilyInfo> TId2Family;
-    TId2Family anId2Family;
-    TFamilyInfoSet::const_iterator anIter = theFamilyInfoSet.begin();
-    for(; anIter != theFamilyInfoSet.end(); anIter++){
-      const PFamilyInfo& aFamilyInfo = *anIter;
-      anId2Family.insert(TId2Family::value_type(aFamilyInfo->GetId(),aFamilyInfo));
-    }
-    
-    if(!anId2Family.empty()){
-      typedef std::map<TInt,TInt> TFamilyID2Size;
-      typedef std::map<EEntiteMaillage,TFamilyID2Size> TEntity2FamilyID;
-      TEntity2FamilyID anEntity2FamilyID;
-      
-      if(!theEntity2TGeom2ElemInfo.empty()){
-        TEntity2TGeom2ElemInfo::const_iterator anIter = theEntity2TGeom2ElemInfo.begin();
-        for(; anIter != theEntity2TGeom2ElemInfo.end(); anIter++){
-          const EEntiteMaillage& anEntity = anIter->first;
-          TFamilyID2Size& aFamilyID2Size = anEntity2FamilyID[anEntity];
-          const TGeom2ElemInfo& aGeom2ElemInfo = anIter->second;
-          TGeom2ElemInfo::const_iterator aGeom2ElemInfoIter = aGeom2ElemInfo.begin();
-          for(; aGeom2ElemInfoIter != aGeom2ElemInfo.end(); aGeom2ElemInfoIter++){
-            const PElemInfo& aElemInfo = aGeom2ElemInfoIter->second;
-            if(TInt aNbElem = aElemInfo->GetNbElem()){
-              for(TInt i = 0; i < aNbElem; i++){
-                aFamilyID2Size[aElemInfo->GetFamNum(i)] += 1;
-              }
-            }
-          }
-        }
-      }
-      
-      if(!anEntity2FamilyID.empty()){
-        TEntity2FamilyID::const_iterator anIter = anEntity2FamilyID.begin();
-        for(; anIter != anEntity2FamilyID.end(); anIter++){
-          const EEntiteMaillage& anEntity = anIter->first;
-          INITMSG(MYDEBUG,"anEntity = "<<anEntity<<":\n");
-          const TFamilyID2Size& aFamilyID2Size = anIter->second;
-          TFamilyID2Size::const_iterator anIter2 = aFamilyID2Size.begin();
-          for(; anIter2 != aFamilyID2Size.end(); anIter2++){
-            TInt anId = anIter2->first;
-            TInt aSize = anIter2->second;
-            TId2Family::const_iterator anIter3 = anId2Family.find(anId);
-            if(anIter3 != anId2Family.end()){
-              const PFamilyInfo& aFamilyInfo = anIter3->second;
-              anEntity2FamilySet[anEntity].insert(TFamilyTSize(aFamilyInfo,aSize));
-              INITMSG(MYDEBUG,
-                      "aFamilyName = '"<<aFamilyInfo->GetName()<<
-                      "' anId = "<<aFamilyInfo->GetId()<<"\n");
-            }
-          }
-        }
-      }
-    }    
-    ADDMSG(MYDEBUG,"\n");
-    return anEntity2FamilySet;
-  }
-  
-
-  //---------------------------------------------------------------
-  TKey2Gauss
-  GetKey2Gauss(const PWrapper& theWrapper, 
-               TErr* theErr,
-               EModeSwitch theMode)
-  {
-    INITMSG(MYDEBUG,"GetKey2Gauss - theMode = "<<theMode<<std::endl);
-    TKey2Gauss aKey2Gauss;
-    TInt aNbGauss = theWrapper->GetNbGauss(theErr);
-    for(TInt anId = 1; anId <= aNbGauss; anId++){
-      TGaussInfo::TInfo aPreInfo = theWrapper->GetGaussPreInfo(anId);
-      PGaussInfo anInfo = theWrapper->CrGaussInfo(aPreInfo,theMode);
-      theWrapper->GetGaussInfo(anId,anInfo,theErr);
-      TGaussInfo::TKey aKey = boost::get<0>(aPreInfo);
-      aKey2Gauss[aKey] = anInfo;
-
-#ifdef _DEBUG_
-      const EGeometrieElement& aGeom = boost::get<0>(aKey);
-      const std::string& aName = boost::get<1>(aKey);
-      INITMSG(MYDEBUG,
-              "- aGeom = "<<aGeom<<
-              "; aName = '"<<aName<<"'"<<
-              std::endl);
-#endif
-
-    }
-    return aKey2Gauss;
-  }
-
-
-  //---------------------------------------------------------------
-  PProfileInfo
-  GetProfileInfo(const PWrapper& theWrapper, 
-                 const std::string& theProfileName,
-                 TErr* theErr,
-                 EModeProfil theMode)
-  {
-    PProfileInfo anInfo;
-    TInt aNbProfiles = theWrapper->GetNbProfiles(theErr);
-    for(TInt anId = 1; anId <= aNbProfiles; anId++){
-      TProfileInfo::TInfo aPreInfo = theWrapper->GetProfilePreInfo(anId);
-      const std::string& aName = boost::get<0>(aPreInfo);
-      if(aName == theProfileName)
-        return theWrapper->GetPProfileInfo(anId,theMode,theErr);
-    }
-    return anInfo;
-  }
-  
-
-  //---------------------------------------------------------------
-  TMKey2Profile
-  GetMKey2Profile(const PWrapper& theWrapper, 
-                  TErr* theErr,
-                  EModeProfil theMode)
-  {
-    INITMSG(MYDEBUG,"GetMKey2Profile - theMode = "<<theMode<<std::endl);
-    TKey2Profile aKey2Profile;
-    TInt aNbProfiles = theWrapper->GetNbProfiles(theErr);
-    for(TInt anId = 1; anId <= aNbProfiles; anId++){
-      TProfileInfo::TInfo aPreInfo = theWrapper->GetProfilePreInfo(anId);
-      PProfileInfo anInfo = theWrapper->GetPProfileInfo(anId,theMode,theErr);
-      const std::string& aName = boost::get<0>(aPreInfo);
-      aKey2Profile[aName] = anInfo;
-      
-#ifdef _DEBUG_
-      INITMSG(MYDEBUG,
-              "- aName = '"<<aName<<"'"<<
-              " : "<<
-              std::endl);
-      TInt aNbElem = anInfo->GetSize();
-      for(TInt iElem = 0; iElem < aNbElem; iElem++){
-        ADDMSG(MYVALUEDEBUG,anInfo->GetElemNum(iElem)<<", ");
-      }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-#endif
-      
-    }
-    return TMKey2Profile(theMode,aKey2Profile);
-  }
-
-  //---------------------------------------------------------------
-  EEntiteMaillage
-  GetEntityByFamilyId(PGrilleInfo& theInfo,TInt theId){
-    TElemNum::iterator aNodeFamIter = (theInfo->myFamNumNode).begin();
-    for(;aNodeFamIter != (theInfo->myFamNumNode).end(); aNodeFamIter++){
-      if(theId == *aNodeFamIter)
-        return eNOEUD;
-    }
-    TElemNum::iterator aCellFamIter = (theInfo->myFamNum).begin();
-    for(;aCellFamIter != (theInfo->myFamNum).end(); aCellFamIter++){
-      if(theId == *aCellFamIter)
-        return eMAILLE;
-    }
-    EXCEPTION(std::runtime_error, "GetEntityByFamilyId - fails");
-    return EEntiteMaillage(-1);
-  }
-
-  TFamilyID2NbCells
-  GetFamilyID2NbCells(PGrilleInfo& theInfo){
-    TFamilyID2NbCells aFamily2NbCells;
-    TInt aNbNodes = theInfo->myFamNumNode.size();
-    TInt aNbCells = theInfo->myFamNum.size();
-    for(TInt i=0; i<aNbNodes; i++) aFamily2NbCells[theInfo->GetFamNumNode(i)] = 0;
-    for(TInt i=0; i<aNbCells; i++) aFamily2NbCells[theInfo->GetFamNum(i)] = 0;
-    for(TInt i=0; i<aNbNodes; i++) aFamily2NbCells[theInfo->GetFamNumNode(i)] += 1;
-    for(TInt i=0; i<aNbCells; i++) aFamily2NbCells[theInfo->GetFamNum(i)] += 1;
-    return aFamily2NbCells;
-  }
-
-  EEntiteMaillage ConvertEntity(const EEntiteMaillage& aEntity){
-    switch( aEntity ){
-      
-    case eNOEUD_ELEMENT:
-    case eMAILLE: return eMAILLE; //eNOEUD_ELEMENT it is eMAILLE
-      
-    case eFACE:
-    case eARETE:
-    case eNOEUD: return aEntity; break;
-    default: return EEntiteMaillage(-1);
-      
-    }
-  }
-}
diff --git a/src/MEDWrapper/Base/MED_Algorithm.hxx b/src/MEDWrapper/Base/MED_Algorithm.hxx
deleted file mode 100644 (file)
index 574851d..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_Algorithm_HeaderFile
-#define MED_Algorithm_HeaderFile
-
-#include "MED_WrapperBase.hxx"
-#include "MED_Structures.hxx"
-
-#include <set>
-
-namespace MED
-{
-  //---------------------------------------------------------------
-  typedef std::map<EGeometrieElement,PElemInfo> TGeom2ElemInfo;
-  typedef std::map<EEntiteMaillage,TGeom2ElemInfo> TEntity2TGeom2ElemInfo;
-
-  //! Get set of TElemInfo by its geometrical type and corresponding MED ENTITY
-  MEDWRAPPER_EXPORT
-  TEntity2TGeom2ElemInfo
-  GetEntity2TGeom2ElemInfo(const PWrapper& theWrapper, 
-                           const PMeshInfo& theMeshInfo,
-                           const MED::TEntityInfo& theEntityInfo);
-
-
-  //---------------------------------------------------------------
-  typedef std::set<PFamilyInfo> TFamilyInfoSet;
-
-  //! Read set of MED FAMILIES for defined MED file
-  MEDWRAPPER_EXPORT
-  TFamilyInfoSet
-  GetFamilyInfoSet(const PWrapper& theWrapper, 
-                   const PMeshInfo& theMeshInfo);
-  
-
-  //---------------------------------------------------------------
-  typedef boost::tuple<PFamilyInfo,TInt> TFamilyTSize;
-
-  bool
-  operator<(const TFamilyTSize& theLeft, const TFamilyTSize& theRight);
-  typedef std::set<TFamilyTSize> TFamilyTSizeSet;
-
-
-  //---------------------------------------------------------------
-  typedef std::map<EEntiteMaillage,TFamilyTSizeSet> TEntity2FamilySet;
-  
-  //! Split set of MED FAMILIES by corresponding MED ENTITY
-  MEDWRAPPER_EXPORT
-  TEntity2FamilySet
-  GetEntity2FamilySet(const PWrapper& theWrapper, 
-                      const TEntity2TGeom2ElemInfo& theEntity2TGeom2ElemInfo,
-                      const TFamilyInfoSet& theFamilyInfoSet);
-  
-
-  //---------------------------------------------------------------
-  typedef std::map<std::string,TFamilyInfoSet> TGroupInfo;
-  
-  //! Split the input set of MED FAMILIES by corresponding MED GROUPS
-  MEDWRAPPER_EXPORT
-  TGroupInfo
-  GetGroupInfo(const TFamilyInfoSet& theFamilyInfoSet);
-  
-  
-  //---------------------------------------------------------------
-  typedef std::set<PTimeStampInfo> TTimeStampInfoSet;
-  typedef std::map<PFieldInfo,TTimeStampInfoSet> TFieldInfo2TimeStampInfoSet;
-
-  //! Read set of MED TIMESTAMPS groupped by corresponding MED FIELDS
-  MEDWRAPPER_EXPORT
-  TFieldInfo2TimeStampInfoSet
-  GetFieldInfo2TimeStampInfoSet(const PWrapper& theWrapper, 
-                                const PMeshInfo& theMeshInfo,
-                                const MED::TEntityInfo& theEntityInfo);
-  
-
-  //---------------------------------------------------------------
-  typedef std::map<EEntiteMaillage,TFieldInfo2TimeStampInfoSet> TEntite2TFieldInfo2TimeStampInfoSet;
-
-  //! Split the input set of MED TIMESTAMPS by corresponding MED FIELDS and MED ENTITIES
-  MEDWRAPPER_EXPORT
-  TEntite2TFieldInfo2TimeStampInfoSet
-  GetEntite2TFieldInfo2TimeStampInfoSet(const TFieldInfo2TimeStampInfoSet& theFieldInfo2TimeStampInfoSet);
-
-
-  //---------------------------------------------------------------
-  typedef std::map<TGaussInfo::TKey,PGaussInfo,TGaussInfo::TLess> TKey2Gauss;
-
-  //! Read set of MED GAUSS
-  MEDWRAPPER_EXPORT
-  TKey2Gauss
-  GetKey2Gauss(const PWrapper& theWrapper, 
-               TErr* theErr = NULL,
-               EModeSwitch theMode = eFULL_INTERLACE);
-
-
-  //---------------------------------------------------------------
-  //! Get MED PROFILE by its name
-  MEDWRAPPER_EXPORT
-  PProfileInfo
-  GetProfileInfo(const PWrapper& theWrapper, 
-                 const std::string& theProfileName,
-                 TErr* theErr = NULL,
-                 EModeProfil theMode = eCOMPACT);
-
-
-  //---------------------------------------------------------------
-  typedef std::map<TProfileInfo::TKey,PProfileInfo> TKey2Profile;
-  typedef boost::tuple<EModeProfil,TKey2Profile> TMKey2Profile;
-
-  //! Read set of MED PROFILES
-  MEDWRAPPER_EXPORT
-  TMKey2Profile
-  GetMKey2Profile(const PWrapper& theWrapper, 
-                  TErr* theErr = NULL,
-                  EModeProfil theMode = eCOMPACT);
-
-  //---------------------------------------------------------------
-  //! Get Entity for Grille by family id.
-  MEDWRAPPER_EXPORT
-  EEntiteMaillage
-  GetEntityByFamilyId(PGrilleInfo& theInfo,
-                      TInt theId);
-
-  typedef std::map<TInt,TInt> TFamilyID2NbCells;
-  
-  //! Get Number of cells for theId family, for Grille
-  MEDWRAPPER_EXPORT
-  TFamilyID2NbCells
-  GetFamilyID2NbCells(PGrilleInfo& theInfo);
-
-  //! Convert eNOEUD_ELEMENT to eMAILLE
-  MEDWRAPPER_EXPORT
-  EEntiteMaillage
-  ConvertEntity(const EEntiteMaillage& aEntity);
-
-}
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_Common.hxx b/src/MEDWrapper/Base/MED_Common.hxx
deleted file mode 100644 (file)
index 623cc0e..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef MED_Common_HeaderFile
-#define MED_Common_HeaderFile
-
-#include "MED_WrapperBase.hxx"
-
-#include <string>
-#include <set>
-#include <map>
-
-#include <hdf5.h>
-
-#include <boost/tuple/tuple.hpp>
-
-#include "SALOMEconfig.h"
-
-#include "MED_Vector.hxx"
-#include "MED_SharedPtr.hxx"
-#include "MED_SliceArray.hxx"
-
-#ifdef WIN32
-#pragma warning(disable:4099)
-#endif
-
-namespace MED{
-  // enum EVersion should be synchronized with enum MED_VERSION in SMESH_Mesh.idl (.hh)
-  // i.e. same positive values!
-  enum EVersion {eVUnknown = -1, eV2_1, eV2_2, eLATEST,
-                 eMINOR_0, eMINOR_1, eMINOR_2, eMINOR_3, eMINOR_4, eMINOR_5, eMINOR_6, eMINOR_7, eMINOR_8, eMINOR_9};
-  
-  typedef enum {eFAUX, eVRAI} EBooleen ; 
-  typedef double TFloat;
-#if defined(HAVE_F77INT64)
-  typedef long TInt;
-#else
-  typedef int TInt;
-#endif 
-  typedef hid_t TIdt;
-  typedef herr_t TErr;
-
-  typedef enum {eFULL_INTERLACE, eNO_INTERLACE} EModeSwitch;
-
-  typedef enum {eFLOAT64=6, eINT=24, eLONG=26 } ETypeChamp;
-
-  typedef enum {eNON_STRUCTURE, eSTRUCTURE} EMaillage;
-
-  typedef enum {eCART, eCYL, eSPHER} ERepere; 
-
-  typedef enum {eNOD, eDESC} EConnectivite ; 
-
-  typedef enum {ePOINT1=1, eSEG2=102, eSEG3=103, eTRIA3=203,
-                eQUAD4=204, eTRIA6=206, eTRIA7=207, eQUAD8=208, eQUAD9=209,eTETRA4=304,
-                ePYRA5=305, ePENTA6=306, eHEXA8=308, eOCTA12=312, eTETRA10=310, 
-                ePYRA13=313, ePENTA15=315, ePENTA18=318, eHEXA20=320, eHEXA27=327,
-                ePOLYGONE=400, ePOLYGON2=420, ePOLYEDRE=500, eNONE=0, 
-                eBALL=1101 /*no such a type in med.h, it's just a trick*/,
-                eAllGeoType=-1 } EGeometrieElement;
-
-  typedef enum {eMAILLE, eFACE, eARETE, eNOEUD, eNOEUD_ELEMENT, eSTRUCT_ELEMENT} EEntiteMaillage; 
-
-  typedef enum {eNO_PFLMOD, eGLOBAL, eCOMPACT}  EModeProfil; 
-
-  typedef enum {eGRILLE_CARTESIENNE, eGRILLE_POLAIRE, eGRILLE_STANDARD} EGrilleType;
-
-  typedef enum {eCOOR, eCONN, eNOM, eNUM, eFAM, eCOOR_IND1, eCOOR_IND2, eCOOR_IND3} ETable;
-
-  typedef TVector<TFloat> TFloatVector;
-  typedef TVector<std::string> TStringVector;
-  typedef TVector<TInt> TIntVector;
-  typedef std::set<std::string> TStringSet;
-  
-  typedef std::map<EGeometrieElement,TInt> TGeom2Size;
-  typedef std::map<EEntiteMaillage,TGeom2Size> TEntityInfo;
-
-  typedef std::set<EGeometrieElement> TGeomSet;
-  typedef std::map<EEntiteMaillage,TGeomSet> TEntity2GeomSet;
-
-  MEDWRAPPER_EXPORT 
-  const TEntity2GeomSet& 
-  GetEntity2GeomSet();
-
-  template<EVersion>
-  TInt MEDWRAPPER_EXPORT
-  GetDESCLength();
-  
-  template<EVersion>
-  TInt MEDWRAPPER_EXPORT
-  GetIDENTLength();
-  
-  template<EVersion>
-  TInt MEDWRAPPER_EXPORT
-  GetNOMLength();
-  
-  template<EVersion>
-  TInt MEDWRAPPER_EXPORT
-  GetLNOMLength();
-  
-  template<EVersion>
-  TInt MEDWRAPPER_EXPORT
-  GetPNOMLength();
-  
-  template<EVersion>
-  void MEDWRAPPER_EXPORT
-  GetVersionRelease(TInt& majeur, TInt& mineur, TInt& release);
-  
-  template<EVersion>
-  MEDWRAPPER_EXPORT
-  TInt
-  GetNbConn(EGeometrieElement typmai,
-            EEntiteMaillage typent,
-            TInt mdim);
-  
-  MEDWRAPPER_EXPORT
-  TInt 
-  GetNbNodes(EGeometrieElement typmai);
-
-  struct TNameInfo;
-  typedef SharedPtr<TNameInfo> PNameInfo;
-  
-  struct TMeshInfo;
-  typedef SharedPtr<TMeshInfo> PMeshInfo;
-  
-  struct TFamilyInfo;
-  typedef SharedPtr<TFamilyInfo> PFamilyInfo;
-
-  struct TElemInfo;
-  typedef SharedPtr<TElemInfo> PElemInfo;
-
-  struct TNodeInfo;
-  typedef SharedPtr<TNodeInfo> PNodeInfo;
-
-  struct TPolygoneInfo;
-  typedef SharedPtr<TPolygoneInfo> PPolygoneInfo;
-
-  struct TPolyedreInfo;
-  typedef SharedPtr<TPolyedreInfo> PPolyedreInfo;
-
-  struct TCellInfo;
-  typedef SharedPtr<TCellInfo> PCellInfo;
-
-  struct TBallInfo;
-  typedef SharedPtr<TBallInfo> PBallInfo;
-
-  struct TFieldInfo;
-  typedef SharedPtr<TFieldInfo> PFieldInfo;
-
-  struct TTimeStampInfo;
-  typedef SharedPtr<TTimeStampInfo> PTimeStampInfo;
-
-  struct TProfileInfo;
-  typedef SharedPtr<TProfileInfo> PProfileInfo;
-  
-  struct TGaussInfo;
-  typedef SharedPtr<TGaussInfo> PGaussInfo;
-  
-  class TGrilleInfo;
-  typedef SharedPtr<TGrilleInfo> PGrilleInfo;
-
-  struct TTimeStampValueBase;
-  typedef SharedPtr<TTimeStampValueBase> PTimeStampValueBase;
-
-  struct TWrapper;
-  typedef SharedPtr<TWrapper> PWrapper;
-}
-
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_CoordUtils.cxx b/src/MEDWrapper/Base/MED_CoordUtils.cxx
deleted file mode 100644 (file)
index a703f7a..0000000
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "MED_CoordUtils.hxx"
-#include "MED_Utilities.hxx"
-namespace MED
-{
-
-  enum ECoordName{eX, eY, eZ, eNone};
-
-  template<ECoordName TCoordId>
-  TFloat 
-  GetCoord(const TCCoordSlice& theCoordSlice)
-  {
-    return theCoordSlice[TCoordId];
-  }
-
-  template<>
-  TFloat 
-  GetCoord<eNone>(const TCCoordSlice& theCoordSlice)
-  {
-    return 0.0;
-  }
-  
-  TGetCoord
-  aXYZGetCoord[3] = {
-    &GetCoord<eX>, 
-    &GetCoord<eY>, 
-    &GetCoord<eZ>
-  };
-  
-  TGetCoord
-  aXYGetCoord[3] = {
-    &GetCoord<eX>, 
-    &GetCoord<eY>, 
-    &GetCoord<eNone>
-  };
-  
-  TGetCoord
-  aYZGetCoord[3] = {
-    &GetCoord<eNone>,
-    &GetCoord<eX>, 
-    &GetCoord<eY>
-  };
-  
-  TGetCoord 
-  aXZGetCoord[3] = {
-    &GetCoord<eX>, 
-    &GetCoord<eNone>,
-    &GetCoord<eY>
-  };
-  
-  
-  TGetCoord 
-  aXGetCoord[3] = {
-    &GetCoord<eX>, 
-    &GetCoord<eNone>,
-    &GetCoord<eNone>
-  };
-  
-  TGetCoord
-  aYGetCoord[3] = {
-    &GetCoord<eNone>,
-    &GetCoord<eX>, 
-    &GetCoord<eNone>
-  };
-
-  TGetCoord
-  aZGetCoord[3] = {
-    &GetCoord<eNone>,
-    &GetCoord<eNone>,
-    &GetCoord<eX>
-  };
-
-  
-  //---------------------------------------------------------------
-  TCoordHelper
-  ::TCoordHelper(TGetCoord* theGetCoord):
-    myGetCoord(theGetCoord)
-  {}
-
-  TFloat 
-  TCoordHelper
-  ::GetCoord(TCCoordSlice& theCoordSlice, 
-             TInt theCoordId)
-  {
-    return (*myGetCoord[theCoordId])(theCoordSlice);
-  }
-
-
-  //---------------------------------------------------------------
-  PCoordHelper
-  GetCoordHelper(PNodeInfo theNodeInfo)
-  {
-    PCoordHelper aCoordHelper;
-    {
-      PMeshInfo aMeshInfo = theNodeInfo->GetMeshInfo();
-      TInt aMeshDimension = aMeshInfo->GetDim();
-      bool anIsDimPresent[3] = {false, false, false};
-      for(int iDim = 0; iDim < aMeshDimension; iDim++){
-        // PAL16857(SMESH not conform to the MED convention) ->
-        // 1D - always along X
-        // 2D - always in XOY plane
-        anIsDimPresent[iDim] = iDim < aMeshDimension;
-//      std::string aName = theNodeInfo->GetCoordName(iDim);
-//         if ( aName.size() > 1 ) // PAL12148, aName has size 8 or 16
-//           aName = aName.substr(0,1);
-//      if(aName == "x" || aName == "X")
-//        anIsDimPresent[eX] = true;
-//      else if(aName == "y" || aName == "Y")
-//        anIsDimPresent[eY] = true;
-//      else if(aName == "z" || aName == "Z")
-//        anIsDimPresent[eZ] = true;
-      }
-
-      switch(aMeshDimension){
-      case 3:
-        aCoordHelper.reset(new TCoordHelper(aXYZGetCoord));
-        break;
-      case 2:
-        if(anIsDimPresent[eY] && anIsDimPresent[eZ])
-          aCoordHelper.reset(new TCoordHelper(aYZGetCoord));
-        else if(anIsDimPresent[eX] && anIsDimPresent[eZ])
-          aCoordHelper.reset(new TCoordHelper(aXZGetCoord));
-        else
-          aCoordHelper.reset(new TCoordHelper(aXYGetCoord));
-        break;
-      case 1:
-        if(anIsDimPresent[eY])
-          aCoordHelper.reset(new TCoordHelper(aYGetCoord));
-        else if(anIsDimPresent[eZ])
-          aCoordHelper.reset(new TCoordHelper(aZGetCoord));
-        else
-          aCoordHelper.reset(new TCoordHelper(aXGetCoord));
-        break;
-      }
-    }
-    return aCoordHelper;
-  }
-}
diff --git a/src/MEDWrapper/Base/MED_CoordUtils.hxx b/src/MEDWrapper/Base/MED_CoordUtils.hxx
deleted file mode 100644 (file)
index c41b43d..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_CoordUtils_HeaderFile
-#define MED_CoordUtils_HeaderFile
-
-#include "MED_WrapperBase.hxx"
-
-#include "MED_Structures.hxx"
-
-namespace MED
-{
-  typedef TFloat (*TGetCoord)(const TCCoordSlice& theCoordSlice);
-
-
-  //---------------------------------------------------------------
-  class MEDWRAPPER_EXPORT TCoordHelper
-  {
-    TGetCoord* myGetCoord;
-    
-  public:
-    TCoordHelper(TGetCoord* theGetCoord);
-
-    TFloat 
-    GetCoord(TCCoordSlice& theCoordSlice, 
-             TInt theCoordId);
-  };
-  typedef SharedPtr<TCoordHelper> PCoordHelper;
-
-
-  //---------------------------------------------------------------
-  MEDWRAPPER_EXPORT 
-  PCoordHelper
-  GetCoordHelper(PNodeInfo theNodeInfo);
-
-}
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_GaussDef.cxx b/src/MEDWrapper/Base/MED_GaussDef.cxx
deleted file mode 100644 (file)
index 6e22ab3..0000000
+++ /dev/null
@@ -1,570 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File   : MED_GaussDef.hxx
-// Author : Edward AGAPOV (eap)
-//
-#include "MED_GaussDef.hxx"
-#include "MED_Utilities.hxx"
-#include "MED_GaussUtils.hxx"
-
-namespace MED
-{
-  using namespace std;
-  using namespace MED;
-  //---------------------------------------------------------------
-
-  void TGaussDef::add(const double x, const double weight)
-  {
-    if ( dim() != 1 )
-      EXCEPTION( logic_error,"dim() != 1");
-    if ( myWeights.capacity() == myWeights.size() )
-      EXCEPTION( logic_error,"Extra gauss point");
-    myCoords.push_back( x );
-    myWeights.push_back( weight );
-  }
-  void TGaussDef::add(const double x, const double y, const double weight)
-  {
-    if ( dim() != 2 )
-      EXCEPTION( logic_error,"dim() != 2");
-    if ( myWeights.capacity() == myWeights.size() )
-      EXCEPTION( logic_error,"Extra gauss point");
-    myCoords.push_back( x );
-    myCoords.push_back( y );
-    myWeights.push_back( weight );
-  }
-  void TGaussDef::add(const double x, const double y, const double z, const double weight)
-  {
-    if ( dim() != 3 )
-      EXCEPTION( logic_error,"dim() != 3");
-    if ( myWeights.capacity() == myWeights.size() )
-      EXCEPTION( logic_error,"Extra gauss point");
-    myCoords.push_back( x );
-    myCoords.push_back( y );
-    myCoords.push_back( z );
-    myWeights.push_back( weight );
-  }
-  void TGaussDef::setRefCoords(const TShapeFun& aShapeFun)
-  {
-    myRefCoords.reserve( aShapeFun.myRefCoord.size() );
-    myRefCoords.assign( aShapeFun.myRefCoord.begin(),
-                        aShapeFun.myRefCoord.end() );
-  }
-
-
-  //---------------------------------------------------------------
-  /*!
-   * \brief Fill definition of gauss points family
-   */
-  //---------------------------------------------------------------
-
-  TGaussDef::TGaussDef(const int geom, const int nbGauss, const int variant)
-  {
-    myType = geom;
-    myCoords .reserve( nbGauss * dim() );
-    myWeights.reserve( nbGauss );
-
-    switch ( geom ) {
-
-    case eSEG2:
-    case eSEG3:
-      if (geom == eSEG2) setRefCoords( TSeg2a() );
-      else               setRefCoords( TSeg3a() );
-      switch ( nbGauss ) {
-      case 1: {
-        add( 0.0, 2.0 ); break;
-      }
-      case 2: {
-        const double a = 0.577350269189626;
-        add(  a,  1.0 );
-        add( -a,  1.0 ); break;
-      }
-      case 3: {
-        const double a = 0.774596669241;
-        const double P1 = 1./1.8;
-        const double P2 = 1./1.125;
-        add( -a,  P1 );
-        add(  0,  P2 ); 
-        add(  a,  P1 ); break;
-      }
-      case 4: {
-        const double a  = 0.339981043584856, b  = 0.861136311594053;
-        const double P1 = 0.652145154862546, P2 = 0.347854845137454 ;
-        add(  a,  P1 );
-        add( -a,  P1 );
-        add(  b,  P2 ); 
-        add( -b,  P2 ); break;
-      }
-      default:
-        EXCEPTION( logic_error,"Invalid nb of gauss points for SEG"<<nbGauss);
-      }
-      break;
-
-    case eTRIA3:
-    case eTRIA6:
-      if ( variant == 1 ) {
-        if (geom == eTRIA3) setRefCoords( TTria3b() );
-        else                setRefCoords( TTria6b() );
-        switch ( nbGauss ) {
-        case 1: { // FPG1
-          add( 1/3., 1/3., 1/2. ); break;
-        }
-        case 3: { // FPG3
-          // what about COT3 ???
-          add( 1/6., 1/6., 1/6. );
-          add( 2/3., 1/6., 1/6. );
-          add( 1/6., 2/3., 1/6. ); break;
-        }
-        case 4: { // FPG4
-          add( 1/5., 1/5.,  25/(24*4.) );
-          add( 3/5., 1/5.,  25/(24*4.) );
-          add( 1/5., 3/5.,  25/(24*4.) );
-          add( 1/3., 1/3., -27/(24*4.) ); break;
-        }
-        case 6: { // FPG6
-          const double P1 = 0.11169079483905, P2 = 0.0549758718227661;
-          const double a  = 0.445948490915965, b = 0.091576213509771;
-          add(     b,     b, P2 ); 
-          add( 1-2*b,     b, P2 );
-          add(     b, 1-2*b, P2 );
-          add(     a, 1-2*a, P1 );
-          add(     a,     a, P1 ); 
-          add( 1-2*a,     a, P1 ); break;
-        }
-        case 7: { // FPG7
-          const double A  = 0.470142064105115;
-          const double B  = 0.101286507323456;
-          const double P1 = 0.066197076394253;
-          const double P2 = 0.062969590272413;
-          add(  1/3.,  1/3., 9/80. ); 
-          add(     A,     A, P1 ); 
-          add( 1-2*A,     A, P1 );
-          add(     A, 1-2*A, P1 );
-          add(     B,     B, P2 ); 
-          add( 1-2*B,     B, P2 );
-          add(     B, 1-2*B, P2 ); break;
-        }
-        case 12: { // FPG12
-          const double A  = 0.063089014491502;
-          const double B  = 0.249286745170910;
-          const double C  = 0.310352451033785;
-          const double D  = 0.053145049844816;
-          const double P1 = 0.025422453185103;
-          const double P2 = 0.058393137863189;
-          const double P3 = 0.041425537809187;
-          add(     A,     A, P1 ); 
-          add( 1-2*A,     A, P1 );
-          add(     A, 1-2*A, P1 );
-          add(     B,     B, P2 ); 
-          add( 1-2*B,     B, P2 );
-          add(     B, 1-2*B, P2 );
-          add(     C,     D, P3 );
-          add(     D,     C, P3 );
-          add( 1-C-D,     C, P3 );
-          add( 1-C-D,     D, P3 );
-          add(     C, 1-C-D, P3 );
-          add(     D, 1-C-D, P3 ); break;
-        }
-        default:
-          EXCEPTION( logic_error,"Invalid nb of gauss points for TRIA, variant 1: "
-                     <<nbGauss);
-        }
-      }
-      else if ( variant == 2 ) {
-        if (geom == eTRIA3) setRefCoords( TTria3a() );
-        else                setRefCoords( TTria6a() );
-        switch ( nbGauss ) {
-        case 1: {
-          add( -1/3., -1/3., 2. ); break;
-        }
-        case 3: {
-          add( -2/3.,  1/3., 2/3. );
-          add( -2/3., -2/3., 2/3. );
-          add(  1/3., -2/3., 2/3. ); break;
-        }
-        case 6: {
-          const double P1 = 0.11169079483905, P2 = 0.0549758718227661;
-          const double A  = 0.445948490915965, B = 0.091576213509771;
-          add( 2*B-1, 1-4*B, 4*P2 ); 
-          add( 2*B-1, 2*B-1, 4*P2 );
-          add( 1-4*B, 2*B-1, 4*P2 );
-          add( 1-4*A, 2*A-1, 4*P1 );
-          add( 2*A-1, 1-4*A, 4*P1 ); 
-          add( 2*A-1, 2*A-1, 4*P1 ); break;
-        }
-        default:
-          EXCEPTION( logic_error,"Invalid nb of gauss points for TRIA, variant 2: "
-                     <<nbGauss);
-        }
-      }
-      else if ( variant == 3 ) {
-        if (geom == eTRIA3) setRefCoords( TTria3b() );
-        else                setRefCoords( TTria6b() );
-        switch ( nbGauss ) {
-        case 4: {
-          add( 1/3., 1/3., -27/96 );
-          add( 0.2 , 0.2 ,  25/96 );
-          add( 0.6 , 0.2 ,  25/96 );
-          add( 0.2 , 0.6 ,  25/96 ); break;
-        }
-        default:
-          EXCEPTION( logic_error,"Invalid nb of gauss points for TRIA, variant 3: "
-                     <<nbGauss);
-        }
-      }
-      break;
-
-    case eQUAD4:
-    case eQUAD8:
-      if ( variant == 1 ) {
-        if (geom == eQUAD4) setRefCoords( TQuad4b() );
-        else                setRefCoords( TQuad8b() );
-        switch ( nbGauss ) {
-        case 1: { // FPG1
-          add(  0,  0,  4 ); break;
-        }
-        case 4: { // FPG4
-          const double a = 1/sqrt(3.);
-          add( -a, -a,  1 );
-          add(  a, -a,  1 );
-          add(  a,  a,  1 );
-          add( -a,  a,  1 ); break;
-        }
-        case 9: { // FPG9
-          const double a = 0.774596669241483;
-          add( -a, -a,  25/81. );
-          add(  a, -a,  25/81. );
-          add(  a,  a,  25/81. );
-          add( -a,  a,  25/81. );
-          add( 0., -a,  40/81. );
-          add(  a, 0.,  40/81. );
-          add( 0.,  a,  40/81. );
-          add( -a, 0.,  40/81. );
-          add( 0., 0.,  64/81. ); break;
-        }
-        default:
-          EXCEPTION( logic_error,"Invalid nb of gauss points for QUAD, variant 1: "
-                     <<nbGauss);
-        }
-      }
-      else if ( variant == 2 ) {
-        if (geom == eQUAD4) setRefCoords( TQuad4a() );
-        else                setRefCoords( TQuad8a() );
-        switch ( nbGauss ) {
-        case 4: {
-          const double a = 1/sqrt(3.);
-          add( -a,  a,  1 );
-          add( -a, -a,  1 );
-          add(  a, -a,  1 );
-          add(  a,  a,  1 ); break;
-        }
-        case 9: {
-          const double a = 0.774596669241483;
-          add( -a,  a,  25/81. );
-          add( -a, -a,  25/81. );
-          add(  a, -a,  25/81. );
-          add(  a,  a,  25/81. );
-          add( -a, 0.,  40/81. );
-          add( 0., -a,  40/81. );
-          add(  a, 0.,  40/81. );
-          add( 0.,  a,  40/81. );
-          add( 0., 0.,  64/81. ); break;
-        }
-        default:
-          EXCEPTION( logic_error,"Invalid nb of gauss points for QUAD, variant 1: "
-                     <<nbGauss);
-        }
-      }
-      else if ( variant == 3 ) {
-        if (geom == eQUAD4) setRefCoords( TQuad4b() );
-        else                setRefCoords( TQuad8b() );
-        switch ( nbGauss ) {
-        case 4: {
-          const double a = 3/sqrt(3.);
-          add( -a, -a,  1 );
-          add( -a,  a,  1 );
-          add(  a, -a,  1 );
-          add(  a,  a,  1 ); break;
-        }
-        case 9: {
-          const double a = sqrt(3/5.), c1 = 5/9., c2 = 8/9.;
-          const double c12 = c1*c2, c22 = c2*c2, c1c2 = c1*c2;
-          add( -a, -a,  c12  );
-          add( -a, 0.,  c1c2 );
-          add( -a,  a,  c12  );
-          add( 0., -a,  c1c2 );
-          add( 0., 0.,  c22  );
-          add( 0.,  a,  c1c2 );
-          add(  a, -a,  c12  );
-          add(  a, 0.,  c1c2 );
-          add(  a,  a,  c12  ); break;
-        }
-        default:
-          EXCEPTION( logic_error,"Invalid nb of gauss points for QUAD, variant 3: "
-                     <<nbGauss);
-        }
-      }
-      break;
-
-    case eTETRA4:
-    case eTETRA10:
-      if (geom == eTETRA4) setRefCoords( TTetra4a() );
-      else                 setRefCoords( TTetra10a() );
-      switch ( nbGauss ) {
-      case 4: { // FPG4
-        const double a = (5 - sqrt(5.))/20., b = (5 + 3*sqrt(5.))/20.;
-        add(  a,  a,  a,  1/24. );
-        add(  a,  a,  b,  1/24. );
-        add(  a,  b,  a,  1/24. );
-        add(  b,  a,  a,  1/24. ); break;
-      }
-      case 5: { // FPG5
-        const double a = 0.25, b = 1/6., c = 0.5;
-        add(  a,  a,  a, -2/15. );
-        add(  b,  b,  b,  3/40. );
-        add(  b,  b,  c,  3/40. );
-        add(  b,  c,  b,  3/40. );
-        add(  c,  b,  b,  3/40. ); break;
-      }
-      case 15: { // FPG15
-        const double a = 0.25;
-        const double b1 = (7 + sqrt(15.))/34., c1 = (13 + 3*sqrt(15.))/34., d = (5 - sqrt(15.))/20.;
-        const double b2 = (7 - sqrt(15.))/34., c2 = (13 - 3*sqrt(15.))/34., e = (5 + sqrt(15.))/20.;
-        const double P1 = (2665 - 14*sqrt(15.))/226800.;
-        const double P2 = (2665 + 14*sqrt(15.))/226800.;
-        add(  a,  a,  a,  8/405.);//_____
-        add( b1, b1, b1,  P1    );
-        add( b1, b1, c1,  P1    );
-        add( b1, c1, b1,  P1    );
-        add( c1, b1, b1,  P1    );//_____
-        add( b2, b2, b2,  P2    );
-        add( b2, b2, c2,  P2    );
-        add( b2, c2, b2,  P2    );
-        add( c2, b2, b2,  P2    );//_____
-        add(  d,  d,  e,  5/567.);
-        add(  d,  e,  d,  5/567.);
-        add(  e,  d,  d,  5/567.);
-        add(  d,  e,  e,  5/567.);
-        add(  e,  d,  e,  5/567.);
-        add(  e,  e,  d,  5/567.);
-        break;
-      }
-      default:
-        EXCEPTION( logic_error,"Invalid nb of gauss points for TETRA: "<<nbGauss);
-      }
-      break;
-
-    case ePYRA5:
-    case ePYRA13:
-      if (geom == ePYRA5) setRefCoords( TPyra5a() );
-      else                setRefCoords( TPyra13a() );
-      switch ( nbGauss ) {
-      case 5: { // FPG5
-        const double h1 = 0.1531754163448146;
-        const double h2 = 0.6372983346207416;
-        add(  .5,  0.,  h1,  2/15. );
-        add(  0.,  .5,  h1,  2/15. );
-        add( -.5,  0.,  h1,  2/15. );
-        add(  0., -.5,  h1,  2/15. );
-        add(  0.,  0.,  h2,  2/15. ); break;
-      }
-      case 6: { // FPG6
-        const double p1 = 0.1024890634400000 ;
-        const double p2 = 0.1100000000000000 ;
-        const double p3 = 0.1467104129066667 ;
-        const double a  = 0.5702963741068025 ;
-        const double h1 = 0.1666666666666666 ;
-        const double h2 = 0.08063183038464675;
-        const double h3 = 0.6098484849057127 ;
-        add(  a, 0.,  h1,  p1 );
-        add( 0.,  a,  h1,  p1 );
-        add( -a, 0.,  h1,  p1 );
-        add( 0., -a,  h1,  p1 );
-        add( 0., 0.,  h2,  p2 );
-        add( 0., 0.,  h3,  p3 ); break;
-      }
-      case 27: { // FPG27
-        const double a1  = 0.788073483; 
-        const double b6  = 0.499369002; 
-        const double b1  = 0.848418011; 
-        const double c8  = 0.478508449; 
-        const double c1  = 0.652816472; 
-        const double d12 = 0.032303742; 
-        const double d1  = 1.106412899;
-        double z = 1/2., fz = b1/2*(1 - z);
-        add(  0.,  0.,   z,  a1 ); // 1
-        add(  fz,  fz,   z,  b6 ); // 2
-        add( -fz,  fz,   z,  b6 ); // 3
-        add( -fz, -fz,   z,  b6 ); // 4
-        add(  fz, -fz,   z,  b6 ); // 5
-        z = (1 - b1)/2.;
-        add(  0.,  0.,   z,  b6 ); // 6
-        z = (1 + b1)/2.;
-        add(  0.,  0.,   z,  b6 ); // 7
-        z = (1 - c1)/2.; fz = c1*(1 - z);
-        add(  fz,  0.,   z,  c8 ); // 8
-        add(  0.,  fz,   z,  c8 ); // 9
-        add( -fz,  0.,   z,  c8 ); // 10
-        add(  0., -fz,   z,  c8 ); // 11
-        z = (1 + c1)/2.; fz = c1*(1 - z);
-        add(  fz,  0.,   z,  c8 ); // 12
-        add(  0.,  fz,   z,  c8 ); // 13
-        add( -fz,  0.,   z,  c8 ); // 14
-        add(  0., -fz,   z,  c8 ); // 15
-        z = (1 - d1)/2., fz = d1/2*(1 - z);
-        add(  fz,  fz,   z,  d12); // 16
-        add( -fz,  fz,   z,  d12); // 17
-        add( -fz, -fz,   z,  d12); // 18
-        add(  fz, -fz,   z,  d12); // 19
-        z = 1/2.; fz = d1*(1 - z);
-        add(  fz,  0.,   z,  d12); // 20
-        add(  0.,  fz,   z,  d12); // 21
-        add( -fz,  0.,   z,  d12); // 22
-        add(  0., -fz,   z,  d12); // 23
-        z = (1 + d1)/2., fz = d1/2*(1 - z);
-        add(  fz,  fz,   z,  d12); // 24
-        add( -fz,  fz,   z,  d12); // 25
-        add( -fz, -fz,   z,  d12); // 26
-        add(  fz, -fz,   z,  d12); // 27
-        break;
-      }
-      default:
-        EXCEPTION( logic_error,"Invalid nb of gauss points for PYRA: "<<nbGauss);
-      }
-      break;
-    case ePENTA6:
-    case ePENTA15:
-      if (geom == ePENTA6) setRefCoords( TPenta6a() );
-      else                 setRefCoords( TPenta15a() );
-      switch ( nbGauss ) {
-      case 6: { // FPG6
-        const double a = sqrt(3.)/3.;
-        add( -a, .5, .5,  1/6. );
-        add( -a, 0., .5,  1/6. );
-        add( -a, .5, 0.,  1/6. );
-        add(  a, .5, .5,  1/6. );
-        add(  a, 0., .5,  1/6. );
-        add(  a, .5, 0.,  1/6. ); break;
-      }
-      case 8: { // FPG8
-        const double a = 0.577350269189626;
-        add( -a, 1/3., 1/3., -27/96. );
-        add( -a,  0.6,  0.2,  25/96. );
-        add( -a,  0.2,  0.6,  25/96. );
-        add( -a,  0.2,  0.2,  25/96. );
-        add( +a, 1/3., 1/3., -27/96. );
-        add( +a,  0.6,  0.2,  25/96. );
-        add( +a,  0.2,  0.6,  25/96. );
-        add( +a,  0.2,  0.2,  25/96. ); break;
-      }
-      case 21: { // FPG21
-        const double d = sqrt(3/5.), c1 = 5/9., c2 = 8/9.; // d <=> alfa
-        const double a = (6 + sqrt(15.))/21.;
-        const double b = (6 - sqrt(15.))/21.;
-        const double P1 = (155 + sqrt(15.))/2400.;
-        const double P2 = (155 - sqrt(15.))/2400.;  //___
-        add( -d,  1/3.,  1/3., c1*9/80. );//___
-        add( -d,     a,     a, c1*P1    );
-        add( -d, 1-2*a,     a, c1*P1    );
-        add( -d,     a, 1-2*a, c1*P1    );//___
-        add( -d,     b,     b, c1*P2    );
-        add( -d, 1-2*b,     b, c1*P2    );
-        add( -d,     b, 1-2*b, c1*P2    );//___
-        add( 0.,  1/3.,  1/3., c2*9/80. );//___
-        add( 0.,     a,     a, c2*P1    );
-        add( 0., 1-2*a,     a, c2*P1    );
-        add( 0.,     a, 1-2*a, c2*P1    );//___
-        add( 0.,     b,     b, c2*P2    );
-        add( 0., 1-2*b,     b, c2*P2    );
-        add( 0.,     b, 1-2*b, c2*P2    );//___
-        add(  d,  1/3.,  1/3., c1*9/80. );//___
-        add(  d,     a,     a, c1*P1    );
-        add(  d, 1-2*a,     a, c1*P1    );
-        add(  d,     a, 1-2*a, c1*P1    );//___
-        add(  d,     b,     b, c1*P2    );
-        add(  d, 1-2*b,     b, c1*P2    );
-        add(  d,     b, 1-2*b, c1*P2    );//___
-        break;
-      }
-      default:
-        EXCEPTION( logic_error,"Invalid nb of gauss points for PENTA: " <<nbGauss);
-      }
-      break;
-
-    case eHEXA8:
-    case eHEXA20:
-      if (geom == eHEXA8) setRefCoords( THexa8a() );
-      else                setRefCoords( THexa20a() );
-      switch ( nbGauss ) {
-      case 8: { // FPG8
-        const double a = sqrt(3.)/3.;
-        add( -a, -a, -a,  1. );
-        add( -a, -a,  a,  1. );
-        add( -a,  a, -a,  1. );
-        add( -a,  a,  a,  1. );
-        add(  a, -a, -a,  1. );
-        add(  a, -a,  a,  1. );
-        add(  a,  a, -a,  1. );
-        add(  a,  a,  a,  1. ); break;
-      }
-      case 27: { // FPG27
-        const double a = sqrt(3/5.), c1 = 5/9., c2 = 8/9.;
-        const double c12 = c1*c1, c13 = c1*c1*c1;
-        const double c22 = c2*c2, c23 = c2*c2*c2;
-        add( -a, -a, -a,   c13  ); // 1
-        add( -a, -a, 0., c12*c2 ); // 2
-        add( -a, -a,  a,   c13  ); // 3
-        add( -a, 0., -a, c12*c2 ); // 4
-        add( -a, 0., 0., c1*c22 ); // 5
-        add( -a, 0.,  a, c12*c2 ); // 6
-        add( -a,  a, -a,   c13  ); // 7
-        add( -a,  a, 0., c12*c2 ); // 8
-        add( -a,  a,  a,   c13  ); // 9
-        add( 0., -a, -a, c12*c2 ); // 10
-        add( 0., -a, 0., c1*c22 ); // 11
-        add( 0., -a,  a, c12*c2 ); // 12
-        add( 0., 0., -a, c1*c22 ); // 13
-        add( 0., 0., 0.,   c23  ); // 14
-        add( 0., 0.,  a, c1*c22 ); // 15
-        add( 0.,  a, -a, c12*c2 ); // 16
-        add( 0.,  a, 0., c1*c22 ); // 17
-        add( 0.,  a,  a, c12*c2 ); // 18
-        add(  a, -a, -a,   c13  ); // 19
-        add(  a, -a, 0., c12*c2 ); // 20
-        add(  a, -a,  a,   c13  ); // 21
-        add(  a, 0., -a, c12*c2 ); // 22
-        add(  a, 0., 0., c1*c22 ); // 23
-        add(  a, 0.,  a, c12*c2 ); // 24
-        add(  a,  a, -a,   c13  ); // 25
-        add(  a,  a, 0., c12*c2 ); // 26
-        add(  a,  a,  a,   c13  ); // 27
-        break;
-      }
-      default:
-        EXCEPTION( logic_error,"Invalid nb of gauss points for PENTA: " <<nbGauss);
-      }
-      break;
-
-    default:
-      EXCEPTION( logic_error,"unexpected EGeometrieElement: "<< geom);
-    }
-
-    if ( myWeights.capacity() != myWeights.size() )
-      EXCEPTION( logic_error,"Not all gauss points defined");
-  }
-}
diff --git a/src/MEDWrapper/Base/MED_GaussDef.hxx b/src/MEDWrapper/Base/MED_GaussDef.hxx
deleted file mode 100644 (file)
index 06c6293..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-// File   : MED_GaussDef.hxx
-// Author : Edward AGAPOV (eap)
-//
-#ifndef MED_GaussDef_HeaderFile
-#define MED_GaussDef_HeaderFile
-
-#include "MED_WrapperBase.hxx"
-
-//#include "MED_GaussUtils.hxx" <<<---- avoid dependence on boost
-#include <vector>
-
-namespace MED
-{
-  class TShapeFun;
-  typedef std::vector<double> TDoubleVector;
-  /*!
-   * \brief Description of family of integration points
-   */
-  struct TGaussDef
-  {
-    int           myType;      //!< element geometry (EGeometrieElement or med_geometrie_element)
-    TDoubleVector myRefCoords; //!< description of reference points
-    TDoubleVector myCoords;    //!< coordinates of Gauss points
-    TDoubleVector myWeights;   //!< weights, len(weights)==<nb of gauss points>
-
-    /*!
-     * \brief Creates definition of gauss points family
-     *  \param geomType - element geometry (EGeometrieElement or med_geometrie_element)
-     *  \param nbPoints - nb gauss point
-     *  \param variant - [1-3] to choose the variant of definition
-     * 
-     * Throws in case of invalid parameters
-     * variant == 1 refers to "Fonctions de forme et points d'integration 
-     *              des elements finis" v7.4 by J. PELLET, X. DESROCHES, 15/09/05
-     * variant == 2 refers to the same doc v6.4 by J.P. LEFEBVRE, X. DESROCHES, 03/07/03
-     * variant == 3 refers to the same doc v6.4, second variant for 2D elements
-     */
-    MEDWRAPPER_EXPORT TGaussDef(const int geomType, const int nbPoints, const int variant=1);
-
-    MEDWRAPPER_EXPORT int dim() const { return myType/100; }
-    MEDWRAPPER_EXPORT int nbPoints() const { return myWeights.capacity(); }
-
-  private:
-    void add(const double x, const double weight);
-    void add(const double x, const double y, const double weight);
-    void add(const double x, const double y, const double z, const double weight);
-    void setRefCoords(const TShapeFun& aShapeFun);
-  };
-}
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_GaussUtils.cxx b/src/MEDWrapper/Base/MED_GaussUtils.cxx
deleted file mode 100644 (file)
index 7ce7b07..0000000
+++ /dev/null
@@ -1,2172 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "MED_GaussUtils.hxx"
-#include "MED_Utilities.hxx"
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-static int MYVALUEDEBUG = 0;
-#else
-// static int MYDEBUG = 0;
-// static int MYVALUEDEBUG = 0;
-#endif
-
-//#define _DEBUG_REF_COORDS_
-
-namespace MED
-{
-  //---------------------------------------------------------------
-  TGaussCoord
-  ::TGaussCoord():
-    TModeSwitchInfo(eFULL_INTERLACE),
-    myNbElem(0),
-    myNbGauss(0),
-    myDim(0),
-    myGaussStep(0)
-  {
-  }
-
-  void
-  TGaussCoord
-  ::Init(TInt theNbElem,
-         TInt theNbGauss,
-         TInt theDim,
-         EModeSwitch theMode)
-  {
-    myModeSwitch = theMode;
-
-    myNbElem = theNbElem;
-    myNbGauss = theNbGauss;
-    myDim = theDim;
-
-    myGaussStep = myNbGauss*myDim;
-
-    myGaussCoord.resize(theNbElem*myGaussStep);
-  }
-
-
-  TInt
-  TGaussCoord
-  ::GetNbElem() const
-  { 
-    return myNbElem; 
-  }
-  
-  TInt
-  TGaussCoord
-  ::GetNbGauss() const
-  { 
-    return myNbGauss; 
-  }
-  
-  TInt
-  TGaussCoord
-  ::GetDim() const
-  { 
-    return myDim; 
-  }
-  
-  unsigned char*
-  TGaussCoord
-  ::GetValuePtr()
-  {
-    return (unsigned char*)&(myGaussCoord[0]);
-  }
-
-
-  TCCoordSliceArr 
-  TGaussCoord
-  ::GetCoordSliceArr(TInt theElemId) const
-  {
-    TCCoordSliceArr aCoordSliceArr(myNbGauss);
-    if(GetModeSwitch() == eFULL_INTERLACE){
-      TInt anId = theElemId*myGaussStep;
-      for(TInt anGaussId = 0; anGaussId < myNbGauss; anGaussId++){
-        aCoordSliceArr[anGaussId] =
-          TCCoordSlice(myGaussCoord,std::slice(anId,myDim,1));
-        anId += myDim;
-      }
-    }
-    else{
-      for(TInt anGaussId = 0; anGaussId < myNbGauss; anGaussId++){
-        aCoordSliceArr[anGaussId] =
-          TCCoordSlice(myGaussCoord,std::slice(theElemId,myDim,myGaussStep));
-      }
-    }
-    return aCoordSliceArr;
-  }
-
-
-  TCoordSliceArr 
-  TGaussCoord
-  ::GetCoordSliceArr(TInt theElemId)
-  {
-    TCoordSliceArr aCoordSliceArr(myNbGauss);
-    if(GetModeSwitch() == eFULL_INTERLACE){
-      TInt anId = theElemId*myGaussStep;
-      for(TInt anGaussId = 0; anGaussId < myNbGauss; anGaussId++){
-        aCoordSliceArr[anGaussId] =
-          TCoordSlice(myGaussCoord,std::slice(anId,myDim,1));
-        anId += myDim;
-      }
-    }
-    else{
-      for(TInt anGaussId = 0; anGaussId < myNbGauss; anGaussId++){
-        aCoordSliceArr[anGaussId] =
-          TCoordSlice(myGaussCoord,std::slice(theElemId,myDim,myGaussStep));
-      }
-    }
-    return aCoordSliceArr;
-  }
-
-
-  //---------------------------------------------------------------
-  inline
-  bool 
-  IsEqual(TFloat theLeft, TFloat theRight)
-  {
-    static TFloat EPS = 1.0E-3;
-    if(fabs(theLeft) + fabs(theRight) > EPS)
-      return fabs(theLeft-theRight)/(fabs(theLeft)+fabs(theRight)) < EPS;
-    return true;
-  }
-
-
-  //---------------------------------------------------------------
-  class TShapeFun::TFun
-  {
-    TFloatVector myFun;
-    TInt myNbRef;
-
-  public:
-
-    void
-    Init(TInt theNbGauss,
-         TInt theNbRef)
-    {
-      myFun.resize(theNbGauss*theNbRef);
-      myNbRef = theNbRef;
-    }
-
-    TCFloatVecSlice 
-    GetFunSlice(TInt theGaussId) const
-    {
-      return TCFloatVecSlice(myFun,std::slice(theGaussId*myNbRef,myNbRef,1));
-    }
-
-    TFloatVecSlice
-    GetFunSlice(TInt theGaussId)
-    {
-      return TFloatVecSlice(myFun,std::slice(theGaussId*myNbRef,myNbRef,1));
-    }
-  };
-
-  //---------------------------------------------------------------
-
-  TShapeFun::TShapeFun(TInt theDim, TInt theNbRef):
-    myRefCoord(theNbRef*theDim),
-    myDim(theDim),
-    myNbRef(theNbRef)
-  {}
-
-  TCCoordSlice 
-  TShapeFun::GetCoord(TInt theRefId) const
-  {
-    return TCCoordSlice(myRefCoord,std::slice(theRefId*myDim,myDim,1));
-  }
-
-  TCoordSlice
-  TShapeFun::GetCoord(TInt theRefId)
-  {
-    return TCoordSlice(myRefCoord,std::slice(theRefId*myDim,myDim,1));
-  }
-
-  void 
-  TShapeFun::GetFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    TInt aNbRef = theRef.size();
-    TInt aNbGauss = theGauss.size();
-    theFun.Init(aNbGauss,aNbRef);
-  }
-
-  bool 
-  TShapeFun::IsSatisfy(const TCCoordSliceArr& theRefCoord) const
-  {
-    TInt aNbRef = theRefCoord.size();
-    TInt aNbRef2 = GetNbRef();
-    INITMSG(MYDEBUG,"TShapeFun::IsSatisfy "<<
-            "- aNbRef("<<aNbRef<<")"<<
-            "; aNbRef2("<<aNbRef2<<")\n");
-    bool anIsSatisfy = (aNbRef == aNbRef2);
-    if(anIsSatisfy){
-      for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-        const TCCoordSlice& aCoord2 = theRefCoord[aRefId];
-        TCCoordSlice aCoord = GetCoord(aRefId);
-        TInt aDim = aCoord.size();
-        bool anIsEqual = false;
-        for(TInt anId = 0; anId < aDim; anId++){
-          anIsEqual = IsEqual(aCoord[anId],aCoord2[anId]);
-          if(!anIsEqual){
-            anIsSatisfy = false;
-            break;
-          }
-        }
-        if(!anIsEqual){
-#ifdef _DEBUG_
-          TCCoordSlice aCoord = GetCoord(aRefId);
-          INITMSG(MYDEBUG,aRefId + 1<<": aCoord = {");
-          TInt aDim = aCoord.size();
-          for(TInt anId = 0; anId < aDim; anId++)
-            ADDMSG(MYDEBUG,"\t"<<aCoord[anId]);
-          const TCCoordSlice& aCoord2 = theRefCoord[aRefId];
-          ADDMSG(MYDEBUG,"}\t!=\taCoord2 = {");
-          for(TInt anId = 0; anId < aDim; anId++)
-            ADDMSG(MYDEBUG,"\t"<<aCoord2[anId]);
-          ADDMSG(MYDEBUG,"}\n");
-#endif
-#ifndef _DEBUG_
-          BEGMSG(MYDEBUG,"anIsSatisfy = "<<anIsSatisfy<<"\n");
-          return anIsSatisfy;
-#endif
-        }
-      }
-    }
-
-    BEGMSG(MYDEBUG,"anIsSatisfy = "<<anIsSatisfy<<"\n");
-    return anIsSatisfy;
-  }
-
-  bool
-  TShapeFun::Eval(const TCellInfo&       theCellInfo,
-                  const TNodeInfo&       theNodeInfo,
-                  const TElemNum&        theElemNum,
-                  const TCCoordSliceArr& theRef,
-                  const TCCoordSliceArr& theGauss,
-                  TGaussCoord&           theGaussCoord,
-                  EModeSwitch            theMode)
-  {
-    INITMSG(MYDEBUG,"TShapeFun::Eval"<<std::endl);
-
-    if(IsSatisfy(theRef)){
-      const PMeshInfo& aMeshInfo = theCellInfo.GetMeshInfo();
-      TInt aDim = aMeshInfo->GetDim();
-      TInt aNbGauss = theGauss.size();
-
-      bool anIsSubMesh = !theElemNum.empty();
-      TInt aNbElem;
-      if(anIsSubMesh)
-        aNbElem = theElemNum.size();
-      else
-        aNbElem = theCellInfo.GetNbElem();
-
-      theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
-
-      TFun aFun;
-      InitFun(theRef,theGauss,aFun);
-      TInt aConnDim = theCellInfo.GetConnDim();
-
-      INITMSG(MYDEBUG,"aDim = "<<aDim<<
-              "; aNbGauss = "<<aNbGauss<<
-              "; aNbElem = "<<aNbElem<<
-              "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
-              std::endl);
-
-      for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
-        TInt aCellId = anIsSubMesh? theElemNum[anElemId]-1: anElemId;
-        TCConnSlice aConnSlice = theCellInfo.GetConnSlice(aCellId);
-        TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
-
-        for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-          TCoordSlice& aGaussCoordSlice = aCoordSliceArr[aGaussId];
-          TCFloatVecSlice aFunSlice = aFun.GetFunSlice(aGaussId);
-
-          for(TInt aConnId = 0; aConnId < aConnDim; aConnId++){
-            TInt aNodeId = aConnSlice[aConnId] - 1;      
-            TCCoordSlice aNodeCoordSlice = theNodeInfo.GetCoordSlice(aNodeId);
-
-            for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-              aGaussCoordSlice[aDimId] += aNodeCoordSlice[aDimId]*aFunSlice[aConnId];
-            }
-          }
-        }
-      }
-
-#ifdef _DEBUG_
-      {
-        INITMSG(MYVALUEDEBUG,"theGauss: ");
-        for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-          TCCoordSlice aCoordSlice = theGauss[aGaussId];
-          ADDMSG(MYVALUEDEBUG,"{");
-          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-            ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
-          }
-          ADDMSG(MYVALUEDEBUG,"} ");
-        }
-        ADDMSG(MYVALUEDEBUG,std::endl);
-      }
-      for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
-        TCCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
-        INITMSG(MYVALUEDEBUG,"");
-        for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-          TCCoordSlice aCoordSlice = aCoordSliceArr[aGaussId];
-          ADDMSG(MYVALUEDEBUG,"{");
-          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-            ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
-          }
-          ADDMSG(MYVALUEDEBUG,"} ");
-        }
-        ADDMSG(MYVALUEDEBUG,std::endl);
-      }
-#endif
-      return true;
-    }
-
-    return false;
-  }
-
-
-  //---------------------------------------------------------------
-  TSeg2a::TSeg2a():TShapeFun(1,2)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0; break;
-      case  1: aCoord[0] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  TSeg2a::InitFun(const TCCoordSliceArr& theRef,
-                  const TCCoordSliceArr& theGauss,
-                  TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*(1.0 - aCoord[0]);
-      aSlice[1] = 0.5*(1.0 + aCoord[0]);
-    }
-  }
-
-
-  //---------------------------------------------------------------
-  TSeg3a::TSeg3a():TShapeFun(1,3)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0; break;
-      case  1: aCoord[0] =  1.0; break;
-      case  2: aCoord[0] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TSeg3a::InitFun(const TCCoordSliceArr& theRef,
-                  const TCCoordSliceArr& theGauss,
-                  TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*(1.0 - aCoord[0])*aCoord[0];
-      aSlice[1] = 0.5*(1.0 + aCoord[0])*aCoord[0];
-      aSlice[2] = (1.0 + aCoord[0])*(1.0 - aCoord[0]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TTria3a::TTria3a():
-    TShapeFun(2,3)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
-      }
-    }
-  }
-
-  void
-  TTria3a::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*(1.0 + aCoord[1]);
-      aSlice[1] = -0.5*(aCoord[0] + aCoord[1]);
-      aSlice[2] = 0.5*(1.0 + aCoord[0]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TTria6a::TTria6a():TShapeFun(2,6)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
-
-      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-      case  4: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
-      case  5: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TTria6a::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*(1.0 + aCoord[1])*aCoord[1];
-      aSlice[1] = 0.5*(aCoord[0] + aCoord[1])*(aCoord[0] + aCoord[1] + 1);
-      aSlice[2] = 0.5*(1.0 + aCoord[0])*aCoord[0];
-
-      aSlice[3] = -1.0*(1.0 + aCoord[1])*(aCoord[0] + aCoord[1]);
-      aSlice[4] = -1.0*(1.0 + aCoord[0])*(aCoord[0] + aCoord[1]);
-      aSlice[5] = (1.0 + aCoord[1])*(1.0 + aCoord[1]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TTria3b::TTria3b():
-    TShapeFun(2,3)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
-      case  1: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
-      case  2: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  TTria3b::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 1.0 - aCoord[0] - aCoord[1];
-      aSlice[1] = aCoord[0];
-      aSlice[2] = aCoord[1];
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TTria6b::TTria6b():
-    TShapeFun(2,6)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
-      case  1: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
-      case  2: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
-
-      case  3: aCoord[0] =  0.5;  aCoord[1] =  0.0; break;
-      case  4: aCoord[0] =  0.5;  aCoord[1] =  0.5; break;
-      case  5: aCoord[0] =  0.0;  aCoord[1] =  0.5; break;
-      }
-    }
-  }
-
-  void
-  TTria6b::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = (1.0 - aCoord[0] - aCoord[1])*(1.0 - 2.0*aCoord[0] - 2.0*aCoord[1]);
-      aSlice[1] = aCoord[0]*(2.0*aCoord[0] - 1.0);
-      aSlice[2] = aCoord[1]*(2.0*aCoord[1] - 1.0);
-
-      aSlice[3] = 4.0*aCoord[0]*(1.0 - aCoord[0] - aCoord[1]);
-      aSlice[4] = 4.0*aCoord[0]*aCoord[1];
-      aSlice[5] = 4.0*aCoord[1]*(1.0 - aCoord[0] - aCoord[1]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TQuad4a::TQuad4a():
-    TShapeFun(2,4)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  TQuad4a::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.25*(1.0 + aCoord[1])*(1.0 - aCoord[0]);
-      aSlice[1] = 0.25*(1.0 - aCoord[1])*(1.0 - aCoord[0]);
-      aSlice[2] = 0.25*(1.0 - aCoord[1])*(1.0 + aCoord[0]);
-      aSlice[3] = 0.25*(1.0 + aCoord[0])*(1.0 + aCoord[1]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TQuad8a::TQuad8a():
-    TShapeFun(2,8)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
-
-      case  4: aCoord[0] = -1.0;  aCoord[1] =  0.0; break;
-      case  5: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
-      case  6: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
-      case  7: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  TQuad8a::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.25*(1.0 + aCoord[1])*(1.0 - aCoord[0])*(aCoord[1] - aCoord[0] - 1.0);
-      aSlice[1] = 0.25*(1.0 - aCoord[1])*(1.0 - aCoord[0])*(-aCoord[1] - aCoord[0] - 1.0);
-      aSlice[2] = 0.25*(1.0 - aCoord[1])*(1.0 + aCoord[0])*(-aCoord[1] + aCoord[0] - 1.0);
-      aSlice[3] = 0.25*(1.0 + aCoord[1])*(1.0 + aCoord[0])*(aCoord[1] + aCoord[0] - 1.0);
-
-      aSlice[4] = 0.5*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[1]);
-      aSlice[5] = 0.5*(1.0 - aCoord[1])*(1.0 - aCoord[0])*(1.0 + aCoord[0]);
-      aSlice[6] = 0.5*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[1]);
-      aSlice[7] = 0.5*(1.0 + aCoord[1])*(1.0 - aCoord[0])*(1.0 + aCoord[0]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TQuad9a::TQuad9a():
-    TShapeFun(2,9)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
-
-      case  4: aCoord[0] = -1.0;  aCoord[1] =  0.0; break;
-      case  5: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
-      case  6: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
-      case  7: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
-
-      case  8: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TQuad9a::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] + 1.0)*(aCoord[1] - 1.0);
-      aSlice[1] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] + 1.0)*(aCoord[1] + 1.0);
-      aSlice[2] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] - 1.0)*(aCoord[1] + 1.0);
-      aSlice[3] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] - 1.0)*(aCoord[1] - 1.0);
-
-      aSlice[4] = 0.5*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1]);
-      aSlice[5] = 0.5*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] + 1.0);
-      aSlice[6] = 0.5*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1]);
-      aSlice[7] = 0.5*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0);
-
-      aSlice[8] = (1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TQuad4b::TQuad4b():
-    TShapeFun(2,4)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
-      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
-      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  TQuad4b::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.25*(1.0 - aCoord[0])*(1.0 - aCoord[1]);
-      aSlice[1] = 0.25*(1.0 + aCoord[0])*(1.0 - aCoord[1]);
-      aSlice[2] = 0.25*(1.0 + aCoord[0])*(1.0 + aCoord[1]);
-      aSlice[3] = 0.25*(1.0 - aCoord[0])*(1.0 + aCoord[1]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TQuad8b::TQuad8b():
-    TShapeFun(2,8)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
-      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
-      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-
-      case  4: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
-      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
-      case  6: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
-      case  7: aCoord[0] = -1.0;  aCoord[1] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TQuad8b::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.25*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(-1.0 - aCoord[0] - aCoord[1]);
-      aSlice[1] = 0.25*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(-1.0 + aCoord[0] - aCoord[1]);
-      aSlice[2] = 0.25*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(-1.0 + aCoord[0] + aCoord[1]);
-      aSlice[3] = 0.25*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(-1.0 - aCoord[0] + aCoord[1]);
-
-      aSlice[4] = 0.5*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]);
-      aSlice[5] = 0.5*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0]);
-      aSlice[6] = 0.5*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1]);
-      aSlice[7] = 0.5*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0]);
-
-      //aSlice[4] = 0.5*(1.0 - aCoord[0])*(1.0 - aCoord[0])*(1.0 - aCoord[1]);
-      //aSlice[5] = 0.5*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[1]);
-      //aSlice[6] = 0.5*(1.0 - aCoord[0])*(1.0 - aCoord[0])*(1.0 + aCoord[1]);
-      //aSlice[7] = 0.5*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[1]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TQuad9b::TQuad9b():
-    TShapeFun(2,9)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
-      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
-      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
-
-      case  4: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
-      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
-      case  6: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
-      case  7: aCoord[0] = -1.0;  aCoord[1] =  0.0; break;
-
-      case  8: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TQuad9b::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] - 1.0)*(aCoord[1] - 1.0);
-      aSlice[1] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] + 1.0)*(aCoord[1] - 1.0);
-      aSlice[2] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] + 1.0)*(aCoord[1] + 1.0);
-      aSlice[3] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] - 1.0)*(aCoord[1] + 1.0);
-
-      aSlice[4] = 0.5*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0);
-      aSlice[5] = 0.5*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1]);
-      aSlice[6] = 0.5*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] + 1.0);
-      aSlice[7] = 0.5*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1]);
-
-      aSlice[8] = (1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TTetra4a::TTetra4a():
-    TShapeFun(3,4)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  1: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case  2: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TTetra4a::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = aCoord[1];
-      aSlice[1] = aCoord[2];
-      aSlice[2] = 1.0 - aCoord[0] - aCoord[1] - aCoord[2];
-      aSlice[3] = aCoord[0];
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TTetra10a::TTetra10a():
-    TShapeFun(3,10)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  1: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case  2: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-
-      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
-      case  5: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case  6: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-
-      case  7: aCoord[0] =  0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      case  8: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case  9: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TTetra10a::InitFun(const TCCoordSliceArr& theRef,
-                     const TCCoordSliceArr& theGauss,
-                     TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = aCoord[1]*(2.0*aCoord[1] - 1.0);
-      aSlice[1] = aCoord[2]*(2.0*aCoord[2] - 1.0);
-      aSlice[2] = (1.0 - aCoord[0] - aCoord[1] - aCoord[2])*(1.0 - 2.0*aCoord[0] - 2.0*aCoord[1] - 2.0*aCoord[2]);
-      aSlice[3] = aCoord[0]*(2.0*aCoord[0] - 1.0);
-
-      aSlice[4] = 4.0*aCoord[1]*aCoord[2];
-      aSlice[5] = 4.0*aCoord[2]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
-      aSlice[6] = 4.0*aCoord[1]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
-
-      aSlice[7] = 4.0*aCoord[0]*aCoord[1];
-      aSlice[8] = 4.0*aCoord[0]*aCoord[2];
-      aSlice[9] = 4.0*aCoord[0]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-
-
-  TTetra4b::TTetra4b():
-    TShapeFun(3,4)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  2: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case  1: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TTetra4b::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = aCoord[1];
-      aSlice[2] = aCoord[2];
-      aSlice[1] = 1.0 - aCoord[0] - aCoord[1] - aCoord[2];
-      aSlice[3] = aCoord[0];
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TTetra10b::TTetra10b():
-    TShapeFun(3,10)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  2: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case  1: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-
-      case  6: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
-      case  5: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-
-      case  7: aCoord[0] =  0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      case  9: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case  8: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TTetra10b::InitFun(const TCCoordSliceArr& theRef,
-                     const TCCoordSliceArr& theGauss,
-                     TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = aCoord[1]*(2.0*aCoord[1] - 1.0);
-      aSlice[2] = aCoord[2]*(2.0*aCoord[2] - 1.0);
-      aSlice[1] = (1.0 - aCoord[0] - aCoord[1] - aCoord[2])*(1.0 - 2.0*aCoord[0] - 2.0*aCoord[1] - 2.0*aCoord[2]);
-      aSlice[3] = aCoord[0]*(2.0*aCoord[0] - 1.0);
-
-      aSlice[6] = 4.0*aCoord[1]*aCoord[2];
-      aSlice[5] = 4.0*aCoord[2]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
-      aSlice[4] = 4.0*aCoord[1]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
-
-      aSlice[7] = 4.0*aCoord[0]*aCoord[1];
-      aSlice[9] = 4.0*aCoord[0]*aCoord[2];
-      aSlice[8] = 4.0*aCoord[0]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  THexa8a::THexa8a():
-    TShapeFun(3,8)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  4: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case  5: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case  6: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-      case  7: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  THexa8a::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[1] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[2] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[3] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
-
-      aSlice[4] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[5] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[6] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[7] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
-    }
-  }
-
-
-  //---------------------------------------------------------------
-  THexa20a::THexa20a(TInt theDim, TInt theNbRef):
-    TShapeFun(theDim,theNbRef)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  4: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case  5: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case  6: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-      case  7: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-
-      case  8: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  9: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
-      case 10: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case 11: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
-      case 12: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case 13: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case 14: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case 15: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case 16: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case 17: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case 18: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-      case 19: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  THexa20a::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2])*
-        (-2.0 - aCoord[0] - aCoord[1] - aCoord[2]);
-      aSlice[1] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2])*
-        (-2.0 + aCoord[0] - aCoord[1] - aCoord[2]);
-      aSlice[2] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2])*
-        (-2.0 + aCoord[0] + aCoord[1] - aCoord[2]);
-      aSlice[3] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2])*
-        (-2.0 - aCoord[0] + aCoord[1] - aCoord[2]);
-      aSlice[4] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2])*
-        (-2.0 - aCoord[0] - aCoord[1] + aCoord[2]);
-      aSlice[5] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2])*
-        (-2.0 + aCoord[0] - aCoord[1] + aCoord[2]);
-      aSlice[6] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2])*
-        (-2.0 + aCoord[0] + aCoord[1] + aCoord[2]);
-      aSlice[7] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2])*
-        (-2.0 - aCoord[0] + aCoord[1] + aCoord[2]);
-
-      aSlice[8] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[9] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0])*(1.0 - aCoord[2]);
-      aSlice[10] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[11] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0])*(1.0 - aCoord[2]);
-      aSlice[12] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 - aCoord[0])*(1.0 - aCoord[1]);
-      aSlice[13] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 + aCoord[0])*(1.0 - aCoord[1]);
-      aSlice[14] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 + aCoord[0])*(1.0 + aCoord[1]);
-      aSlice[15] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 - aCoord[0])*(1.0 + aCoord[1]);
-      aSlice[16] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[17] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0])*(1.0 + aCoord[2]);
-      aSlice[18] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[19] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0])*(1.0 + aCoord[2]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  THexa27a::THexa27a():
-    THexa20a(3,27)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case 20: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
-      case 21: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case 22: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case 23: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case 24: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case 25: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case 26: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  THexa27a::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.125*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[1] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[2] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[3] = 0.125*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[4] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] + 1.0);
-      aSlice[5] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] + 1.0);
-      aSlice[6] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] + 1.0);
-      aSlice[7] = 0.125*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] + 1.0);
-
-      aSlice[8] = 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[9] = 0.25*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[10]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[11]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[12]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] - 1.0)*(1.0 - aCoord[2]*aCoord[2]);
-      aSlice[13]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] - 1.0)*(1.0 - aCoord[2]*aCoord[2]);
-      aSlice[14]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] + 1.0)*(1.0 - aCoord[2]*aCoord[2]);
-      aSlice[15]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] + 1.0)*(1.0 - aCoord[2]*aCoord[2]);
-      aSlice[16]= 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] + 1.0);
-      aSlice[17]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] + 1.0);
-      aSlice[18]= 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] + 1.0);
-      aSlice[19]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] + 1.0);
-      aSlice[20]= 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] - 1.0);
-      aSlice[21]= 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0)*(1.0 - aCoord[2]*aCoord[2]);
-      aSlice[22]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[2]*aCoord[2]);
-      aSlice[23]= 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] + 1.0)*(1.0 - aCoord[2]*aCoord[2]);
-      aSlice[24]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[2]*aCoord[2]);
-      aSlice[25]= 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] + 1.0);
-      aSlice[26]= 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[1]*aCoord[1]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  THexa8b::THexa8b():
-    TShapeFun(3,8)
-  {
-    TInt aNbRef = GetNbRef();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  4: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case  7: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case  6: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-      case  5: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  THexa8b::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[3] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[2] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[1] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
-
-      aSlice[4] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[7] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[6] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[5] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  THexa20b::THexa20b(TInt theDim, TInt theNbRef):
-    TShapeFun(theDim,theNbRef)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  4: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case  7: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case  6: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-      case  5: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-
-      case 11: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
-      case 10: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
-      case  9: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
-      case  8: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
-      case 16: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case 19: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case 18: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case 17: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case 15: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
-      case 14: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case 13: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
-      case 12: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  THexa20b::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2])*
-        (-2.0 - aCoord[0] - aCoord[1] - aCoord[2]);
-      aSlice[3] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2])*
-        (-2.0 + aCoord[0] - aCoord[1] - aCoord[2]);
-      aSlice[2] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2])*
-        (-2.0 + aCoord[0] + aCoord[1] - aCoord[2]);
-      aSlice[1] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2])*
-        (-2.0 - aCoord[0] + aCoord[1] - aCoord[2]);
-      aSlice[4] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2])*
-        (-2.0 - aCoord[0] - aCoord[1] + aCoord[2]);
-      aSlice[7] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2])*
-        (-2.0 + aCoord[0] - aCoord[1] + aCoord[2]);
-      aSlice[6] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2])*
-        (-2.0 + aCoord[0] + aCoord[1] + aCoord[2]);
-      aSlice[5] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2])*
-        (-2.0 - aCoord[0] + aCoord[1] + aCoord[2]);
-
-      aSlice[11] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[10] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0])*(1.0 - aCoord[2]);
-      aSlice[9] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
-      aSlice[8] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0])*(1.0 - aCoord[2]);
-      aSlice[16] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 - aCoord[0])*(1.0 - aCoord[1]);
-      aSlice[19] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 + aCoord[0])*(1.0 - aCoord[1]);
-      aSlice[18] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 + aCoord[0])*(1.0 + aCoord[1]);
-      aSlice[17] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 - aCoord[0])*(1.0 + aCoord[1]);
-      aSlice[15] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[14] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0])*(1.0 + aCoord[2]);
-      aSlice[13] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
-      aSlice[12] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0])*(1.0 + aCoord[2]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TPenta6a::TPenta6a():
-    TShapeFun(3,6)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] = -0.0;  aCoord[2] =  1.0; break;
-      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  4: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TPenta6a::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*aCoord[1]*(1.0 - aCoord[0]);
-      aSlice[1] = 0.5*aCoord[2]*(1.0 - aCoord[0]);
-      aSlice[2] = 0.5*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
-
-      aSlice[3] = 0.5*aCoord[1]*(aCoord[0] + 1.0);
-      aSlice[4] = 0.5*aCoord[2]*(aCoord[0] + 1.0);
-      aSlice[5] = 0.5*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TPenta6b::TPenta6b():
-    TShapeFun(3,6)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  2: aCoord[0] = -1.0;  aCoord[1] = -0.0;  aCoord[2] =  1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case  4: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TPenta6b::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*aCoord[1]*(1.0 - aCoord[0]);
-      aSlice[2] = 0.5*aCoord[2]*(1.0 - aCoord[0]);
-      aSlice[1] = 0.5*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
-
-      aSlice[3] = 0.5*aCoord[1]*(aCoord[0] + 1.0);
-      aSlice[5] = 0.5*aCoord[2]*(aCoord[0] + 1.0);
-      aSlice[4] = 0.5*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TPenta15a::TPenta15a():
-    TShapeFun(3,15)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] = -0.0;  aCoord[2] =  1.0; break;
-      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  4: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-
-      case  6: aCoord[0] = -1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
-      case  7: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case  8: aCoord[0] = -1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      case  9: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case 10: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case 11: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case 12: aCoord[0] =  1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
-      case 13: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case 14: aCoord[0] =  1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TPenta15a::InitFun(const TCCoordSliceArr& theRef,
-                     const TCCoordSliceArr& theGauss,
-                     TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*aCoord[1]*(1.0 - aCoord[0])*(2.0*aCoord[1] - 2.0 - aCoord[0]);
-      aSlice[1] = 0.5*aCoord[2]*(1.0 - aCoord[0])*(2.0*aCoord[2] - 2.0 - aCoord[0]);
-      aSlice[2] = 0.5*(aCoord[0] - 1.0)*(1.0 - aCoord[1] - aCoord[2])*(aCoord[0] + 2.0*aCoord[1] + 2.0*aCoord[2]);
-
-      aSlice[3] = 0.5*aCoord[1]*(1.0 + aCoord[0])*(2.0*aCoord[1] - 2.0 + aCoord[0]);
-      aSlice[4] = 0.5*aCoord[2]*(1.0 + aCoord[0])*(2.0*aCoord[2] - 2.0 + aCoord[0]);
-      aSlice[5] = 0.5*(-aCoord[0] - 1.0)*(1.0 - aCoord[1] - aCoord[2])*(-aCoord[0] + 2.0*aCoord[1] + 2.0*aCoord[2]);
-
-      aSlice[6] = 2.0*aCoord[1]*aCoord[2]*(1.0 - aCoord[0]);
-      aSlice[7] = 2.0*aCoord[2]*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
-      aSlice[8] = 2.0*aCoord[1]*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
-
-      aSlice[9] = aCoord[1]*(1.0 - aCoord[0]*aCoord[0]);
-      aSlice[10] = aCoord[2]*(1.0 - aCoord[0]*aCoord[0]);
-      aSlice[11] = (1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]*aCoord[0]);
-
-      aSlice[12] = 2.0*aCoord[1]*aCoord[2]*(1.0 + aCoord[0]);
-      aSlice[13] = 2.0*aCoord[2]*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
-      aSlice[14] = 2.0*aCoord[1]*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TPenta15b::TPenta15b():
-    TShapeFun(3,15)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  2: aCoord[0] = -1.0;  aCoord[1] = -0.0;  aCoord[2] =  1.0; break;
-      case  1: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case  4: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-
-      case  8: aCoord[0] = -1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
-      case  7: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case  6: aCoord[0] = -1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      case 12: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case 14: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      case 13: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case 11: aCoord[0] =  1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
-      case 10: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case  9: aCoord[0] =  1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      }
-    }
-  }
-
-  void
-  TPenta15b::InitFun(const TCCoordSliceArr& theRef,
-                     const TCCoordSliceArr& theGauss,
-                     TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*aCoord[1]*(1.0 - aCoord[0])*(2.0*aCoord[1] - 2.0 - aCoord[0]);
-      aSlice[2] = 0.5*aCoord[2]*(1.0 - aCoord[0])*(2.0*aCoord[2] - 2.0 - aCoord[0]);
-      aSlice[1] = 0.5*(aCoord[0] - 1.0)*(1.0 - aCoord[1] - aCoord[2])*(aCoord[0] + 2.0*aCoord[1] + 2.0*aCoord[2]);
-
-      aSlice[3] = 0.5*aCoord[1]*(1.0 + aCoord[0])*(2.0*aCoord[1] - 2.0 + aCoord[0]);
-      aSlice[5] = 0.5*aCoord[2]*(1.0 + aCoord[0])*(2.0*aCoord[2] - 2.0 + aCoord[0]);
-      aSlice[4] = 0.5*(-aCoord[0] - 1.0)*(1.0 - aCoord[1] - aCoord[2])*(-aCoord[0] + 2.0*aCoord[1] + 2.0*aCoord[2]);
-
-      aSlice[8] = 2.0*aCoord[1]*aCoord[2]*(1.0 - aCoord[0]);
-      aSlice[7] = 2.0*aCoord[2]*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
-      aSlice[6] = 2.0*aCoord[1]*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
-
-      aSlice[12] = aCoord[1]*(1.0 - aCoord[0]*aCoord[0]);
-      aSlice[14] = aCoord[2]*(1.0 - aCoord[0]*aCoord[0]);
-      aSlice[13] = (1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]*aCoord[0]);
-
-      aSlice[11] = 2.0*aCoord[1]*aCoord[2]*(1.0 + aCoord[0]);
-      aSlice[10] = 2.0*aCoord[2]*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
-      aSlice[9]  = 2.0*aCoord[1]*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TPyra5a::TPyra5a():
-    TShapeFun(3,5)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  1: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  TPyra5a::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-      // APO & RNV:
-      // Fix for 0019920: EDF 788 VISU: Bad localisation of gauss points for pyramids
-      // Seems shape function for ePYRA5 elements is:
-      // w0 = 0.25*(-X + Y - 1.0)*(-X - Y - 1.0)*(1.0 - Z);
-      // w1 = 0.25*(-X - Y - 1.0)*(+X - Y - 1.0)*(1.0 - Z);
-      // w2 = 0.25*(+X + Y - 1.0)*(+X - Y - 1.0)*(1.0 - Z);
-      // w3 = 0.25*(+X + Y - 1.0)*(-X + Y - 1.0)*(1.0 - Z);
-      // w4 = +Z;
-      aSlice[0] = 0.25*(-aCoord[0] + aCoord[1] - 1.0)*(-aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
-      aSlice[1] = 0.25*(-aCoord[0] - aCoord[1] - 1.0)*(+aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
-      aSlice[2] = 0.25*(+aCoord[0] + aCoord[1] - 1.0)*(+aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
-      aSlice[3] = 0.25*(+aCoord[0] + aCoord[1] - 1.0)*(-aCoord[0] + aCoord[1] - 1.0)*(1.0 - aCoord[2]);
-      aSlice[4] = aCoord[2];
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TPyra5b::TPyra5b():
-    TShapeFun(3,5)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){        
-      case  0: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  1: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-      }
-    }
-  }
-
-  void
-  TPyra5b::InitFun(const TCCoordSliceArr& theRef,
-                   const TCCoordSliceArr& theGauss,
-                   TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-    
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-      // APO & RNV:
-      // Fix for 0019920: EDF 788 VISU: Bad localisation of gauss points for pyramids
-      // Seems shape function for ePYRA5 elements is:
-      // w0 = 0.25*(-X + Y - 1.0)*(-X - Y - 1.0)*(1.0 - Z);
-      // w1 = 0.25*(-X - Y - 1.0)*(+X - Y - 1.0)*(1.0 - Z);
-      // w2 = 0.25*(+X + Y - 1.0)*(+X - Y - 1.0)*(1.0 - Z);
-      // w3 = 0.25*(+X + Y - 1.0)*(-X + Y - 1.0)*(1.0 - Z);
-      // w4 = +Z;
-      aSlice[0] = 0.25*(-aCoord[0] + aCoord[1] - 1.0)*(-aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
-      aSlice[3] = 0.25*(-aCoord[0] - aCoord[1] - 1.0)*(+aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
-      aSlice[2] = 0.25*(+aCoord[0] + aCoord[1] - 1.0)*(+aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
-      aSlice[1] = 0.25*(+aCoord[0] + aCoord[1] - 1.0)*(-aCoord[0] + aCoord[1] - 1.0)*(1.0 - aCoord[2]);
-      aSlice[4] = aCoord[2];
-    }
-  }
-  
-
-
-  //---------------------------------------------------------------
-  TPyra13a::TPyra13a():
-    TShapeFun(3,13)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  1: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-
-      case  5: aCoord[0] =  0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      case  6: aCoord[0] = -0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      case  7: aCoord[0] = -0.5;  aCoord[1] = -0.5;  aCoord[2] =  0.0; break;
-      case  8: aCoord[0] =  0.5;  aCoord[1] = -0.5;  aCoord[2] =  0.0; break;
-      case  9: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case 10: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
-      case 11: aCoord[0] = -0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case 12: aCoord[0] =  0.0;  aCoord[1] = -0.5;  aCoord[2] =  0.5; break;
-      }
-    }
-  }
-
-  void
-  TPyra13a::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
-        (aCoord[0] - 0.5)/(1.0 - aCoord[2]);
-      aSlice[1] = 0.5*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(+aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
-        (aCoord[1] - 0.5)/(1.0 - aCoord[2]);
-      aSlice[2] = 0.5*(+aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(+aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
-        (-aCoord[0] - 0.5)/(1.0 - aCoord[2]);
-      aSlice[3] = 0.5*(+aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
-        (-aCoord[1] - 0.5)/(1.0 - aCoord[2]);
-
-      aSlice[4] = 2.0*aCoord[2]*(aCoord[2] - 0.5);
-
-      aSlice[5] = 0.5*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
-        (aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
-      aSlice[6] = 0.5*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
-        (aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
-      aSlice[7] = 0.5*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
-        (-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
-      aSlice[8] = 0.5*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
-        (-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
-
-      aSlice[9] = 0.5*aCoord[2]*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/
-        (1.0 - aCoord[2]);
-      aSlice[10] = 0.5*aCoord[2]*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/
-        (1.0 - aCoord[2]);
-      aSlice[11] = 0.5*aCoord[2]*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/
-        (1.0 - aCoord[2]);
-      aSlice[12] = 0.5*aCoord[2]*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/
-        (1.0 - aCoord[2]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  TPyra13b::TPyra13b():
-    TShapeFun(3,13)
-  {
-    TInt aNbRef = myRefCoord.size();
-    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
-      TCoordSlice aCoord = GetCoord(aRefId);
-      switch(aRefId){
-      case  0: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  3: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
-      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
-      case  1: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
-      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
-
-      case  8: aCoord[0] =  0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      case  7: aCoord[0] = -0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
-      case  6: aCoord[0] = -0.5;  aCoord[1] = -0.5;  aCoord[2] =  0.0; break;
-      case  5: aCoord[0] =  0.5;  aCoord[1] = -0.5;  aCoord[2] =  0.0; break;
-      case  9: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case 12: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
-      case 11: aCoord[0] = -0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
-      case 10: aCoord[0] =  0.0;  aCoord[1] = -0.5;  aCoord[2] =  0.5; break;
-      }
-    }
-  }
-
-  void
-  TPyra13b::InitFun(const TCCoordSliceArr& theRef,
-                    const TCCoordSliceArr& theGauss,
-                    TFun& theFun) const
-  {
-    GetFun(theRef,theGauss,theFun);
-
-    TInt aNbGauss = theGauss.size();
-    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-      const TCCoordSlice& aCoord = theGauss[aGaussId];
-      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
-
-      aSlice[0] = 0.5*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
-        (aCoord[0] - 0.5)/(1.0 - aCoord[2]);
-      aSlice[3] = 0.5*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(+aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
-        (aCoord[1] - 0.5)/(1.0 - aCoord[2]);
-      aSlice[2] = 0.5*(+aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(+aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
-        (-aCoord[0] - 0.5)/(1.0 - aCoord[2]);
-      aSlice[1] = 0.5*(+aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
-        (-aCoord[1] - 0.5)/(1.0 - aCoord[2]);
-
-      aSlice[4] = 2.0*aCoord[2]*(aCoord[2] - 0.5);
-
-      aSlice[8] = 0.5*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
-        (aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
-      aSlice[7] = 0.5*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
-        (aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
-      aSlice[6] = 0.5*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
-        (-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
-      aSlice[5] = 0.5*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
-        (-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
-
-      aSlice[9] = 0.5*aCoord[2]*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/
-        (1.0 - aCoord[2]);
-      aSlice[12] = 0.5*aCoord[2]*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/
-        (1.0 - aCoord[2]);
-      aSlice[11] = 0.5*aCoord[2]*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/
-        (1.0 - aCoord[2]);
-      aSlice[10] = 0.5*aCoord[2]*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/
-        (1.0 - aCoord[2]);
-    }
-  }
-
-
-
-  //---------------------------------------------------------------
-  bool
-  GetGaussCoord3D(const TGaussInfo& theGaussInfo, 
-                  const TCellInfo& theCellInfo,
-                  const TNodeInfo& theNodeInfo,
-                  TGaussCoord& theGaussCoord,
-                  const TElemNum& theElemNum,
-                  EModeSwitch theMode)
-  {
-    INITMSG(MYDEBUG,"GetGaussCoord3D\n");
-
-    if(theGaussInfo.myGeom == theCellInfo.myGeom){
-      EGeometrieElement aGeom = theGaussInfo.myGeom;
-
-      TInt aNbRef = theGaussInfo.GetNbRef();
-      TCCoordSliceArr aRefSlice(aNbRef);
-      for(TInt anId = 0; anId < aNbRef; anId++)
-        aRefSlice[anId] = theGaussInfo.GetRefCoordSlice(anId);
-
-      TInt aNbGauss = theGaussInfo.GetNbGauss();
-      TCCoordSliceArr aGaussSlice(aNbGauss);
-      for(TInt anId = 0; anId < aNbGauss; anId++)
-        aGaussSlice[anId] = theGaussInfo.GetGaussCoordSlice(anId);
-
-      switch(aGeom){
-      case eSEG2: {
-        INITMSG(MYDEBUG,"eSEG2"<<std::endl);
-
-        if(TSeg2a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eSEG3: {
-        INITMSG(MYDEBUG,"eSEG3"<<std::endl);
-
-        if(TSeg3a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eTRIA3: {
-        INITMSG(MYDEBUG,"eTRIA3"<<std::endl);
-
-        if(TTria3a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TTria3b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eTRIA6: {
-        INITMSG(MYDEBUG,"eTRIA6"<<std::endl);
-
-        if(TTria6a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TTria6b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eQUAD4: {
-        INITMSG(MYDEBUG,"eQUAD4"<<std::endl);
-
-        if(TQuad4a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TQuad4b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eQUAD8: {
-        INITMSG(MYDEBUG,"eQUAD8"<<std::endl);
-
-        if(TQuad8a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TQuad8b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eQUAD9: {
-        INITMSG(MYDEBUG,"eQUAD9"<<std::endl);
-
-        if(TQuad9a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TQuad9b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eTETRA4: {
-        INITMSG(MYDEBUG,"eTETRA4"<<std::endl);
-
-        if(TTetra4a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TTetra4b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case ePYRA5: {
-        INITMSG(MYDEBUG,"ePYRA5"<<std::endl);
-
-        if(TPyra5a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TPyra5b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case ePENTA6: {
-        INITMSG(MYDEBUG,"ePENTA6"<<std::endl);
-
-        if(TPenta6a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TPenta6b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eHEXA8: {
-        INITMSG(MYDEBUG,"eHEXA8"<<std::endl);
-
-        if(THexa8a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(THexa8b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eTETRA10: {
-        INITMSG(MYDEBUG,"eTETRA10"<<std::endl);
-
-        if(TTetra10a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TTetra10b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case ePYRA13: {
-        INITMSG(MYDEBUG,"ePYRA13"<<std::endl);
-
-        if(TPyra13a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TPyra13b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case ePENTA15: {
-        INITMSG(MYDEBUG,"ePENTA15"<<std::endl);
-
-        if(TPenta15a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(TPenta15b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      case eHEXA20: {
-        INITMSG(MYDEBUG,"eHEXA20"<<std::endl);
-
-        if(THexa20a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        if(THexa20b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
-          return true;
-
-        break;
-      }
-      default: 
-        INITMSG(MYDEBUG,"eNONE"<<std::endl);
-        return false;
-      }
-    }
-
-    return false;
-  }
-
-  //---------------------------------------------------------------
-  bool
-  GetBaryCenter(const TCellInfo& theCellInfo,
-                const TNodeInfo& theNodeInfo,
-                TGaussCoord& theGaussCoord,
-                const TElemNum& theElemNum,
-                EModeSwitch theMode)
-  {
-    INITMSG(MYDEBUG,"GetBaryCenter\n");
-    const PMeshInfo& aMeshInfo = theCellInfo.GetMeshInfo();
-    TInt aDim = aMeshInfo->GetDim();
-    static TInt aNbGauss = 1;
-
-    bool anIsSubMesh = !theElemNum.empty();
-    TInt aNbElem;
-    if(anIsSubMesh)
-      aNbElem = theElemNum.size();
-    else
-      aNbElem = theCellInfo.GetNbElem();
-
-    theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
-
-    TInt aConnDim = theCellInfo.GetConnDim();
-
-    INITMSGA(MYDEBUG,0,
-             "- aDim = "<<aDim<<
-             "; aNbGauss = "<<aNbGauss<<
-             "; aNbElem = "<<aNbElem<<
-             "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
-             std::endl);
-
-    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
-      TInt aCellId = anIsSubMesh? theElemNum[anElemId]-1: anElemId;
-      TCConnSlice aConnSlice = theCellInfo.GetConnSlice(aCellId);
-      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
-
-      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-        TCoordSlice& aGaussCoordSlice = aCoordSliceArr[aGaussId];
-
-        for(TInt aConnId = 0; aConnId < aConnDim; aConnId++){
-          TInt aNodeId = aConnSlice[aConnId] - 1;      
-          TCCoordSlice aNodeCoordSlice = theNodeInfo.GetCoordSlice(aNodeId);
-
-          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-            aGaussCoordSlice[aDimId] += aNodeCoordSlice[aDimId];
-          }
-        }
-
-        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-          aGaussCoordSlice[aDimId] /= aConnDim;
-        }
-      }
-    }
-
-#ifdef _DEBUG_
-    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
-      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
-      INITMSG(MYVALUEDEBUG,"");
-      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-        TCoordSlice& aCoordSlice = aCoordSliceArr[aGaussId];
-        ADDMSG(MYVALUEDEBUG,"{");
-        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-          ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
-        }
-        ADDMSG(MYVALUEDEBUG,"} ");
-      }
-      ADDMSG(MYVALUEDEBUG,std::endl);
-    }
-#endif
-
-    return true;
-  }
-
-
-  //---------------------------------------------------------------
-  bool
-  GetBaryCenter(const TPolygoneInfo& thePolygoneInfo,
-                const TNodeInfo& theNodeInfo,
-                TGaussCoord& theGaussCoord,
-                const TElemNum& theElemNum,
-                EModeSwitch theMode)
-  {
-    INITMSG(MYDEBUG,"GetBaryCenter\n");
-    const PMeshInfo& aMeshInfo = thePolygoneInfo.GetMeshInfo();
-    TInt aDim = aMeshInfo->GetDim();
-    static TInt aNbGauss = 1;
-
-    bool anIsSubMesh = !theElemNum.empty();
-    TInt aNbElem;
-    if(anIsSubMesh)
-      aNbElem = theElemNum.size();
-    else
-      aNbElem = thePolygoneInfo.GetNbElem();
-
-    theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
-
-    INITMSGA(MYDEBUG,0,
-             "- aDim = "<<aDim<<
-             "; aNbGauss = "<<aNbGauss<<
-             "; aNbElem = "<<aNbElem<<
-             "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
-             std::endl);
-
-    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
-      TInt aCellId = anIsSubMesh? theElemNum[anElemId]-1: anElemId;
-
-      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
-      TCConnSlice aConnSlice = thePolygoneInfo.GetConnSlice(aCellId);
-      TInt aNbConn = thePolygoneInfo.GetNbConn(aCellId);
-      TInt aNbNodes = thePolygoneInfo.GetNbConn(aCellId);
-
-      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-        TCoordSlice& aGaussCoordSlice = aCoordSliceArr[aGaussId];
-
-        for(TInt aConnId = 0; aConnId < aNbConn; aConnId++){
-          TInt aNodeId = aConnSlice[aConnId] - 1;      
-          TCCoordSlice aNodeCoordSlice = theNodeInfo.GetCoordSlice(aNodeId);
-
-          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-            aGaussCoordSlice[aDimId] += aNodeCoordSlice[aDimId];
-          }
-        }
-
-        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-          aGaussCoordSlice[aDimId] /= aNbNodes;
-        }
-      }
-    }
-
-    return true;
-  }
-
-
-  //---------------------------------------------------------------
-  bool
-  GetBaryCenter(const TPolyedreInfo& thePolyedreInfo,
-                const TNodeInfo& theNodeInfo,
-                TGaussCoord& theGaussCoord,
-                const TElemNum& theElemNum,
-                EModeSwitch theMode)
-  {
-    INITMSG(MYDEBUG,"GetBaryCenter\n");
-    const PMeshInfo& aMeshInfo = thePolyedreInfo.GetMeshInfo();
-    TInt aDim = aMeshInfo->GetDim();
-    static TInt aNbGauss = 1;
-
-    bool anIsSubMesh = !theElemNum.empty();
-    TInt aNbElem;
-    if(anIsSubMesh)
-      aNbElem = theElemNum.size();
-    else
-      aNbElem = thePolyedreInfo.GetNbElem();
-
-    theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
-
-    INITMSGA(MYDEBUG,0,
-             "- aDim = "<<aDim<<
-             "; aNbGauss = "<<aNbGauss<<
-             "; aNbElem = "<<aNbElem<<
-             "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
-             std::endl);
-
-    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
-      TInt aCellId = anIsSubMesh? theElemNum[anElemId]-1: anElemId;
-
-      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
-      TCConnSliceArr aConnSliceArr = thePolyedreInfo.GetConnSliceArr(aCellId);
-      TInt aNbFaces = aConnSliceArr.size();
-
-      TInt aNbNodes = thePolyedreInfo.GetNbNodes(aCellId);
-
-      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-        TCoordSlice& aGaussCoordSlice = aCoordSliceArr[aGaussId];
-
-        for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++){
-          TCConnSlice aConnSlice = aConnSliceArr[aFaceId];
-          TInt aNbConn = aConnSlice.size();
-          for(TInt aConnId = 0; aConnId < aNbConn; aConnId++){
-            TInt aNodeId = aConnSlice[aConnId] - 1;      
-            TCCoordSlice aNodeCoordSlice = theNodeInfo.GetCoordSlice(aNodeId);
-
-            for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-              aGaussCoordSlice[aDimId] += aNodeCoordSlice[aDimId];
-            }
-          }
-        }
-        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-          aGaussCoordSlice[aDimId] /= aNbNodes;
-        }
-      }
-    }
-
-    return true;
-  }
-}
diff --git a/src/MEDWrapper/Base/MED_GaussUtils.hxx b/src/MEDWrapper/Base/MED_GaussUtils.hxx
deleted file mode 100644 (file)
index 655b749..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_GaussUtils_HeaderFile
-#define MED_GaussUtils_HeaderFile
-
-#include "MED_WrapperBase.hxx"
-
-#include "MED_Structures.hxx"
-
-namespace MED
-{
-  //---------------------------------------------------------------
-  typedef TVector<TCCoordSlice> TCCoordSliceArr;
-  typedef TVector<TCoordSlice> TCoordSliceArr;
-
-  //! Define a helper class to handle Gauss Points coordinates
-  class MEDWRAPPER_EXPORT TGaussCoord:
-    virtual TModeSwitchInfo 
-  {
-    TInt myNbElem;
-    TInt myNbGauss;
-    TInt myDim;
-
-    TInt myGaussStep;
-
-    TNodeCoord myGaussCoord;
-
-  public:
-    
-    TGaussCoord();
-
-    //! To init the class
-    void
-    Init(TInt theNbElem,
-         TInt theNbGauss,
-         TInt theDim,
-         EModeSwitch theMode = eFULL_INTERLACE);
-
-    TInt
-    GetNbElem() const;
-
-    TInt
-    GetNbGauss() const;
-
-    TInt
-    GetDim() const;
-
-    unsigned char*
-    GetValuePtr();
-
-    //! Get slice of the coordinate that corresponds to defined cell (const version)
-    TCCoordSliceArr
-    GetCoordSliceArr(TInt theElemId) const;
-
-    //! Get slice of the coordinate that corresponds to defined cell
-    TCoordSliceArr 
-    GetCoordSliceArr(TInt theElemId);
-  };
-  typedef SharedPtr<TGaussCoord> PGaussCoord;
-
-
-  //---------------------------------------------------------------
-  //! To calculate Gauss Points coordinates
-  MEDWRAPPER_EXPORT 
-  bool
-  GetGaussCoord3D(const TGaussInfo& theGaussInfo, 
-                  const TCellInfo& theCellInfo,
-                  const TNodeInfo& theNodeInfo,
-                  TGaussCoord& theGaussCoord,
-                  const TElemNum& theElemNum = TElemNum(),
-                  EModeSwitch theMode = eFULL_INTERLACE);
-
-
-  //---------------------------------------------------------------
-  //! To calculate Gauss Points coordinates for defined TCellInfo as its bary center
-  MEDWRAPPER_EXPORT 
-  bool
-  GetBaryCenter(const TCellInfo& theCellInfo,
-                const TNodeInfo& theNodeInfo,
-                TGaussCoord& theGaussCoord,
-                const TElemNum& theElemNum = TElemNum(),
-                EModeSwitch theMode = eFULL_INTERLACE);
-
-  //! To calculate Gauss Points coordinates for defined TPolygoneInfo as its bary center
-  MEDWRAPPER_EXPORT 
-  bool
-  GetBaryCenter(const TPolygoneInfo& thePolygoneInfo,
-                const TNodeInfo& theNodeInfo,
-                TGaussCoord& theGaussCoord,
-                const TElemNum& theElemNum = TElemNum(),
-                EModeSwitch theMode = eFULL_INTERLACE);
-
-  //! To calculate Gauss Points coordinates for defined TPolyedreInfo as its bary center
-  MEDWRAPPER_EXPORT 
-  bool
-  GetBaryCenter(const TPolyedreInfo& thePolyedreInfo,
-                const TNodeInfo& theNodeInfo,
-                TGaussCoord& theGaussCoord,
-                const TElemNum& theElemNum = TElemNum(),
-                EModeSwitch theMode = eFULL_INTERLACE);
-
-  //---------------------------------------------------------------
-  //! Shape function definitions
-  //---------------------------------------------------------------
-  struct MEDWRAPPER_EXPORT TShapeFun
-  {
-    class TFun;
-    
-    TFloatVector myRefCoord;
-    TInt myDim;
-    TInt myNbRef;
-
-    TShapeFun(TInt theDim = 0, TInt theNbRef = 0);
-
-    TInt GetNbRef() const { return myNbRef; }
-
-    TCCoordSlice GetCoord(TInt theRefId) const;
-
-    TCoordSlice GetCoord(TInt theRefId);
-
-    void GetFun(const TCCoordSliceArr& theRef,
-                const TCCoordSliceArr& theGauss,
-                TFun& theFun) const;
-    virtual 
-    void InitFun(const TCCoordSliceArr& theRef,
-                 const TCCoordSliceArr& theGauss,
-                 TFun& theFun) const = 0;
-    virtual
-    bool IsSatisfy(const TCCoordSliceArr& theRefCoord) const;
-
-    bool Eval(const TCellInfo&       theCellInfo,
-              const TNodeInfo&       theNodeInfo,
-              const TElemNum&        theElemNum,
-              const TCCoordSliceArr& theRef,
-              const TCCoordSliceArr& theGauss,
-              TGaussCoord&           theGaussCoord,
-              EModeSwitch            theMode);
-  };
-  //---------------------------------------------------------------
-  struct TSeg2a: TShapeFun {
-    TSeg2a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TSeg3a: TShapeFun {
-    TSeg3a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TTria3a: TShapeFun {
-    TTria3a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TTria6a: TShapeFun {
-    TTria6a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TTria3b: TShapeFun {
-    TTria3b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TTria6b: TShapeFun {
-    TTria6b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TQuad4a: TShapeFun {
-    TQuad4a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TQuad8a: TShapeFun {
-    TQuad8a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TQuad9a: TShapeFun {
-    TQuad9a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TQuad4b: TShapeFun {
-    TQuad4b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TQuad8b: TShapeFun {
-    TQuad8b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TQuad9b: TShapeFun {
-    TQuad9b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TTetra4a: TShapeFun {
-    TTetra4a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TTetra10a: TShapeFun {
-    TTetra10a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TTetra4b: TShapeFun {
-    TTetra4b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TTetra10b: TShapeFun {
-    TTetra10b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct THexa8a: TShapeFun {
-    THexa8a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct THexa20a: TShapeFun {
-    THexa20a(TInt theDim = 3, TInt theNbRef = 20);
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct THexa27a: THexa20a {
-    THexa27a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct THexa8b: TShapeFun {
-    THexa8b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct THexa20b: TShapeFun {
-    THexa20b(TInt theDim = 3, TInt theNbRef = 20);
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TPenta6a: TShapeFun {
-    TPenta6a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TPenta6b: TShapeFun {
-    TPenta6b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TPenta15a: TShapeFun {
-    TPenta15a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TPenta15b: TShapeFun {
-    TPenta15b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TPyra5a: TShapeFun {
-    TPyra5a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TPyra5b: TShapeFun {
-    TPyra5b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TPyra13a: TShapeFun {
-    TPyra13a();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-  struct TPyra13b: TShapeFun {
-    TPyra13b();
-    virtual void InitFun(const TCCoordSliceArr& theRef,
-                         const TCCoordSliceArr& theGauss,
-                         TFun& theFun) const;
-  };
-  //---------------------------------------------------------------
-
-}
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_SharedPtr.hxx b/src/MEDWrapper/Base/MED_SharedPtr.hxx
deleted file mode 100644 (file)
index 914946c..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_SharedPtr_HeaderFile
-#define MED_SharedPtr_HeaderFile
-
-#include <boost/shared_ptr.hpp>
-
-namespace MED
-{
-
-  //! To extend the boost::shared_ptr to support such features automatic dynamic cast
-  /*!
-    All entities of the MEDWrapper package are handled as pointer.
-    This class was introduced to provide correct and flexible memory management 
-    for all of the MEDWrapper objects.
-  */
-  template<class T> class SharedPtr: public boost::shared_ptr<T>
-  {
-  public:
-    //! Default constructor
-    SharedPtr() {}
-
-    //! Construct the class by any type of a pointer
-    template<class Y>
-    explicit SharedPtr(Y * p): 
-      boost::shared_ptr<T>(p) 
-    {}
-
-    //! Construct the class by any specialisation of the class
-    template<class Y>
-    SharedPtr(SharedPtr<Y> const & r):
-      boost::shared_ptr<T>(boost::dynamic_pointer_cast<T,Y>(r))
-    {}
-
-    //! Copy-constructor
-    template<class Y>
-    SharedPtr& 
-    operator=(SharedPtr<Y> const & r)
-    {
-      SharedPtr<T>(r).swap(*this);
-      return *this;
-    }
-
-    //! Introduce a flexible way to reset the wrapped pointer
-    template<class Y> 
-    SharedPtr& 
-    operator()(Y * p) // Y must be complete
-    {
-      return operator=<Y>(SharedPtr<Y>(p));
-    }
-
-    //! Introduce a flexible way to reset the wrapped pointer
-    template<class Y> 
-    SharedPtr& 
-    operator()(SharedPtr<Y> const & r) // Y must be complete
-    {
-      return operator=<Y>(SharedPtr<Y>(r));
-    }
-
-    //! To provide a flexible way to use reference to the wrapped pointer (const version)
-    operator const T& () const 
-    { 
-      return *(this->get());
-    }
-
-    //! To provide a flexible way to use reference to the wrapped pointer
-    operator T& () 
-    { 
-      return *(this->get());
-    }
-  };
-
-}
-
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_SliceArray.hxx b/src/MEDWrapper/Base/MED_SliceArray.hxx
deleted file mode 100644 (file)
index 24e01f6..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_SliceArray_HeaderFile
-#define MED_SliceArray_HeaderFile
-
-#ifdef WIN32 // for correctly compiling "valarray" in modules, which includes this file
-  #undef max
-  #undef min
-#endif
-
-#include <valarray>
-#include <stdexcept>
-
-//#if defined(_DEBUG_)
-#  define MED_TCSLICE_CHECK_RANGE
-//#endif
-
-namespace MED
-{
-  //---------------------------------------------------------------
-  //! This class intends to provide a uniform way to handle multidimensional data (const version)
-  /*! 
-    It just contains a pointer to real sequence and implement proper calculation of its indexes.
-    This class deals with constant pointer to the sources data and provides const method to
-    read them (data).
-   */
-  template<class TValueType> 
-  class TCSlice
-  {
-    const TValueType* myCValuePtr; //!< Reference to source multidimensional data
-    size_t mySourceSize; //!< Size of the source multidimensional data
-    std::slice mySlice; //!< Defines algorithm of index calculation
-
-  protected:
-    void
-    check_id(size_t theId) const
-    {
-      long int anId = -1;
-      if(theId < mySlice.size()){
-        anId = mySlice.start() + theId*mySlice.stride();
-        if(anId < (long int)mySourceSize)
-          return;
-      }
-      throw std::out_of_range("TCSlice::check_id");
-    }
-
-    //! Calculate internal index to get proper element from the source multidimensional data
-    size_t
-    calculate_id(size_t theId) const
-    {
-      return mySlice.start() + theId*mySlice.stride();
-    }
-    
-    size_t
-    get_id(size_t theId) const
-    {
-#ifdef MED_TCSLICE_CHECK_RANGE
-      check_id(theId);
-#endif
-      return calculate_id(theId);
-    }
-    
-    size_t
-    get_id_at(size_t theId) const
-    {
-      check_id(theId);
-      return calculate_id(theId);
-    }
-
-  public:
-    typedef TValueType value_type;
-
-    //! Construct the class from bare pointer
-    TCSlice(const value_type* theValuePtr,
-            size_t theSourceSize,
-            const std::slice& theSlice): 
-      myCValuePtr(theValuePtr),
-      mySourceSize(theSourceSize),
-      mySlice(theSlice)
-    {}
-    
-    //! Construct the class from corresponding container
-    TCSlice(const TVector<value_type>& theContainer,
-            const std::slice& theSlice): 
-      myCValuePtr(&theContainer[0]),
-      mySourceSize(theContainer.size()),
-      mySlice(theSlice)
-    {}
-    
-    //! Default constructor (dangerous)
-    TCSlice():
-      myCValuePtr(NULL)
-    {}
-
-    //! Get element by its number (const version)
-    const value_type& 
-    operator[](size_t theId) const
-    {
-      return *(myCValuePtr + get_id(theId));
-    }
-    
-    const value_type& 
-    at(size_t theId) const
-    {
-      return *(myCValuePtr + get_id_at(theId));
-    }
-    
-    //! Get range of the order numbers
-    size_t
-    size() const
-    {
-      return mySlice.size();
-    }
-  };
-  
-
-  //---------------------------------------------------------------
-  //! This class extends TCSlice functionality for non-constant case
-  template<class TValueType> 
-  class TSlice: public TCSlice<TValueType>
-  {
-    TValueType* myValuePtr;
-    
-  public:
-    typedef TValueType value_type;
-    typedef TCSlice<TValueType> TSupperClass;
-
-    //! Construct the class from bare pointer
-    TSlice(value_type* theValuePtr,
-           size_t theSourceSize,
-           const std::slice& theSlice): 
-      TSupperClass(theValuePtr, theSourceSize, theSlice),
-      myValuePtr(theValuePtr)
-    {}
-    
-    //! Construct the class from corresponding container
-    TSlice(TVector<value_type>& theContainer,
-           const std::slice& theSlice): 
-      TSupperClass(theContainer, theSlice),
-      myValuePtr(&theContainer[0])
-    {}
-    
-    //! Default constructor (dangerous)
-    TSlice():
-      myValuePtr(NULL)
-    {}
-
-    //! Get element by its number
-    value_type& 
-    operator[](size_t theId)
-    {
-      return *(myValuePtr + this->get_id(theId));
-    }
-
-    value_type& 
-    at(size_t theId)
-    {
-      return *(myValuePtr + this->get_id_at(theId));
-    }
-  };
-
-}
-
-#undef MED_TCSLICE_CHECK_RANGE
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_Structures.cxx b/src/MEDWrapper/Base/MED_Structures.cxx
deleted file mode 100644 (file)
index ec1fd66..0000000
+++ /dev/null
@@ -1,865 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//  File   : MED_Structure.cxx
-//  Author : Eugeny NIKOLAEV
-//
-#include "MED_Structures.hxx"
-#include "MED_Utilities.hxx"
-
-#include <cstring>
-
-using namespace MED;
-
-namespace MED
-{
-  TInt
-  GetNbNodes(EGeometrieElement typmai)
-  {
-    return typmai%100;
-  }
-
-  std::string 
-  GetString(TInt theId, 
-            TInt theStep, 
-            const TString& theString)
-  {
-    const char* aPos = &theString[theId*theStep];
-    TInt aSize = std::min(TInt(strlen(aPos)),theStep);
-    return std::string(aPos,aSize);
-  }
-
-  void 
-  SetString(TInt theId, 
-            TInt theStep, 
-            TString& theString, 
-            const std::string& theValue)
-  {
-    TInt aSize = std::min(TInt(theValue.size()+1),theStep);
-    char* aPos = &theString[theId*theStep];
-    strncpy(aPos,theValue.c_str(),aSize);
-  }
-
-  void 
-  SetString(TInt theId, 
-            TInt theStep, 
-            TString& theString, 
-            const TString& theValue)
-  {
-    TInt aSize = std::min(TInt(theValue.size()+1),theStep);
-    char* aPos = &theString[theId*theStep];
-    const char* aValue = &theValue[0];
-    strncpy(aPos,aValue,aSize);
-  }
-
-  TInt
-  GetDimGaussCoord(EGeometrieElement theGeom)
-  {
-    return theGeom/100;
-  }
-
-  TInt
-  GetNbRefCoord(EGeometrieElement theGeom)
-  {
-    return (theGeom%100);
-  }
-
-  //---------------------------------------------------------------
-  PFloatTimeStampValue
-  CastToFloatTimeStampValue(const PTimeStampValueBase& theTimeStampValue)
-  {
-    return theTimeStampValue;
-  }
-
-  PIntTimeStampValue
-  CastToIntTimeStampValue(const PTimeStampValueBase& theTimeStampValue)
-  {
-    return theTimeStampValue;
-  }
-}
-
-//---------------------------------------------------------------
-TInt
-TFamilyInfo
-::GetAttrId(TInt theId) const 
-{
-  return myAttrId[theId];
-}
-
-TInt
-TFamilyInfo
-::GetAttrVal(TInt theId) const 
-{
-  return myAttrVal[theId];
-}
-
-void
-TFamilyInfo
-::SetAttrId(TInt theId,TInt theVal) 
-{
-  myAttrId[theId] = theVal;
-}
-
-void
-TFamilyInfo
-::SetAttrVal(TInt theId,TInt theVal) 
-{
-  myAttrVal[theId] = theVal;
-}
-
-//---------------------------------------------------------------
-TInt
-TElemInfo
-::GetFamNum(TInt theId) const 
-{
-  return (*myFamNum)[theId];
-}
-
-void
-TElemInfo
-::SetFamNum(TInt theId, TInt theVal) 
-{
-  (*myFamNum)[theId] = theVal;
-  myIsFamNum = eVRAI;
-}
-
-TInt
-TElemInfo
-::GetElemNum(TInt theId) const 
-{
-  return (*myElemNum)[theId];
-}
-
-void
-TElemInfo
-::SetElemNum(TInt theId, TInt theVal) 
-{
-  (*myElemNum)[theId] = theVal;
-}
-
-//---------------------------------------------------------------
-TCCoordSlice 
-TNodeInfo
-::GetCoordSlice(TInt theId) const
-{
-  TInt aDim = myMeshInfo->GetSpaceDim();
-  if(GetModeSwitch() == eFULL_INTERLACE)
-    return TCCoordSlice(*myCoord, std::slice(theId*aDim, aDim, 1));
-  else
-    return TCCoordSlice(*myCoord, std::slice(theId, aDim, aDim));
-}
-
-TCoordSlice 
-TNodeInfo
-::GetCoordSlice(TInt theId)
-{
-  TInt aDim = myMeshInfo->GetSpaceDim();
-  if(GetModeSwitch() == eFULL_INTERLACE)
-    return TCoordSlice(*myCoord, std::slice(theId*aDim,aDim,1));
-  else
-    return TCoordSlice(*myCoord, std::slice(theId,aDim,aDim));
-}
-
-//---------------------------------------------------------------
-TCConnSlice 
-TCellInfo
-::GetConnSlice(TInt theElemId) const
-{
-  if(GetModeSwitch() == eFULL_INTERLACE)
-    return TCConnSlice(*myConn, std::slice(GetConnDim()*theElemId, GetNbNodes(myGeom), 1));
-  else
-    return TCConnSlice(*myConn, std::slice(theElemId, GetNbNodes(myGeom), GetConnDim()));
-}
-
-TConnSlice 
-TCellInfo
-::GetConnSlice(TInt theElemId)
-{
-  if(GetModeSwitch() == eFULL_INTERLACE)
-    return TConnSlice(*myConn, std::slice(GetConnDim()*theElemId, GetNbNodes(myGeom), 1));
-  else
-    return TConnSlice(*myConn, std::slice(theElemId, GetNbNodes(myGeom), GetConnDim()));
-}
-
-
-//---------------------------------------------------------------
-TInt
-TPolygoneInfo
-::GetNbConn(TInt theElemId) const 
-{
-  return (*myIndex)[theElemId + 1] - (*myIndex)[theElemId];
-}
-
-TCConnSlice 
-TPolygoneInfo
-::GetConnSlice(TInt theElemId) const
-{
-  return TCConnSlice(*myConn, std::slice((*myIndex)[theElemId] - 1, GetNbConn(theElemId), 1));
-}
-
-TConnSlice 
-TPolygoneInfo
-::GetConnSlice(TInt theElemId)
-{
-  return TConnSlice(*myConn, std::slice((*myIndex)[theElemId] - 1, GetNbConn(theElemId), 1));
-}
-
-
-//---------------------------------------------------------------
-TInt 
-TPolyedreInfo
-::GetNbFaces(TInt theElemId) const 
-{
-  return (*myIndex)[theElemId+1] - (*myIndex)[theElemId];
-}
-
-TInt 
-TPolyedreInfo
-::GetNbNodes(TInt theElemId) const 
-{
-  TInt aNbNodes = 0;
-  TInt aNbFaces = GetNbFaces(theElemId);
-  TInt aStartFaceId = (*myIndex)[theElemId] - 1;
-  for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){
-    TInt aCurrentId = (*myFaces)[aStartFaceId];
-    TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId;
-    aNbNodes += aDiff;
-  }
-  return aNbNodes;
-}
-
-TCConnSliceArr 
-TPolyedreInfo
-::GetConnSliceArr(TInt theElemId) const
-{
-  TInt aNbFaces = GetNbFaces(theElemId);
-  TCConnSliceArr aConnSliceArr(aNbFaces);
-  TInt aStartFaceId = (*myIndex)[theElemId] - 1;
-  for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){
-    TInt aCurrentId = (*myFaces)[aStartFaceId];
-    TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId;
-    aConnSliceArr[aFaceId] =
-      TCConnSlice(*myConn, std::slice(aCurrentId - 1, aDiff, 1));
-  }
-  return aConnSliceArr;
-}
-
-TConnSliceArr 
-TPolyedreInfo
-::GetConnSliceArr(TInt theElemId)
-{
-  TInt aNbFaces = GetNbFaces(theElemId);
-  TConnSliceArr aConnSliceArr(aNbFaces);
-  TInt aStartFaceId = (*myIndex)[theElemId] - 1;
-  for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){
-    TInt aCurrentId = (*myFaces)[aStartFaceId];
-    TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId;
-    aConnSliceArr[aFaceId] =
-      TConnSlice(*myConn, std::slice(aCurrentId - 1, aDiff, 1));
-  }
-  return aConnSliceArr;
-}
-
-
-//---------------------------------------------------------------
-TMeshValueBase
-::TMeshValueBase():
-  myNbElem(0),
-  myNbComp(0),
-  myNbGauss(0),
-  myStep(0)
-{}
-
-void
-TMeshValueBase
-::Allocate(TInt theNbElem,
-           TInt theNbGauss,
-           TInt theNbComp,
-           EModeSwitch theMode)
-{
-  myModeSwitch = theMode;
-  
-  myNbElem = theNbElem;
-  myNbGauss = theNbGauss;
-  myNbComp = theNbComp;
-  
-  myStep = theNbComp*theNbGauss;
-}
-
-size_t
-TMeshValueBase
-::GetSize() const
-{
-  return myNbElem * myStep;
-}
-    
-size_t
-TMeshValueBase
-::GetNbVal() const
-{
-  return myNbElem * myNbGauss;
-}
-
-size_t
-TMeshValueBase
-::GetNbGauss() const
-{
-  return myNbGauss;
-}
-
-size_t
-TMeshValueBase
-::GetStep() const
-{
-  return myStep;
-}
-
-
-//---------------------------------------------------------------
-TInt
-TProfileInfo
-::GetElemNum(TInt theId) const 
-{
-  return (*myElemNum)[theId];
-}
-
-void
-TProfileInfo
-::SetElemNum(TInt theId,TInt theVal) 
-{
-  (*myElemNum)[theId] = theVal;
-}
-
-//---------------------------------------------------------------
-bool
-TGaussInfo::TLess
-::operator()(const TKey& theLeft, const TKey& theRight) const
-{
-  EGeometrieElement aLGeom = boost::get<0>(theLeft);
-  EGeometrieElement aRGeom = boost::get<0>(theRight);
-  if(aLGeom != aRGeom)
-    return aLGeom < aRGeom;
-
-  const std::string& aLStr = boost::get<1>(theLeft);
-  const std::string& aRStr = boost::get<1>(theRight);
-  return aLStr < aRStr;
-}
-
-bool
-TGaussInfo::TLess
-::operator()(const TGaussInfo& theLeft, const TGaussInfo& theRight) const
-{
-  if(!&theLeft)
-    return true;
-
-  if(!&theRight)
-    return false;
-
-  if(theLeft.myGeom != theRight.myGeom)
-    return theLeft.myGeom < theRight.myGeom;
-
-  if(theLeft.myRefCoord != theRight.myRefCoord)
-    return theLeft.myRefCoord < theRight.myRefCoord;
-
-  return theLeft.myGaussCoord < theRight.myGaussCoord;
-}
-
-TCCoordSlice 
-TGaussInfo
-::GetRefCoordSlice(TInt theId) const
-{
-  if(GetModeSwitch() == eFULL_INTERLACE)
-    return TCCoordSlice(myRefCoord,std::slice(theId*GetDim(),GetDim(),1));
-  else
-    return TCCoordSlice(myRefCoord,std::slice(theId,GetDim(),GetDim()));
-}
-
-TCoordSlice 
-TGaussInfo
-::GetRefCoordSlice(TInt theId)
-{
-  if(GetModeSwitch() == eFULL_INTERLACE)
-    return TCoordSlice(myRefCoord,std::slice(theId*GetDim(),GetDim(),1));
-  else
-    return TCoordSlice(myRefCoord,std::slice(theId,GetDim(),GetDim()));
-}
-
-TCCoordSlice 
-TGaussInfo
-::GetGaussCoordSlice(TInt theId) const
-{
-  if(GetModeSwitch() == eFULL_INTERLACE)
-    return TCCoordSlice(myGaussCoord,std::slice(theId*GetDim(),GetDim(),1));
-  else
-    return TCCoordSlice(myGaussCoord,std::slice(theId,GetDim(),GetDim()));
-}
-
-TCoordSlice 
-TGaussInfo
-::GetGaussCoordSlice(TInt theId)
-{
-  if(GetModeSwitch() == eFULL_INTERLACE)
-    return TCoordSlice(myGaussCoord,std::slice(theId*GetDim(),GetNbGauss(),1));
-  else
-    return TCoordSlice(myGaussCoord,std::slice(theId,GetNbGauss(),GetDim()));
-}
-
-
-//---------------------------------------------------------------
-TInt
-TTimeStampInfo
-::GetNbGauss(EGeometrieElement theGeom) const
-{
-  TGeom2NbGauss::const_iterator anIter = myGeom2NbGauss.find(theGeom);
-  if(anIter == myGeom2NbGauss.end())
-    return 1;//EXCEPTION(runtime_error,"TTimeStampInfo::GetNbGauss - myGeom2NbGauss.find(theGeom) fails");
-
-  return anIter->second;
-}
-
-
-//---------------------------------------------------------------
-// TGrilleInfo structure methods
-//---------------------------------------------------------------
-const EGrilleType&
-TGrilleInfo
-::GetGrilleType() const
-{
-  return myGrilleType;
-}
-
-EGrilleType
-TGrilleInfo
-::GetGrilleType()
-{
-  return myGrilleType;
-}
-
-void
-TGrilleInfo
-::SetGrilleType(EGrilleType theGrilleType)
-{
-  myGrilleType = theGrilleType;
-}
-
-const
-TIndexes&
-TGrilleInfo
-::GetMapOfIndexes() const
-{
-  return myIndixes;
-}
-
-TIndexes&
-TGrilleInfo
-::GetMapOfIndexes()
-{
-  return myIndixes;
-}
-
-const
-TFloatVector&
-TGrilleInfo
-::GetIndexes(TInt theAxisNumber) const
-{
-  TIndexes::const_iterator aIter=myIndixes.find(theAxisNumber);
-  if(aIter==myIndixes.end())
-    EXCEPTION(std::runtime_error, "const TGrilleInfo::GetIndexes - myIndixes.find(theAxisNumber); fails");
-  return aIter->second;
-}
-
-TFloatVector&
-TGrilleInfo
-::GetIndexes(TInt theAxisNumber)
-{
-  TIndexes::iterator aIter=myIndixes.find(theAxisNumber);
-  if(aIter==myIndixes.end())
-    EXCEPTION(std::runtime_error, "TGrilleInfo::GetIndexes - myIndixes.find(theAxisNumber="<<theAxisNumber<<"); fails");
-  return aIter->second;
-}
-
-TInt
-TGrilleInfo
-::GetNbIndexes(TInt theAxisNumber)
-{
-  const TFloatVector& aVector=GetIndexes(theAxisNumber);
-  return aVector.size();
-}
-
-TInt
-TGrilleInfo
-::GetNbNodes()
-{
-  TInt nbNodes=0;
-  TInt aDim = myMeshInfo->GetDim();
-  for(int i=0;i<aDim;i++)
-    if(nbNodes == 0)
-      nbNodes = this->GetGrilleStructure()[i];
-    else
-      nbNodes = nbNodes*this->GetGrilleStructure()[i];
-  return nbNodes;
-}
-
-TInt
-TGrilleInfo
-::GetNbCells()
-{
-  TInt nbCells=0;
-  TInt aDim = myMeshInfo->GetDim();
-  for(int i=0;i<aDim;i++)
-    if(nbCells == 0)
-      nbCells = this->GetGrilleStructure()[i]-1;
-    else
-      nbCells = nbCells*(this->GetGrilleStructure()[i]-1);
-  return nbCells;
-}
-
-TInt
-TGrilleInfo
-::GetNbSubCells()
-{
-  TInt nb=0;
-  TInt aDim = myMeshInfo->GetDim();
-  switch (aDim) {
-  case 3:
-    nb =
-      (myGrilleStructure[0]  ) * (myGrilleStructure[1]-1) * (myGrilleStructure[2]-1) +
-      (myGrilleStructure[0]-1) * (myGrilleStructure[1]  ) * (myGrilleStructure[2]-1) +
-      (myGrilleStructure[0]-1) * (myGrilleStructure[1]-1) * (myGrilleStructure[2]  );
-    break;
-  case 2:
-    nb =
-      (myGrilleStructure[0]  ) * (myGrilleStructure[1]-1) +
-      (myGrilleStructure[0]-1) * (myGrilleStructure[1]  );
-    break;
-  }
-  return nb;
-}
-
-EGeometrieElement
-TGrilleInfo
-::GetGeom()
-{
-  TInt aDim = myMeshInfo->GetDim();
-  switch(aDim){
-  case 1:
-    return eSEG2;
-  case 2:
-    return eQUAD4;
-  case 3:
-    return eHEXA8;
-  default:
-    return eNONE;
-  }
-}
-
-EGeometrieElement
-TGrilleInfo
-::GetSubGeom()
-{
-  TInt aDim = myMeshInfo->GetDim();
-  switch(aDim){
-  case 2:
-    return eSEG2;
-  case 3:
-    return eQUAD4;
-  }
-  return eNONE;
-}
-
-EEntiteMaillage
-TGrilleInfo
-::GetEntity()
-{
-  return eMAILLE;
-}
-
-EEntiteMaillage
-TGrilleInfo
-::GetSubEntity()
-{
-  TInt aDim = myMeshInfo->GetDim();
-  switch(aDim){
-  case 2:
-    return eARETE;
-  case 3:
-    return eFACE;
-  }
-  return EEntiteMaillage(-1);
-}
-
-const
-TIntVector&
-TGrilleInfo
-::GetGrilleStructure() const
-{
-  return myGrilleStructure;
-}
-
-TIntVector
-TGrilleInfo
-::GetGrilleStructure()
-{
-  return myGrilleStructure;
-}
-
-void
-TGrilleInfo
-::SetGrilleStructure(TInt theAxis,TInt theNb)
-{
-  if(theAxis >= 0 && theAxis <=2 && theNb >= 0)
-  myGrilleStructure[theAxis]=theNb;
-}
-
-const
-TNodeCoord&
-TGrilleInfo
-::GetNodeCoord() const
-{
-  return myCoord;
-}
-
-TNodeCoord&
-TGrilleInfo
-::GetNodeCoord()
-{
-  return myCoord;
-}
-
-TNodeCoord
-TGrilleInfo
-::GetCoord(TInt theId)
-{
-  TNodeCoord aCoord;
-  TInt aDim       = myMeshInfo->GetDim();
-  TInt aNbNodes   = this->GetNbNodes();
-  aCoord.resize(aDim);
-  
-  if(theId >= aNbNodes)
-    EXCEPTION(std::runtime_error, "TGrilleInfo::GetCoord - theId out of range");
-
-  if(myGrilleType == eGRILLE_STANDARD){
-    switch(aDim){
-    case 3:
-      aCoord[2] = myCoord[aDim*theId+2];
-    case 2:
-      aCoord[1] = myCoord[aDim*theId+1];
-    case 1:{
-      aCoord[0] = myCoord[aDim*theId];
-      break;
-    }
-    }
-  } else {
-
-    TFloatVector aVecX  = this->GetIndexes(0);
-    TInt nbIndxX        = this->GetNbIndexes(0);
-    
-    switch(aDim){
-    case 1:{
-      aCoord[0] = aVecX[theId];
-      break;
-    }
-    case 2:{
-      TFloatVector aVecY = this->GetIndexes(1);
-      TInt i,j,k;
-      i = j = k = 0;
-      i = theId % nbIndxX;
-      j = theId / nbIndxX;
-      if(myGrilleType == eGRILLE_CARTESIENNE){
-        aCoord[0] = aVecX[i];
-        aCoord[1] = aVecY[j];
-      } else { // eGRILLE_POLAIRE (cylindrical)
-        aCoord[0] = aVecX[i] * cos(aVecY[j]);
-        aCoord[1] = aVecX[i] * sin(aVecY[j]);
-      }
-      break;
-    }
-    case 3:{
-      TFloatVector aVecY = this->GetIndexes(1);
-      TInt nbIndxY       = this->GetNbIndexes(1);
-      TFloatVector aVecZ = this->GetIndexes(2);
-      TInt i,j,k;
-      i = j = k = 0;
-      
-      i = theId % nbIndxX;
-      j = (theId / nbIndxX) % nbIndxY;
-      k = theId / (nbIndxX*nbIndxY);
-
-      if(myGrilleType == eGRILLE_CARTESIENNE){
-        aCoord[0] = aVecX[i];
-        aCoord[1] = aVecY[j];
-        aCoord[2] = aVecZ[k];
-      } else { // eGRILLE_POLAIRE (cylindrical)
-        aCoord[0] = aVecX[i] * cos(aVecY[j]);
-        aCoord[1] = aVecX[i] * sin(aVecY[j]);
-        aCoord[2] = aVecZ[k];
-      }
-      
-      break;
-    }
-    }
-  }
-
-  return aCoord;
-}
-
-TIntVector
-TGrilleInfo
-::GetConn(TInt theId, const bool isSub)
-{
-  TIntVector anIndexes;
-  TInt aDim = myMeshInfo->GetDim();
-
-  TInt idx;
-  TInt iMin, jMin, kMin, iMax, jMax, kMax;
-  TInt loc[3];
-
-  loc[0] = loc[1] = loc[2] = 0;
-  iMin = iMax = jMin = jMax = kMin = kMax = 0;
-
-  switch(aDim) {
-  case 3:
-    {
-      TInt nbX = this->GetGrilleStructure()[0];
-      TInt nbY = this->GetGrilleStructure()[1];
-      TInt nbZ = this->GetGrilleStructure()[2];
-      TInt d01 = nbX*nbY, dX = 1, dY = 1, dZ = 1;
-      if ( isSub )
-      {
-        if ( theId < nbX * (nbY-1) * (nbZ-1))
-        { // face is normal to X axis
-          dX = 0;
-        }
-        else if ( theId < nbX * (nbY-1) * (nbZ-1) + (nbX-1) * nbY * (nbZ-1))
-        {  // face is normal to Y axis
-          theId -= nbX * (nbY-1) * (nbZ-1);
-          dY = 0;
-        }
-        else
-        {
-          theId -= nbX * (nbY-1) * (nbZ-1) + (nbX-1) * nbY * (nbZ-1);
-          dZ = 0;
-        }
-      }
-      //else
-      {
-        iMin = theId % (nbX - dX);
-        jMin = (theId / (nbX - dX)) % (nbY - dY);
-        kMin = theId / ((nbX - dX) * (nbY - dY));
-        iMax = iMin+dX;
-        jMax = jMin+dY;
-        kMax = kMin+dZ;
-      }
-      for (loc[2]=kMin; loc[2]<=kMax; loc[2]++)
-        for (loc[1]=jMin; loc[1]<=jMax; loc[1]++)
-          for (loc[0]=iMin; loc[0]<=iMax; loc[0]++)
-          {
-            idx = loc[0] + loc[1]*nbX + loc[2]*d01;
-            anIndexes.push_back(idx);
-          }
-      break;
-    }
-  case 2:
-    {
-      TInt nbX = this->GetGrilleStructure()[0];
-      TInt nbY = this->GetGrilleStructure()[1];
-      TInt dX = 1, dY = 1;
-      if ( isSub )
-      {
-        if ( theId < nbX * (nbY-1))
-        { // edge is normal to X axis
-          dX = 0;
-        }
-        else
-        {
-          theId -= nbX * (nbY-1);
-          dY = 0;
-        }
-      }
-      iMin = theId % (nbX-dX);
-      jMin = theId / (nbX-dX);
-      iMax = iMin+dX;
-      jMax = jMin+dY;
-      for (loc[1]=jMin; loc[1]<=jMax; loc[1]++)
-        for (loc[0]=iMin; loc[0]<=iMax; loc[0]++)
-        {
-          idx = loc[0] + loc[1]*nbX;
-          anIndexes.push_back(idx);
-        }
-      break;
-    }
-  case 1:
-    {
-      iMin = theId;
-      for (loc[0]=iMin; loc[0]<=iMin+1; loc[0]++)
-      {
-        idx = loc[0];
-        anIndexes.push_back(idx);
-      }
-      break;
-    }
-  }
-
-  return anIndexes;
-}
-
-TInt
-TGrilleInfo
-::GetFamNumNode(TInt theId) const 
-{
-  return myFamNumNode[theId];
-}
-
-void
-TGrilleInfo
-::SetFamNumNode(TInt theId,TInt theVal) 
-{
-  myFamNumNode[theId] = theVal;
-}
-
-TInt
-TGrilleInfo
-::GetFamNum(TInt theId) const 
-{
-  return myFamNum[theId];
-}
-
-void
-TGrilleInfo
-::SetFamNum(TInt theId,TInt theVal) 
-{
-  myFamNum[theId] = theVal;
-}
-
-TInt
-TGrilleInfo
-::GetFamSubNum(TInt theId) const 
-{
-  return myFamSubNum[theId];
-}
-
-void
-TGrilleInfo
-::SetFamSubNum(TInt theId,TInt theVal) 
-{
-  myFamSubNum[theId] = theVal;
-}
diff --git a/src/MEDWrapper/Base/MED_Structures.hxx b/src/MEDWrapper/Base/MED_Structures.hxx
deleted file mode 100644 (file)
index 534e35b..0000000
+++ /dev/null
@@ -1,1081 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef MED_Structures_HeaderFile
-#define MED_Structures_HeaderFile
-
-#include "MED_Common.hxx"
-#include "MED_Utilities.hxx"
-
-#ifdef WIN32
-#pragma warning(disable:4251)
-#endif
-
-namespace MED
-{
-
-  //---------------------------------------------------------------
-  //! Defines a type for managing sequence of strings
-  typedef TVector<char> TString; 
-  typedef SharedPtr<TString> PString;
-
-  //! Extract a substring from the sequence of the strings
-  MEDWRAPPER_EXPORT
-  std::string 
-  GetString(TInt theId, TInt theStep, 
-            const TString& theString);
-  
-  //! Set a substring in the sequence of the strings
-  MEDWRAPPER_EXPORT 
-  void
-  SetString(TInt theId, TInt theStep, 
-                 TString& theString, 
-                 const std::string& theValue);
-
-  //! Set a substring in the sequence of the strings
-  MEDWRAPPER_EXPORT
-  void
-  SetString(TInt theId, TInt theStep, 
-                 TString& theString, 
-                 const TString& theValue);
-
-  //---------------------------------------------------------------
-  //! Define a parent class for all MEDWrapper classes
-  struct MEDWRAPPER_EXPORT TBase
-  {
-    virtual ~TBase() {} 
-  };
-
-
-  //---------------------------------------------------------------
-  //! Define a parent class for all named MED entities
-  struct MEDWRAPPER_EXPORT TNameInfo: virtual TBase
-  {
-    TString myName; //!< Keeps its name
-    virtual std::string GetName() const = 0; //!< Gets its name
-    virtual void SetName(const std::string& theValue) = 0; //!< Set a new name
-    virtual void SetName(const TString& theValue) = 0; //!< Set a new name
-  };
-
-
-  //---------------------------------------------------------------
-  //! Define a parent class for all MED entities that contains a sequence of numbers
-  /*!
-    It defines through corresponding enumeration (EModeSwitch) how the sequence 
-    should be interpreted in C or Fortran mode (eFULL_INTERLACE or eNON_INTERLACE).
-  */
-  struct MEDWRAPPER_EXPORT TModeSwitchInfo: virtual TBase
-  {
-    //! To construct instance of the class by default
-    TModeSwitchInfo():
-      myModeSwitch(eFULL_INTERLACE)
-    {}
-
-    //! To construct instance of the class
-    TModeSwitchInfo(EModeSwitch theModeSwitch):
-      myModeSwitch(theModeSwitch)
-    {}
-
-    EModeSwitch myModeSwitch; //!< Keeps the 
-    EModeSwitch GetModeSwitch() const { return myModeSwitch;}
-  };
-
-
-  //---------------------------------------------------------------
-  //! Define a base class which represents MED Mesh entity
-  struct MEDWRAPPER_EXPORT TMeshInfo: virtual TNameInfo
-  {
-    TInt myDim; //!< Dimension of the mesh (0, 1, 2 or 3)
-    TInt GetDim() const { return myDim;} //!< Gets dimension of the mesh
-
-    TInt mySpaceDim;
-    TInt GetSpaceDim() const { return mySpaceDim; }
-
-    EMaillage myType; //!< Type of the mesh
-    EMaillage GetType() const { return myType;} //!< Gets type of the mesh
-
-    TString myDesc; //!< Description of the mesh
-    virtual std::string GetDesc() const = 0; //!< Get description for the mesh
-    virtual void SetDesc(const std::string& theValue) = 0; //!< Sets description for the mesh
-
-    
-  };
-  
-
-  //---------------------------------------------------------------
-  typedef TVector<TInt> TIntVector;
-  typedef TSlice<TInt> TIntVecSlice;
-  typedef TCSlice<TInt> TCIntVecSlice;
-
-  typedef TIntVector TFamAttr;
-
-  //! Define a base class which represents MED Family entity
-  struct MEDWRAPPER_EXPORT TFamilyInfo: virtual TNameInfo
-  {
-    PMeshInfo myMeshInfo; //!< A reference to correspondig MED Mesh
-    //! Get a reference to corresponding MED Mesh
-    const PMeshInfo& GetMeshInfo() const { return myMeshInfo;} 
-
-    TInt myId; //!< An unique index of the MED FAMILY
-    TInt GetId() const { return myId;} //!< Gets number of the MED FAMILY
-    void SetId(TInt theId) { myId = theId;} //! Define number of the MED FAMILY
-
-    TInt myNbGroup; //!< Defines number MED Groups connected to
-    //! Gets number of MED GROUPS the MED FAMILY is bound to
-    TInt GetNbGroup() const { return myNbGroup;} 
-
-    //! Contains sequence of the names for the MED Groups connected to
-    TString myGroupNames; 
-    //! Gets name of a bound MED GROUP by its number
-    virtual std::string GetGroupName(TInt theId) const = 0;
-    //! Sets name of the defined MED GROUP by its number
-    virtual void SetGroupName(TInt theId, const std::string& theValue) = 0;
-
-    TInt myNbAttr; //!< Defines number of the MED Family attributes 
-    //! Gets number of attached attributes for the MED FAMILY
-    TInt GetNbAttr() const { return myNbAttr;} 
-
-    //! Defines sequence of the indexes of the MED Family attributes
-    TFamAttr myAttrId; 
-    //! Get MED FAMILY attribute by its number
-    TInt GetAttrId(TInt theId) const;
-    //! Set MED FAMILY attribute by its number
-    void SetAttrId(TInt theId, TInt theVal);
-
-    //! Defines sequence of the values of the MED Family attributes
-    TFamAttr myAttrVal;
-    //! Get MED FAMILY attribute by its number
-    TInt GetAttrVal(TInt theId) const;
-    //! Set MED FAMILY attribute by its number
-    void SetAttrVal(TInt theId, TInt theVal);
-
-    //! Defines sequence of the names of the MED Family attributes
-    TString myAttrDesc;
-    //! Get value of the MED FAMILY attribute by its number
-    virtual std::string GetAttrDesc(TInt theId) const = 0;
-    //! Set value of the MED FAMILY attribute by its number
-    virtual void SetAttrDesc(TInt theId, const std::string& theValue) = 0;
-  };
-
-
-  //---------------------------------------------------------------
-  typedef TIntVector TElemNum;
-  typedef SharedPtr<TElemNum> PElemNum;
-  
-  //! Define a parent class for all MED entities that describes mesh entities such as nodes and cells.
-  struct MEDWRAPPER_EXPORT TElemInfo: virtual TBase
-  {
-    PMeshInfo myMeshInfo; //!< A reference to correspondig MED Mesh
-    //! Get a reference to corresponding MED Mesh
-    const PMeshInfo& GetMeshInfo() const { return myMeshInfo;}
-
-    TInt myNbElem; //<! Number of corresponding mesh entities
-    TInt GetNbElem() const { return myNbElem;} //! Get number of mesh elements
-    
-    //! Defines sequence MED Family indexes for corresponding mesh entities
-    PElemNum myFamNum; 
-    //! Get number of a MED FAMILY by order number of the mesh element
-    TInt GetFamNum(TInt theId) const;
-    //! Set number of a MED FAMILY for the mesh element with the  order number
-    void SetFamNum(TInt theId, TInt theVal);
-
-    //! Defines if the mesh elements are indexed
-    EBooleen myIsElemNum;
-    //! Let know if the mesh elements are indexed
-    EBooleen IsElemNum() const { return myIsElemNum;}
-    
-    //! Defines if the mesh elements family are indexed
-    EBooleen myIsFamNum;
-    //! Let know if the mesh elements family are indexed
-    EBooleen IsFamNum() const { return myIsFamNum;}
-    
-
-    //! Contains sequence of the indexes for the mesh elements
-    PElemNum myElemNum;
-    //! Get a reference number of the mesh element by its order number
-    TInt GetElemNum(TInt theId) const;
-    //! Set a reference number for the mesh element by its order number
-    void SetElemNum(TInt theId, TInt theVal);
-
-    //! Defines if the mesh elements are named
-    EBooleen myIsElemNames;
-    //! Let know if the mesh elements have names
-    EBooleen IsElemNames() const { return myIsElemNames;}
-
-    //! Contains sequence of the names for the mesh elements
-    PString myElemNames;
-    //! Get name of the mesh element by its order number
-    virtual std::string GetElemName(TInt theId) const = 0;
-    //! Set name of the mesh element by its order number
-    virtual void SetElemName(TInt theId, const std::string& theValue) = 0;
-  };
-
-
-  //---------------------------------------------------------------
-  typedef TVector<TFloat> TFloatVector;
-  typedef TSlice<TFloat> TFloatVecSlice;
-  typedef TCSlice<TFloat> TCFloatVecSlice;
-
-  typedef TFloatVector TNodeCoord;
-  typedef SharedPtr<TNodeCoord> PNodeCoord;
-
-  typedef TFloatVecSlice TCoordSlice;
-  typedef TCFloatVecSlice TCCoordSlice;
-
-  //! Define a base class which represents MED Nodes entity
-  struct MEDWRAPPER_EXPORT TNodeInfo: 
-    virtual TElemInfo,
-    virtual TModeSwitchInfo 
-  {
-    PNodeCoord myCoord; //!< Contains all nodal coordinates
-
-    //! Gives coordinates for mesh node by its number (const version)
-    TCCoordSlice GetCoordSlice(TInt theId) const;
-    //! Gives coordinates for mesh node by its number
-    TCoordSlice GetCoordSlice(TInt theId);
-
-    ERepere mySystem; //!< Defines, which coordinate system is used
-    //! Get which coordinate system is used for the node describing
-    ERepere GetSystem() const { return mySystem;}
-    //! Set coordinate system to be used for the node describing
-    void SetSystem(ERepere theSystem) { mySystem = theSystem;}
-
-    TString myCoordNames; //!< Contains names for the coordinate dimensions
-    //! Get name of the coordinate dimension by its order number
-    virtual std::string GetCoordName(TInt theId) const = 0;
-    //! Set name of the coordinate dimension by its order number
-    virtual void SetCoordName(TInt theId, const std::string& theValue) = 0;
-
-    TString myCoordUnits; //!< Contains units for the coordinate dimensions
-    //! Get name of unit for the coordinate dimension by its order number
-    virtual std::string GetCoordUnit(TInt theId) const = 0;
-    //! Set name of unit for the coordinate dimension by its order number
-    virtual void SetCoordUnit(TInt theId, const std::string& theValue) = 0;
-  };
-
-
-  //---------------------------------------------------------------
-  typedef TIntVecSlice TConnSlice;
-  typedef TCIntVecSlice TCConnSlice;
-
-  //! Define a base class which represents MED Cells entity
-  struct MEDWRAPPER_EXPORT TCellInfo: 
-    virtual TElemInfo,
-    virtual TModeSwitchInfo 
-  {
-    EEntiteMaillage myEntity; //!< Defines the MED Entity where the mesh cells belongs to
-    //! Find out what MED ENTITY the cells belong to
-    EEntiteMaillage GetEntity() const { return myEntity;}
-
-    EGeometrieElement myGeom; //!< Defines the MED Geometric type of the instance
-    //! Find out what MED geometrical type the cells belong to
-    EGeometrieElement GetGeom() const { return myGeom;}
-
-    EConnectivite myConnMode; //!< Defines connectivity mode
-    //! Find out in what connectivity the cells are written
-    EConnectivite GetConnMode() const { return myConnMode;}
-
-    virtual TInt GetConnDim() const = 0; //!< Gives step in the connectivity sequence
-
-    PElemNum myConn; //!< Defines sequence which describe connectivity for each of mesh cell
-
-    //! Gives connectivities for mesh cell by its number (const version)
-    TCConnSlice GetConnSlice(TInt theElemId) const;
-    //! Gives connectivities for mesh cell by its number
-    TConnSlice GetConnSlice(TInt theElemId);
-  };
-
-  //---------------------------------------------------------------
-  //! Define a base class which represents MED Polygon entity
-  struct MEDWRAPPER_EXPORT TPolygoneInfo: 
-    virtual TElemInfo
-  {
-    //! Defines the MED Entity where the polygons belongs to
-    EEntiteMaillage myEntity; // MED_FACE|MED_MAILLE
-    //! Find out what MED ENTITY the MED Polygons belong to
-    EEntiteMaillage GetEntity() const { return myEntity;}
-
-    //! Defines the MED Geometric type of the instance
-    EGeometrieElement myGeom; // ePOLYGONE
-    //! Find out what MED geometrical type the MED Polygons belong to
-    EGeometrieElement GetGeom() const { return ePOLYGONE;}
-
-    //! Defines connectivity mode
-    EConnectivite myConnMode; // eNOD|eDESC(eDESC not used)
-    //! Find out in what connectivity the cells are written
-    EConnectivite GetConnMode() const { return myConnMode;}
-
-    PElemNum myConn; //!< Table de connectivities
-    PElemNum myIndex; //!< Table de indexes
-
-    //! Gives number of the connectivities for the defined polygon
-    TInt GetNbConn(TInt theElemId) const;
-
-    //! Gives connectivities for polygon by its number (const version)
-    TCConnSlice GetConnSlice(TInt theElemId) const;
-    //! Gives connectivities for polygon by its number
-    TConnSlice GetConnSlice(TInt theElemId);
-  };
-
-  //---------------------------------------------------------------
-  //! Define a class representing MED_BALL structure element.
-  //
-  //  This could be a generic class for any structure element
-  //  holding any number of contant and variable attributes
-  //  but it's too hard to implement
-  //
-  struct MEDWRAPPER_EXPORT TBallInfo: 
-    virtual TCellInfo
-  {
-    TFloatVector myDiameters;
-  };
-
-  //---------------------------------------------------------------
-  typedef TVector<TCConnSlice> TCConnSliceArr;
-  typedef TVector<TConnSlice> TConnSliceArr;
-
-  //! Define a base class which represents MED Polyedre entity
-  struct MEDWRAPPER_EXPORT TPolyedreInfo: 
-    virtual TElemInfo
-  {
-    //! Defines the MED Entity where the polyedres belongs to
-    EEntiteMaillage myEntity; // MED_FACE|MED_MAILLE
-    //! Find out what MED ENTITY the MED Polyedres belong to
-    EEntiteMaillage GetEntity() const { return myEntity;}
-
-    //! Defines the MED Geometric type of the instance
-    EGeometrieElement myGeom; // ePOLYEDRE
-    //! Find out what MED geometrical type the MED Polyedres belong to
-    EGeometrieElement GetGeom() const { return ePOLYEDRE;}
-
-    //! Defines connectivity mode
-    EConnectivite myConnMode; // eNOD|eDESC(eDESC not used)
-    //! Find out in what connectivity the cells are written
-    EConnectivite GetConnMode() const { return myConnMode;}
-
-    PElemNum myConn; //!< Table de connectivities
-    PElemNum myFaces; //!< Table de faces indexes
-    PElemNum myIndex; //!< Table de indexes
-
-    //! Gives number of the faces for the defined polyedre (const version)
-    TInt GetNbFaces(TInt theElemId) const;
-    //! Gives number of the nodes for the defined polyedre
-    TInt GetNbNodes(TInt theElemId) const;
-
-    //! Gives sequence of the face connectivities for polyedre by its number (const version)
-    TCConnSliceArr GetConnSliceArr(TInt theElemId) const;
-    //! Gives sequence of the face connectivities for polyedre by its number
-    TConnSliceArr GetConnSliceArr(TInt theElemId);
-  };
-
-  //---------------------------------------------------------------
-  //! Define a base class which represents MED Field entity
-  struct MEDWRAPPER_EXPORT TFieldInfo: 
-    virtual TNameInfo
-  {
-    PMeshInfo myMeshInfo; //!< A reference to corresponding MED Mesh
-    //! Get a reference to corresponding MED Mesh
-    const PMeshInfo& GetMeshInfo() const { return myMeshInfo;}
-
-    ETypeChamp myType; //!< Defines type of MED Field
-    //! Find out what type of MED FIELD is used
-    ETypeChamp GetType() const { return myType;}
-
-    TInt myNbComp; //!< Defines number of components stored in the field
-    //! Get number of components for MED FIELD
-    TInt GetNbComp() const { return myNbComp;}
-
-    EBooleen myIsLocal; //!< Defines if the MED Field is local
-    //! Find out if MED FIELD is local or not
-    EBooleen GetIsLocal() const { return myIsLocal;}
-
-    TInt myNbRef; //!< Defines number of references of the field
-    //! Find out number of references for the MED FIELD
-    TInt GetNbRef() const { return myNbRef;}
-
-    TString myCompNames; //!< Contains names for each of MED Field components
-    //! Get name of the component by its order number
-    virtual std::string GetCompName(TInt theId) const = 0;
-    //! Set name for the component by its order number
-    virtual void SetCompName(TInt theId, const std::string& theValue) = 0;
-
-    TString myUnitNames; //!< Contains units for each of MED Field components
-    //! Get unit of the component by its order number
-    virtual std::string GetUnitName(TInt theId) const = 0;
-    //! Set unit for the component by its order number
-    virtual void SetUnitName(TInt theId, const std::string& theValue) = 0;
-
-  };
-
-
-  //---------------------------------------------------------------
-  //! Get dimension of the Gauss coordinates for the defined type of mesh cell
-  MEDWRAPPER_EXPORT
-  TInt
-  GetDimGaussCoord(EGeometrieElement theGeom);
-
-  //! Get number of referenced nodes for the defined type of mesh cell
-  MEDWRAPPER_EXPORT
-  TInt
-  GetNbRefCoord(EGeometrieElement theGeom);
-
-  typedef TFloatVector TWeight;
-
-  //! The class represents MED Gauss entity
-  struct MEDWRAPPER_EXPORT TGaussInfo: 
-    virtual TNameInfo,
-    virtual TModeSwitchInfo 
-  {
-    typedef boost::tuple<EGeometrieElement,std::string> TKey;
-    typedef boost::tuple<TKey,TInt> TInfo;
-    struct MEDWRAPPER_EXPORT TLess
-    {
-      bool
-      operator()(const TKey& theLeft, const TKey& theRight) const;
-
-      bool
-      operator()(const TGaussInfo& theLeft, const TGaussInfo& theRight) const;
-    };
-
-    //! Defines, which geometrical type the MED Gauss entity belongs to
-    EGeometrieElement myGeom; 
-    //! Find out what MED geometrical type the MED GAUSS entity belong to
-    EGeometrieElement GetGeom() const { return myGeom;}
-
-    //! Contains coordinates for the refereced nodes
-    TNodeCoord myRefCoord; 
-
-    //! Gives coordinates for the referenced node by its number
-    TCCoordSlice GetRefCoordSlice(TInt theId) const;
-    //! Gives coordinates for the referenced node by its number
-    TCoordSlice GetRefCoordSlice(TInt theId);
-
-    //! Contains coordinates for the Gauss points
-    TNodeCoord myGaussCoord;
-
-    //! Gives coordinates for the Gauss points by its number
-    TCCoordSlice GetGaussCoordSlice(TInt theId) const;
-    //! Gives coordinates for the Gauss points by its number
-    TCoordSlice GetGaussCoordSlice(TInt theId);
-
-    //! Contains wheights for the Gauss points
-    TWeight myWeight;
-
-    //! Gives number of the referenced nodes
-    TInt GetNbRef() const { return GetNbRefCoord(GetGeom());}
-
-    //! Gives dimension of the referenced nodes
-    TInt GetDim() const { return GetDimGaussCoord(GetGeom());}
-
-    //! Gives number of the Gauss Points
-    TInt GetNbGauss() const { return (TInt)(myGaussCoord.size()/GetDim());}
-  };
-
-
-  //---------------------------------------------------------------
-  typedef std::map<EGeometrieElement,PGaussInfo> TGeom2Gauss;
-  typedef std::map<EGeometrieElement,TInt> TGeom2NbGauss;
-
-  //! Define a base class which represents MED TimeStamp
-  struct MEDWRAPPER_EXPORT TTimeStampInfo: 
-    virtual TBase
-  {
-    PFieldInfo myFieldInfo; //!< A reference to correspondig MED Field
-    //! Get a reference to corresponding MED Field
-    const PFieldInfo& GetFieldInfo() const { return myFieldInfo;}
-
-    //! Defines the MED Entity where the MED TimeStamp belongs to
-    EEntiteMaillage myEntity;
-    //! Find out to what MED Entity the MED TimeStamp belong to
-    EEntiteMaillage GetEntity() const { return myEntity;}
-
-    //! Keeps map of number of cells per geometric type where the MED TimeStamp belongs to
-    TGeom2Size myGeom2Size;
-    //! Get map of number of cells per geometric type where the MED TimeStamp belongs to
-    const TGeom2Size& GetGeom2Size() const { return myGeom2Size;}
-
-    TGeom2NbGauss myGeom2NbGauss; //!< Keeps number of the Gauss Points for the MED TimeStamp
-    TInt GetNbGauss(EGeometrieElement theGeom) const; //!< Gives number of the Gauss Points for the MED TimeStamp
-
-    TInt myNumDt; //!< Keeps number in time for the MED TimeStamp
-    TInt GetNumDt() const { return myNumDt;} //!< Defines number in time for the MED TimeStamp
-
-    TInt myNumOrd; //!< Keeps number for the MED TimeStamp
-    TInt GetNumOrd() const { return myNumOrd;} //!< Defines number for the MED TimeStamp
-
-    TFloat myDt; //!< Keeps time for the MED TimeStamp
-    TFloat GetDt() const { return myDt;} //!< Defines time for the MED TimeStamp
-
-    //! Keeps map of MED Gauss entityes per geometric type
-    TGeom2Gauss myGeom2Gauss;
-    //! Gets a map of MED Gauss entityes per geometric type
-    const TGeom2Gauss& GetGeom2Gauss() const { return myGeom2Gauss;}
-
-    TString myUnitDt; //!< Defines unit for the time for the MED TimeStamp
-    //! Get unit of time for the MED TimeStamp
-    virtual std::string GetUnitDt() const = 0;
-    //! Set unit of time for the MED TimeStamp
-    virtual void SetUnitDt(const std::string& theValue) = 0;
-  };
-  
-
-  //---------------------------------------------------------------
-  //! The class represents MED Profile entity
-  struct MEDWRAPPER_EXPORT TProfileInfo: 
-    virtual TNameInfo
-  {
-    typedef std::string TKey;
-    typedef boost::tuple<TKey,TInt> TInfo;
-
-    EModeProfil myMode; //!< Keeps mode for the MED Profile
-    //! Find out what mode of MED Profile is used
-    EModeProfil GetMode() const { return myMode;}
-    //! Set mode for the MED Profile
-    void SetMode(EModeProfil theMode) { myMode = theMode;}
-
-    PElemNum myElemNum; //!< Keeps sequence of cell by its number which belong to the profile
-    //! Get number of mesh elelemts by its order number
-    TInt GetElemNum(TInt theId) const;
-    //! Set number of mesh elelemts by its order number
-    void SetElemNum(TInt theId, TInt theVal);
-
-    //! Find out if the MED Profile defined
-    bool IsPresent() const { return GetName() != "";}
-
-    //! Find out size of the MED Profile
-    TInt GetSize() const { return (TInt)myElemNum->size();}
-  };
-
-
-  //---------------------------------------------------------------
-  //! The class is a helper one. It provide safe and flexible way to get access to values for a MED TimeStamp
-  struct MEDWRAPPER_EXPORT TMeshValueBase:
-    virtual TModeSwitchInfo 
-  {
-    TInt myNbElem;
-    TInt myNbComp;
-    TInt myNbGauss;
-    TInt myStep;
-
-    TMeshValueBase();
-
-    //! Initialize the class
-    void
-    Allocate(TInt theNbElem,
-             TInt theNbGauss,
-             TInt theNbComp,
-             EModeSwitch theMode = eFULL_INTERLACE);
-
-    //! Returns size of the value container
-    size_t
-    GetSize() const;
-    
-    //! Returns MED interpetation of the value size
-    size_t
-    GetNbVal() const;
-    
-    //! Returns number of Gauss Points bounded with the value
-    size_t
-    GetNbGauss() const;
-    
-    //! Returns step inside of the data array
-    size_t
-    GetStep() const;
-    
-    //! Returns bare pointer on the internal value representation
-    virtual
-    unsigned char*
-    GetValuePtr() = 0;
-  };
-
-  //---------------------------------------------------------------
-  //! The class is a helper one. It provide safe and flexible way to get access to values for a MED TimeStamp
-  template<class TValueType>
-  struct TTMeshValue:
-    virtual TMeshValueBase 
-  {
-    typedef TValueType TValue;
-    typedef typename TValueType::value_type TElement;
-
-    typedef TSlice<TElement> TValueSlice;
-    typedef TCSlice<TElement> TCValueSlice;
-    
-    typedef TVector<TCValueSlice> TCValueSliceArr;
-    typedef TVector<TValueSlice> TValueSliceArr;
-    
-    TValue myValue;
-
-    //! Initialize the class
-    void
-    Allocate(TInt theNbElem,
-             TInt theNbGauss,
-             TInt theNbComp,
-             EModeSwitch theMode = eFULL_INTERLACE)
-    {
-      TMeshValueBase::Allocate(theNbElem, theNbGauss, theNbComp, theMode);
-      myValue.resize(theNbElem * this->GetStep());
-    }
-
-    //! Returns bare pointer on the internal value representation
-    virtual
-    unsigned char*
-    GetValuePtr()
-    {
-      return (unsigned char*)&myValue[0];
-    }
-
-    //! Returns bare pointer on the internal value representation
-    virtual
-    TElement*
-    GetPointer()
-    {
-      return &myValue[0];
-    }
-
-    //! Returns bare pointer on the internal value representation
-    virtual
-    const TElement*
-    GetPointer() const
-    {
-      return &myValue[0];
-    }
-
-    //! Iteration through Gauss Points by their components
-    TCValueSliceArr
-    GetGaussValueSliceArr(TInt theElemId) const
-    {
-      TCValueSliceArr aValueSliceArr(myNbGauss);
-      if(GetModeSwitch() == eFULL_INTERLACE){
-        TInt anId = theElemId * myStep;
-        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
-          aValueSliceArr[aGaussId] =
-            TCValueSlice(myValue, std::slice(anId, myNbComp, 1));
-          anId += myNbComp;
-        }
-      }
-      else{
-        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
-          aValueSliceArr[aGaussId] =
-            TCValueSlice(myValue, std::slice(theElemId, myNbComp, myStep));
-        }
-      }
-      return aValueSliceArr;
-    }
-
-    //! Iteration through Gauss Points by their components
-    TValueSliceArr 
-    GetGaussValueSliceArr(TInt theElemId)
-    {
-      TValueSliceArr aValueSliceArr(myNbGauss);
-      if(GetModeSwitch() == eFULL_INTERLACE){
-        TInt anId = theElemId*myStep;
-        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
-          aValueSliceArr[aGaussId] =
-            TValueSlice(myValue, std::slice(anId, myNbComp, 1));
-          anId += myNbComp;
-        }
-      }
-      else{
-        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
-          aValueSliceArr[aGaussId] =
-            TValueSlice(myValue, std::slice(theElemId, myNbComp, myStep));
-        }
-      }
-      return aValueSliceArr;
-    }
-
-    //! Iteration through components by corresponding Gauss Points
-    TCValueSliceArr
-    GetCompValueSliceArr(TInt theElemId) const
-    {
-      TCValueSliceArr aValueSliceArr(myNbComp);
-      if(GetModeSwitch() == eFULL_INTERLACE){
-        TInt anId = theElemId*myStep;
-        for(TInt aCompId = 0; aCompId < myNbComp; aCompId++){
-          aValueSliceArr[aCompId] =
-            TCValueSlice(myValue, std::slice(anId, myNbGauss, myNbComp));
-          anId += 1;
-        }
-      }
-      else{
-        for(TInt aCompId = 0; aCompId < myNbComp; aCompId++){
-          aValueSliceArr[aCompId] =
-            TCValueSlice(myValue, std::slice(theElemId, myNbGauss, myStep));
-        }
-      }
-      return aValueSliceArr;
-    }
-
-    //! Iteration through components by corresponding Gauss Points
-    TValueSliceArr 
-    GetCompValueSliceArr(TInt theElemId)
-    {
-      if(GetModeSwitch() == eFULL_INTERLACE){
-        TValueSliceArr aValueSliceArr(myNbComp);
-        TInt anId = theElemId*myStep;
-        for(TInt aCompId = 0; aCompId < myNbComp; aCompId++){
-          aValueSliceArr[aCompId] =
-            TValueSlice(myValue, std::slice(anId, myNbGauss, myNbComp));
-          anId += 1;
-        }
-        return aValueSliceArr;
-      }
-      else{
-        TValueSliceArr aValueSliceArr(myNbGauss);
-        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
-          aValueSliceArr[aGaussId] =
-            TValueSlice(myValue,std::slice(theElemId, myNbComp, myStep));
-        }
-        return aValueSliceArr;
-      }
-    }
-  };
-
-  typedef TTMeshValue<TFloatVector> TFloatMeshValue;
-  typedef TTMeshValue<TIntVector> TIntMeshValue;
-
-  //---------------------------------------------------------------
-  // Backward compatibility  declarations
-  typedef TFloatVector TValue;
-  typedef TSlice<TFloat> TValueSlice;
-  typedef TCSlice<TFloat> TCValueSlice;
-  
-  typedef TVector<TCValueSlice> TCValueSliceArr;
-  typedef TVector<TValueSlice> TValueSliceArr;
-    
-  typedef TFloatMeshValue TMeshValue;
-  typedef std::map<EGeometrieElement,TMeshValue> TGeom2Value;
-
-  //---------------------------------------------------------------
-  typedef std::map<EGeometrieElement,PProfileInfo> TGeom2Profile;
-  typedef std::set<EGeometrieElement> TGeom;
-
-  //! The class is a base class for MED TimeStamp values holder
-  struct MEDWRAPPER_EXPORT TTimeStampValueBase: 
-    virtual TModeSwitchInfo 
-  {
-    //! A reference to correspondig MED TimeStamp
-    PTimeStampInfo myTimeStampInfo;
-    //!< Get a reference to correspondig MED TimeStamp
-    const PTimeStampInfo& GetTimeStampInfo() const { return myTimeStampInfo;}
-
-    //! Keeps set of MED EGeometrieElement which contains values for the timestamp
-    TGeomSet myGeomSet;
-    const TGeomSet& GetGeomSet() const { return myGeomSet;}
-
-    //! Keeps map of MED Profiles per geometric type
-    TGeom2Profile myGeom2Profile;
-    //! Gets a map of MED Profiles per geometric type
-    const TGeom2Profile& GetGeom2Profile() const { return myGeom2Profile;}
-
-    //! Gets type of the champ
-    virtual 
-    ETypeChamp
-    GetTypeChamp() const = 0;
-
-    //! Allocates values for the given geometry
-    virtual 
-    void
-    AllocateValue(EGeometrieElement theGeom,
-                  TInt theNbElem,
-                  TInt theNbGauss,
-                  TInt theNbComp,
-                  EModeSwitch theMode = eFULL_INTERLACE) = 0;
-    
-    virtual 
-    size_t
-    GetValueSize(EGeometrieElement theGeom) const = 0;
-    
-    virtual 
-    size_t
-    GetNbVal(EGeometrieElement theGeom) const = 0;
-    
-    virtual 
-    size_t
-    GetNbGauss(EGeometrieElement theGeom) const = 0;
-
-    virtual 
-    unsigned char*
-    GetValuePtr(EGeometrieElement theGeom) = 0;
-  };
-
-
-  //---------------------------------------------------------------
-  //! The class implements a container for MED TimeStamp values
-  template<class TMeshValueType>
-  struct TTimeStampValue: 
-    virtual TTimeStampValueBase 
-  {
-    typedef TMeshValueType TTMeshValue;
-    typedef SharedPtr<TMeshValueType> PTMeshValue;
-    typedef typename TMeshValueType::TElement TElement;
-    typedef std::map<EGeometrieElement, PTMeshValue> TTGeom2Value;
-
-    ETypeChamp myTypeChamp; //<! Keeps type of the champ
-
-    //! Gets type of the champ
-    virtual 
-    ETypeChamp
-    GetTypeChamp() const
-    {
-      return myTypeChamp;
-    }
-
-    //! Keeps map of MED TimeStamp values per geometric type (const version)
-    TTGeom2Value myGeom2Value;
-
-    const TTGeom2Value& 
-    GetGeom2Value() const
-    {
-      return myGeom2Value;
-    }
-
-    //! Gets MED TimeStamp values for the given geometric type (const version)
-    const PTMeshValue& 
-    GetMeshValuePtr(EGeometrieElement theGeom) const
-    {
-      typename TTGeom2Value::const_iterator anIter = myGeom2Value.find(theGeom);
-      if(anIter == myGeom2Value.end())
-        EXCEPTION(std::runtime_error,"TTimeStampValue::GetMeshValuePtr - myGeom2Value.find(theGeom) fails");
-      return anIter->second;
-    }
-
-    //! Gets MED TimeStamp values for the given geometric type
-    PTMeshValue& 
-    GetMeshValuePtr(EGeometrieElement theGeom)
-    {
-      myGeomSet.insert(theGeom);
-      if(myGeom2Value.find(theGeom) == myGeom2Value.end()){
-        myGeom2Value[theGeom] = PTMeshValue(new TTMeshValue());
-        return myGeom2Value[theGeom];
-      }
-      return myGeom2Value[theGeom];
-    }
-
-    //! Gets MED TimeStamp values for the given geometric type (const version)
-    const TTMeshValue& 
-    GetMeshValue(EGeometrieElement theGeom) const
-    {
-      return *(this->GetMeshValuePtr(theGeom));
-    }
-
-    //! Gets MED TimeStamp values for the given geometric type
-    TTMeshValue& 
-    GetMeshValue(EGeometrieElement theGeom)
-    {
-      return *(this->GetMeshValuePtr(theGeom));
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  typedef TTimeStampValue<TFloatMeshValue> TFloatTimeStampValue;
-  typedef SharedPtr<TFloatTimeStampValue> PFloatTimeStampValue;
-
-  PFloatTimeStampValue MEDWRAPPER_EXPORT
-  CastToFloatTimeStampValue(const PTimeStampValueBase& theTimeStampValue);
-
-  typedef TTimeStampValue<TIntMeshValue> TIntTimeStampValue;
-  typedef SharedPtr<TIntTimeStampValue> PIntTimeStampValue;
-  
-  PIntTimeStampValue MEDWRAPPER_EXPORT
-  CastToIntTimeStampValue(const PTimeStampValueBase& theTimeStampValue);
-
-
-  //---------------------------------------------------------------
-  template<class TMeshValueTypeFrom, class TMeshValueTypeTo>
-  void
-  CopyTimeStampValue(SharedPtr<TTimeStampValue<TMeshValueTypeFrom> > theTimeStampValueFrom,
-                     SharedPtr<TTimeStampValue<TMeshValueTypeTo> > theTimeStampValueTo)
-  {
-    typedef TTimeStampValue<TMeshValueTypeFrom> TimeStampValueTypeFrom;
-    typedef TTimeStampValue<TMeshValueTypeTo> TimeStampValueTypeTo;
-    typedef typename TMeshValueTypeTo::TElement TElementTo;
-
-    typename TimeStampValueTypeFrom::TTGeom2Value& aGeom2Value = theTimeStampValueFrom->myGeom2Value;
-    typename TimeStampValueTypeFrom::TTGeom2Value::const_iterator anIter = aGeom2Value.begin();
-    for(; anIter != aGeom2Value.end(); anIter++){
-      const EGeometrieElement& aGeom = anIter->first;
-      const typename TimeStampValueTypeFrom::TTMeshValue& aMeshValue = *anIter->second;
-      typename TimeStampValueTypeTo::TTMeshValue& aMeshValue2 = theTimeStampValueTo->GetMeshValue(aGeom);
-      aMeshValue2.Allocate(aMeshValue.myNbElem, 
-                           aMeshValue.myNbGauss, 
-                           aMeshValue.myNbComp,
-                           aMeshValue.myModeSwitch);
-      const typename TimeStampValueTypeFrom::TTMeshValue::TValue& aValue = aMeshValue.myValue;
-      typename TimeStampValueTypeTo::TTMeshValue::TValue& aValue2 = aMeshValue2.myValue;
-      TInt aSize = aValue.size();
-      for(TInt anId = 0; anId < aSize; anId++)
-        aValue2[anId] = TElementTo(aValue[anId]);
-    }
-  }
-
-  template<class TMeshValueType>
-  void
-  CopyTimeStampValue(SharedPtr<TTimeStampValue<TMeshValueType> > theTimeStampValueFrom,
-                     SharedPtr<TTimeStampValue<TMeshValueType> > theTimeStampValueTo)
-  {
-    typedef TTimeStampValue<TMeshValueType> TimeStampValueType;
-    typename TimeStampValueType::TTGeom2Value& aGeom2Value = theTimeStampValueFrom->myGeom2Value;
-    typename TimeStampValueType::TTGeom2Value::const_iterator anIter = aGeom2Value.begin();
-    for(; anIter != aGeom2Value.end(); anIter++){
-      const EGeometrieElement& aGeom = anIter->first;
-      const typename TimeStampValueType::TTMeshValue& aMeshValue = *anIter->second;
-      typename TimeStampValueType::TTMeshValue& aMeshValue2 = theTimeStampValueTo->GetMeshValue(aGeom);
-      aMeshValue2 = aMeshValue;
-    }
-  }
-
-  //---------------------------------------------------------------
-  inline
-  void
-  CopyTimeStampValueBase(const PTimeStampValueBase& theValueFrom, 
-                         const PTimeStampValueBase& theValueTo)
-  {
-    if(theValueFrom->GetTypeChamp() == theValueTo->GetTypeChamp()){
-      if(theValueFrom->GetTypeChamp() == eFLOAT64)
-        CopyTimeStampValue<TFloatMeshValue>(theValueFrom, theValueTo);
-      else if(theValueFrom->GetTypeChamp() == eINT)
-        CopyTimeStampValue<TIntMeshValue>(theValueFrom, theValueTo);
-    }else{
-      if(theValueFrom->GetTypeChamp() == eFLOAT64 && theValueTo->GetTypeChamp() == eINT)
-        CopyTimeStampValue<TFloatMeshValue, TIntMeshValue>(theValueFrom, theValueTo);
-      else if(theValueFrom->GetTypeChamp() == eINT && theValueTo->GetTypeChamp() == eFLOAT64)
-        CopyTimeStampValue<TIntMeshValue, TFloatMeshValue>(theValueFrom, theValueTo);
-    }
-  }
-
-
-  //---------------------------------------------------------------
-  // Backward compatibility  declarations
-  typedef TFloatTimeStampValue TTimeStampVal;
-  typedef PFloatTimeStampValue PTimeStampVal;
-
-  //---------------------------------------------------------------
-  typedef std::map<TInt,TFloatVector> TIndexes;
-  typedef std::map<TInt,TString> TNames;
-  
-  //! Define a base class which represents MED Grille (structured mesh)
-  struct MEDWRAPPER_EXPORT TGrilleInfo:
-    virtual TModeSwitchInfo
-  {
-
-    PMeshInfo myMeshInfo;
-    const PMeshInfo& GetMeshInfo() const { return myMeshInfo;} 
-
-    TNodeCoord myCoord; //!< Contains all nodal coordinates, now used only for eGRILLE_STANDARD
-    //! Gives coordinates for mesh nodes (const version)
-    const TNodeCoord& GetNodeCoord() const;
-    TNodeCoord& GetNodeCoord();
-    //! Gives coordinates for mesh node by its number, array index from 0
-    TNodeCoord GetCoord(TInt theId);
-    //! Gives ids of nodes for mesh cell or sub-cell by its number, array index from 0
-    TIntVector GetConn(TInt theId, const bool isSub=false);
-
-    EGrilleType myGrilleType; //!< Defines grille type (eGRILLE_CARTESIENNE,eGRILLE_POLAIRE,eGRILLE_STANDARD)
-    //!Gets grille type (const version)
-    const EGrilleType& GetGrilleType() const;
-    //!Gets grille type
-    EGrilleType GetGrilleType();
-    //!Sets grille type
-    void SetGrilleType(EGrilleType theGrilleType);
-
-
-    
-    TString myCoordNames; //!< Contains names for the coordinate dimensions
-    //! Get name of the coordinate dimension by its order number
-    virtual std::string GetCoordName(TInt theId) const = 0 ;
-    //! Set name of the coordinate dimension by its order number
-    virtual void SetCoordName(TInt theId, const std::string& theValue) = 0;
-
-    TString myCoordUnits; //!< Contains units for the coordinate dimensions
-    //! Get name of unit for the coordinate dimension by its order number
-    virtual std::string GetCoordUnit(TInt theId) const = 0;
-    //! Set name of unit for the coordinate dimension by its order number
-    virtual void SetCoordUnit(TInt theId, const std::string& theValue) = 0;
-
-
-    //! Map of index of axes and Table of indexes for certain axe, now used for eGRILLE_CARTESIENNE and eGRILLE_POLAIRE
-    TIndexes myIndixes;
-    //!Gets a map of Tables (const version)
-    const TIndexes& GetMapOfIndexes() const ;
-    //!Gets a map of Tables
-    TIndexes& GetMapOfIndexes();
-    //!Gets a Table of indexes for certain axe(const version)
-    const TFloatVector& GetIndexes(TInt theAxisNumber) const;
-    //!Gets a Table of indexes for certain axe
-    TFloatVector& GetIndexes(TInt theAxisNumber);
-    //!Gets a number of indices per axe
-    TInt GetNbIndexes(TInt theAxisNumber);
-    
-    TInt GetNbNodes();//! Return count of all points
-    TInt GetNbCells();//! Return count of all cells
-    TInt GetNbSubCells();//! Return count of all entities of <mesh dimension-1>
-    EGeometrieElement GetGeom();//! Return geometry of cells (calculated from mesh dimension)
-    EGeometrieElement GetSubGeom();//! Return geometry of subcells (calculated from mesh dimension)
-    EEntiteMaillage GetEntity();//! Return entity (eMAILLE)
-    EEntiteMaillage GetSubEntity();//! Return sub entity
-
-    /*!
-     *Vector of grille structure (Example: {3,4,5}, 3 nodes in X axe, 4 nodes in Y axe, ...)
-     */
-    TIntVector myGrilleStructure;
-    //!Gets grille structure(const version)
-    const TIntVector& GetGrilleStructure() const;
-    //!Gets grille structure
-    TIntVector GetGrilleStructure();
-    //!Sets the grille structure of theAxis axe to theNb.
-    void SetGrilleStructure(TInt theAxis,TInt theNb);
-    
-    /*!
-     *Defines sequence MED Family indexes for corresponding mesh entities
-     */
-    TElemNum myFamNum; 
-    //! Get number of a MED FAMILY by order number of the mesh element
-    TInt GetFamNum(TInt theId) const;
-    //! Set number of a MED FAMILY for the mesh element with the  order number
-    void SetFamNum(TInt theId, TInt theVal);
-    
-    /*!
-     *Defines sequence MED Family indexes for sub entities
-     */
-    TElemNum myFamSubNum; 
-    //! Get number of a MED FAMILY by order number of sub element
-    TInt GetFamSubNum(TInt theId) const;
-    //! Set number of a MED FAMILY for theId-th sub element
-    void SetFamSubNum(TInt theId, TInt theVal);
-    
-    /*!
-     *Defines sequence MED Family indexes for corresponding mesh nodes
-     */
-    TElemNum myFamNumNode;
-    //! Get number of a MED FAMILY by order number of the mesh node
-    TInt GetFamNumNode(TInt theId) const;
-    //! Set number of a MED FAMILY for the mesh node with the  order number
-    void SetFamNumNode(TInt theId, TInt theVal);
-
-  };
-
-
-}
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_TStructures.hxx b/src/MEDWrapper/Base/MED_TStructures.hxx
deleted file mode 100644 (file)
index 8d33db5..0000000
+++ /dev/null
@@ -1,1215 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_TStructures_HeaderFile
-#define MED_TStructures_HeaderFile
-
-#include "MED_Structures.hxx"
-
-#ifdef WIN32
-#pragma warning(disable:4250)
-#endif
-#include <utilities.h>
-namespace MED
-{
-  //---------------------------------------------------------------
-  //! To provide a common way to handle values of MEDWrapper types as native MED types
-  template<class TValue, class TRepresentation>
-  struct TValueHolder
-  {
-    TValue& myValue;
-    TRepresentation myRepresentation;
-
-    TValueHolder(TValue& theValue):
-      myValue(theValue),
-      myRepresentation(TRepresentation(theValue))
-    {}
-
-    ~TValueHolder()
-    {
-      myValue = TValue(myRepresentation);
-    }
-
-    TRepresentation*
-    operator& ()
-    {
-      return &myRepresentation;
-    }
-
-    operator TRepresentation () const
-    {
-      return myRepresentation;
-    }  
-
-    const TValue&
-    operator() () const
-    {
-      return myValue;
-    }  
-  };
-  
-  //! To customize TValueHolder common template definition for TVector
-  template<class TVal, class TRepresentation>
-  struct TValueHolder<TVector<TVal>, TRepresentation>
-  {
-    typedef TVector<TVal> TValue;
-    TValue& myValue;
-    TRepresentation* myRepresentation;
-
-    TValueHolder(TValue& theValue):
-      myValue(theValue)
-    {
-      if(theValue.empty())
-        myRepresentation = (TRepresentation*)NULL;
-      else
-        myRepresentation = (TRepresentation*)&theValue[0];
-    }
-
-    TRepresentation*
-    operator& ()
-    {
-      return myRepresentation;
-    }
-  };
-  
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTNameInfo: virtual TNameInfo
-  {
-    TTNameInfo(const std::string& theValue)
-    {
-      myName.resize(GetNOMLength<eVersion>()+1);
-      SetName(theValue);
-    }
-
-    virtual
-    std::string
-    GetName() const 
-    { 
-      return GetString(0, GetNOMLength<eVersion>(), myName);
-    }
-
-    virtual
-    void
-    SetName(const std::string& theValue)
-    {
-      SetString(0, GetNOMLength<eVersion>(), myName, theValue);
-    }
-
-    virtual
-    void
-    SetName(const TString& theValue)
-    {
-      SetString(0, GetNOMLength<eVersion>(), myName, theValue);
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTMeshInfo: 
-    virtual TMeshInfo, 
-    virtual TTNameInfo<eVersion>
-  {
-    typedef TTNameInfo<eVersion> TNameInfoBase;
-
-    TTMeshInfo(const PMeshInfo& theInfo):
-      TNameInfoBase(theInfo->GetName())
-    {
-      myDim = theInfo->GetDim();
-      mySpaceDim = theInfo->GetSpaceDim();
-      myType = theInfo->GetType();
-      
-      myDesc.resize(GetDESCLength<eVersion>()+1);
-      SetDesc(theInfo->GetDesc());
-    }
-
-    TTMeshInfo(TInt theDim, TInt theSpaceDim,
-               const std::string& theValue,
-               EMaillage theType,
-               const std::string& theDesc):
-      TNameInfoBase(theValue)
-    {
-      myDim = theDim;
-      mySpaceDim = theSpaceDim;
-      myType = theType;
-      
-      myDesc.resize(GetDESCLength<eVersion>()+1);
-      SetDesc(theDesc);
-    }
-
-    virtual 
-    std::string
-    GetDesc() const 
-    { 
-      return GetString(0, GetDESCLength<eVersion>(), myDesc);
-    }
-
-    virtual
-    void
-    SetDesc(const std::string& theValue)
-    {
-      SetString(0, GetDESCLength<eVersion>(), myDesc, theValue);
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTFamilyInfo: 
-    virtual TFamilyInfo, 
-    virtual TTNameInfo<eVersion>
-  {
-    typedef TTNameInfo<eVersion> TNameInfoBase;
-
-    TTFamilyInfo(const PMeshInfo& theMeshInfo, const PFamilyInfo& theInfo):
-      TNameInfoBase(theInfo->GetName())
-    {
-      myMeshInfo = theMeshInfo;
-
-      myId = theInfo->GetId();
-
-      myNbGroup = theInfo->GetNbGroup();
-      myGroupNames.resize(myNbGroup*GetLNOMLength<eVersion>()+1);
-      if(myNbGroup){
-        for(TInt anId = 0; anId < myNbGroup; anId++){
-          SetGroupName(anId,theInfo->GetGroupName(anId));
-        }
-      }
-
-      myNbAttr = theInfo->GetNbAttr();
-      myAttrId.resize(myNbAttr);
-      myAttrVal.resize(myNbAttr);
-      myAttrDesc.resize(myNbAttr*GetDESCLength<eVersion>()+1);
-      if(myNbAttr){
-        for(TInt anId = 0; anId < myNbAttr; anId++){
-          SetAttrDesc(anId,theInfo->GetAttrDesc(anId));
-          myAttrVal[anId] = theInfo->GetAttrVal(anId);
-          myAttrId[anId] = theInfo->GetAttrId(anId);
-        }
-      }
-    }
-
-    TTFamilyInfo(const PMeshInfo& theMeshInfo,
-                 TInt theNbGroup, 
-                 TInt theNbAttr,
-                 TInt theId,
-                 const std::string& theValue):
-      TNameInfoBase(theValue)
-    {
-      myMeshInfo = theMeshInfo;
-
-      myId = theId;
-
-      myNbGroup = theNbGroup;
-      myGroupNames.resize(theNbGroup*GetLNOMLength<eVersion>()+1);
-
-      myNbAttr = theNbAttr;
-      myAttrId.resize(theNbAttr);
-      myAttrVal.resize(theNbAttr);
-      myAttrDesc.resize(theNbAttr*GetDESCLength<eVersion>()+1);
-    }
-
-    TTFamilyInfo(const PMeshInfo& theMeshInfo,
-                 const std::string& theValue,
-                 TInt theId,
-                 const TStringSet& theGroupNames, 
-                 const TStringVector& theAttrDescs, 
-                 const TIntVector& theAttrIds, 
-                 const TIntVector& theAttrVals):
-      TNameInfoBase(theValue)
-    {
-      myMeshInfo = theMeshInfo;
-
-      myId = theId;
-
-      myNbGroup = (TInt)theGroupNames.size();
-      myGroupNames.resize(myNbGroup*GetLNOMLength<eVersion>()+1);
-      if(myNbGroup){
-        TStringSet::const_iterator anIter = theGroupNames.begin();
-        for(TInt anId = 0; anIter != theGroupNames.end(); anIter++, anId++){
-          const std::string& aVal = *anIter;
-          SetGroupName(anId,aVal);
-        }
-      }
-
-      myNbAttr = (TInt)theAttrDescs.size();
-      myAttrId.resize(myNbAttr);
-      myAttrVal.resize(myNbAttr);
-      myAttrDesc.resize(myNbAttr*GetDESCLength<eVersion>()+1);
-      if(myNbAttr){
-        for(TInt anId = 0, anEnd = (TInt)theAttrDescs.size(); anId < anEnd; anId++){
-          SetAttrDesc(anId,theAttrDescs[anId]);
-          myAttrVal[anId] = theAttrVals[anId];
-          myAttrId[anId] = theAttrIds[anId];
-        }
-      }
-    }
-
-    virtual
-    std::string
-    GetGroupName(TInt theId) const 
-    { 
-      return GetString(theId, GetLNOMLength<eVersion>(), myGroupNames);
-    }
-
-    virtual
-    void
-    SetGroupName(TInt theId, const std::string& theValue)
-    {
-      SetString(theId, GetLNOMLength<eVersion>(), myGroupNames, theValue);
-    }
-
-    virtual
-    std::string
-    GetAttrDesc(TInt theId) const 
-    { 
-      return GetString(theId, GetDESCLength<eVersion>(), myAttrDesc);
-    }
-
-    virtual
-    void
-    SetAttrDesc(TInt theId, const std::string& theValue)
-    {
-      SetString(theId, GetDESCLength<eVersion>(), myAttrDesc, theValue);
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTElemInfo: virtual TElemInfo
-  {
-    TTElemInfo(const PMeshInfo& theMeshInfo, const PElemInfo& theInfo)
-    {
-      myMeshInfo = theMeshInfo;
-      
-      myNbElem = theInfo->GetNbElem();
-      myFamNum.reset(new TElemNum(myNbElem));
-      myIsFamNum = eFAUX; // is set to eVRAI in SetFamNum()
-
-      myIsElemNum = theInfo->IsElemNum();
-      if(theInfo->IsElemNum())
-        myElemNum.reset(new TElemNum(myNbElem));
-      else
-        myElemNum.reset(new TElemNum());
-
-      myIsElemNames = theInfo->IsElemNames();
-      if(theInfo->IsElemNames())
-        myElemNames.reset(new TString(myNbElem*GetPNOMLength<eVersion>() + 1));
-      else
-        myElemNames.reset(new TString());
-
-      if(theInfo->GetNbElem()){
-        for(TInt anId = 0; anId < myNbElem; anId++){
-          SetFamNum(anId, theInfo->GetFamNum(anId));
-        }
-        if(theInfo->IsElemNum() == eVRAI){
-          for(TInt anId = 0; anId < myNbElem; anId++){
-            SetElemNum(anId, theInfo->GetElemNum(anId));
-          }
-        }
-        if(theInfo->IsElemNames() == eVRAI){
-          for(TInt anId = 0; anId < myNbElem; anId++){
-            SetElemName(anId,theInfo->GetElemName(anId));
-          }
-        }
-      }
-    }
-
-    TTElemInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               EBooleen theIsElemNum,
-               EBooleen theIsElemNames)
-    {
-      myMeshInfo = theMeshInfo;
-
-      myNbElem = theNbElem;
-      myFamNum.reset(new TElemNum(theNbElem));
-      myIsFamNum = eFAUX; // is set to eVRAI in SetFamNum()
-
-      myIsElemNum = theIsElemNum;
-      if(theIsElemNum)
-        myElemNum.reset(new TElemNum(theNbElem));
-      else
-        myElemNum.reset(new TElemNum());
-
-      myIsElemNames = theIsElemNames;
-      if(theIsElemNames)
-        myElemNames.reset(new TString(theNbElem*GetPNOMLength<eVersion>() + 1));
-      else
-        myElemNames.reset(new TString());
-   }
-    
-    TTElemInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               const TIntVector& theFamilyNums,
-               const TIntVector& theElemNums,
-               const TStringVector& theElemNames)
-    {
-      myMeshInfo = theMeshInfo;
-      
-      myNbElem = theNbElem;
-      myFamNum.reset(new TElemNum(theNbElem));
-      myIsFamNum = eFAUX; // is set to eVRAI in SetFamNum()
-      
-      myIsElemNum = theElemNums.size()? eVRAI: eFAUX;
-      if(myIsElemNum)
-        myElemNum.reset(new TElemNum(theNbElem));
-      else
-        myElemNum.reset(new TElemNum());
-      
-      myIsElemNames = theElemNames.size()? eVRAI: eFAUX;
-      if(myIsElemNames)
-        myElemNames.reset(new TString(theNbElem*GetPNOMLength<eVersion>() + 1));
-      else
-        myElemNames.reset(new TString());
-     
-      if(theNbElem){
-
-        if(theFamilyNums.size())
-          *myFamNum = theFamilyNums;
-
-        if(myIsElemNum)
-          *myElemNum = theElemNums;
-
-        if(myIsElemNames){
-          for(TInt anId = 0; anId < theNbElem; anId++){
-            const std::string& aVal = theElemNames[anId];
-            SetElemName(anId,aVal);
-          }
-        }
-      }
-    }
-
-    virtual
-    std::string
-    GetElemName(TInt theId) const 
-    { 
-      return GetString(theId,GetPNOMLength<eVersion>(), *myElemNames);
-    }
-
-    virtual
-    void
-    SetElemName(TInt theId, const std::string& theValue)
-    {
-      SetString(theId,GetPNOMLength<eVersion>(), *myElemNames, theValue);
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTNodeInfo: 
-    virtual TNodeInfo, 
-    virtual TTElemInfo<eVersion>
-  {
-    typedef TTElemInfo<eVersion> TElemInfoBase;
-
-    TTNodeInfo(const PMeshInfo& theMeshInfo, const PNodeInfo& theInfo):
-      TNodeInfo(theInfo),
-      TElemInfoBase(theMeshInfo, theInfo)
-    {
-      myModeSwitch = theInfo->GetModeSwitch();
-      
-      mySystem = theInfo->GetSystem();
-      
-      myCoord.reset(new TNodeCoord(*theInfo->myCoord));
-      
-      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
-
-      myCoordNames.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-      for(TInt anId = 0; anId < aSpaceDim; anId++)
-        SetCoordName(anId,theInfo->GetCoordName(anId));
-      
-      myCoordUnits.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-      for(TInt anId = 0; anId < aSpaceDim; anId++)
-        SetCoordUnit(anId,theInfo->GetCoordUnit(anId));
-    }
-
-    TTNodeInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               EModeSwitch theMode,
-               ERepere theSystem, 
-               EBooleen theIsElemNum,
-               EBooleen theIsElemNames):
-      TModeSwitchInfo(theMode),
-      TElemInfoBase(theMeshInfo,
-                    theNbElem,
-                    theIsElemNum,
-                    theIsElemNames)
-    {
-      mySystem = theSystem;
-
-      myCoord.reset(new TNodeCoord(theNbElem * theMeshInfo->mySpaceDim));
-
-      myCoordUnits.resize(theMeshInfo->mySpaceDim*GetPNOMLength<eVersion>()+1);
-
-      myCoordNames.resize(theMeshInfo->mySpaceDim*GetPNOMLength<eVersion>()+1);
-    }
-
-    
-    TTNodeInfo(const PMeshInfo& theMeshInfo, 
-               const TFloatVector& theNodeCoords,
-               EModeSwitch theMode,
-               ERepere theSystem, 
-               const TStringVector& theCoordNames,
-               const TStringVector& theCoordUnits,
-               const TIntVector& theFamilyNums,
-               const TIntVector& theElemNums,
-               const TStringVector& theElemNames):
-      TModeSwitchInfo(theMode),
-      TElemInfoBase(theMeshInfo,
-                    (TInt)theNodeCoords.size()/theMeshInfo->GetDim(),
-                    theFamilyNums,
-                    theElemNums,
-                    theElemNames)
-    {
-      mySystem = theSystem;
-
-      myCoord.reset(new TNodeCoord(theNodeCoords));
-      
-      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
-
-      myCoordNames.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-      if(!theCoordNames.empty())
-        for(TInt anId = 0; anId < aSpaceDim; anId++)
-          SetCoordName(anId,theCoordNames[anId]);
-      
-      myCoordUnits.resize(aSpaceDim*GetPNOMLength<eVersion>() + 1);
-      if(!theCoordUnits.empty())
-        for(TInt anId = 0; anId < aSpaceDim; anId++)
-          SetCoordUnit(anId, theCoordUnits[anId]);
-    }
-
-    virtual
-    std::string
-    GetCoordName(TInt theId) const 
-    { 
-      return GetString(theId,GetPNOMLength<eVersion>(),myCoordNames);
-    }
-
-    virtual
-    void
-    SetCoordName(TInt theId, const std::string& theValue)
-    {
-      SetString(theId,GetPNOMLength<eVersion>(),myCoordNames,theValue);
-    }
-
-    virtual
-    std::string 
-    GetCoordUnit(TInt theId) const 
-    { 
-      return GetString(theId,GetPNOMLength<eVersion>(),myCoordUnits);
-    }
-
-    virtual
-    void
-    SetCoordUnit(TInt theId, const std::string& theValue)
-    {
-      SetString(theId,GetPNOMLength<eVersion>(),myCoordUnits,theValue);
-    }
-  };
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTPolygoneInfo: 
-    virtual TPolygoneInfo, 
-    virtual TTElemInfo<eVersion>
-  {
-    typedef TTElemInfo<eVersion> TElemInfoBase;
-
-    TTPolygoneInfo(const PMeshInfo& theMeshInfo, const PPolygoneInfo& theInfo):
-      TElemInfoBase(theMeshInfo,theInfo)
-    {
-      myEntity = theInfo->GetEntity();
-      myGeom = theInfo->GetGeom();
-
-      myIndex.reset(new TElemNum(*theInfo->myIndex));
-      myConn.reset(new TElemNum(*theInfo->myConn));
-
-      myConnMode = theInfo->GetConnMode();
-    }
-
-    TTPolygoneInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   TInt theNbElem,
-                   TInt theConnSize,
-                   EConnectivite theConnMode,
-                   EBooleen theIsElemNum,
-                   EBooleen theIsElemNames):
-      TElemInfoBase(theMeshInfo,
-                    theNbElem,
-                    theIsElemNum,
-                    theIsElemNames)
-    {
-      myEntity = theEntity;
-      myGeom = theGeom;
-
-      myIndex.reset(new TElemNum(theNbElem + 1));
-      myConn.reset(new TElemNum(theConnSize));
-
-      myConnMode = theConnMode;
-    }
-    
-    TTPolygoneInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   const TIntVector& theIndexes,
-                   const TIntVector& theConnectivities,
-                   EConnectivite theConnMode,
-                   const TIntVector& theFamilyNums,
-                   const TIntVector& theElemNums,
-                   const TStringVector& theElemNames):
-      TElemInfoBase(theMeshInfo,
-                    (TInt)theIndexes.size() - 1,
-                    theFamilyNums,
-                    theElemNums,
-                    theElemNames)
-    {
-      myEntity = theEntity;
-      myGeom = theGeom;
-
-      myIndex.reset(new TElemNum(theIndexes));
-      myConn.reset(new TElemNum(theConnectivities));
-
-      myConnMode = theConnMode;
-    }
-  };
-  
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTPolyedreInfo: 
-    virtual TPolyedreInfo, 
-    virtual TTElemInfo<eVersion>
-  {
-    typedef TTElemInfo<eVersion> TElemInfoBase;
-
-    TTPolyedreInfo(const PMeshInfo& theMeshInfo, const PPolyedreInfo& theInfo):
-      TElemInfoBase(theMeshInfo,theInfo)
-    {
-      myEntity = theInfo->GetEntity();
-      myGeom = theInfo->GetGeom();
-
-      myIndex.reset(new TElemNum(*theInfo->myIndex));
-      myFaces.reset(new TElemNum(*theInfo->myFaces));
-      myConn.reset(new TElemNum(*theInfo->myConn));
-
-      myConnMode = theInfo->GetConnMode();
-    }
-
-    TTPolyedreInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   TInt theNbElem,
-                   TInt theNbFaces,
-                   TInt theConnSize,
-                   EConnectivite theConnMode,
-                   EBooleen theIsElemNum,
-                   EBooleen theIsElemNames):
-      TElemInfoBase(theMeshInfo,
-                    theNbElem,
-                    theIsElemNum,
-                    theIsElemNames)
-    {
-      myEntity = theEntity;
-      myGeom = theGeom;
-
-      myIndex.reset(new TElemNum(theNbElem + 1));
-      myFaces.reset(new TElemNum(theNbFaces));
-      myConn.reset(new TElemNum(theConnSize));
-
-      myConnMode = theConnMode;
-    }
-    
-    TTPolyedreInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   const TIntVector& theIndexes,
-                   const TIntVector& theFaces,
-                   const TIntVector& theConnectivities,
-                   EConnectivite theConnMode,
-                   const TIntVector& theFamilyNums,
-                   const TIntVector& theElemNums,
-                   const TStringVector& theElemNames):
-      TElemInfoBase(theMeshInfo,
-                    (TInt)theIndexes.size()-1,
-                    theFamilyNums,
-                    theElemNums,
-                    theElemNames)
-    {
-      myEntity = theEntity;
-      myGeom = theGeom;
-
-      myIndex.reset(new TElemNum(theIndexes));
-      myFaces.reset(new TElemNum(theFaces));
-      myConn.reset(new TElemNum(theConnectivities));
-
-      myConnMode = theConnMode;
-    }
-  };
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTCellInfo: 
-    virtual TCellInfo, 
-    virtual TTElemInfo<eVersion>
-  {
-    typedef TTElemInfo<eVersion> TElemInfoBase;
-
-    TTCellInfo(const PMeshInfo& theMeshInfo, const PCellInfo& theInfo):
-      TElemInfoBase(theMeshInfo,theInfo)
-    {
-      myEntity = theInfo->GetEntity();
-      myGeom = theInfo->GetGeom();
-      myConnMode  = theInfo->GetConnMode();
-      
-      TInt aConnDim = GetNbNodes(myGeom);
-      TInt aNbConn = GetNbConn<eVersion>(myGeom, myEntity, myMeshInfo->myDim);
-      myConn.reset(new TElemNum(myNbElem * aNbConn));
-      for(TInt anElemId = 0; anElemId < myNbElem; anElemId++){
-        TConnSlice aConnSlice = GetConnSlice(anElemId);
-        TCConnSlice aConnSlice2 = theInfo->GetConnSlice(anElemId);
-        for(TInt anConnId = 0; anConnId < aConnDim; anConnId++){
-          aConnSlice[anConnId] = aConnSlice2[anConnId];
-        }
-      }
-    }
-
-    TTCellInfo(const PMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               TInt theNbElem,
-               EConnectivite theConnMode,
-               EBooleen theIsElemNum,
-               EBooleen theIsElemNames,
-               EModeSwitch theMode):
-      TModeSwitchInfo(theMode),
-      TElemInfoBase(theMeshInfo,
-                    theNbElem,
-                    theIsElemNum,
-                    theIsElemNames)
-    {
-      myEntity = theEntity;
-      myGeom = theGeom;
-
-      myConnMode = theConnMode;
-      TInt aNbConn = GetNbConn<eVersion>(theGeom, myEntity, theMeshInfo->myDim);
-      myConn.reset(new TElemNum(theNbElem * aNbConn));
-    }
-    
-    TTCellInfo(const PMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               const TIntVector& theConnectivities,
-               EConnectivite theConnMode,
-               const TIntVector& theFamilyNums,
-               const TIntVector& theElemNums,
-               const TStringVector& theElemNames,
-               EModeSwitch theMode):
-      TModeSwitchInfo(theMode),
-      TElemInfoBase(theMeshInfo,
-                    (TInt)theConnectivities.size() / GetNbNodes(theGeom),
-                    theFamilyNums,
-                    theElemNums,
-                    theElemNames)
-    {
-      myEntity = theEntity;
-      myGeom = theGeom;
-
-      myConnMode = theConnMode;
-      TInt aConnDim = GetNbNodes(myGeom);
-      TInt aNbConn = GetNbConn<eVersion>(myGeom, myEntity, myMeshInfo->myDim);
-      myConn.reset(new TElemNum(myNbElem * aNbConn));
-      for(TInt anElemId = 0; anElemId < myNbElem; anElemId++){
-        TConnSlice aConnSlice = GetConnSlice(anElemId);
-        for(TInt anConnId = 0; anConnId < aConnDim; anConnId++){
-          aConnSlice[anConnId] = theConnectivities[anElemId*aConnDim + anConnId];
-        }
-      }
-    }
-
-    virtual 
-    TInt
-    GetConnDim() const 
-    { 
-      return GetNbConn<eVersion>(myGeom, myEntity, myMeshInfo->myDim);
-    }
-
-  };
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTBallInfo: 
-    virtual TBallInfo,
-    virtual TTCellInfo<eVersion>
-  {
-    typedef TTCellInfo<eVersion> TCellInfoBase;
-
-    TTBallInfo(const PMeshInfo& theMeshInfo, const PBallInfo& theInfo):
-      TCellInfoBase::TElemInfoBase(theMeshInfo, theInfo),
-      TCellInfoBase(theMeshInfo,theInfo)
-    {
-      myDiameters = theInfo->myDiameters;
-    }
-
-    TTBallInfo(const PMeshInfo& theMeshInfo,
-               TInt             theNbElem,
-               EBooleen         theIsElemNum ):
-      TCellInfoBase::TElemInfoBase(theMeshInfo,
-                                   theNbElem,
-                                   theIsElemNum,
-                                   /*theIsElemNames=*/eFAUX),
-      TCellInfoBase(theMeshInfo,
-                    eSTRUCT_ELEMENT,
-                    eBALL,
-                    theNbElem,
-                    /*EConnectivite=*/eNOD,
-                    theIsElemNum,
-                    /*theIsElemNames=*/eFAUX,
-                    eFULL_INTERLACE)
-    {
-      myDiameters.resize( theNbElem );
-    }
-
-    TTBallInfo(const PMeshInfo&  theMeshInfo, 
-               const TIntVector& theNodes,
-               TFloatVector&     theDiameters,
-               const TIntVector& theFamilyNums,
-               const TIntVector& theElemNums):
-      TCellInfoBase::TElemInfoBase(theMeshInfo,
-                                   (TInt)std::max(theNodes.size(),theDiameters.size() ),
-                                   theFamilyNums,
-                                   theElemNums,
-                                   TStringVector()),
-      TCellInfoBase(theMeshInfo,
-                    eSTRUCT_ELEMENT,
-                    eBALL,
-                    theNodes,
-                    /*EConnectivite=*/eNOD,
-                    theFamilyNums,
-                    theElemNums,
-                    TStringVector(),
-                    eFULL_INTERLACE)
-    {
-      myDiameters.swap( theDiameters );
-    }
-  };
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTFieldInfo: 
-    virtual TFieldInfo, 
-    virtual TTNameInfo<eVersion>
-  {
-    typedef TTNameInfo<eVersion> TNameInfoBase;
-
-    TTFieldInfo(const PMeshInfo& theMeshInfo, const PFieldInfo& theInfo):
-      TNameInfoBase(theInfo->GetName())
-    {
-      myMeshInfo = theMeshInfo;
-
-      myNbComp = theInfo->GetNbComp();
-      myCompNames.resize(myNbComp*GetPNOMLength<eVersion>()+1);
-      for(TInt anId = 0; anId < myNbComp; anId++){
-        SetCompName(anId,theInfo->GetCompName(anId));
-      }
-
-      myUnitNames.resize(myNbComp*GetPNOMLength<eVersion>()+1);
-      for(TInt anId = 0; anId < myNbComp; anId++){
-        SetUnitName(anId,theInfo->GetUnitName(anId));
-      }
-
-      myType = theInfo->GetType();
-
-      myIsLocal = theInfo->GetIsLocal();
-      myNbRef = theInfo->GetNbRef();
-    }
-
-    TTFieldInfo(const PMeshInfo& theMeshInfo, 
-                TInt theNbComp,
-                ETypeChamp theType,
-                const std::string& theValue,
-                EBooleen theIsLocal,
-                TInt theNbRef):
-      TNameInfoBase(theValue)
-    {
-      myMeshInfo = theMeshInfo;
-
-      myNbComp = theNbComp;
-      myCompNames.resize(theNbComp*GetPNOMLength<eVersion>()+1);
-      myUnitNames.resize(theNbComp*GetPNOMLength<eVersion>()+1);
-
-      myType = theType;
-
-      myIsLocal = theIsLocal;
-      myNbRef = theNbRef;
-    }
-    
-    virtual 
-    std::string
-    GetCompName(TInt theId) const 
-    { 
-      return GetString(theId,GetPNOMLength<eVersion>(),myCompNames);
-    }
-
-    virtual
-    void
-    SetCompName(TInt theId, const std::string& theValue)
-    {
-      SetString(theId,GetPNOMLength<eVersion>(),myCompNames,theValue);
-    }
-
-    virtual
-    std::string 
-    GetUnitName(TInt theId) const 
-    { 
-      return GetString(theId,GetPNOMLength<eVersion>(),myUnitNames);
-    }
-
-    virtual
-    void
-    SetUnitName(TInt theId, const std::string& theValue)
-    {
-      SetString(theId,GetPNOMLength<eVersion>(),myUnitNames,theValue);
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTGaussInfo: 
-    virtual TGaussInfo,
-    virtual TTNameInfo<eVersion>
-  {
-    typedef TTNameInfo<eVersion> TNameInfoBase;
-
-    TTGaussInfo(const TGaussInfo::TInfo& theInfo,
-                EModeSwitch theMode):
-      TModeSwitchInfo(theMode),
-      TNameInfoBase(boost::get<1>(boost::get<0>(theInfo)))
-    {
-      const TGaussInfo::TKey& aKey = boost::get<0>(theInfo);
-
-      myGeom = boost::get<0>(aKey);
-      myRefCoord.resize(GetNbRef()*GetDim());
-
-      TInt aNbGauss = boost::get<1>(theInfo);
-      myGaussCoord.resize(aNbGauss*GetDim());
-      myWeight.resize(aNbGauss);
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTTimeStampInfo: virtual TTimeStampInfo
-  {
-    TTTimeStampInfo(const PFieldInfo& theFieldInfo, const PTimeStampInfo& theInfo)
-    {
-      myFieldInfo = theFieldInfo;
-
-      myEntity = theInfo->GetEntity();
-      myGeom2Size = theInfo->GetGeom2Size();
-
-      myNumDt = theInfo->GetNumDt();
-      myNumOrd = theInfo->GetNumOrd();
-      myDt = theInfo->GetDt();
-
-      myUnitDt.resize(GetPNOMLength<eVersion>()+1);
-      SetUnitDt(theInfo->GetUnitDt());
-
-      myGeom2NbGauss = theInfo->myGeom2NbGauss;
-      myGeom2Gauss = theInfo->GetGeom2Gauss();
-    }
-
-    TTTimeStampInfo(const PFieldInfo& theFieldInfo, 
-                    EEntiteMaillage theEntity,
-                    const TGeom2Size& theGeom2Size,
-                    const TGeom2NbGauss& theGeom2NbGauss,
-                    TInt theNumDt,
-                    TInt theNumOrd,
-                    TFloat theDt,
-                    const std::string& theUnitDt,
-                    const TGeom2Gauss& theGeom2Gauss)
-    {
-      myFieldInfo = theFieldInfo;
-
-      myEntity = theEntity;
-      myGeom2Size = theGeom2Size;
-
-      myNumDt = theNumDt;
-      myNumOrd = theNumDt;
-      myDt = theDt;
-
-      myUnitDt.resize(GetPNOMLength<eVersion>()+1);
-      SetUnitDt(theUnitDt);
-
-      myGeom2NbGauss = theGeom2NbGauss;
-      myGeom2Gauss = theGeom2Gauss;
-    }
-
-    virtual 
-    std::string
-    GetUnitDt() const
-    { 
-      return GetString(0,GetPNOMLength<eVersion>(),myUnitDt);
-    }
-
-    virtual
-    void
-    SetUnitDt(const std::string& theValue)
-    {
-      SetString(0,GetPNOMLength<eVersion>(),myUnitDt,theValue);
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTProfileInfo: 
-    virtual TProfileInfo,
-    virtual TTNameInfo<eVersion>
-  {
-    typedef TTNameInfo<eVersion> TNameInfoBase;
-
-    TTProfileInfo(const TProfileInfo::TInfo& theInfo,
-                  EModeProfil theMode):
-      TNameInfoBase(boost::get<0>(theInfo))
-    {
-      TInt aSize = boost::get<1>(theInfo);
-      myElemNum.reset(new TElemNum(aSize));
-      myMode = aSize > 0? theMode: eNO_PFLMOD;
-    }
-  };
-
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion, class TMeshValueType>
-  struct TTTimeStampValue: virtual TTimeStampValue<TMeshValueType>
-  {
-    TTTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     const PTimeStampValueBase& theInfo,
-                     ETypeChamp theTypeChamp)
-    {
-      typedef TTimeStampValue<TMeshValueType> TCompatible;
-      if(TCompatible* aCompatible = dynamic_cast<TCompatible*>(theInfo.get())){
-        this->myTimeStampInfo = theTimeStampInfo;
-        this->myTypeChamp = theTypeChamp;
-        this->myGeom2Profile = aCompatible->GetGeom2Profile();
-        this->myGeom2Value = aCompatible->myGeom2Value;
-        this->myGeomSet = aCompatible->GetGeomSet();
-      }else
-        EXCEPTION(std::runtime_error,"TTTimeStampValue::TTTimeStampValue - use incompatible arguments!");
-    }
-
-    TTTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     ETypeChamp theTypeChamp,
-                     const TGeom2Profile& theGeom2Profile,
-                     EModeSwitch theMode):
-      TModeSwitchInfo(theMode)
-    {
-      this->myTimeStampInfo = theTimeStampInfo;
-
-      this->myTypeChamp = theTypeChamp;
-
-      this->myGeom2Profile = theGeom2Profile;
-
-      TInt aNbComp = theTimeStampInfo->myFieldInfo->myNbComp;
-
-      const TGeom2Size& aGeom2Size = theTimeStampInfo->GetGeom2Size();
-      TGeom2Size::const_iterator anIter = aGeom2Size.begin();
-      for(; anIter != aGeom2Size.end(); anIter++){
-        const EGeometrieElement& aGeom = anIter->first;
-        TInt aNbElem = anIter->second;
-
-        MED::PProfileInfo aProfileInfo;
-        MED::TGeom2Profile::const_iterator anIter = theGeom2Profile.find(aGeom);
-        if(anIter != theGeom2Profile.end())
-          aProfileInfo = anIter->second;
-
-        if(aProfileInfo && aProfileInfo->IsPresent())
-          aNbElem = aProfileInfo->GetSize();
-
-        TInt aNbGauss = theTimeStampInfo->GetNbGauss(aGeom);
-        
-        this->GetMeshValue(aGeom).Allocate(aNbElem,aNbGauss,aNbComp);
-      }
-    }
-
-    virtual 
-    size_t
-    GetValueSize(EGeometrieElement theGeom) const
-    {
-      return this->GetMeshValue(theGeom).GetSize();
-    }
-
-    virtual 
-    size_t
-    GetNbVal(EGeometrieElement theGeom) const
-    {
-      return this->GetMeshValue(theGeom).GetNbVal();
-    }
-
-    virtual 
-    size_t
-    GetNbGauss(EGeometrieElement theGeom) const
-    {
-      return this->GetMeshValue(theGeom).GetNbGauss();
-    }
-
-    virtual 
-    void
-    AllocateValue(EGeometrieElement theGeom,
-                  TInt theNbElem,
-                  TInt theNbGauss,
-                  TInt theNbComp,
-                  EModeSwitch theMode = eFULL_INTERLACE)
-    {
-      this->GetMeshValue(theGeom).Allocate(theNbElem,theNbGauss,theNbComp,theMode);
-    }
-    
-    virtual 
-    unsigned char*
-    GetValuePtr(EGeometrieElement theGeom)
-    {
-      return this->GetMeshValue(theGeom).GetValuePtr();
-    }
-  };
-
-  //---------------------------------------------------------------
-  template<EVersion eVersion>
-  struct TTGrilleInfo:
-    virtual TGrilleInfo
-  {
-    TTGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const PGrilleInfo& theInfo)
-    {
-      myMeshInfo        = theMeshInfo;
-
-      myCoord           = theInfo->GetNodeCoord();
-      
-      myGrilleType      = theInfo->GetGrilleType();
-
-      myCoordNames      = theInfo->myCoordNames;
-
-      myCoordUnits      = theInfo->myCoordUnits;
-
-      myIndixes         = theInfo->GetMapOfIndexes();
-
-      myGrilleStructure = theInfo->GetGrilleStructure();
-
-      myGrilleType      = theInfo->GetGrilleType();
-
-      myFamNumNode.resize(theInfo->GetNbNodes());
-      myFamNumNode      = theInfo->myFamNumNode;
-
-      myFamNum      = theInfo->myFamNum;
-    }
-
-    TTGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type,
-                 const TInt nnoeuds)
-    {
-      myMeshInfo        = theMeshInfo;
-      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
-      if(type == eGRILLE_STANDARD){
-        myCoord.resize(aSpaceDim*nnoeuds);
-        myCoordNames.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-        myCoordUnits.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-      } else { //if(type == eGRILLE_CARTESIENNE){
-        myCoordNames.resize(aSpaceDim*GetPNOMLength<eVersion>()+aSpaceDim);
-        myCoordUnits.resize(aSpaceDim*GetPNOMLength<eVersion>()+aSpaceDim);
-      }
-      myGrilleStructure.resize(aSpaceDim);
-      myFamNumNode.resize(nnoeuds);
-    }
-
-    TTGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type)
-    {
-      myMeshInfo        = theMeshInfo;
-      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
-      if(type == eGRILLE_STANDARD){
-        myCoordNames.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-        myCoordUnits.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-      } else {// if(type == eGRILLE_CARTESIENNE){
-        myCoordNames.resize(aSpaceDim*GetPNOMLength<eVersion>()+aSpaceDim);
-        myCoordUnits.resize(aSpaceDim*GetPNOMLength<eVersion>()+aSpaceDim);
-      }
-      myGrilleStructure.resize(aSpaceDim);
-    }
-
-    TTGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type,
-                 const MED::TIntVector& nbNodeVec)
-    {
-      myMeshInfo        = theMeshInfo;
-
-      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
-      if(type == eGRILLE_STANDARD){
-        myCoordNames.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-        myCoordUnits.resize(aSpaceDim*GetPNOMLength<eVersion>()+1);
-      } else {// if(type == eGRILLE_CARTESIENNE){
-        myCoordNames.resize(aSpaceDim*GetPNOMLength<eVersion>()+aSpaceDim);
-        myCoordUnits.resize(aSpaceDim*GetPNOMLength<eVersion>()+aSpaceDim);
-      }
-
-      if(type != eGRILLE_STANDARD)
-        for(unsigned int aAxe=0;aAxe<nbNodeVec.size();aAxe++){
-          myIndixes[aAxe].resize(nbNodeVec[aAxe]);
-        }
-      myGrilleStructure.resize(aSpaceDim);
-    }
-
-    virtual
-    std::string
-    GetCoordName(TInt theId) const 
-    { 
-      return GetString(theId,GetPNOMLength<eVersion>(),myCoordNames);
-    }
-
-    virtual
-    void
-    SetCoordName(TInt theId, const std::string& theValue)
-    {
-      SetString(theId,GetPNOMLength<eVersion>(),myCoordNames,theValue);
-    }
-
-    virtual
-    std::string 
-    GetCoordUnit(TInt theId) const 
-    { 
-      return GetString(theId,GetPNOMLength<eVersion>(),myCoordUnits);
-    }
-
-    virtual
-    void
-    SetCoordUnit(TInt theId, const std::string& theValue)
-    {
-      SetString(theId,GetPNOMLength<eVersion>(),myCoordUnits,theValue);
-    }
-
-  };
-}
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_TWrapper.hxx b/src/MEDWrapper/Base/MED_TWrapper.hxx
deleted file mode 100644 (file)
index 4a719be..0000000
+++ /dev/null
@@ -1,578 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_TWrapper_HeaderFile
-#define MED_TWrapper_HeaderFile
-
-#include "MED_TStructures.hxx"
-#include "MED_Wrapper.hxx"
-
-namespace MED
-{
-
-  template<EVersion eVersion>
-  class TTWrapper: public TWrapper
-  {
-  public:
-    //----------------------------------------------------------------------------
-    //! Gets version of the MED library used for the MED file
-    virtual 
-    EVersion
-    GetVersion()
-    {
-      return eVersion;
-    }
-    
-    //----------------------------------------------------------------------------
-    virtual 
-    PMeshInfo
-    CrMeshInfo(TInt theDim = 0, TInt theSpaceDim = 0,
-               const std::string& theValue = "",
-               EMaillage theType = eNON_STRUCTURE,
-               const std::string& theDesc = "")
-    {
-      return PMeshInfo(new TTMeshInfo<eVersion>
-                       (theDim,
-                        theSpaceDim,
-                        theValue,
-                        theType,
-                        theDesc));
-    }
-
-    virtual 
-    PMeshInfo
-    CrMeshInfo(const PMeshInfo& theInfo)
-    {
-      return PMeshInfo(new TTMeshInfo<eVersion>(theInfo));
-    }
-    
-
-    //----------------------------------------------------------------------------
-    virtual
-    PFamilyInfo
-    CrFamilyInfo(const PMeshInfo& theMeshInfo,
-                 TInt theNbGroup = 0, 
-                 TInt theNbAttr = 0,
-                 TInt theId = 0,
-                 const std::string& theValue = "")
-    {
-      return PFamilyInfo(new TTFamilyInfo<eVersion>
-                         (theMeshInfo,
-                          theNbGroup,
-                          theNbAttr,
-                          theId,
-                          theValue));
-    }
-
-    virtual
-    PFamilyInfo
-    CrFamilyInfo(const PMeshInfo& theMeshInfo,
-                 const std::string& theValue,
-                 TInt theId,
-                 const MED::TStringSet& theGroupNames, 
-                 const MED::TStringVector& theAttrDescs = MED::TStringVector(), 
-                 const MED::TIntVector& theAttrIds = MED::TIntVector(), 
-                 const MED::TIntVector& theAttrVals = MED::TIntVector())
-    {
-      return PFamilyInfo(new TTFamilyInfo<eVersion>
-                         (theMeshInfo,
-                          theValue,
-                          theId,
-                          theGroupNames,
-                          theAttrDescs,
-                          theAttrIds,
-                          theAttrVals));
-    }
-
-    virtual
-    PFamilyInfo
-    CrFamilyInfo(const PMeshInfo& theMeshInfo,
-                 const PFamilyInfo& theInfo)
-    {
-      return PFamilyInfo(new TTFamilyInfo<eVersion>
-                         (theMeshInfo,
-                          theInfo));
-    }
-
-    //----------------------------------------------------------------------------
-    virtual
-    PElemInfo
-    CrElemInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               EBooleen theIsElemNum = eVRAI,
-               EBooleen theIsElemNames = eVRAI)
-    {
-      return PElemInfo(new TTElemInfo<eVersion>
-                       (theMeshInfo,
-                        theNbElem,
-                        theIsElemNum,
-                        theIsElemNames));
-    }
-
-    virtual
-    PElemInfo
-    CrElemInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               const TIntVector& theFamNum,
-               const TIntVector& aElemNum,
-               const TStringVector& aElemNames)
-    {
-      return PElemInfo(new TTElemInfo<eVersion>
-                       (theMeshInfo,
-                        theNbElem,
-                        theFamNum,
-                        aElemNum,
-                        aElemNames));
-    }
-
-    //----------------------------------------------------------------------------
-    virtual
-    PNodeInfo
-    CrNodeInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               EModeSwitch theMode = eFULL_INTERLACE,
-               ERepere theSystem = eCART, 
-               EBooleen theIsElemNum = eVRAI,
-               EBooleen theIsElemNames = eVRAI)
-    {
-      return PNodeInfo(new TTNodeInfo<eVersion>
-                       (theMeshInfo,
-                        theNbElem,
-                        theMode,
-                        theSystem,
-                        theIsElemNum,
-                        theIsElemNames));
-    }
-
-    virtual 
-    PNodeInfo
-    CrNodeInfo(const PMeshInfo& theMeshInfo, 
-               const TFloatVector& theNodeCoords,
-               EModeSwitch theMode = eFULL_INTERLACE,
-               ERepere theSystem = eCART, 
-               const TStringVector& theCoordNames = TStringVector(),
-               const TStringVector& theCoordUnits = TStringVector(),
-               const TIntVector& theFamilyNums = TIntVector(),
-               const TIntVector& theElemNums = TIntVector(),
-               const TStringVector& theElemNames = TStringVector())
-    {
-      return PNodeInfo(new TTNodeInfo<eVersion>
-                       (theMeshInfo,
-                        theNodeCoords,
-                        theMode,
-                        theSystem,
-                        theCoordNames,
-                        theCoordUnits,
-                        theFamilyNums,
-                        theElemNums,
-                        theElemNames));
-    }
-
-    virtual 
-    PNodeInfo
-    CrNodeInfo(const PMeshInfo& theMeshInfo,
-               const PNodeInfo& theInfo)
-    {
-      return PNodeInfo(new TTNodeInfo<eVersion>
-                       (theMeshInfo,
-                        theInfo));
-    }
-    
-    //----------------------------------------------------------------------------
-    virtual
-    PPolygoneInfo
-    CrPolygoneInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   TInt theNbElem,
-                   TInt theConnSize,
-                   EConnectivite theConnMode = eNOD,
-                   EBooleen theIsElemNum = eVRAI,
-                   EBooleen theIsElemNames = eVRAI)
-    {
-      return PPolygoneInfo(new TTPolygoneInfo<eVersion>
-                           (theMeshInfo,
-                            theEntity,
-                            theGeom,
-                            theNbElem,
-                            theConnSize,
-                            theConnMode,
-                            theIsElemNum,
-                            theIsElemNames));
-    }
-
-    virtual
-    PPolygoneInfo
-    CrPolygoneInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   const TIntVector& theIndexes,
-                   const TIntVector& theConnectivities,
-                   EConnectivite theConnMode = eNOD,
-                   const TIntVector& theFamilyNums = TIntVector(),
-                   const TIntVector& theElemNums = TIntVector(),
-                   const TStringVector& theElemNames = TStringVector())
-    {
-      return PPolygoneInfo(new TTPolygoneInfo<eVersion>
-                           (theMeshInfo,
-                            theEntity,
-                            theGeom,
-                            theIndexes,
-                            theConnectivities,
-                            theConnMode,
-                            theFamilyNums,
-                            theElemNums,
-                            theElemNames));
-    }
-
-    virtual
-    PPolygoneInfo
-    CrPolygoneInfo(const PMeshInfo& theMeshInfo,
-                   const PPolygoneInfo& theInfo)
-    {
-      return PPolygoneInfo(new TTPolygoneInfo<eVersion>
-                           (theMeshInfo,
-                            theInfo));
-    }
-    
-    //----------------------------------------------------------------------------
-    virtual
-    PPolyedreInfo
-    CrPolyedreInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   TInt theNbElem,
-                   TInt theNbFaces,
-                   TInt theConnSize,
-                   EConnectivite theConnMode = eNOD,
-                   EBooleen theIsElemNum = eVRAI,
-                   EBooleen theIsElemNames = eVRAI)
-    {
-      return PPolyedreInfo(new TTPolyedreInfo<eVersion>
-                           (theMeshInfo,
-                            theEntity,
-                            theGeom,
-                            theNbElem,
-                            theNbFaces,
-                            theConnSize,
-                            theConnMode,
-                            theIsElemNum,
-                            theIsElemNames));
-    }
-
-    virtual
-    PPolyedreInfo
-    CrPolyedreInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   const TIntVector& theIndexes,
-                   const TIntVector& theFaces,
-                   const TIntVector& theConnectivities,
-                   EConnectivite theConnMode = eNOD,
-                   const TIntVector& theFamilyNums = TIntVector(),
-                   const TIntVector& theElemNums = TIntVector(),
-                   const TStringVector& theElemNames = TStringVector())
-    {
-      return PPolyedreInfo(new TTPolyedreInfo<eVersion>
-                           (theMeshInfo,
-                            theEntity,
-                            theGeom,
-                            theIndexes,
-                            theFaces,
-                            theConnectivities,
-                            theConnMode,
-                            theFamilyNums,
-                            theElemNums,
-                            theElemNames));
-    }
-
-    virtual
-    PPolyedreInfo
-    CrPolyedreInfo(const PMeshInfo& theMeshInfo,
-                   const PPolyedreInfo& theInfo)
-    {
-      return PPolyedreInfo(new TTPolyedreInfo<eVersion>
-                           (theMeshInfo,
-                            theInfo));
-    }
-
-    //----------------------------------------------------------------------------
-    virtual
-    PCellInfo
-    CrCellInfo(const PMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               TInt theNbElem,
-               EConnectivite theConnMode = eNOD,
-               EBooleen theIsElemNum = eVRAI,
-               EBooleen theIsElemNames = eVRAI,
-               EModeSwitch theMode = eFULL_INTERLACE)
-    {
-      return PCellInfo(new TTCellInfo<eVersion>
-                       (theMeshInfo,
-                        theEntity,
-                        theGeom,
-                        theNbElem,
-                        theConnMode,
-                        theIsElemNum,
-                        theIsElemNames,
-                        theMode));
-    }
-
-    virtual
-    PCellInfo
-    CrCellInfo(const PMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               const TIntVector& theConnectivities,
-               EConnectivite theConnMode = eNOD,
-               const TIntVector& theFamilyNums = TIntVector(),
-               const TIntVector& theElemNums = TIntVector(),
-               const TStringVector& theElemNames = TStringVector(),
-               EModeSwitch theMode = eFULL_INTERLACE)
-    {
-      return PCellInfo(new TTCellInfo<eVersion>
-                       (theMeshInfo,
-                        theEntity,
-                        theGeom,
-                        theConnectivities,
-                        theConnMode,
-                        theFamilyNums,
-                        theElemNums,
-                        theElemNames,
-                        theMode));
-    }
-
-    virtual
-    PCellInfo
-    CrCellInfo(const PMeshInfo& theMeshInfo,
-               const PCellInfo& theInfo)
-    {
-      return PCellInfo(new TTCellInfo<eVersion>
-                       (theMeshInfo,
-                        theInfo));
-    }
-    
-    //----------------------------------------------------------------------------
-    //! Creates a MEDWrapper MED Balls representation
-    virtual PBallInfo CrBallInfo(const PMeshInfo& theMeshInfo, 
-                                 TInt             theNbBalls,
-                                 EBooleen         theIsElemNum = eVRAI)
-    {
-      return PBallInfo( new TTBallInfo<eVersion>( theMeshInfo, theNbBalls, theIsElemNum ));
-    }
-
-    //! Creates a MEDWrapper MED Balls representation
-    virtual PBallInfo CrBallInfo(const PMeshInfo&  theMeshInfo, 
-                                 const TIntVector& theNodes,
-                                 TFloatVector&     theDiameters,
-                                 const TIntVector& theFamilyNums = TIntVector(),
-                                 const TIntVector& theElemNums = TIntVector())
-    {
-      return PBallInfo( new TTBallInfo<eVersion>( theMeshInfo, theNodes, theDiameters,
-                                                  theFamilyNums, theElemNums));
-    }
-
-    //! A copy-constructor for the MEDWrapper MED Balls representation
-    virtual PBallInfo CrBallInfo(const PMeshInfo& theMeshInfo,
-                                 const PBallInfo& theInfo)
-    {
-      return PBallInfo( new TTBallInfo<eVersion>( theMeshInfo, theInfo ));
-    }
-
-    //----------------------------------------------------------------------------
-    virtual
-    PFieldInfo
-    CrFieldInfo(const PMeshInfo& theMeshInfo, 
-                TInt theNbComp = 0,
-                ETypeChamp theType = eFLOAT64,
-                const std::string& theValue = "",
-                EBooleen theIsLocal = eVRAI,
-                TInt theNbRef = 1)
-    {
-      return PFieldInfo(new TTFieldInfo<eVersion>
-                        (theMeshInfo,
-                         theNbComp,
-                         theType,
-                         theValue,
-                         theIsLocal,
-                         theNbRef));
-    }
-
-    virtual
-    PFieldInfo
-    CrFieldInfo(const PMeshInfo& theMeshInfo,
-                const PFieldInfo& theInfo)
-    {
-      return PFieldInfo(new TTFieldInfo<eVersion>
-                        (theMeshInfo,
-                         theInfo));
-    }
-    
-
-    //----------------------------------------------------------------------------
-    virtual
-    PTimeStampInfo
-    CrTimeStampInfo(const PFieldInfo& theFieldInfo, 
-                    EEntiteMaillage theEntity,
-                    const TGeom2Size& theGeom2Size,
-                    const TGeom2NbGauss& theGeom2NbGauss = TGeom2NbGauss(),
-                    TInt theNumDt = 0,
-                    TInt theNumOrd = 0,
-                    TFloat theDt = 0,
-                    const std::string& theUnitDt = "",
-                    const TGeom2Gauss& theGeom2Gauss = TGeom2Gauss())
-    {
-      return PTimeStampInfo(new TTTimeStampInfo<eVersion>
-                            (theFieldInfo,
-                             theEntity,
-                             theGeom2Size,
-                             theGeom2NbGauss,
-                             theNumDt,
-                             theNumOrd,
-                             theDt,
-                             theUnitDt,
-                             theGeom2Gauss));
-    }
-
-    virtual
-    PTimeStampInfo
-    CrTimeStampInfo(const PFieldInfo& theFieldInfo,
-                    const PTimeStampInfo& theInfo)
-    {
-      return PTimeStampInfo(new TTTimeStampInfo<eVersion>
-                            (theFieldInfo,
-                             theInfo));
-    }
-
-
-    //----------------------------------------------------------------------------
-    virtual
-    PGaussInfo
-    CrGaussInfo(const TGaussInfo::TInfo& theInfo,
-                EModeSwitch theMode = eFULL_INTERLACE)
-    {
-      return PGaussInfo(new TTGaussInfo<eVersion>
-                        (theInfo,
-                         theMode));
-    }
-    
-
-    //----------------------------------------------------------------------------
-    virtual
-    PProfileInfo
-    CrProfileInfo(const TProfileInfo::TInfo& theInfo,
-                  EModeProfil theMode = eCOMPACT)
-    {
-      return PProfileInfo(new TTProfileInfo<eVersion>
-                           (theInfo,
-                            theMode));
-    }
-    
-
-    //----------------------------------------------------------------------------
-    virtual
-    PTimeStampValueBase
-    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     ETypeChamp theTypeChamp,
-                     const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
-                     EModeSwitch theMode = eFULL_INTERLACE)
-    {
-      if(theTypeChamp == eFLOAT64)
-        return PTimeStampValueBase(new TTTimeStampValue<eVersion, TFloatMeshValue>
-                                   (theTimeStampInfo,
-                                    theTypeChamp,
-                                    theGeom2Profile,
-                                    theMode));
-      return PTimeStampValueBase(new TTTimeStampValue<eVersion, TIntMeshValue>
-                                 (theTimeStampInfo,
-                                  theTypeChamp,
-                                  theGeom2Profile,
-                                  theMode));
-    }
-
-    virtual
-    PTimeStampValueBase
-    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     const PTimeStampValueBase& theInfo,
-                     ETypeChamp theTypeChamp)
-    {
-      if(theTypeChamp == eFLOAT64)
-        return PTimeStampValueBase(new TTTimeStampValue<eVersion, TFloatMeshValue>
-                                   (theTimeStampInfo,
-                                    theInfo,
-                                    theTypeChamp));
-      return PTimeStampValueBase(new TTTimeStampValue<eVersion, TIntMeshValue>
-                                 (theTimeStampInfo,
-                                  theInfo,
-                                  theTypeChamp));
-    }
-    
-    //----------------------------------------------------------------------------
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const PGrilleInfo& theInfo)
-    {
-      return PGrilleInfo(new TTGrilleInfo<eVersion>
-                            (theMeshInfo,
-                             theInfo));
-    }
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type)
-    {
-      return PGrilleInfo(new TTGrilleInfo<eVersion>
-                            (theMeshInfo,
-                             type));
-    }
-
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type,
-                 const TInt& nbNodes)
-    {
-      return PGrilleInfo(new TTGrilleInfo<eVersion>
-                            (theMeshInfo,
-                             type,
-                             nbNodes));
-    }
-
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type,
-                 const MED::TIntVector& nbNodeVec)
-    {
-      return PGrilleInfo(new TTGrilleInfo<eVersion>
-                            (theMeshInfo,
-                             type,
-                             nbNodeVec));
-    }
-    //----------------------------------------------------------------------------
-  };
-
-}
-
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_Utilities.cxx b/src/MEDWrapper/Base/MED_Utilities.cxx
deleted file mode 100644 (file)
index 1ba7bbd..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "MED_Utilities.hxx"
-#include "MED_Common.hxx"
-
-using namespace std;
-
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-// static int MYDEBUG = 0;
-#endif
-
-
-int MED::PrefixPrinter::myCounter = 0;
-
-MED::PrefixPrinter::PrefixPrinter(bool theIsActive):
-  myIsActive(theIsActive)
-{
-  if(myIsActive)
-    myCounter++;
-  MSG(MYDEBUG,"MED::PrefixPrinter::PrefixPrinter(...)- "<<myCounter);
-}
-
-MED::PrefixPrinter::~PrefixPrinter()
-{
-  if(myIsActive){
-    myCounter--;
-    if(myCounter < 0)
-      EXCEPTION(runtime_error,"PrefixPrinter::~PrefixPrinter() - myCounter("<<myCounter<<") < 0");
-  }
-}
-
-string MED::PrefixPrinter::GetPrefix()
-{
-  if(myCounter){
-    if(myCounter < 0)
-      EXCEPTION(runtime_error,"PrefixPrinter::~PrefixPrinter() - myCounter("<<myCounter<<") < 0");
-    return string(myCounter*2,' ');
-  }
-  return "";
-}
-
-
-static MED::TEntity2GeomSet Entity2GeomSet;
-
-bool InitEntity2GeomSet()
-{
-  using namespace MED;
-
-  TGeomSet& aGeomARETESet = Entity2GeomSet[eARETE];
-  aGeomARETESet.insert(eSEG2);
-  aGeomARETESet.insert(eSEG3);
-
-  TGeomSet& aGeomFACESet = Entity2GeomSet[eFACE];
-  aGeomFACESet.insert(eTRIA3);
-  aGeomFACESet.insert(eQUAD4);
-  aGeomFACESet.insert(eTRIA6);
-  aGeomFACESet.insert(eTRIA7);
-  aGeomFACESet.insert(eQUAD8);
-  aGeomFACESet.insert(eQUAD9);
-  aGeomFACESet.insert(ePOLYGONE);
-  aGeomFACESet.insert(ePOLYGON2);
-
-  TGeomSet& aGeomMAILLESet = Entity2GeomSet[eMAILLE];
-  aGeomMAILLESet.insert(ePOINT1);
-  aGeomMAILLESet.insert(aGeomARETESet.begin(),aGeomARETESet.end());
-  aGeomMAILLESet.insert(aGeomFACESet.begin(),aGeomFACESet.end());
-  aGeomMAILLESet.insert(eTETRA4);
-  aGeomMAILLESet.insert(ePYRA5);
-  aGeomMAILLESet.insert(ePENTA6);
-  aGeomMAILLESet.insert(eHEXA8);
-  aGeomMAILLESet.insert(eOCTA12);
-  aGeomMAILLESet.insert(eTETRA10);
-  aGeomMAILLESet.insert(ePYRA13);
-  aGeomMAILLESet.insert(ePENTA15);
-  aGeomMAILLESet.insert(ePENTA18);
-  aGeomMAILLESet.insert(eHEXA20);
-  aGeomMAILLESet.insert(eHEXA27);
-  aGeomMAILLESet.insert(ePOLYEDRE);
-
-  /* This combination allows reading nb of models of structure elements */
-  Entity2GeomSet[eSTRUCT_ELEMENT].insert(eAllGeoType); 
-
-  return true;
-}
-
-static bool anIsInited = InitEntity2GeomSet();
-
-const MED::TEntity2GeomSet& MED::GetEntity2GeomSet()
-{
-  return Entity2GeomSet;
-}
-
-
diff --git a/src/MEDWrapper/Base/MED_Utilities.hxx b/src/MEDWrapper/Base/MED_Utilities.hxx
deleted file mode 100644 (file)
index 32ccbe5..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_Utilities_HeaderFile
-#define MED_Utilities_HeaderFile
-
-#include "MED_WrapperBase.hxx"
-
-#include <iostream>     
-#include <sstream>      
-#include <string>
-#include <string.h>
-#include <stdexcept>
-
-
-namespace MED
-{
-  class MEDWRAPPER_EXPORT PrefixPrinter
-  {
-    static int myCounter;
-    bool myIsActive;
-  public:
-    PrefixPrinter(bool theIsActive = true);
-    ~PrefixPrinter();
-
-    static std::string GetPrefix();
-  };
-}
-
-#ifdef _DEBUG_
-  #define MSG(deb,msg) if(deb) std::cout<<MED::PrefixPrinter::GetPrefix()<<msg<<" ("<<__FILE__<<" ["<<__LINE__<<"])\n"
-  #define BEGMSG(deb,msg) if(deb) std::cout<<MED::PrefixPrinter::GetPrefix()<<msg
-  #define INITMSGA(deb,lev,msg) MED::PrefixPrinter aPrefixPrinter_##lev(deb); BEGMSG(deb,msg)
-  #define INITMSG(deb,msg) INITMSGA(deb,,msg)
-  #define ADDMSG(deb,msg) if(deb) std::cout<<msg
-#else
-  #define MSG(deb,msg)
-  #define BEGMSG(deb,msg)
-  #define INITMSGA(deb,lev,msg)
-  #define INITMSG(deb,msg)
-  #define ADDMSG(deb,msg)
-#endif
-
-
-#ifndef EXCEPTION
-
-#define EXCEPTION(TYPE, MSG) {\
-  std::ostringstream aStream;\
-  aStream<<__FILE__<<"["<<__LINE__<<"]::"<<MSG;\
-  throw TYPE(aStream.str().c_str());\
-}
-
-#endif
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_Vector.hxx b/src/MEDWrapper/Base/MED_Vector.hxx
deleted file mode 100644 (file)
index 5e3932d..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_Vector_HeaderFile
-#define MED_Vector_HeaderFile
-
-#include <vector>
-#include <stdexcept>
-
-//#if defined(_DEBUG_)
-#  define MED_TVECTOR_CHECK_RANGE
-//#endif
-
-namespace MED
-{
-
-  //! Main purpose to introduce the class was to customize operator [] 
-  template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
-  class TVector : public std::vector<_Tp, _Alloc>
-  {
-  public:
-    typedef size_t size_type;
-
-    typedef std::vector<_Tp, _Alloc> superclass;
-    typedef typename superclass::allocator_type allocator_type;
-
-    typedef _Tp value_type;
-    typedef value_type& reference;
-    typedef const value_type& const_reference;
-
-  protected:
-    void
-    check_range(size_type __n) const
-    {
-      if (__n >= this->size())
-        throw std::out_of_range("TVector [] access out of range");
-    }
-
-    const_reference
-    get_value(size_type __n) const
-    {
-      return superclass::operator[](__n);
-    }
-
-    reference
-    get_value(size_type __n)
-    {
-      return superclass::operator[](__n);
-    }
-
-  public:
-    explicit
-    TVector(const allocator_type& __a = allocator_type()): 
-      superclass(__a) 
-    {}
-    
-    TVector(size_type __n, const value_type& __val,
-            const allocator_type& __a = allocator_type()):
-      superclass(__n, __val, __a)
-    {}
-    
-    explicit
-    TVector(size_type __n):
-      superclass(__n)
-    {}
-
-    TVector(const TVector& __x):
-      superclass(__x)
-    {}
-
-    template<typename _InputIterator>
-    TVector(_InputIterator __first, _InputIterator __last,
-            const allocator_type& __a = allocator_type()):
-      superclass(__first, __last, __a)
-    {}
-
-    template<typename _Yp, typename _Al>
-    TVector(TVector<_Yp, _Al> __y):
-      superclass(__y.begin(), __y.end())
-    {}
-
-    TVector&
-    operator=(const TVector& __x)
-    {
-      superclass::operator=(__x);
-      return *this;
-    }
-
-    template<typename _Yp, typename _Al>
-    TVector&
-    operator=(TVector<_Yp, _Al> __y)
-    {
-      this->assign(__y.begin(), __y.end());
-      return *this;
-    }
-
-    reference
-    operator[](size_type __n)
-    {
-#if defined(MED_TVECTOR_CHECK_RANGE)
-      check_range(__n);
-#endif
-      return get_value(__n);
-    }
-
-    const_reference
-    operator[](size_type __n) const
-    {
-#if defined(MED_TVECTOR_CHECK_RANGE)
-      check_range(__n);
-#endif
-      return get_value(__n);
-    }
-
-    reference
-    at(size_type __n)
-    {
-      check_range(__n);
-      return get_value(__n);
-    }
-
-    const_reference
-    at(size_type __n) const
-    {
-      check_range(__n);
-      return get_value(__n);
-    }
-  };
-
-}
-
-#undef MED_TVECTOR_CHECK_RANGE
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_Wrapper.cxx b/src/MEDWrapper/Base/MED_Wrapper.cxx
deleted file mode 100644 (file)
index 7458722..0000000
+++ /dev/null
@@ -1,707 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//  File   : MED_Wrapper.cxx
-//  Author : Alexey PETROV
-//
-#include "MED_Wrapper.hxx"
-#include "MED_Utilities.hxx"
-#include <boost/version.hpp>
-
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-static int MYVALUEDEBUG = 0;
-#else
-// static int MYDEBUG = 0;
-// static int MYVALUEDEBUG = 0;
-#endif
-
-namespace MED
-{
-  TLockProxy
-  ::TLockProxy(TWrapper* theWrapper):
-    myWrapper(theWrapper)
-  {
-#if BOOST_VERSION >= 103500
-    myWrapper->myMutex.lock();
-#else
-    boost::detail::thread::lock_ops<TWrapper::TMutex>::lock(myWrapper->myMutex);
-#endif
-    INITMSG(MYDEBUG,"TLockProxy() - this -"<<this<<"; myWrapper = "<<myWrapper<<std::endl);
-  }
-  
-  TLockProxy
-  ::~TLockProxy()
-  {
-    INITMSG(MYDEBUG,"~TLockProxy() - this -"<<this<<"; myWrapper = "<<myWrapper<<std::endl);
-#if BOOST_VERSION >= 103500
-    myWrapper->myMutex.unlock();
-#else
-    boost::detail::thread::lock_ops<TWrapper::TMutex>::unlock(myWrapper->myMutex);
-#endif
-  }
-  
-  TWrapper*
-  TLockProxy
-  ::operator-> () const // never throws
-  {
-    return myWrapper;
-  }
-
-  //----------------------------------------------------------------------------
-  TWrapper::~TWrapper()
-  {
-  }
-
-  //----------------------------------------------------------------------------
-  PMeshInfo
-  TWrapper
-  ::GetPMeshInfo(TInt theId,
-                 TErr* theErr)
-  {
-    PMeshInfo anInfo = CrMeshInfo();
-    GetMeshInfo(theId,*anInfo,theErr);
-    return anInfo;
-  }
-
-
-  //----------------------------------------------------------------------------
-  PFamilyInfo 
-  TWrapper
-  ::GetPFamilyInfo(const PMeshInfo& theMeshInfo, 
-                   TInt theId,
-                   TErr* theErr)
-  {
-    // must be reimplemented in connection with mesh type eSTRUCTURE
-    //     if(theMeshInfo->GetType() != eNON_STRUCTURE)
-    //       return PFamilyInfo();
-    
-    TInt aNbAttr = GetNbFamAttr(theId,*theMeshInfo);
-    TInt aNbGroup = GetNbFamGroup(theId,*theMeshInfo);
-    PFamilyInfo anInfo = CrFamilyInfo(theMeshInfo,aNbGroup,aNbAttr);
-    GetFamilyInfo(theId,*anInfo,theErr);
-
-#ifdef _DEBUG_
-    std::string aName = anInfo->GetName();
-    INITMSG(MYDEBUG,"GetPFamilyInfo - aFamilyName = '"<<aName<<
-            "'; andId = "<<anInfo->GetId()<<
-            "; aNbAttr = "<<aNbAttr<<
-            "; aNbGroup = "<<aNbGroup<<"\n");
-    for(TInt iGroup = 0; iGroup < aNbGroup; iGroup++){
-      aName = anInfo->GetGroupName(iGroup);
-      INITMSG(MYDEBUG,"aGroupName = '"<<aName<<"'\n");
-    }
-#endif
-    
-    return anInfo;
-  }
-
-
-  //----------------------------------------------------------------------------
-  PNodeInfo
-  TWrapper
-  ::GetPNodeInfo(const PMeshInfo& theMeshInfo,
-                 TErr* theErr)
-  {
-    TInt aNbElems = GetNbNodes(*theMeshInfo);
-    if(aNbElems == 0){
-      return PNodeInfo();
-    }
-
-    PNodeInfo anInfo = CrNodeInfo(theMeshInfo,aNbElems);
-    GetNodeInfo(*anInfo,theErr);
-
-#ifdef _DEBUG_
-    TInt aDim = theMeshInfo->myDim;
-    TInt aNbElem = anInfo->GetNbElem();
-    INITMSG(MYDEBUG,"GetPNodeInfo: ");
-    {
-      INITMSG(MYDEBUG,"aCoords: "<<aNbElem<<": ");
-      TNodeCoord& aCoord = anInfo->myCoord;
-      for(TInt iElem = 0; iElem < aNbElem; iElem++){
-        for(TInt iDim = 0, anId = iElem*aDim; iDim < aDim; iDim++, anId++){
-          ADDMSG(MYVALUEDEBUG,aCoord[anId]<<",");
-        }
-        ADDMSG(MYVALUEDEBUG," ");
-      }
-      ADDMSG(MYDEBUG, std::endl);
-      
-      BEGMSG(MYVALUEDEBUG, "GetFamNum: ");
-      for(TInt iElem = 0; iElem < aNbElem; iElem++){
-        ADDMSG(MYVALUEDEBUG,anInfo->GetFamNum(iElem)<<", ");
-      }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-      
-      if(anInfo->IsElemNum()){
-        BEGMSG(MYVALUEDEBUG,"GetElemNum: ");
-        for(TInt iElem = 0; iElem < aNbElem; iElem++){
-          ADDMSG(MYVALUEDEBUG,anInfo->GetElemNum(iElem)<<", ");
-        }
-        ADDMSG(MYVALUEDEBUG, std::endl);
-      }
-    }
-    ADDMSG(MYDEBUG, std::endl);
-#endif
-    
-    return anInfo;
-  }
-
-  //----------------------------------------------------------------------------
-  PPolygoneInfo
-  TWrapper
-  ::GetPPolygoneInfo(const PMeshInfo& theMeshInfo,
-                     EEntiteMaillage theEntity, 
-                     EGeometrieElement theGeom, 
-                     EConnectivite theConnMode)
-  {
-    if(theMeshInfo->GetType() != eNON_STRUCTURE)
-      return PPolygoneInfo();
-
-    TInt aNbElem = GetNbPolygones(theMeshInfo,theEntity,theGeom,theConnMode);
-    TInt aConnSize = GetPolygoneConnSize(theMeshInfo,theEntity,theGeom,theConnMode);
-    PPolygoneInfo anInfo = CrPolygoneInfo(theMeshInfo,theEntity,theGeom,aNbElem,aConnSize,theConnMode);
-    GetPolygoneInfo(anInfo);
-
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG,"GetPPolygoneInfo"<<
-            " - theGeom = "<<theGeom<<
-            "; aNbElem = "<<aNbElem<<": ");
-    for(TInt iElem = 1; iElem < aNbElem; iElem++){
-      TCConnSlice aConnSlice = anInfo->GetConnSlice(iElem);
-      TInt aConnDim = aConnSlice.size();
-      for(TInt iConn = 0; iConn < aConnDim; iConn++){
-        ADDMSG(MYVALUEDEBUG,aConnSlice[iConn]<<",");
-      }
-      ADDMSG(MYDEBUG," ");
-    }
-    ADDMSG(MYDEBUG, std::endl);
-#endif
-
-    return anInfo;
-  }
-  
-  //----------------------------------------------------------------------------
-  PPolyedreInfo
-  TWrapper
-  ::GetPPolyedreInfo(const PMeshInfo& theMeshInfo,
-                     EEntiteMaillage theEntity, 
-                     EGeometrieElement theGeom, 
-                     EConnectivite theConnMode)
-  {
-    if(theMeshInfo->GetType() != eNON_STRUCTURE)
-      return PPolyedreInfo();
-    TInt aNbElem  = GetNbPolyedres(theMeshInfo,theEntity,theGeom,theConnMode);
-    TInt aNbFaces, aConnSize;
-    GetPolyedreConnSize(theMeshInfo,aNbFaces,aConnSize,theConnMode);
-    PPolyedreInfo anInfo = CrPolyedreInfo(theMeshInfo,theEntity,theGeom,aNbElem,aNbFaces,aConnSize,theConnMode);
-    GetPolyedreInfo(anInfo);
-
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG,"GetPPolyedreInfo"<<
-            " - theGeom = "<<theGeom<<
-            "; aNbElem = "<<aNbElem<<": ");
-    for(TInt iElem = 0; iElem < aNbElem; iElem++){
-      TCConnSliceArr aConnSliceArr = anInfo->GetConnSliceArr(iElem);
-      TInt aNbFaces = aConnSliceArr.size();
-      ADDMSG(MYDEBUG,"{");
-      for(TInt iFace = 0; iFace < aNbFaces; iFace++){
-        TCConnSlice aConnSlice = aConnSliceArr[iFace];
-        TInt aNbConn = aConnSlice.size();
-        ADDMSG(MYDEBUG,"[");
-        for(TInt iConn = 0; iConn < aNbConn; iConn++){
-          ADDMSG(MYVALUEDEBUG,aConnSlice[iConn]<<",");
-        }
-        ADDMSG(MYDEBUG,"] ");
-      }
-      ADDMSG(MYDEBUG,"} ");
-    }
-    ADDMSG(MYDEBUG, std::endl);
-#endif
-
-    return anInfo;
-  }
-  
-  //----------------------------------------------------------------------------
-  PElemInfo 
-  TWrapper
-  ::GetPElemInfo(const PMeshInfo& theMeshInfo,
-                 EEntiteMaillage theEntity, 
-                 EGeometrieElement theGeom, 
-                 EConnectivite theConnMode,
-                 TErr* theErr)
-  {
-    EMaillage aType = theMeshInfo->GetType();
-    if(aType == eNON_STRUCTURE){
-      switch(theGeom){
-      case ePOINT1:
-        if(theEntity == eNOEUD)
-          return GetPNodeInfo(theMeshInfo,theErr);
-        return GetPCellInfo(theMeshInfo,theEntity,theGeom,theConnMode,theErr);
-        break;
-      case ePOLYGONE:
-        return GetPPolygoneInfo(theMeshInfo,theEntity,theGeom,theConnMode);
-        break;
-      case ePOLYEDRE:
-        return GetPPolyedreInfo(theMeshInfo,theEntity,theGeom,theConnMode);
-        break;
-      default:
-        return GetPCellInfo(theMeshInfo,theEntity,theGeom,theConnMode,theErr);
-      }
-    } else {
-      PGrilleInfo aGrille = GetPGrilleInfo(theMeshInfo);
-
-      TInt nbElems;
-      EBooleen theIsElemNum = eFAUX;
-      // nodes
-      switch(theGeom){
-      case ePOINT1:
-        nbElems = aGrille->GetNbNodes();
-        theIsElemNum = eVRAI;
-        break;
-      case eSEG2:
-      case eQUAD4:
-      case eHEXA8:
-        nbElems = aGrille->GetNbCells();
-        break;
-      default:
-        nbElems = 0;
-      }
-      
-      TIntVector aFamNum;
-      TIntVector aElemNum;
-      TStringVector aElemNames;
-      
-      PElemInfo aElemInfo;
-
-      if(theGeom == ePOINT1){
-        aElemInfo = CrElemInfo(theMeshInfo,
-                               nbElems,
-                               theIsElemNum);
-        MED::TElemInfo &aTElemInfo = *aElemInfo;
-
-        // must be reimplemente in connection with mesh type eSTRUCTURE
-//      GetNumeration(aTElemInfo,
-//                    nbElems,
-//                    theEntity,
-//                    theGeom,
-//                    theErr);
-        
-        GetFamilies(aTElemInfo,
-                    nbElems,
-                    theEntity,
-                    theGeom,
-                    theErr);
-        
-        // must be reimplemente in connection with mesh type eSTRUCTURE
-//      GetNames(aTElemInfo,
-//               nbElems,
-//               theEntity,
-//               theGeom,
-//               theErr);
-      } else {
-        aElemInfo = CrElemInfo(theMeshInfo,
-                               nbElems,
-                               aFamNum,
-                               aElemNum,
-                               aElemNames);
-      }
-      
-      return aElemInfo;
-    }
-    return PElemInfo();
-  }
-
-
-  //----------------------------------------------------------------------------
-  PCellInfo 
-  TWrapper
-  ::GetPCellInfo(const PMeshInfo& theMeshInfo,
-                 EEntiteMaillage theEntity, 
-                 EGeometrieElement theGeom, 
-                 EConnectivite theConnMode,
-                 TErr* theErr)
-  {
-    if(theMeshInfo->GetType() != eNON_STRUCTURE)
-      return PCellInfo();
-    TInt aNbElem = GetNbCells(theMeshInfo,theEntity,theGeom,theConnMode);
-    PCellInfo anInfo = CrCellInfo(theMeshInfo,theEntity,theGeom,aNbElem,theConnMode);
-    GetCellInfo(anInfo,theErr);
-
-#ifdef _DEBUG_
-    TInt aConnDim = anInfo->GetConnDim();
-    INITMSG(MYDEBUG,"GetPCellInfo - theEntity = "<<theEntity<<"; theGeom = "<<theGeom<<"; aConnDim: "<<aConnDim<<"\n");
-    BEGMSG(MYDEBUG,"GetPCellInfo - aNbElem: "<<aNbElem<<": ");
-    for(TInt iElem = 0; iElem < aNbElem; iElem++){
-      TCConnSlice aConnSlice = anInfo->GetConnSlice(iElem);
-      for(TInt iConn = 0; iConn < aConnDim; iConn++){
-        ADDMSG(MYVALUEDEBUG,aConnSlice[iConn]<<",");
-      }
-      ADDMSG(MYVALUEDEBUG," ");
-    }
-    ADDMSG(MYDEBUG, std::endl);
-
-    BEGMSG(MYVALUEDEBUG,"GetPCellInfo - GetFamNum: ");
-    for(TInt iElem = 0; iElem < aNbElem; iElem++){
-      ADDMSG(MYVALUEDEBUG,anInfo->GetFamNum(iElem)<<", ");
-    }
-    ADDMSG(MYVALUEDEBUG, std::endl);
-
-    if(anInfo->IsElemNum()){
-      BEGMSG(MYVALUEDEBUG,"GetPCellInfo - GetElemNum: ");
-      for(TInt iElem = 0; iElem < aNbElem; iElem++){
-        ADDMSG(MYVALUEDEBUG,anInfo->GetElemNum(iElem)<<", ");
-      }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-    }
-    ADDMSG(MYDEBUG, std::endl);
-#endif
-    
-    return anInfo;
-  }
-
-  //----------------------------------------------------------------------------
-  //! Read a MEDWrapped representation of MED Balls from the MED file
-  PBallInfo
-  TWrapper
-  ::GetPBallInfo(const PMeshInfo& theMeshInfo)
-  {
-    TInt nbBalls = GetNbBalls(theMeshInfo);
-    if ( nbBalls < 1 ) return PBallInfo();
-
-    PBallInfo anInfo = CrBallInfo( theMeshInfo, nbBalls );
-    GetBallInfo(anInfo);
-
-    return anInfo;
-  }
-  //----------------------------------------------------------------------------
-  PFieldInfo
-  TWrapper
-  ::GetPFieldInfo(const PMeshInfo& theMeshInfo, 
-                  TInt theId,
-                  TErr* theErr)
-  {
-    TInt aNbComp = GetNbComp(theId);
-    PFieldInfo anInfo = CrFieldInfo(theMeshInfo,aNbComp);
-    GetFieldInfo(theId,*anInfo,theErr);
-
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG,
-            "GetPFieldInfo "<<
-            "- aName = '"<<anInfo->GetName()<<"'"<<
-            "; aType = "<<anInfo->GetType()<<
-            "; aNbComp = "<<aNbComp<<
-            std::endl);
-#endif
-    
-    return anInfo;
-  }
-
-
-  //----------------------------------------------------------------------------
-  PTimeStampInfo
-  TWrapper
-  ::GetPTimeStampInfo(const PFieldInfo& theFieldInfo,
-                      EEntiteMaillage theEntity,
-                      const TGeom2Size& theGeom2Size,
-                      TInt theId,
-                      TErr* theErr)
-  {
-    PTimeStampInfo anInfo = CrTimeStampInfo(theFieldInfo,theEntity,theGeom2Size);
-    GetTimeStampInfo(theId,*anInfo,theErr);
-
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG,"GetPTimeStampInfo - anEntity = "<<anInfo->GetEntity()<<"\n");
-    TGeom2NbGauss& aGeom2NbGauss = anInfo->myGeom2NbGauss;
-    TGeom2NbGauss::const_iterator anIter = aGeom2NbGauss.begin();
-    for(; anIter != aGeom2NbGauss.end(); anIter++){
-      const EGeometrieElement& aGeom = anIter->first;
-      INITMSG(MYDEBUG,"aGeom = "<<aGeom<<" - "<<aGeom2NbGauss[aGeom]<<";\n");
-    }
-#endif
-
-    return anInfo;
-  }
-
-
-  //----------------------------------------------------------------------------
-  PProfileInfo
-  TWrapper
-  ::GetPProfileInfo(TInt theId,
-                    EModeProfil theMode,
-                    TErr* theErr)
-  {
-    TProfileInfo::TInfo aPreInfo = GetProfilePreInfo(theId);
-    PProfileInfo anInfo = CrProfileInfo(aPreInfo,theMode);
-    GetProfileInfo(theId,*anInfo,theErr);
-
-    return anInfo;
-  }
-
-
-  //----------------------------------------------------------------------------
-  PTimeStampValueBase
-  TWrapper
-  ::CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     const TGeom2Profile& theGeom2Profile,
-                     EModeSwitch theMode)
-  {
-    PFieldInfo aFieldInfo = theTimeStampInfo->GetFieldInfo();
-    return CrTimeStampValue(theTimeStampInfo,
-                            aFieldInfo->GetType(),
-                            theGeom2Profile,
-                            theMode);
-  }
-
-  //----------------------------------------------------------------------------
-  PTimeStampValueBase
-  TWrapper
-  ::CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     const PTimeStampValueBase& theInfo)
-  {
-    PFieldInfo aFieldInfo = theTimeStampInfo->GetFieldInfo();
-    return CrTimeStampValue(theTimeStampInfo,
-                            theInfo,
-                            aFieldInfo->GetType());
-  }
-
-  //----------------------------------------------------------------------------
-  template<class TimeStampValueType>
-  void
-  Print(SharedPtr<TimeStampValueType> theTimeStampValue)
-  {
-    INITMSG(MYDEBUG,"Print - TimeStampValue\n");
-    typename TimeStampValueType::TTGeom2Value& aGeom2Value = theTimeStampValue->myGeom2Value;
-    typename TimeStampValueType::TTGeom2Value::const_iterator anIter = aGeom2Value.begin();
-    for(; anIter != aGeom2Value.end(); anIter++){
-      const EGeometrieElement& aGeom = anIter->first;
-      const typename TimeStampValueType::TTMeshValue& aMeshValue = anIter->second;
-      TInt aNbElem = aMeshValue.myNbElem;
-      TInt aNbGauss = aMeshValue.myNbGauss;
-      TInt aNbComp = aMeshValue.myNbComp;
-      INITMSG(MYDEBUG,"aGeom = "<<aGeom<<" - "<<aNbElem<<": ");
-      for(TInt iElem = 0; iElem < aNbElem; iElem++){
-        typename TimeStampValueType::TTMeshValue::TCValueSliceArr aValueSliceArr = aMeshValue.GetGaussValueSliceArr(iElem);
-        ADDMSG(MYVALUEDEBUG,"{");
-        for(TInt iGauss = 0; iGauss < aNbGauss; iGauss++){
-          const typename TimeStampValueType::TTMeshValue::TCValueSlice& aValueSlice = aValueSliceArr[iGauss];
-          for(TInt iComp = 0; iComp < aNbComp; iComp++){
-            ADDMSG(MYVALUEDEBUG,aValueSlice[iComp]<<" ");
-          }
-          ADDMSG(MYVALUEDEBUG,"| ");
-        }
-        ADDMSG(MYVALUEDEBUG,"} ");
-      }
-      ADDMSG(MYDEBUG,"\n");
-    }
-  }
-
-  //----------------------------------------------------------------------------
-  PTimeStampValueBase 
-  TWrapper
-  ::GetPTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                       const TMKey2Profile& theMKey2Profile,
-                       const TKey2Gauss& theKey2Gauss,
-                       TErr* theErr)
-  {
-    PFieldInfo aFieldInfo = theTimeStampInfo->GetFieldInfo();
-    PTimeStampValueBase anInfo = CrTimeStampValue(theTimeStampInfo,
-                                                  aFieldInfo->GetType());
-    GetTimeStampValue(anInfo, 
-                      theMKey2Profile, 
-                      theKey2Gauss,
-                      theErr);
-#ifdef _DEBUG_
-    if(aFieldInfo->GetType() == eFLOAT64)
-      Print<TFloatTimeStampValue>(anInfo);
-    else
-      Print<TIntTimeStampValue>(anInfo);
-#endif
-    return anInfo;
-  }
-
-  //----------------------------------------------------------------------------
-  void 
-  TWrapper
-  ::GetTimeStampVal(const PTimeStampVal& theVal,
-                    const TMKey2Profile& theMKey2Profile,
-                    const TKey2Gauss& theKey2Gauss,
-                    TErr* theErr)
-  {
-    PTimeStampInfo aTimeStampInfo = theVal->GetTimeStampInfo();
-    PFieldInfo aFieldInfo = aTimeStampInfo->GetFieldInfo();
-    if(aFieldInfo->GetType() == eFLOAT64)
-      GetTimeStampValue(theVal,
-                        theMKey2Profile,
-                        theKey2Gauss,
-                        theErr);
-    else{
-      PTimeStampValueBase aVal = CrTimeStampValue(aTimeStampInfo,
-                                                  theVal,
-                                                  eINT);
-      GetTimeStampValue(aVal,
-                        theMKey2Profile,
-                        theKey2Gauss,
-                        theErr);
-      CopyTimeStampValueBase(aVal, theVal);
-    }
-  }
-
-  //----------------------------------------------------------------------------
-  void
-  TWrapper
-  ::SetTimeStamp(const PTimeStampVal& theVal,
-                 TErr* theErr)
-  {
-    PTimeStampInfo aTimeStampInfo = theVal->GetTimeStampInfo();
-    PFieldInfo aFieldInfo = aTimeStampInfo->GetFieldInfo();
-    if(aFieldInfo->GetType() == eFLOAT64)
-      SetTimeStampValue(theVal, theErr);
-    else{
-      PTimeStampValueBase aVal = CrTimeStampValue(aTimeStampInfo,
-                                                  eINT,
-                                                  theVal->GetGeom2Profile(),
-                                                  theVal->GetModeSwitch());
-      CopyTimeStampValueBase(theVal, aVal);
-      SetTimeStampValue(aVal, theErr);
-    }
-  }
-
-  //----------------------------------------------------------------------------
-  PTimeStampVal
-  TWrapper
-  ::CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
-                   const TGeom2Profile& theGeom2Profile,
-                   EModeSwitch theMode)
-  {
-    return CrTimeStampValue(theTimeStampInfo,
-                            eFLOAT64,
-                            theGeom2Profile,
-                            theMode);
-  }
-
-  //----------------------------------------------------------------------------
-  PTimeStampVal
-  TWrapper
-  ::CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
-                   const PTimeStampVal& theInfo)
-  {
-    return CrTimeStampValue(theTimeStampInfo,
-                            theInfo,
-                            eFLOAT64);
-  }
-
-  //----------------------------------------------------------------------------
-  PTimeStampVal 
-  TWrapper
-  ::GetPTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
-                     const TMKey2Profile& theMKey2Profile,
-                     const TKey2Gauss& theKey2Gauss,
-                     TErr* theErr)
-  {
-    PTimeStampVal anInfo = CrTimeStampVal(theTimeStampInfo);
-    GetTimeStampVal(anInfo, 
-                    theMKey2Profile, 
-                    theKey2Gauss,
-                    theErr);
-    return anInfo;
-  }
-
-  //----------------------------------------------------------------------------
-  PGrilleInfo
-  TWrapper
-  ::GetPGrilleInfo(const PMeshInfo& theMeshInfo)
-  {
-    if(theMeshInfo->GetType() != eSTRUCTURE)
-      return PGrilleInfo();
-
-    EGrilleType type;
-    GetGrilleType(*theMeshInfo,type);
-    PGrilleInfo anInfo;
-    if(type == eGRILLE_STANDARD){
-      const TInt nnoeuds = GetNbNodes(*theMeshInfo);
-      anInfo = CrGrilleInfo(theMeshInfo,type,nnoeuds);
-    }
-    else {
-      TIntVector aVec;
-      aVec.resize(theMeshInfo->GetDim());
-      for(int aAxe=0;aAxe<theMeshInfo->GetDim();aAxe++){
-        ETable aATable = eCOOR_IND1;
-        switch(aAxe){
-        case 0:
-          aATable = eCOOR_IND1;
-          break;
-        case 1:
-          aATable = eCOOR_IND2;
-          break;
-        case 2:
-          aATable = eCOOR_IND3;
-          break;
-        }
-        aVec[aAxe] = GetNbNodes(*theMeshInfo,aATable);
-      }
-      anInfo = CrGrilleInfo(theMeshInfo,type,aVec);
-    }
-
-    GetGrilleInfo(anInfo);
-    anInfo->SetGrilleType(type);
-
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG,"GetPGrilleInfo: ");
-    {
-      TInt aNbElem = anInfo->GetNbNodes();
-      BEGMSG(MYVALUEDEBUG,"GetFamNumNode: ");
-      for(TInt iElem = 0; iElem < aNbElem; iElem++){
-        ADDMSG(MYVALUEDEBUG,anInfo->GetFamNumNode(iElem)<<", ");
-      }
-      TInt aNbCells = anInfo->GetNbCells();
-      BEGMSG(MYVALUEDEBUG,"GetFamNum: ");
-      for(TInt iElem = 0; iElem < aNbCells; iElem++){
-        ADDMSG(MYVALUEDEBUG,anInfo->GetFamNum(iElem)<<", ");
-      }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-      BEGMSG(MYVALUEDEBUG,"GetCoordName: ");
-      for(TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++){
-        ADDMSG(MYVALUEDEBUG,anInfo->GetCoordName(iElem)<<", ");
-      }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-      BEGMSG(MYVALUEDEBUG,"GetCoordUnit: ");
-      for(TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++){
-        ADDMSG(MYVALUEDEBUG,anInfo->GetCoordUnit(iElem)<<", ");
-      }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-      
-    }
-#endif
-    
-    return anInfo;
-  }
-  
-  //----------------------------------------------------------------------------
-  PGrilleInfo
-  TWrapper
-  ::GetPGrilleInfo(const PMeshInfo& theMeshInfo,
-                   const PGrilleInfo& theInfo)
-  {
-    PGrilleInfo anInfo = CrGrilleInfo(theMeshInfo,theInfo);
-    return anInfo;
-  }  
-}
diff --git a/src/MEDWrapper/Base/MED_Wrapper.hxx b/src/MEDWrapper/Base/MED_Wrapper.hxx
deleted file mode 100644 (file)
index 6bfb241..0000000
+++ /dev/null
@@ -1,1052 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef MED_Wrapper_HeaderFile
-#define MED_Wrapper_HeaderFile
-
-#include "MED_WrapperBase.hxx"
-
-#include "MED_Structures.hxx"
-#include "MED_Algorithm.hxx"
-
-#include <boost/thread/mutex.hpp>
-
-namespace MED
-{
-
-  //----------------------------------------------------------------------------
-  //! Define a base class that wraps the MED API
-  struct MEDWRAPPER_EXPORT TWrapper
-  {
-    typedef boost::mutex TMutex;
-    //! This is a synchronization primitive which allow to support thread safety for the MED access
-    TMutex myMutex;
-
-    virtual
-    ~TWrapper();
-
-    //----------------------------------------------------------------------------
-    //! Gets version of the MED library used for the MED file
-    virtual 
-    EVersion
-    GetVersion() = 0;
-    
-    //----------------------------------------------------------------------------
-    //! Creates a MEDWrapper MED Mesh representation
-    virtual 
-    PMeshInfo 
-    CrMeshInfo(TInt theDim = 0, TInt theSpaceDim = 0,
-               const std::string& theValue = "",
-               EMaillage theType = eNON_STRUCTURE,
-               const std::string& theDesc = "") = 0;
-
-    //! A copy-constructor for the MEDWrapper MED Mesh representation
-    virtual 
-    PMeshInfo 
-    CrMeshInfo(const PMeshInfo& theInfo) = 0;
-
-    //! Read number of MED Mesh entities in the defined MED file
-    virtual 
-    TInt 
-    GetNbMeshes(TErr* theErr = NULL) = 0;
-    
-    //! Read a MEDWrapper MED Mesh representation by its number
-    virtual 
-    void 
-    GetMeshInfo(TInt theMeshId, 
-                TMeshInfo& theInfo,
-                TErr* theErr = NULL) = 0;
-
-    //! Write the MEDWrapper MED Mesh representation in the defined MED file
-    virtual 
-    void
-    SetMeshInfo(const TMeshInfo& theInfo,
-                TErr* theErr = NULL) = 0;
-    
-    //! Read a MEDWrapper MED Mesh representation by its number
-    virtual 
-    PMeshInfo
-    GetPMeshInfo(TInt theId,
-                 TErr* theErr = NULL);
-
-
-    //----------------------------------------------------------------------------
-    //! Read number of MED Family entities in the defined MED file
-    virtual 
-    TInt
-    GetNbFamilies(const TMeshInfo& theMeshInfo,
-                  TErr* theErr = NULL) = 0;
-
-    //! Read number of attributes for defined MED Family
-    virtual 
-    TInt
-    GetNbFamAttr(TInt theFamId, 
-                 const TMeshInfo& theInfo,
-                 TErr* theErr = NULL) = 0;
-    
-    //! Read number of MED Groups where MED Family with the number belong to
-    virtual
-    TInt
-    GetNbFamGroup(TInt theFamId, 
-                  const TMeshInfo& theInfo,
-                  TErr* theErr = NULL) = 0;
-    
-    //! Read a MEDWrapper MED Family representation by its number
-    virtual
-    void
-    GetFamilyInfo(TInt theFamId, 
-                  TFamilyInfo& theInfo,
-                  TErr* theErr = NULL) = 0;
-    
-    //! Write a MEDWrapper MED Family representation by its number
-    virtual
-    void
-    SetFamilyInfo(const TFamilyInfo& theInfo,
-                  TErr* theErr = NULL) = 0;
-    
-    //! Creates a MEDWrapper MED Family representation
-    virtual 
-    PFamilyInfo
-    CrFamilyInfo(const PMeshInfo& theMeshInfo,
-                 TInt theNbGroup = 0, 
-                 TInt theNbAttr = 0,
-                 TInt theId = 0,
-                 const std::string& theValue = "") = 0;
-    
-    //! Creates a MEDWrapper MED Family representation
-    virtual 
-    PFamilyInfo
-    CrFamilyInfo(const PMeshInfo& theMeshInfo,
-                 const std::string& theValue,
-                 TInt theId,
-                 const TStringSet& theGroupNames, 
-                 const TStringVector& theAttrDescs = TStringVector(), 
-                 const TIntVector& theAttrIds = TIntVector(), 
-                 const TIntVector& theAttrVals = TIntVector()) = 0;
-    
-    //! A copy-constructor for the MEDWrapper MED Family representation
-    virtual
-    PFamilyInfo
-    CrFamilyInfo(const PMeshInfo& theMeshInfo,
-                 const PFamilyInfo& theInfo) = 0;
-    
-    //! Write a MEDWrapper MED Family representation by its number
-    PFamilyInfo
-    GetPFamilyInfo(const PMeshInfo& theMeshInfo, 
-                   TInt theId,
-                   TErr* theErr = NULL);
-    
-    //----------------------------------------------------------------------------
-    //! Read sequence of names for any descendant of TElemInfo
-    virtual
-    void
-    GetNames(TElemInfo& theInfo,
-             TInt theNb,
-             EEntiteMaillage theEntity, 
-             EGeometrieElement theGeom,
-             TErr* theErr = NULL)
-    {}
-
-    //! Read sequence of numerous for any descendant of TElemInfo
-    virtual
-    void
-    GetNumeration(TElemInfo& theInfo,
-                  TInt theNb,
-                  EEntiteMaillage theEntity, 
-                  EGeometrieElement theGeom,
-                  TErr* theErr = NULL)
-    {}
-
-    //! Read sequence MED Family indexes for any descendant of TElemInfo
-    virtual
-    void
-    GetFamilies(TElemInfo& theInfo,
-                TInt theNb,
-                EEntiteMaillage theEntity, 
-                EGeometrieElement theGeom,
-                TErr* theErr = NULL)
-    {}
-
-    //! Write sequence of names for any descendant of TElemInfo
-    virtual
-    void
-    SetNames(const TElemInfo& theInfo,
-             EEntiteMaillage theEntity, 
-             EGeometrieElement theGeom,
-             TErr* theErr = NULL)
-    {}
-
-    //! Write sequence of numerous for any descendant of TElemInfo
-    virtual
-    void
-    SetNumeration(const TElemInfo& theInfo,
-                  EEntiteMaillage theEntity, 
-                  EGeometrieElement theGeom,
-                  TErr* theErr = NULL)
-    {}
-
-    //! Write sequence MED Family indexes for any descendant of TElemInfo
-    virtual
-    void
-    SetFamilies(const TElemInfo& theInfo,
-                EEntiteMaillage theEntity, 
-                EGeometrieElement theGeom,
-                TErr* theErr = NULL)
-    {}
-
-    //! Read a MEDWrapper MED Element representation from defined MED file
-    PElemInfo
-    GetPElemInfo(const PMeshInfo& theMeshInfo,
-                 EEntiteMaillage theEntity = eNOEUD, 
-                 EGeometrieElement theGeom = ePOINT1, 
-                 EConnectivite theConnMode = eNOD,
-                 TErr* theErr = NULL);
-
-    //----------------------------------------------------------------------------
-    //! Read number of nodes in defined MED Mesh
-    virtual
-    TInt
-    GetNbNodes(const TMeshInfo& theMeshInfo,
-               TErr* theErr = NULL) = 0;
-    
-    virtual
-    TInt
-    GetNbNodes(const TMeshInfo& theMeshInfo,
-               ETable theTable,
-               TErr* theErr = NULL)
-    {
-      return 0;
-    }
-
-    //! Read a MEDWrapper MED Nodes representation from defined MED file
-    virtual
-    void
-    GetNodeInfo(TNodeInfo& theInfo,
-                TErr* theErr = NULL) = 0;
-
-    //! Write the MEDWrapper MED Nodes representation into defined MED file
-    virtual 
-    void
-    SetNodeInfo(const TNodeInfo& theInfo,
-                TErr* theErr = NULL) = 0;
-    
-    //! Creates a MEDWrapper MED Nodes representation
-    virtual 
-    PElemInfo
-    CrElemInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               EBooleen theIsElemNum = eVRAI,
-               EBooleen theIsElemNames = eVRAI)
-    {
-      return PElemInfo();
-    }
-
-    //! Creates a MEDWrapper MED Nodes representation
-    virtual 
-    PElemInfo
-    CrElemInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               const TIntVector& theFamNum,
-               const TIntVector& aElemNum,
-               const TStringVector& aElemNames)
-    {
-      return PElemInfo();
-    }
-
-    //! Creates a MEDWrapper MED Nodes representation
-    virtual
-    PNodeInfo
-    CrNodeInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               EModeSwitch theMode = eFULL_INTERLACE,
-               ERepere theSystem = eCART, 
-               EBooleen theIsElemNum = eVRAI,
-               EBooleen theIsElemNames = eVRAI) = 0;
-
-    //! Creates a MEDWrapper MED Nodes representation
-    virtual 
-    PNodeInfo
-    CrNodeInfo(const PMeshInfo& theMeshInfo, 
-               const TFloatVector& theNodeCoords,
-               EModeSwitch theMode = eFULL_INTERLACE,
-               ERepere theSystem = eCART, 
-               const TStringVector& theCoordNames = TStringVector(),
-               const TStringVector& theCoordUnits = TStringVector(),
-               const TIntVector& theFamilyNums = TIntVector(),
-               const TIntVector& theElemNums = TIntVector(),
-               const TStringVector& theElemNames = TStringVector()) = 0;
-    
-    //! A copy-constructor for the MEDWrapper MED Nodes representation
-    virtual
-    PNodeInfo
-    CrNodeInfo(const PMeshInfo& theMeshInfo,
-               const PNodeInfo& theInfo) = 0;
-    
-    //! Read a MEDWrapper MED Nodes representation from defined MED file
-    PNodeInfo
-    GetPNodeInfo(const PMeshInfo& theMeshInfo,
-                 TErr* theErr = NULL);
-    
-    //----------------------------------------------------------------------------
-    //! Read a MEDWrapper MED Polygones representation from defined MED file
-    /*! This feature is supported only for version of 2.2 and higher */
-    virtual
-    void
-    GetPolygoneInfo(TPolygoneInfo& theInfo,
-                    TErr* theErr = NULL) 
-    {}
-
-    //! Write a MEDWrapper MED Polygones representation from defined MED file
-    /*! This feature is supported only for version of 2.2 and higher */
-    virtual
-    void
-    SetPolygoneInfo(const TPolygoneInfo& theInfo,
-                    TErr* theErr = NULL) 
-    {}
-
-    //! Read number of MED Polygones in defined MED Mesh
-    /*! This feature is supported only for version of 2.2 and higher */
-    virtual
-    TInt
-    GetNbPolygones(const TMeshInfo& theMeshInfo,
-                   EEntiteMaillage theEntity,
-                   EGeometrieElement theGeom,
-                   EConnectivite theConnMode = eNOD,
-                   TErr* theErr = NULL) 
-    { 
-      return 0;
-    }
-
-    //! Read connectivity infroamtion for the MED Polygones in defined MED Mesh
-    /*! This feature is supported only for version of 2.2 and higher */
-    virtual
-    TInt
-    GetPolygoneConnSize(const TMeshInfo& theMeshInfo,
-                        EEntiteMaillage theEntity,
-                        EGeometrieElement theGeom,
-                        EConnectivite theConnMode = eNOD,
-                        TErr* theErr = NULL)
-    { 
-      return 0;
-    }
-    
-    //! Creates a MEDWrapper MED Polygones representation
-    /*! This feature is supported only for version of 2.2 and higher */
-    virtual 
-    PPolygoneInfo
-    CrPolygoneInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   TInt theNbElem,
-                   TInt theConnSize,
-                   EConnectivite theConnMode = eNOD,
-                   EBooleen theIsElemNum = eVRAI,
-                   EBooleen theIsElemNames = eVRAI)
-    {
-      return PPolygoneInfo();
-    }
-    
-    //! Creates a MEDWrapper MED Polygones representation
-    /*! This feature is supported only for version of 2.2 and higher */
-    virtual
-    PPolygoneInfo 
-    CrPolygoneInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   const TIntVector& theIndexes,
-                   const TIntVector& theConnectivities,
-                   EConnectivite theConnMode = eNOD,
-                   const TIntVector& theFamilyNums = TIntVector(),
-                   const TIntVector& theElemNums = TIntVector(),
-                   const TStringVector& theElemNames = TStringVector())
-    {
-      return PPolygoneInfo();
-    }
-
-    //! A copy-constructor for the MEDWrapper MED Polygones representation
-    virtual
-    PPolygoneInfo
-    CrPolygoneInfo(const PMeshInfo& theMeshInfo,
-                   const PPolygoneInfo& theInfo)
-    {
-      return PPolygoneInfo();
-    }
-    
-    //! Read a MEDWrapper MED Polygones representation from defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    PPolygoneInfo
-    GetPPolygoneInfo(const PMeshInfo& theMeshInfo,
-                     EEntiteMaillage theEntity, 
-                     EGeometrieElement theGeom, 
-                     EConnectivite theConnMode = eNOD);
-    
-    //----------------------------------------------------------------------------
-    //! Read a MEDWrapper MED Polyedres representation from defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual 
-    void
-    GetPolyedreInfo(TPolyedreInfo& theInfo,
-                    TErr* theErr = NULL) 
-    {}
-
-    //! Write a MEDWrapper MED Polyedres representation from defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    void
-    SetPolyedreInfo(const TPolyedreInfo& theInfo,
-                    TErr* theErr = NULL)
-    {}
-    
-    //! Read number of MED Polyedres in defined MED Mesh
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    TInt
-    GetNbPolyedres(const TMeshInfo& theMeshInfo,
-                   EEntiteMaillage theEntity,
-                   EGeometrieElement theGeom,
-                   EConnectivite theConnMode = eNOD,
-                   TErr* theErr = NULL)
-    { 
-      return 0;
-    }
-
-    //! Read connectivity infroamtion for the MED Polyedres in defined MED Mesh
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual 
-    void
-    GetPolyedreConnSize(const TMeshInfo& theMeshInfo,
-                        TInt& theNbFaces,
-                        TInt& theConnSize,
-                        EConnectivite theConnMode = eNOD,
-                        TErr* theErr = NULL)
-    {
-      theNbFaces = theConnSize = 0;
-    }
-    
-    virtual
-    PPolyedreInfo
-    CrPolyedreInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   TInt theNbElem,
-                   TInt theNbFaces,
-                   TInt theConnSize,
-                   EConnectivite theConnMode = eNOD,
-                   EBooleen theIsElemNum = eVRAI,
-                   EBooleen theIsElemNames = eVRAI)
-    {
-      return PPolyedreInfo();
-    }
-    
-    //! Creates a MEDWrapper MED Polyedres representation
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    PPolyedreInfo
-    CrPolyedreInfo(const PMeshInfo& theMeshInfo, 
-                   EEntiteMaillage theEntity, 
-                   EGeometrieElement theGeom,
-                   const TIntVector& theIndexes,
-                   const TIntVector& theFaces,
-                   const TIntVector& theConnectivities,
-                   EConnectivite theConnMode = eNOD,
-                   const TIntVector& theFamilyNums = TIntVector(),
-                   const TIntVector& theElemNums = TIntVector(),
-                   const TStringVector& theElemNames = TStringVector())
-    {
-      return PPolyedreInfo();
-    }
-
-    //! A copy-constructor for the MEDWrapper MED Polyedres representation
-    virtual
-    PPolyedreInfo
-    CrPolyedreInfo(const PMeshInfo& theMeshInfo,
-                   const PPolyedreInfo& theInfo)
-    {
-      return PPolyedreInfo();
-    }
-    
-    //! Read a MEDWrapper MED Polyedres representation from defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    PPolyedreInfo
-    GetPPolyedreInfo(const PMeshInfo& theMeshInfo,
-                     EEntiteMaillage theEntity, 
-                     EGeometrieElement theGeom, 
-                     EConnectivite theConnMode = eNOD);
-    
-    //----------------------------------------------------------------------------
-    //! Get TEntityInfo which contains brief information about existing cells and their destribution among MED ENTITIES
-    virtual
-    TEntityInfo
-    GetEntityInfo(const TMeshInfo& theMeshInfo,
-                  EConnectivite theConnMode = eNOD,
-                  TErr* theErr = NULL) = 0;
-    
-    //! Read number of cells for defined MED Mesh, ENTITY and geometrical type with define mode of connectivity
-    virtual
-    TInt
-    GetNbCells(const TMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom, 
-               EConnectivite theConnMode = eNOD,
-               TErr* theErr = NULL) = 0;
-    
-    //! Read a MEDWrapper MED Cells representation from defined MED file
-    virtual
-    void
-    GetCellInfo(TCellInfo& theInfo,
-                TErr* theErr = NULL) = 0;
-    
-    //! Write the MEDWrapper MED Cells representation into defined MED file
-    virtual 
-    void
-    SetCellInfo(const TCellInfo& theInfo,
-                TErr* theErr = NULL) = 0;
-    
-    //! Creates a MEDWrapper MED Cells representation
-    virtual
-    PCellInfo
-    CrCellInfo(const PMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               TInt theNbElem,
-               EConnectivite theConnMode = eNOD,
-               EBooleen theIsElemNum = eVRAI,
-               EBooleen theIsElemNames = eVRAI,
-               EModeSwitch theMode = eFULL_INTERLACE) = 0;
-    
-    //! Creates a MEDWrapper MED Cells representation
-    virtual
-    PCellInfo
-    CrCellInfo(const PMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               const TIntVector& theConnectivities,
-               EConnectivite theConnMode = eNOD,
-               const TIntVector& theFamilyNums = TIntVector(),
-               const TIntVector& theElemNums = TIntVector(),
-               const TStringVector& theElemNames = TStringVector(),
-               EModeSwitch theMode = eFULL_INTERLACE) = 0;
-    
-    //! A copy-constructor for the MEDWrapper MED Cells representation
-    virtual
-    PCellInfo
-    CrCellInfo(const PMeshInfo& theMeshInfo,
-               const PCellInfo& theInfo) = 0;
-    
-    //! Read a MEDWrapper MED Cells representation from defined MED file
-    PCellInfo
-    GetPCellInfo(const PMeshInfo& theMeshInfo,
-                 EEntiteMaillage theEntity, 
-                 EGeometrieElement theGeom, 
-                 EConnectivite theConnMode = eNOD,
-                 TErr* theErr = NULL);
-
-    //----------------------------------------------------------------------------
-    //! Read number of balls in the Mesh
-    /*! This feature is supported since version 3.0 */
-    virtual
-    TInt
-    GetNbBalls(const TMeshInfo& theMeshInfo)
-    {
-      return 0;
-    }
-
-    //! Read a MEDWrapped representation of MED_BALL from the MED file
-    /*! This feature is supported since version 3.0 */
-    virtual
-    void
-    GetBallInfo(TBallInfo& theInfo,
-                TErr* theErr = NULL) 
-    {}
-
-    //! Write a MEDWrapped representation of MED_BALL to the MED file
-    /*! This feature is supported since version 3.0 */
-    virtual
-    void
-    SetBallInfo(const TBallInfo& theInfo,
-                TErr* theErr = NULL) 
-    {}
-
-    //! Creates a MEDWrapper MED Balls representation
-    /*! This feature is supported since version 3.0 */
-    virtual 
-    PBallInfo
-    CrBallInfo(const PMeshInfo& theMeshInfo, 
-               TInt             theNbBalls,
-               EBooleen         theIsElemNum = eVRAI)
-    {
-      return PBallInfo();
-    }
-
-    //! Creates a MEDWrapper MED Balls representation
-    /*! This feature is supported since version 3.0 */
-    virtual
-    PBallInfo 
-    CrBallInfo(const PMeshInfo&  theMeshInfo, 
-               const TIntVector& theNodes,
-               TFloatVector&     theDiameters,
-               const TIntVector& theFamilyNums = TIntVector(),
-               const TIntVector& theElemNums = TIntVector())
-    {
-      return PBallInfo();
-    }
-
-    //! A copy-constructor for the MEDWrapped MED Balls representation
-    virtual
-    PBallInfo
-    CrBallInfo(const PMeshInfo& theMeshInfo,
-               const PBallInfo& theInfo)
-    {
-      return PBallInfo();
-    }
-    
-    //! Read a MEDWrapped MED Balls representation from defined MED file
-    /*! This feature is supported since version 3.0 */
-    virtual
-    PBallInfo
-    GetPBallInfo(const PMeshInfo& theMeshInfo);
-
-    //----------------------------------------------------------------------------
-    //! Read number of MED FIELDS in defined MED Mesh
-    virtual 
-    TInt
-    GetNbFields(TErr* theErr = NULL) = 0;
-    
-    //! Read number of components for the defined MED FIELD by its order number
-    virtual
-    TInt
-    GetNbComp(TInt theFieldId,
-              TErr* theErr = NULL) = 0;
-    
-    //! Read MEDWrapper MED FIELD representation by its order number
-    virtual 
-    void
-    GetFieldInfo(TInt theFieldId, 
-                 TFieldInfo& theInfo,
-                 TErr* theErr = NULL) = 0;
-
-    //! Write MEDWrapper MED FIELD representation into defined MED file
-    virtual 
-    void
-    SetFieldInfo(const TFieldInfo& theInfo,
-                 TErr* theErr = NULL) = 0;
-    
-
-    //! Creates a MEDWrapper MED FIELD representation
-    virtual 
-    PFieldInfo
-    CrFieldInfo(const PMeshInfo& theMeshInfo, 
-                TInt theNbComp = 0,
-                ETypeChamp theType = eFLOAT64,
-                const std::string& theValue = "",
-                EBooleen theIsLocal = eVRAI,
-                TInt theNbRef = 1) = 0;
-
-    //! A copy-constructor for the MEDWrapper MED FIELD representation
-    virtual 
-    PFieldInfo
-    CrFieldInfo(const PMeshInfo& theMeshInfo,
-                const PFieldInfo& theInfo) = 0;
-    
-    //! Read a MEDWrapper MED FIELD representation from defined MED file
-    PFieldInfo
-    GetPFieldInfo(const PMeshInfo& theMeshInfo, 
-                  TInt theId,
-                  TErr* theErr = NULL);
-
-
-    //----------------------------------------------------------------------------
-    //! Read number of MED GAUSS in defined MED Mesh
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual 
-    TInt
-    GetNbGauss(TErr* theErr = NULL)
-    { 
-      return TInt();
-    }
-
-    //! Read brief MED GAUSS information by its order number from defined MED Mesh
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual 
-    TGaussInfo::TInfo
-    GetGaussPreInfo(TInt theId, 
-                    TErr* theErr = NULL)
-    {
-      return TGaussInfo::TInfo( TGaussInfo::TKey(ePOINT1,""),0 );
-    }
-    
-    //! Read a MEDWrapper MED GAUSS representation by its order number from defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual 
-    void
-    GetGaussInfo(TInt theId, 
-                 TGaussInfo& theInfo,
-                 TErr* theErr = NULL)
-    {}
-
-    //! Creates a MEDWrapper MED GAUSS representation
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    PGaussInfo
-    CrGaussInfo(const TGaussInfo::TInfo& theInfo,
-                EModeSwitch theMode = eFULL_INTERLACE) = 0;
-
-
-    //----------------------------------------------------------------------------
-    //! Read number of MED TIMESTAMPS in defined MED Mesh
-    /*!
-      By the way some additional information can be obtained:
-      - to what MED ENTITY the MED TIMESTAMP conntected to;
-      - on what geometrical types the MED TIMESTAMP defined to.
-    */
-    virtual 
-    TInt
-    GetNbTimeStamps(const TFieldInfo& theInfo, 
-                    const TEntityInfo& theEntityInfo,
-                    EEntiteMaillage& theEntity,
-                    TGeom2Size& theGeom2Size,
-                    TErr* theErr = NULL) = 0;
-    
-    //! Read MEDWrapper MED TIMESTAMP representation by its order number
-    virtual 
-    void
-    GetTimeStampInfo(TInt theTimeStampId, 
-                     TTimeStampInfo& theInfo,
-                     TErr* theErr = NULL) = 0;
-
-    //! Creates a MEDWrapper MED TIMESTAMP representation
-    virtual 
-    PTimeStampInfo
-    CrTimeStampInfo(const PFieldInfo& theFieldInfo, 
-                    EEntiteMaillage theEntity,
-                    const TGeom2Size& theGeom2Size,
-                    const TGeom2NbGauss& theGeom2NbGauss = TGeom2NbGauss(),
-                    TInt theNumDt = 0,
-                    TInt theNumOrd = 0,
-                    TFloat theDt = 0,
-                    const std::string& theUnitDt = "",
-                    const TGeom2Gauss& theGeom2Gauss = TGeom2Gauss()) = 0;
-
-    //! A copy-constructor for the MEDWrapper MED TIMESTAMP representation
-    virtual 
-    PTimeStampInfo 
-    CrTimeStampInfo(const PFieldInfo& theFieldInfo,
-                    const PTimeStampInfo& theInfo) = 0;
-    
-    //! Read MEDWrapper MED TIMESTAMP representation by its order number
-    PTimeStampInfo
-    GetPTimeStampInfo(const PFieldInfo& theFieldInfo,
-                      EEntiteMaillage theEntity,
-                      const TGeom2Size& theGeom2Size,
-                      TInt theId,
-                      TErr* theErr = NULL);
-    
-
-    //----------------------------------------------------------------------------
-    //! Read number of MED PROFILES in defined MED Mesh
-    virtual 
-    TInt
-    GetNbProfiles(TErr* theErr = NULL) = 0;
-
-    //! Read brief MED PROFILE information by its order number from defined MED Mesh
-    virtual 
-    TProfileInfo::TInfo
-    GetProfilePreInfo(TInt theId, 
-                      TErr* theErr = NULL) = 0;
-
-    //! Read a MEDWrapper MED PROFILE representation by its order number from defined MED file
-    virtual 
-    void
-    GetProfileInfo(TInt theId, 
-                   TProfileInfo& theInfo,
-                   TErr* theErr = NULL) = 0;
-
-    //! Creates a MEDWrapper MED PROFILE representation
-    virtual
-    PProfileInfo
-    CrProfileInfo(const TProfileInfo::TInfo& theInfo,
-                  EModeProfil theMode = eCOMPACT) = 0;
-
-    //! Write a MEDWrapper MED PROFILE representation
-    virtual
-    void
-    SetProfileInfo(const TProfileInfo& theInfo,
-                   TErr* theErr = NULL) = 0;
-
-    //! Read a MEDWrapper MED PROFILE representation by its order number from defined MED file
-    PProfileInfo
-    GetPProfileInfo(TInt theId,
-                    EModeProfil theMode = eCOMPACT,
-                    TErr* theErr = NULL);
-
-
-    //----------------------------------------------------------------------------
-    //! Read the values for MEDWrapper MED TIMESTAMP from defined MED file
-    virtual 
-    void
-    GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
-                      const TMKey2Profile& theMKey2Profile,
-                      const TKey2Gauss& theKey2Gauss,
-                      TErr* theErr = NULL) = 0;
-    
-    //! Write the values for MEDWrapper MED TIMESTAMP to defined MED file
-    virtual 
-    void
-    SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
-                      TErr* theErr = NULL) = 0;
-    
-    //! Creates the values for MEDWrapper MED TIMESTAMP representation
-    virtual
-    PTimeStampValueBase
-    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     ETypeChamp theTypeChamp,
-                     const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
-                     EModeSwitch theMode = eFULL_INTERLACE) = 0;
-
-    //! Creates the values for MEDWrapper MED TIMESTAMP representation
-    virtual
-    PTimeStampValueBase
-    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
-                     EModeSwitch theMode = eFULL_INTERLACE);
-
-    //! A copy-constructor for the values for MEDWrapper MED TIMESTAMP representation
-    virtual 
-    PTimeStampValueBase
-    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     const PTimeStampValueBase& theInfo,
-                     ETypeChamp theTypeChamp) = 0;
-    
-    //! A copy-constructor for the values for MEDWrapper MED TIMESTAMP representation
-    virtual 
-    PTimeStampValueBase
-    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     const PTimeStampValueBase& theInfo);
-    
-    //! Read the values for MEDWrapper MED TIMESTAMP from defined MED file
-    PTimeStampValueBase
-    GetPTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                       const TMKey2Profile& theMKey2Profile,
-                       const TKey2Gauss& theKey2Gauss,
-                       TErr* theErr = NULL);
-    
-    //----------------------------------------------------------------------------
-    // Backward compatibility  declarations
-    //! Read the values for MEDWrapper MED TIMESTAMP from defined MED file
-    virtual 
-    void
-    GetTimeStampVal(const PTimeStampVal& theVal,
-                    const TMKey2Profile& theMKey2Profile,
-                    const TKey2Gauss& theKey2Gauss,
-                    TErr* theErr = NULL);
-    
-    //! Write the values for MEDWrapper MED TIMESTAMP to defined MED file
-    virtual 
-    void
-    SetTimeStamp(const PTimeStampVal& theVal,
-                 TErr* theErr = NULL);
-    
-    //! Creates the values for MEDWrapper MED TIMESTAMP representation
-    virtual
-    PTimeStampVal
-    CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
-                   const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
-                   EModeSwitch theMode = eFULL_INTERLACE);
-
-    //! A copy-constructor for the values for MEDWrapper MED TIMESTAMP representation
-    virtual 
-    PTimeStampVal
-    CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
-                   const PTimeStampVal& theInfo);
-    
-    //! Read the values for MEDWrapper MED TIMESTAMP from defined MED file
-    PTimeStampVal
-    GetPTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
-                     const TMKey2Profile& theMKey2Profile,
-                     const TKey2Gauss& theKey2Gauss,
-                     TErr* theErr = NULL);
-
-    //----------------------------------------------------------------------------
-    //! Read a MEDWrapper MED Grille representation from defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    PGrilleInfo
-    GetPGrilleInfo(const PMeshInfo& theMeshInfo);
-
-    //! Read a MEDWrapper MED Grille representation from defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    PGrilleInfo
-    GetPGrilleInfo(const PMeshInfo& theMeshInfo,
-                   const PGrilleInfo& theInfo);
-
-    //! Read a MEDWrapper MED Grille representation from defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    void
-    GetGrilleInfo(TGrilleInfo& theInfo,
-                  TErr* theErr = NULL)
-    {}
-
-    //! Write the MEDWrapper MED Grille representation into defined MED file
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual 
-    void
-    SetGrilleInfo(const TGrilleInfo& theInfo,
-                  TErr* theErr = NULL)
-    {}
-
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const PGrilleInfo& theGrilleInfo)
-    {
-      return PGrilleInfo();
-    }
-
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo)
-    {
-      return PGrilleInfo();
-    }
-    
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type)
-    {
-      return PGrilleInfo();
-    }
-    
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type,
-                 const TInt& nbNodes)
-    {
-      return PGrilleInfo();
-    }
-
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    PGrilleInfo
-    CrGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type,
-                 const MED::TIntVector& nbNodeVec)
-    {
-      return PGrilleInfo();
-    }
-
-    /*! This feature is support only for version of 2.2 and higher */
-    virtual
-    void
-    GetGrilleType(const TMeshInfo& theMeshInfo,
-                  EGrilleType& type,
-                  TErr* theErr = NULL)
-    {
-    }
-    
-  };
-
-
-  //----------------------------------------------------------------------------
-  //! This class provide thread-safety for MEDWrapper interaction
-  class MEDWRAPPER_EXPORT TLockProxy
-  {
-    TLockProxy& operator=(const TLockProxy& );
-    TWrapper* myWrapper;
-
-  public:
-    TLockProxy(TWrapper* theWrapper);
-
-    ~TLockProxy();
-
-    TWrapper * operator-> () const;
-  };
-
-
-  //----------------------------------------------------------------------------
-  //! To specialize the SharedPtr for TWrapper
-  template<> 
-  class MEDWRAPPER_EXPORT SharedPtr<TWrapper>: public boost::shared_ptr<TWrapper>
-  {
-  public:
-    SharedPtr() {}
-
-    template<class Y>
-    explicit SharedPtr(Y * p): 
-      boost::shared_ptr<TWrapper>(p) 
-    {}
-
-    template<class Y>
-    SharedPtr(SharedPtr<Y> const & r):
-      boost::shared_ptr<TWrapper>(boost::dynamic_pointer_cast<TWrapper,Y>(r))
-    {}
-
-    template<class Y>
-    SharedPtr& 
-    operator=(SharedPtr<Y> const & r)
-    {
-      SharedPtr<TWrapper>(r).swap(*this);
-      return *this;
-    }
-
-    template<class Y> 
-    SharedPtr& 
-    operator()(Y * p) // Y must be complete
-    {
-      return operator=<Y>(SharedPtr<Y>(p));
-    }
-
-    template<class Y> 
-    SharedPtr& 
-    operator()(SharedPtr<Y> const & r) // Y must be complete
-    {
-      return operator=<Y>(SharedPtr<Y>(r));
-    }
-
-    TLockProxy operator-> () const // never throws
-    {
-      return TLockProxy(this->get());
-    }
-    
-  protected:
-    operator const TWrapper& () const;
-
-    operator TWrapper& ();
-
-    TWrapper& operator* () const;
-
-    TWrapper * get() const // never throws
-    {
-      return boost::shared_ptr<TWrapper>::get();
-    }
-  };
-
-  //----------------------------------------------------------------------------
-  typedef SharedPtr<TWrapper> PWrapper;
-}
-
-#endif
diff --git a/src/MEDWrapper/Base/MED_WrapperBase.hxx b/src/MEDWrapper/Base/MED_WrapperBase.hxx
deleted file mode 100755 (executable)
index 03913a9..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//  File   : MED_WrapperBase.hxx
-//  Author : Alexander A. BORODIN
-//
-#ifndef _MED_WrapperBase_HXX_
-#define _MED_WrapperBase_HXX_
-
-#ifdef WIN32
- #if defined MEDWRAPPER_BASE_EXPORTS || defined MEDWrapperBase_EXPORTS
-  #if defined WIN32
-   #define MEDWRAPPER_EXPORT __declspec( dllexport )
-  #else
-   #define MEDWRAPPER_EXPORT
-  #endif
- #else
-  #if defined WIN32
-   #define MEDWRAPPER_EXPORT __declspec( dllimport )
-  #else
-   #define MEDWRAPPER_EXPORT
-  #endif
- #endif
-#else
- #define MEDWRAPPER_EXPORT
-#endif
-
-#endif
index 73883730bbb5773e7faae8847b5767825c0e692a..4e3bca1ed3b10549d69cc9fe87ef231a6a1c67ba 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-ADD_SUBDIRECTORY(Base)
-ADD_SUBDIRECTORY(V2_2)
-ADD_SUBDIRECTORY(Factory)
+# --- options ---
+# additional include directories
+INCLUDE_DIRECTORIES(
+  ${Boost_INCLUDE_DIRS}
+  ${HDF5_INCLUDE_DIRS}
+  ${MEDFILE_INCLUDE_DIRS}
+  ${KERNEL_INCLUDE_DIRS}
+)
+
+# additional preprocessor / compiler flags
+ADD_DEFINITIONS(
+  ${BOOST_DEFINITIONS}
+  ${HDF5_DEFINITIONS}
+)
+
+SET(_link_LIBRARIES
+  ${Boost_LIBRARIES}
+  ${HDF5_LIBS}
+  ${MEDFILE_C_LIBRARIES}
+)
+
+# --- headers ---
+
+# header files / no moc processing
+SET(MEDWrapper_HEADERS
+  MED_Algorithm.hxx
+  MED_Common.hxx
+  MED_CoordUtils.hxx
+  MED_Factory.hxx
+  MED_GaussDef.hxx
+  MED_GaussUtils.hxx
+  MED_SharedPtr.hxx
+  MED_SliceArray.hxx
+  MED_Structures.hxx
+  MED_TStructures.hxx
+  MED_Utilities.hxx
+  MED_Vector.hxx
+  MED_Wrapper.hxx
+  MED_WrapperDef.hxx
+)
+
+# --- sources ---
+
+# sources / static
+SET(MEDWrapper_SOURCES
+  MED_Algorithm.cxx
+  MED_Common.cxx
+  MED_CoordUtils.cxx
+  MED_Factory.cxx
+  MED_GaussDef.cxx
+  MED_GaussUtils.cxx
+  MED_Structures.cxx
+  MED_Utilities.cxx
+  MED_Wrapper.cxx
+)
+
+# --- rules ---
+
+ADD_LIBRARY(MEDWrapper ${MEDWrapper_SOURCES})
+TARGET_LINK_LIBRARIES(MEDWrapper ${_link_LIBRARIES})
+INSTALL(TARGETS MEDWrapper EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
+
+ADD_EXECUTABLE(mprint_version mprint_version.cxx)
+TARGET_LINK_LIBRARIES(mprint_version ${MEDFILE_C_LIBRARIES})
+INSTALL(TARGETS mprint_version EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_BINS})
+
+INSTALL(FILES ${MEDWrapper_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
diff --git a/src/MEDWrapper/Factory/CMakeLists.txt b/src/MEDWrapper/Factory/CMakeLists.txt
deleted file mode 100644 (file)
index 0a84ab9..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright (C) 2012-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# --- options ---
-# additional include directories
-INCLUDE_DIRECTORIES(
-  ${HDF5_INCLUDE_DIRS}
-  ${Boost_INCLUDE_DIRS}
-  ${MEDFILE_INCLUDE_DIRS}
-  ${KERNEL_INCLUDE_DIRS}
-  ${CMAKE_CURRENT_SOURCE_DIR}/../Base
-  ${CMAKE_CURRENT_SOURCE_DIR}/../V2_2
-)
-
-# additional preprocessor / compiler flags
-ADD_DEFINITIONS(
-  ${HDF5_DEFINITIONS}
-  ${BOOST_DEFINITIONS}
-)
-
-SET(_link_LIBRARIES
-  MEDWrapperBase
-  MEDWrapper_V2_2
-  ${Boost_LIBRARIES}
-  ${MEDFILE_C_LIBRARIES}
-)
-
-# --- headers ---
-
-# header files / no moc processing
-SET(MEDWrapper_HEADERS
-  MED_Factory.hxx
-  MED_WrapperFactory.hxx
-)
-
-# --- sources ---
-
-# sources / static
-SET(MEDWrapper_SOURCES
-  MED_Factory.cxx
-)
-
-# --- rules ---
-
-ADD_LIBRARY(MEDWrapper ${MEDWrapper_SOURCES})
-TARGET_LINK_LIBRARIES(MEDWrapper ${_link_LIBRARIES} ${MED_medloader} )
-INSTALL(TARGETS MEDWrapper EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
-
-ADD_EXECUTABLE(mprint_version mprint_version.cxx)
-TARGET_LINK_LIBRARIES(mprint_version ${_link_LIBRARIES} MEDWrapper)
-
-ADD_EXECUTABLE(MED_Test MED_Test.cxx)
-TARGET_LINK_LIBRARIES(MED_Test ${_link_LIBRARIES} MEDWrapper)
-
-INSTALL(TARGETS mprint_version MED_Test EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_BINS})
-
-INSTALL(FILES ${MEDWrapper_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
diff --git a/src/MEDWrapper/Factory/MED_Factory.cxx b/src/MEDWrapper/Factory/MED_Factory.cxx
deleted file mode 100644 (file)
index 6c1d990..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "MED_Factory.hxx"
-#include "MED_Utilities.hxx"
-#include "MED_V2_2_Wrapper.hxx"
-#include <stdio.h>
-#include <errno.h>
-#include <sstream>
-
-#include <med.h>
-extern "C"
-{
-#ifndef WIN32
-  #include <unistd.h>
-#endif
-}
-
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
-namespace MED
-{
-  
-  EVersion GetVersionId(const std::string& theFileName,
-                        bool theDoPreCheckInSeparateProcess)
-  {
-    INITMSG(MYDEBUG,"GetVersionId - theFileName = '"<<theFileName<<"'"<<std::endl);
-    EVersion aVersion = eVUnknown;    
-
-#ifndef WIN32
-    if (access(theFileName.c_str(),F_OK))
-      return aVersion;
-    if ( theDoPreCheckInSeparateProcess ) {
-      // First check, is it possible to deal with the file
-      std::ostringstream aStr;
-      // File name is in quotes for the case of space(s) inside it (PAL13009)
-      aStr<<"bash -c \""<<getenv("SMESH_ROOT_DIR")<<"/bin/salome/mprint_version \'"<<theFileName<<"\'\"";
-      if(!MYDEBUG)
-        aStr<<" 2>&1 > /dev/null";
-
-      std::string aCommand = aStr.str();
-      int aStatus = system(aCommand.c_str());
-
-      BEGMSG( MYDEBUG,"aCommand = '" << aCommand << "'; aStatus = " << aStatus
-             << "; errno = " << errno << " = " << strerror( errno ) << std::endl );
-      if ( aStatus != 0 && errno != EAGAIN && errno != ENOMEM ) // "Cannot allocate memory" is OK
-        return aVersion;
-    }
-#endif
-    // check compatibility of hdf and med versions
-    med_bool hdfok, medok;
-    MEDfileCompatibility(theFileName.c_str(), &hdfok, &medok);
-    if ((!hdfok) /*|| (!medok)*/) // med-2.1 is KO since med-3.0.0
-      return aVersion;
-
-    // Next, try to open the file trough the MED API
-    const char* aFileName = theFileName.c_str();
-    med_idt aFid = MEDfileOpen(aFileName,MED_ACC_RDONLY);
-
-    MSG(MYDEBUG,"GetVersionId - theFileName = '"<<theFileName<<"'; aFid = "<<aFid<<std::endl);
-    if(aFid >= 0){
-      med_int aMajor, aMinor, aRelease;
-      med_err aRet = MEDfileNumVersionRd(aFid,&aMajor,&aMinor,&aRelease);
-      INITMSG(MYDEBUG,"GetVersionId - theFileName = '"<<theFileName<<"'; aRet = "<<aRet<<std::endl);
-      if(aRet >= 0){
-        if(aMajor == 2 && aMinor == 1)
-          aVersion = eV2_1;
-        else
-          // TODO: check major is not superior to library and switch on minor
-          aVersion = eV2_2;
-      }
-      else {
-        // VSR: simulate med 2.3.6 behavior, med file version is assumed to 2.1
-        aVersion = eV2_1;
-      }
-    }
-    MEDfileClose(aFid);
-
-    BEGMSG(MYDEBUG,"GetVersionId - theFileName = '"<<theFileName<<"'; aVersion = "<<aVersion<<std::endl);
-    return aVersion;
-  }
-
-  bool getMEDVersion( const std::string& fname, int& major, int& minor, int& release )
-  {
-    med_idt f = MEDfileOpen(fname.c_str(), MED_ACC_RDONLY );
-    if( f<0 )
-      return false;
-
-    med_int aMajor, aMinor, aRelease;
-    med_err aRet = MEDfileNumVersionRd( f, &aMajor, &aMinor, &aRelease );
-    major = aMajor;
-    minor = aMinor;
-    release = aRelease;
-    MEDfileClose( f );
-    if( aRet<0 ) {
-      // VSR: simulate med 2.3.6 behavior, med file version is assumed to 2.1
-      major = 2; minor = release = -1;
-      //return false;
-    }
-    return true;
-  }
-
-  PWrapper CrWrapper(const std::string& theFileName,
-                     bool theDoPreCheckInSeparateProcess,
-                     int  theMinor)
-  {
-    PWrapper aWrapper;
-    if (theMinor <0)
-      theMinor = MED_MINOR_NUM;
-    EVersion aVersion = GetVersionId(theFileName,theDoPreCheckInSeparateProcess);
-    switch(aVersion){
-    case eV2_1:
-      EXCEPTION(std::runtime_error,"Cannot open file '"<<theFileName<<"'. Med version 2.1 is not supported any more.");
-      break;
-    default:
-      aWrapper.reset(new MED::V2_2::TVWrapper(theFileName, theMinor));
-    }
-    return aWrapper;
-  }
-
-  PWrapper CrWrapper(const std::string& theFileName, EVersion theId)
-  {
-    EVersion aVersion = GetVersionId(theFileName);
-    if (aVersion == eVUnknown) // no existing file
-      aVersion = theId;
-
-    if(aVersion != theId)
-      //remove(theFileName.c_str());
-      EXCEPTION(std::runtime_error,"Cannot open file for writing '"<<theFileName<<"'. existing file with another Med version.");
-
-    aVersion = theId;
-    int theMinor = -1; // not supported
-    switch (aVersion)
-    {
-      case eV2_1:     break; // not supported
-      case eVUnknown:
-      case eV2_2:
-      case eLATEST:   theMinor = MED_MINOR_NUM; break;
-      default:        theMinor = aVersion - eMINOR_0;
-    }
-
-    if (theMinor < 0)
-      EXCEPTION(std::runtime_error,"Cannot open file '"<<theFileName<<"'. Med version 2.1 is not supported any more.");
-
-    PWrapper aWrapper;
-    aWrapper.reset(new MED::V2_2::TVWrapper(theFileName, theMinor));
-    return aWrapper;
-  }
-
-}
diff --git a/src/MEDWrapper/Factory/MED_Factory.hxx b/src/MEDWrapper/Factory/MED_Factory.hxx
deleted file mode 100644 (file)
index fc71086..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#ifndef MED_Factory_HeaderFile
-#define MED_Factory_HeaderFile
-
-#include "MED_WrapperFactory.hxx"
-#include "MED_Wrapper.hxx"
-
-namespace MED
-{
-  MEDWRAPPER_FACTORY_EXPORT
-  EVersion  
-  GetVersionId(const std::string& theFileName,
-               bool theDoPreCheckInSeparateProcess = false);
-
-  MEDWRAPPER_FACTORY_EXPORT
-    bool getMEDVersion( const std::string&, int&, int&, int& );
-  
-  MEDWRAPPER_FACTORY_EXPORT
-  PWrapper 
-  CrWrapper(const std::string& theFileName,
-            bool theDoPreCheckInSeparateProcess = false,
-            int theMinor=-1);
-
-  MEDWRAPPER_FACTORY_EXPORT
-  PWrapper 
-  CrWrapper(const std::string& theFileName, EVersion theId);
-}
-
-#endif
diff --git a/src/MEDWrapper/Factory/MED_Test.cxx b/src/MEDWrapper/Factory/MED_Test.cxx
deleted file mode 100644 (file)
index c8f72f3..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#include "MED_Utilities.hxx"
-#include "MED_Algorithm.hxx"
-#include "MED_GaussUtils.hxx"
-#include "MED_Factory.hxx"
-
-#ifdef _DEBUG_
-static int MYDEBUG = 1;
-#else
-// static int MYDEBUG = 0;
-#endif
-
-static int MYWRITEDEBUG = 1;
-
-using namespace MED;
-
-#undef _DEBUG_
-
-void CheckMed(const std::string& theFileName)
-{
-  MSG(MYDEBUG,"CheckMed - theFileName = '"<<theFileName<<"'");
-  {
-    //TErr anErr;
-    PWrapper aMed = CrWrapper(theFileName);
-
-    TKey2Gauss aKey2Gauss = GetKey2Gauss(aMed);
-    TMKey2Profile aMKey2Profile = GetMKey2Profile(aMed);
-    INITMSG(MYDEBUG,"aMed->GetNbProfiles() = "<<aMed->GetNbProfiles()<<std::endl);
-
-    TInt aNbMeshes = aMed->GetNbMeshes();
-    BEGMSG(MYDEBUG,"GetNbMeshes() = "<<aNbMeshes<<std::endl);
-    for(TInt iMesh = 1; iMesh <= aNbMeshes; iMesh++){
-      
-      PMeshInfo aMeshInfo = aMed->GetPMeshInfo(iMesh);
-      INITMSG(MYDEBUG,"aMeshInfo->GetName() = '"<<aMeshInfo->GetName()<<"'"<<std::endl);
-
-      TEntityInfo aEntityInfo = aMed->GetEntityInfo(aMeshInfo);
-      
-      TEntity2TGeom2ElemInfo anEntity2TGeom2ElemInfo = 
-        GetEntity2TGeom2ElemInfo(aMed,aMeshInfo,aEntityInfo);
-
-      TFieldInfo2TimeStampInfoSet aFieldInfo2TimeStampInfoSet = 
-        GetFieldInfo2TimeStampInfoSet(aMed,aMeshInfo,aEntityInfo);
-      
-      TEntite2TFieldInfo2TimeStampInfoSet anEntite2TFieldInfo2TimeStampInfoSet = 
-        GetEntite2TFieldInfo2TimeStampInfoSet(aFieldInfo2TimeStampInfoSet);
-
-      TEntite2TFieldInfo2TimeStampInfoSet::const_iterator anEntite2TFieldInfo2TimeStampInfoSetIter = 
-        anEntite2TFieldInfo2TimeStampInfoSet.begin();
-      for(; anEntite2TFieldInfo2TimeStampInfoSetIter != anEntite2TFieldInfo2TimeStampInfoSet.end(); anEntite2TFieldInfo2TimeStampInfoSetIter++){
-        const TFieldInfo2TimeStampInfoSet& aFieldInfo2TimeStampInfoSet = anEntite2TFieldInfo2TimeStampInfoSetIter->second;
-        TFieldInfo2TimeStampInfoSet::const_iterator aFieldInfo2TimeStampInfoSetIter = aFieldInfo2TimeStampInfoSet.begin();
-        for(; aFieldInfo2TimeStampInfoSetIter != aFieldInfo2TimeStampInfoSet.end(); aFieldInfo2TimeStampInfoSetIter++){
-          PFieldInfo aFieldInfo = aFieldInfo2TimeStampInfoSetIter->first;
-          INITMSG(MYDEBUG,
-                  "GetPFieldInfo "<<
-                  "- aName = '"<<aFieldInfo->GetName()<<"'"<<
-                  "; aType = "<<aFieldInfo->GetType()<<
-                  "; aNbComp = "<<aFieldInfo->GetNbComp()<<
-                  std::endl);
-          const TTimeStampInfoSet& aTimeStampInfoSet = aFieldInfo2TimeStampInfoSetIter->second;
-          TTimeStampInfoSet::const_iterator aTimeStampInfoSettIter = aTimeStampInfoSet.begin();
-          for(; aTimeStampInfoSettIter != aTimeStampInfoSet.end(); aTimeStampInfoSettIter++){
-            PTimeStampInfo aTimeStampInfo = *aTimeStampInfoSettIter;
-            INITMSG(MYDEBUG,
-                    "GetPTimeStampInfo "<<
-                    "- anEntity = "<<aTimeStampInfo->GetEntity()<<
-                    "; aNumDt = "<<aTimeStampInfo->GetNumDt()<<
-                    std::endl);
-            PTimeStampValueBase aTimeStampValue = 
-              aMed->GetPTimeStampValue(aTimeStampInfo,
-                                       aMKey2Profile,
-                                       aKey2Gauss);
-          }
-        }
-      }
-
-      continue;
-
-      TFamilyInfoSet aFamilyInfoSet = GetFamilyInfoSet(aMed,aMeshInfo);
-      
-      TEntity2FamilySet aEntity2FamilySet = 
-        GetEntity2FamilySet(aMed,anEntity2TGeom2ElemInfo,aFamilyInfoSet);
-      
-      TGroupInfo aGroupInfo = GetGroupInfo(aFamilyInfoSet);
-      
-      PNodeInfo aNodeInfo = aMed->GetPNodeInfo(aMeshInfo);
-      TEntity2TGeom2ElemInfo::const_iterator anIter = anEntity2TGeom2ElemInfo.begin();
-      for(; anIter != anEntity2TGeom2ElemInfo.end(); anIter++){
-        const EEntiteMaillage& anEntity = anIter->first;
-        if(anEntity != eNOEUD){
-          const TGeom2ElemInfo& aGeom2ElemInfo = anIter->second;
-          TKey2Gauss::const_iterator anIter2 = aKey2Gauss.begin();
-          for(; anIter2 != aKey2Gauss.end(); anIter2++){
-            const TGaussInfo::TKey& aKey = anIter2->first;
-            EGeometrieElement aGeom = boost::get<0>(aKey);
-            TGeom2ElemInfo::const_iterator anIter3 = aGeom2ElemInfo.find(aGeom);
-            if(anIter3 != aGeom2ElemInfo.end()){
-              if(PCellInfo aCellInfo = anIter3->second){
-                PGaussInfo aGaussInfo = anIter2->second;
-                TGaussCoord aGaussCoord;
-                GetGaussCoord3D(aGaussInfo,aCellInfo,aNodeInfo,aGaussCoord);
-              }
-            }
-          }
-        }
-      }
-      
-    }
-  }
-  MSG(MYDEBUG,"OK");
-}
-
-
-void CopyMed(const PWrapper& theMed, 
-             const PWrapper& theMed2, 
-             int theIncr)
-{
-  TKey2Gauss aKey2Gauss = GetKey2Gauss(theMed);
-  TMKey2Profile aMKey2Profile = GetMKey2Profile(theMed);
-
-  TInt aNbMeshes = theMed->GetNbMeshes();
-  MSG(MYDEBUG,"aNbMeshes = "<<aNbMeshes);
-  std::string aName;
-  for(TInt iMesh = 0; iMesh < aNbMeshes; iMesh++){
-    PMeshInfo aMeshInfo = theMed->GetPMeshInfo(iMesh+1);
-#ifdef _DEBUG_
-    TInt aDim = aMeshInfo->myDim;
-    aName = aMeshInfo->GetName();
-    INITMSG(MYDEBUG,"GetMeshInfo - aName = '"<<aName<<"'; aDim = "<<aDim<<"\n");
-#endif
-    PMeshInfo aMeshInfo2 = theMed2->CrMeshInfo(aMeshInfo);
-    if(MYWRITEDEBUG){
-      aName = aMeshInfo2->GetName();
-
-      aName[0] += theIncr;
-      aMeshInfo2->SetName(aName);
-      theMed2->SetMeshInfo(aMeshInfo2);
-      BEGMSG(MYDEBUG,"aNbMeshes2 = "<<theMed2->GetNbMeshes()<<"\n");
-    }
-    
-    TEntityInfo aEntityInfo = theMed->GetEntityInfo(aMeshInfo);
-
-    //continue;
-
-    TInt aNbFields = theMed->GetNbFields(); 
-    MSG(MYDEBUG,"GetNbFields() = "<<aNbFields);
-    for(TInt iField = 0; iField < aNbFields; iField++){
-      PFieldInfo aFieldInfo = theMed->GetPFieldInfo(aMeshInfo,iField+1);
-#ifdef _DEBUG_
-      TInt aNbComp = aFieldInfo->GetNbComp();
-      INITMSG(MYDEBUG,"aName = '"<<aFieldInfo->GetName()<<"'; aNbComp = "<<aNbComp<<";\n");
-#endif
-      PFieldInfo aFieldInfo2 = theMed->CrFieldInfo(aMeshInfo2,aFieldInfo);
-
-      if(MYWRITEDEBUG){
-        aName = aFieldInfo->GetName();
-        aName[0] += theIncr;
-        aFieldInfo2->SetName(aName);
-        theMed2->SetFieldInfo(aFieldInfo2);
-      }
-
-      EEntiteMaillage anEntity;
-      TGeom2Size aGeom2Size;
-      TInt aNbTimeStamps = 
-        theMed->GetNbTimeStamps(aFieldInfo,aEntityInfo,anEntity,aGeom2Size);
-      {
-        INITMSG(MYDEBUG,"GetNbTimeStamps = "<<aNbTimeStamps<<std::endl);
-        for(TInt iTimeStamp = 0; iTimeStamp < aNbTimeStamps; iTimeStamp++){
-          PTimeStampInfo aTimeStampInfo = 
-          theMed->GetPTimeStampInfo(aFieldInfo,anEntity,aGeom2Size,iTimeStamp+1);
-#ifdef _DEBUG_
-          TInt aNumDt = aTimeStampInfo->GetNumDt();
-          INITMSG(MYDEBUG,"aNumDt = "<<aNumDt<<"\n");
-#endif
-          
-          PTimeStampInfo aTimeStampInfo2 = 
-            theMed->CrTimeStampInfo(aFieldInfo2,aTimeStampInfo);
-          
-          PTimeStampValueBase aTimeStampValue = 
-            theMed->GetPTimeStampValue(aTimeStampInfo,
-                                       aMKey2Profile,
-                                       aKey2Gauss);
-          
-          PTimeStampValueBase aTimeStampValue2 = 
-            theMed->CrTimeStampValue(aTimeStampInfo2,
-                                     aTimeStampValue);
-          
-          if(MYWRITEDEBUG) theMed2->SetTimeStamp(aTimeStampValue2);
-        }
-      }
-    }
-
-    TInt aNbFam = theMed->GetNbFamilies(aMeshInfo);
-    MSG(MYDEBUG,"GetNbFamilies() = "<<aNbFam);
-    for(TInt iFam = 0; iFam < aNbFam; iFam++){
-      PFamilyInfo aFamilyInfo = theMed->GetPFamilyInfo(aMeshInfo,iFam+1);
-      TInt aNbGroup = aFamilyInfo->GetNbGroup();
-#ifdef _DEBUG_
-      TInt aNbAttr = aFamilyInfo->GetNbAttr();
-#endif
-      TInt anId = aFamilyInfo->GetId();
-      if(anId == 0)
-        continue;
-
-      aName = aFamilyInfo->GetName();
-#ifdef _DEBUG_
-      INITMSG(MYDEBUG,"aName = '"<<aName<<"'; anId = "<<anId<<
-              "; aNbAttr = "<<aNbAttr<<"; aNbGroup = "<<aNbGroup<<"\n");
-#endif
-      PFamilyInfo aFamilyInfo2 = theMed->CrFamilyInfo(aMeshInfo2,aFamilyInfo);
-      for(TInt iGroup = 0; iGroup < aNbGroup; iGroup++){
-        aName = aFamilyInfo->GetGroupName(iGroup);
-        INITMSG(MYDEBUG,"aGroupName = '"<<aName<<"'\n");
-        aName[0] += theIncr;
-        aFamilyInfo2->SetGroupName(iGroup,aName);
-      }
-
-      if(MYWRITEDEBUG){
-        aName = aFamilyInfo->GetName();
-        aName[0] += theIncr;
-        aFamilyInfo2->SetName(aName);
-        theMed2->SetFamilyInfo(aFamilyInfo2);
-        INITMSG(MYDEBUG,"GetNbFamilies = "<<theMed2->GetNbFamilies(aMeshInfo2)<<std::endl);
-      }
-    }
-
-    MSG(MYDEBUG,"GetEntityInfo - aNbEntities = "<<aEntityInfo.size());
-    TEntityInfo::iterator anEntityInfoIter = aEntityInfo.begin();
-    for(; anEntityInfoIter != aEntityInfo.end(); anEntityInfoIter++){
-      const EEntiteMaillage& anEntity = anEntityInfoIter->first;
-      INITMSG(MYDEBUG,"anEntity = "<<anEntity<<"\n");
-      if(anEntity == eNOEUD){
-        PNodeInfo aNodeInfo = theMed->GetPNodeInfo(aMeshInfo);
-        PNodeInfo aNodeInfo2 = theMed->CrNodeInfo(aMeshInfo2,aNodeInfo);
-        if(MYWRITEDEBUG) theMed2->SetNodeInfo(aNodeInfo2);
-        continue;
-      }
-      TGeom2Size& aGeom2Size = anEntityInfoIter->second;
-      TGeom2Size::iterator aGeomIter = aGeom2Size.begin();
-      for(; aGeomIter != aGeom2Size.end(); aGeomIter++){
-        const EGeometrieElement& aGeom = aGeomIter->first;
-#ifdef _DEBUG_
-        const TInt& aNbElem = aGeomIter->second;
-        INITMSG(MYDEBUG,"aGeom = "<<aGeom<<"; aNbElem = "<<aNbElem<<": ");
-#endif
-        switch(aGeom){
-        case ePOLYGONE: {
-          PPolygoneInfo aPolygoneInfo = theMed->GetPPolygoneInfo(aMeshInfo,anEntity,aGeom);
-          PPolygoneInfo aPolygoneInfo2 = theMed->CrPolygoneInfo(aMeshInfo2,aPolygoneInfo);
-          if(MYWRITEDEBUG) theMed2->SetPolygoneInfo(aPolygoneInfo2);
-          break;
-        }
-        case ePOLYEDRE: {
-          PPolyedreInfo aPolyedreInfo = theMed->GetPPolyedreInfo(aMeshInfo,anEntity,aGeom);
-          PPolyedreInfo aPolyedreInfo2 = theMed->CrPolyedreInfo(aMeshInfo2,aPolyedreInfo);
-          if(MYWRITEDEBUG) theMed2->SetPolyedreInfo(aPolyedreInfo2);
-          break;
-        }
-        default:
-          PCellInfo aCellInfo = theMed->GetPCellInfo(aMeshInfo,anEntity,aGeom);
-          PCellInfo aCellInfo2 = theMed2->CrCellInfo(aMeshInfo2,aCellInfo);
-          if(MYWRITEDEBUG) theMed2->SetCellInfo(aCellInfo2);
-        }
-      }
-    }
-    
-  }
-  MSG(MYDEBUG,"OK");
-}
-
-
-void CopyMed(const std::string& theFileName, 
-             const std::string& theFileName2, 
-             MED::EVersion theVersion,
-             int theNbCopy)
-{
-  MSG(MYDEBUG,"CopyMed - theFileName = '"<<theFileName<<"'; theFileName2 = '"<<theFileName2<<"', theVersion = "<<theVersion);
-
-  PWrapper aMed = CrWrapper(theFileName);
-
-  PWrapper aMed2 = CrWrapper(theFileName2,theVersion);
-
-  for(int i = 0; i < theNbCopy; i++) 
-    CopyMed(aMed,aMed2,i);
-}
-
-
-void ReadMed(const char* theFileName, 
-             const char* theFileName2,
-             MED::EVersion theVersion = eV2_2,
-             int theNbCopy = 1)
-{
-  MSG(MYDEBUG,"theFileName = '"<<theFileName<<"'; "<<
-      "theFileName2 = '"<<theFileName2<<"'; "<<
-      "theVersion = "<<theVersion<<"; "<<
-      "theNbCopy = "<<theNbCopy);
-
-  CopyMed(theFileName,theFileName2,theVersion,theNbCopy);
-}
-
-#ifdef WIN32
-#pragma warning(disable:4101) // exc unreferenced ... ??
-#endif
-
-int main(int argc, char** argv){ 
-#ifndef _DEBUG_
-  try{
-#endif
-    if(argc == 2)
-      CheckMed(argv[1]);
-    if(argc == 3)
-      ReadMed(argv[1],argv[2]);
-    if(argc == 4)
-      ReadMed(argv[1],argv[2],MED::EVersion(atoi(argv[3])));
-    if(argc == 5)
-      ReadMed(argv[1],argv[2],MED::EVersion(atoi(argv[3])),atoi(argv[4]));
-    return 0;
-#ifndef _DEBUG_
-  }catch(std::exception& exc){
-    MSG(MYDEBUG,"Follow exception was accured :\n"<<exc.what());
-  }catch(...){
-    MSG(MYDEBUG,"Unknown exception was accured");
-  } 
-#endif 
-  return 1;
-}
diff --git a/src/MEDWrapper/Factory/MED_WrapperFactory.hxx b/src/MEDWrapper/Factory/MED_WrapperFactory.hxx
deleted file mode 100755 (executable)
index 5de8d0e..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//  File   : MED_WrapperFactory.hxx
-//  Author : Alexander A. BORODIN
-//
-#ifndef _MED_WrapperFactory_HXX_
-#define _MED_WrapperFactory_HXX_
-
-#ifdef WIN32
- #if defined MEDWRAPPER_FACTORY_EXPORTS || defined MEDWrapper_EXPORTS
-  #if defined WIN32
-   #define MEDWRAPPER_FACTORY_EXPORT __declspec( dllexport )
-  #else
-   #define MEDWRAPPER_FACTORY_EXPORT
-  #endif
- #else
-  #if defined WIN32
-   #define MEDWRAPPER_FACTORY_EXPORT __declspec( dllimport )
-  #else
-   #define MEDWRAPPER_FACTORY_EXPORT
-  #endif
- #endif
-#else
- #define MEDWRAPPER_FACTORY_EXPORT
-#endif
-
-#endif
diff --git a/src/MEDWrapper/Factory/mprint_version.cxx b/src/MEDWrapper/Factory/mprint_version.cxx
deleted file mode 100644 (file)
index 354769c..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include <med.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-
-int main (int argc, char **argv)
-{
-  med_idt aFid = MEDfileOpen(argv[1],MED_ACC_RDONLY);
-  if(aFid < 0)
-    exit(1);
-
-  med_int aMajor, aMinor, aRelease;
-  med_err aRet = MEDfileNumVersionRd(aFid,&aMajor,&aMinor,&aRelease);
-  MEDfileClose(aFid);
-  if(aRet < 0) {
-    // VSR: simulate med 2.3.6 behavior, med file version is assumed to 2.1
-    aMajor=2;
-    aMinor=aRelease=-1;
-  }
-
-  printf("%d.%d.%d\n",aMajor,aMinor,aRelease);
-}
diff --git a/src/MEDWrapper/MED_Algorithm.cxx b/src/MEDWrapper/MED_Algorithm.cxx
new file mode 100644 (file)
index 0000000..e48654a
--- /dev/null
@@ -0,0 +1,373 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_Algorithm.hxx"
+#include "MED_Wrapper.hxx"
+#include "MED_Utilities.hxx"
+
+#ifdef _DEBUG_
+static int MYDEBUG = 0;
+static int MYVALUEDEBUG = 0;
+#else
+static int MYDEBUG = 0;
+static int MYVALUEDEBUG = 0;
+#endif
+
+namespace MED
+{
+  //---------------------------------------------------------------
+  TEntity2TGeom2ElemInfo
+  GetEntity2TGeom2ElemInfo(const PWrapper& theWrapper,
+                           const PMeshInfo& theMeshInfo,
+                           const MED::TEntityInfo& theEntityInfo)
+  {
+    MSG(MYDEBUG,"GetElemsByEntity(...)");
+    TEntity2TGeom2ElemInfo anEntity2TGeom2ElemInfo;
+    MED::TEntityInfo::const_iterator anIter = theEntityInfo.begin();
+    PElemInfo anElemInfo;
+    TErr anErr;
+    for(; anIter != theEntityInfo.end(); anIter++){
+      const EEntiteMaillage& anEntity = anIter->first;
+      const TGeom2Size& aGeom2Size = anIter->second;
+      TGeom2ElemInfo& aGeom2ElemInfo = anEntity2TGeom2ElemInfo[anEntity];
+
+      if(anEntity == eNOEUD){
+        aGeom2ElemInfo[ePOINT1] = theWrapper->GetPElemInfo(theMeshInfo);
+        continue;
+      }
+
+      TGeom2Size::const_iterator anIter2 = aGeom2Size.begin();
+      for(; anIter2 != aGeom2Size.end(); anIter2++){
+        const EGeometrieElement& aGeom = anIter2->first;
+        aGeom2ElemInfo[aGeom] = theWrapper->GetPElemInfo(theMeshInfo,anEntity,aGeom,MED::eNOD,&anErr);
+      }
+    }
+    ADDMSG(MYDEBUG,"\n");
+    return anEntity2TGeom2ElemInfo;
+  }
+
+  //---------------------------------------------------------------
+  TFamilyInfoSet
+  GetFamilyInfoSet(const PWrapper& theWrapper,
+                   const PMeshInfo& theMeshInfo)
+  {
+    MSG(MYDEBUG,"GetFamilies(...)");
+    TErr anErr;
+    TFamilyInfoSet aFamilyInfoSet;
+    TInt aNbFam = theWrapper->GetNbFamilies(*theMeshInfo);
+    INITMSG(MYDEBUG,"GetNbFamilies() = "<<aNbFam<<"\n");
+    for(TInt iFam = 1; iFam <= aNbFam; iFam++){
+      PFamilyInfo aFamilyInfo = theWrapper->GetPFamilyInfo(theMeshInfo,iFam,&anErr);
+      if(anErr >= 0)
+        aFamilyInfoSet.insert(aFamilyInfo);
+    }
+    ADDMSG(MYDEBUG,"\n");
+    return aFamilyInfoSet;
+  }
+
+  //---------------------------------------------------------------
+  TGroupInfo
+  GetGroupInfo(const TFamilyInfoSet& theFamilyInfoSet)
+  {
+    MSG(MYDEBUG,"GetFamiliesByGroup(...)");
+    TGroupInfo aGroup;
+    TFamilyInfoSet::const_iterator anIter = theFamilyInfoSet.begin();
+    for(; anIter != theFamilyInfoSet.end(); anIter++){
+      const PFamilyInfo& aFamilyInfo = *anIter;
+      TInt aNbGroup = aFamilyInfo->GetNbGroup();
+      for(TInt iGroup = 0; iGroup < aNbGroup; iGroup++){
+        aGroup[aFamilyInfo->GetGroupName(iGroup)].insert(aFamilyInfo);
+      }
+    }
+
+#ifdef _DEBUG_
+    if(MYDEBUG){
+      TGroupInfo::const_iterator anIter = aGroup.begin();
+      for(; anIter != aGroup.end(); anIter++){
+        const std::string& aName = anIter->first;
+        INITMSG(MYDEBUG,"aGroupName = '"<<aName<<"'\n");
+        const TFamilyInfoSet& aFamilyInfoSet = anIter->second;
+        TFamilyInfoSet::const_iterator anFamIter = aFamilyInfoSet.begin();
+        for(; anFamIter != aFamilyInfoSet.end(); anFamIter++){
+          const PFamilyInfo& aFamilyInfo = *anFamIter;
+          INITMSG(MYDEBUG,"aFamilyName = '"<<aFamilyInfo->GetName()<<"'\n");
+        }
+      }
+      ADDMSG(MYDEBUG,"\n");
+    }
+#endif
+
+    return aGroup;
+  }
+
+  //---------------------------------------------------------------
+  TFieldInfo2TimeStampInfoSet
+  GetFieldInfo2TimeStampInfoSet(const PWrapper& theWrapper,
+                                const PMeshInfo& theMeshInfo,
+                                const MED::TEntityInfo& theEntityInfo)
+  {
+    MSG(MYDEBUG,"GetFieldsByEntity(...)");
+    TFieldInfo2TimeStampInfoSet aFieldInfo2TimeStampInfoSet;
+    TInt aNbFields = theWrapper->GetNbFields();
+    INITMSG(MYDEBUG,"GetNbFields() = "<<aNbFields<<"\n");
+    for(TInt iField = 1; iField <= aNbFields; iField++){
+      PFieldInfo aFieldInfo = theWrapper->GetPFieldInfo(theMeshInfo,iField);
+      INITMSG(MYDEBUG,"aFieldName = '"<<aFieldInfo->GetName()<<
+              "'; aNbComp = "<<aFieldInfo->GetNbComp()<<"; ");
+      TGeom2Size aGeom2Size;
+      EEntiteMaillage anEntity = EEntiteMaillage(-1);
+      TInt aNbTimeStamps = theWrapper->GetNbTimeStamps(aFieldInfo,theEntityInfo,anEntity,aGeom2Size);
+      ADDMSG(MYDEBUG,"anEntity = "<<anEntity<<"; GetNbTimeStamps = "<<aNbTimeStamps<<"\n");
+      for(TInt iTimeStamp = 1; iTimeStamp <= aNbTimeStamps; iTimeStamp++){
+        PTimeStampInfo aTimeStamp =
+          theWrapper->GetPTimeStampInfo(aFieldInfo,anEntity,aGeom2Size,iTimeStamp);
+        aFieldInfo2TimeStampInfoSet[aFieldInfo].insert(aTimeStamp);
+        INITMSG(MYDEBUG,
+                "aDt = "<<aTimeStamp->GetDt()<<
+                ", Unit = \'"<<aTimeStamp->GetUnitDt()<<"\n");
+      }
+    }
+    ADDMSG(MYDEBUG,"\n");
+    return aFieldInfo2TimeStampInfoSet;
+  }
+
+  //---------------------------------------------------------------
+  TEntite2TFieldInfo2TimeStampInfoSet
+  GetEntite2TFieldInfo2TimeStampInfoSet(const TFieldInfo2TimeStampInfoSet& theFieldInfo2TimeStampInfoSet)
+  {
+    TEntite2TFieldInfo2TimeStampInfoSet anEntite2TFieldInfo2TimeStampInfoSet;
+    TFieldInfo2TimeStampInfoSet::const_iterator anIter = theFieldInfo2TimeStampInfoSet.begin();
+    for(; anIter != theFieldInfo2TimeStampInfoSet.end(); anIter++){
+      const TTimeStampInfoSet& aTimeStampInfoSet = anIter->second;
+      //const PFieldInfo& aFieldInfo = anIter->first;
+      if(aTimeStampInfoSet.empty())
+        continue;
+      const PTimeStampInfo& aTimeStampInfo = *aTimeStampInfoSet.begin();
+      anEntite2TFieldInfo2TimeStampInfoSet[ConvertEntity(aTimeStampInfo->GetEntity())].insert(*anIter);
+    }
+    return anEntite2TFieldInfo2TimeStampInfoSet;
+  }
+
+  //---------------------------------------------------------------
+  bool
+  operator<(const TFamilyTSize& theLeft, const TFamilyTSize& theRight)
+  {
+    const MED::PFamilyInfo& aLeftInfo = boost::get<0>(theLeft);
+    const MED::PFamilyInfo& aRightInfo = boost::get<0>(theRight);
+    return aLeftInfo->GetId() < aRightInfo->GetId();
+  }
+
+  //---------------------------------------------------------------
+  TEntity2FamilySet
+  GetEntity2FamilySet(const PWrapper& theWrapper,
+                      const TEntity2TGeom2ElemInfo& theEntity2TGeom2ElemInfo,
+                      const TFamilyInfoSet& theFamilyInfoSet)
+  {
+    MSG(MYDEBUG,"GetFamiliesByEntity(...)");
+    TEntity2FamilySet anEntity2FamilySet;
+
+    typedef std::map<TInt,PFamilyInfo> TId2Family;
+    TId2Family anId2Family;
+    TFamilyInfoSet::const_iterator anIter = theFamilyInfoSet.begin();
+    for(; anIter != theFamilyInfoSet.end(); anIter++){
+      const PFamilyInfo& aFamilyInfo = *anIter;
+      anId2Family.insert(TId2Family::value_type(aFamilyInfo->GetId(),aFamilyInfo));
+    }
+
+    if(!anId2Family.empty()){
+      typedef std::map<TInt,TInt> TFamilyID2Size;
+      typedef std::map<EEntiteMaillage,TFamilyID2Size> TEntity2FamilyID;
+      TEntity2FamilyID anEntity2FamilyID;
+
+      if(!theEntity2TGeom2ElemInfo.empty()){
+        TEntity2TGeom2ElemInfo::const_iterator anIter = theEntity2TGeom2ElemInfo.begin();
+        for(; anIter != theEntity2TGeom2ElemInfo.end(); anIter++){
+          const EEntiteMaillage& anEntity = anIter->first;
+          TFamilyID2Size& aFamilyID2Size = anEntity2FamilyID[anEntity];
+          const TGeom2ElemInfo& aGeom2ElemInfo = anIter->second;
+          TGeom2ElemInfo::const_iterator aGeom2ElemInfoIter = aGeom2ElemInfo.begin();
+          for(; aGeom2ElemInfoIter != aGeom2ElemInfo.end(); aGeom2ElemInfoIter++){
+            const PElemInfo& aElemInfo = aGeom2ElemInfoIter->second;
+            if(TInt aNbElem = aElemInfo->GetNbElem()){
+              for(TInt i = 0; i < aNbElem; i++){
+                aFamilyID2Size[aElemInfo->GetFamNum(i)] += 1;
+              }
+            }
+          }
+        }
+      }
+
+      if(!anEntity2FamilyID.empty()){
+        TEntity2FamilyID::const_iterator anIter = anEntity2FamilyID.begin();
+        for(; anIter != anEntity2FamilyID.end(); anIter++){
+          const EEntiteMaillage& anEntity = anIter->first;
+          INITMSG(MYDEBUG,"anEntity = "<<anEntity<<":\n");
+          const TFamilyID2Size& aFamilyID2Size = anIter->second;
+          TFamilyID2Size::const_iterator anIter2 = aFamilyID2Size.begin();
+          for(; anIter2 != aFamilyID2Size.end(); anIter2++){
+            TInt anId = anIter2->first;
+            TInt aSize = anIter2->second;
+            TId2Family::const_iterator anIter3 = anId2Family.find(anId);
+            if(anIter3 != anId2Family.end()){
+              const PFamilyInfo& aFamilyInfo = anIter3->second;
+              anEntity2FamilySet[anEntity].insert(TFamilyTSize(aFamilyInfo,aSize));
+              INITMSG(MYDEBUG,
+                      "aFamilyName = '"<<aFamilyInfo->GetName()<<
+                      "' anId = "<<aFamilyInfo->GetId()<<"\n");
+            }
+          }
+        }
+      }
+    }
+    ADDMSG(MYDEBUG,"\n");
+    return anEntity2FamilySet;
+  }
+
+  //---------------------------------------------------------------
+  TKey2Gauss
+  GetKey2Gauss(const PWrapper& theWrapper,
+               TErr* theErr,
+               EModeSwitch theMode)
+  {
+    INITMSG(MYDEBUG,"GetKey2Gauss - theMode = "<<theMode<<std::endl);
+    TKey2Gauss aKey2Gauss;
+    TInt aNbGauss = theWrapper->GetNbGauss(theErr);
+    for(TInt anId = 1; anId <= aNbGauss; anId++){
+      TGaussInfo::TInfo aPreInfo = theWrapper->GetGaussPreInfo(anId);
+      PGaussInfo anInfo = theWrapper->CrGaussInfo(aPreInfo,theMode);
+      theWrapper->GetGaussInfo(anId,anInfo,theErr);
+      TGaussInfo::TKey aKey = boost::get<0>(aPreInfo);
+      aKey2Gauss[aKey] = anInfo;
+
+#ifdef _DEBUG_
+      const EGeometrieElement& aGeom = boost::get<0>(aKey);
+      const std::string& aName = boost::get<1>(aKey);
+      INITMSG(MYDEBUG,
+              "- aGeom = "<<aGeom<<
+              "; aName = '"<<aName<<"'"<<
+              std::endl);
+#endif
+
+    }
+    return aKey2Gauss;
+  }
+
+  //---------------------------------------------------------------
+  PProfileInfo
+  GetProfileInfo(const PWrapper& theWrapper,
+                 const std::string& theProfileName,
+                 TErr* theErr,
+                 EModeProfil theMode)
+  {
+    PProfileInfo anInfo;
+    TInt aNbProfiles = theWrapper->GetNbProfiles(theErr);
+    for(TInt anId = 1; anId <= aNbProfiles; anId++){
+      TProfileInfo::TInfo aPreInfo = theWrapper->GetProfilePreInfo(anId);
+      const std::string& aName = boost::get<0>(aPreInfo);
+      if(aName == theProfileName)
+        return theWrapper->GetPProfileInfo(anId,theMode,theErr);
+    }
+    return anInfo;
+  }
+
+  //---------------------------------------------------------------
+  TMKey2Profile
+  GetMKey2Profile(const PWrapper& theWrapper,
+                  TErr* theErr,
+                  EModeProfil theMode)
+  {
+    INITMSG(MYDEBUG,"GetMKey2Profile - theMode = "<<theMode<<std::endl);
+    TKey2Profile aKey2Profile;
+    TInt aNbProfiles = theWrapper->GetNbProfiles(theErr);
+    for(TInt anId = 1; anId <= aNbProfiles; anId++){
+      TProfileInfo::TInfo aPreInfo = theWrapper->GetProfilePreInfo(anId);
+      PProfileInfo anInfo = theWrapper->GetPProfileInfo(anId,theMode,theErr);
+      const std::string& aName = boost::get<0>(aPreInfo);
+      aKey2Profile[aName] = anInfo;
+
+#ifdef _DEBUG_
+      INITMSG(MYDEBUG,
+              "- aName = '"<<aName<<"'"<<
+              " : "<<
+              std::endl);
+      TInt aNbElem = anInfo->GetSize();
+      for(TInt iElem = 0; iElem < aNbElem; iElem++){
+        ADDMSG(MYVALUEDEBUG,anInfo->GetElemNum(iElem)<<", ");
+      }
+      ADDMSG(MYVALUEDEBUG, std::endl);
+#endif
+
+    }
+    return TMKey2Profile(theMode,aKey2Profile);
+  }
+
+  //---------------------------------------------------------------
+  EEntiteMaillage
+  GetEntityByFamilyId(PGrilleInfo& theInfo,
+                      TInt theId)
+  {
+    TElemNum::iterator aNodeFamIter = (theInfo->myFamNumNode).begin();
+    for(;aNodeFamIter != (theInfo->myFamNumNode).end(); aNodeFamIter++){
+      if(theId == *aNodeFamIter)
+        return eNOEUD;
+    }
+    TElemNum::iterator aCellFamIter = (theInfo->myFamNum).begin();
+    for(;aCellFamIter != (theInfo->myFamNum).end(); aCellFamIter++){
+      if(theId == *aCellFamIter)
+        return eMAILLE;
+    }
+    EXCEPTION(std::runtime_error, "GetEntityByFamilyId - fails");
+    return EEntiteMaillage(-1);
+  }
+
+  //---------------------------------------------------------------
+  TFamilyID2NbCells
+  GetFamilyID2NbCells(PGrilleInfo& theInfo)
+  {
+    TFamilyID2NbCells aFamily2NbCells;
+    TInt aNbNodes = theInfo->myFamNumNode.size();
+    TInt aNbCells = theInfo->myFamNum.size();
+    for(TInt i=0; i<aNbNodes; i++) aFamily2NbCells[theInfo->GetFamNumNode(i)] = 0;
+    for(TInt i=0; i<aNbCells; i++) aFamily2NbCells[theInfo->GetFamNum(i)] = 0;
+    for(TInt i=0; i<aNbNodes; i++) aFamily2NbCells[theInfo->GetFamNumNode(i)] += 1;
+    for(TInt i=0; i<aNbCells; i++) aFamily2NbCells[theInfo->GetFamNum(i)] += 1;
+    return aFamily2NbCells;
+  }
+
+  //---------------------------------------------------------------
+  EEntiteMaillage
+  ConvertEntity(const EEntiteMaillage& aEntity)
+  {
+    switch( aEntity ){
+    case eNOEUD_ELEMENT:
+    case eMAILLE:
+      return eMAILLE; // eNOEUD_ELEMENT is eMAILLE
+    case eFACE:
+    case eARETE:
+    case eNOEUD:
+      return aEntity;
+    default:
+      break;
+    }
+    return EEntiteMaillage(-1);
+  }
+}
diff --git a/src/MEDWrapper/MED_Algorithm.hxx b/src/MEDWrapper/MED_Algorithm.hxx
new file mode 100644 (file)
index 0000000..0ecadad
--- /dev/null
@@ -0,0 +1,146 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_Algorithm_HeaderFile
+#define MED_Algorithm_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+#include "MED_Structures.hxx"
+
+#include <boost/tuple/tuple.hpp>
+
+#include <set>
+#include <string>
+
+namespace MED
+{
+  //---------------------------------------------------------------
+  typedef std::map<EGeometrieElement,PElemInfo> TGeom2ElemInfo;
+  typedef std::map<EEntiteMaillage,TGeom2ElemInfo> TEntity2TGeom2ElemInfo;
+  typedef std::set<PFamilyInfo> TFamilyInfoSet;
+  typedef std::map<std::string,TFamilyInfoSet> TGroupInfo;
+  typedef boost::tuple<PFamilyInfo,TInt> TFamilyTSize;
+  typedef std::set<TFamilyTSize> TFamilyTSizeSet;
+  typedef std::map<EEntiteMaillage,TFamilyTSizeSet> TEntity2FamilySet;
+  typedef std::set<PTimeStampInfo> TTimeStampInfoSet;
+  typedef std::map<PFieldInfo,TTimeStampInfoSet> TFieldInfo2TimeStampInfoSet;
+  typedef std::map<EEntiteMaillage,TFieldInfo2TimeStampInfoSet> TEntite2TFieldInfo2TimeStampInfoSet;
+  typedef std::map<TGaussInfo::TKey,PGaussInfo,TGaussInfo::TLess> TKey2Gauss;
+  typedef std::map<TProfileInfo::TKey,PProfileInfo> TKey2Profile;
+  typedef boost::tuple<EModeProfil,TKey2Profile> TMKey2Profile;
+  typedef std::map<TInt,TInt> TFamilyID2NbCells;
+
+  //---------------------------------------------------------------
+  //! Get set of TElemInfo by its geometrical type and corresponding MED ENTITY
+  MEDWRAPPER_EXPORT
+  TEntity2TGeom2ElemInfo
+  GetEntity2TGeom2ElemInfo(const PWrapper& theWrapper,
+                           const PMeshInfo& theMeshInfo,
+                           const MED::TEntityInfo& theEntityInfo);
+
+  //---------------------------------------------------------------
+  //! Read set of MED FAMILIES for defined MED file
+  MEDWRAPPER_EXPORT
+  TFamilyInfoSet
+  GetFamilyInfoSet(const PWrapper& theWrapper,
+                   const PMeshInfo& theMeshInfo);
+
+  //---------------------------------------------------------------
+  //! Compare two MED FAMILIES
+  MEDWRAPPER_EXPORT
+  bool
+  operator<(const TFamilyTSize& theLeft, const TFamilyTSize& theRight);
+
+  //---------------------------------------------------------------
+  //! Split set of MED FAMILIES by corresponding MED ENTITY
+  MEDWRAPPER_EXPORT
+  TEntity2FamilySet
+  GetEntity2FamilySet(const PWrapper& theWrapper,
+                      const TEntity2TGeom2ElemInfo& theEntity2TGeom2ElemInfo,
+                      const TFamilyInfoSet& theFamilyInfoSet);
+
+  //---------------------------------------------------------------
+  //! Split the input set of MED FAMILIES by corresponding MED GROUPS
+  MEDWRAPPER_EXPORT
+  TGroupInfo
+  GetGroupInfo(const TFamilyInfoSet& theFamilyInfoSet);
+
+  //---------------------------------------------------------------
+  //! Read set of MED TIMESTAMPS groupped by corresponding MED FIELDS
+  MEDWRAPPER_EXPORT
+  TFieldInfo2TimeStampInfoSet
+  GetFieldInfo2TimeStampInfoSet(const PWrapper& theWrapper,
+                                const PMeshInfo& theMeshInfo,
+                                const MED::TEntityInfo& theEntityInfo);
+
+  //---------------------------------------------------------------
+  //! Split the input set of MED TIMESTAMPS by corresponding MED FIELDS and MED ENTITIES
+  MEDWRAPPER_EXPORT
+  TEntite2TFieldInfo2TimeStampInfoSet
+  GetEntite2TFieldInfo2TimeStampInfoSet(const TFieldInfo2TimeStampInfoSet& theFieldInfo2TimeStampInfoSet);
+
+  //---------------------------------------------------------------
+  //! Read set of MED GAUSS
+  MEDWRAPPER_EXPORT
+  TKey2Gauss
+  GetKey2Gauss(const PWrapper& theWrapper,
+               TErr* theErr = NULL,
+               EModeSwitch theMode = eFULL_INTERLACE);
+
+  //---------------------------------------------------------------
+  //! Get MED PROFILE by its name
+  MEDWRAPPER_EXPORT
+  PProfileInfo
+  GetProfileInfo(const PWrapper& theWrapper,
+                 const std::string& theProfileName,
+                 TErr* theErr = NULL,
+                 EModeProfil theMode = eCOMPACT);
+
+  //---------------------------------------------------------------
+  //! Read set of MED PROFILES
+  MEDWRAPPER_EXPORT
+  TMKey2Profile
+  GetMKey2Profile(const PWrapper& theWrapper,
+                  TErr* theErr = NULL,
+                  EModeProfil theMode = eCOMPACT);
+
+  //---------------------------------------------------------------
+  //! Get Entity for Grille by family id.
+  MEDWRAPPER_EXPORT
+  EEntiteMaillage
+  GetEntityByFamilyId(PGrilleInfo& theInfo,
+                      TInt theId);
+
+  //---------------------------------------------------------------
+  //! Get Number of cells for theId family, for Grille
+  MEDWRAPPER_EXPORT
+  TFamilyID2NbCells
+  GetFamilyID2NbCells(PGrilleInfo& theInfo);
+
+  //---------------------------------------------------------------
+  //! Convert eNOEUD_ELEMENT to eMAILLE
+  MEDWRAPPER_EXPORT
+  EEntiteMaillage
+  ConvertEntity(const EEntiteMaillage& aEntity);
+}
+
+#endif // MED_Algorithm_HeaderFile
diff --git a/src/MEDWrapper/MED_Common.cxx b/src/MEDWrapper/MED_Common.cxx
new file mode 100644 (file)
index 0000000..8eb8db7
--- /dev/null
@@ -0,0 +1,121 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_Common.hxx"
+#include <med.h>
+
+namespace MED
+{
+  TInt
+  GetDESCLength()
+  {
+    return 200;
+  }
+
+  TInt
+  GetIDENTLength()
+  {
+    return 8;
+  }
+
+  TInt
+  GetNOMLength()
+  {
+    return 64;
+  }
+
+  TInt
+  GetLNOMLength()
+  {
+    return 80;
+  }
+
+  TInt
+  GetPNOMLength()
+  {
+    return 16;
+  }
+
+  void
+  GetVersionRelease(TInt& major, TInt& minor, TInt& release)
+  {
+    major   = MED_MAJOR_NUM;
+    minor   = MED_MINOR_NUM;
+    release = MED_RELEASE_NUM;
+  }
+
+  TInt
+  GetNbConn(EGeometrieElement typmai,
+            EEntiteMaillage typent,
+            TInt mdim)
+  {
+    return typmai % 100;
+  }
+
+  TInt
+  GetNbNodes(EGeometrieElement typmai)
+  {
+    return typmai % 100;
+  }
+
+  const MED::TEntity2GeomSet& GetEntity2GeomSet()
+  {
+    static MED::TEntity2GeomSet Entity2GeomSet;
+
+    if ( Entity2GeomSet.empty() ) {
+      TGeomSet& aGeomARETESet = Entity2GeomSet[MED::eARETE];
+      aGeomARETESet.insert(MED::eSEG2);
+      aGeomARETESet.insert(MED::eSEG3);
+
+      TGeomSet& aGeomFACESet = Entity2GeomSet[MED::eFACE];
+      aGeomFACESet.insert(MED::eTRIA3);
+      aGeomFACESet.insert(MED::eQUAD4);
+      aGeomFACESet.insert(MED::eTRIA6);
+      aGeomFACESet.insert(MED::eTRIA7);
+      aGeomFACESet.insert(MED::eQUAD8);
+      aGeomFACESet.insert(MED::eQUAD9);
+      aGeomFACESet.insert(MED::ePOLYGONE);
+      aGeomFACESet.insert(MED::ePOLYGON2);
+
+      TGeomSet& aGeomMAILLESet = Entity2GeomSet[MED::eMAILLE];
+      aGeomMAILLESet.insert(MED::ePOINT1);
+      aGeomMAILLESet.insert(aGeomARETESet.begin(), aGeomARETESet.end());
+      aGeomMAILLESet.insert(aGeomFACESet.begin(), aGeomFACESet.end());
+      aGeomMAILLESet.insert(MED::eTETRA4);
+      aGeomMAILLESet.insert(MED::ePYRA5);
+      aGeomMAILLESet.insert(MED::ePENTA6);
+      aGeomMAILLESet.insert(MED::eHEXA8);
+      aGeomMAILLESet.insert(MED::eOCTA12);
+      aGeomMAILLESet.insert(MED::eTETRA10);
+      aGeomMAILLESet.insert(MED::ePYRA13);
+      aGeomMAILLESet.insert(MED::ePENTA15);
+      aGeomMAILLESet.insert(MED::eHEXA20);
+      aGeomMAILLESet.insert(MED::eHEXA27);
+      aGeomMAILLESet.insert(MED::ePOLYEDRE);
+
+      /* This combination allows reading nb of models of structure elements */
+      Entity2GeomSet[MED::eSTRUCT_ELEMENT].insert(MED::eAllGeoType);
+    }
+
+    return Entity2GeomSet;
+  }
+}
diff --git a/src/MEDWrapper/MED_Common.hxx b/src/MEDWrapper/MED_Common.hxx
new file mode 100644 (file)
index 0000000..6a861eb
--- /dev/null
@@ -0,0 +1,174 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_Common_HeaderFile
+#define MED_Common_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+#include "MED_Vector.hxx"
+#include "MED_SharedPtr.hxx"
+
+#include <string>
+#include <set>
+#include <map>
+
+#include <hdf5.h>
+
+#ifdef WIN32
+#pragma warning(disable:4099)
+#endif
+
+namespace MED
+{
+  typedef enum {eFAUX, eVRAI} EBooleen;
+  typedef double TFloat;
+#if defined(HAVE_F77INT64)
+  typedef long TInt;
+#else
+  typedef int TInt;
+#endif
+  typedef hid_t TIdt;
+  typedef herr_t TErr;
+
+  typedef enum {eFULL_INTERLACE, eNO_INTERLACE} EModeSwitch;
+
+  typedef enum {eFLOAT64=6, eINT=24, eLONG=26} ETypeChamp;
+
+  typedef enum {eNON_STRUCTURE, eSTRUCTURE} EMaillage;
+
+  typedef enum {eCART, eCYL, eSPHER} ERepere;
+
+  typedef enum {eNOD, eDESC} EConnectivite;
+
+  typedef enum {ePOINT1=1, eSEG2=102, eSEG3=103, eTRIA3=203,
+                eQUAD4=204, eTRIA6=206, eTRIA7=207, eQUAD8=208, eQUAD9=209, eTETRA4=304,
+                ePYRA5=305, ePENTA6=306, eHEXA8=308, eOCTA12=312, eTETRA10=310,
+                ePYRA13=313, ePENTA15=315, ePENTA18=318, eHEXA20=320, eHEXA27=327,
+                ePOLYGONE=400, ePOLYGON2=420, ePOLYEDRE=500, eNONE=0,
+                eBALL=1101, // no such a type in med.h, it's just a trick
+                eAllGeoType=-1} EGeometrieElement;
+
+  typedef enum {eMAILLE, eFACE, eARETE, eNOEUD, eNOEUD_ELEMENT, eSTRUCT_ELEMENT} EEntiteMaillage;
+
+  typedef enum {eNO_PFLMOD, eGLOBAL, eCOMPACT} EModeProfil;
+
+  typedef enum {eGRILLE_CARTESIENNE, eGRILLE_POLAIRE, eGRILLE_STANDARD} EGrilleType;
+
+  typedef enum {eCOOR, eCONN, eNOM, eNUM, eFAM, eCOOR_IND1, eCOOR_IND2, eCOOR_IND3} ETable;
+
+  typedef TVector<TInt> TIntVector;
+  typedef TVector<TFloat> TFloatVector;
+  typedef TVector<std::string> TStringVector;
+  typedef std::set<std::string> TStringSet;
+
+  typedef std::map<EGeometrieElement,TInt> TGeom2Size;
+  typedef std::map<EEntiteMaillage,TGeom2Size> TEntityInfo;
+
+  typedef std::set<EGeometrieElement> TGeomSet;
+  typedef std::map<EEntiteMaillage,TGeomSet> TEntity2GeomSet;
+
+  struct TNameInfo;
+  typedef SharedPtr<TNameInfo> PNameInfo;
+
+  struct TMeshInfo;
+  typedef SharedPtr<TMeshInfo> PMeshInfo;
+
+  struct TFamilyInfo;
+  typedef SharedPtr<TFamilyInfo> PFamilyInfo;
+
+  struct TElemInfo;
+  typedef SharedPtr<TElemInfo> PElemInfo;
+
+  struct TNodeInfo;
+  typedef SharedPtr<TNodeInfo> PNodeInfo;
+
+  struct TPolygoneInfo;
+  typedef SharedPtr<TPolygoneInfo> PPolygoneInfo;
+
+  struct TPolyedreInfo;
+  typedef SharedPtr<TPolyedreInfo> PPolyedreInfo;
+
+  struct TCellInfo;
+  typedef SharedPtr<TCellInfo> PCellInfo;
+
+  struct TBallInfo;
+  typedef SharedPtr<TBallInfo> PBallInfo;
+
+  struct TFieldInfo;
+  typedef SharedPtr<TFieldInfo> PFieldInfo;
+
+  struct TTimeStampInfo;
+  typedef SharedPtr<TTimeStampInfo> PTimeStampInfo;
+
+  struct TProfileInfo;
+  typedef SharedPtr<TProfileInfo> PProfileInfo;
+
+  struct TGaussInfo;
+  typedef SharedPtr<TGaussInfo> PGaussInfo;
+
+  class TGrilleInfo;
+  typedef SharedPtr<TGrilleInfo> PGrilleInfo;
+
+  struct TTimeStampValueBase;
+  typedef SharedPtr<TTimeStampValueBase> PTimeStampValueBase;
+
+  struct TWrapper;
+  typedef SharedPtr<TWrapper> PWrapper;
+
+  MEDWRAPPER_EXPORT
+  TInt
+  GetDESCLength();
+
+  MEDWRAPPER_EXPORT
+  TInt
+  GetIDENTLength();
+
+  MEDWRAPPER_EXPORT
+  TInt
+  GetNOMLength();
+
+  MEDWRAPPER_EXPORT
+  TInt
+  GetLNOMLength();
+
+  MEDWRAPPER_EXPORT
+  TInt
+  GetPNOMLength();
+
+  MEDWRAPPER_EXPORT
+  void
+  GetVersionRelease(TInt&, TInt&, TInt&);
+
+  MEDWRAPPER_EXPORT
+  TInt
+  GetNbConn(EGeometrieElement, EEntiteMaillage, TInt);
+
+  MEDWRAPPER_EXPORT
+  TInt
+  GetNbNodes(EGeometrieElement typmai);
+
+  MEDWRAPPER_EXPORT
+  const TEntity2GeomSet&
+  GetEntity2GeomSet();
+}
+
+#endif // MED_Common_HeaderFile
diff --git a/src/MEDWrapper/MED_CoordUtils.cxx b/src/MEDWrapper/MED_CoordUtils.cxx
new file mode 100644 (file)
index 0000000..889d8c8
--- /dev/null
@@ -0,0 +1,156 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_CoordUtils.hxx"
+#include "MED_Utilities.hxx"
+
+namespace MED
+{
+  enum ECoordName{eX, eY, eZ, eNone};
+
+  template<ECoordName TCoordId>
+  TFloat
+  GetCoord(const TCCoordSlice& theCoordSlice)
+  {
+    return theCoordSlice[TCoordId];
+  }
+
+  template<>
+  TFloat
+  GetCoord<eNone>(const TCCoordSlice& theCoordSlice)
+  {
+    return 0.0;
+  }
+
+  TGetCoord
+  aXYZGetCoord[3] = {
+    &GetCoord<eX>,
+    &GetCoord<eY>,
+    &GetCoord<eZ>
+  };
+
+  TGetCoord
+  aXYGetCoord[3] = {
+    &GetCoord<eX>,
+    &GetCoord<eY>,
+    &GetCoord<eNone>
+  };
+
+  TGetCoord
+  aYZGetCoord[3] = {
+    &GetCoord<eNone>,
+    &GetCoord<eX>,
+    &GetCoord<eY>
+  };
+
+  TGetCoord
+  aXZGetCoord[3] = {
+    &GetCoord<eX>,
+    &GetCoord<eNone>,
+    &GetCoord<eY>
+  };
+
+  TGetCoord
+  aXGetCoord[3] = {
+    &GetCoord<eX>,
+    &GetCoord<eNone>,
+    &GetCoord<eNone>
+  };
+
+  TGetCoord
+  aYGetCoord[3] = {
+    &GetCoord<eNone>,
+    &GetCoord<eX>,
+    &GetCoord<eNone>
+  };
+
+  TGetCoord
+  aZGetCoord[3] = {
+    &GetCoord<eNone>,
+    &GetCoord<eNone>,
+    &GetCoord<eX>
+  };
+
+  //---------------------------------------------------------------
+  TCoordHelper
+  ::TCoordHelper(TGetCoord* theGetCoord):
+    myGetCoord(theGetCoord)
+  {}
+
+  TFloat
+  TCoordHelper
+  ::GetCoord(TCCoordSlice& theCoordSlice,
+             TInt theCoordId)
+  {
+    return (*myGetCoord[theCoordId])(theCoordSlice);
+  }
+
+  //---------------------------------------------------------------
+  PCoordHelper
+  GetCoordHelper(PNodeInfo theNodeInfo)
+  {
+    PCoordHelper aCoordHelper;
+    {
+      PMeshInfo aMeshInfo = theNodeInfo->GetMeshInfo();
+      TInt aMeshDimension = aMeshInfo->GetDim();
+      bool anIsDimPresent[3] = {false, false, false};
+      for(int iDim = 0; iDim < aMeshDimension; iDim++){
+        // PAL16857(SMESH not conform to the MED convention) ->
+        // 1D - always along X
+        // 2D - always in XOY plane
+        anIsDimPresent[iDim] = iDim < aMeshDimension;
+//      std::string aName = theNodeInfo->GetCoordName(iDim);
+//         if ( aName.size() > 1 ) // PAL12148, aName has size 8 or 16
+//           aName = aName.substr(0,1);
+//      if(aName == "x" || aName == "X")
+//        anIsDimPresent[eX] = true;
+//      else if(aName == "y" || aName == "Y")
+//        anIsDimPresent[eY] = true;
+//      else if(aName == "z" || aName == "Z")
+//        anIsDimPresent[eZ] = true;
+      }
+
+      switch(aMeshDimension){
+      case 3:
+        aCoordHelper.reset(new TCoordHelper(aXYZGetCoord));
+        break;
+      case 2:
+        if(anIsDimPresent[eY] && anIsDimPresent[eZ])
+          aCoordHelper.reset(new TCoordHelper(aYZGetCoord));
+        else if(anIsDimPresent[eX] && anIsDimPresent[eZ])
+          aCoordHelper.reset(new TCoordHelper(aXZGetCoord));
+        else
+          aCoordHelper.reset(new TCoordHelper(aXYGetCoord));
+        break;
+      case 1:
+        if(anIsDimPresent[eY])
+          aCoordHelper.reset(new TCoordHelper(aYGetCoord));
+        else if(anIsDimPresent[eZ])
+          aCoordHelper.reset(new TCoordHelper(aZGetCoord));
+        else
+          aCoordHelper.reset(new TCoordHelper(aXGetCoord));
+        break;
+      }
+    }
+    return aCoordHelper;
+  }
+}
diff --git a/src/MEDWrapper/MED_CoordUtils.hxx b/src/MEDWrapper/MED_CoordUtils.hxx
new file mode 100644 (file)
index 0000000..c722195
--- /dev/null
@@ -0,0 +1,53 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_CoordUtils_HeaderFile
+#define MED_CoordUtils_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+#include "MED_Structures.hxx"
+
+namespace MED
+{
+  typedef TFloat (*TGetCoord)(const TCCoordSlice& theCoordSlice);
+
+  //---------------------------------------------------------------
+  class MEDWRAPPER_EXPORT TCoordHelper
+  {
+    TGetCoord* myGetCoord;
+
+  public:
+    TCoordHelper(TGetCoord* theGetCoord);
+
+    TFloat
+    GetCoord(TCCoordSlice& theCoordSlice,
+             TInt theCoordId);
+  };
+  typedef SharedPtr<TCoordHelper> PCoordHelper;
+
+  //---------------------------------------------------------------
+  MEDWRAPPER_EXPORT
+  PCoordHelper
+  GetCoordHelper(PNodeInfo theNodeInfo);
+}
+
+#endif // MED_CoordUtils_HeaderFile
diff --git a/src/MEDWrapper/MED_Factory.cxx b/src/MEDWrapper/MED_Factory.cxx
new file mode 100644 (file)
index 0000000..02b7e86
--- /dev/null
@@ -0,0 +1,120 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_Factory.hxx"
+#include "MED_Utilities.hxx"
+#include "MED_Wrapper.hxx"
+
+#include <stdio.h>
+#include <errno.h>
+#include <sstream>
+
+#include <med.h>
+extern "C"
+{
+#ifndef WIN32
+  #include <unistd.h>
+#endif
+}
+
+namespace MED
+{
+  bool exists(const std::string& fileName)
+  {
+#ifdef WIN32
+    return (GetFileAttributes(xmlPath.c_str()) != INVALID_FILE_ATTRIBUTES);
+#else
+    return (access(fileName.c_str(), F_OK) == 0);
+#endif
+  }
+
+  bool CheckCompatibility(const std::string& fileName)
+  {
+    bool ok = false;
+    // check that file is accessible
+    if ( exists(fileName) ) {
+      // check HDF5 && MED compatibility
+      med_bool hdfok, medok;
+      MEDfileCompatibility(fileName.c_str(), &hdfok, &medok);
+      if ( hdfok && medok ) {
+        med_idt aFid = MEDfileOpen(fileName.c_str(), MED_ACC_RDONLY);
+        if (aFid >= 0) {
+          med_int major, minor, release;
+          med_err ret = MEDfileNumVersionRd(aFid, &major, &minor, &release);
+          if (ret >= 0) {
+            int version = 100*major + minor;
+            if (version >= 202)
+              ok = true;
+          }
+        }
+        MEDfileClose(aFid);
+      }
+    }
+    return ok;
+  }
+
+  bool GetMEDVersion(const std::string& fileName, int& major, int& minor, int& release)
+  {
+    bool ok = false;
+    major = minor = release = 0;
+    med_idt aFid = MEDfileOpen(fileName.c_str(), MED_ACC_RDONLY);
+    if (aFid >= 0) {
+      med_int _major, _minor, _release;
+      med_err ret = MEDfileNumVersionRd(aFid, &_major, &_minor, &_release);
+      if (ret == 0) {
+        major = _major;
+        minor = _minor;
+        release = _release;
+        ok = true;
+      }
+      MEDfileClose(aFid);
+    }
+    return ok;
+  }
+
+  std::string GetMEDVersion(const std::string& fileName)
+  {
+    std::string version;
+    int major, minor, release;
+    if (GetMEDVersion(fileName, major, minor, release)) {
+      std::ostringstream os;
+      os << major << "." << minor << "." << release;
+      version = os.str();
+    }
+    return version;
+  }
+
+  PWrapper CrWrapperR(const std::string& fileName)
+  {
+    if (!CheckCompatibility(fileName)) {
+      EXCEPTION(std::runtime_error, "Cannot open file '"<<fileName<<"'.");
+    }
+    return new MED::TWrapper(fileName);
+  }
+
+  PWrapper CrWrapperW(const std::string& fileName)
+  {
+    if (!CheckCompatibility(fileName))
+      remove(fileName.c_str());
+    return new MED::TWrapper(fileName);
+  }
+}
diff --git a/src/MEDWrapper/MED_Factory.hxx b/src/MEDWrapper/MED_Factory.hxx
new file mode 100644 (file)
index 0000000..3dea624
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_Factory_HeaderFile
+#define MED_Factory_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+#include "MED_Wrapper.hxx"
+
+#include <string>
+
+namespace MED
+{
+  MEDWRAPPER_EXPORT
+  std::string GetMEDVersion( const std::string& );
+
+  MEDWRAPPER_EXPORT
+  bool GetMEDVersion( const std::string&, int&, int&, int& );
+
+  MEDWRAPPER_EXPORT
+  bool CheckCompatibility( const std::string& );
+
+  MEDWRAPPER_EXPORT
+  PWrapper CrWrapperR( const std::string& );
+
+  MEDWRAPPER_EXPORT
+  PWrapper CrWrapperW( const std::string& );
+}
+
+#endif // MED_Factory_HeaderFile
diff --git a/src/MEDWrapper/MED_GaussDef.cxx b/src/MEDWrapper/MED_GaussDef.cxx
new file mode 100644 (file)
index 0000000..c45af1f
--- /dev/null
@@ -0,0 +1,565 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_GaussDef.hxx"
+#include "MED_Utilities.hxx"
+#include "MED_GaussUtils.hxx"
+
+namespace MED
+{
+  //---------------------------------------------------------------
+
+  void TGaussDef::add(const double x, const double weight)
+  {
+    if ( dim() != 1 )
+      EXCEPTION( std::logic_error,"dim() != 1");
+    if ( myWeights.capacity() == myWeights.size() )
+      EXCEPTION( std::logic_error,"Extra gauss point");
+    myCoords.push_back( x );
+    myWeights.push_back( weight );
+  }
+  void TGaussDef::add(const double x, const double y, const double weight)
+  {
+    if ( dim() != 2 )
+      EXCEPTION( std::logic_error,"dim() != 2");
+    if ( myWeights.capacity() == myWeights.size() )
+      EXCEPTION( std::logic_error,"Extra gauss point");
+    myCoords.push_back( x );
+    myCoords.push_back( y );
+    myWeights.push_back( weight );
+  }
+  void TGaussDef::add(const double x, const double y, const double z, const double weight)
+  {
+    if ( dim() != 3 )
+      EXCEPTION( std::logic_error,"dim() != 3");
+    if ( myWeights.capacity() == myWeights.size() )
+      EXCEPTION( std::logic_error,"Extra gauss point");
+    myCoords.push_back( x );
+    myCoords.push_back( y );
+    myCoords.push_back( z );
+    myWeights.push_back( weight );
+  }
+  void TGaussDef::setRefCoords(const TShapeFun& aShapeFun)
+  {
+    myRefCoords.reserve( aShapeFun.myRefCoord.size() );
+    myRefCoords.assign( aShapeFun.myRefCoord.begin(),
+                        aShapeFun.myRefCoord.end() );
+  }
+
+  //---------------------------------------------------------------
+  /*!
+   * \brief Fill definition of gauss points family
+   */
+  //---------------------------------------------------------------
+
+  TGaussDef::TGaussDef(const int geom, const int nbGauss, const int variant)
+  {
+    myType = geom;
+    myCoords .reserve( nbGauss * dim() );
+    myWeights.reserve( nbGauss );
+
+    switch ( geom ) {
+
+    case eSEG2:
+    case eSEG3:
+      if (geom == eSEG2) setRefCoords( TSeg2a() );
+      else               setRefCoords( TSeg3a() );
+      switch ( nbGauss ) {
+      case 1: {
+        add( 0.0, 2.0 ); break;
+      }
+      case 2: {
+        const double a = 0.577350269189626;
+        add(  a,  1.0 );
+        add( -a,  1.0 ); break;
+      }
+      case 3: {
+        const double a = 0.774596669241;
+        const double P1 = 1./1.8;
+        const double P2 = 1./1.125;
+        add( -a,  P1 );
+        add(  0,  P2 );
+        add(  a,  P1 ); break;
+      }
+      case 4: {
+        const double a  = 0.339981043584856, b  = 0.861136311594053;
+        const double P1 = 0.652145154862546, P2 = 0.347854845137454 ;
+        add(  a,  P1 );
+        add( -a,  P1 );
+        add(  b,  P2 );
+        add( -b,  P2 ); break;
+      }
+      default:
+        EXCEPTION( std::logic_error,"Invalid nb of gauss points for SEG"<<nbGauss);
+      }
+      break;
+
+    case eTRIA3:
+    case eTRIA6:
+      if ( variant == 1 ) {
+        if (geom == eTRIA3) setRefCoords( TTria3b() );
+        else                setRefCoords( TTria6b() );
+        switch ( nbGauss ) {
+        case 1: { // FPG1
+          add( 1/3., 1/3., 1/2. ); break;
+        }
+        case 3: { // FPG3
+          // what about COT3 ???
+          add( 1/6., 1/6., 1/6. );
+          add( 2/3., 1/6., 1/6. );
+          add( 1/6., 2/3., 1/6. ); break;
+        }
+        case 4: { // FPG4
+          add( 1/5., 1/5.,  25/(24*4.) );
+          add( 3/5., 1/5.,  25/(24*4.) );
+          add( 1/5., 3/5.,  25/(24*4.) );
+          add( 1/3., 1/3., -27/(24*4.) ); break;
+        }
+        case 6: { // FPG6
+          const double P1 = 0.11169079483905, P2 = 0.0549758718227661;
+          const double a  = 0.445948490915965, b = 0.091576213509771;
+          add(     b,     b, P2 );
+          add( 1-2*b,     b, P2 );
+          add(     b, 1-2*b, P2 );
+          add(     a, 1-2*a, P1 );
+          add(     a,     a, P1 );
+          add( 1-2*a,     a, P1 ); break;
+        }
+        case 7: { // FPG7
+          const double A  = 0.470142064105115;
+          const double B  = 0.101286507323456;
+          const double P1 = 0.066197076394253;
+          const double P2 = 0.062969590272413;
+          add(  1/3.,  1/3., 9/80. );
+          add(     A,     A, P1 );
+          add( 1-2*A,     A, P1 );
+          add(     A, 1-2*A, P1 );
+          add(     B,     B, P2 );
+          add( 1-2*B,     B, P2 );
+          add(     B, 1-2*B, P2 ); break;
+        }
+        case 12: { // FPG12
+          const double A  = 0.063089014491502;
+          const double B  = 0.249286745170910;
+          const double C  = 0.310352451033785;
+          const double D  = 0.053145049844816;
+          const double P1 = 0.025422453185103;
+          const double P2 = 0.058393137863189;
+          const double P3 = 0.041425537809187;
+          add(     A,     A, P1 );
+          add( 1-2*A,     A, P1 );
+          add(     A, 1-2*A, P1 );
+          add(     B,     B, P2 );
+          add( 1-2*B,     B, P2 );
+          add(     B, 1-2*B, P2 );
+          add(     C,     D, P3 );
+          add(     D,     C, P3 );
+          add( 1-C-D,     C, P3 );
+          add( 1-C-D,     D, P3 );
+          add(     C, 1-C-D, P3 );
+          add(     D, 1-C-D, P3 ); break;
+        }
+        default:
+          EXCEPTION( std::logic_error,"Invalid nb of gauss points for TRIA, variant 1: "
+                     <<nbGauss);
+        }
+      }
+      else if ( variant == 2 ) {
+        if (geom == eTRIA3) setRefCoords( TTria3a() );
+        else                setRefCoords( TTria6a() );
+        switch ( nbGauss ) {
+        case 1: {
+          add( -1/3., -1/3., 2. ); break;
+        }
+        case 3: {
+          add( -2/3.,  1/3., 2/3. );
+          add( -2/3., -2/3., 2/3. );
+          add(  1/3., -2/3., 2/3. ); break;
+        }
+        case 6: {
+          const double P1 = 0.11169079483905, P2 = 0.0549758718227661;
+          const double A  = 0.445948490915965, B = 0.091576213509771;
+          add( 2*B-1, 1-4*B, 4*P2 );
+          add( 2*B-1, 2*B-1, 4*P2 );
+          add( 1-4*B, 2*B-1, 4*P2 );
+          add( 1-4*A, 2*A-1, 4*P1 );
+          add( 2*A-1, 1-4*A, 4*P1 );
+          add( 2*A-1, 2*A-1, 4*P1 ); break;
+        }
+        default:
+          EXCEPTION( std::logic_error,"Invalid nb of gauss points for TRIA, variant 2: "
+                     <<nbGauss);
+        }
+      }
+      else if ( variant == 3 ) {
+        if (geom == eTRIA3) setRefCoords( TTria3b() );
+        else                setRefCoords( TTria6b() );
+        switch ( nbGauss ) {
+        case 4: {
+          add( 1/3., 1/3., -27/96 );
+          add( 0.2 , 0.2 ,  25/96 );
+          add( 0.6 , 0.2 ,  25/96 );
+          add( 0.2 , 0.6 ,  25/96 ); break;
+        }
+        default:
+          EXCEPTION( std::logic_error,"Invalid nb of gauss points for TRIA, variant 3: "
+                     <<nbGauss);
+        }
+      }
+      break;
+
+    case eQUAD4:
+    case eQUAD8:
+      if ( variant == 1 ) {
+        if (geom == eQUAD4) setRefCoords( TQuad4b() );
+        else                setRefCoords( TQuad8b() );
+        switch ( nbGauss ) {
+        case 1: { // FPG1
+          add(  0,  0,  4 ); break;
+        }
+        case 4: { // FPG4
+          const double a = 1/sqrt(3.);
+          add( -a, -a,  1 );
+          add(  a, -a,  1 );
+          add(  a,  a,  1 );
+          add( -a,  a,  1 ); break;
+        }
+        case 9: { // FPG9
+          const double a = 0.774596669241483;
+          add( -a, -a,  25/81. );
+          add(  a, -a,  25/81. );
+          add(  a,  a,  25/81. );
+          add( -a,  a,  25/81. );
+          add( 0., -a,  40/81. );
+          add(  a, 0.,  40/81. );
+          add( 0.,  a,  40/81. );
+          add( -a, 0.,  40/81. );
+          add( 0., 0.,  64/81. ); break;
+        }
+        default:
+          EXCEPTION( std::logic_error,"Invalid nb of gauss points for QUAD, variant 1: "
+                     <<nbGauss);
+        }
+      }
+      else if ( variant == 2 ) {
+        if (geom == eQUAD4) setRefCoords( TQuad4a() );
+        else                setRefCoords( TQuad8a() );
+        switch ( nbGauss ) {
+        case 4: {
+          const double a = 1/sqrt(3.);
+          add( -a,  a,  1 );
+          add( -a, -a,  1 );
+          add(  a, -a,  1 );
+          add(  a,  a,  1 ); break;
+        }
+        case 9: {
+          const double a = 0.774596669241483;
+          add( -a,  a,  25/81. );
+          add( -a, -a,  25/81. );
+          add(  a, -a,  25/81. );
+          add(  a,  a,  25/81. );
+          add( -a, 0.,  40/81. );
+          add( 0., -a,  40/81. );
+          add(  a, 0.,  40/81. );
+          add( 0.,  a,  40/81. );
+          add( 0., 0.,  64/81. ); break;
+        }
+        default:
+          EXCEPTION( std::logic_error,"Invalid nb of gauss points for QUAD, variant 1: "
+                     <<nbGauss);
+        }
+      }
+      else if ( variant == 3 ) {
+        if (geom == eQUAD4) setRefCoords( TQuad4b() );
+        else                setRefCoords( TQuad8b() );
+        switch ( nbGauss ) {
+        case 4: {
+          const double a = 3/sqrt(3.);
+          add( -a, -a,  1 );
+          add( -a,  a,  1 );
+          add(  a, -a,  1 );
+          add(  a,  a,  1 ); break;
+        }
+        case 9: {
+          const double a = sqrt(3/5.), c1 = 5/9., c2 = 8/9.;
+          const double c12 = c1*c2, c22 = c2*c2, c1c2 = c1*c2;
+          add( -a, -a,  c12  );
+          add( -a, 0.,  c1c2 );
+          add( -a,  a,  c12  );
+          add( 0., -a,  c1c2 );
+          add( 0., 0.,  c22  );
+          add( 0.,  a,  c1c2 );
+          add(  a, -a,  c12  );
+          add(  a, 0.,  c1c2 );
+          add(  a,  a,  c12  ); break;
+        }
+        default:
+          EXCEPTION( std::logic_error,"Invalid nb of gauss points for QUAD, variant 3: "
+                     <<nbGauss);
+        }
+      }
+      break;
+
+    case eTETRA4:
+    case eTETRA10:
+      if (geom == eTETRA4) setRefCoords( TTetra4a() );
+      else                 setRefCoords( TTetra10a() );
+      switch ( nbGauss ) {
+      case 4: { // FPG4
+        const double a = (5 - sqrt(5.))/20., b = (5 + 3*sqrt(5.))/20.;
+        add(  a,  a,  a,  1/24. );
+        add(  a,  a,  b,  1/24. );
+        add(  a,  b,  a,  1/24. );
+        add(  b,  a,  a,  1/24. ); break;
+      }
+      case 5: { // FPG5
+        const double a = 0.25, b = 1/6., c = 0.5;
+        add(  a,  a,  a, -2/15. );
+        add(  b,  b,  b,  3/40. );
+        add(  b,  b,  c,  3/40. );
+        add(  b,  c,  b,  3/40. );
+        add(  c,  b,  b,  3/40. ); break;
+      }
+      case 15: { // FPG15
+        const double a = 0.25;
+        const double b1 = (7 + sqrt(15.))/34., c1 = (13 + 3*sqrt(15.))/34., d = (5 - sqrt(15.))/20.;
+        const double b2 = (7 - sqrt(15.))/34., c2 = (13 - 3*sqrt(15.))/34., e = (5 + sqrt(15.))/20.;
+        const double P1 = (2665 - 14*sqrt(15.))/226800.;
+        const double P2 = (2665 + 14*sqrt(15.))/226800.;
+        add(  a,  a,  a,  8/405.);//_____
+        add( b1, b1, b1,  P1    );
+        add( b1, b1, c1,  P1    );
+        add( b1, c1, b1,  P1    );
+        add( c1, b1, b1,  P1    );//_____
+        add( b2, b2, b2,  P2    );
+        add( b2, b2, c2,  P2    );
+        add( b2, c2, b2,  P2    );
+        add( c2, b2, b2,  P2    );//_____
+        add(  d,  d,  e,  5/567.);
+        add(  d,  e,  d,  5/567.);
+        add(  e,  d,  d,  5/567.);
+        add(  d,  e,  e,  5/567.);
+        add(  e,  d,  e,  5/567.);
+        add(  e,  e,  d,  5/567.);
+        break;
+      }
+      default:
+        EXCEPTION( std::logic_error,"Invalid nb of gauss points for TETRA: "<<nbGauss);
+      }
+      break;
+
+    case ePYRA5:
+    case ePYRA13:
+      if (geom == ePYRA5) setRefCoords( TPyra5a() );
+      else                setRefCoords( TPyra13a() );
+      switch ( nbGauss ) {
+      case 5: { // FPG5
+        const double h1 = 0.1531754163448146;
+        const double h2 = 0.6372983346207416;
+        add(  .5,  0.,  h1,  2/15. );
+        add(  0.,  .5,  h1,  2/15. );
+        add( -.5,  0.,  h1,  2/15. );
+        add(  0., -.5,  h1,  2/15. );
+        add(  0.,  0.,  h2,  2/15. ); break;
+      }
+      case 6: { // FPG6
+        const double p1 = 0.1024890634400000 ;
+        const double p2 = 0.1100000000000000 ;
+        const double p3 = 0.1467104129066667 ;
+        const double a  = 0.5702963741068025 ;
+        const double h1 = 0.1666666666666666 ;
+        const double h2 = 0.08063183038464675;
+        const double h3 = 0.6098484849057127 ;
+        add(  a, 0.,  h1,  p1 );
+        add( 0.,  a,  h1,  p1 );
+        add( -a, 0.,  h1,  p1 );
+        add( 0., -a,  h1,  p1 );
+        add( 0., 0.,  h2,  p2 );
+        add( 0., 0.,  h3,  p3 ); break;
+      }
+      case 27: { // FPG27
+        const double a1  = 0.788073483;
+        const double b6  = 0.499369002;
+        const double b1  = 0.848418011;
+        const double c8  = 0.478508449;
+        const double c1  = 0.652816472;
+        const double d12 = 0.032303742;
+        const double d1  = 1.106412899;
+        double z = 1/2., fz = b1/2*(1 - z);
+        add(  0.,  0.,   z,  a1 ); // 1
+        add(  fz,  fz,   z,  b6 ); // 2
+        add( -fz,  fz,   z,  b6 ); // 3
+        add( -fz, -fz,   z,  b6 ); // 4
+        add(  fz, -fz,   z,  b6 ); // 5
+        z = (1 - b1)/2.;
+        add(  0.,  0.,   z,  b6 ); // 6
+        z = (1 + b1)/2.;
+        add(  0.,  0.,   z,  b6 ); // 7
+        z = (1 - c1)/2.; fz = c1*(1 - z);
+        add(  fz,  0.,   z,  c8 ); // 8
+        add(  0.,  fz,   z,  c8 ); // 9
+        add( -fz,  0.,   z,  c8 ); // 10
+        add(  0., -fz,   z,  c8 ); // 11
+        z = (1 + c1)/2.; fz = c1*(1 - z);
+        add(  fz,  0.,   z,  c8 ); // 12
+        add(  0.,  fz,   z,  c8 ); // 13
+        add( -fz,  0.,   z,  c8 ); // 14
+        add(  0., -fz,   z,  c8 ); // 15
+        z = (1 - d1)/2., fz = d1/2*(1 - z);
+        add(  fz,  fz,   z,  d12); // 16
+        add( -fz,  fz,   z,  d12); // 17
+        add( -fz, -fz,   z,  d12); // 18
+        add(  fz, -fz,   z,  d12); // 19
+        z = 1/2.; fz = d1*(1 - z);
+        add(  fz,  0.,   z,  d12); // 20
+        add(  0.,  fz,   z,  d12); // 21
+        add( -fz,  0.,   z,  d12); // 22
+        add(  0., -fz,   z,  d12); // 23
+        z = (1 + d1)/2., fz = d1/2*(1 - z);
+        add(  fz,  fz,   z,  d12); // 24
+        add( -fz,  fz,   z,  d12); // 25
+        add( -fz, -fz,   z,  d12); // 26
+        add(  fz, -fz,   z,  d12); // 27
+        break;
+      }
+      default:
+        EXCEPTION( std::logic_error,"Invalid nb of gauss points for PYRA: "<<nbGauss);
+      }
+      break;
+    case ePENTA6:
+    case ePENTA15:
+      if (geom == ePENTA6) setRefCoords( TPenta6a() );
+      else                 setRefCoords( TPenta15a() );
+      switch ( nbGauss ) {
+      case 6: { // FPG6
+        const double a = sqrt(3.)/3.;
+        add( -a, .5, .5,  1/6. );
+        add( -a, 0., .5,  1/6. );
+        add( -a, .5, 0.,  1/6. );
+        add(  a, .5, .5,  1/6. );
+        add(  a, 0., .5,  1/6. );
+        add(  a, .5, 0.,  1/6. ); break;
+      }
+      case 8: { // FPG8
+        const double a = 0.577350269189626;
+        add( -a, 1/3., 1/3., -27/96. );
+        add( -a,  0.6,  0.2,  25/96. );
+        add( -a,  0.2,  0.6,  25/96. );
+        add( -a,  0.2,  0.2,  25/96. );
+        add( +a, 1/3., 1/3., -27/96. );
+        add( +a,  0.6,  0.2,  25/96. );
+        add( +a,  0.2,  0.6,  25/96. );
+        add( +a,  0.2,  0.2,  25/96. ); break;
+      }
+      case 21: { // FPG21
+        const double d = sqrt(3/5.), c1 = 5/9., c2 = 8/9.; // d <=> alfa
+        const double a = (6 + sqrt(15.))/21.;
+        const double b = (6 - sqrt(15.))/21.;
+        const double P1 = (155 + sqrt(15.))/2400.;
+        const double P2 = (155 - sqrt(15.))/2400.;  //___
+        add( -d,  1/3.,  1/3., c1*9/80. );//___
+        add( -d,     a,     a, c1*P1    );
+        add( -d, 1-2*a,     a, c1*P1    );
+        add( -d,     a, 1-2*a, c1*P1    );//___
+        add( -d,     b,     b, c1*P2    );
+        add( -d, 1-2*b,     b, c1*P2    );
+        add( -d,     b, 1-2*b, c1*P2    );//___
+        add( 0.,  1/3.,  1/3., c2*9/80. );//___
+        add( 0.,     a,     a, c2*P1    );
+        add( 0., 1-2*a,     a, c2*P1    );
+        add( 0.,     a, 1-2*a, c2*P1    );//___
+        add( 0.,     b,     b, c2*P2    );
+        add( 0., 1-2*b,     b, c2*P2    );
+        add( 0.,     b, 1-2*b, c2*P2    );//___
+        add(  d,  1/3.,  1/3., c1*9/80. );//___
+        add(  d,     a,     a, c1*P1    );
+        add(  d, 1-2*a,     a, c1*P1    );
+        add(  d,     a, 1-2*a, c1*P1    );//___
+        add(  d,     b,     b, c1*P2    );
+        add(  d, 1-2*b,     b, c1*P2    );
+        add(  d,     b, 1-2*b, c1*P2    );//___
+        break;
+      }
+      default:
+        EXCEPTION( std::logic_error,"Invalid nb of gauss points for PENTA: " <<nbGauss);
+      }
+      break;
+
+    case eHEXA8:
+    case eHEXA20:
+      if (geom == eHEXA8) setRefCoords( THexa8a() );
+      else                setRefCoords( THexa20a() );
+      switch ( nbGauss ) {
+      case 8: { // FPG8
+        const double a = sqrt(3.)/3.;
+        add( -a, -a, -a,  1. );
+        add( -a, -a,  a,  1. );
+        add( -a,  a, -a,  1. );
+        add( -a,  a,  a,  1. );
+        add(  a, -a, -a,  1. );
+        add(  a, -a,  a,  1. );
+        add(  a,  a, -a,  1. );
+        add(  a,  a,  a,  1. ); break;
+      }
+      case 27: { // FPG27
+        const double a = sqrt(3/5.), c1 = 5/9., c2 = 8/9.;
+        const double c12 = c1*c1, c13 = c1*c1*c1;
+        const double c22 = c2*c2, c23 = c2*c2*c2;
+        add( -a, -a, -a,   c13  ); // 1
+        add( -a, -a, 0., c12*c2 ); // 2
+        add( -a, -a,  a,   c13  ); // 3
+        add( -a, 0., -a, c12*c2 ); // 4
+        add( -a, 0., 0., c1*c22 ); // 5
+        add( -a, 0.,  a, c12*c2 ); // 6
+        add( -a,  a, -a,   c13  ); // 7
+        add( -a,  a, 0., c12*c2 ); // 8
+        add( -a,  a,  a,   c13  ); // 9
+        add( 0., -a, -a, c12*c2 ); // 10
+        add( 0., -a, 0., c1*c22 ); // 11
+        add( 0., -a,  a, c12*c2 ); // 12
+        add( 0., 0., -a, c1*c22 ); // 13
+        add( 0., 0., 0.,   c23  ); // 14
+        add( 0., 0.,  a, c1*c22 ); // 15
+        add( 0.,  a, -a, c12*c2 ); // 16
+        add( 0.,  a, 0., c1*c22 ); // 17
+        add( 0.,  a,  a, c12*c2 ); // 18
+        add(  a, -a, -a,   c13  ); // 19
+        add(  a, -a, 0., c12*c2 ); // 20
+        add(  a, -a,  a,   c13  ); // 21
+        add(  a, 0., -a, c12*c2 ); // 22
+        add(  a, 0., 0., c1*c22 ); // 23
+        add(  a, 0.,  a, c12*c2 ); // 24
+        add(  a,  a, -a,   c13  ); // 25
+        add(  a,  a, 0., c12*c2 ); // 26
+        add(  a,  a,  a,   c13  ); // 27
+        break;
+      }
+      default:
+        EXCEPTION( std::logic_error,"Invalid nb of gauss points for PENTA: " <<nbGauss);
+      }
+      break;
+
+    default:
+      EXCEPTION( std::logic_error,"unexpected EGeometrieElement: "<< geom);
+    }
+
+    if ( myWeights.capacity() != myWeights.size() )
+      EXCEPTION( std::logic_error,"Not all gauss points defined");
+  }
+}
diff --git a/src/MEDWrapper/MED_GaussDef.hxx b/src/MEDWrapper/MED_GaussDef.hxx
new file mode 100644 (file)
index 0000000..7fd21c7
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_GaussDef_HeaderFile
+#define MED_GaussDef_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+
+#include <vector>
+
+namespace MED
+{
+  class TShapeFun;
+  typedef std::vector<double> TDoubleVector;
+
+  /*!
+   * \brief Description of family of integration points
+   */
+  struct TGaussDef
+  {
+    int           myType;      //!< element geometry (EGeometrieElement or med_geometrie_element)
+    TDoubleVector myRefCoords; //!< description of reference points
+    TDoubleVector myCoords;    //!< coordinates of Gauss points
+    TDoubleVector myWeights;   //!< weights, len(weights)==<nb of gauss points>
+
+    /*!
+     * \brief Creates definition of gauss points family
+     *  \param geomType - element geometry (EGeometrieElement or med_geometrie_element)
+     *  \param nbPoints - nb gauss point
+     *  \param variant - [1-3] to choose the variant of definition
+     *
+     * Throws in case of invalid parameters
+     * variant == 1 refers to "Fonctions de forme et points d'integration
+     *              des elements finis" v7.4 by J. PELLET, X. DESROCHES, 15/09/05
+     * variant == 2 refers to the same doc v6.4 by J.P. LEFEBVRE, X. DESROCHES, 03/07/03
+     * variant == 3 refers to the same doc v6.4, second variant for 2D elements
+     */
+    MEDWRAPPER_EXPORT TGaussDef(const int geomType, const int nbPoints, const int variant=1);
+
+    MEDWRAPPER_EXPORT int dim() const { return myType/100; }
+    MEDWRAPPER_EXPORT int nbPoints() const { return myWeights.capacity(); }
+
+  private:
+    void add(const double x, const double weight);
+    void add(const double x, const double y, const double weight);
+    void add(const double x, const double y, const double z, const double weight);
+    void setRefCoords(const TShapeFun& aShapeFun);
+  };
+}
+
+#endif // MED_GaussDef_HeaderFile
diff --git a/src/MEDWrapper/MED_GaussUtils.cxx b/src/MEDWrapper/MED_GaussUtils.cxx
new file mode 100644 (file)
index 0000000..1d28463
--- /dev/null
@@ -0,0 +1,2106 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_GaussUtils.hxx"
+#include "MED_Utilities.hxx"
+
+#ifdef _DEBUG_
+static int MYDEBUG = 0;
+static int MYVALUEDEBUG = 0;
+#else
+static int MYDEBUG = 0;
+static int MYVALUEDEBUG = 0;
+#endif
+
+namespace MED
+{
+  //---------------------------------------------------------------
+  TGaussCoord
+  ::TGaussCoord():
+    TModeSwitchInfo(eFULL_INTERLACE),
+    myNbElem(0),
+    myNbGauss(0),
+    myDim(0),
+    myGaussStep(0)
+  {
+  }
+
+  void
+  TGaussCoord
+  ::Init(TInt theNbElem,
+         TInt theNbGauss,
+         TInt theDim,
+         EModeSwitch theMode)
+  {
+    myModeSwitch = theMode;
+
+    myNbElem = theNbElem;
+    myNbGauss = theNbGauss;
+    myDim = theDim;
+
+    myGaussStep = myNbGauss*myDim;
+
+    myGaussCoord.resize(theNbElem*myGaussStep);
+  }
+
+  TInt
+  TGaussCoord
+  ::GetNbElem() const
+  {
+    return myNbElem;
+  }
+
+  TInt
+  TGaussCoord
+  ::GetNbGauss() const
+  {
+    return myNbGauss;
+  }
+
+  TInt
+  TGaussCoord
+  ::GetDim() const
+  {
+    return myDim;
+  }
+
+  unsigned char*
+  TGaussCoord
+  ::GetValuePtr()
+  {
+    return (unsigned char*)&(myGaussCoord[0]);
+  }
+
+  TCCoordSliceArr
+  TGaussCoord
+  ::GetCoordSliceArr(TInt theElemId) const
+  {
+    TCCoordSliceArr aCoordSliceArr(myNbGauss);
+    if(GetModeSwitch() == eFULL_INTERLACE){
+      TInt anId = theElemId*myGaussStep;
+      for(TInt anGaussId = 0; anGaussId < myNbGauss; anGaussId++){
+        aCoordSliceArr[anGaussId] =
+          TCCoordSlice(myGaussCoord,std::slice(anId,myDim,1));
+        anId += myDim;
+      }
+    }
+    else{
+      for(TInt anGaussId = 0; anGaussId < myNbGauss; anGaussId++){
+        aCoordSliceArr[anGaussId] =
+          TCCoordSlice(myGaussCoord,std::slice(theElemId,myDim,myGaussStep));
+      }
+    }
+    return aCoordSliceArr;
+  }
+
+  TCoordSliceArr
+  TGaussCoord
+  ::GetCoordSliceArr(TInt theElemId)
+  {
+    TCoordSliceArr aCoordSliceArr(myNbGauss);
+    if(GetModeSwitch() == eFULL_INTERLACE){
+      TInt anId = theElemId*myGaussStep;
+      for(TInt anGaussId = 0; anGaussId < myNbGauss; anGaussId++){
+        aCoordSliceArr[anGaussId] =
+          TCoordSlice(myGaussCoord,std::slice(anId,myDim,1));
+        anId += myDim;
+      }
+    }
+    else{
+      for(TInt anGaussId = 0; anGaussId < myNbGauss; anGaussId++){
+        aCoordSliceArr[anGaussId] =
+          TCoordSlice(myGaussCoord,std::slice(theElemId,myDim,myGaussStep));
+      }
+    }
+    return aCoordSliceArr;
+  }
+
+  //---------------------------------------------------------------
+  inline
+  bool
+  IsEqual(TFloat theLeft, TFloat theRight)
+  {
+    static TFloat EPS = 1.0E-3;
+    if(fabs(theLeft) + fabs(theRight) > EPS)
+      return fabs(theLeft-theRight)/(fabs(theLeft)+fabs(theRight)) < EPS;
+    return true;
+  }
+
+  //---------------------------------------------------------------
+  class TShapeFun::TFun
+  {
+    TFloatVector myFun;
+    TInt myNbRef;
+
+  public:
+
+    void
+    Init(TInt theNbGauss,
+         TInt theNbRef)
+    {
+      myFun.resize(theNbGauss*theNbRef);
+      myNbRef = theNbRef;
+    }
+
+    TCFloatVecSlice
+    GetFunSlice(TInt theGaussId) const
+    {
+      return TCFloatVecSlice(myFun,std::slice(theGaussId*myNbRef,myNbRef,1));
+    }
+
+    TFloatVecSlice
+    GetFunSlice(TInt theGaussId)
+    {
+      return TFloatVecSlice(myFun,std::slice(theGaussId*myNbRef,myNbRef,1));
+    }
+  };
+
+  //---------------------------------------------------------------
+
+  TShapeFun::TShapeFun(TInt theDim, TInt theNbRef):
+    myRefCoord(theNbRef*theDim),
+    myDim(theDim),
+    myNbRef(theNbRef)
+  {}
+
+  TCCoordSlice
+  TShapeFun::GetCoord(TInt theRefId) const
+  {
+    return TCCoordSlice(myRefCoord,std::slice(theRefId*myDim,myDim,1));
+  }
+
+  TCoordSlice
+  TShapeFun::GetCoord(TInt theRefId)
+  {
+    return TCoordSlice(myRefCoord,std::slice(theRefId*myDim,myDim,1));
+  }
+
+  void
+  TShapeFun::GetFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    TInt aNbRef = theRef.size();
+    TInt aNbGauss = theGauss.size();
+    theFun.Init(aNbGauss,aNbRef);
+  }
+
+  bool
+  TShapeFun::IsSatisfy(const TCCoordSliceArr& theRefCoord) const
+  {
+    TInt aNbRef = theRefCoord.size();
+    TInt aNbRef2 = GetNbRef();
+    INITMSG(MYDEBUG,"TShapeFun::IsSatisfy "<<
+            "- aNbRef("<<aNbRef<<")"<<
+            "; aNbRef2("<<aNbRef2<<")\n");
+    bool anIsSatisfy = (aNbRef == aNbRef2);
+    if(anIsSatisfy){
+      for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+        const TCCoordSlice& aCoord2 = theRefCoord[aRefId];
+        TCCoordSlice aCoord = GetCoord(aRefId);
+        TInt aDim = aCoord.size();
+        bool anIsEqual = false;
+        for(TInt anId = 0; anId < aDim; anId++){
+          anIsEqual = IsEqual(aCoord[anId],aCoord2[anId]);
+          if(!anIsEqual){
+            anIsSatisfy = false;
+            break;
+          }
+        }
+        if(!anIsEqual){
+#ifdef _DEBUG_
+          TCCoordSlice aCoord = GetCoord(aRefId);
+          INITMSG(MYDEBUG,aRefId + 1<<": aCoord = {");
+          TInt aDim = aCoord.size();
+          for(TInt anId = 0; anId < aDim; anId++)
+            ADDMSG(MYDEBUG,"\t"<<aCoord[anId]);
+          const TCCoordSlice& aCoord2 = theRefCoord[aRefId];
+          ADDMSG(MYDEBUG,"}\t!=\taCoord2 = {");
+          for(TInt anId = 0; anId < aDim; anId++)
+            ADDMSG(MYDEBUG,"\t"<<aCoord2[anId]);
+          ADDMSG(MYDEBUG,"}\n");
+#endif
+#ifndef _DEBUG_
+          BEGMSG(MYDEBUG,"anIsSatisfy = "<<anIsSatisfy<<"\n");
+          return anIsSatisfy;
+#endif
+        }
+      }
+    }
+
+    BEGMSG(MYDEBUG,"anIsSatisfy = "<<anIsSatisfy<<"\n");
+    return anIsSatisfy;
+  }
+
+  bool
+  TShapeFun::Eval(const TCellInfo&       theCellInfo,
+                  const TNodeInfo&       theNodeInfo,
+                  const TElemNum&        theElemNum,
+                  const TCCoordSliceArr& theRef,
+                  const TCCoordSliceArr& theGauss,
+                  TGaussCoord&           theGaussCoord,
+                  EModeSwitch            theMode)
+  {
+    INITMSG(MYDEBUG,"TShapeFun::Eval"<<std::endl);
+
+    if(IsSatisfy(theRef)){
+      const PMeshInfo& aMeshInfo = theCellInfo.GetMeshInfo();
+      TInt aDim = aMeshInfo->GetDim();
+      TInt aNbGauss = theGauss.size();
+
+      bool anIsSubMesh = !theElemNum.empty();
+      TInt aNbElem;
+      if(anIsSubMesh)
+        aNbElem = theElemNum.size();
+      else
+        aNbElem = theCellInfo.GetNbElem();
+
+      theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
+
+      TFun aFun;
+      InitFun(theRef,theGauss,aFun);
+      TInt aConnDim = theCellInfo.GetConnDim();
+
+      INITMSG(MYDEBUG,"aDim = "<<aDim<<
+              "; aNbGauss = "<<aNbGauss<<
+              "; aNbElem = "<<aNbElem<<
+              "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
+              std::endl);
+
+      for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
+        TInt aCellId = anIsSubMesh? theElemNum[anElemId]-1: anElemId;
+        TCConnSlice aConnSlice = theCellInfo.GetConnSlice(aCellId);
+        TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
+
+        for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+          TCoordSlice& aGaussCoordSlice = aCoordSliceArr[aGaussId];
+          TCFloatVecSlice aFunSlice = aFun.GetFunSlice(aGaussId);
+
+          for(TInt aConnId = 0; aConnId < aConnDim; aConnId++){
+            TInt aNodeId = aConnSlice[aConnId] - 1;
+            TCCoordSlice aNodeCoordSlice = theNodeInfo.GetCoordSlice(aNodeId);
+
+            for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+              aGaussCoordSlice[aDimId] += aNodeCoordSlice[aDimId]*aFunSlice[aConnId];
+            }
+          }
+        }
+      }
+
+#ifdef _DEBUG_
+      {
+        INITMSG(MYVALUEDEBUG,"theGauss: ");
+        for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+          TCCoordSlice aCoordSlice = theGauss[aGaussId];
+          ADDMSG(MYVALUEDEBUG,"{");
+          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+            ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
+          }
+          ADDMSG(MYVALUEDEBUG,"} ");
+        }
+        ADDMSG(MYVALUEDEBUG,std::endl);
+      }
+      for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
+        TCCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
+        INITMSG(MYVALUEDEBUG,"");
+        for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+          TCCoordSlice aCoordSlice = aCoordSliceArr[aGaussId];
+          ADDMSG(MYVALUEDEBUG,"{");
+          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+            ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
+          }
+          ADDMSG(MYVALUEDEBUG,"} ");
+        }
+        ADDMSG(MYVALUEDEBUG,std::endl);
+      }
+#endif
+      return true;
+    }
+
+    return false;
+  }
+
+  //---------------------------------------------------------------
+  TSeg2a::TSeg2a():TShapeFun(1,2)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0; break;
+      case  1: aCoord[0] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  TSeg2a::InitFun(const TCCoordSliceArr& theRef,
+                  const TCCoordSliceArr& theGauss,
+                  TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*(1.0 - aCoord[0]);
+      aSlice[1] = 0.5*(1.0 + aCoord[0]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TSeg3a::TSeg3a():TShapeFun(1,3)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0; break;
+      case  1: aCoord[0] =  1.0; break;
+      case  2: aCoord[0] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TSeg3a::InitFun(const TCCoordSliceArr& theRef,
+                  const TCCoordSliceArr& theGauss,
+                  TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*(1.0 - aCoord[0])*aCoord[0];
+      aSlice[1] = 0.5*(1.0 + aCoord[0])*aCoord[0];
+      aSlice[2] = (1.0 + aCoord[0])*(1.0 - aCoord[0]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TTria3a::TTria3a():
+    TShapeFun(2,3)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
+      }
+    }
+  }
+
+  void
+  TTria3a::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*(1.0 + aCoord[1]);
+      aSlice[1] = -0.5*(aCoord[0] + aCoord[1]);
+      aSlice[2] = 0.5*(1.0 + aCoord[0]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TTria6a::TTria6a():TShapeFun(2,6)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
+
+      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+      case  4: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
+      case  5: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TTria6a::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*(1.0 + aCoord[1])*aCoord[1];
+      aSlice[1] = 0.5*(aCoord[0] + aCoord[1])*(aCoord[0] + aCoord[1] + 1);
+      aSlice[2] = 0.5*(1.0 + aCoord[0])*aCoord[0];
+
+      aSlice[3] = -1.0*(1.0 + aCoord[1])*(aCoord[0] + aCoord[1]);
+      aSlice[4] = -1.0*(1.0 + aCoord[0])*(aCoord[0] + aCoord[1]);
+      aSlice[5] = (1.0 + aCoord[1])*(1.0 + aCoord[1]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TTria3b::TTria3b():
+    TShapeFun(2,3)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
+      case  1: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
+      case  2: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  TTria3b::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 1.0 - aCoord[0] - aCoord[1];
+      aSlice[1] = aCoord[0];
+      aSlice[2] = aCoord[1];
+    }
+  }
+
+  //---------------------------------------------------------------
+  TTria6b::TTria6b():
+    TShapeFun(2,6)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
+      case  1: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
+      case  2: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
+
+      case  3: aCoord[0] =  0.5;  aCoord[1] =  0.0; break;
+      case  4: aCoord[0] =  0.5;  aCoord[1] =  0.5; break;
+      case  5: aCoord[0] =  0.0;  aCoord[1] =  0.5; break;
+      }
+    }
+  }
+
+  void
+  TTria6b::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = (1.0 - aCoord[0] - aCoord[1])*(1.0 - 2.0*aCoord[0] - 2.0*aCoord[1]);
+      aSlice[1] = aCoord[0]*(2.0*aCoord[0] - 1.0);
+      aSlice[2] = aCoord[1]*(2.0*aCoord[1] - 1.0);
+
+      aSlice[3] = 4.0*aCoord[0]*(1.0 - aCoord[0] - aCoord[1]);
+      aSlice[4] = 4.0*aCoord[0]*aCoord[1];
+      aSlice[5] = 4.0*aCoord[1]*(1.0 - aCoord[0] - aCoord[1]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TQuad4a::TQuad4a():
+    TShapeFun(2,4)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  TQuad4a::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.25*(1.0 + aCoord[1])*(1.0 - aCoord[0]);
+      aSlice[1] = 0.25*(1.0 - aCoord[1])*(1.0 - aCoord[0]);
+      aSlice[2] = 0.25*(1.0 - aCoord[1])*(1.0 + aCoord[0]);
+      aSlice[3] = 0.25*(1.0 + aCoord[0])*(1.0 + aCoord[1]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TQuad8a::TQuad8a():
+    TShapeFun(2,8)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
+
+      case  4: aCoord[0] = -1.0;  aCoord[1] =  0.0; break;
+      case  5: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
+      case  6: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
+      case  7: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  TQuad8a::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.25*(1.0 + aCoord[1])*(1.0 - aCoord[0])*(aCoord[1] - aCoord[0] - 1.0);
+      aSlice[1] = 0.25*(1.0 - aCoord[1])*(1.0 - aCoord[0])*(-aCoord[1] - aCoord[0] - 1.0);
+      aSlice[2] = 0.25*(1.0 - aCoord[1])*(1.0 + aCoord[0])*(-aCoord[1] + aCoord[0] - 1.0);
+      aSlice[3] = 0.25*(1.0 + aCoord[1])*(1.0 + aCoord[0])*(aCoord[1] + aCoord[0] - 1.0);
+
+      aSlice[4] = 0.5*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[1]);
+      aSlice[5] = 0.5*(1.0 - aCoord[1])*(1.0 - aCoord[0])*(1.0 + aCoord[0]);
+      aSlice[6] = 0.5*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[1]);
+      aSlice[7] = 0.5*(1.0 + aCoord[1])*(1.0 - aCoord[0])*(1.0 + aCoord[0]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TQuad9a::TQuad9a():
+    TShapeFun(2,9)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
+
+      case  4: aCoord[0] = -1.0;  aCoord[1] =  0.0; break;
+      case  5: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
+      case  6: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
+      case  7: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
+
+      case  8: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TQuad9a::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] + 1.0)*(aCoord[1] - 1.0);
+      aSlice[1] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] + 1.0)*(aCoord[1] + 1.0);
+      aSlice[2] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] - 1.0)*(aCoord[1] + 1.0);
+      aSlice[3] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] - 1.0)*(aCoord[1] - 1.0);
+
+      aSlice[4] = 0.5*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1]);
+      aSlice[5] = 0.5*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] + 1.0);
+      aSlice[6] = 0.5*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1]);
+      aSlice[7] = 0.5*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0);
+
+      aSlice[8] = (1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TQuad4b::TQuad4b():
+    TShapeFun(2,4)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
+      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
+      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  TQuad4b::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.25*(1.0 - aCoord[0])*(1.0 - aCoord[1]);
+      aSlice[1] = 0.25*(1.0 + aCoord[0])*(1.0 - aCoord[1]);
+      aSlice[2] = 0.25*(1.0 + aCoord[0])*(1.0 + aCoord[1]);
+      aSlice[3] = 0.25*(1.0 - aCoord[0])*(1.0 + aCoord[1]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TQuad8b::TQuad8b():
+    TShapeFun(2,8)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
+      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
+      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+
+      case  4: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
+      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
+      case  6: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
+      case  7: aCoord[0] = -1.0;  aCoord[1] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TQuad8b::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.25*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(-1.0 - aCoord[0] - aCoord[1]);
+      aSlice[1] = 0.25*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(-1.0 + aCoord[0] - aCoord[1]);
+      aSlice[2] = 0.25*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(-1.0 + aCoord[0] + aCoord[1]);
+      aSlice[3] = 0.25*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(-1.0 - aCoord[0] + aCoord[1]);
+
+      aSlice[4] = 0.5*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]);
+      aSlice[5] = 0.5*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0]);
+      aSlice[6] = 0.5*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1]);
+      aSlice[7] = 0.5*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0]);
+
+      //aSlice[4] = 0.5*(1.0 - aCoord[0])*(1.0 - aCoord[0])*(1.0 - aCoord[1]);
+      //aSlice[5] = 0.5*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[1]);
+      //aSlice[6] = 0.5*(1.0 - aCoord[0])*(1.0 - aCoord[0])*(1.0 + aCoord[1]);
+      //aSlice[7] = 0.5*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[1]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TQuad9b::TQuad9b():
+    TShapeFun(2,9)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0; break;
+      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0; break;
+      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0; break;
+
+      case  4: aCoord[0] =  0.0;  aCoord[1] = -1.0; break;
+      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0; break;
+      case  6: aCoord[0] =  0.0;  aCoord[1] =  1.0; break;
+      case  7: aCoord[0] = -1.0;  aCoord[1] =  0.0; break;
+
+      case  8: aCoord[0] =  0.0;  aCoord[1] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TQuad9b::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] - 1.0)*(aCoord[1] - 1.0);
+      aSlice[1] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] + 1.0)*(aCoord[1] - 1.0);
+      aSlice[2] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] + 1.0)*(aCoord[1] + 1.0);
+      aSlice[3] = 0.25*aCoord[0]*aCoord[1]*(aCoord[0] - 1.0)*(aCoord[1] + 1.0);
+
+      aSlice[4] = 0.5*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0);
+      aSlice[5] = 0.5*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1]);
+      aSlice[6] = 0.5*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] + 1.0);
+      aSlice[7] = 0.5*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1]);
+
+      aSlice[8] = (1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TTetra4a::TTetra4a():
+    TShapeFun(3,4)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  1: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case  2: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TTetra4a::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = aCoord[1];
+      aSlice[1] = aCoord[2];
+      aSlice[2] = 1.0 - aCoord[0] - aCoord[1] - aCoord[2];
+      aSlice[3] = aCoord[0];
+    }
+  }
+
+  //---------------------------------------------------------------
+  TTetra10a::TTetra10a():
+    TShapeFun(3,10)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  1: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case  2: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+
+      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
+      case  5: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case  6: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+
+      case  7: aCoord[0] =  0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      case  8: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case  9: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TTetra10a::InitFun(const TCCoordSliceArr& theRef,
+                     const TCCoordSliceArr& theGauss,
+                     TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = aCoord[1]*(2.0*aCoord[1] - 1.0);
+      aSlice[1] = aCoord[2]*(2.0*aCoord[2] - 1.0);
+      aSlice[2] = (1.0 - aCoord[0] - aCoord[1] - aCoord[2])*(1.0 - 2.0*aCoord[0] - 2.0*aCoord[1] - 2.0*aCoord[2]);
+      aSlice[3] = aCoord[0]*(2.0*aCoord[0] - 1.0);
+
+      aSlice[4] = 4.0*aCoord[1]*aCoord[2];
+      aSlice[5] = 4.0*aCoord[2]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
+      aSlice[6] = 4.0*aCoord[1]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
+
+      aSlice[7] = 4.0*aCoord[0]*aCoord[1];
+      aSlice[8] = 4.0*aCoord[0]*aCoord[2];
+      aSlice[9] = 4.0*aCoord[0]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
+    }
+  }
+
+  //---------------------------------------------------------------
+
+  TTetra4b::TTetra4b():
+    TShapeFun(3,4)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  2: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case  1: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TTetra4b::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = aCoord[1];
+      aSlice[2] = aCoord[2];
+      aSlice[1] = 1.0 - aCoord[0] - aCoord[1] - aCoord[2];
+      aSlice[3] = aCoord[0];
+    }
+  }
+
+  //---------------------------------------------------------------
+  TTetra10b::TTetra10b():
+    TShapeFun(3,10)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  2: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case  1: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+
+      case  6: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
+      case  5: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+
+      case  7: aCoord[0] =  0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      case  9: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case  8: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TTetra10b::InitFun(const TCCoordSliceArr& theRef,
+                     const TCCoordSliceArr& theGauss,
+                     TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = aCoord[1]*(2.0*aCoord[1] - 1.0);
+      aSlice[2] = aCoord[2]*(2.0*aCoord[2] - 1.0);
+      aSlice[1] = (1.0 - aCoord[0] - aCoord[1] - aCoord[2])*(1.0 - 2.0*aCoord[0] - 2.0*aCoord[1] - 2.0*aCoord[2]);
+      aSlice[3] = aCoord[0]*(2.0*aCoord[0] - 1.0);
+
+      aSlice[6] = 4.0*aCoord[1]*aCoord[2];
+      aSlice[5] = 4.0*aCoord[2]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
+      aSlice[4] = 4.0*aCoord[1]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
+
+      aSlice[7] = 4.0*aCoord[0]*aCoord[1];
+      aSlice[9] = 4.0*aCoord[0]*aCoord[2];
+      aSlice[8] = 4.0*aCoord[0]*(1.0 - aCoord[0] - aCoord[1] - aCoord[2]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  THexa8a::THexa8a():
+    TShapeFun(3,8)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  4: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case  5: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case  6: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+      case  7: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  THexa8a::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[1] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[2] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[3] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
+
+      aSlice[4] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[5] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[6] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[7] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  THexa20a::THexa20a(TInt theDim, TInt theNbRef):
+    TShapeFun(theDim,theNbRef)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  1: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  3: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  4: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case  5: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case  6: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+      case  7: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+
+      case  8: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  9: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
+      case 10: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case 11: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
+      case 12: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case 13: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case 14: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case 15: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case 16: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case 17: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case 18: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+      case 19: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  THexa20a::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2])*
+        (-2.0 - aCoord[0] - aCoord[1] - aCoord[2]);
+      aSlice[1] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2])*
+        (-2.0 + aCoord[0] - aCoord[1] - aCoord[2]);
+      aSlice[2] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2])*
+        (-2.0 + aCoord[0] + aCoord[1] - aCoord[2]);
+      aSlice[3] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2])*
+        (-2.0 - aCoord[0] + aCoord[1] - aCoord[2]);
+      aSlice[4] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2])*
+        (-2.0 - aCoord[0] - aCoord[1] + aCoord[2]);
+      aSlice[5] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2])*
+        (-2.0 + aCoord[0] - aCoord[1] + aCoord[2]);
+      aSlice[6] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2])*
+        (-2.0 + aCoord[0] + aCoord[1] + aCoord[2]);
+      aSlice[7] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2])*
+        (-2.0 - aCoord[0] + aCoord[1] + aCoord[2]);
+
+      aSlice[8] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[9] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0])*(1.0 - aCoord[2]);
+      aSlice[10] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[11] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0])*(1.0 - aCoord[2]);
+      aSlice[12] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 - aCoord[0])*(1.0 - aCoord[1]);
+      aSlice[13] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 + aCoord[0])*(1.0 - aCoord[1]);
+      aSlice[14] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 + aCoord[0])*(1.0 + aCoord[1]);
+      aSlice[15] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 - aCoord[0])*(1.0 + aCoord[1]);
+      aSlice[16] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[17] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0])*(1.0 + aCoord[2]);
+      aSlice[18] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[19] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0])*(1.0 + aCoord[2]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  THexa27a::THexa27a():
+    THexa20a(3,27)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case 20: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
+      case 21: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case 22: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case 23: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case 24: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case 25: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case 26: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  THexa27a::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.125*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[1] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[2] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[3] = 0.125*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[4] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] + 1.0);
+      aSlice[5] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] + 1.0);
+      aSlice[6] = 0.125*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] + 1.0);
+      aSlice[7] = 0.125*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] + 1.0);
+
+      aSlice[8] = 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[9] = 0.25*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[10]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[11]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[12]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] - 1.0)*(1.0 - aCoord[2]*aCoord[2]);
+      aSlice[13]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] - 1.0)*(1.0 - aCoord[2]*aCoord[2]);
+      aSlice[14]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*aCoord[1]*(aCoord[1] + 1.0)*(1.0 - aCoord[2]*aCoord[2]);
+      aSlice[15]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*aCoord[1]*(aCoord[1] + 1.0)*(1.0 - aCoord[2]*aCoord[2]);
+      aSlice[16]= 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0)*aCoord[2]*(aCoord[2] + 1.0);
+      aSlice[17]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] + 1.0);
+      aSlice[18]= 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] + 1.0)*aCoord[2]*(aCoord[2] + 1.0);
+      aSlice[19]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] + 1.0);
+      aSlice[20]= 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] - 1.0);
+      aSlice[21]= 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] - 1.0)*(1.0 - aCoord[2]*aCoord[2]);
+      aSlice[22]= 0.25*aCoord[0]*(aCoord[0] + 1.0)*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[2]*aCoord[2]);
+      aSlice[23]= 0.25*(1.0 - aCoord[0]*aCoord[0])*aCoord[1]*(aCoord[1] + 1.0)*(1.0 - aCoord[2]*aCoord[2]);
+      aSlice[24]= 0.25*aCoord[0]*(aCoord[0] - 1.0)*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[2]*aCoord[2]);
+      aSlice[25]= 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1])*aCoord[2]*(aCoord[2] + 1.0);
+      aSlice[26]= 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[1]*aCoord[1]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  THexa8b::THexa8b():
+    TShapeFun(3,8)
+  {
+    TInt aNbRef = GetNbRef();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  4: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case  7: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case  6: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+      case  5: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  THexa8b::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[3] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[2] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[1] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
+
+      aSlice[4] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[7] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[6] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[5] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  THexa20b::THexa20b(TInt theDim, TInt theNbRef):
+    TShapeFun(theDim,theNbRef)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case  2: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  4: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case  7: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case  6: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+      case  5: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+
+      case 11: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] = -1.0; break;
+      case 10: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
+      case  9: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] = -1.0; break;
+      case  8: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] = -1.0; break;
+      case 16: aCoord[0] = -1.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case 19: aCoord[0] =  1.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case 18: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case 17: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case 15: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  1.0; break;
+      case 14: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case 13: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  1.0; break;
+      case 12: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  THexa20b::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2])*
+        (-2.0 - aCoord[0] - aCoord[1] - aCoord[2]);
+      aSlice[3] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2])*
+        (-2.0 + aCoord[0] - aCoord[1] - aCoord[2]);
+      aSlice[2] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2])*
+        (-2.0 + aCoord[0] + aCoord[1] - aCoord[2]);
+      aSlice[1] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2])*
+        (-2.0 - aCoord[0] + aCoord[1] - aCoord[2]);
+      aSlice[4] = 0.125*(1.0 - aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2])*
+        (-2.0 - aCoord[0] - aCoord[1] + aCoord[2]);
+      aSlice[7] = 0.125*(1.0 + aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2])*
+        (-2.0 + aCoord[0] - aCoord[1] + aCoord[2]);
+      aSlice[6] = 0.125*(1.0 + aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2])*
+        (-2.0 + aCoord[0] + aCoord[1] + aCoord[2]);
+      aSlice[5] = 0.125*(1.0 - aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2])*
+        (-2.0 - aCoord[0] + aCoord[1] + aCoord[2]);
+
+      aSlice[11] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[10] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0])*(1.0 - aCoord[2]);
+      aSlice[9] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1])*(1.0 - aCoord[2]);
+      aSlice[8] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0])*(1.0 - aCoord[2]);
+      aSlice[16] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 - aCoord[0])*(1.0 - aCoord[1]);
+      aSlice[19] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 + aCoord[0])*(1.0 - aCoord[1]);
+      aSlice[18] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 + aCoord[0])*(1.0 + aCoord[1]);
+      aSlice[17] = 0.25*(1.0 - aCoord[2]*aCoord[2])*(1.0 - aCoord[0])*(1.0 + aCoord[1]);
+      aSlice[15] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 - aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[14] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 + aCoord[0])*(1.0 + aCoord[2]);
+      aSlice[13] = 0.25*(1.0 - aCoord[0]*aCoord[0])*(1.0 + aCoord[1])*(1.0 + aCoord[2]);
+      aSlice[12] = 0.25*(1.0 - aCoord[1]*aCoord[1])*(1.0 - aCoord[0])*(1.0 + aCoord[2]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TPenta6a::TPenta6a():
+    TShapeFun(3,6)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] = -0.0;  aCoord[2] =  1.0; break;
+      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  4: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TPenta6a::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*aCoord[1]*(1.0 - aCoord[0]);
+      aSlice[1] = 0.5*aCoord[2]*(1.0 - aCoord[0]);
+      aSlice[2] = 0.5*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
+
+      aSlice[3] = 0.5*aCoord[1]*(aCoord[0] + 1.0);
+      aSlice[4] = 0.5*aCoord[2]*(aCoord[0] + 1.0);
+      aSlice[5] = 0.5*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TPenta6b::TPenta6b():
+    TShapeFun(3,6)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  2: aCoord[0] = -1.0;  aCoord[1] = -0.0;  aCoord[2] =  1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case  4: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TPenta6b::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*aCoord[1]*(1.0 - aCoord[0]);
+      aSlice[2] = 0.5*aCoord[2]*(1.0 - aCoord[0]);
+      aSlice[1] = 0.5*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
+
+      aSlice[3] = 0.5*aCoord[1]*(aCoord[0] + 1.0);
+      aSlice[5] = 0.5*aCoord[2]*(aCoord[0] + 1.0);
+      aSlice[4] = 0.5*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TPenta15a::TPenta15a():
+    TShapeFun(3,15)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] = -0.0;  aCoord[2] =  1.0; break;
+      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  4: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+
+      case  6: aCoord[0] = -1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
+      case  7: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case  8: aCoord[0] = -1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      case  9: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case 10: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case 11: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case 12: aCoord[0] =  1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
+      case 13: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case 14: aCoord[0] =  1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TPenta15a::InitFun(const TCCoordSliceArr& theRef,
+                     const TCCoordSliceArr& theGauss,
+                     TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*aCoord[1]*(1.0 - aCoord[0])*(2.0*aCoord[1] - 2.0 - aCoord[0]);
+      aSlice[1] = 0.5*aCoord[2]*(1.0 - aCoord[0])*(2.0*aCoord[2] - 2.0 - aCoord[0]);
+      aSlice[2] = 0.5*(aCoord[0] - 1.0)*(1.0 - aCoord[1] - aCoord[2])*(aCoord[0] + 2.0*aCoord[1] + 2.0*aCoord[2]);
+
+      aSlice[3] = 0.5*aCoord[1]*(1.0 + aCoord[0])*(2.0*aCoord[1] - 2.0 + aCoord[0]);
+      aSlice[4] = 0.5*aCoord[2]*(1.0 + aCoord[0])*(2.0*aCoord[2] - 2.0 + aCoord[0]);
+      aSlice[5] = 0.5*(-aCoord[0] - 1.0)*(1.0 - aCoord[1] - aCoord[2])*(-aCoord[0] + 2.0*aCoord[1] + 2.0*aCoord[2]);
+
+      aSlice[6] = 2.0*aCoord[1]*aCoord[2]*(1.0 - aCoord[0]);
+      aSlice[7] = 2.0*aCoord[2]*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
+      aSlice[8] = 2.0*aCoord[1]*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
+
+      aSlice[9] = aCoord[1]*(1.0 - aCoord[0]*aCoord[0]);
+      aSlice[10] = aCoord[2]*(1.0 - aCoord[0]*aCoord[0]);
+      aSlice[11] = (1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]*aCoord[0]);
+
+      aSlice[12] = 2.0*aCoord[1]*aCoord[2]*(1.0 + aCoord[0]);
+      aSlice[13] = 2.0*aCoord[2]*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
+      aSlice[14] = 2.0*aCoord[1]*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TPenta15b::TPenta15b():
+    TShapeFun(3,15)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] = -1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  2: aCoord[0] = -1.0;  aCoord[1] = -0.0;  aCoord[2] =  1.0; break;
+      case  1: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  1.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  5: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case  4: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+
+      case  8: aCoord[0] = -1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
+      case  7: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case  6: aCoord[0] = -1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      case 12: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case 14: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      case 13: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case 11: aCoord[0] =  1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
+      case 10: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case  9: aCoord[0] =  1.0;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      }
+    }
+  }
+
+  void
+  TPenta15b::InitFun(const TCCoordSliceArr& theRef,
+                     const TCCoordSliceArr& theGauss,
+                     TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*aCoord[1]*(1.0 - aCoord[0])*(2.0*aCoord[1] - 2.0 - aCoord[0]);
+      aSlice[2] = 0.5*aCoord[2]*(1.0 - aCoord[0])*(2.0*aCoord[2] - 2.0 - aCoord[0]);
+      aSlice[1] = 0.5*(aCoord[0] - 1.0)*(1.0 - aCoord[1] - aCoord[2])*(aCoord[0] + 2.0*aCoord[1] + 2.0*aCoord[2]);
+
+      aSlice[3] = 0.5*aCoord[1]*(1.0 + aCoord[0])*(2.0*aCoord[1] - 2.0 + aCoord[0]);
+      aSlice[5] = 0.5*aCoord[2]*(1.0 + aCoord[0])*(2.0*aCoord[2] - 2.0 + aCoord[0]);
+      aSlice[4] = 0.5*(-aCoord[0] - 1.0)*(1.0 - aCoord[1] - aCoord[2])*(-aCoord[0] + 2.0*aCoord[1] + 2.0*aCoord[2]);
+
+      aSlice[8] = 2.0*aCoord[1]*aCoord[2]*(1.0 - aCoord[0]);
+      aSlice[7] = 2.0*aCoord[2]*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
+      aSlice[6] = 2.0*aCoord[1]*(1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]);
+
+      aSlice[12] = aCoord[1]*(1.0 - aCoord[0]*aCoord[0]);
+      aSlice[14] = aCoord[2]*(1.0 - aCoord[0]*aCoord[0]);
+      aSlice[13] = (1.0 - aCoord[1] - aCoord[2])*(1.0 - aCoord[0]*aCoord[0]);
+
+      aSlice[11] = 2.0*aCoord[1]*aCoord[2]*(1.0 + aCoord[0]);
+      aSlice[10] = 2.0*aCoord[2]*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
+      aSlice[9]  = 2.0*aCoord[1]*(1.0 - aCoord[1] - aCoord[2])*(1.0 + aCoord[0]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TPyra5a::TPyra5a():
+    TShapeFun(3,5)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  1: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  TPyra5a::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+      // APO & RNV:
+      // Fix for 0019920: EDF 788 VISU: Bad localisation of gauss points for pyramids
+      // Seems shape function for ePYRA5 elements is:
+      // w0 = 0.25*(-X + Y - 1.0)*(-X - Y - 1.0)*(1.0 - Z);
+      // w1 = 0.25*(-X - Y - 1.0)*(+X - Y - 1.0)*(1.0 - Z);
+      // w2 = 0.25*(+X + Y - 1.0)*(+X - Y - 1.0)*(1.0 - Z);
+      // w3 = 0.25*(+X + Y - 1.0)*(-X + Y - 1.0)*(1.0 - Z);
+      // w4 = +Z;
+      aSlice[0] = 0.25*(-aCoord[0] + aCoord[1] - 1.0)*(-aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
+      aSlice[1] = 0.25*(-aCoord[0] - aCoord[1] - 1.0)*(+aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
+      aSlice[2] = 0.25*(+aCoord[0] + aCoord[1] - 1.0)*(+aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
+      aSlice[3] = 0.25*(+aCoord[0] + aCoord[1] - 1.0)*(-aCoord[0] + aCoord[1] - 1.0)*(1.0 - aCoord[2]);
+      aSlice[4] = aCoord[2];
+    }
+  }
+
+  //---------------------------------------------------------------
+  TPyra5b::TPyra5b():
+    TShapeFun(3,5)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  1: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+      }
+    }
+  }
+
+  void
+  TPyra5b::InitFun(const TCCoordSliceArr& theRef,
+                   const TCCoordSliceArr& theGauss,
+                   TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+      // APO & RNV:
+      // Fix for 0019920: EDF 788 VISU: Bad localisation of gauss points for pyramids
+      // Seems shape function for ePYRA5 elements is:
+      // w0 = 0.25*(-X + Y - 1.0)*(-X - Y - 1.0)*(1.0 - Z);
+      // w1 = 0.25*(-X - Y - 1.0)*(+X - Y - 1.0)*(1.0 - Z);
+      // w2 = 0.25*(+X + Y - 1.0)*(+X - Y - 1.0)*(1.0 - Z);
+      // w3 = 0.25*(+X + Y - 1.0)*(-X + Y - 1.0)*(1.0 - Z);
+      // w4 = +Z;
+      aSlice[0] = 0.25*(-aCoord[0] + aCoord[1] - 1.0)*(-aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
+      aSlice[3] = 0.25*(-aCoord[0] - aCoord[1] - 1.0)*(+aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
+      aSlice[2] = 0.25*(+aCoord[0] + aCoord[1] - 1.0)*(+aCoord[0] - aCoord[1] - 1.0)*(1.0 - aCoord[2]);
+      aSlice[1] = 0.25*(+aCoord[0] + aCoord[1] - 1.0)*(-aCoord[0] + aCoord[1] - 1.0)*(1.0 - aCoord[2]);
+      aSlice[4] = aCoord[2];
+    }
+  }
+
+  //---------------------------------------------------------------
+  TPyra13a::TPyra13a():
+    TShapeFun(3,13)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  1: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+
+      case  5: aCoord[0] =  0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      case  6: aCoord[0] = -0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      case  7: aCoord[0] = -0.5;  aCoord[1] = -0.5;  aCoord[2] =  0.0; break;
+      case  8: aCoord[0] =  0.5;  aCoord[1] = -0.5;  aCoord[2] =  0.0; break;
+      case  9: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case 10: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
+      case 11: aCoord[0] = -0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case 12: aCoord[0] =  0.0;  aCoord[1] = -0.5;  aCoord[2] =  0.5; break;
+      }
+    }
+  }
+
+  void
+  TPyra13a::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
+        (aCoord[0] - 0.5)/(1.0 - aCoord[2]);
+      aSlice[1] = 0.5*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(+aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
+        (aCoord[1] - 0.5)/(1.0 - aCoord[2]);
+      aSlice[2] = 0.5*(+aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(+aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
+        (-aCoord[0] - 0.5)/(1.0 - aCoord[2]);
+      aSlice[3] = 0.5*(+aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
+        (-aCoord[1] - 0.5)/(1.0 - aCoord[2]);
+
+      aSlice[4] = 2.0*aCoord[2]*(aCoord[2] - 0.5);
+
+      aSlice[5] = 0.5*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
+        (aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
+      aSlice[6] = 0.5*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
+        (aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
+      aSlice[7] = 0.5*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
+        (-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
+      aSlice[8] = 0.5*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
+        (-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
+
+      aSlice[9] = 0.5*aCoord[2]*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/
+        (1.0 - aCoord[2]);
+      aSlice[10] = 0.5*aCoord[2]*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/
+        (1.0 - aCoord[2]);
+      aSlice[11] = 0.5*aCoord[2]*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/
+        (1.0 - aCoord[2]);
+      aSlice[12] = 0.5*aCoord[2]*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/
+        (1.0 - aCoord[2]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  TPyra13b::TPyra13b():
+    TShapeFun(3,13)
+  {
+    TInt aNbRef = myRefCoord.size();
+    for(TInt aRefId = 0; aRefId < aNbRef; aRefId++){
+      TCoordSlice aCoord = GetCoord(aRefId);
+      switch(aRefId){
+      case  0: aCoord[0] =  1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  3: aCoord[0] =  0.0;  aCoord[1] =  1.0;  aCoord[2] =  0.0; break;
+      case  2: aCoord[0] = -1.0;  aCoord[1] =  0.0;  aCoord[2] =  0.0; break;
+      case  1: aCoord[0] =  0.0;  aCoord[1] = -1.0;  aCoord[2] =  0.0; break;
+      case  4: aCoord[0] =  0.0;  aCoord[1] =  0.0;  aCoord[2] =  1.0; break;
+
+      case  8: aCoord[0] =  0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      case  7: aCoord[0] = -0.5;  aCoord[1] =  0.5;  aCoord[2] =  0.0; break;
+      case  6: aCoord[0] = -0.5;  aCoord[1] = -0.5;  aCoord[2] =  0.0; break;
+      case  5: aCoord[0] =  0.5;  aCoord[1] = -0.5;  aCoord[2] =  0.0; break;
+      case  9: aCoord[0] =  0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case 12: aCoord[0] =  0.0;  aCoord[1] =  0.5;  aCoord[2] =  0.5; break;
+      case 11: aCoord[0] = -0.5;  aCoord[1] =  0.0;  aCoord[2] =  0.5; break;
+      case 10: aCoord[0] =  0.0;  aCoord[1] = -0.5;  aCoord[2] =  0.5; break;
+      }
+    }
+  }
+
+  void
+  TPyra13b::InitFun(const TCCoordSliceArr& theRef,
+                    const TCCoordSliceArr& theGauss,
+                    TFun& theFun) const
+  {
+    GetFun(theRef,theGauss,theFun);
+
+    TInt aNbGauss = theGauss.size();
+    for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+      const TCCoordSlice& aCoord = theGauss[aGaussId];
+      TFloatVecSlice aSlice = theFun.GetFunSlice(aGaussId);
+
+      aSlice[0] = 0.5*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
+        (aCoord[0] - 0.5)/(1.0 - aCoord[2]);
+      aSlice[3] = 0.5*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(+aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
+        (aCoord[1] - 0.5)/(1.0 - aCoord[2]);
+      aSlice[2] = 0.5*(+aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(+aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
+        (-aCoord[0] - 0.5)/(1.0 - aCoord[2]);
+      aSlice[1] = 0.5*(+aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
+        (-aCoord[1] - 0.5)/(1.0 - aCoord[2]);
+
+      aSlice[4] = 2.0*aCoord[2]*(aCoord[2] - 0.5);
+
+      aSlice[8] = 0.5*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
+        (aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
+      aSlice[7] = 0.5*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*
+        (aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
+      aSlice[6] = 0.5*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
+        (-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
+      aSlice[5] = 0.5*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*
+        (-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/(1.0 - aCoord[2]);
+
+      aSlice[9] = 0.5*aCoord[2]*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/
+        (1.0 - aCoord[2]);
+      aSlice[12] = 0.5*aCoord[2]*(-aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)/
+        (1.0 - aCoord[2]);
+      aSlice[11] = 0.5*aCoord[2]*(aCoord[0] - aCoord[1] + aCoord[2] - 1.0)*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/
+        (1.0 - aCoord[2]);
+      aSlice[10] = 0.5*aCoord[2]*(aCoord[0] + aCoord[1] + aCoord[2] - 1.0)*(-aCoord[0] + aCoord[1] + aCoord[2] - 1.0)/
+        (1.0 - aCoord[2]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  bool
+  GetGaussCoord3D(const TGaussInfo& theGaussInfo,
+                  const TCellInfo& theCellInfo,
+                  const TNodeInfo& theNodeInfo,
+                  TGaussCoord& theGaussCoord,
+                  const TElemNum& theElemNum,
+                  EModeSwitch theMode)
+  {
+    INITMSG(MYDEBUG,"GetGaussCoord3D\n");
+
+    if(theGaussInfo.myGeom == theCellInfo.myGeom){
+      EGeometrieElement aGeom = theGaussInfo.myGeom;
+
+      TInt aNbRef = theGaussInfo.GetNbRef();
+      TCCoordSliceArr aRefSlice(aNbRef);
+      for(TInt anId = 0; anId < aNbRef; anId++)
+        aRefSlice[anId] = theGaussInfo.GetRefCoordSlice(anId);
+
+      TInt aNbGauss = theGaussInfo.GetNbGauss();
+      TCCoordSliceArr aGaussSlice(aNbGauss);
+      for(TInt anId = 0; anId < aNbGauss; anId++)
+        aGaussSlice[anId] = theGaussInfo.GetGaussCoordSlice(anId);
+
+      switch(aGeom){
+      case eSEG2: {
+        INITMSG(MYDEBUG,"eSEG2"<<std::endl);
+
+        if(TSeg2a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eSEG3: {
+        INITMSG(MYDEBUG,"eSEG3"<<std::endl);
+
+        if(TSeg3a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eTRIA3: {
+        INITMSG(MYDEBUG,"eTRIA3"<<std::endl);
+
+        if(TTria3a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TTria3b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eTRIA6: {
+        INITMSG(MYDEBUG,"eTRIA6"<<std::endl);
+
+        if(TTria6a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TTria6b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eQUAD4: {
+        INITMSG(MYDEBUG,"eQUAD4"<<std::endl);
+
+        if(TQuad4a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TQuad4b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eQUAD8: {
+        INITMSG(MYDEBUG,"eQUAD8"<<std::endl);
+
+        if(TQuad8a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TQuad8b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eQUAD9: {
+        INITMSG(MYDEBUG,"eQUAD9"<<std::endl);
+
+        if(TQuad9a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TQuad9b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eTETRA4: {
+        INITMSG(MYDEBUG,"eTETRA4"<<std::endl);
+
+        if(TTetra4a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TTetra4b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case ePYRA5: {
+        INITMSG(MYDEBUG,"ePYRA5"<<std::endl);
+
+        if(TPyra5a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TPyra5b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case ePENTA6: {
+        INITMSG(MYDEBUG,"ePENTA6"<<std::endl);
+
+        if(TPenta6a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TPenta6b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eHEXA8: {
+        INITMSG(MYDEBUG,"eHEXA8"<<std::endl);
+
+        if(THexa8a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(THexa8b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eTETRA10: {
+        INITMSG(MYDEBUG,"eTETRA10"<<std::endl);
+
+        if(TTetra10a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TTetra10b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case ePYRA13: {
+        INITMSG(MYDEBUG,"ePYRA13"<<std::endl);
+
+        if(TPyra13a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TPyra13b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case ePENTA15: {
+        INITMSG(MYDEBUG,"ePENTA15"<<std::endl);
+
+        if(TPenta15a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(TPenta15b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      case eHEXA20: {
+        INITMSG(MYDEBUG,"eHEXA20"<<std::endl);
+
+        if(THexa20a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        if(THexa20b().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
+          return true;
+
+        break;
+      }
+      default:
+        INITMSG(MYDEBUG,"eNONE"<<std::endl);
+        return false;
+      }
+    }
+
+    return false;
+  }
+
+  //---------------------------------------------------------------
+  bool
+  GetBaryCenter(const TCellInfo& theCellInfo,
+                const TNodeInfo& theNodeInfo,
+                TGaussCoord& theGaussCoord,
+                const TElemNum& theElemNum,
+                EModeSwitch theMode)
+  {
+    INITMSG(MYDEBUG,"GetBaryCenter\n");
+    const PMeshInfo& aMeshInfo = theCellInfo.GetMeshInfo();
+    TInt aDim = aMeshInfo->GetDim();
+    static TInt aNbGauss = 1;
+
+    bool anIsSubMesh = !theElemNum.empty();
+    TInt aNbElem;
+    if(anIsSubMesh)
+      aNbElem = theElemNum.size();
+    else
+      aNbElem = theCellInfo.GetNbElem();
+
+    theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
+
+    TInt aConnDim = theCellInfo.GetConnDim();
+
+    INITMSGA(MYDEBUG,0,
+             "- aDim = "<<aDim<<
+             "; aNbGauss = "<<aNbGauss<<
+             "; aNbElem = "<<aNbElem<<
+             "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
+             std::endl);
+
+    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
+      TInt aCellId = anIsSubMesh? theElemNum[anElemId]-1: anElemId;
+      TCConnSlice aConnSlice = theCellInfo.GetConnSlice(aCellId);
+      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
+
+      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+        TCoordSlice& aGaussCoordSlice = aCoordSliceArr[aGaussId];
+
+        for(TInt aConnId = 0; aConnId < aConnDim; aConnId++){
+          TInt aNodeId = aConnSlice[aConnId] - 1;
+          TCCoordSlice aNodeCoordSlice = theNodeInfo.GetCoordSlice(aNodeId);
+
+          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+            aGaussCoordSlice[aDimId] += aNodeCoordSlice[aDimId];
+          }
+        }
+
+        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+          aGaussCoordSlice[aDimId] /= aConnDim;
+        }
+      }
+    }
+
+#ifdef _DEBUG_
+    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
+      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
+      INITMSG(MYVALUEDEBUG,"");
+      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+        TCoordSlice& aCoordSlice = aCoordSliceArr[aGaussId];
+        ADDMSG(MYVALUEDEBUG,"{");
+        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+          ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
+        }
+        ADDMSG(MYVALUEDEBUG,"} ");
+      }
+      ADDMSG(MYVALUEDEBUG,std::endl);
+    }
+#endif
+
+    return true;
+  }
+
+  //---------------------------------------------------------------
+  bool
+  GetBaryCenter(const TPolygoneInfo& thePolygoneInfo,
+                const TNodeInfo& theNodeInfo,
+                TGaussCoord& theGaussCoord,
+                const TElemNum& theElemNum,
+                EModeSwitch theMode)
+  {
+    INITMSG(MYDEBUG,"GetBaryCenter\n");
+    const PMeshInfo& aMeshInfo = thePolygoneInfo.GetMeshInfo();
+    TInt aDim = aMeshInfo->GetDim();
+    static TInt aNbGauss = 1;
+
+    bool anIsSubMesh = !theElemNum.empty();
+    TInt aNbElem;
+    if(anIsSubMesh)
+      aNbElem = theElemNum.size();
+    else
+      aNbElem = thePolygoneInfo.GetNbElem();
+
+    theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
+
+    INITMSGA(MYDEBUG,0,
+             "- aDim = "<<aDim<<
+             "; aNbGauss = "<<aNbGauss<<
+             "; aNbElem = "<<aNbElem<<
+             "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
+             std::endl);
+
+    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
+      TInt aCellId = anIsSubMesh? theElemNum[anElemId]-1: anElemId;
+
+      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
+      TCConnSlice aConnSlice = thePolygoneInfo.GetConnSlice(aCellId);
+      TInt aNbConn = thePolygoneInfo.GetNbConn(aCellId);
+      TInt aNbNodes = thePolygoneInfo.GetNbConn(aCellId);
+
+      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+        TCoordSlice& aGaussCoordSlice = aCoordSliceArr[aGaussId];
+
+        for(TInt aConnId = 0; aConnId < aNbConn; aConnId++){
+          TInt aNodeId = aConnSlice[aConnId] - 1;
+          TCCoordSlice aNodeCoordSlice = theNodeInfo.GetCoordSlice(aNodeId);
+
+          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+            aGaussCoordSlice[aDimId] += aNodeCoordSlice[aDimId];
+          }
+        }
+
+        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+          aGaussCoordSlice[aDimId] /= aNbNodes;
+        }
+      }
+    }
+
+    return true;
+  }
+
+  //---------------------------------------------------------------
+  bool
+  GetBaryCenter(const TPolyedreInfo& thePolyedreInfo,
+                const TNodeInfo& theNodeInfo,
+                TGaussCoord& theGaussCoord,
+                const TElemNum& theElemNum,
+                EModeSwitch theMode)
+  {
+    INITMSG(MYDEBUG,"GetBaryCenter\n");
+    const PMeshInfo& aMeshInfo = thePolyedreInfo.GetMeshInfo();
+    TInt aDim = aMeshInfo->GetDim();
+    static TInt aNbGauss = 1;
+
+    bool anIsSubMesh = !theElemNum.empty();
+    TInt aNbElem;
+    if(anIsSubMesh)
+      aNbElem = theElemNum.size();
+    else
+      aNbElem = thePolyedreInfo.GetNbElem();
+
+    theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
+
+    INITMSGA(MYDEBUG,0,
+             "- aDim = "<<aDim<<
+             "; aNbGauss = "<<aNbGauss<<
+             "; aNbElem = "<<aNbElem<<
+             "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
+             std::endl);
+
+    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
+      TInt aCellId = anIsSubMesh? theElemNum[anElemId]-1: anElemId;
+
+      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
+      TCConnSliceArr aConnSliceArr = thePolyedreInfo.GetConnSliceArr(aCellId);
+      TInt aNbFaces = aConnSliceArr.size();
+
+      TInt aNbNodes = thePolyedreInfo.GetNbNodes(aCellId);
+
+      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+        TCoordSlice& aGaussCoordSlice = aCoordSliceArr[aGaussId];
+
+        for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++){
+          TCConnSlice aConnSlice = aConnSliceArr[aFaceId];
+          TInt aNbConn = aConnSlice.size();
+          for(TInt aConnId = 0; aConnId < aNbConn; aConnId++){
+            TInt aNodeId = aConnSlice[aConnId] - 1;
+            TCCoordSlice aNodeCoordSlice = theNodeInfo.GetCoordSlice(aNodeId);
+
+            for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+              aGaussCoordSlice[aDimId] += aNodeCoordSlice[aDimId];
+            }
+          }
+        }
+        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+          aGaussCoordSlice[aDimId] /= aNbNodes;
+        }
+      }
+    }
+
+    return true;
+  }
+}
diff --git a/src/MEDWrapper/MED_GaussUtils.hxx b/src/MEDWrapper/MED_GaussUtils.hxx
new file mode 100644 (file)
index 0000000..8dd12e0
--- /dev/null
@@ -0,0 +1,362 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_GaussUtils_HeaderFile
+#define MED_GaussUtils_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+#include "MED_Structures.hxx"
+
+namespace MED
+{
+  //---------------------------------------------------------------
+  typedef TVector<TCCoordSlice> TCCoordSliceArr;
+  typedef TVector<TCoordSlice> TCoordSliceArr;
+
+  //! Define a helper class to handle Gauss Points coordinates
+  class MEDWRAPPER_EXPORT TGaussCoord:
+    virtual TModeSwitchInfo
+  {
+    TInt myNbElem;
+    TInt myNbGauss;
+    TInt myDim;
+
+    TInt myGaussStep;
+
+    TNodeCoord myGaussCoord;
+
+  public:
+
+    TGaussCoord();
+
+    //! To init the class
+    void
+    Init(TInt theNbElem,
+         TInt theNbGauss,
+         TInt theDim,
+         EModeSwitch theMode = eFULL_INTERLACE);
+
+    TInt
+    GetNbElem() const;
+
+    TInt
+    GetNbGauss() const;
+
+    TInt
+    GetDim() const;
+
+    unsigned char*
+    GetValuePtr();
+
+    //! Get slice of the coordinate that corresponds to defined cell (const version)
+    TCCoordSliceArr
+    GetCoordSliceArr(TInt theElemId) const;
+
+    //! Get slice of the coordinate that corresponds to defined cell
+    TCoordSliceArr
+    GetCoordSliceArr(TInt theElemId);
+  };
+  typedef SharedPtr<TGaussCoord> PGaussCoord;
+
+  //---------------------------------------------------------------
+  //! To calculate Gauss Points coordinates
+  MEDWRAPPER_EXPORT
+  bool
+  GetGaussCoord3D(const TGaussInfo& theGaussInfo,
+                  const TCellInfo& theCellInfo,
+                  const TNodeInfo& theNodeInfo,
+                  TGaussCoord& theGaussCoord,
+                  const TElemNum& theElemNum = TElemNum(),
+                  EModeSwitch theMode = eFULL_INTERLACE);
+
+  //---------------------------------------------------------------
+  //! To calculate Gauss Points coordinates for defined TCellInfo as its bary center
+  MEDWRAPPER_EXPORT
+  bool
+  GetBaryCenter(const TCellInfo& theCellInfo,
+                const TNodeInfo& theNodeInfo,
+                TGaussCoord& theGaussCoord,
+                const TElemNum& theElemNum = TElemNum(),
+                EModeSwitch theMode = eFULL_INTERLACE);
+
+  //! To calculate Gauss Points coordinates for defined TPolygoneInfo as its bary center
+  MEDWRAPPER_EXPORT
+  bool
+  GetBaryCenter(const TPolygoneInfo& thePolygoneInfo,
+                const TNodeInfo& theNodeInfo,
+                TGaussCoord& theGaussCoord,
+                const TElemNum& theElemNum = TElemNum(),
+                EModeSwitch theMode = eFULL_INTERLACE);
+
+  //! To calculate Gauss Points coordinates for defined TPolyedreInfo as its bary center
+  MEDWRAPPER_EXPORT
+  bool
+  GetBaryCenter(const TPolyedreInfo& thePolyedreInfo,
+                const TNodeInfo& theNodeInfo,
+                TGaussCoord& theGaussCoord,
+                const TElemNum& theElemNum = TElemNum(),
+                EModeSwitch theMode = eFULL_INTERLACE);
+
+  //---------------------------------------------------------------
+  //! Shape function definitions
+  //---------------------------------------------------------------
+  struct MEDWRAPPER_EXPORT TShapeFun
+  {
+    class TFun;
+
+    TFloatVector myRefCoord;
+    TInt myDim;
+    TInt myNbRef;
+
+    TShapeFun(TInt theDim = 0, TInt theNbRef = 0);
+
+    TInt GetNbRef() const { return myNbRef; }
+
+    TCCoordSlice GetCoord(TInt theRefId) const;
+
+    TCoordSlice GetCoord(TInt theRefId);
+
+    void GetFun(const TCCoordSliceArr& theRef,
+                const TCCoordSliceArr& theGauss,
+                TFun& theFun) const;
+    virtual
+    void InitFun(const TCCoordSliceArr& theRef,
+                 const TCCoordSliceArr& theGauss,
+                 TFun& theFun) const = 0;
+    virtual
+    bool IsSatisfy(const TCCoordSliceArr& theRefCoord) const;
+
+    bool Eval(const TCellInfo&       theCellInfo,
+              const TNodeInfo&       theNodeInfo,
+              const TElemNum&        theElemNum,
+              const TCCoordSliceArr& theRef,
+              const TCCoordSliceArr& theGauss,
+              TGaussCoord&           theGaussCoord,
+              EModeSwitch            theMode);
+  };
+  //---------------------------------------------------------------
+  struct TSeg2a: TShapeFun {
+    TSeg2a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TSeg3a: TShapeFun {
+    TSeg3a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TTria3a: TShapeFun {
+    TTria3a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TTria6a: TShapeFun {
+    TTria6a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TTria3b: TShapeFun {
+    TTria3b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TTria6b: TShapeFun {
+    TTria6b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TQuad4a: TShapeFun {
+    TQuad4a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TQuad8a: TShapeFun {
+    TQuad8a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TQuad9a: TShapeFun {
+    TQuad9a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TQuad4b: TShapeFun {
+    TQuad4b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TQuad8b: TShapeFun {
+    TQuad8b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TQuad9b: TShapeFun {
+    TQuad9b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TTetra4a: TShapeFun {
+    TTetra4a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TTetra10a: TShapeFun {
+    TTetra10a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TTetra4b: TShapeFun {
+    TTetra4b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TTetra10b: TShapeFun {
+    TTetra10b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct THexa8a: TShapeFun {
+    THexa8a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct THexa20a: TShapeFun {
+    THexa20a(TInt theDim = 3, TInt theNbRef = 20);
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct THexa27a: THexa20a {
+    THexa27a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct THexa8b: TShapeFun {
+    THexa8b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct THexa20b: TShapeFun {
+    THexa20b(TInt theDim = 3, TInt theNbRef = 20);
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TPenta6a: TShapeFun {
+    TPenta6a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TPenta6b: TShapeFun {
+    TPenta6b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TPenta15a: TShapeFun {
+    TPenta15a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TPenta15b: TShapeFun {
+    TPenta15b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TPyra5a: TShapeFun {
+    TPyra5a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TPyra5b: TShapeFun {
+    TPyra5b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TPyra13a: TShapeFun {
+    TPyra13a();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+  struct TPyra13b: TShapeFun {
+    TPyra13b();
+    virtual void InitFun(const TCCoordSliceArr& theRef,
+                         const TCCoordSliceArr& theGauss,
+                         TFun& theFun) const;
+  };
+  //---------------------------------------------------------------
+}
+
+#endif // MED_GaussUtils_HeaderFile
diff --git a/src/MEDWrapper/MED_SharedPtr.hxx b/src/MEDWrapper/MED_SharedPtr.hxx
new file mode 100644 (file)
index 0000000..09dc7ad
--- /dev/null
@@ -0,0 +1,93 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_SharedPtr_HeaderFile
+#define MED_SharedPtr_HeaderFile
+
+#include <boost/shared_ptr.hpp>
+
+namespace MED
+{
+  //! To extend the boost::shared_ptr to support such features automatic dynamic cast
+  /*!
+    All entities of the MEDWrapper package are handled as pointer.
+    This class was introduced to provide correct and flexible memory management
+    for all of the MEDWrapper objects.
+  */
+  template<class T> class SharedPtr: public boost::shared_ptr<T>
+  {
+  public:
+    //! Default constructor
+    SharedPtr() {}
+
+    //! Construct the class by any type of a pointer
+    template<class Y>
+    explicit SharedPtr(Y * p):
+      boost::shared_ptr<T>(p)
+    {}
+
+    //! Construct the class by any specialisation of the class
+    template<class Y>
+    SharedPtr(SharedPtr<Y> const & r):
+      boost::shared_ptr<T>(boost::dynamic_pointer_cast<T,Y>(r))
+    {}
+
+    //! Copy-constructor
+    template<class Y>
+    SharedPtr&
+    operator=(SharedPtr<Y> const & r)
+    {
+      SharedPtr<T>(r).swap(*this);
+      return *this;
+    }
+
+    //! Introduce a flexible way to reset the wrapped pointer
+    template<class Y>
+    SharedPtr&
+    operator()(Y * p) // Y must be complete
+    {
+      return operator=<Y>(SharedPtr<Y>(p));
+    }
+
+    //! Introduce a flexible way to reset the wrapped pointer
+    template<class Y>
+    SharedPtr&
+    operator()(SharedPtr<Y> const & r) // Y must be complete
+    {
+      return operator=<Y>(SharedPtr<Y>(r));
+    }
+
+    //! To provide a flexible way to use reference to the wrapped pointer (const version)
+    operator const T& () const
+    {
+      return *(this->get());
+    }
+
+    //! To provide a flexible way to use reference to the wrapped pointer
+    operator T& ()
+    {
+      return *(this->get());
+    }
+  };
+}
+
+#endif // MED_SharedPtr_HeaderFile
diff --git a/src/MEDWrapper/MED_SliceArray.hxx b/src/MEDWrapper/MED_SliceArray.hxx
new file mode 100644 (file)
index 0000000..1833b55
--- /dev/null
@@ -0,0 +1,184 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_SliceArray_HeaderFile
+#define MED_SliceArray_HeaderFile
+
+#ifdef WIN32 // for correct compiling of "valarray" in modules, which include this file
+  #undef max
+  #undef min
+#endif
+
+#include <valarray>
+#include <stdexcept>
+
+//#if defined(_DEBUG_)
+#  define MED_TCSLICE_CHECK_RANGE
+//#endif
+
+namespace MED
+{
+  //---------------------------------------------------------------
+  //! This class intends to provide a uniform way to handle multidimensional data (const version)
+  /*!
+    It just contains a pointer to real sequence and implement proper calculation of its indexes.
+    This class deals with constant pointer to the sources data and provides const method to
+    read them (data).
+   */
+  template<class TValueType>
+  class TCSlice
+  {
+    const TValueType* myCValuePtr; //!< Reference to source multidimensional data
+    size_t mySourceSize; //!< Size of the source multidimensional data
+    std::slice mySlice; //!< Defines algorithm of index calculation
+
+  protected:
+    void
+    check_id(size_t theId) const
+    {
+      long int anId = -1;
+      if(theId < mySlice.size()){
+        anId = mySlice.start() + theId*mySlice.stride();
+        if(anId < (long int)mySourceSize)
+          return;
+      }
+      throw std::out_of_range("TCSlice::check_id");
+    }
+
+    //! Calculate internal index to get proper element from the source multidimensional data
+    size_t
+    calculate_id(size_t theId) const
+    {
+      return mySlice.start() + theId*mySlice.stride();
+    }
+
+    size_t
+    get_id(size_t theId) const
+    {
+#ifdef MED_TCSLICE_CHECK_RANGE
+      check_id(theId);
+#endif
+      return calculate_id(theId);
+    }
+
+    size_t
+    get_id_at(size_t theId) const
+    {
+      check_id(theId);
+      return calculate_id(theId);
+    }
+
+  public:
+    typedef TValueType value_type;
+
+    //! Construct the class from bare pointer
+    TCSlice(const value_type* theValuePtr,
+            size_t theSourceSize,
+            const std::slice& theSlice):
+      myCValuePtr(theValuePtr),
+      mySourceSize(theSourceSize),
+      mySlice(theSlice)
+    {}
+
+    //! Construct the class from corresponding container
+    TCSlice(const TVector<value_type>& theContainer,
+            const std::slice& theSlice):
+      myCValuePtr(&theContainer[0]),
+      mySourceSize(theContainer.size()),
+      mySlice(theSlice)
+    {}
+
+    //! Default constructor (dangerous)
+    TCSlice():
+      myCValuePtr(NULL)
+    {}
+
+    //! Get element by its number (const version)
+    const value_type&
+    operator[](size_t theId) const
+    {
+      return *(myCValuePtr + get_id(theId));
+    }
+
+    const value_type&
+    at(size_t theId) const
+    {
+      return *(myCValuePtr + get_id_at(theId));
+    }
+
+    //! Get range of the order numbers
+    size_t
+    size() const
+    {
+      return mySlice.size();
+    }
+  };
+
+  //---------------------------------------------------------------
+  //! This class extends TCSlice functionality for non-constant case
+  template<class TValueType>
+  class TSlice: public TCSlice<TValueType>
+  {
+    TValueType* myValuePtr;
+
+  public:
+    typedef TValueType value_type;
+    typedef TCSlice<TValueType> TSupperClass;
+
+    //! Construct the class from bare pointer
+    TSlice(value_type* theValuePtr,
+           size_t theSourceSize,
+           const std::slice& theSlice):
+      TSupperClass(theValuePtr, theSourceSize, theSlice),
+      myValuePtr(theValuePtr)
+    {}
+
+    //! Construct the class from corresponding container
+    TSlice(TVector<value_type>& theContainer,
+           const std::slice& theSlice):
+      TSupperClass(theContainer, theSlice),
+      myValuePtr(&theContainer[0])
+    {}
+
+    //! Default constructor (dangerous)
+    TSlice():
+      myValuePtr(NULL)
+    {}
+
+    //! Get element by its number
+    value_type&
+    operator[](size_t theId)
+    {
+      return *(myValuePtr + this->get_id(theId));
+    }
+
+    value_type&
+    at(size_t theId)
+    {
+      return *(myValuePtr + this->get_id_at(theId));
+    }
+  };
+}
+
+#undef MED_TCSLICE_CHECK_RANGE
+
+#endif // MED_SliceArray_HeaderFile
diff --git a/src/MEDWrapper/MED_Structures.cxx b/src/MEDWrapper/MED_Structures.cxx
new file mode 100644 (file)
index 0000000..f5caca0
--- /dev/null
@@ -0,0 +1,849 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_Structures.hxx"
+#include "MED_Utilities.hxx"
+
+#include <cstring>
+
+namespace MED
+{
+  std::string
+  GetString(TInt theId,
+            TInt theStep,
+            const TString& theString)
+  {
+    const char* aPos = &theString[theId*theStep];
+    TInt aSize = std::min(TInt(strlen(aPos)),theStep);
+    return std::string(aPos,aSize);
+  }
+
+  void
+  SetString(TInt theId,
+            TInt theStep,
+            TString& theString,
+            const std::string& theValue)
+  {
+    TInt aSize = std::min(TInt(theValue.size()+1),theStep);
+    char* aPos = &theString[theId*theStep];
+    strncpy(aPos,theValue.c_str(),aSize);
+  }
+
+  void
+  SetString(TInt theId,
+            TInt theStep,
+            TString& theString,
+            const TString& theValue)
+  {
+    TInt aSize = std::min(TInt(theValue.size()+1),theStep);
+    char* aPos = &theString[theId*theStep];
+    const char* aValue = &theValue[0];
+    strncpy(aPos,aValue,aSize);
+  }
+
+  TInt
+  GetDimGaussCoord(EGeometrieElement theGeom)
+  {
+    return theGeom/100;
+  }
+
+  TInt
+  GetNbRefCoord(EGeometrieElement theGeom)
+  {
+    return (theGeom%100);
+  }
+
+  //---------------------------------------------------------------
+  PFloatTimeStampValue
+  CastToFloatTimeStampValue(const PTimeStampValueBase& theTimeStampValue)
+  {
+    return theTimeStampValue;
+  }
+
+  PIntTimeStampValue
+  CastToIntTimeStampValue(const PTimeStampValueBase& theTimeStampValue)
+  {
+    return theTimeStampValue;
+  }
+
+  //---------------------------------------------------------------
+  TInt
+  TFamilyInfo
+  ::GetAttrId(TInt theId) const
+  {
+    return myAttrId[theId];
+  }
+
+  TInt
+  TFamilyInfo
+  ::GetAttrVal(TInt theId) const
+  {
+    return myAttrVal[theId];
+  }
+
+  void
+  TFamilyInfo
+  ::SetAttrId(TInt theId,TInt theVal)
+  {
+    myAttrId[theId] = theVal;
+  }
+
+  void
+  TFamilyInfo
+  ::SetAttrVal(TInt theId,TInt theVal)
+  {
+    myAttrVal[theId] = theVal;
+  }
+
+  //---------------------------------------------------------------
+  TInt
+  TElemInfo
+  ::GetFamNum(TInt theId) const
+  {
+    return (*myFamNum)[theId];
+  }
+
+  void
+  TElemInfo
+  ::SetFamNum(TInt theId, TInt theVal)
+  {
+    (*myFamNum)[theId] = theVal;
+    myIsFamNum = eVRAI;
+  }
+
+  TInt
+  TElemInfo
+  ::GetElemNum(TInt theId) const
+  {
+    return (*myElemNum)[theId];
+  }
+
+  void
+  TElemInfo
+  ::SetElemNum(TInt theId, TInt theVal)
+  {
+    (*myElemNum)[theId] = theVal;
+  }
+
+  //---------------------------------------------------------------
+  TCCoordSlice
+  TNodeInfo
+  ::GetCoordSlice(TInt theId) const
+  {
+    TInt aDim = myMeshInfo->GetSpaceDim();
+    if(GetModeSwitch() == eFULL_INTERLACE)
+      return TCCoordSlice(*myCoord, std::slice(theId*aDim, aDim, 1));
+    else
+      return TCCoordSlice(*myCoord, std::slice(theId, aDim, aDim));
+  }
+
+  TCoordSlice
+  TNodeInfo
+  ::GetCoordSlice(TInt theId)
+  {
+    TInt aDim = myMeshInfo->GetSpaceDim();
+    if(GetModeSwitch() == eFULL_INTERLACE)
+      return TCoordSlice(*myCoord, std::slice(theId*aDim,aDim,1));
+    else
+      return TCoordSlice(*myCoord, std::slice(theId,aDim,aDim));
+  }
+
+  //---------------------------------------------------------------
+  TCConnSlice
+  TCellInfo
+  ::GetConnSlice(TInt theElemId) const
+  {
+    if(GetModeSwitch() == eFULL_INTERLACE)
+      return TCConnSlice(*myConn, std::slice(GetConnDim()*theElemId, GetNbNodes(myGeom), 1));
+    else
+      return TCConnSlice(*myConn, std::slice(theElemId, GetNbNodes(myGeom), GetConnDim()));
+  }
+
+  TConnSlice
+  TCellInfo
+  ::GetConnSlice(TInt theElemId)
+  {
+    if(GetModeSwitch() == eFULL_INTERLACE)
+      return TConnSlice(*myConn, std::slice(GetConnDim()*theElemId, GetNbNodes(myGeom), 1));
+    else
+      return TConnSlice(*myConn, std::slice(theElemId, GetNbNodes(myGeom), GetConnDim()));
+  }
+
+  //---------------------------------------------------------------
+  TInt
+  TPolygoneInfo
+  ::GetNbConn(TInt theElemId) const
+  {
+    return (*myIndex)[theElemId + 1] - (*myIndex)[theElemId];
+  }
+
+  TCConnSlice
+  TPolygoneInfo
+  ::GetConnSlice(TInt theElemId) const
+  {
+    return TCConnSlice(*myConn, std::slice((*myIndex)[theElemId] - 1, GetNbConn(theElemId), 1));
+  }
+
+  TConnSlice
+  TPolygoneInfo
+  ::GetConnSlice(TInt theElemId)
+  {
+    return TConnSlice(*myConn, std::slice((*myIndex)[theElemId] - 1, GetNbConn(theElemId), 1));
+  }
+
+  //---------------------------------------------------------------
+  TInt
+  TPolyedreInfo
+  ::GetNbFaces(TInt theElemId) const
+  {
+    return (*myIndex)[theElemId+1] - (*myIndex)[theElemId];
+  }
+
+  TInt
+  TPolyedreInfo
+  ::GetNbNodes(TInt theElemId) const
+  {
+    TInt aNbNodes = 0;
+    TInt aNbFaces = GetNbFaces(theElemId);
+    TInt aStartFaceId = (*myIndex)[theElemId] - 1;
+    for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){
+      TInt aCurrentId = (*myFaces)[aStartFaceId];
+      TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId;
+      aNbNodes += aDiff;
+    }
+    return aNbNodes;
+  }
+
+  TCConnSliceArr
+  TPolyedreInfo
+  ::GetConnSliceArr(TInt theElemId) const
+  {
+    TInt aNbFaces = GetNbFaces(theElemId);
+    TCConnSliceArr aConnSliceArr(aNbFaces);
+    TInt aStartFaceId = (*myIndex)[theElemId] - 1;
+    for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){
+      TInt aCurrentId = (*myFaces)[aStartFaceId];
+      TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId;
+      aConnSliceArr[aFaceId] =
+        TCConnSlice(*myConn, std::slice(aCurrentId - 1, aDiff, 1));
+    }
+    return aConnSliceArr;
+  }
+
+  TConnSliceArr
+  TPolyedreInfo
+  ::GetConnSliceArr(TInt theElemId)
+  {
+    TInt aNbFaces = GetNbFaces(theElemId);
+    TConnSliceArr aConnSliceArr(aNbFaces);
+    TInt aStartFaceId = (*myIndex)[theElemId] - 1;
+    for(TInt aFaceId = 0; aFaceId < aNbFaces; aFaceId++, aStartFaceId++){
+      TInt aCurrentId = (*myFaces)[aStartFaceId];
+      TInt aDiff = (*myFaces)[aStartFaceId + 1] - aCurrentId;
+      aConnSliceArr[aFaceId] =
+        TConnSlice(*myConn, std::slice(aCurrentId - 1, aDiff, 1));
+    }
+    return aConnSliceArr;
+  }
+
+  //---------------------------------------------------------------
+  TMeshValueBase
+  ::TMeshValueBase():
+    myNbElem(0),
+    myNbComp(0),
+    myNbGauss(0),
+    myStep(0)
+  {}
+
+  void
+  TMeshValueBase
+  ::Allocate(TInt theNbElem,
+             TInt theNbGauss,
+             TInt theNbComp,
+             EModeSwitch theMode)
+  {
+    myModeSwitch = theMode;
+
+    myNbElem = theNbElem;
+    myNbGauss = theNbGauss;
+    myNbComp = theNbComp;
+
+    myStep = theNbComp*theNbGauss;
+  }
+
+  size_t
+  TMeshValueBase
+  ::GetSize() const
+  {
+    return myNbElem * myStep;
+  }
+
+  size_t
+  TMeshValueBase
+  ::GetNbVal() const
+  {
+    return myNbElem * myNbGauss;
+  }
+
+  size_t
+  TMeshValueBase
+  ::GetNbGauss() const
+  {
+    return myNbGauss;
+  }
+
+  size_t
+  TMeshValueBase
+  ::GetStep() const
+  {
+    return myStep;
+  }
+
+  //---------------------------------------------------------------
+  TInt
+  TProfileInfo
+  ::GetElemNum(TInt theId) const
+  {
+    return (*myElemNum)[theId];
+  }
+
+  void
+  TProfileInfo
+  ::SetElemNum(TInt theId,TInt theVal)
+  {
+    (*myElemNum)[theId] = theVal;
+  }
+
+  //---------------------------------------------------------------
+  bool
+  TGaussInfo::TLess
+  ::operator()(const TKey& theLeft, const TKey& theRight) const
+  {
+    EGeometrieElement aLGeom = boost::get<0>(theLeft);
+    EGeometrieElement aRGeom = boost::get<0>(theRight);
+    if(aLGeom != aRGeom)
+      return aLGeom < aRGeom;
+
+    const std::string& aLStr = boost::get<1>(theLeft);
+    const std::string& aRStr = boost::get<1>(theRight);
+    return aLStr < aRStr;
+  }
+
+  bool
+  TGaussInfo::TLess
+  ::operator()(const TGaussInfo& theLeft, const TGaussInfo& theRight) const
+  {
+    if(!&theLeft)
+      return true;
+
+    if(!&theRight)
+      return false;
+
+    if(theLeft.myGeom != theRight.myGeom)
+      return theLeft.myGeom < theRight.myGeom;
+
+    if(theLeft.myRefCoord != theRight.myRefCoord)
+      return theLeft.myRefCoord < theRight.myRefCoord;
+
+    return theLeft.myGaussCoord < theRight.myGaussCoord;
+  }
+
+  TCCoordSlice
+  TGaussInfo
+  ::GetRefCoordSlice(TInt theId) const
+  {
+    if(GetModeSwitch() == eFULL_INTERLACE)
+      return TCCoordSlice(myRefCoord,std::slice(theId*GetDim(),GetDim(),1));
+    else
+      return TCCoordSlice(myRefCoord,std::slice(theId,GetDim(),GetDim()));
+  }
+
+  TCoordSlice
+  TGaussInfo
+  ::GetRefCoordSlice(TInt theId)
+  {
+    if(GetModeSwitch() == eFULL_INTERLACE)
+      return TCoordSlice(myRefCoord,std::slice(theId*GetDim(),GetDim(),1));
+    else
+      return TCoordSlice(myRefCoord,std::slice(theId,GetDim(),GetDim()));
+  }
+
+  TCCoordSlice
+  TGaussInfo
+  ::GetGaussCoordSlice(TInt theId) const
+  {
+    if(GetModeSwitch() == eFULL_INTERLACE)
+      return TCCoordSlice(myGaussCoord,std::slice(theId*GetDim(),GetDim(),1));
+    else
+      return TCCoordSlice(myGaussCoord,std::slice(theId,GetDim(),GetDim()));
+  }
+
+  TCoordSlice
+  TGaussInfo
+  ::GetGaussCoordSlice(TInt theId)
+  {
+    if(GetModeSwitch() == eFULL_INTERLACE)
+      return TCoordSlice(myGaussCoord,std::slice(theId*GetDim(),GetNbGauss(),1));
+    else
+      return TCoordSlice(myGaussCoord,std::slice(theId,GetNbGauss(),GetDim()));
+  }
+
+  //---------------------------------------------------------------
+  TInt
+  TTimeStampInfo
+  ::GetNbGauss(EGeometrieElement theGeom) const
+  {
+    TGeom2NbGauss::const_iterator anIter = myGeom2NbGauss.find(theGeom);
+    if(anIter == myGeom2NbGauss.end())
+      return 1;//EXCEPTION(runtime_error,"TTimeStampInfo::GetNbGauss - myGeom2NbGauss.find(theGeom) fails");
+
+    return anIter->second;
+  }
+
+  //---------------------------------------------------------------
+  // TGrilleInfo structure methods
+  //---------------------------------------------------------------
+  const EGrilleType&
+  TGrilleInfo
+  ::GetGrilleType() const
+  {
+    return myGrilleType;
+  }
+
+  EGrilleType
+  TGrilleInfo
+  ::GetGrilleType()
+  {
+    return myGrilleType;
+  }
+
+  void
+  TGrilleInfo
+  ::SetGrilleType(EGrilleType theGrilleType)
+  {
+    myGrilleType = theGrilleType;
+  }
+
+  const
+  TIndexes&
+  TGrilleInfo
+  ::GetMapOfIndexes() const
+  {
+    return myIndixes;
+  }
+
+  TIndexes&
+  TGrilleInfo
+  ::GetMapOfIndexes()
+  {
+    return myIndixes;
+  }
+
+  const
+  TFloatVector&
+  TGrilleInfo
+  ::GetIndexes(TInt theAxisNumber) const
+  {
+    TIndexes::const_iterator aIter=myIndixes.find(theAxisNumber);
+    if(aIter==myIndixes.end())
+      EXCEPTION(std::runtime_error, "const TGrilleInfo::GetIndexes - myIndixes.find(theAxisNumber); fails");
+    return aIter->second;
+  }
+
+  TFloatVector&
+  TGrilleInfo
+  ::GetIndexes(TInt theAxisNumber)
+  {
+    TIndexes::iterator aIter=myIndixes.find(theAxisNumber);
+    if(aIter==myIndixes.end())
+      EXCEPTION(std::runtime_error, "TGrilleInfo::GetIndexes - myIndixes.find(theAxisNumber="<<theAxisNumber<<"); fails");
+    return aIter->second;
+  }
+
+  TInt
+  TGrilleInfo
+  ::GetNbIndexes(TInt theAxisNumber)
+  {
+    const TFloatVector& aVector=GetIndexes(theAxisNumber);
+    return aVector.size();
+  }
+
+  TInt
+  TGrilleInfo
+  ::GetNbNodes()
+  {
+    TInt nbNodes=0;
+    TInt aDim = myMeshInfo->GetDim();
+    for(int i=0;i<aDim;i++)
+      if(nbNodes == 0)
+        nbNodes = this->GetGrilleStructure()[i];
+      else
+        nbNodes = nbNodes*this->GetGrilleStructure()[i];
+
+    return nbNodes;
+  }
+
+  TInt
+  TGrilleInfo
+  ::GetNbCells()
+  {
+    TInt nbCells=0;
+    TInt aDim = myMeshInfo->GetDim();
+    for(int i=0;i<aDim;i++)
+      if(nbCells == 0)
+        nbCells = this->GetGrilleStructure()[i]-1;
+      else
+        nbCells = nbCells*(this->GetGrilleStructure()[i]-1);
+    return nbCells;
+  }
+
+  TInt
+  TGrilleInfo
+  ::GetNbSubCells()
+  {
+    TInt nb=0;
+    TInt aDim = myMeshInfo->GetDim();
+    switch (aDim) {
+    case 3:
+      nb =
+        (myGrilleStructure[0]  ) * (myGrilleStructure[1]-1) * (myGrilleStructure[2]-1) +
+        (myGrilleStructure[0]-1) * (myGrilleStructure[1]  ) * (myGrilleStructure[2]-1) +
+        (myGrilleStructure[0]-1) * (myGrilleStructure[1]-1) * (myGrilleStructure[2]  );
+      break;
+    case 2:
+      nb =
+        (myGrilleStructure[0]  ) * (myGrilleStructure[1]-1) +
+        (myGrilleStructure[0]-1) * (myGrilleStructure[1]  );
+      break;
+    }
+    return nb;
+  }
+
+  EGeometrieElement
+  TGrilleInfo
+  ::GetGeom()
+  {
+    TInt aDim = myMeshInfo->GetDim();
+    switch(aDim){
+    case 1:
+      return eSEG2;
+    case 2:
+      return eQUAD4;
+    case 3:
+      return eHEXA8;
+    default:
+      return eNONE;
+    }
+  }
+
+  EGeometrieElement
+  TGrilleInfo
+  ::GetSubGeom()
+  {
+    TInt aDim = myMeshInfo->GetDim();
+    switch(aDim){
+    case 2:
+      return eSEG2;
+    case 3:
+      return eQUAD4;
+    }
+    return eNONE;
+  }
+
+  EEntiteMaillage
+  TGrilleInfo
+  ::GetEntity()
+  {
+    return eMAILLE;
+  }
+
+  EEntiteMaillage
+  TGrilleInfo
+  ::GetSubEntity()
+  {
+    TInt aDim = myMeshInfo->GetDim();
+    switch(aDim){
+    case 2:
+      return eARETE;
+    case 3:
+      return eFACE;
+    }
+    return EEntiteMaillage(-1);
+  }
+
+  const
+  TIntVector&
+  TGrilleInfo
+  ::GetGrilleStructure() const
+  {
+    return myGrilleStructure;
+  }
+
+  TIntVector
+  TGrilleInfo
+  ::GetGrilleStructure()
+  {
+    return myGrilleStructure;
+  }
+
+  void
+  TGrilleInfo
+  ::SetGrilleStructure(TInt theAxis,TInt theNb)
+  {
+    if(theAxis >= 0 && theAxis <=2 && theNb >= 0)
+      myGrilleStructure[theAxis]=theNb;
+  }
+
+  const
+  TNodeCoord&
+  TGrilleInfo
+  ::GetNodeCoord() const
+  {
+    return myCoord;
+  }
+
+  TNodeCoord&
+  TGrilleInfo
+  ::GetNodeCoord()
+  {
+    return myCoord;
+  }
+
+  TNodeCoord
+  TGrilleInfo
+  ::GetCoord(TInt theId)
+  {
+    TNodeCoord aCoord;
+    TInt aDim       = myMeshInfo->GetDim();
+    TInt aNbNodes   = this->GetNbNodes();
+    aCoord.resize(aDim);
+
+    if(theId >= aNbNodes)
+      EXCEPTION(std::runtime_error, "TGrilleInfo::GetCoord - theId out of range");
+
+    if(myGrilleType == eGRILLE_STANDARD){
+      switch(aDim){
+      case 3:
+        aCoord[2] = myCoord[aDim*theId+2];
+      case 2:
+        aCoord[1] = myCoord[aDim*theId+1];
+      case 1:{
+        aCoord[0] = myCoord[aDim*theId];
+        break;
+      }
+      }
+    } else {
+
+      TFloatVector aVecX  = this->GetIndexes(0);
+      TInt nbIndxX        = this->GetNbIndexes(0);
+
+      switch(aDim){
+      case 1:{
+        aCoord[0] = aVecX[theId];
+        break;
+      }
+      case 2:{
+        TFloatVector aVecY = this->GetIndexes(1);
+        TInt i,j,k;
+        i = j = k = 0;
+        i = theId % nbIndxX;
+        j = theId / nbIndxX;
+        if(myGrilleType == eGRILLE_CARTESIENNE){
+          aCoord[0] = aVecX[i];
+          aCoord[1] = aVecY[j];
+        } else { // eGRILLE_POLAIRE (cylindrical)
+          aCoord[0] = aVecX[i] * cos(aVecY[j]);
+          aCoord[1] = aVecX[i] * sin(aVecY[j]);
+        }
+        break;
+      }
+      case 3:{
+        TFloatVector aVecY = this->GetIndexes(1);
+        TInt nbIndxY       = this->GetNbIndexes(1);
+        TFloatVector aVecZ = this->GetIndexes(2);
+        TInt i,j,k;
+        i = j = k = 0;
+
+        i = theId % nbIndxX;
+        j = (theId / nbIndxX) % nbIndxY;
+        k = theId / (nbIndxX*nbIndxY);
+
+        if(myGrilleType == eGRILLE_CARTESIENNE){
+          aCoord[0] = aVecX[i];
+          aCoord[1] = aVecY[j];
+          aCoord[2] = aVecZ[k];
+        } else { // eGRILLE_POLAIRE (cylindrical)
+          aCoord[0] = aVecX[i] * cos(aVecY[j]);
+          aCoord[1] = aVecX[i] * sin(aVecY[j]);
+          aCoord[2] = aVecZ[k];
+        }
+
+        break;
+      }
+      }
+    }
+
+    return aCoord;
+  }
+
+  TIntVector
+  TGrilleInfo
+  ::GetConn(TInt theId, const bool isSub)
+  {
+    TIntVector anIndexes;
+    TInt aDim = myMeshInfo->GetDim();
+
+    TInt idx;
+    TInt iMin, jMin, kMin, iMax, jMax, kMax;
+    TInt loc[3];
+
+    loc[0] = loc[1] = loc[2] = 0;
+    iMin = iMax = jMin = jMax = kMin = kMax = 0;
+
+    switch(aDim) {
+    case 3:
+      {
+        TInt nbX = this->GetGrilleStructure()[0];
+        TInt nbY = this->GetGrilleStructure()[1];
+        TInt nbZ = this->GetGrilleStructure()[2];
+        TInt d01 = nbX*nbY, dX = 1, dY = 1, dZ = 1;
+        if ( isSub )
+          {
+            if ( theId < nbX * (nbY-1) * (nbZ-1))
+              { // face is normal to X axis
+                dX = 0;
+              }
+            else if ( theId < nbX * (nbY-1) * (nbZ-1) + (nbX-1) * nbY * (nbZ-1))
+              {  // face is normal to Y axis
+                theId -= nbX * (nbY-1) * (nbZ-1);
+                dY = 0;
+              }
+            else
+              {
+                theId -= nbX * (nbY-1) * (nbZ-1) + (nbX-1) * nbY * (nbZ-1);
+                dZ = 0;
+              }
+          }
+        //else
+        {
+          iMin = theId % (nbX - dX);
+          jMin = (theId / (nbX - dX)) % (nbY - dY);
+          kMin = theId / ((nbX - dX) * (nbY - dY));
+          iMax = iMin+dX;
+          jMax = jMin+dY;
+          kMax = kMin+dZ;
+        }
+        for (loc[2]=kMin; loc[2]<=kMax; loc[2]++)
+          for (loc[1]=jMin; loc[1]<=jMax; loc[1]++)
+            for (loc[0]=iMin; loc[0]<=iMax; loc[0]++)
+              {
+                idx = loc[0] + loc[1]*nbX + loc[2]*d01;
+                anIndexes.push_back(idx);
+              }
+        break;
+      }
+    case 2:
+      {
+        TInt nbX = this->GetGrilleStructure()[0];
+        TInt nbY = this->GetGrilleStructure()[1];
+        TInt dX = 1, dY = 1;
+        if ( isSub )
+          {
+            if ( theId < nbX * (nbY-1))
+              { // edge is normal to X axis
+                dX = 0;
+              }
+            else
+              {
+                theId -= nbX * (nbY-1);
+                dY = 0;
+              }
+          }
+        iMin = theId % (nbX-dX);
+        jMin = theId / (nbX-dX);
+        iMax = iMin+dX;
+        jMax = jMin+dY;
+        for (loc[1]=jMin; loc[1]<=jMax; loc[1]++)
+          for (loc[0]=iMin; loc[0]<=iMax; loc[0]++)
+            {
+              idx = loc[0] + loc[1]*nbX;
+              anIndexes.push_back(idx);
+            }
+        break;
+      }
+    case 1:
+      {
+        iMin = theId;
+        for (loc[0]=iMin; loc[0]<=iMin+1; loc[0]++)
+          {
+            idx = loc[0];
+            anIndexes.push_back(idx);
+          }
+        break;
+      }
+    }
+
+    return anIndexes;
+  }
+
+  TInt
+  TGrilleInfo
+  ::GetFamNumNode(TInt theId) const
+  {
+    return myFamNumNode[theId];
+  }
+
+  void
+  TGrilleInfo
+  ::SetFamNumNode(TInt theId,TInt theVal)
+  {
+    myFamNumNode[theId] = theVal;
+  }
+
+  TInt
+  TGrilleInfo
+  ::GetFamNum(TInt theId) const
+  {
+    return myFamNum[theId];
+  }
+
+  void
+  TGrilleInfo
+  ::SetFamNum(TInt theId,TInt theVal)
+  {
+    myFamNum[theId] = theVal;
+  }
+
+  TInt
+  TGrilleInfo
+  ::GetFamSubNum(TInt theId) const
+  {
+    return myFamSubNum[theId];
+  }
+
+  void
+  TGrilleInfo
+  ::SetFamSubNum(TInt theId,TInt theVal)
+  {
+    myFamSubNum[theId] = theVal;
+  }
+}
diff --git a/src/MEDWrapper/MED_Structures.hxx b/src/MEDWrapper/MED_Structures.hxx
new file mode 100644 (file)
index 0000000..91387eb
--- /dev/null
@@ -0,0 +1,1072 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_Structures_HeaderFile
+#define MED_Structures_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+#include "MED_Common.hxx"
+#include "MED_Utilities.hxx"
+#include "MED_SliceArray.hxx"
+
+#include <boost/tuple/tuple.hpp>
+
+#ifdef WIN32
+#pragma warning(disable:4251)
+#endif
+
+namespace MED
+{
+  //---------------------------------------------------------------
+  //! Defines a type for managing sequence of strings
+  typedef TVector<char> TString;
+  typedef SharedPtr<TString> PString;
+
+  //---------------------------------------------------------------
+  //! Extract a substring from the sequence of the strings
+  MEDWRAPPER_EXPORT
+  std::string
+  GetString(TInt theId,
+            TInt theStep,
+            const TString& theString);
+
+  //---------------------------------------------------------------
+  //! Set a substring in the sequence of the strings
+  MEDWRAPPER_EXPORT
+  void
+  SetString(TInt theId,
+            TInt theStep,
+            TString& theString,
+            const std::string& theValue);
+
+  //---------------------------------------------------------------
+  //! Set a substring in the sequence of the strings
+  MEDWRAPPER_EXPORT
+  void
+  SetString(TInt theId,
+            TInt theStep,
+            TString& theString,
+            const TString& theValue);
+
+  //---------------------------------------------------------------
+  //! Define a parent class for all MEDWrapper classes
+  struct MEDWRAPPER_EXPORT TBase
+  {
+    virtual ~TBase() {}
+  };
+
+  //---------------------------------------------------------------
+  //! Define a parent class for all named MED entities
+  struct MEDWRAPPER_EXPORT TNameInfo: virtual TBase
+  {
+    TString myName; //!< Keeps its name
+    virtual std::string GetName() const = 0; //!< Gets its name
+    virtual void SetName(const std::string& theValue) = 0; //!< Set a new name
+    virtual void SetName(const TString& theValue) = 0; //!< Set a new name
+  };
+
+  //---------------------------------------------------------------
+  //! Define a parent class for all MED entities that contains a sequence of numbers
+  /*!
+    It defines through corresponding enumeration (EModeSwitch) how the sequence
+    should be interpreted in C or Fortran mode (eFULL_INTERLACE or eNON_INTERLACE).
+  */
+  struct MEDWRAPPER_EXPORT TModeSwitchInfo: virtual TBase
+  {
+    //! To construct instance of the class by default
+    TModeSwitchInfo():
+      myModeSwitch(eFULL_INTERLACE)
+    {}
+
+    //! To construct instance of the class
+    TModeSwitchInfo(EModeSwitch theModeSwitch):
+      myModeSwitch(theModeSwitch)
+    {}
+
+    EModeSwitch myModeSwitch; //!< Keeps the interlace mode
+    EModeSwitch GetModeSwitch() const { return myModeSwitch; }
+  };
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED Mesh entity
+  struct MEDWRAPPER_EXPORT TMeshInfo: virtual TNameInfo
+  {
+    TInt myDim; //!< Dimension of the mesh (0, 1, 2 or 3)
+    TInt GetDim() const { return myDim; } //!< Gets dimension of the mesh
+
+    TInt mySpaceDim;
+    TInt GetSpaceDim() const { return mySpaceDim; }
+
+    EMaillage myType; //!< Type of the mesh
+    EMaillage GetType() const { return myType; } //!< Gets type of the mesh
+
+    TString myDesc; //!< Description of the mesh
+    virtual std::string GetDesc() const = 0; //!< Get description for the mesh
+    virtual void SetDesc(const std::string& theValue) = 0; //!< Sets description for the mesh
+  };
+
+  //---------------------------------------------------------------
+  typedef TSlice<TInt> TIntVecSlice;
+  typedef TCSlice<TInt> TCIntVecSlice;
+  typedef TIntVector TFamAttr;
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED Family entity
+  struct MEDWRAPPER_EXPORT TFamilyInfo: virtual TNameInfo
+  {
+    PMeshInfo myMeshInfo; //!< A reference to correspondig MED Mesh
+    //! Get a reference to corresponding MED Mesh
+    const PMeshInfo& GetMeshInfo() const { return myMeshInfo; }
+
+    TInt myId; //!< An unique index of the MED FAMILY
+    TInt GetId() const { return myId; } //!< Gets number of the MED FAMILY
+    void SetId(TInt theId) { myId = theId; } //! Define number of the MED FAMILY
+
+    TInt myNbGroup; //!< Defines number MED Groups connected to
+    //! Gets number of MED GROUPS the MED FAMILY is bound to
+    TInt GetNbGroup() const { return myNbGroup; }
+
+    //! Contains sequence of the names for the MED Groups connected to
+    TString myGroupNames;
+    //! Gets name of a bound MED GROUP by its number
+    virtual std::string GetGroupName(TInt theId) const = 0;
+    //! Sets name of the defined MED GROUP by its number
+    virtual void SetGroupName(TInt theId, const std::string& theValue) = 0;
+
+    TInt myNbAttr; //!< Defines number of the MED Family attributes
+    //! Gets number of attached attributes for the MED FAMILY
+    TInt GetNbAttr() const { return myNbAttr; }
+
+    //! Defines sequence of the indexes of the MED Family attributes
+    TFamAttr myAttrId;
+    //! Get MED FAMILY attribute by its number
+    TInt GetAttrId(TInt theId) const;
+    //! Set MED FAMILY attribute by its number
+    void SetAttrId(TInt theId, TInt theVal);
+
+    //! Defines sequence of the values of the MED Family attributes
+    TFamAttr myAttrVal;
+    //! Get MED FAMILY attribute by its number
+    TInt GetAttrVal(TInt theId) const;
+    //! Set MED FAMILY attribute by its number
+    void SetAttrVal(TInt theId, TInt theVal);
+
+    //! Defines sequence of the names of the MED Family attributes
+    TString myAttrDesc;
+    //! Get value of the MED FAMILY attribute by its number
+    virtual std::string GetAttrDesc(TInt theId) const = 0;
+    //! Set value of the MED FAMILY attribute by its number
+    virtual void SetAttrDesc(TInt theId, const std::string& theValue) = 0;
+  };
+
+  //---------------------------------------------------------------
+  typedef TIntVector TElemNum;
+  typedef SharedPtr<TElemNum> PElemNum;
+
+  //---------------------------------------------------------------
+  //! Define a parent class for all MED entities that describes mesh entities such as nodes and cells.
+  struct MEDWRAPPER_EXPORT TElemInfo: virtual TBase
+  {
+    PMeshInfo myMeshInfo; //!< A reference to correspondig MED Mesh
+    //! Get a reference to corresponding MED Mesh
+    const PMeshInfo& GetMeshInfo() const { return myMeshInfo; }
+
+    TInt myNbElem; //<! Number of corresponding mesh entities
+    TInt GetNbElem() const { return myNbElem; } //! Get number of mesh elements
+
+    //! Defines sequence MED Family indexes for corresponding mesh entites
+    PElemNum myFamNum;
+    //! Get number of a MED FAMILY by order number of the mesh element
+    TInt GetFamNum(TInt theId) const;
+    //! Set number of a MED FAMILY for the mesh element with the order number
+    void SetFamNum(TInt theId, TInt theVal);
+
+    //! Defines if the mesh elements are indexed
+    EBooleen myIsElemNum;
+    //! Let know if the mesh elements are indexed
+    EBooleen IsElemNum() const { return myIsElemNum; }
+
+    //! Defines if the mesh elements family are indexed
+    EBooleen myIsFamNum;
+    //! Let know if the mesh elements family are indexed
+    EBooleen IsFamNum() const { return myIsFamNum; }
+
+    //! Contains sequence of the indexes for the mesh elements
+    PElemNum myElemNum;
+    //! Get a reference number of the mesh element by its order number
+    TInt GetElemNum(TInt theId) const;
+    //! Set a reference number for the mesh element by its order number
+    void SetElemNum(TInt theId, TInt theVal);
+
+    //! Defines if the mesh elements are named
+    EBooleen myIsElemNames;
+    //! Let know if the mesh elements have names
+    EBooleen IsElemNames() const { return myIsElemNames; }
+
+    //! Contains sequence of the names for the mesh elements
+    PString myElemNames;
+    //! Get name of the mesh element by its order number
+    virtual std::string GetElemName(TInt theId) const = 0;
+    //! Set name of the mesh element by its order number
+    virtual void SetElemName(TInt theId, const std::string& theValue) = 0;
+  };
+
+  //---------------------------------------------------------------
+  typedef TSlice<TFloat> TFloatVecSlice;
+  typedef TCSlice<TFloat> TCFloatVecSlice;
+  typedef TFloatVector TNodeCoord;
+  typedef SharedPtr<TNodeCoord> PNodeCoord;
+  typedef TFloatVecSlice TCoordSlice;
+  typedef TCFloatVecSlice TCCoordSlice;
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED Nodes entity
+  struct MEDWRAPPER_EXPORT TNodeInfo:
+    virtual TElemInfo,
+    virtual TModeSwitchInfo
+  {
+    PNodeCoord myCoord; //!< Contains all nodal coordinates
+
+    //! Gives coordinates for mesh node by its number (const version)
+    TCCoordSlice GetCoordSlice(TInt theId) const;
+    //! Gives coordinates for mesh node by its number
+    TCoordSlice GetCoordSlice(TInt theId);
+
+    ERepere mySystem; //!< Defines, which coordinate system is used
+    //! Get which coordinate system is used for the node describing
+    ERepere GetSystem() const { return mySystem; }
+    //! Set coordinate system to be used for the node describing
+    void SetSystem(ERepere theSystem) { mySystem = theSystem; }
+
+    TString myCoordNames; //!< Contains names for the coordinate dimensions
+    //! Get name of the coordinate dimension by its order number
+    virtual std::string GetCoordName(TInt theId) const = 0;
+    //! Set name of the coordinate dimension by its order number
+    virtual void SetCoordName(TInt theId, const std::string& theValue) = 0;
+
+    TString myCoordUnits; //!< Contains units for the coordinate dimensions
+    //! Get name of unit for the coordinate dimension by its order number
+    virtual std::string GetCoordUnit(TInt theId) const = 0;
+    //! Set name of unit for the coordinate dimension by its order number
+    virtual void SetCoordUnit(TInt theId, const std::string& theValue) = 0;
+  };
+
+  //---------------------------------------------------------------
+  typedef TIntVecSlice TConnSlice;
+  typedef TCIntVecSlice TCConnSlice;
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED Cells entity
+  struct MEDWRAPPER_EXPORT TCellInfo:
+    virtual TElemInfo,
+    virtual TModeSwitchInfo
+  {
+    EEntiteMaillage myEntity; //!< Defines the MED Entity where the mesh cells belongs to
+    //! Find out what MED ENTITY the cells belong to
+    EEntiteMaillage GetEntity() const { return myEntity; }
+
+    EGeometrieElement myGeom; //!< Defines the MED Geometric type of the instance
+    //! Find out what MED geometrical type the cells belong to
+    EGeometrieElement GetGeom() const { return myGeom; }
+
+    EConnectivite myConnMode; //!< Defines connectivity mode
+    //! Find out in what connectivity the cells are writen
+    EConnectivite GetConnMode() const { return myConnMode; }
+
+    virtual TInt GetConnDim() const = 0; //!< Gives step in the connectivity sequence
+
+    PElemNum myConn; //!< Defines sequence which describe connectivity for each of mesh cell
+
+    //! Gives connectivities for mesh cell by its number (const version)
+    TCConnSlice GetConnSlice(TInt theElemId) const;
+    //! Gives connectivities for mesh cell by its number
+    TConnSlice GetConnSlice(TInt theElemId);
+  };
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED Polygon entity
+  struct MEDWRAPPER_EXPORT TPolygoneInfo:
+    virtual TElemInfo
+  {
+    //! Defines the MED Entity where the polygons belongs to
+    EEntiteMaillage myEntity; // MED_FACE|MED_MAILLE
+    //! Find out what MED ENTITY the MED Polygons belong to
+    EEntiteMaillage GetEntity() const { return myEntity; }
+
+    //! Defines the MED Geometric type of the instance
+    EGeometrieElement myGeom; // ePOLYGONE
+    //! Find out what MED geometrical type the MED Polygons belong to
+    EGeometrieElement GetGeom() const { return ePOLYGONE; }
+
+    //! Defines connectivity mode
+    EConnectivite myConnMode; // eNOD|eDESC(eDESC not used)
+    //! Find out in what connectivity the cells are writen
+    EConnectivite GetConnMode() const { return myConnMode; }
+
+    PElemNum myConn; //!< Table de connectivities
+    PElemNum myIndex; //!< Table de indexes
+
+    //! Gives number of the connectivities for the defined polygon
+    TInt GetNbConn(TInt theElemId) const;
+
+    //! Gives connectivities for polygon by its number (const version)
+    TCConnSlice GetConnSlice(TInt theElemId) const;
+    //! Gives connectivities for polygon by its number
+    TConnSlice GetConnSlice(TInt theElemId);
+  };
+
+  //---------------------------------------------------------------
+  //! Define a class representing MED_BALL structure element.
+  /*!
+    This could be a generic class for any structure element
+    holding any number of contant and variable attributes
+    but it's too hard to implement
+  */
+  struct MEDWRAPPER_EXPORT TBallInfo:
+    virtual TCellInfo
+  {
+    TFloatVector myDiameters;
+  };
+
+  //---------------------------------------------------------------
+  typedef TVector<TCConnSlice> TCConnSliceArr;
+  typedef TVector<TConnSlice> TConnSliceArr;
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED Polyedre entity
+  struct MEDWRAPPER_EXPORT TPolyedreInfo:
+    virtual TElemInfo
+  {
+    //! Defines the MED Entity where the polyedres belongs to
+    EEntiteMaillage myEntity; // MED_FACE|MED_MAILLE
+    //! Find out what MED ENTITY the MED Polyedres belong to
+    EEntiteMaillage GetEntity() const { return myEntity; }
+
+    //! Defines the MED Geometric type of the instance
+    EGeometrieElement myGeom; // ePOLYEDRE
+    //! Find out what MED geometrical type the MED Polyedres belong to
+    EGeometrieElement GetGeom() const { return ePOLYEDRE; }
+
+    //! Defines connectivity mode
+    EConnectivite myConnMode; // eNOD|eDESC(eDESC not used)
+    //! Find out in what connectivity the cells are writen
+    EConnectivite GetConnMode() const { return myConnMode; }
+
+    PElemNum myConn; //!< Table de connectivities
+    PElemNum myFaces; //!< Table de faces indexes
+    PElemNum myIndex; //!< Table de indexes
+
+    //! Gives number of the faces for the defined polyedre (const version)
+    TInt GetNbFaces(TInt theElemId) const;
+    //! Gives number of the nodes for the defined polyedre
+    TInt GetNbNodes(TInt theElemId) const;
+
+    //! Gives sequence of the face connectivities for polyedre by its number (const version)
+    TCConnSliceArr GetConnSliceArr(TInt theElemId) const;
+    //! Gives sequence of the face connectivities for polyedre by its number
+    TConnSliceArr GetConnSliceArr(TInt theElemId);
+  };
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED Field entity
+  struct MEDWRAPPER_EXPORT TFieldInfo:
+    virtual TNameInfo
+  {
+    PMeshInfo myMeshInfo; //!< A reference to corresponding MED Mesh
+    //! Get a reference to corresponding MED Mesh
+    const PMeshInfo& GetMeshInfo() const { return myMeshInfo; }
+
+    ETypeChamp myType; //!< Defines type of MED Field
+    //! Find out what type of MED FIELD is used
+    ETypeChamp GetType() const { return myType; }
+
+    TInt myNbComp; //!< Defines number of components stored in the field
+    //! Get number of components for MED FIELD
+    TInt GetNbComp() const { return myNbComp; }
+
+    EBooleen myIsLocal; //!< Defines if the MED Field is local
+    //! Find out if MED FIELD is local or not
+    EBooleen GetIsLocal() const { return myIsLocal; }
+
+    TInt myNbRef; //!< Defines number of references of the field
+    //! Find out number of references for the MED FIELD
+    TInt GetNbRef() const { return myNbRef; }
+
+    TString myCompNames; //!< Contains names for each of MED Field components
+    //! Get name of the component by its order number
+    virtual std::string GetCompName(TInt theId) const = 0;
+    //! Set name for the component by its order number
+    virtual void SetCompName(TInt theId, const std::string& theValue) = 0;
+
+    TString myUnitNames; //!< Contains units for each of MED Field components
+    //! Get unit of the component by its order number
+    virtual std::string GetUnitName(TInt theId) const = 0;
+    //! Set unit for the component by its order number
+    virtual void SetUnitName(TInt theId, const std::string& theValue) = 0;
+  };
+
+  //---------------------------------------------------------------
+  //! Get dimension of the Gauss coordinates for the defined type of mesh cell
+  MEDWRAPPER_EXPORT
+  TInt
+  GetDimGaussCoord(EGeometrieElement theGeom);
+
+  //---------------------------------------------------------------
+  //! Get number of referenced nodes for the defined type of mesh cell
+  MEDWRAPPER_EXPORT
+  TInt
+  GetNbRefCoord(EGeometrieElement theGeom);
+
+  //---------------------------------------------------------------
+  typedef TFloatVector TWeight;
+
+  //---------------------------------------------------------------
+  //! The class represents MED Gauss entity
+  struct MEDWRAPPER_EXPORT TGaussInfo:
+    virtual TNameInfo,
+    virtual TModeSwitchInfo
+  {
+    typedef boost::tuple<EGeometrieElement,std::string> TKey;
+    typedef boost::tuple<TKey,TInt> TInfo;
+    struct MEDWRAPPER_EXPORT TLess
+    {
+      bool
+      operator()(const TKey& theLeft, const TKey& theRight) const;
+
+      bool
+      operator()(const TGaussInfo& theLeft, const TGaussInfo& theRight) const;
+    };
+
+    //! Defines, which geometrical type the MED Gauss entity belongs to
+    EGeometrieElement myGeom;
+    //! Find out what MED geometrical type the MED GAUSS entity belong to
+    EGeometrieElement GetGeom() const { return myGeom; }
+
+    //! Contains coordinates for the refereced nodes
+    TNodeCoord myRefCoord;
+
+    //! Gives coordinates for the referenced node by its number
+    TCCoordSlice GetRefCoordSlice(TInt theId) const;
+    //! Gives coordinates for the referenced node by its number
+    TCoordSlice GetRefCoordSlice(TInt theId);
+
+    //! Contains coordinates for the Gauss points
+    TNodeCoord myGaussCoord;
+
+    //! Gives coordinates for the Gauss points by its number
+    TCCoordSlice GetGaussCoordSlice(TInt theId) const;
+    //! Gives coordinates for the Gauss points by its number
+    TCoordSlice GetGaussCoordSlice(TInt theId);
+
+    //! Contains wheights for the Gauss points
+    TWeight myWeight;
+
+    //! Gives number of the referenced nodes
+    TInt GetNbRef() const { return GetNbRefCoord(GetGeom()); }
+
+    //! Gives dimension of the referenced nodes
+    TInt GetDim() const { return GetDimGaussCoord(GetGeom()); }
+
+    //! Gives number of the Gauss Points
+    TInt GetNbGauss() const { return (TInt)(myGaussCoord.size() / GetDim()); }
+  };
+
+  //---------------------------------------------------------------
+  typedef std::map<EGeometrieElement,PGaussInfo> TGeom2Gauss;
+  typedef std::map<EGeometrieElement,TInt> TGeom2NbGauss;
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED TimeStamp
+  struct MEDWRAPPER_EXPORT TTimeStampInfo:
+    virtual TBase
+  {
+    PFieldInfo myFieldInfo; //!< A reference to correspondig MED Field
+    //! Get a reference to corresponding MED Field
+    const PFieldInfo& GetFieldInfo() const { return myFieldInfo; }
+
+    //! Defines the MED Entity where the MED TimeStamp belongs to
+    EEntiteMaillage myEntity;
+    //! Find out to what MED Entity the MED TimeStamp belong to
+    EEntiteMaillage GetEntity() const { return myEntity; }
+
+    //! Keeps map of number of cells per geometric type where the MED TimeStamp belongs to
+    TGeom2Size myGeom2Size;
+    //! Get map of number of cells per geometric type where the MED TimeStamp belongs to
+    const TGeom2Size& GetGeom2Size() const { return myGeom2Size; }
+
+    TGeom2NbGauss myGeom2NbGauss; //!< Keeps number of the Gauss Points for the MED TimeStamp
+    TInt GetNbGauss(EGeometrieElement theGeom) const; //!< Gives number of the Gauss Points for the MED TimeStamp
+
+    TInt myNumDt; //!< Keeps number in time for the MED TimeStamp
+    TInt GetNumDt() const { return myNumDt; } //!< Defines number in time for the MED TimeStamp
+
+    TInt myNumOrd; //!< Keeps number for the MED TimeStamp
+    TInt GetNumOrd() const { return myNumOrd; } //!< Defines number for the MED TimeStamp
+
+    TFloat myDt; //!< Keeps time for the MED TimeStamp
+    TFloat GetDt() const { return myDt; } //!< Defines time for the MED TimeStamp
+
+    //! Keeps map of MED Gauss entityes per geometric type
+    TGeom2Gauss myGeom2Gauss;
+    //! Gets a map of MED Gauss entityes per geometric type
+    const TGeom2Gauss& GetGeom2Gauss() const { return myGeom2Gauss; }
+
+    TString myUnitDt; //!< Defines unit for the time for the MED TimeStamp
+    //! Get unit of time for the MED TimeStamp
+    virtual std::string GetUnitDt() const = 0;
+    //! Set unit of time for the MED TimeStamp
+    virtual void SetUnitDt(const std::string& theValue) = 0;
+  };
+
+  //---------------------------------------------------------------
+  //! The class represents MED Profile entity
+  struct MEDWRAPPER_EXPORT TProfileInfo:
+    virtual TNameInfo
+  {
+    typedef std::string TKey;
+    typedef boost::tuple<TKey,TInt> TInfo;
+
+    EModeProfil myMode; //!< Keeps mode for the MED Profile
+    //! Find out what mode of MED Profile is used
+    EModeProfil GetMode() const { return myMode; }
+    //! Set mode for the MED Profile
+    void SetMode(EModeProfil theMode) { myMode = theMode; }
+
+    PElemNum myElemNum; //!< Keeps sequence of cell by its number which belong to the profile
+    //! Get number of mesh elelemts by its order number
+    TInt GetElemNum(TInt theId) const;
+    //! Set number of mesh elelemts by its order number
+    void SetElemNum(TInt theId, TInt theVal);
+
+    //! Find out if the MED Profile defined
+    bool IsPresent() const { return GetName() != ""; }
+
+    //! Find out size of the MED Profile
+    TInt GetSize() const { return (TInt)myElemNum->size(); }
+  };
+
+  //---------------------------------------------------------------
+  //! The class is a helper one. It provide safe and flexible way to get access to values for a MED TimeStamp
+  struct MEDWRAPPER_EXPORT TMeshValueBase:
+    virtual TModeSwitchInfo
+  {
+    TInt myNbElem;
+    TInt myNbComp;
+    TInt myNbGauss;
+    TInt myStep;
+
+    TMeshValueBase();
+
+    //! Initialize the class
+    void
+    Allocate(TInt theNbElem,
+             TInt theNbGauss,
+             TInt theNbComp,
+             EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! Returns size of the value container
+    size_t
+    GetSize() const;
+
+    //! Returns MED interpetation of the value size
+    size_t
+    GetNbVal() const;
+
+    //! Returns number of Gauss Points bounded with the value
+    size_t
+    GetNbGauss() const;
+
+    //! Returns step inside of the data array
+    size_t
+    GetStep() const;
+
+    //! Returns bare pointer on the internal value representation
+    virtual
+    unsigned char*
+    GetValuePtr() = 0;
+  };
+
+  //---------------------------------------------------------------
+  //! The class is a helper one. It provide safe and flexible way to get access to values for a MED TimeStamp
+  template<class TValueType>
+  struct TTMeshValue:
+    virtual TMeshValueBase
+  {
+    typedef TValueType TValue;
+    typedef typename TValueType::value_type TElement;
+
+    typedef TSlice<TElement> TValueSlice;
+    typedef TCSlice<TElement> TCValueSlice;
+
+    typedef TVector<TCValueSlice> TCValueSliceArr;
+    typedef TVector<TValueSlice> TValueSliceArr;
+
+    TValue myValue;
+
+    //! Initialize the class
+    void
+    Allocate(TInt theNbElem,
+             TInt theNbGauss,
+             TInt theNbComp,
+             EModeSwitch theMode = eFULL_INTERLACE)
+    {
+      TMeshValueBase::Allocate(theNbElem, theNbGauss, theNbComp, theMode);
+      myValue.resize(theNbElem * this->GetStep());
+    }
+
+    //! Returns bare pointer on the internal value representation
+    virtual
+    unsigned char*
+    GetValuePtr()
+    {
+      return (unsigned char*)&myValue[0];
+    }
+
+    //! Returns bare pointer on the internal value representation
+    virtual
+    TElement*
+    GetPointer()
+    {
+      return &myValue[0];
+    }
+
+    //! Returns bare pointer on the internal value representation
+    virtual
+    const TElement*
+    GetPointer() const
+    {
+      return &myValue[0];
+    }
+
+    //! Iteration through Gauss Points by their components
+    TCValueSliceArr
+    GetGaussValueSliceArr(TInt theElemId) const
+    {
+      TCValueSliceArr aValueSliceArr(myNbGauss);
+      if(GetModeSwitch() == eFULL_INTERLACE){
+        TInt anId = theElemId * myStep;
+        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
+          aValueSliceArr[aGaussId] =
+            TCValueSlice(myValue, std::slice(anId, myNbComp, 1));
+          anId += myNbComp;
+        }
+      }
+      else{
+        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
+          aValueSliceArr[aGaussId] =
+            TCValueSlice(myValue, std::slice(theElemId, myNbComp, myStep));
+        }
+      }
+      return aValueSliceArr;
+    }
+
+    //! Iteration through Gauss Points by their components
+    TValueSliceArr
+    GetGaussValueSliceArr(TInt theElemId)
+    {
+      TValueSliceArr aValueSliceArr(myNbGauss);
+      if(GetModeSwitch() == eFULL_INTERLACE){
+        TInt anId = theElemId*myStep;
+        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
+          aValueSliceArr[aGaussId] =
+            TValueSlice(myValue, std::slice(anId, myNbComp, 1));
+          anId += myNbComp;
+        }
+      }
+      else{
+        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
+          aValueSliceArr[aGaussId] =
+            TValueSlice(myValue, std::slice(theElemId, myNbComp, myStep));
+        }
+      }
+      return aValueSliceArr;
+    }
+
+    //! Iteration through components by corresponding Gauss Points
+    TCValueSliceArr
+    GetCompValueSliceArr(TInt theElemId) const
+    {
+      TCValueSliceArr aValueSliceArr(myNbComp);
+      if(GetModeSwitch() == eFULL_INTERLACE){
+        TInt anId = theElemId*myStep;
+        for(TInt aCompId = 0; aCompId < myNbComp; aCompId++){
+          aValueSliceArr[aCompId] =
+            TCValueSlice(myValue, std::slice(anId, myNbGauss, myNbComp));
+          anId += 1;
+        }
+      }
+      else{
+        for(TInt aCompId = 0; aCompId < myNbComp; aCompId++){
+          aValueSliceArr[aCompId] =
+            TCValueSlice(myValue, std::slice(theElemId, myNbGauss, myStep));
+        }
+      }
+      return aValueSliceArr;
+    }
+
+    //! Iteration through components by corresponding Gauss Points
+    TValueSliceArr
+    GetCompValueSliceArr(TInt theElemId)
+    {
+      if(GetModeSwitch() == eFULL_INTERLACE){
+        TValueSliceArr aValueSliceArr(myNbComp);
+        TInt anId = theElemId*myStep;
+        for(TInt aCompId = 0; aCompId < myNbComp; aCompId++){
+          aValueSliceArr[aCompId] =
+            TValueSlice(myValue, std::slice(anId, myNbGauss, myNbComp));
+          anId += 1;
+        }
+        return aValueSliceArr;
+      }
+      else{
+        TValueSliceArr aValueSliceArr(myNbGauss);
+        for(TInt aGaussId = 0; aGaussId < myNbGauss; aGaussId++){
+          aValueSliceArr[aGaussId] =
+            TValueSlice(myValue,std::slice(theElemId, myNbComp, myStep));
+        }
+        return aValueSliceArr;
+      }
+    }
+  };
+
+  //---------------------------------------------------------------
+  typedef TTMeshValue<TFloatVector> TFloatMeshValue;
+  typedef TTMeshValue<TIntVector> TIntMeshValue;
+
+  //---------------------------------------------------------------
+  // Backward compatibility declarations
+  typedef TFloatVector TValue;
+  typedef TSlice<TFloat> TValueSlice;
+  typedef TCSlice<TFloat> TCValueSlice;
+
+  typedef TVector<TCValueSlice> TCValueSliceArr;
+  typedef TVector<TValueSlice> TValueSliceArr;
+
+  typedef TFloatMeshValue TMeshValue;
+  typedef std::map<EGeometrieElement,TMeshValue> TGeom2Value;
+
+  //---------------------------------------------------------------
+  typedef std::map<EGeometrieElement,PProfileInfo> TGeom2Profile;
+  typedef std::set<EGeometrieElement> TGeom;
+
+  //---------------------------------------------------------------
+  //! The class is a base class for MED TimeStamp values holder
+  struct MEDWRAPPER_EXPORT TTimeStampValueBase:
+    virtual TModeSwitchInfo
+  {
+    //! A reference to correspondig MED TimeStamp
+    PTimeStampInfo myTimeStampInfo;
+    //!< Get a reference to correspondig MED TimeStamp
+    const PTimeStampInfo& GetTimeStampInfo() const { return myTimeStampInfo; }
+
+    //! Keeps set of MED EGeometrieElement which contains values for the timestamp
+    TGeomSet myGeomSet;
+    const TGeomSet& GetGeomSet() const { return myGeomSet; }
+
+    //! Keeps map of MED Profiles per geometric type
+    TGeom2Profile myGeom2Profile;
+    //! Gets a map of MED Profiles per geometric type
+    const TGeom2Profile& GetGeom2Profile() const { return myGeom2Profile; }
+
+    //! Gets type of the champ
+    virtual
+    ETypeChamp
+    GetTypeChamp() const = 0;
+
+    //! Allocates values for the given geometry
+    virtual
+    void
+    AllocateValue(EGeometrieElement theGeom,
+                  TInt theNbElem,
+                  TInt theNbGauss,
+                  TInt theNbComp,
+                  EModeSwitch theMode = eFULL_INTERLACE) = 0;
+
+    virtual
+    size_t
+    GetValueSize(EGeometrieElement theGeom) const = 0;
+
+    virtual
+    size_t
+    GetNbVal(EGeometrieElement theGeom) const = 0;
+
+    virtual
+    size_t
+    GetNbGauss(EGeometrieElement theGeom) const = 0;
+
+    virtual
+    unsigned char*
+    GetValuePtr(EGeometrieElement theGeom) = 0;
+  };
+
+  //---------------------------------------------------------------
+  //! The class implements a container for MED TimeStamp values
+  template<class TMeshValueType>
+  struct TTimeStampValue:
+    virtual TTimeStampValueBase
+  {
+    typedef TMeshValueType TTMeshValue;
+    typedef SharedPtr<TMeshValueType> PTMeshValue;
+    typedef typename TMeshValueType::TElement TElement;
+    typedef std::map<EGeometrieElement, PTMeshValue> TTGeom2Value;
+
+    ETypeChamp myTypeChamp; //<! Keeps type of the champ
+
+    //! Gets type of the champ
+    virtual
+    ETypeChamp
+    GetTypeChamp() const
+    {
+      return myTypeChamp;
+    }
+
+    //! Keeps map of MED TimeStamp values per geometric type (const version)
+    TTGeom2Value myGeom2Value;
+
+    const TTGeom2Value&
+    GetGeom2Value() const
+    {
+      return myGeom2Value;
+    }
+
+    //! Gets MED TimeStamp values for the given geometric type (const version)
+    const PTMeshValue&
+    GetMeshValuePtr(EGeometrieElement theGeom) const
+    {
+      typename TTGeom2Value::const_iterator anIter = myGeom2Value.find(theGeom);
+      if(anIter == myGeom2Value.end())
+        EXCEPTION(std::runtime_error,"TTimeStampValue::GetMeshValuePtr - myGeom2Value.find(theGeom) fails");
+      return anIter->second;
+    }
+
+    //! Gets MED TimeStamp values for the given geometric type
+    PTMeshValue&
+    GetMeshValuePtr(EGeometrieElement theGeom)
+    {
+      myGeomSet.insert(theGeom);
+      if(myGeom2Value.find(theGeom) == myGeom2Value.end()){
+        myGeom2Value[theGeom] = PTMeshValue(new TTMeshValue());
+        return myGeom2Value[theGeom];
+      }
+      return myGeom2Value[theGeom];
+    }
+
+    //! Gets MED TimeStamp values for the given geometric type (const version)
+    const TTMeshValue&
+    GetMeshValue(EGeometrieElement theGeom) const
+    {
+      return *(this->GetMeshValuePtr(theGeom));
+    }
+
+    //! Gets MED TimeStamp values for the given geometric type
+    TTMeshValue&
+    GetMeshValue(EGeometrieElement theGeom)
+    {
+      return *(this->GetMeshValuePtr(theGeom));
+    }
+  };
+
+  //---------------------------------------------------------------
+  typedef TTimeStampValue<TFloatMeshValue> TFloatTimeStampValue;
+  typedef SharedPtr<TFloatTimeStampValue> PFloatTimeStampValue;
+
+  PFloatTimeStampValue MEDWRAPPER_EXPORT
+  CastToFloatTimeStampValue(const PTimeStampValueBase& theTimeStampValue);
+
+  typedef TTimeStampValue<TIntMeshValue> TIntTimeStampValue;
+  typedef SharedPtr<TIntTimeStampValue> PIntTimeStampValue;
+
+  PIntTimeStampValue MEDWRAPPER_EXPORT
+  CastToIntTimeStampValue(const PTimeStampValueBase& theTimeStampValue);
+
+  //---------------------------------------------------------------
+  template<class TMeshValueTypeFrom, class TMeshValueTypeTo>
+  void
+  CopyTimeStampValue(SharedPtr<TTimeStampValue<TMeshValueTypeFrom> > theTimeStampValueFrom,
+                     SharedPtr<TTimeStampValue<TMeshValueTypeTo> > theTimeStampValueTo)
+  {
+    typedef TTimeStampValue<TMeshValueTypeFrom> TimeStampValueTypeFrom;
+    typedef TTimeStampValue<TMeshValueTypeTo> TimeStampValueTypeTo;
+    typedef typename TMeshValueTypeTo::TElement TElementTo;
+
+    typename TimeStampValueTypeFrom::TTGeom2Value& aGeom2Value = theTimeStampValueFrom->myGeom2Value;
+    typename TimeStampValueTypeFrom::TTGeom2Value::const_iterator anIter = aGeom2Value.begin();
+    for(; anIter != aGeom2Value.end(); anIter++){
+      const EGeometrieElement& aGeom = anIter->first;
+      const typename TimeStampValueTypeFrom::TTMeshValue& aMeshValue = *anIter->second;
+      typename TimeStampValueTypeTo::TTMeshValue& aMeshValue2 = theTimeStampValueTo->GetMeshValue(aGeom);
+      aMeshValue2.Allocate(aMeshValue.myNbElem,
+                           aMeshValue.myNbGauss,
+                           aMeshValue.myNbComp,
+                           aMeshValue.myModeSwitch);
+      const typename TimeStampValueTypeFrom::TTMeshValue::TValue& aValue = aMeshValue.myValue;
+      typename TimeStampValueTypeTo::TTMeshValue::TValue& aValue2 = aMeshValue2.myValue;
+      TInt aSize = aValue.size();
+      for(TInt anId = 0; anId < aSize; anId++)
+        aValue2[anId] = TElementTo(aValue[anId]);
+    }
+  }
+
+  //---------------------------------------------------------------
+  template<class TMeshValueType>
+  void
+  CopyTimeStampValue(SharedPtr<TTimeStampValue<TMeshValueType> > theTimeStampValueFrom,
+                     SharedPtr<TTimeStampValue<TMeshValueType> > theTimeStampValueTo)
+  {
+    typedef TTimeStampValue<TMeshValueType> TimeStampValueType;
+    typename TimeStampValueType::TTGeom2Value& aGeom2Value = theTimeStampValueFrom->myGeom2Value;
+    typename TimeStampValueType::TTGeom2Value::const_iterator anIter = aGeom2Value.begin();
+    for(; anIter != aGeom2Value.end(); anIter++){
+      const EGeometrieElement& aGeom = anIter->first;
+      const typename TimeStampValueType::TTMeshValue& aMeshValue = *anIter->second;
+      typename TimeStampValueType::TTMeshValue& aMeshValue2 = theTimeStampValueTo->GetMeshValue(aGeom);
+      aMeshValue2 = aMeshValue;
+    }
+  }
+
+  //---------------------------------------------------------------
+  inline
+  void
+  CopyTimeStampValueBase(const PTimeStampValueBase& theValueFrom,
+                         const PTimeStampValueBase& theValueTo)
+  {
+    if(theValueFrom->GetTypeChamp() == theValueTo->GetTypeChamp()){
+      if(theValueFrom->GetTypeChamp() == eFLOAT64)
+        CopyTimeStampValue<TFloatMeshValue>(theValueFrom, theValueTo);
+      else if(theValueFrom->GetTypeChamp() == eINT)
+        CopyTimeStampValue<TIntMeshValue>(theValueFrom, theValueTo);
+    }else{
+      if(theValueFrom->GetTypeChamp() == eFLOAT64 && theValueTo->GetTypeChamp() == eINT)
+        CopyTimeStampValue<TFloatMeshValue, TIntMeshValue>(theValueFrom, theValueTo);
+      else if(theValueFrom->GetTypeChamp() == eINT && theValueTo->GetTypeChamp() == eFLOAT64)
+        CopyTimeStampValue<TIntMeshValue, TFloatMeshValue>(theValueFrom, theValueTo);
+    }
+  }
+
+  //---------------------------------------------------------------
+  // Backward compatibility declarations
+  typedef TFloatTimeStampValue TTimeStampVal;
+  typedef PFloatTimeStampValue PTimeStampVal;
+
+  //---------------------------------------------------------------
+  typedef std::map<TInt,TFloatVector> TIndexes;
+  typedef std::map<TInt,TString> TNames;
+
+  //---------------------------------------------------------------
+  //! Define a base class which represents MED Grille (structured mesh)
+  struct MEDWRAPPER_EXPORT TGrilleInfo:
+    virtual TModeSwitchInfo
+  {
+    PMeshInfo myMeshInfo;
+    const PMeshInfo& GetMeshInfo() const { return myMeshInfo; }
+
+    TNodeCoord myCoord; //!< Contains all nodal coordinates, now used only for eGRILLE_STANDARD
+    //! Gives coordinates for mesh nodes (const version)
+    const TNodeCoord& GetNodeCoord() const;
+    TNodeCoord& GetNodeCoord();
+    //! Gives coordinates for mesh node by its number, array index from 0
+    TNodeCoord GetCoord(TInt theId);
+    //! Gives ids of nodes for mesh cell or sub-cell by its number, array index from 0
+    TIntVector GetConn(TInt theId, const bool isSub=false);
+
+    EGrilleType myGrilleType; //!< Defines grille type (eGRILLE_CARTESIENNE,eGRILLE_POLAIRE,eGRILLE_STANDARD)
+    //!Gets grille type (const version)
+    const EGrilleType& GetGrilleType() const;
+    //!Gets grille type
+    EGrilleType GetGrilleType();
+    //!Sets grille type
+    void SetGrilleType(EGrilleType theGrilleType);
+
+    TString myCoordNames; //!< Contains names for the coordinate dimensions
+    //! Get name of the coordinate dimension by its order number
+    virtual std::string GetCoordName(TInt theId) const = 0 ;
+    //! Set name of the coordinate dimension by its order number
+    virtual void SetCoordName(TInt theId, const std::string& theValue) = 0;
+
+    TString myCoordUnits; //!< Contains units for the coordinate dimensions
+    //! Get name of unit for the coordinate dimension by its order number
+    virtual std::string GetCoordUnit(TInt theId) const = 0;
+    //! Set name of unit for the coordinate dimension by its order number
+    virtual void SetCoordUnit(TInt theId, const std::string& theValue) = 0;
+
+    //! Map of index of axes and Table of indexes for certain axe, now used for eGRILLE_CARTESIENNE and eGRILLE_POLAIRE
+    TIndexes myIndixes;
+    //!Gets a map of Tables (const version)
+    const TIndexes& GetMapOfIndexes() const ;
+    //!Gets a map of Tables
+    TIndexes& GetMapOfIndexes();
+    //!Gets a Table of indexes for certain axe(const version)
+    const TFloatVector& GetIndexes(TInt theAxisNumber) const;
+    //!Gets a Table of indexes for certain axe
+    TFloatVector& GetIndexes(TInt theAxisNumber);
+    //!Gets a number of indices per axe
+    TInt GetNbIndexes(TInt theAxisNumber);
+
+    TInt GetNbNodes();//! Return count of all points
+    TInt GetNbCells();//! Return count of all cells
+    TInt GetNbSubCells();//! Return count of all entities of <mesh dimension-1>
+    EGeometrieElement GetGeom();//! Return geometry of cells (calculated from mesh dimension)
+    EGeometrieElement GetSubGeom();//! Return geometry of subcells (calculated from mesh dimension)
+    EEntiteMaillage GetEntity();//! Return entity (eMAILLE)
+    EEntiteMaillage GetSubEntity();//! Return sub entity
+
+    /*!
+     *Vector of grille structure (Example: {3,4,5}, 3 nodes in X axe, 4 nodes in Y axe, ...)
+     */
+    TIntVector myGrilleStructure;
+    //!Gets grille structure(const version)
+    const TIntVector& GetGrilleStructure() const;
+    //!Gets grille structure
+    TIntVector GetGrilleStructure();
+    //!Sets the grille structure of theAxis axe to theNb.
+    void SetGrilleStructure(TInt theAxis,TInt theNb);
+
+    /*!
+     *Defines sequence MED Family indexes for corresponding mesh entities
+     */
+    TElemNum myFamNum;
+    //! Get number of a MED FAMILY by order number of the mesh element
+    TInt GetFamNum(TInt theId) const;
+    //! Set number of a MED FAMILY for the mesh element with the order number
+    void SetFamNum(TInt theId, TInt theVal);
+
+    /*!
+     *Defines sequence MED Family indexes for sub entities
+     */
+    TElemNum myFamSubNum;
+    //! Get number of a MED FAMILY by order number of sub element
+    TInt GetFamSubNum(TInt theId) const;
+    //! Set number of a MED FAMILY for theId-th sub element
+    void SetFamSubNum(TInt theId, TInt theVal);
+
+    /*!
+     *Defines sequence MED Family indexes for corresponding mesh nodes
+     */
+    TElemNum myFamNumNode;
+    //! Get number of a MED FAMILY by order number of the mesh node
+    TInt GetFamNumNode(TInt theId) const;
+    //! Set number of a MED FAMILY for the mesh node with the order number
+    void SetFamNumNode(TInt theId, TInt theVal);
+  };
+}
+
+#endif // MED_Structures_HeaderFile
diff --git a/src/MEDWrapper/MED_TStructures.hxx b/src/MEDWrapper/MED_TStructures.hxx
new file mode 100644 (file)
index 0000000..d4c708c
--- /dev/null
@@ -0,0 +1,1193 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_TStructures_HeaderFile
+#define MED_TStructures_HeaderFile
+
+#include "MED_Structures.hxx"
+
+#ifdef WIN32
+#pragma warning(disable:4250)
+#endif
+#include <utilities.h>
+namespace MED
+{
+  //---------------------------------------------------------------
+  //! To provide a common way to handle values of MEDWrapper types as native MED types
+  template<class TValue, class TRepresentation>
+  struct TValueHolder
+  {
+    TValue& myValue;
+    TRepresentation myRepresentation;
+
+    TValueHolder(TValue& theValue):
+      myValue(theValue),
+      myRepresentation(TRepresentation(theValue))
+    {}
+
+    ~TValueHolder()
+    {
+      myValue = TValue(myRepresentation);
+    }
+
+    TRepresentation*
+    operator& ()
+    {
+      return &myRepresentation;
+    }
+
+    operator TRepresentation () const
+    {
+      return myRepresentation;
+    }  
+
+    const TValue&
+    operator() () const
+    {
+      return myValue;
+    }  
+  };
+  
+  //! To customize TValueHolder common template definition for TVector
+  template<class TVal, class TRepresentation>
+  struct TValueHolder<TVector<TVal>, TRepresentation>
+  {
+    typedef TVector<TVal> TValue;
+    TValue& myValue;
+    TRepresentation* myRepresentation;
+
+    TValueHolder(TValue& theValue):
+      myValue(theValue)
+    {
+      if(theValue.empty())
+        myRepresentation = (TRepresentation*)NULL;
+      else
+        myRepresentation = (TRepresentation*)&theValue[0];
+    }
+
+    TRepresentation*
+    operator& ()
+    {
+      return myRepresentation;
+    }
+  };
+  
+  //---------------------------------------------------------------
+  struct TTNameInfo: virtual TNameInfo
+  {
+    TTNameInfo(const std::string& theValue)
+    {
+      myName.resize(GetNOMLength()+1);
+      SetName(theValue);
+    }
+
+    virtual
+    std::string
+    GetName() const 
+    { 
+      return GetString(0, GetNOMLength(), myName);
+    }
+
+    virtual
+    void
+    SetName(const std::string& theValue)
+    {
+      SetString(0, GetNOMLength(), myName, theValue);
+    }
+
+    virtual
+    void
+    SetName(const TString& theValue)
+    {
+      SetString(0, GetNOMLength(), myName, theValue);
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTMeshInfo: 
+    virtual TMeshInfo, 
+    virtual TTNameInfo
+  {
+    typedef TTNameInfo TNameInfoBase;
+
+    TTMeshInfo(const PMeshInfo& theInfo):
+      TNameInfoBase(theInfo->GetName())
+    {
+      myDim = theInfo->GetDim();
+      mySpaceDim = theInfo->GetSpaceDim();
+      myType = theInfo->GetType();
+      
+      myDesc.resize(GetDESCLength()+1);
+      SetDesc(theInfo->GetDesc());
+    }
+
+    TTMeshInfo(TInt theDim, TInt theSpaceDim,
+               const std::string& theValue,
+               EMaillage theType,
+               const std::string& theDesc):
+      TNameInfoBase(theValue)
+    {
+      myDim = theDim;
+      mySpaceDim = theSpaceDim;
+      myType = theType;
+      
+      myDesc.resize(GetDESCLength()+1);
+      SetDesc(theDesc);
+    }
+
+    virtual 
+    std::string
+    GetDesc() const 
+    { 
+      return GetString(0, GetDESCLength(), myDesc);
+    }
+
+    virtual
+    void
+    SetDesc(const std::string& theValue)
+    {
+      SetString(0, GetDESCLength(), myDesc, theValue);
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTFamilyInfo: 
+    virtual TFamilyInfo, 
+    virtual TTNameInfo
+  {
+    typedef TTNameInfo TNameInfoBase;
+
+    TTFamilyInfo(const PMeshInfo& theMeshInfo, const PFamilyInfo& theInfo):
+      TNameInfoBase(theInfo->GetName())
+    {
+      myMeshInfo = theMeshInfo;
+
+      myId = theInfo->GetId();
+
+      myNbGroup = theInfo->GetNbGroup();
+      myGroupNames.resize(myNbGroup*GetLNOMLength()+1);
+      if(myNbGroup){
+        for(TInt anId = 0; anId < myNbGroup; anId++){
+          SetGroupName(anId,theInfo->GetGroupName(anId));
+        }
+      }
+
+      myNbAttr = theInfo->GetNbAttr();
+      myAttrId.resize(myNbAttr);
+      myAttrVal.resize(myNbAttr);
+      myAttrDesc.resize(myNbAttr*GetDESCLength()+1);
+      if(myNbAttr){
+        for(TInt anId = 0; anId < myNbAttr; anId++){
+          SetAttrDesc(anId,theInfo->GetAttrDesc(anId));
+          myAttrVal[anId] = theInfo->GetAttrVal(anId);
+          myAttrId[anId] = theInfo->GetAttrId(anId);
+        }
+      }
+    }
+
+    TTFamilyInfo(const PMeshInfo& theMeshInfo,
+                 TInt theNbGroup, 
+                 TInt theNbAttr,
+                 TInt theId,
+                 const std::string& theValue):
+      TNameInfoBase(theValue)
+    {
+      myMeshInfo = theMeshInfo;
+
+      myId = theId;
+
+      myNbGroup = theNbGroup;
+      myGroupNames.resize(theNbGroup*GetLNOMLength()+1);
+
+      myNbAttr = theNbAttr;
+      myAttrId.resize(theNbAttr);
+      myAttrVal.resize(theNbAttr);
+      myAttrDesc.resize(theNbAttr*GetDESCLength()+1);
+    }
+
+    TTFamilyInfo(const PMeshInfo& theMeshInfo,
+                 const std::string& theValue,
+                 TInt theId,
+                 const TStringSet& theGroupNames, 
+                 const TStringVector& theAttrDescs, 
+                 const TIntVector& theAttrIds, 
+                 const TIntVector& theAttrVals):
+      TNameInfoBase(theValue)
+    {
+      myMeshInfo = theMeshInfo;
+
+      myId = theId;
+
+      myNbGroup = (TInt)theGroupNames.size();
+      myGroupNames.resize(myNbGroup*GetLNOMLength()+1);
+      if(myNbGroup){
+        TStringSet::const_iterator anIter = theGroupNames.begin();
+        for(TInt anId = 0; anIter != theGroupNames.end(); anIter++, anId++){
+          const std::string& aVal = *anIter;
+          SetGroupName(anId,aVal);
+        }
+      }
+
+      myNbAttr = (TInt)theAttrDescs.size();
+      myAttrId.resize(myNbAttr);
+      myAttrVal.resize(myNbAttr);
+      myAttrDesc.resize(myNbAttr*GetDESCLength()+1);
+      if(myNbAttr){
+        for(TInt anId = 0, anEnd = (TInt)theAttrDescs.size(); anId < anEnd; anId++){
+          SetAttrDesc(anId,theAttrDescs[anId]);
+          myAttrVal[anId] = theAttrVals[anId];
+          myAttrId[anId] = theAttrIds[anId];
+        }
+      }
+    }
+
+    virtual
+    std::string
+    GetGroupName(TInt theId) const 
+    { 
+      return GetString(theId, GetLNOMLength(), myGroupNames);
+    }
+
+    virtual
+    void
+    SetGroupName(TInt theId, const std::string& theValue)
+    {
+      SetString(theId, GetLNOMLength(), myGroupNames, theValue);
+    }
+
+    virtual
+    std::string
+    GetAttrDesc(TInt theId) const 
+    { 
+      return GetString(theId, GetDESCLength(), myAttrDesc);
+    }
+
+    virtual
+    void
+    SetAttrDesc(TInt theId, const std::string& theValue)
+    {
+      SetString(theId, GetDESCLength(), myAttrDesc, theValue);
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTElemInfo: virtual TElemInfo
+  {
+    TTElemInfo(const PMeshInfo& theMeshInfo, const PElemInfo& theInfo)
+    {
+      myMeshInfo = theMeshInfo;
+      
+      myNbElem = theInfo->GetNbElem();
+      myFamNum.reset(new TElemNum(myNbElem));
+      myIsFamNum = eFAUX; // is set to eVRAI in SetFamNum()
+
+      myIsElemNum = theInfo->IsElemNum();
+      if(theInfo->IsElemNum())
+        myElemNum.reset(new TElemNum(myNbElem));
+      else
+        myElemNum.reset(new TElemNum());
+
+      myIsElemNames = theInfo->IsElemNames();
+      if(theInfo->IsElemNames())
+        myElemNames.reset(new TString(myNbElem*GetPNOMLength() + 1));
+      else
+        myElemNames.reset(new TString());
+
+      if(theInfo->GetNbElem()){
+        for(TInt anId = 0; anId < myNbElem; anId++){
+          SetFamNum(anId, theInfo->GetFamNum(anId));
+        }
+        if(theInfo->IsElemNum() == eVRAI){
+          for(TInt anId = 0; anId < myNbElem; anId++){
+            SetElemNum(anId, theInfo->GetElemNum(anId));
+          }
+        }
+        if(theInfo->IsElemNames() == eVRAI){
+          for(TInt anId = 0; anId < myNbElem; anId++){
+            SetElemName(anId,theInfo->GetElemName(anId));
+          }
+        }
+      }
+    }
+
+    TTElemInfo(const PMeshInfo& theMeshInfo, 
+               TInt theNbElem,
+               EBooleen theIsElemNum,
+               EBooleen theIsElemNames)
+    {
+      myMeshInfo = theMeshInfo;
+
+      myNbElem = theNbElem;
+      myFamNum.reset(new TElemNum(theNbElem));
+      myIsFamNum = eFAUX; // is set to eVRAI in SetFamNum()
+
+      myIsElemNum = theIsElemNum;
+      if(theIsElemNum)
+        myElemNum.reset(new TElemNum(theNbElem));
+      else
+        myElemNum.reset(new TElemNum());
+
+      myIsElemNames = theIsElemNames;
+      if(theIsElemNames)
+        myElemNames.reset(new TString(theNbElem*GetPNOMLength() + 1));
+      else
+        myElemNames.reset(new TString());
+   }
+    
+    TTElemInfo(const PMeshInfo& theMeshInfo, 
+               TInt theNbElem,
+               const TIntVector& theFamilyNums,
+               const TIntVector& theElemNums,
+               const TStringVector& theElemNames)
+    {
+      myMeshInfo = theMeshInfo;
+      
+      myNbElem = theNbElem;
+      myFamNum.reset(new TElemNum(theNbElem));
+      myIsFamNum = eFAUX; // is set to eVRAI in SetFamNum()
+      
+      myIsElemNum = theElemNums.size()? eVRAI: eFAUX;
+      if(myIsElemNum)
+        myElemNum.reset(new TElemNum(theNbElem));
+      else
+        myElemNum.reset(new TElemNum());
+      
+      myIsElemNames = theElemNames.size()? eVRAI: eFAUX;
+      if(myIsElemNames)
+        myElemNames.reset(new TString(theNbElem*GetPNOMLength() + 1));
+      else
+        myElemNames.reset(new TString());
+     
+      if(theNbElem){
+
+        if(theFamilyNums.size())
+          *myFamNum = theFamilyNums;
+
+        if(myIsElemNum)
+          *myElemNum = theElemNums;
+
+        if(myIsElemNames){
+          for(TInt anId = 0; anId < theNbElem; anId++){
+            const std::string& aVal = theElemNames[anId];
+            SetElemName(anId,aVal);
+          }
+        }
+      }
+    }
+
+    virtual
+    std::string
+    GetElemName(TInt theId) const 
+    { 
+      return GetString(theId,GetPNOMLength(), *myElemNames);
+    }
+
+    virtual
+    void
+    SetElemName(TInt theId, const std::string& theValue)
+    {
+      SetString(theId,GetPNOMLength(), *myElemNames, theValue);
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTNodeInfo: 
+    virtual TNodeInfo, 
+    virtual TTElemInfo
+  {
+    typedef TTElemInfo TElemInfoBase;
+
+    TTNodeInfo(const PMeshInfo& theMeshInfo, const PNodeInfo& theInfo):
+      TNodeInfo(theInfo),
+      TElemInfoBase(theMeshInfo, theInfo)
+    {
+      myModeSwitch = theInfo->GetModeSwitch();
+      
+      mySystem = theInfo->GetSystem();
+      
+      myCoord.reset(new TNodeCoord(*theInfo->myCoord));
+      
+      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
+
+      myCoordNames.resize(aSpaceDim*GetPNOMLength()+1);
+      for(TInt anId = 0; anId < aSpaceDim; anId++)
+        SetCoordName(anId,theInfo->GetCoordName(anId));
+      
+      myCoordUnits.resize(aSpaceDim*GetPNOMLength()+1);
+      for(TInt anId = 0; anId < aSpaceDim; anId++)
+        SetCoordUnit(anId,theInfo->GetCoordUnit(anId));
+    }
+
+    TTNodeInfo(const PMeshInfo& theMeshInfo, 
+               TInt theNbElem,
+               EModeSwitch theMode,
+               ERepere theSystem, 
+               EBooleen theIsElemNum,
+               EBooleen theIsElemNames):
+      TModeSwitchInfo(theMode),
+      TElemInfoBase(theMeshInfo,
+                    theNbElem,
+                    theIsElemNum,
+                    theIsElemNames)
+    {
+      mySystem = theSystem;
+
+      myCoord.reset(new TNodeCoord(theNbElem * theMeshInfo->mySpaceDim));
+
+      myCoordUnits.resize(theMeshInfo->mySpaceDim*GetPNOMLength()+1);
+
+      myCoordNames.resize(theMeshInfo->mySpaceDim*GetPNOMLength()+1);
+    }
+
+    
+    TTNodeInfo(const PMeshInfo& theMeshInfo, 
+               const TFloatVector& theNodeCoords,
+               EModeSwitch theMode,
+               ERepere theSystem, 
+               const TStringVector& theCoordNames,
+               const TStringVector& theCoordUnits,
+               const TIntVector& theFamilyNums,
+               const TIntVector& theElemNums,
+               const TStringVector& theElemNames):
+      TModeSwitchInfo(theMode),
+      TElemInfoBase(theMeshInfo,
+                    (TInt)theNodeCoords.size()/theMeshInfo->GetDim(),
+                    theFamilyNums,
+                    theElemNums,
+                    theElemNames)
+    {
+      mySystem = theSystem;
+
+      myCoord.reset(new TNodeCoord(theNodeCoords));
+      
+      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
+
+      myCoordNames.resize(aSpaceDim*GetPNOMLength()+1);
+      if(!theCoordNames.empty())
+        for(TInt anId = 0; anId < aSpaceDim; anId++)
+          SetCoordName(anId,theCoordNames[anId]);
+      
+      myCoordUnits.resize(aSpaceDim*GetPNOMLength() + 1);
+      if(!theCoordUnits.empty())
+        for(TInt anId = 0; anId < aSpaceDim; anId++)
+          SetCoordUnit(anId, theCoordUnits[anId]);
+    }
+
+    virtual
+    std::string
+    GetCoordName(TInt theId) const 
+    { 
+      return GetString(theId,GetPNOMLength(),myCoordNames);
+    }
+
+    virtual
+    void
+    SetCoordName(TInt theId, const std::string& theValue)
+    {
+      SetString(theId,GetPNOMLength(),myCoordNames,theValue);
+    }
+
+    virtual
+    std::string 
+    GetCoordUnit(TInt theId) const 
+    { 
+      return GetString(theId,GetPNOMLength(),myCoordUnits);
+    }
+
+    virtual
+    void
+    SetCoordUnit(TInt theId, const std::string& theValue)
+    {
+      SetString(theId,GetPNOMLength(),myCoordUnits,theValue);
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTPolygoneInfo: 
+    virtual TPolygoneInfo, 
+    virtual TTElemInfo
+  {
+    typedef TTElemInfo TElemInfoBase;
+
+    TTPolygoneInfo(const PMeshInfo& theMeshInfo, const PPolygoneInfo& theInfo):
+      TElemInfoBase(theMeshInfo,theInfo)
+    {
+      myEntity = theInfo->GetEntity();
+      myGeom = theInfo->GetGeom();
+
+      myIndex.reset(new TElemNum(*theInfo->myIndex));
+      myConn.reset(new TElemNum(*theInfo->myConn));
+
+      myConnMode = theInfo->GetConnMode();
+    }
+
+    TTPolygoneInfo(const PMeshInfo& theMeshInfo, 
+                   EEntiteMaillage theEntity, 
+                   EGeometrieElement theGeom,
+                   TInt theNbElem,
+                   TInt theConnSize,
+                   EConnectivite theConnMode,
+                   EBooleen theIsElemNum,
+                   EBooleen theIsElemNames):
+      TElemInfoBase(theMeshInfo,
+                    theNbElem,
+                    theIsElemNum,
+                    theIsElemNames)
+    {
+      myEntity = theEntity;
+      myGeom = theGeom;
+
+      myIndex.reset(new TElemNum(theNbElem + 1));
+      myConn.reset(new TElemNum(theConnSize));
+
+      myConnMode = theConnMode;
+    }
+    
+    TTPolygoneInfo(const PMeshInfo& theMeshInfo, 
+                   EEntiteMaillage theEntity, 
+                   EGeometrieElement theGeom,
+                   const TIntVector& theIndexes,
+                   const TIntVector& theConnectivities,
+                   EConnectivite theConnMode,
+                   const TIntVector& theFamilyNums,
+                   const TIntVector& theElemNums,
+                   const TStringVector& theElemNames):
+      TElemInfoBase(theMeshInfo,
+                    (TInt)theIndexes.size() - 1,
+                    theFamilyNums,
+                    theElemNums,
+                    theElemNames)
+    {
+      myEntity = theEntity;
+      myGeom = theGeom;
+
+      myIndex.reset(new TElemNum(theIndexes));
+      myConn.reset(new TElemNum(theConnectivities));
+
+      myConnMode = theConnMode;
+    }
+  };
+  
+  //---------------------------------------------------------------
+  struct TTPolyedreInfo: 
+    virtual TPolyedreInfo, 
+    virtual TTElemInfo
+  {
+    typedef TTElemInfo TElemInfoBase;
+
+    TTPolyedreInfo(const PMeshInfo& theMeshInfo, const PPolyedreInfo& theInfo):
+      TElemInfoBase(theMeshInfo,theInfo)
+    {
+      myEntity = theInfo->GetEntity();
+      myGeom = theInfo->GetGeom();
+
+      myIndex.reset(new TElemNum(*theInfo->myIndex));
+      myFaces.reset(new TElemNum(*theInfo->myFaces));
+      myConn.reset(new TElemNum(*theInfo->myConn));
+
+      myConnMode = theInfo->GetConnMode();
+    }
+
+    TTPolyedreInfo(const PMeshInfo& theMeshInfo, 
+                   EEntiteMaillage theEntity, 
+                   EGeometrieElement theGeom,
+                   TInt theNbElem,
+                   TInt theNbFaces,
+                   TInt theConnSize,
+                   EConnectivite theConnMode,
+                   EBooleen theIsElemNum,
+                   EBooleen theIsElemNames):
+      TElemInfoBase(theMeshInfo,
+                    theNbElem,
+                    theIsElemNum,
+                    theIsElemNames)
+    {
+      myEntity = theEntity;
+      myGeom = theGeom;
+
+      myIndex.reset(new TElemNum(theNbElem + 1));
+      myFaces.reset(new TElemNum(theNbFaces));
+      myConn.reset(new TElemNum(theConnSize));
+
+      myConnMode = theConnMode;
+    }
+    
+    TTPolyedreInfo(const PMeshInfo& theMeshInfo, 
+                   EEntiteMaillage theEntity, 
+                   EGeometrieElement theGeom,
+                   const TIntVector& theIndexes,
+                   const TIntVector& theFaces,
+                   const TIntVector& theConnectivities,
+                   EConnectivite theConnMode,
+                   const TIntVector& theFamilyNums,
+                   const TIntVector& theElemNums,
+                   const TStringVector& theElemNames):
+      TElemInfoBase(theMeshInfo,
+                    (TInt)theIndexes.size()-1,
+                    theFamilyNums,
+                    theElemNums,
+                    theElemNames)
+    {
+      myEntity = theEntity;
+      myGeom = theGeom;
+
+      myIndex.reset(new TElemNum(theIndexes));
+      myFaces.reset(new TElemNum(theFaces));
+      myConn.reset(new TElemNum(theConnectivities));
+
+      myConnMode = theConnMode;
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTCellInfo: 
+    virtual TCellInfo, 
+    virtual TTElemInfo
+  {
+    typedef TTElemInfo TElemInfoBase;
+
+    TTCellInfo(const PMeshInfo& theMeshInfo, const PCellInfo& theInfo):
+      TElemInfoBase(theMeshInfo,theInfo)
+    {
+      myEntity = theInfo->GetEntity();
+      myGeom = theInfo->GetGeom();
+      myConnMode  = theInfo->GetConnMode();
+      
+      TInt aConnDim = GetNbNodes(myGeom);
+      TInt aNbConn = GetNbConn(myGeom, myEntity, myMeshInfo->myDim);
+      myConn.reset(new TElemNum(myNbElem * aNbConn));
+      for(TInt anElemId = 0; anElemId < myNbElem; anElemId++){
+        TConnSlice aConnSlice = GetConnSlice(anElemId);
+        TCConnSlice aConnSlice2 = theInfo->GetConnSlice(anElemId);
+        for(TInt anConnId = 0; anConnId < aConnDim; anConnId++){
+          aConnSlice[anConnId] = aConnSlice2[anConnId];
+        }
+      }
+    }
+
+    TTCellInfo(const PMeshInfo& theMeshInfo, 
+               EEntiteMaillage theEntity, 
+               EGeometrieElement theGeom,
+               TInt theNbElem,
+               EConnectivite theConnMode,
+               EBooleen theIsElemNum,
+               EBooleen theIsElemNames,
+               EModeSwitch theMode):
+      TModeSwitchInfo(theMode),
+      TElemInfoBase(theMeshInfo,
+                    theNbElem,
+                    theIsElemNum,
+                    theIsElemNames)
+    {
+      myEntity = theEntity;
+      myGeom = theGeom;
+
+      myConnMode = theConnMode;
+      TInt aNbConn = GetNbConn(theGeom, myEntity, theMeshInfo->myDim);
+      myConn.reset(new TElemNum(theNbElem * aNbConn));
+    }
+    
+    TTCellInfo(const PMeshInfo& theMeshInfo, 
+               EEntiteMaillage theEntity, 
+               EGeometrieElement theGeom,
+               const TIntVector& theConnectivities,
+               EConnectivite theConnMode,
+               const TIntVector& theFamilyNums,
+               const TIntVector& theElemNums,
+               const TStringVector& theElemNames,
+               EModeSwitch theMode):
+      TModeSwitchInfo(theMode),
+      TElemInfoBase(theMeshInfo,
+                    (TInt)theConnectivities.size() / GetNbNodes(theGeom),
+                    theFamilyNums,
+                    theElemNums,
+                    theElemNames)
+    {
+      myEntity = theEntity;
+      myGeom = theGeom;
+
+      myConnMode = theConnMode;
+      TInt aConnDim = GetNbNodes(myGeom);
+      TInt aNbConn = GetNbConn(myGeom, myEntity, myMeshInfo->myDim);
+      myConn.reset(new TElemNum(myNbElem * aNbConn));
+      for(TInt anElemId = 0; anElemId < myNbElem; anElemId++){
+        TConnSlice aConnSlice = GetConnSlice(anElemId);
+        for(TInt anConnId = 0; anConnId < aConnDim; anConnId++){
+          aConnSlice[anConnId] = theConnectivities[anElemId*aConnDim + anConnId];
+        }
+      }
+    }
+
+    virtual 
+    TInt
+    GetConnDim() const 
+    { 
+      return GetNbConn(myGeom, myEntity, myMeshInfo->myDim);
+    }
+
+  };
+
+  //---------------------------------------------------------------
+  struct TTBallInfo: 
+    virtual TBallInfo,
+    virtual TTCellInfo
+  {
+    typedef TTCellInfo TCellInfoBase;
+
+    TTBallInfo(const PMeshInfo& theMeshInfo, const PBallInfo& theInfo):
+      TCellInfoBase::TElemInfoBase(theMeshInfo, theInfo),
+      TCellInfoBase(theMeshInfo,theInfo)
+    {
+      myDiameters = theInfo->myDiameters;
+    }
+
+    TTBallInfo(const PMeshInfo& theMeshInfo,
+               TInt             theNbElem,
+               EBooleen         theIsElemNum ):
+      TCellInfoBase::TElemInfoBase(theMeshInfo,
+                                   theNbElem,
+                                   theIsElemNum,
+                                   /*theIsElemNames=*/eFAUX),
+      TCellInfoBase(theMeshInfo,
+                    eSTRUCT_ELEMENT,
+                    eBALL,
+                    theNbElem,
+                    /*EConnectivite=*/eNOD,
+                    theIsElemNum,
+                    /*theIsElemNames=*/eFAUX,
+                    eFULL_INTERLACE)
+    {
+      myDiameters.resize( theNbElem );
+    }
+
+    TTBallInfo(const PMeshInfo&  theMeshInfo, 
+               const TIntVector& theNodes,
+               TFloatVector&     theDiameters,
+               const TIntVector& theFamilyNums,
+               const TIntVector& theElemNums):
+      TCellInfoBase::TElemInfoBase(theMeshInfo,
+                                   (TInt)std::max(theNodes.size(),theDiameters.size() ),
+                                   theFamilyNums,
+                                   theElemNums,
+                                   TStringVector()),
+      TCellInfoBase(theMeshInfo,
+                    eSTRUCT_ELEMENT,
+                    eBALL,
+                    theNodes,
+                    /*EConnectivite=*/eNOD,
+                    theFamilyNums,
+                    theElemNums,
+                    TStringVector(),
+                    eFULL_INTERLACE)
+    {
+      myDiameters.swap( theDiameters );
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTFieldInfo: 
+    virtual TFieldInfo, 
+    virtual TTNameInfo
+  {
+    typedef TTNameInfo TNameInfoBase;
+
+    TTFieldInfo(const PMeshInfo& theMeshInfo, const PFieldInfo& theInfo):
+      TNameInfoBase(theInfo->GetName())
+    {
+      myMeshInfo = theMeshInfo;
+
+      myNbComp = theInfo->GetNbComp();
+      myCompNames.resize(myNbComp*GetPNOMLength()+1);
+      for(TInt anId = 0; anId < myNbComp; anId++){
+        SetCompName(anId,theInfo->GetCompName(anId));
+      }
+
+      myUnitNames.resize(myNbComp*GetPNOMLength()+1);
+      for(TInt anId = 0; anId < myNbComp; anId++){
+        SetUnitName(anId,theInfo->GetUnitName(anId));
+      }
+
+      myType = theInfo->GetType();
+
+      myIsLocal = theInfo->GetIsLocal();
+      myNbRef = theInfo->GetNbRef();
+    }
+
+    TTFieldInfo(const PMeshInfo& theMeshInfo, 
+                TInt theNbComp,
+                ETypeChamp theType,
+                const std::string& theValue,
+                EBooleen theIsLocal,
+                TInt theNbRef):
+      TNameInfoBase(theValue)
+    {
+      myMeshInfo = theMeshInfo;
+
+      myNbComp = theNbComp;
+      myCompNames.resize(theNbComp*GetPNOMLength()+1);
+      myUnitNames.resize(theNbComp*GetPNOMLength()+1);
+
+      myType = theType;
+
+      myIsLocal = theIsLocal;
+      myNbRef = theNbRef;
+    }
+    
+    virtual 
+    std::string
+    GetCompName(TInt theId) const 
+    { 
+      return GetString(theId,GetPNOMLength(),myCompNames);
+    }
+
+    virtual
+    void
+    SetCompName(TInt theId, const std::string& theValue)
+    {
+      SetString(theId,GetPNOMLength(),myCompNames,theValue);
+    }
+
+    virtual
+    std::string 
+    GetUnitName(TInt theId) const 
+    { 
+      return GetString(theId,GetPNOMLength(),myUnitNames);
+    }
+
+    virtual
+    void
+    SetUnitName(TInt theId, const std::string& theValue)
+    {
+      SetString(theId,GetPNOMLength(),myUnitNames,theValue);
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTGaussInfo: 
+    virtual TGaussInfo,
+    virtual TTNameInfo
+  {
+    typedef TTNameInfo TNameInfoBase;
+
+    TTGaussInfo(const TGaussInfo::TInfo& theInfo,
+                EModeSwitch theMode):
+      TModeSwitchInfo(theMode),
+      TNameInfoBase(boost::get<1>(boost::get<0>(theInfo)))
+    {
+      const TGaussInfo::TKey& aKey = boost::get<0>(theInfo);
+
+      myGeom = boost::get<0>(aKey);
+      myRefCoord.resize(GetNbRef()*GetDim());
+
+      TInt aNbGauss = boost::get<1>(theInfo);
+      myGaussCoord.resize(aNbGauss*GetDim());
+      myWeight.resize(aNbGauss);
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTTimeStampInfo: virtual TTimeStampInfo
+  {
+    TTTimeStampInfo(const PFieldInfo& theFieldInfo, const PTimeStampInfo& theInfo)
+    {
+      myFieldInfo = theFieldInfo;
+
+      myEntity = theInfo->GetEntity();
+      myGeom2Size = theInfo->GetGeom2Size();
+
+      myNumDt = theInfo->GetNumDt();
+      myNumOrd = theInfo->GetNumOrd();
+      myDt = theInfo->GetDt();
+
+      myUnitDt.resize(GetPNOMLength()+1);
+      SetUnitDt(theInfo->GetUnitDt());
+
+      myGeom2NbGauss = theInfo->myGeom2NbGauss;
+      myGeom2Gauss = theInfo->GetGeom2Gauss();
+    }
+
+    TTTimeStampInfo(const PFieldInfo& theFieldInfo, 
+                    EEntiteMaillage theEntity,
+                    const TGeom2Size& theGeom2Size,
+                    const TGeom2NbGauss& theGeom2NbGauss,
+                    TInt theNumDt,
+                    TInt theNumOrd,
+                    TFloat theDt,
+                    const std::string& theUnitDt,
+                    const TGeom2Gauss& theGeom2Gauss)
+    {
+      myFieldInfo = theFieldInfo;
+
+      myEntity = theEntity;
+      myGeom2Size = theGeom2Size;
+
+      myNumDt = theNumDt;
+      myNumOrd = theNumDt;
+      myDt = theDt;
+
+      myUnitDt.resize(GetPNOMLength()+1);
+      SetUnitDt(theUnitDt);
+
+      myGeom2NbGauss = theGeom2NbGauss;
+      myGeom2Gauss = theGeom2Gauss;
+    }
+
+    virtual 
+    std::string
+    GetUnitDt() const
+    { 
+      return GetString(0,GetPNOMLength(),myUnitDt);
+    }
+
+    virtual
+    void
+    SetUnitDt(const std::string& theValue)
+    {
+      SetString(0,GetPNOMLength(),myUnitDt,theValue);
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTProfileInfo: 
+    virtual TProfileInfo,
+    virtual TTNameInfo
+  {
+    typedef TTNameInfo TNameInfoBase;
+
+    TTProfileInfo(const TProfileInfo::TInfo& theInfo,
+                  EModeProfil theMode):
+      TNameInfoBase(boost::get<0>(theInfo))
+    {
+      TInt aSize = boost::get<1>(theInfo);
+      myElemNum.reset(new TElemNum(aSize));
+      myMode = aSize > 0? theMode: eNO_PFLMOD;
+    }
+  };
+
+  //---------------------------------------------------------------
+  template<class TMeshValueType>
+  struct TTTimeStampValue: virtual TTimeStampValue<TMeshValueType>
+  {
+    TTTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const PTimeStampValueBase& theInfo,
+                     ETypeChamp theTypeChamp)
+    {
+      typedef TTimeStampValue<TMeshValueType> TCompatible;
+      if(TCompatible* aCompatible = dynamic_cast<TCompatible*>(theInfo.get())){
+        this->myTimeStampInfo = theTimeStampInfo;
+        this->myTypeChamp = theTypeChamp;
+        this->myGeom2Profile = aCompatible->GetGeom2Profile();
+        this->myGeom2Value = aCompatible->myGeom2Value;
+        this->myGeomSet = aCompatible->GetGeomSet();
+      }else
+        EXCEPTION(std::runtime_error,"TTTimeStampValue::TTTimeStampValue - use incompatible arguments!");
+    }
+
+    TTTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     ETypeChamp theTypeChamp,
+                     const TGeom2Profile& theGeom2Profile,
+                     EModeSwitch theMode):
+      TModeSwitchInfo(theMode)
+    {
+      this->myTimeStampInfo = theTimeStampInfo;
+
+      this->myTypeChamp = theTypeChamp;
+
+      this->myGeom2Profile = theGeom2Profile;
+
+      TInt aNbComp = theTimeStampInfo->myFieldInfo->myNbComp;
+
+      const TGeom2Size& aGeom2Size = theTimeStampInfo->GetGeom2Size();
+      TGeom2Size::const_iterator anIter = aGeom2Size.begin();
+      for(; anIter != aGeom2Size.end(); anIter++){
+        const EGeometrieElement& aGeom = anIter->first;
+        TInt aNbElem = anIter->second;
+
+        MED::PProfileInfo aProfileInfo;
+        MED::TGeom2Profile::const_iterator anIter = theGeom2Profile.find(aGeom);
+        if(anIter != theGeom2Profile.end())
+          aProfileInfo = anIter->second;
+
+        if(aProfileInfo && aProfileInfo->IsPresent())
+          aNbElem = aProfileInfo->GetSize();
+
+        TInt aNbGauss = theTimeStampInfo->GetNbGauss(aGeom);
+        
+        this->GetMeshValue(aGeom).Allocate(aNbElem,aNbGauss,aNbComp);
+      }
+    }
+
+    virtual 
+    size_t
+    GetValueSize(EGeometrieElement theGeom) const
+    {
+      return this->GetMeshValue(theGeom).GetSize();
+    }
+
+    virtual 
+    size_t
+    GetNbVal(EGeometrieElement theGeom) const
+    {
+      return this->GetMeshValue(theGeom).GetNbVal();
+    }
+
+    virtual 
+    size_t
+    GetNbGauss(EGeometrieElement theGeom) const
+    {
+      return this->GetMeshValue(theGeom).GetNbGauss();
+    }
+
+    virtual 
+    void
+    AllocateValue(EGeometrieElement theGeom,
+                  TInt theNbElem,
+                  TInt theNbGauss,
+                  TInt theNbComp,
+                  EModeSwitch theMode = eFULL_INTERLACE)
+    {
+      this->GetMeshValue(theGeom).Allocate(theNbElem,theNbGauss,theNbComp,theMode);
+    }
+    
+    virtual 
+    unsigned char*
+    GetValuePtr(EGeometrieElement theGeom)
+    {
+      return this->GetMeshValue(theGeom).GetValuePtr();
+    }
+  };
+
+  //---------------------------------------------------------------
+  struct TTGrilleInfo:
+    virtual TGrilleInfo
+  {
+    TTGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const PGrilleInfo& theInfo)
+    {
+      myMeshInfo        = theMeshInfo;
+
+      myCoord           = theInfo->GetNodeCoord();
+      
+      myGrilleType      = theInfo->GetGrilleType();
+
+      myCoordNames      = theInfo->myCoordNames;
+
+      myCoordUnits      = theInfo->myCoordUnits;
+
+      myIndixes         = theInfo->GetMapOfIndexes();
+
+      myGrilleStructure = theInfo->GetGrilleStructure();
+
+      myGrilleType      = theInfo->GetGrilleType();
+
+      myFamNumNode.resize(theInfo->GetNbNodes());
+      myFamNumNode      = theInfo->myFamNumNode;
+
+      myFamNum      = theInfo->myFamNum;
+    }
+
+    TTGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type,
+                 const TInt nnoeuds)
+    {
+      myMeshInfo        = theMeshInfo;
+      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
+      if(type == eGRILLE_STANDARD){
+        myCoord.resize(aSpaceDim*nnoeuds);
+        myCoordNames.resize(aSpaceDim*GetPNOMLength()+1);
+        myCoordUnits.resize(aSpaceDim*GetPNOMLength()+1);
+      } else { //if(type == eGRILLE_CARTESIENNE){
+        myCoordNames.resize(aSpaceDim*GetPNOMLength()+aSpaceDim);
+        myCoordUnits.resize(aSpaceDim*GetPNOMLength()+aSpaceDim);
+      }
+      myGrilleStructure.resize(aSpaceDim);
+      myFamNumNode.resize(nnoeuds);
+    }
+
+    TTGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type)
+    {
+      myMeshInfo        = theMeshInfo;
+      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
+      if(type == eGRILLE_STANDARD){
+        myCoordNames.resize(aSpaceDim*GetPNOMLength()+1);
+        myCoordUnits.resize(aSpaceDim*GetPNOMLength()+1);
+      } else {// if(type == eGRILLE_CARTESIENNE){
+        myCoordNames.resize(aSpaceDim*GetPNOMLength()+aSpaceDim);
+        myCoordUnits.resize(aSpaceDim*GetPNOMLength()+aSpaceDim);
+      }
+      myGrilleStructure.resize(aSpaceDim);
+    }
+
+    TTGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type,
+                 const MED::TIntVector& nbNodeVec)
+    {
+      myMeshInfo        = theMeshInfo;
+
+      TInt aSpaceDim = theMeshInfo->GetSpaceDim();
+      if(type == eGRILLE_STANDARD){
+        myCoordNames.resize(aSpaceDim*GetPNOMLength()+1);
+        myCoordUnits.resize(aSpaceDim*GetPNOMLength()+1);
+      } else {// if(type == eGRILLE_CARTESIENNE){
+        myCoordNames.resize(aSpaceDim*GetPNOMLength()+aSpaceDim);
+        myCoordUnits.resize(aSpaceDim*GetPNOMLength()+aSpaceDim);
+      }
+
+      if(type != eGRILLE_STANDARD)
+        for(unsigned int aAxe=0;aAxe<nbNodeVec.size();aAxe++){
+          myIndixes[aAxe].resize(nbNodeVec[aAxe]);
+        }
+      myGrilleStructure.resize(aSpaceDim);
+    }
+
+    virtual
+    std::string
+    GetCoordName(TInt theId) const 
+    { 
+      return GetString(theId,GetPNOMLength(),myCoordNames);
+    }
+
+    virtual
+    void
+    SetCoordName(TInt theId, const std::string& theValue)
+    {
+      SetString(theId,GetPNOMLength(),myCoordNames,theValue);
+    }
+
+    virtual
+    std::string 
+    GetCoordUnit(TInt theId) const 
+    { 
+      return GetString(theId,GetPNOMLength(),myCoordUnits);
+    }
+
+    virtual
+    void
+    SetCoordUnit(TInt theId, const std::string& theValue)
+    {
+      SetString(theId,GetPNOMLength(),myCoordUnits,theValue);
+    }
+  };
+}
+
+#endif // MED_TStructures_HeaderFile
diff --git a/src/MEDWrapper/MED_Utilities.cxx b/src/MEDWrapper/MED_Utilities.cxx
new file mode 100644 (file)
index 0000000..d68470d
--- /dev/null
@@ -0,0 +1,59 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_Utilities.hxx"
+#include "MED_Common.hxx"
+
+#ifdef _DEBUG_
+static int MYDEBUG = 0;
+#else
+static int MYDEBUG = 0;
+#endif
+
+int MED::PrefixPrinter::myCounter = 0;
+
+MED::PrefixPrinter::PrefixPrinter(bool theIsActive):
+  myIsActive(theIsActive)
+{
+  if(myIsActive)
+    myCounter++;
+  MSG(MYDEBUG,"MED::PrefixPrinter::PrefixPrinter(...)- "<<myCounter);
+}
+
+MED::PrefixPrinter::~PrefixPrinter()
+{
+  if(myIsActive){
+    myCounter--;
+    if(myCounter < 0)
+      EXCEPTION(std::runtime_error,"PrefixPrinter::~PrefixPrinter() - myCounter("<<myCounter<<") < 0");
+  }
+}
+
+std::string MED::PrefixPrinter::GetPrefix()
+{
+  if(myCounter){
+    if(myCounter < 0)
+      EXCEPTION(std::runtime_error,"PrefixPrinter::~PrefixPrinter() - myCounter("<<myCounter<<") < 0");
+    return std::string(myCounter*2,' ');
+  }
+  return "";
+}
diff --git a/src/MEDWrapper/MED_Utilities.hxx b/src/MEDWrapper/MED_Utilities.hxx
new file mode 100644 (file)
index 0000000..6d859f6
--- /dev/null
@@ -0,0 +1,72 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_Utilities_HeaderFile
+#define MED_Utilities_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+
+#include <iostream>
+#include <sstream>
+#include <string>
+#include <string.h>
+#include <stdexcept>
+
+namespace MED
+{
+  class MEDWRAPPER_EXPORT PrefixPrinter
+  {
+    static int myCounter;
+    bool myIsActive;
+  public:
+    PrefixPrinter(bool theIsActive = true);
+    ~PrefixPrinter();
+
+    static std::string GetPrefix();
+  };
+}
+
+#ifdef _DEBUG_
+  #define MSG(deb,msg) if(deb) std::cout<<MED::PrefixPrinter::GetPrefix()<<msg<<" ("<<__FILE__<<" ["<<__LINE__<<"])\n"
+  #define BEGMSG(deb,msg) if(deb) std::cout<<MED::PrefixPrinter::GetPrefix()<<msg
+  #define INITMSGA(deb,lev,msg) MED::PrefixPrinter aPrefixPrinter_##lev(deb); BEGMSG(deb,msg)
+  #define INITMSG(deb,msg) INITMSGA(deb,,msg)
+  #define ADDMSG(deb,msg) if(deb) std::cout<<msg
+#else // _DEBUG_
+  #define MSG(deb,msg)
+  #define BEGMSG(deb,msg)
+  #define INITMSGA(deb,lev,msg)
+  #define INITMSG(deb,msg)
+  #define ADDMSG(deb,msg)
+#endif // _DEBUG_
+
+#ifndef EXCEPTION
+
+#define EXCEPTION(TYPE, MSG) {\
+  std::ostringstream aStream;\
+  aStream<<__FILE__<<"["<<__LINE__<<"]::"<<MSG;\
+  throw TYPE(aStream.str().c_str());\
+}
+
+#endif // EXCEPTION
+
+#endif // MED_Utilities_HeaderFile
diff --git a/src/MEDWrapper/MED_Vector.hxx b/src/MEDWrapper/MED_Vector.hxx
new file mode 100644 (file)
index 0000000..f767f55
--- /dev/null
@@ -0,0 +1,151 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_Vector_HeaderFile
+#define MED_Vector_HeaderFile
+
+#include <vector>
+#include <stdexcept>
+
+//#if defined(_DEBUG_)
+#  define MED_TVECTOR_CHECK_RANGE
+//#endif
+
+namespace MED
+{
+  //! Main purpose to introduce the class was to customize operator []
+  template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
+  class TVector : public std::vector<_Tp, _Alloc>
+  {
+  public:
+    typedef size_t size_type;
+
+    typedef std::vector<_Tp, _Alloc> superclass;
+    typedef typename superclass::allocator_type allocator_type;
+
+    typedef _Tp value_type;
+    typedef value_type& reference;
+    typedef const value_type& const_reference;
+
+  protected:
+    void
+    check_range(size_type __n) const
+    {
+      if (__n >= this->size())
+        throw std::out_of_range("TVector [] access out of range");
+    }
+
+    const_reference
+    get_value(size_type __n) const
+    {
+      return superclass::operator[](__n);
+    }
+
+    reference
+    get_value(size_type __n)
+    {
+      return superclass::operator[](__n);
+    }
+
+  public:
+    explicit
+    TVector(const allocator_type& __a = allocator_type()):
+      superclass(__a)
+    {}
+
+    TVector(size_type __n, const value_type& __val,
+            const allocator_type& __a = allocator_type()):
+      superclass(__n, __val, __a)
+    {}
+
+    explicit
+    TVector(size_type __n):
+      superclass(__n)
+    {}
+
+    TVector(const TVector& __x):
+      superclass(__x)
+    {}
+
+    template<typename _InputIterator>
+    TVector(_InputIterator __first, _InputIterator __last,
+            const allocator_type& __a = allocator_type()):
+      superclass(__first, __last, __a)
+    {}
+
+    template<typename _Yp, typename _Al>
+    TVector(TVector<_Yp, _Al> __y):
+      superclass(__y.begin(), __y.end())
+    {}
+
+    TVector&
+    operator=(const TVector& __x)
+    {
+      superclass::operator=(__x);
+      return *this;
+    }
+
+    template<typename _Yp, typename _Al>
+    TVector&
+    operator=(TVector<_Yp, _Al> __y)
+    {
+      this->assign(__y.begin(), __y.end());
+      return *this;
+    }
+
+    reference
+    operator[](size_type __n)
+    {
+#if defined(MED_TVECTOR_CHECK_RANGE)
+      check_range(__n);
+#endif
+      return get_value(__n);
+    }
+
+    const_reference
+    operator[](size_type __n) const
+    {
+#if defined(MED_TVECTOR_CHECK_RANGE)
+      check_range(__n);
+#endif
+      return get_value(__n);
+    }
+
+    reference
+    at(size_type __n)
+    {
+      check_range(__n);
+      return get_value(__n);
+    }
+
+    const_reference
+    at(size_type __n) const
+    {
+      check_range(__n);
+      return get_value(__n);
+    }
+  };
+}
+
+#undef MED_TVECTOR_CHECK_RANGE
+
+#endif // MED_Vector_HeaderFile
diff --git a/src/MEDWrapper/MED_Wrapper.cxx b/src/MEDWrapper/MED_Wrapper.cxx
new file mode 100644 (file)
index 0000000..dbabc2a
--- /dev/null
@@ -0,0 +1,4053 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "MED_Wrapper.hxx"
+#include "MED_TStructures.hxx"
+#include "MED_Utilities.hxx"
+
+#include <med.h>
+#include <med_err.h>
+
+#include <boost/version.hpp>
+
+#ifdef _DEBUG_
+static int MYDEBUG = 0;
+static int MYVALUEDEBUG = 0;
+#else
+static int MYDEBUG = 0;
+static int MYVALUEDEBUG = 0;
+#endif
+
+namespace MED
+{
+  //---------------------------------------------------------------
+  TLockProxy
+  ::TLockProxy(TWrapper* theWrapper):
+    myWrapper(theWrapper)
+  {
+#if BOOST_VERSION >= 103500
+    myWrapper->myMutex.lock();
+#else
+    boost::detail::thread::lock_ops<TWrapper::TMutex>::lock(myWrapper->myMutex);
+#endif
+    INITMSG(MYDEBUG, "TLockProxy() - this -"<<this<<"; myWrapper = "<<myWrapper<<std::endl);
+  }
+
+  TLockProxy
+  ::~TLockProxy()
+  {
+    INITMSG(MYDEBUG, "~TLockProxy() - this -"<<this<<"; myWrapper = "<<myWrapper<<std::endl);
+#if BOOST_VERSION >= 103500
+    myWrapper->myMutex.unlock();
+#else
+    boost::detail::thread::lock_ops<TWrapper::TMutex>::unlock(myWrapper->myMutex);
+#endif
+  }
+
+  TWrapper*
+  TLockProxy
+  ::operator->() const // never throws
+  {
+    return myWrapper;
+  }
+
+  //---------------------------------------------------------------
+  class TFile
+  {
+    TFile();
+    TFile(const TFile&);
+
+  public:
+    TFile(const std::string& theFileName):
+      myCount(0),
+      myFid(0),
+      myFileName(theFileName)
+    {}
+
+    ~TFile()
+    {
+      Close();
+    }
+
+    void
+    Open(EModeAcces theMode,
+         TErr* theErr = NULL)
+    {
+      if (myCount++ == 0) {
+        const char* aFileName = myFileName.c_str();
+        myFid = MEDfileOpen(aFileName, med_access_mode(theMode));
+      }
+      if (theErr)
+        *theErr = TErr(myFid);
+      else if (myFid < 0)
+        EXCEPTION(std::runtime_error, "TFile - MEDfileOpen('"<<myFileName<<"',"<<theMode<<")");
+    }
+
+    const TIdt&
+    Id() const
+    {
+      if (myFid < 0)
+        EXCEPTION(std::runtime_error, "TFile - GetFid() < 0");
+      return myFid;
+    }
+
+    void
+    Close()
+    {
+      if (--myCount == 0)
+        MEDfileClose(myFid);
+    }
+
+  protected:
+    TInt myCount;
+    TIdt myFid;
+    std::string myFileName;
+  };
+
+  //---------------------------------------------------------------
+  class TFileWrapper
+  {
+    PFile myFile;
+
+  public:
+    TFileWrapper(const PFile& theFile,
+                 EModeAcces theMode,
+                 TErr* theErr = NULL):
+      myFile(theFile)
+    {
+      myFile->Open(theMode, theErr);
+    }
+
+    ~TFileWrapper()
+    {
+      myFile->Close();
+    }
+  };
+
+  //----------------------------------------------------------------------------
+  template<class TimeStampValueType>
+  void
+  Print(SharedPtr<TimeStampValueType> theTimeStampValue)
+  {
+    INITMSG(MYDEBUG,"Print - TimeStampValue\n");
+    typename TimeStampValueType::TTGeom2Value& aGeom2Value = theTimeStampValue->myGeom2Value;
+    typename TimeStampValueType::TTGeom2Value::const_iterator anIter = aGeom2Value.begin();
+    for (; anIter != aGeom2Value.end(); anIter++) {
+      const EGeometrieElement& aGeom = anIter->first;
+      const typename TimeStampValueType::TTMeshValue& aMeshValue = anIter->second;
+      TInt aNbElem = aMeshValue.myNbElem;
+      TInt aNbGauss = aMeshValue.myNbGauss;
+      TInt aNbComp = aMeshValue.myNbComp;
+      INITMSG(MYDEBUG, "aGeom = "<<aGeom<<" - "<<aNbElem<<": ");
+      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+        typename TimeStampValueType::TTMeshValue::TCValueSliceArr aValueSliceArr =
+          aMeshValue.GetGaussValueSliceArr(iElem);
+        ADDMSG(MYVALUEDEBUG, "{");
+        for (TInt iGauss = 0; iGauss < aNbGauss; iGauss++) {
+          const typename TimeStampValueType::TTMeshValue::TCValueSlice& aValueSlice =
+            aValueSliceArr[iGauss];
+          for (TInt iComp = 0; iComp < aNbComp; iComp++) {
+            ADDMSG(MYVALUEDEBUG, aValueSlice[iComp]<<" ");
+          }
+          ADDMSG(MYVALUEDEBUG, "| ");
+        }
+        ADDMSG(MYVALUEDEBUG, "} ");
+      }
+      ADDMSG(MYDEBUG, "\n");
+    }
+  }
+
+  //---------------------------------------------------------------
+  TWrapper
+  ::TWrapper(const std::string& theFileName):
+    myFile(new TFile(theFileName))
+  {
+    TErr aRet;
+    myFile->Open(eLECTURE_ECRITURE, &aRet);
+    // if (aRet < 0)
+    //   myFile->Close();
+    //   myFile->Open(eLECTURE_AJOUT, &aRet);
+    // }
+    if (aRet < 0) {
+      myFile->Close();
+      myFile->Open(eLECTURE, &aRet);
+    }
+    if (aRet < 0) {
+      myFile->Close();
+      myFile->Open(eCREATION, &aRet);
+    }
+  }
+
+  //----------------------------------------------------------------------------
+  TWrapper::
+  ~TWrapper()
+  {
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbMeshes(TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    return MEDnMesh(myFile->Id());
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetMeshInfo(TInt theMeshId,
+                MED::TMeshInfo& theInfo,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    TValueHolder<TString, char> aMeshName(theInfo.myName);
+    TValueHolder<TInt, med_int> aDim(theInfo.myDim);
+    TValueHolder<TInt, med_int> aSpaceDim(theInfo.mySpaceDim);
+    TValueHolder<EMaillage, med_mesh_type> aType(theInfo.myType);
+    char dtunit[MED_SNAME_SIZE+1];
+    med_sorting_type sorttype;
+    med_int nstep;
+    med_axis_type at;
+    int naxis = MEDmeshnAxis(myFile->Id(), theMeshId);
+    char *axisname = new char[naxis*MED_SNAME_SIZE+1];
+    char *axisunit = new char[naxis*MED_SNAME_SIZE+1];
+    TErr aRet = MEDmeshInfo(myFile->Id(),
+                            theMeshId,
+                            &aMeshName,
+                            &aSpaceDim,
+                            &aDim,
+                            &aType,
+                            &theInfo.myDesc[0],
+                            dtunit,
+                            &sorttype,
+                            &nstep,
+                            &at,
+                            axisname,
+                            axisunit);
+    delete [] axisname;
+    delete [] axisunit;
+    if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetMeshInfo - MEDmeshInfo(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetMeshInfo(const MED::TMeshInfo& theInfo,
+                TErr* theErr)
+  {
+    TErr aRet;
+    SetMeshInfo(theInfo, eLECTURE_ECRITURE, &aRet);
+
+    if (aRet < 0)
+      SetMeshInfo(theInfo, eLECTURE_AJOUT, &aRet);
+
+    if (aRet < 0)
+      SetMeshInfo(theInfo, eCREATION, &aRet);
+
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetMeshInfo(const MED::TMeshInfo& theInfo,
+                EModeAcces theMode,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TMeshInfo& anInfo = const_cast<MED::TMeshInfo&>(theInfo);
+
+    TValueHolder<TString, char> aMeshName(anInfo.myName);
+    TValueHolder<TInt, med_int> aDim(anInfo.myDim);
+    TValueHolder<TInt, med_int> aSpaceDim(anInfo.mySpaceDim);
+    TValueHolder<EMaillage, med_mesh_type> aType(anInfo.myType);
+    TValueHolder<TString, char> aDesc(anInfo.myDesc);
+
+    char *nam = new char[aSpaceDim*MED_SNAME_SIZE+1];
+    std::fill(nam, nam+aSpaceDim*MED_SNAME_SIZE+1, '\0');
+    char *unit = new char[aSpaceDim*MED_SNAME_SIZE+1];
+    std::fill(unit, unit+aSpaceDim*MED_SNAME_SIZE+1, '\0');
+    TErr aRet = MEDmeshCr(myFile->Id(),
+                          &aMeshName,
+                          aSpaceDim,
+                          aDim,
+                          aType,
+                          &aDesc,
+                          "",
+                          MED_SORT_DTIT,
+                          MED_CARTESIAN,
+                          nam,
+                          unit);
+    delete [] nam;
+    delete [] unit;
+
+    //if (aRet == 0)
+    //  aRet = MEDunvCr(myFile->Id(),&aMeshName);
+
+    INITMSG(MYDEBUG, "TWrapper::SetMeshInfo - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetMeshInfo - MEDmeshCr(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  PMeshInfo
+  TWrapper
+  ::CrMeshInfo(TInt theDim,
+               TInt theSpaceDim,
+               const std::string& theValue,
+               EMaillage theType,
+               const std::string& theDesc)
+  {
+    return PMeshInfo(new TTMeshInfo
+                     (theDim,
+                      theSpaceDim,
+                      theValue,
+                      theType,
+                      theDesc));
+  }
+
+  //----------------------------------------------------------------------------
+  PMeshInfo
+  TWrapper
+  ::CrMeshInfo(const PMeshInfo& theInfo)
+  {
+    return PMeshInfo(new TTMeshInfo(theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PMeshInfo
+  TWrapper
+  ::GetPMeshInfo(TInt theId,
+                 TErr* theErr)
+  {
+    PMeshInfo anInfo = CrMeshInfo();
+    GetMeshInfo(theId, *anInfo, theErr);
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbFamilies(const MED::TMeshInfo& theInfo,
+                  TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    MED::TMeshInfo& anInfo = const_cast<MED::TMeshInfo&>(theInfo);
+    TValueHolder<TString, char> aName(anInfo.myName);
+    return MEDnFamily(myFile->Id(), &aName);
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbFamAttr(TInt theFamId,
+                 const MED::TMeshInfo& theInfo,
+                 TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    MED::TMeshInfo& anInfo = const_cast<MED::TMeshInfo&>(theInfo);
+
+    TValueHolder<TString, char> aName(anInfo.myName);
+
+    return MEDnFamily23Attribute(myFile->Id(), &aName, theFamId);
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbFamGroup(TInt theFamId,
+                  const MED::TMeshInfo& theInfo,
+                  TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    MED::TMeshInfo& anInfo = const_cast<MED::TMeshInfo&>(theInfo);
+
+    TValueHolder<TString, char> aName(anInfo.myName);
+
+    return MEDnFamilyGroup(myFile->Id(), &aName, theFamId);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetFamilyInfo(TInt theFamId,
+                  MED::TFamilyInfo& theInfo,
+                  TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TValueHolder<TString, char> aFamilyName(theInfo.myName);
+    TValueHolder<TInt, med_int> aFamilyId(theInfo.myId);
+    TValueHolder<TFamAttr, med_int> anAttrId(theInfo.myAttrId);
+    TValueHolder<TFamAttr, med_int> anAttrVal(theInfo.myAttrVal);
+    TValueHolder<TString, char> anAttrDesc(theInfo.myAttrDesc);
+    TValueHolder<TString, char> aGroupNames(theInfo.myGroupNames);
+
+    TErr aRet = MEDfamily23Info(myFile->Id(),
+                                &aMeshName,
+                                theFamId,
+                                &aFamilyName,
+                                &anAttrId,
+                                &anAttrVal,
+                                &anAttrDesc,
+                                &aFamilyId,
+                                &aGroupNames);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetFamilyInfo - MEDfamily23Info(...) - "<<
+                " aMeshInfo.myName = '"<<&aMeshName<<
+                "'; theFamId = "<<theFamId<<
+                "; theInfo.myNbGroup = "<<theInfo.myNbGroup<<
+                "; theInfo.myNbAttr = "<<theInfo.myNbAttr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetFamilyInfo(const MED::TFamilyInfo& theInfo,
+                  TErr* theErr)
+  {
+    TErr aRet;
+    SetFamilyInfo(theInfo, eLECTURE_ECRITURE, &aRet);
+
+    if (aRet < 0)
+      SetFamilyInfo(theInfo, eLECTURE_AJOUT, &aRet);
+
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetFamilyInfo(const MED::TFamilyInfo& theInfo,
+                  EModeAcces theMode,
+                  TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TFamilyInfo& anInfo = const_cast<MED::TFamilyInfo&>(theInfo);
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TValueHolder<TString, char> aFamilyName(anInfo.myName);
+    TValueHolder<TInt, med_int> aFamilyId(anInfo.myId);
+    TValueHolder<TFamAttr, med_int> anAttrId(anInfo.myAttrId);
+    TValueHolder<TFamAttr, med_int> anAttrVal(anInfo.myAttrVal);
+    TValueHolder<TInt, med_int> aNbAttr(anInfo.myNbAttr);
+    TValueHolder<TString, char> anAttrDesc(anInfo.myAttrDesc);
+    TValueHolder<TInt, med_int> aNbGroup(anInfo.myNbGroup);
+    TValueHolder<TString, char> aGroupNames(anInfo.myGroupNames);
+
+    TErr aRet = MEDfamilyCr(myFile->Id(),
+                            &aMeshName,
+                            &aFamilyName,
+                            aFamilyId,
+                            aNbGroup,
+                            &aGroupNames);
+
+    INITMSG(MYDEBUG, "TWrapper::SetFamilyInfo - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetFamilyInfo - MEDfamilyCr(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  PFamilyInfo
+  TWrapper
+  ::CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 TInt theNbGroup,
+                 TInt theNbAttr,
+                 TInt theId,
+                 const std::string& theValue)
+  {
+    return PFamilyInfo(new TTFamilyInfo
+                       (theMeshInfo,
+                        theNbGroup,
+                        theNbAttr,
+                        theId,
+                        theValue));
+  }
+
+  //----------------------------------------------------------------------------
+  PFamilyInfo
+  TWrapper
+  ::CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 const std::string& theValue,
+                 TInt theId,
+                 const MED::TStringSet& theGroupNames,
+                 const MED::TStringVector& theAttrDescs,
+                 const MED::TIntVector& theAttrIds,
+                 const MED::TIntVector& theAttrVals)
+  {
+    return PFamilyInfo(new TTFamilyInfo
+                       (theMeshInfo,
+                        theValue,
+                        theId,
+                        theGroupNames,
+                        theAttrDescs,
+                        theAttrIds,
+                        theAttrVals));
+  }
+
+  //----------------------------------------------------------------------------
+  PFamilyInfo
+  TWrapper
+  ::CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 const PFamilyInfo& theInfo)
+  {
+    return PFamilyInfo(new TTFamilyInfo
+                       (theMeshInfo,
+                        theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PFamilyInfo
+  TWrapper
+  ::GetPFamilyInfo(const PMeshInfo& theMeshInfo,
+                   TInt theId,
+                   TErr* theErr)
+  {
+    // must be reimplemented in connection with mesh type eSTRUCTURE
+    //     if (theMeshInfo->GetType() != eNON_STRUCTURE)
+    //       return PFamilyInfo();
+
+    TInt aNbAttr = GetNbFamAttr(theId, *theMeshInfo);
+    TInt aNbGroup = GetNbFamGroup(theId, *theMeshInfo);
+    PFamilyInfo anInfo = CrFamilyInfo(theMeshInfo, aNbGroup, aNbAttr);
+    GetFamilyInfo(theId, *anInfo, theErr);
+
+#ifdef _DEBUG_
+    std::string aName = anInfo->GetName();
+    INITMSG(MYDEBUG, "GetPFamilyInfo - aFamilyName = '"<<aName<<
+            "'; andId = "<<anInfo->GetId()<<
+            "; aNbAttr = "<<aNbAttr<<
+            "; aNbGroup = "<<aNbGroup<<"\n");
+    for (TInt iGroup = 0; iGroup < aNbGroup; iGroup++) {
+      aName = anInfo->GetGroupName(iGroup);
+      INITMSG(MYDEBUG, "aGroupName = '"<<aName<<"'\n");
+    }
+#endif
+
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetNames(TElemInfo& theInfo,
+             TInt theNb,
+             EEntiteMaillage theEntity,
+             EGeometrieElement theGeom,
+             TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    if (theGeom == eBALL)
+      theGeom = GetBallGeom(theInfo.myMeshInfo);
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+
+    TValueHolder<TString, char>                        aMeshName  (aMeshInfo.myName);
+    TValueHolder<TString, char>                        anElemNames(theInfo.myElemNames);
+    TValueHolder<EEntiteMaillage, med_entity_type>     anEntity   (theEntity);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom      (theGeom);
+
+    TErr aRet = MEDmeshEntityNameRd(myFile->Id(),
+                                    &aMeshName,
+                                    MED_NO_DT,
+                                    MED_NO_IT,
+                                    anEntity,
+                                    aGeom,
+                                    &anElemNames);
+
+    theInfo.myIsElemNames = aRet != 0? eFAUX : eVRAI ;
+
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetNames(const TElemInfo& theInfo,
+             EEntiteMaillage theEntity,
+             EGeometrieElement theGeom,
+             TErr* theErr)
+  {
+    SetNames(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetNames(const TElemInfo& theInfo,
+             EModeAcces theMode,
+             EEntiteMaillage theEntity,
+             EGeometrieElement theGeom,
+             TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    if (theGeom == eBALL)
+      theGeom = GetBallGeom(theInfo.myMeshInfo);
+
+    MED::TElemInfo& anInfo = const_cast<MED::TElemInfo&>(theInfo);
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+
+    TErr aRet = 0;
+    if (theInfo.myIsElemNames) {
+      TValueHolder<TString, char>                        aMeshName  (aMeshInfo.myName);
+      TValueHolder<TString, char>                        anElemNames(anInfo.myElemNames);
+      TValueHolder<EEntiteMaillage, med_entity_type>     anEntity   (theEntity);
+      TValueHolder<EGeometrieElement, med_geometry_type> aGeom      (theGeom);
+
+      aRet = MEDmeshEntityNameWr(myFile->Id(),
+                                 &aMeshName,
+                                 MED_NO_DT,
+                                 MED_NO_IT,
+                                 anEntity,
+                                  aGeom,
+                                 (TInt)anInfo.myElemNames->size(),
+                                 &anElemNames);
+      if (theErr)
+        *theErr = aRet;
+      else if (aRet < 0)
+        EXCEPTION(std::runtime_error, "SetNames - MEDmeshEntityNameWr(...)");
+    }
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetNumeration(TElemInfo& theInfo,
+                  TInt theNb,
+                  EEntiteMaillage theEntity,
+                  EGeometrieElement theGeom,
+                  TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    if (theGeom == eBALL)
+      theGeom = GetBallGeom(theInfo.myMeshInfo);
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+
+    TValueHolder<TString, char>                        aMeshName(aMeshInfo.myName);
+    TValueHolder<TElemNum, med_int>                    anElemNum(theInfo.myElemNum);
+    TValueHolder<EEntiteMaillage, med_entity_type>     anEntity (theEntity);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theGeom);
+
+    TErr aRet = MEDmeshEntityNumberRd(myFile->Id(),
+                                      &aMeshName,
+                                      MED_NO_DT,
+                                      MED_NO_IT,
+                                      anEntity,
+                                      aGeom,
+                                      &anElemNum);
+
+    theInfo.myIsElemNum = aRet != 0? eFAUX : eVRAI;
+
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetNumeration(const TElemInfo& theInfo,
+                  EEntiteMaillage theEntity,
+                  EGeometrieElement theGeom,
+                  TErr* theErr)
+  {
+    SetNumeration(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetNumeration(const TElemInfo& theInfo,
+                  EModeAcces theMode,
+                  EEntiteMaillage theEntity,
+                  EGeometrieElement theGeom,
+                  TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    if (theGeom == eBALL)
+      theGeom = GetBallGeom(theInfo.myMeshInfo);
+
+    MED::TElemInfo& anInfo = const_cast<MED::TElemInfo&>(theInfo);
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+
+    TErr aRet = 0;
+    if (theInfo.myIsElemNum) {
+      TValueHolder<TString, char>                        aMeshName(aMeshInfo.myName);
+      TValueHolder<TElemNum, med_int>                    anElemNum(anInfo.myElemNum);
+      TValueHolder<EEntiteMaillage, med_entity_type>     anEntity (theEntity);
+      TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theGeom);
+
+      aRet = MEDmeshEntityNumberWr(myFile->Id(),
+                                   &aMeshName,
+                                   MED_NO_DT,
+                                   MED_NO_IT,
+                                   anEntity,
+                                   aGeom,
+                                   (TInt)anInfo.myElemNum->size(),
+                                   &anElemNum);
+      if (theErr)
+        *theErr = aRet;
+      else if (aRet < 0)
+        EXCEPTION(std::runtime_error, "SetNumeration - MEDmeshEntityNumberWr(...)");
+    }
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetFamilies(TElemInfo& theInfo,
+                TInt theNb,
+                EEntiteMaillage theEntity,
+                EGeometrieElement theGeom,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    if (theGeom == eBALL)
+      theGeom = GetBallGeom(theInfo.myMeshInfo);
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+
+    TValueHolder<TString, char>                        aMeshName(aMeshInfo.myName);
+    TValueHolder<TElemNum, med_int>                    aFamNum  (theInfo.myFamNum);
+    TValueHolder<EEntiteMaillage, med_entity_type>     anEntity (theEntity);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theGeom);
+
+    TErr aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(),
+                                            &aMeshName,
+                                            MED_NO_DT,
+                                            MED_NO_IT,
+                                            anEntity,
+                                            aGeom,
+                                            &aFamNum);
+
+    if (aRet < 0) {
+      //        if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files
+      {
+        int aSize = (int)theInfo.myFamNum->size();
+        theInfo.myFamNum->clear();
+        theInfo.myFamNum->resize(aSize,0);
+        aRet = 0;
+      }
+      //        else
+      //          EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...) of CELLS");
+    }
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetFamilies(const TElemInfo& theInfo,
+                EEntiteMaillage theEntity,
+                EGeometrieElement theGeom,
+                TErr* theErr)
+  {
+    SetFamilies(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetFamilies(const TElemInfo& theInfo,
+                EModeAcces theMode,
+                EEntiteMaillage theEntity,
+                EGeometrieElement theGeom,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    if (theGeom == eBALL)
+      theGeom = GetBallGeom(theInfo.myMeshInfo);
+
+    MED::TElemInfo& anInfo = const_cast<MED::TElemInfo&>(theInfo);
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+
+    TValueHolder<TString, char>                        aMeshName(aMeshInfo.myName);
+    TValueHolder<TElemNum, med_int>                    aFamNum  (anInfo.myFamNum);
+    TValueHolder<EEntiteMaillage, med_entity_type>     anEntity (theEntity);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theGeom);
+
+    TErr aRet = MEDmeshEntityFamilyNumberWr(myFile->Id(),
+                                            &aMeshName,
+                                            MED_NO_DT,
+                                            MED_NO_IT,
+                                            anEntity,
+                                            aGeom,
+                                            (TInt)anInfo.myFamNum->size(),
+                                            &aFamNum);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetFamilies - MEDmeshEntityFamilyNumberWr(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbNodes(const MED::TMeshInfo& theMeshInfo,
+               TErr* theErr)
+  {
+    return GetNbNodes(theMeshInfo, eCOOR, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbNodes(const MED::TMeshInfo& theMeshInfo,
+               ETable theTable,
+               TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TValueHolder<ETable, med_data_type > aTable(theTable);
+    med_bool chgt,trsf;
+    return MEDmeshnEntity(myFile->Id(),
+                          &aMeshName,
+                          MED_NO_DT,
+                          MED_NO_IT,
+                          MED_NODE,
+                          MED_NO_GEOTYPE,
+                          aTable,
+                          MED_NO_CMODE,
+                          &chgt,
+                          &trsf);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetNodeInfo(MED::TNodeInfo& theInfo,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TValueHolder<TInt, med_int> aDim(aMeshInfo.myDim);
+    TValueHolder<TNodeCoord, med_float> aCoord(theInfo.myCoord);
+    TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theInfo.myModeSwitch);
+    TValueHolder<ERepere, med_axis_type> aSystem(theInfo.mySystem);
+    TValueHolder<TString, char> aCoordNames(theInfo.myCoordNames);
+    TValueHolder<TString, char> aCoordUnits(theInfo.myCoordUnits);
+    TValueHolder<TString, char> anElemNames(theInfo.myElemNames);
+    //TValueHolder<EBooleen, med_bool> anIsElemNames(theInfo.myIsElemNames);
+    TValueHolder<TElemNum, med_int> anElemNum(theInfo.myElemNum);
+    //TValueHolder<EBooleen, med_bool> anIsElemNum(theInfo.myIsElemNum);
+    TValueHolder<TElemNum, med_int> aFamNum(theInfo.myFamNum);
+    TValueHolder<TInt, med_int> aNbElem(theInfo.myNbElem);
+
+    TErr aRet = MEDmeshNodeCoordinateRd(myFile->Id(),
+                                        &aMeshName,
+                                        MED_NO_DT,
+                                        MED_NO_IT,
+                                        aModeSwitch,
+                                        &aCoord);
+
+    TErr aRet2 =MEDmeshEntityFamilyNumberRd(myFile->Id(),
+                                            &aMeshName,
+                                            MED_NO_DT,
+                                            MED_NO_IT,
+                                            MED_NODE,
+                                            MED_NO_GEOTYPE,
+                                            &aFamNum);
+    if (aRet2 < 0) {
+      //        if (aRet2 == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files
+      {
+        int mySize = (int)theInfo.myFamNum->size();
+        theInfo.myFamNum->clear();
+        theInfo.myFamNum->resize(mySize,0);
+      }
+      //        else
+      //          EXCEPTION(std::runtime_error,"GetNodeInfo - MEDmeshEntityFamilyNumberRd(...)");
+    }
+
+    if (MEDmeshEntityNameRd(myFile->Id(),
+                            &aMeshName,
+                            MED_NO_DT,
+                            MED_NO_IT,
+                            MED_NODE,
+                            MED_NO_GEOTYPE,
+                            &anElemNames) < 0) theInfo.myIsElemNames=eFAUX;
+
+    if (MEDmeshEntityNumberRd(myFile->Id(),
+                              &aMeshName,
+                              MED_NO_DT,
+                              MED_NO_IT,
+                              MED_NODE,
+                              MED_NO_GEOTYPE,
+                              &anElemNum) < 0) theInfo.myIsElemNum=eFAUX;
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetNodeInfo - MEDmeshNodeCoordinateRd(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetNodeInfo(const MED::TNodeInfo& theInfo,
+                TErr* theErr)
+  {
+    TErr aRet;
+    SetNodeInfo(theInfo, eLECTURE_ECRITURE, &aRet);
+
+    if (aRet < 0)
+      SetNodeInfo(theInfo, eLECTURE_AJOUT, &aRet);
+
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetNodeInfo(const MED::TNodeInfo& theInfo,
+                EModeAcces theMode,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TNodeInfo& anInfo = const_cast<MED::TNodeInfo&>(theInfo);
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+
+    TValueHolder<TString, char>                aMeshName    (aMeshInfo.myName);
+    TValueHolder<TNodeCoord, med_float>        aCoord       (anInfo.myCoord);
+    TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch  (anInfo.myModeSwitch);
+    TValueHolder<ERepere, med_axis_type>       aSystem      (anInfo.mySystem);
+    TValueHolder<TString, char>                aCoordNames  (anInfo.myCoordNames);
+    TValueHolder<TString, char>                aCoordUnits  (anInfo.myCoordUnits);
+    TValueHolder<TString, char>                anElemNames  (anInfo.myElemNames);
+    TValueHolder<EBooleen, med_bool>           anIsElemNames(anInfo.myIsElemNames);
+    TValueHolder<TElemNum, med_int>            anElemNum    (anInfo.myElemNum);
+    TValueHolder<EBooleen, med_bool>           anIsElemNum  (anInfo.myIsElemNum);
+    TValueHolder<TElemNum, med_int>            aFamNum      (anInfo.myFamNum);
+    TValueHolder<TInt, med_int>                aNbElem      (anInfo.myNbElem);
+
+    TErr aRet = MEDmeshNodeCoordinateWr(myFile->Id(),
+                                        &aMeshName,
+                                        MED_NO_DT,
+                                        MED_NO_IT,
+                                        MED_NO_DT,
+                                        aModeSwitch,
+                                        aNbElem,
+                                        &aCoord);
+
+    MEDmeshEntityFamilyNumberWr(myFile->Id(),
+                                &aMeshName,
+                                MED_NO_DT,
+                                MED_NO_IT,
+                                MED_NODE,
+                                MED_NO_GEOTYPE,
+                                aNbElem,
+                                &aFamNum);
+    if (anIsElemNames)
+      MEDmeshEntityNameWr(myFile->Id(),
+                          &aMeshName,
+                          MED_NO_DT,
+                          MED_NO_IT,
+                          MED_NODE,
+                          MED_NO_GEOTYPE,
+                          aNbElem,
+                          &anElemNames);
+    if (anIsElemNum)
+      MEDmeshEntityNumberWr(myFile->Id(),
+                            &aMeshName,
+                            MED_NO_DT,
+                            MED_NO_IT,
+                            MED_NODE,
+                            MED_NO_GEOTYPE,
+                            aNbElem,
+                            &anElemNum);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetNodeInfo - MEDmeshNodeCoordinateWr(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  PNodeInfo
+  TWrapper
+  ::CrNodeInfo(const PMeshInfo& theMeshInfo,
+               TInt theNbElem,
+               EModeSwitch theMode,
+               ERepere theSystem,
+               EBooleen theIsElemNum,
+               EBooleen theIsElemNames)
+  {
+    return PNodeInfo(new TTNodeInfo
+                     (theMeshInfo,
+                      theNbElem,
+                      theMode,
+                      theSystem,
+                      theIsElemNum,
+                      theIsElemNames));
+  }
+
+  //----------------------------------------------------------------------------
+  PNodeInfo
+  TWrapper
+  ::CrNodeInfo(const PMeshInfo& theMeshInfo,
+               const TFloatVector& theNodeCoords,
+               EModeSwitch theMode,
+               ERepere theSystem,
+               const TStringVector& theCoordNames,
+               const TStringVector& theCoordUnits,
+               const TIntVector& theFamilyNums,
+               const TIntVector& theElemNums,
+               const TStringVector& theElemNames)
+  {
+    return PNodeInfo(new TTNodeInfo
+                     (theMeshInfo,
+                      theNodeCoords,
+                      theMode,
+                      theSystem,
+                      theCoordNames,
+                      theCoordUnits,
+                      theFamilyNums,
+                      theElemNums,
+                      theElemNames));
+  }
+
+  //----------------------------------------------------------------------------
+  PNodeInfo
+  TWrapper
+  ::CrNodeInfo(const PMeshInfo& theMeshInfo,
+               const PNodeInfo& theInfo)
+  {
+    return PNodeInfo(new TTNodeInfo
+                     (theMeshInfo,
+                      theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PNodeInfo
+  TWrapper
+  ::GetPNodeInfo(const PMeshInfo& theMeshInfo,
+                 TErr* theErr)
+  {
+    TInt aNbElems = GetNbNodes(*theMeshInfo);
+    if (aNbElems == 0) {
+      return PNodeInfo();
+    }
+
+    PNodeInfo anInfo = CrNodeInfo(theMeshInfo, aNbElems);
+    GetNodeInfo(*anInfo, theErr);
+
+#ifdef _DEBUG_
+    TInt aDim = theMeshInfo->myDim;
+    TInt aNbElem = anInfo->GetNbElem();
+    INITMSG(MYDEBUG, "GetPNodeInfo: ");
+    {
+      INITMSG(MYDEBUG, "aCoords: "<<aNbElem<<": ");
+      TNodeCoord& aCoord = anInfo->myCoord;
+      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+        for (TInt iDim = 0, anId = iElem*aDim; iDim < aDim; iDim++, anId++) {
+          ADDMSG(MYVALUEDEBUG, aCoord[anId]<<",");
+        }
+        ADDMSG(MYVALUEDEBUG, " ");
+      }
+      ADDMSG(MYDEBUG, std::endl);
+
+      BEGMSG(MYVALUEDEBUG, "GetFamNum: ");
+      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+        ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", ");
+      }
+      ADDMSG(MYVALUEDEBUG, std::endl);
+
+      if (anInfo->IsElemNum()) {
+        BEGMSG(MYVALUEDEBUG, "GetElemNum: ");
+        for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+          ADDMSG(MYVALUEDEBUG, anInfo->GetElemNum(iElem)<<", ");
+        }
+        ADDMSG(MYVALUEDEBUG, std::endl);
+      }
+    }
+    ADDMSG(MYDEBUG, std::endl);
+#endif
+
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  PElemInfo
+  TWrapper
+  ::CrElemInfo(const PMeshInfo& theMeshInfo,
+               TInt theNbElem,
+               EBooleen theIsElemNum,
+               EBooleen theIsElemNames)
+  {
+    return PElemInfo(new TTElemInfo
+                     (theMeshInfo,
+                      theNbElem,
+                      theIsElemNum,
+                      theIsElemNames));
+  }
+
+  //----------------------------------------------------------------------------
+  PElemInfo
+  TWrapper
+  ::CrElemInfo(const PMeshInfo& theMeshInfo,
+               TInt theNbElem,
+               const TIntVector& theFamNum,
+               const TIntVector& aElemNum,
+               const TStringVector& aElemNames)
+  {
+    return PElemInfo(new TTElemInfo
+                     (theMeshInfo,
+                      theNbElem,
+                      theFamNum,
+                      aElemNum,
+                      aElemNames));
+  }
+
+  //----------------------------------------------------------------------------
+  PElemInfo
+  TWrapper
+  ::GetPElemInfo(const PMeshInfo& theMeshInfo,
+                 EEntiteMaillage theEntity,
+                 EGeometrieElement theGeom,
+                 EConnectivite theConnMode,
+                 TErr* theErr)
+  {
+    EMaillage aType = theMeshInfo->GetType();
+    if (aType == eNON_STRUCTURE) {
+      switch (theGeom) {
+      case ePOINT1:
+        if (theEntity == eNOEUD)
+          return GetPNodeInfo(theMeshInfo, theErr);
+        return GetPCellInfo(theMeshInfo, theEntity, theGeom, theConnMode, theErr);
+        break;
+      case ePOLYGONE:
+        return GetPPolygoneInfo(theMeshInfo, theEntity, theGeom, theConnMode);
+        break;
+      case ePOLYEDRE:
+        return GetPPolyedreInfo(theMeshInfo, theEntity, theGeom, theConnMode);
+        break;
+      default:
+        return GetPCellInfo(theMeshInfo, theEntity, theGeom, theConnMode, theErr);
+      }
+    }
+    else {
+      PGrilleInfo aGrille = GetPGrilleInfo(theMeshInfo);
+
+      TInt nbElems;
+      EBooleen theIsElemNum = eFAUX;
+      // nodes
+      switch (theGeom) {
+      case ePOINT1:
+        nbElems = aGrille->GetNbNodes();
+        theIsElemNum = eVRAI;
+        break;
+      case eSEG2:
+      case eQUAD4:
+      case eHEXA8:
+        nbElems = aGrille->GetNbCells();
+        break;
+      default:
+        nbElems = 0;
+      }
+
+      TIntVector aFamNum;
+      TIntVector aElemNum;
+      TStringVector aElemNames;
+
+      PElemInfo aElemInfo;
+
+      if (theGeom == ePOINT1) {
+        aElemInfo = CrElemInfo(theMeshInfo,
+                               nbElems,
+                               theIsElemNum);
+        MED::TElemInfo &aTElemInfo = *aElemInfo;
+
+        // must be reimplemente in connection with mesh type eSTRUCTURE
+        //      GetNumeration(aTElemInfo,
+        //                    nbElems,
+        //                    theEntity,
+        //                    theGeom,
+        //                    theErr);
+
+        GetFamilies(aTElemInfo,
+                    nbElems,
+                    theEntity,
+                    theGeom,
+                    theErr);
+
+        // must be reimplemente in connection with mesh type eSTRUCTURE
+        //      GetNames(aTElemInfo,
+        //               nbElems,
+        //               theEntity,
+        //               theGeom,
+        //               theErr);
+      }
+      else {
+        aElemInfo = CrElemInfo(theMeshInfo,
+                               nbElems,
+                               aFamNum,
+                               aElemNum,
+                               aElemNames);
+      }
+
+      return aElemInfo;
+    }
+    return PElemInfo();
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbPolygones(const MED::TMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   EConnectivite theConnMode,
+                   TErr* theErr)
+  {
+    return GetNbCells(theMeshInfo, theEntity, theGeom, theConnMode, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetPolygoneConnSize(const MED::TMeshInfo& theMeshInfo,
+                        EEntiteMaillage theEntity,
+                        EGeometrieElement theGeom,
+                        EConnectivite theConnMode,
+                        TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return 0;
+
+    MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    med_int aTaille = 0;
+    med_bool chgt,trsf;
+    aTaille=MEDmeshnEntity(myFile->Id(),
+                           &aMeshName,
+                           MED_NO_DT,
+                           MED_NO_IT,
+                           med_entity_type(theEntity),
+                           med_geometry_type(theGeom),
+                           MED_CONNECTIVITY,
+                           med_connectivity_mode(theConnMode),
+                           &chgt,
+                           &trsf);
+
+    if (aTaille < 0)
+      EXCEPTION(std::runtime_error, "GetPolygoneInfo - MEDmeshnEntity(...)");
+
+    return TInt(aTaille);
+  }
+
+  //-----------------------------------------------------------------
+  void
+  TWrapper
+  ::GetPolygoneInfo(MED::TPolygoneInfo& theInfo,
+                    TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+
+    TValueHolder<TString, char                       > aMeshName(aMeshInfo.myName);
+    TValueHolder<TElemNum, med_int                   > anIndex  (theInfo.myIndex);
+    TValueHolder<TElemNum, med_int                   > aConn    (theInfo.myConn);
+    TValueHolder<EEntiteMaillage, med_entity_type    > anEntity (theInfo.myEntity);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theInfo.myGeom);
+    TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(theInfo.myConnMode);
+    TInt aNbElem = (TInt)theInfo.myElemNum->size();
+
+    TErr aRet;
+    aRet = MEDmeshPolygon2Rd(myFile->Id(), &aMeshName,
+                             MED_NO_DT, MED_NO_IT,
+                             anEntity, aGeom,
+                             aConnMode, &anIndex, &aConn);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetPolygoneInfo - MEDmeshPolygonRd(...)");
+
+    if (theInfo.myIsElemNames) {
+      GetNames(theInfo, aNbElem, theInfo.myEntity, theInfo.myGeom, &aRet);
+      if (theErr)
+        *theErr = aRet;
+    }
+
+    if (theInfo.myIsElemNum) {
+      GetNumeration(theInfo, aNbElem, theInfo.myEntity, theInfo.myGeom, &aRet);
+      if (theErr)
+        *theErr = aRet;
+    }
+
+    GetFamilies(theInfo, aNbElem, theInfo.myEntity, theInfo.myGeom, &aRet);
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetPolygoneInfo(const MED::TPolygoneInfo& theInfo,
+                    TErr* theErr)
+  {
+    SetPolygoneInfo(theInfo, eLECTURE_ECRITURE, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetPolygoneInfo(const MED::TPolygoneInfo& theInfo,
+                    EModeAcces theMode,
+                    TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TPolygoneInfo& anInfo = const_cast<MED::TPolygoneInfo&>(theInfo);
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+
+    TValueHolder<TString, char                       > aMeshName(aMeshInfo.myName);
+    TValueHolder<TElemNum, med_int                   > anIndex  (anInfo.myIndex);
+    TValueHolder<TElemNum, med_int                   > aConn    (anInfo.myConn);
+    TValueHolder<EEntiteMaillage, med_entity_type    > anEntity (anInfo.myEntity);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (anInfo.myGeom);
+    TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(anInfo.myConnMode);
+
+    TErr aRet = MEDmeshPolygon2Wr(myFile->Id(), &aMeshName,
+                                  MED_NO_DT, MED_NO_IT, MED_UNDEF_DT,
+                                  anEntity, aGeom,
+                                  aConnMode, anInfo.myNbElem + 1,
+                                  &anIndex, &aConn);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetPolygoneInfo - MEDmeshPolygonWr(...)");
+
+    SetNames(anInfo, theInfo.myEntity, anInfo.myGeom, &aRet);
+    if (theErr)
+      *theErr = aRet;
+
+    SetNumeration(anInfo, theInfo.myEntity, anInfo.myGeom, &aRet);
+    if (theErr)
+      *theErr = aRet;
+
+    SetFamilies(anInfo, theInfo.myEntity, anInfo.myGeom, &aRet);
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  PPolygoneInfo
+  TWrapper
+  ::CrPolygoneInfo(const PMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   TInt theNbElem,
+                   TInt theConnSize,
+                   EConnectivite theConnMode,
+                   EBooleen theIsElemNum,
+                   EBooleen theIsElemNames)
+  {
+    return PPolygoneInfo(new TTPolygoneInfo
+                         (theMeshInfo,
+                          theEntity,
+                          theGeom,
+                          theNbElem,
+                          theConnSize,
+                          theConnMode,
+                          theIsElemNum,
+                          theIsElemNames));
+  }
+
+  //----------------------------------------------------------------------------
+  PPolygoneInfo
+  TWrapper
+  ::CrPolygoneInfo(const PMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   const TIntVector& theIndexes,
+                   const TIntVector& theConnectivities,
+                   EConnectivite theConnMode,
+                   const TIntVector& theFamilyNums,
+                   const TIntVector& theElemNums,
+                   const TStringVector& theElemNames)
+  {
+    return PPolygoneInfo(new TTPolygoneInfo
+                         (theMeshInfo,
+                          theEntity,
+                          theGeom,
+                          theIndexes,
+                          theConnectivities,
+                          theConnMode,
+                          theFamilyNums,
+                          theElemNums,
+                          theElemNames));
+  }
+
+  //----------------------------------------------------------------------------
+  PPolygoneInfo
+  TWrapper
+  ::CrPolygoneInfo(const PMeshInfo& theMeshInfo,
+                   const PPolygoneInfo& theInfo)
+  {
+    return PPolygoneInfo(new TTPolygoneInfo
+                         (theMeshInfo,
+                          theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PPolygoneInfo
+  TWrapper
+  ::GetPPolygoneInfo(const PMeshInfo& theMeshInfo,
+                     EEntiteMaillage theEntity,
+                     EGeometrieElement theGeom,
+                     EConnectivite theConnMode)
+  {
+    if (theMeshInfo->GetType() != eNON_STRUCTURE)
+      return PPolygoneInfo();
+
+    TInt aNbElem = GetNbPolygones(theMeshInfo, theEntity, theGeom, theConnMode);
+    TInt aConnSize = GetPolygoneConnSize(theMeshInfo, theEntity, theGeom, theConnMode);
+    PPolygoneInfo anInfo = CrPolygoneInfo(theMeshInfo, theEntity, theGeom, aNbElem, aConnSize, theConnMode);
+    GetPolygoneInfo(anInfo);
+
+#ifdef _DEBUG_
+    INITMSG(MYDEBUG, "GetPPolygoneInfo"<<
+            " - theGeom = "<<theGeom<<
+            "; aNbElem = "<<aNbElem<<": ");
+    for (TInt iElem = 1; iElem < aNbElem; iElem++) {
+      TCConnSlice aConnSlice = anInfo->GetConnSlice(iElem);
+      TInt aConnDim = aConnSlice.size();
+      for (TInt iConn = 0; iConn < aConnDim; iConn++) {
+        ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<",");
+      }
+      ADDMSG(MYDEBUG, " ");
+    }
+    ADDMSG(MYDEBUG, std::endl);
+#endif
+
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbPolyedres(const MED::TMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   EConnectivite theConnMode,
+                   TErr* theErr)
+  {
+    return GetNbCells(theMeshInfo, theEntity, theGeom, theConnMode, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetPolyedreConnSize(const TMeshInfo& theMeshInfo,
+                        TInt& theNbFaces,
+                        TInt& theConnSize,
+                        EConnectivite theConnMode,
+                        TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      EXCEPTION(std::runtime_error, "GetPolyedreConnSize - (...)");
+
+    MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(theConnMode);
+    //TValueHolder<TInt, med_int> aNbFaces(theNbFaces);
+    //TValueHolder<TInt, med_int> aConnSize(theConnSize);
+
+    med_bool chgt, trsf;
+    theNbFaces = MEDmeshnEntity(myFile->Id(),
+                                &aMeshName,
+                                MED_NO_DT,
+                                MED_NO_IT,
+                                MED_CELL,
+                                MED_POLYHEDRON,
+                                MED_INDEX_NODE,
+                                aConnMode,
+                                &chgt,
+                                &trsf);
+
+    theConnSize = MEDmeshnEntity(myFile->Id(),
+                                 &aMeshName,
+                                 MED_NO_DT,
+                                 MED_NO_IT,
+                                 MED_CELL,
+                                 MED_POLYHEDRON,
+                                 MED_CONNECTIVITY,
+                                 aConnMode,
+                                 &chgt,
+                                 &trsf);
+
+    if (theNbFaces < 0 || theConnSize<0)
+      EXCEPTION(std::runtime_error, "GetPolygoneInfo - MEDmeshnEntity(...)");
+
+  }
+
+  //-----------------------------------------------------------------
+  void
+  TWrapper
+  ::GetPolyedreInfo(TPolyedreInfo& theInfo,
+                    TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TInt aNbElem = (TInt)theInfo.myElemNum->size();
+    TValueHolder<TElemNum, med_int> anIndex(theInfo.myIndex);
+    TValueHolder<TElemNum, med_int> aFaces(theInfo.myFaces);
+    TValueHolder<TElemNum, med_int> aConn(theInfo.myConn);
+    TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(theInfo.myConnMode);
+
+    TErr aRet;
+    aRet = MEDmeshPolyhedronRd(myFile->Id(),
+                               &aMeshName,
+                               MED_NO_DT,
+                               MED_NO_IT,
+                               MED_CELL,
+                               aConnMode,
+                               &anIndex,
+                               &aFaces,
+                               &aConn);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetPolygoneInfo - MEDmeshPolyhedronRd(...)");
+
+    if (theInfo.myIsElemNames) {
+      GetNames(theInfo, aNbElem, theInfo.myEntity, ePOLYEDRE, &aRet);
+      if (theErr)
+        *theErr = aRet;
+    }
+
+    if (theInfo.myIsElemNum) {
+      GetNumeration(theInfo, aNbElem, theInfo.myEntity, ePOLYEDRE, &aRet);
+      if (theErr)
+        *theErr = aRet;
+    }
+
+    GetFamilies(theInfo, aNbElem, theInfo.myEntity, ePOLYEDRE, &aRet);
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetPolyedreInfo(const TPolyedreInfo& theInfo,
+                    TErr* theErr)
+  {
+    SetPolyedreInfo(theInfo, eLECTURE_ECRITURE, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetPolyedreInfo(const MED::TPolyedreInfo& theInfo,
+                    EModeAcces theMode,
+                    TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TPolyedreInfo& anInfo = const_cast<MED::TPolyedreInfo&>(theInfo);
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TValueHolder<TElemNum, med_int> anIndex(anInfo.myIndex);
+    TValueHolder<TElemNum, med_int> aFaces(anInfo.myFaces);
+    TValueHolder<TElemNum, med_int> aConn(anInfo.myConn);
+    TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(anInfo.myConnMode);
+
+    TErr aRet;
+    aRet = MEDmeshPolyhedronWr(myFile->Id(),
+                               &aMeshName,
+                               MED_NO_DT,
+                               MED_NO_IT,
+                               MED_UNDEF_DT,
+                               MED_CELL,
+                               aConnMode,
+                               anInfo.myNbElem+1,
+                               &anIndex,
+                               (TInt)anInfo.myFaces->size(),
+                               &aFaces,
+                               &aConn);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetPolyedreInfo - MEDmeshPolyhedronWr(...)");
+
+    TValueHolder<EEntiteMaillage, med_entity_type> anEntity(anInfo.myEntity);
+
+    if (theInfo.myIsElemNames) {
+      TValueHolder<TString, char> anElemNames(anInfo.myElemNames);
+      aRet = MEDmeshEntityNameWr(myFile->Id(),
+                                 &aMeshName,
+                                 MED_NO_DT,
+                                 MED_NO_IT,
+                                 anEntity,
+                                 MED_POLYHEDRON,
+                                 (TInt)anInfo.myElemNames->size(),
+                                 &anElemNames);
+      if (theErr)
+        *theErr = aRet;
+      else if (aRet < 0)
+        EXCEPTION(std::runtime_error, "SetPolyedreInfo - MEDmeshEntityNameWr(...)");
+    }
+
+    if (theInfo.myIsElemNum) {
+      TValueHolder<TElemNum, med_int> anElemNum(anInfo.myElemNum);
+      aRet = MEDmeshEntityNumberWr(myFile->Id(),
+                                   &aMeshName,
+                                   MED_NO_DT,
+                                   MED_NO_IT,
+                                   anEntity,
+                                   MED_POLYHEDRON,
+                                   (TInt)anInfo.myElemNum->size(),
+                                   &anElemNum);
+      if (theErr)
+        *theErr = aRet;
+      else if (aRet < 0)
+        EXCEPTION(std::runtime_error, "SetPolyedreInfo - MEDmeshEntityNumberWr(...)");
+    }
+
+    TValueHolder<TElemNum, med_int> aFamNum(anInfo.myFamNum);
+    aRet = MEDmeshEntityFamilyNumberWr(myFile->Id(),
+                                       &aMeshName,
+                                       MED_NO_DT,
+                                       MED_NO_IT,
+                                       anEntity,
+                                       MED_POLYHEDRON,
+                                       (TInt)anInfo.myFamNum->size(),
+                                       &aFamNum);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetPolyedreInfo - MEDmeshEntityFamilyNumberWr(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  PPolyedreInfo
+  TWrapper
+  ::CrPolyedreInfo(const PMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   TInt theNbElem,
+                   TInt theNbFaces,
+                   TInt theConnSize,
+                   EConnectivite theConnMode,
+                   EBooleen theIsElemNum,
+                   EBooleen theIsElemNames)
+  {
+    return PPolyedreInfo(new TTPolyedreInfo
+                         (theMeshInfo,
+                          theEntity,
+                          theGeom,
+                          theNbElem,
+                          theNbFaces,
+                          theConnSize,
+                          theConnMode,
+                          theIsElemNum,
+                          theIsElemNames));
+  }
+
+  //----------------------------------------------------------------------------
+  PPolyedreInfo
+  TWrapper
+  ::CrPolyedreInfo(const PMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   const TIntVector& theIndexes,
+                   const TIntVector& theFaces,
+                   const TIntVector& theConnectivities,
+                   EConnectivite theConnMode,
+                   const TIntVector& theFamilyNums,
+                   const TIntVector& theElemNums,
+                   const TStringVector& theElemNames)
+  {
+    return PPolyedreInfo(new TTPolyedreInfo
+                         (theMeshInfo,
+                          theEntity,
+                          theGeom,
+                          theIndexes,
+                          theFaces,
+                          theConnectivities,
+                          theConnMode,
+                          theFamilyNums,
+                          theElemNums,
+                          theElemNames));
+  }
+
+  //----------------------------------------------------------------------------
+  PPolyedreInfo
+  TWrapper
+  ::CrPolyedreInfo(const PMeshInfo& theMeshInfo,
+                   const PPolyedreInfo& theInfo)
+  {
+    return PPolyedreInfo(new TTPolyedreInfo
+                         (theMeshInfo,
+                          theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PPolyedreInfo
+  TWrapper
+  ::GetPPolyedreInfo(const PMeshInfo& theMeshInfo,
+                     EEntiteMaillage theEntity,
+                     EGeometrieElement theGeom,
+                     EConnectivite theConnMode)
+  {
+    if (theMeshInfo->GetType() != eNON_STRUCTURE)
+      return PPolyedreInfo();
+    TInt aNbElem = GetNbPolyedres(theMeshInfo, theEntity, theGeom, theConnMode);
+    TInt aNbFaces, aConnSize;
+    GetPolyedreConnSize(theMeshInfo, aNbFaces, aConnSize, theConnMode);
+    PPolyedreInfo anInfo = CrPolyedreInfo(theMeshInfo, theEntity, theGeom, aNbElem, aNbFaces, aConnSize, theConnMode);
+    GetPolyedreInfo(anInfo);
+
+#ifdef _DEBUG_
+    INITMSG(MYDEBUG, "GetPPolyedreInfo"<<
+            " - theGeom = "<<theGeom<<
+            "; aNbElem = "<<aNbElem<<": ");
+    for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+      TCConnSliceArr aConnSliceArr = anInfo->GetConnSliceArr(iElem);
+      TInt aNbFaces = aConnSliceArr.size();
+      ADDMSG(MYDEBUG, "{");
+      for (TInt iFace = 0; iFace < aNbFaces; iFace++) {
+        TCConnSlice aConnSlice = aConnSliceArr[iFace];
+        TInt aNbConn = aConnSlice.size();
+        ADDMSG(MYDEBUG, "[");
+        for (TInt iConn = 0; iConn < aNbConn; iConn++) {
+          ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<",");
+        }
+        ADDMSG(MYDEBUG, "] ");
+      }
+      ADDMSG(MYDEBUG, "} ");
+    }
+    ADDMSG(MYDEBUG, std::endl);
+#endif
+
+    return anInfo;
+  }
+
+  //-----------------------------------------------------------------
+  TEntityInfo
+  TWrapper
+  ::GetEntityInfo(const MED::TMeshInfo& theMeshInfo,
+                  EConnectivite theConnMode,
+                  TErr* theErr)
+  {
+    TEntityInfo anInfo;
+
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return anInfo;
+
+    if (theMeshInfo.GetType() == eNON_STRUCTURE) {
+      TInt aNbElem = GetNbNodes(theMeshInfo);
+      if (aNbElem > 0) {
+        anInfo[eNOEUD][ePOINT1] = aNbElem;
+        const TEntity2GeomSet& anEntity2GeomSet = GetEntity2GeomSet();
+        TEntity2GeomSet::const_iterator anIter = anEntity2GeomSet.begin();
+        TEntity2GeomSet::const_iterator anIterEnd = anEntity2GeomSet.end();
+        for (; anIter != anIterEnd; anIter++) {
+          const EEntiteMaillage& anEntity = anIter->first;
+          const TGeomSet& aGeomSet = anIter->second;
+          TGeomSet::const_iterator anIter2 = aGeomSet.begin();
+          TGeomSet::const_iterator anIterEnd2 = aGeomSet.end();
+          for (; anIter2 != anIterEnd2; anIter2++) {
+            const EGeometrieElement& aGeom = *anIter2;
+            aNbElem = GetNbCells(theMeshInfo, anEntity, aGeom, theConnMode, theErr);
+            if (aNbElem > 0) {
+              if (anEntity == eSTRUCT_ELEMENT) {
+                const TInt nbStructTypes = aNbElem;
+                for (TInt structType = 0; structType < nbStructTypes; ++structType) {
+                  // check type name to keep only "MED_BALL" structured element
+                  TValueHolder<TString, char> aMeshName((TString&) theMeshInfo.myName);
+                  char                        geotypename[ MED_NAME_SIZE + 1] = "";
+                  med_geometry_type           geotype;
+                  MEDmeshEntityInfo(myFile->Id(), &aMeshName, MED_NO_DT, MED_NO_IT,
+                                    med_entity_type(anEntity), structType+1,
+                                    geotypename, &geotype);
+                  if (strcmp(geotypename, MED_BALL_NAME) == 0) {
+                    aNbElem = GetNbCells(theMeshInfo, anEntity, EGeometrieElement(geotype),
+                                         theConnMode, theErr);
+                    if (aNbElem > 0)
+                      anInfo[anEntity][EGeometrieElement(geotype)] = aNbElem;
+                  }
+                }
+              }
+              else {
+                anInfo[anEntity][aGeom] = aNbElem;
+              }
+            }
+          }
+        }
+      }
+    }
+    else { // eSTRUCTURE
+      EGrilleType aGrilleType;
+      TInt aNbNodes = 1;
+      TInt aNbElem  = 1;
+      TInt aNbSub   = 0;
+      TInt aDim = theMeshInfo.GetDim();
+      EGeometrieElement aGeom, aSubGeom;
+      EEntiteMaillage aSubEntity = eMAILLE;
+
+      GetGrilleType(theMeshInfo, aGrilleType);
+
+      TIntVector aStruct(aDim);
+      if (aGrilleType == eGRILLE_STANDARD)
+        {
+          GetGrilleStruct(theMeshInfo, aStruct, theErr);
+        }
+      else
+        { // eGRILLE_CARTESIENNE and eGRILLE_POLAIRE
+          ETable aTable[3] = { eCOOR_IND1, eCOOR_IND2, eCOOR_IND3 };
+          for (med_int anAxis = 0; anAxis < aDim; anAxis++)
+            aStruct[ anAxis ] = GetNbNodes(theMeshInfo, aTable[anAxis]);
+        }
+      for (med_int i = 0; i < aDim; i++) {
+        aNbNodes = aNbNodes * aStruct[i];
+        aNbElem = aNbElem * (aStruct[i] - 1);
+      }
+      switch (aDim) {
+      case 1:
+        aGeom = eSEG2;
+        break;
+      case 2:
+        aGeom = eQUAD4;
+        aSubGeom = eSEG2;
+        aSubEntity = eARETE;
+        aNbSub =
+          (aStruct[0])   * (aStruct[1]-1) +
+          (aStruct[0]-1) * (aStruct[1]);
+        break;
+      case 3:
+        aGeom = eHEXA8;
+        aSubGeom = eQUAD4;
+        aSubEntity = eFACE;
+        aNbSub =
+          (aStruct[0])   * (aStruct[1]-1) * (aStruct[2]-1) +
+          (aStruct[0]-1) * (aStruct[1])   * (aStruct[2]-1) +
+          (aStruct[0]-1) * (aStruct[1]-1) * (aStruct[2]);
+        break;
+      }
+      anInfo[eNOEUD][ePOINT1] = aNbNodes;
+      anInfo[eMAILLE][aGeom] = aNbElem;
+      if (aDim > 1)
+        anInfo[aSubEntity][aSubGeom] = aNbSub;
+    }
+    return anInfo;
+  }
+
+  //-----------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbCells(const MED::TMeshInfo& theMeshInfo,
+               EEntiteMaillage theEntity,
+               EGeometrieElement theGeom,
+               EConnectivite theConnMode,
+               TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    med_bool chgt, trsf;
+    switch (theGeom)
+      {
+      case MED::ePOLYGONE:
+      case MED::ePOLYGON2:
+        {
+          return MEDmeshnEntity(myFile->Id(), &aMeshName,
+                                MED_NO_DT, MED_NO_IT,
+                                med_entity_type(theEntity), med_geometry_type(theGeom),
+                                MED_INDEX_NODE, med_connectivity_mode(theConnMode),
+                                &chgt, &trsf)-1;
+        }
+      case MED::ePOLYEDRE:
+        {
+          return MEDmeshnEntity(myFile->Id(), &aMeshName,
+                                MED_NO_DT, MED_NO_IT,
+                                med_entity_type(theEntity), MED_POLYHEDRON,
+                                MED_INDEX_FACE, med_connectivity_mode(theConnMode),
+                                &chgt, &trsf)-1;
+        }
+      case MED::eBALL:
+        {
+          return GetNbBalls(theMeshInfo);
+        }
+      default:
+        {
+          return MEDmeshnEntity(myFile->Id(), &aMeshName,
+                                MED_NO_DT, MED_NO_IT,
+                                med_entity_type(theEntity), med_geometry_type(theGeom),
+                                MED_CONNECTIVITY, med_connectivity_mode(theConnMode),
+                                &chgt, &trsf);
+        }
+      }
+    return 0;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetCellInfo(MED::TCellInfo& theInfo,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+
+    TValueHolder<TString, char>                        aMeshName    (aMeshInfo.myName);
+    TValueHolder<TElemNum, med_int>                    aConn        (theInfo.myConn);
+    TValueHolder<EModeSwitch, med_switch_mode>         aModeSwitch  (theInfo.myModeSwitch);
+    TValueHolder<TString, char>                        anElemNames  (theInfo.myElemNames);
+    TValueHolder<EBooleen, med_bool>                   anIsElemNames(theInfo.myIsElemNames);
+    TValueHolder<TElemNum, med_int>                    anElemNum    (theInfo.myElemNum);
+    TValueHolder<EBooleen, med_bool>                   anIsElemNum  (theInfo.myIsElemNum);
+    TValueHolder<TElemNum, med_int>                    aFamNum      (theInfo.myFamNum);
+    TValueHolder<EBooleen, med_bool>                   anIsFamNum   (theInfo.myIsFamNum);
+    TValueHolder<EEntiteMaillage, med_entity_type>     anEntity     (theInfo.myEntity);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom        (theInfo.myGeom);
+    TValueHolder<EConnectivite, med_connectivity_mode> aConnMode    (theInfo.myConnMode);
+
+    TErr aRet;
+    aRet = MEDmeshElementRd(myFile->Id(),
+                            &aMeshName,
+                            MED_NO_DT,
+                            MED_NO_IT,
+                            anEntity,
+                            aGeom,
+                            aConnMode,
+                            aModeSwitch,
+                            &aConn,
+                            &anIsElemNames,
+                            &anElemNames,
+                            &anIsElemNum,
+                            &anElemNum,
+                            &anIsFamNum,
+                            &aFamNum);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetCellInfo - MEDmeshElementRd(...)");
+
+    if (anIsFamNum == MED_FALSE)
+      {
+        int mySize = (int) theInfo.myFamNum->size();
+        theInfo.myFamNum->clear();
+        theInfo.myFamNum->resize(mySize, 0);
+      }
+
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetCellInfo(const MED::TCellInfo& theInfo,
+                TErr* theErr)
+  {
+    SetCellInfo(theInfo, eLECTURE_ECRITURE, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetCellInfo(const MED::TCellInfo& theInfo,
+                EModeAcces theMode,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TCellInfo& anInfo    = const_cast<MED::TCellInfo&>(theInfo);
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+
+    TValueHolder<TString, char>                        aMeshName    (aMeshInfo.myName);
+    TValueHolder<TElemNum, med_int>                    aConn        (anInfo.myConn);
+    TValueHolder<EModeSwitch, med_switch_mode>         aModeSwitch  (anInfo.myModeSwitch);
+    TValueHolder<TString, char>                        anElemNames  (anInfo.myElemNames);
+    TValueHolder<EBooleen, med_bool>                   anIsElemNames(anInfo.myIsElemNames);
+    TValueHolder<TElemNum, med_int>                    anElemNum    (anInfo.myElemNum);
+    TValueHolder<EBooleen, med_bool>                   anIsElemNum  (anInfo.myIsElemNum);
+    TValueHolder<TElemNum, med_int>                    aFamNum      (anInfo.myFamNum);
+    TValueHolder<EBooleen, med_bool>                   anIsFamNum   (anInfo.myIsFamNum);
+    TValueHolder<EEntiteMaillage, med_entity_type>     anEntity     (anInfo.myEntity);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom        (anInfo.myGeom);
+    TValueHolder<EConnectivite, med_connectivity_mode> aConnMode    (anInfo.myConnMode);
+    TValueHolder<TInt, med_int>                        aNbElem      (anInfo.myNbElem);
+
+    TErr aRet;
+    aRet = MEDmeshElementConnectivityWr(myFile->Id(),
+                                        &aMeshName,
+                                        MED_NO_DT,
+                                        MED_NO_IT,
+                                        MED_UNDEF_DT,
+                                        anEntity,
+                                        aGeom,
+                                        aConnMode,
+                                        aModeSwitch,
+                                        aNbElem,
+                                        &aConn);
+
+    MEDmeshEntityFamilyNumberWr(myFile->Id(),
+                                &aMeshName,
+                                MED_NO_DT,
+                                MED_NO_IT,
+                                anEntity,
+                                aGeom,
+                                aNbElem,
+                                &aFamNum);
+    if (anIsElemNames)
+      MEDmeshEntityNameWr(myFile->Id(),
+                          &aMeshName,
+                          MED_NO_DT,
+                          MED_NO_IT,
+                          anEntity,
+                          aGeom,
+                          aNbElem,
+                          &anElemNames);
+    if (anIsElemNum)
+      MEDmeshEntityNumberWr(myFile->Id(),
+                            &aMeshName,
+                            MED_NO_DT,
+                            MED_NO_IT,
+                            anEntity,
+                            aGeom,
+                            aNbElem,
+                            &anElemNum);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetCellInfo - MEDmeshElementWr(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  PCellInfo
+  TWrapper
+  ::CrCellInfo(const PMeshInfo& theMeshInfo,
+               EEntiteMaillage theEntity,
+               EGeometrieElement theGeom,
+               TInt theNbElem,
+               EConnectivite theConnMode,
+               EBooleen theIsElemNum,
+               EBooleen theIsElemNames,
+               EModeSwitch theMode)
+  {
+    return PCellInfo(new TTCellInfo
+                     (theMeshInfo,
+                      theEntity,
+                      theGeom,
+                      theNbElem,
+                      theConnMode,
+                      theIsElemNum,
+                      theIsElemNames,
+                      theMode));
+  }
+
+  //----------------------------------------------------------------------------
+  PCellInfo
+  TWrapper
+  ::CrCellInfo(const PMeshInfo& theMeshInfo,
+               EEntiteMaillage theEntity,
+               EGeometrieElement theGeom,
+               const TIntVector& theConnectivities,
+               EConnectivite theConnMode,
+               const TIntVector& theFamilyNums,
+               const TIntVector& theElemNums,
+               const TStringVector& theElemNames,
+               EModeSwitch theMode)
+  {
+    return PCellInfo(new TTCellInfo
+                     (theMeshInfo,
+                      theEntity,
+                      theGeom,
+                      theConnectivities,
+                      theConnMode,
+                      theFamilyNums,
+                      theElemNums,
+                      theElemNames,
+                      theMode));
+  }
+
+  //----------------------------------------------------------------------------
+  PCellInfo
+  TWrapper
+  ::CrCellInfo(const PMeshInfo& theMeshInfo,
+               const PCellInfo& theInfo)
+  {
+    return PCellInfo(new TTCellInfo
+                     (theMeshInfo,
+                      theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PCellInfo
+  TWrapper
+  ::GetPCellInfo(const PMeshInfo& theMeshInfo,
+                 EEntiteMaillage theEntity,
+                 EGeometrieElement theGeom,
+                 EConnectivite theConnMode,
+                 TErr* theErr)
+  {
+    if (theMeshInfo->GetType() != eNON_STRUCTURE)
+      return PCellInfo();
+    TInt aNbElem = GetNbCells(theMeshInfo, theEntity, theGeom, theConnMode);
+    PCellInfo anInfo = CrCellInfo(theMeshInfo, theEntity, theGeom, aNbElem, theConnMode);
+    GetCellInfo(anInfo, theErr);
+
+#ifdef _DEBUG_
+    TInt aConnDim = anInfo->GetConnDim();
+    INITMSG(MYDEBUG, "GetPCellInfo - theEntity = "<<theEntity<<"; theGeom = "<<theGeom<<"; aConnDim: "<<aConnDim<<"\n");
+    BEGMSG(MYDEBUG, "GetPCellInfo - aNbElem: "<<aNbElem<<": ");
+    for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+      TCConnSlice aConnSlice = anInfo->GetConnSlice(iElem);
+      for (TInt iConn = 0; iConn < aConnDim; iConn++) {
+        ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<",");
+      }
+      ADDMSG(MYVALUEDEBUG, " ");
+    }
+    ADDMSG(MYDEBUG, std::endl);
+
+    BEGMSG(MYVALUEDEBUG, "GetPCellInfo - GetFamNum: ");
+    for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+      ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", ");
+    }
+    ADDMSG(MYVALUEDEBUG, std::endl);
+
+    if (anInfo->IsElemNum()) {
+      BEGMSG(MYVALUEDEBUG, "GetPCellInfo - GetElemNum: ");
+      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+        ADDMSG(MYVALUEDEBUG, anInfo->GetElemNum(iElem)<<", ");
+      }
+      ADDMSG(MYVALUEDEBUG, std::endl);
+    }
+    ADDMSG(MYDEBUG, std::endl);
+#endif
+
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  EGeometrieElement
+  TWrapper
+  ::GetBallGeom(const TMeshInfo& theMeshInfo)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE);
+
+    // read med_geometry_type of "MED_BALL" element
+    char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME;
+    return EGeometrieElement(MEDstructElementGeotype(myFile->Id(), geotypename));
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbBalls(const TMeshInfo& theMeshInfo)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE);
+
+    EGeometrieElement ballType = GetBallGeom(theMeshInfo);
+    if (ballType < 0)
+      return 0;
+
+    return GetNbCells(theMeshInfo, eSTRUCT_ELEMENT, ballType, eNOD);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetBallInfo(TBallInfo& theInfo,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    // check geometry of MED_BALL
+    if (theInfo.myGeom == eBALL)
+      {
+        theInfo.myGeom = GetBallGeom(*theInfo.myMeshInfo);
+        if (theInfo.myGeom < 0) {
+          if (!theErr)
+            EXCEPTION(std::runtime_error, "GetBallInfo - no balls in the mesh");
+          *theErr = theInfo.myGeom;
+          return;
+        }
+      }
+
+    // read nodes ids
+    GetCellInfo(theInfo);
+
+    // read diameters
+    TValueHolder<TString, char>                        aMeshName (theInfo.myMeshInfo->myName);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom     (theInfo.myGeom);
+    TValueHolder<TFloatVector, void>                   aDiam     (theInfo.myDiameters);
+    char varattname[ MED_NAME_SIZE + 1] = MED_BALL_DIAMETER;
+
+    TErr aRet = MEDmeshStructElementVarAttRd(myFile->Id(), &aMeshName,
+                                             MED_NO_DT, MED_NO_IT,
+                                             aGeom,
+                                             varattname,
+                                             &aDiam);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetBallInfo - pb at reading diameters");
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetBallInfo(const TBallInfo& theInfo,
+                TErr* theErr)
+  {
+    SetBallInfo(theInfo, eLECTURE_ECRITURE, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetBallInfo(const TBallInfo& theInfo,
+                EModeAcces theMode,
+                TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    TErr ret;
+    char ballsupportname[MED_NAME_SIZE+1] = "BALL_SUPPORT_MESH";
+    EGeometrieElement ballGeom = GetBallGeom(*theInfo.myMeshInfo);
+    if (ballGeom < 0)
+      {
+        // no ball model in the file, create support mesh for it
+        char dummyname [MED_NAME_SIZE*3+1] = "";
+        if ((ret = MEDsupportMeshCr(myFile->Id(),
+                                    ballsupportname,
+                                    theInfo.myMeshInfo->GetSpaceDim(),
+                                    theInfo.myMeshInfo->GetDim(),
+                                    "Support mesh for a ball model",
+                                    MED_CARTESIAN,
+                                    /*axisname=*/dummyname,
+                                    /*unitname=*/dummyname)) < 0) {
+          if (!theErr)
+            EXCEPTION(std::runtime_error, "SetBallInfo - MEDsupportMeshCr");
+          *theErr = ret;
+          return;
+        }
+        // write coordinates of 1 node
+        med_float coord[3] = {0, 0, 0};
+        if ((ret = MEDmeshNodeCoordinateWr(myFile->Id(),
+                                           ballsupportname, MED_NO_DT, MED_NO_IT, 0.0,
+                                           MED_FULL_INTERLACE, /*nnode=*/1, coord)) < 0) {
+          if (!theErr)
+            EXCEPTION(std::runtime_error, "SetBallInfo - MEDmeshNodeCoordinateWr");
+          *theErr = ret;
+          return;
+        }
+        // ball model creation
+        char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME;
+        if ((ballGeom = (EGeometrieElement) MEDstructElementCr(myFile->Id(),
+                                                               geotypename,
+                                                               theInfo.myMeshInfo->GetSpaceDim(),
+                                                               ballsupportname,
+                                                               MED_NODE,MED_NONE)) < 0) {
+          if (!theErr)
+            EXCEPTION(std::runtime_error, "SetBallInfo - MEDstructElementCr");
+          *theErr = ret;
+          return;
+        }
+        // create diameter attribute
+        if ((ret = MEDstructElementVarAttCr(myFile->Id(),
+                                            geotypename, MED_BALL_DIAMETER,
+                                            MED_ATT_FLOAT64, /*ncomp=*/1)) < 0) {
+          if (!theErr)
+            EXCEPTION(std::runtime_error, "SetBallInfo - MEDstructElementVarAttCr");
+          *theErr = ret;
+          return;
+        }
+      } // ballGeom < 0
+
+    TBallInfo& aBallInfo = ((TBallInfo&) theInfo);
+    aBallInfo.myGeom = ballGeom;
+
+    // write node ids
+    SetCellInfo(theInfo, theMode, theErr);
+    if (theErr && theErr < 0)
+      return;
+
+    // write diameter
+    TValueHolder<TString, char>                        aMeshName (aBallInfo.myMeshInfo->myName);
+    TValueHolder<EGeometrieElement, med_geometry_type> aGeom     (aBallInfo.myGeom);
+    TValueHolder<TFloatVector, void>                   aDiam     (aBallInfo.myDiameters);
+    ret = MEDmeshStructElementVarAttWr(myFile->Id(), &aMeshName,
+                                       MED_NO_DT, MED_NO_IT,
+                                       aGeom, MED_BALL_DIAMETER,
+                                       theInfo.myNbElem, &aDiam);
+    if (theErr)
+      *theErr = ret;
+    else if (ret < 0)
+      EXCEPTION(std::runtime_error, "SetBallInfo - MEDmeshStructElementVarAttWr");
+  }
+
+  //----------------------------------------------------------------------------
+  PBallInfo
+  TWrapper
+  ::CrBallInfo(const PMeshInfo& theMeshInfo,
+               TInt theNbBalls,
+               EBooleen theIsElemNum)
+  {
+    return PBallInfo(new TTBallInfo(theMeshInfo, theNbBalls, theIsElemNum));
+  }
+
+  //----------------------------------------------------------------------------
+  PBallInfo
+  TWrapper
+  ::CrBallInfo(const PMeshInfo& theMeshInfo,
+               const TIntVector& theNodes,
+               TFloatVector& theDiameters,
+               const TIntVector& theFamilyNums,
+               const TIntVector& theElemNums)
+  {
+    return PBallInfo(new TTBallInfo(theMeshInfo, theNodes, theDiameters,
+                                    theFamilyNums, theElemNums));
+  }
+
+  //----------------------------------------------------------------------------
+  PBallInfo
+  TWrapper
+  ::CrBallInfo(const PMeshInfo& theMeshInfo,
+               const PBallInfo& theInfo)
+  {
+    return PBallInfo(new TTBallInfo(theMeshInfo, theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PBallInfo
+  TWrapper
+  ::GetPBallInfo(const PMeshInfo& theMeshInfo)
+  {
+    TInt nbBalls = GetNbBalls(theMeshInfo);
+    if (nbBalls < 1) return PBallInfo();
+
+    PBallInfo anInfo = CrBallInfo(theMeshInfo, nbBalls);
+    GetBallInfo(anInfo);
+
+    return anInfo;
+  }
+
+  //-----------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbFields(TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    return MEDnField(myFile->Id());
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbComp(TInt theFieldId,
+              TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    return MEDfieldnComponent(myFile->Id(), theFieldId);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetFieldInfo(TInt theFieldId,
+                 MED::TFieldInfo& theInfo,
+                 TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    TString aFieldName(256); // Protect from memory problems with too long names
+    TValueHolder<ETypeChamp, med_field_type> aType(theInfo.myType);
+    TValueHolder<TString, char> aCompNames(theInfo.myCompNames);
+    TValueHolder<TString, char> anUnitNames(theInfo.myUnitNames);
+    MED::TMeshInfo& aMeshInfo = theInfo.myMeshInfo;
+
+    TErr aRet;
+    med_bool local;
+    char dtunit[MED_SNAME_SIZE+1];
+    char local_mesh_name[MED_NAME_SIZE+1]="";
+    med_int nbofstp;
+    theInfo.myNbComp = MEDfieldnComponent(myFile->Id(), theFieldId);
+    aRet = MEDfieldInfo(myFile->Id(),
+                        theFieldId,
+                        &aFieldName[0],
+                        local_mesh_name,
+                        &local,
+                        &aType,
+                        &aCompNames,
+                        &anUnitNames,
+                        dtunit,
+                        &nbofstp);
+
+    if (strcmp(&aMeshInfo.myName[0], local_mesh_name) != 0) {
+      if (theErr)
+        *theErr = -1;
+      return;
+    }
+
+    theInfo.SetName(aFieldName);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetFieldInfo - MEDfieldInfo(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetFieldInfo(const MED::TFieldInfo& theInfo,
+                 TErr* theErr)
+  {
+    TErr aRet;
+    SetFieldInfo(theInfo, eLECTURE_ECRITURE, &aRet);
+
+    if (aRet < 0)
+      SetFieldInfo(theInfo, eLECTURE_AJOUT, &aRet);
+
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetFieldInfo(const MED::TFieldInfo& theInfo,
+                 EModeAcces theMode,
+                 TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TFieldInfo& anInfo = const_cast<MED::TFieldInfo&>(theInfo);
+
+    TValueHolder<TString, char> aFieldName(anInfo.myName);
+    TValueHolder<ETypeChamp, med_field_type> aType(anInfo.myType);
+    TValueHolder<TString, char> aCompNames(anInfo.myCompNames);
+    TValueHolder<TString, char> anUnitNames(anInfo.myUnitNames);
+    MED::TMeshInfo& aMeshInfo = anInfo.myMeshInfo;
+    TErr aRet;
+    char dtunit[MED_SNAME_SIZE+1];
+    std::fill(dtunit, dtunit+MED_SNAME_SIZE+1, '\0');
+    aRet = MEDfieldCr(myFile->Id(),
+                      &aFieldName,
+                      aType,
+                      anInfo.myNbComp,
+                      &aCompNames,
+                      &anUnitNames,
+                      dtunit,
+                      &aMeshInfo.myName[0]);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetFieldInfo - MEDfieldCr(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  PFieldInfo
+  TWrapper
+  ::CrFieldInfo(const PMeshInfo& theMeshInfo,
+                TInt theNbComp,
+                ETypeChamp theType,
+                const std::string& theValue,
+                EBooleen theIsLocal,
+                TInt theNbRef)
+  {
+    return PFieldInfo(new TTFieldInfo
+                      (theMeshInfo,
+                       theNbComp,
+                       theType,
+                       theValue,
+                       theIsLocal,
+                       theNbRef));
+  }
+
+  //----------------------------------------------------------------------------
+  PFieldInfo
+  TWrapper
+  ::CrFieldInfo(const PMeshInfo& theMeshInfo,
+                const PFieldInfo& theInfo)
+  {
+    return PFieldInfo(new TTFieldInfo
+                      (theMeshInfo,
+                       theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PFieldInfo
+  TWrapper
+  ::GetPFieldInfo(const PMeshInfo& theMeshInfo,
+                  TInt theId,
+                  TErr* theErr)
+  {
+    TInt aNbComp = GetNbComp(theId);
+    PFieldInfo anInfo = CrFieldInfo(theMeshInfo, aNbComp);
+    GetFieldInfo(theId, *anInfo, theErr);
+
+#ifdef _DEBUG_
+    INITMSG(MYDEBUG,
+            "GetPFieldInfo "<<
+            "- aName = '"<<anInfo->GetName()<<"'"<<
+            "; aType = "<<anInfo->GetType()<<
+            "; aNbComp = "<<aNbComp<<
+            std::endl);
+#endif
+
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbGauss(TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    return MEDnLocalization(myFile->Id());
+  }
+
+  //----------------------------------------------------------------------------
+  TGaussInfo::TInfo
+  TWrapper
+  ::GetGaussPreInfo(TInt theId,
+                    TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return TGaussInfo::TInfo(TGaussInfo::TKey(ePOINT1, ""), 0);
+
+    med_int aNbGaussPoints = med_int();
+    TVector<char> aName(GetNOMLength()+1);
+    med_geometry_type aGeom = MED_NONE;
+
+    TErr aRet;
+    med_int dim;
+    char geointerpname[MED_NAME_SIZE+1] = "";
+    char ipointstructmeshname[MED_NAME_SIZE+1] = "";
+    med_int nsectionmeshcell;
+    med_geometry_type sectiongeotype;
+    aRet = MEDlocalizationInfo (myFile->Id(),
+                                theId,
+                                &aName[0],
+                                &aGeom,
+                                &dim,
+                                &aNbGaussPoints,
+                                geointerpname,
+                                ipointstructmeshname,
+                                &nsectionmeshcell,
+                                &sectiongeotype);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetGaussPreInfo - MEDlocalizationInfo(...)");
+    return TGaussInfo::TInfo(TGaussInfo::TKey(EGeometrieElement(aGeom), &aName[0]),
+                             TInt(aNbGaussPoints));
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetGaussInfo(TInt theId,
+                 TGaussInfo& theInfo,
+                 TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    TValueHolder<TNodeCoord, med_float> aRefCoord(theInfo.myRefCoord);
+    TValueHolder<TNodeCoord, med_float> aGaussCoord(theInfo.myGaussCoord);
+    TValueHolder<TWeight, med_float> aWeight(theInfo.myWeight);
+    TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theInfo.myModeSwitch);
+    TValueHolder<TString, char> aGaussName(theInfo.myName);
+
+    TErr aRet;
+    aRet = MEDlocalizationRd(myFile->Id(),
+                             &aGaussName,
+                             aModeSwitch,
+                             &aRefCoord,
+                             &aGaussCoord,
+                             &aWeight);
+
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetGaussInfo - MEDlocalizationRd(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  PGaussInfo
+  TWrapper
+  ::CrGaussInfo(const TGaussInfo::TInfo& theInfo,
+                EModeSwitch theMode)
+  {
+    return PGaussInfo(new TTGaussInfo
+                      (theInfo,
+                       theMode));
+  }
+
+  //-----------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbTimeStamps(const MED::TFieldInfo& theInfo,
+                    const MED::TEntityInfo& theEntityInfo,
+                    EEntiteMaillage& theEntity,
+                    TGeom2Size& theGeom2Size,
+                    TErr* theErr)
+  {
+    theEntity = EEntiteMaillage(-1);
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr) {
+      if (theEntityInfo.empty())
+        *theErr = -1;
+      if (*theErr < 0)
+        return -1;
+    }
+    else if (theEntityInfo.empty())
+      EXCEPTION(std::runtime_error, "GetNbTimeStamps - There is no any Entity on the Mesh");
+
+    bool anIsPerformAdditionalCheck = GetNbMeshes() > 1;
+
+    theGeom2Size.clear();
+    TInt aNbTimeStamps = 0;
+    TIdt anId = myFile->Id();
+
+    MED::TFieldInfo& anInfo = const_cast<MED::TFieldInfo&>(theInfo);
+    TValueHolder<TString, char> aFieldName(anInfo.myName);
+    MED::TMeshInfo& aMeshInfo = anInfo.myMeshInfo;
+
+    // workaround for IPAL13676
+    MED::TEntityInfo localEntityInfo = theEntityInfo;
+    TEntityInfo::iterator anLocalIter = localEntityInfo.find(eMAILLE);
+    if (anLocalIter != localEntityInfo.end()) {
+      localEntityInfo[eNOEUD_ELEMENT] = anLocalIter->second;
+    }
+
+    TEntityInfo::const_iterator anIter = localEntityInfo.begin();
+    for (; anIter != localEntityInfo.end(); anIter++) {
+      med_entity_type anEntity = med_entity_type(anIter->first);
+      const TGeom2Size& aGeom2Size = anIter->second;
+      TGeom2Size::const_iterator anGeomIter = aGeom2Size.begin();
+      for (; anGeomIter != aGeom2Size.end(); anGeomIter++) {
+        med_geometry_type aGeom = med_geometry_type(anGeomIter->first);
+        char aMeshName[MED_NAME_SIZE+1];
+        med_bool islocal;
+        med_field_type ft;
+        char dtunit[MED_SNAME_SIZE+1];
+        med_int myNbComp = MEDfieldnComponentByName(anId, &aFieldName);
+        char *cname=new char[myNbComp*MED_SNAME_SIZE+1];
+        char *unitname=new char[myNbComp*MED_SNAME_SIZE+1];
+        TInt aNbStamps;
+        MEDfieldInfoByName(anId,
+                           &aFieldName,
+                           aMeshName,
+                           &islocal,
+                           &ft,
+                           cname,
+                           unitname,
+                           dtunit,
+                           &aNbStamps);
+        delete [] cname;
+        delete [] unitname;
+        med_int nval = 0;
+        med_int aNumDt;
+        med_int aNumOrd;
+        med_float aDt;
+        if (aNbStamps > 0)
+          {
+            MEDfieldComputingStepInfo(anId,
+                                      &aFieldName,
+                                      1,
+                                      &aNumDt,
+                                      &aNumOrd,
+                                      &aDt);
+            char profilename[MED_NAME_SIZE+1];
+            char locname[MED_NAME_SIZE+1];
+            med_int profilsize;
+            med_int aNbGauss;
+
+            // protection from crash (division by zero)
+            // inside MEDfieldnValueWithProfile function
+            // caused by the workaround for IPAL13676 (see above)
+            if (anEntity == MED_NODE_ELEMENT && aGeom % 100 == 0)
+              continue;
+
+            nval = MEDfieldnValueWithProfile(anId,
+                                             &aFieldName,
+                                             aNumDt,
+                                             aNumOrd,
+                                             anEntity,
+                                             med_geometry_type(aGeom),
+                                             1,
+                                             MED_COMPACT_STMODE,
+                                             profilename,
+                                             &profilsize,
+                                             locname,
+                                             &aNbGauss);
+          }
+        bool anIsSatisfied =(nval > 0);
+        if (anIsSatisfied) {
+          INITMSG(MYDEBUG,
+                  "GetNbTimeStamps aNbTimeStamps = "<<aNbStamps<<
+                  "; aGeom = "<<aGeom<<"; anEntity = "<<anEntity<<"\n");
+          if (anIsPerformAdditionalCheck) {
+            anIsSatisfied = !strcmp(&aMeshName[0], &aMeshInfo.myName[0]);
+            if (!anIsSatisfied) {
+              INITMSG(MYDEBUG,
+                      "GetNbTimeStamps aMeshName = '"<<&aMeshName[0]<<"' != "<<
+                      "; aMeshInfo.myName = '"<<&aMeshInfo.myName[0]<<"'\n");
+            }
+          }
+        }
+        if (anIsSatisfied) {
+          theGeom2Size[EGeometrieElement(aGeom)] = anGeomIter->second;
+          theEntity = EEntiteMaillage(anEntity);
+          aNbTimeStamps = aNbStamps;
+        }
+      }
+      if (!theGeom2Size.empty())
+        break;
+    }
+    return aNbTimeStamps;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetTimeStampInfo(TInt theTimeStampId,
+                     MED::TTimeStampInfo& theInfo,
+                     TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    const TGeom2Size& aGeom2Size = theInfo.myGeom2Size;
+
+    if (theErr) {
+      if (aGeom2Size.empty())
+        *theErr = -1;
+      if (*theErr < 0)
+        return;
+    }
+    else if (aGeom2Size.empty())
+      EXCEPTION(std::runtime_error, "GetTimeStampInfo - There is no any cell");
+
+    MED::TFieldInfo& aFieldInfo = *theInfo.myFieldInfo;
+    MED::TMeshInfo& aMeshInfo = *aFieldInfo.myMeshInfo;
+
+    TValueHolder<TString, char> aFieldName(aFieldInfo.myName);
+    TValueHolder<EEntiteMaillage, med_entity_type> anEntity(theInfo.myEntity);
+    TValueHolder<TInt, med_int> aNumDt(theInfo.myNumDt);
+    TValueHolder<TInt, med_int> aNumOrd(theInfo.myNumOrd);
+    TValueHolder<TString, char> anUnitDt(theInfo.myUnitDt);
+    TValueHolder<TFloat, med_float> aDt(theInfo.myDt);
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TValueHolder<EBooleen, med_bool> anIsLocal(aFieldInfo.myIsLocal);
+    TValueHolder<TInt, med_int> aNbRef(aFieldInfo.myNbRef);
+
+    TGeom2NbGauss& aGeom2NbGauss = theInfo.myGeom2NbGauss;
+
+    // just to get a time stamp unit (anUnitDt)
+    med_field_type aFieldType;
+    med_int aNbComp = MEDfieldnComponentByName(myFile->Id(), &aFieldName);
+    char *aCompName = new char[aNbComp*MED_SNAME_SIZE+1];
+    char *aCompUnit = new char[aNbComp*MED_SNAME_SIZE+1];
+    TInt aNbStamps;
+    MEDfieldInfoByName(myFile->Id(),
+                       &aFieldName,
+                       &aMeshName,
+                       &anIsLocal,
+                       &aFieldType,
+                       aCompName,
+                       aCompUnit,
+                       &anUnitDt,
+                       &aNbStamps);
+    delete [] aCompName;
+    delete [] aCompUnit;
+
+    TGeom2Size::const_iterator anIter = aGeom2Size.begin();
+    for (; anIter != aGeom2Size.end(); anIter++) {
+      const EGeometrieElement& aGeom = anIter->first;
+      med_int aNbGauss = -1;
+
+      TErr aRet;
+      aRet = MEDfieldComputingStepInfo(myFile->Id(),
+                                       &aFieldName,
+                                       theTimeStampId,
+                                       &aNumDt,
+                                       &aNumOrd,
+                                       &aDt);
+      char profilename[MED_NAME_SIZE+1];
+      med_int profilsize;
+      char locname[MED_NAME_SIZE+1];
+      MEDfieldnValueWithProfile(myFile->Id(),
+                                &aFieldName,
+                                aNumDt,
+                                aNumOrd,
+                                anEntity,
+                                med_geometry_type(aGeom),
+                                1,
+                                MED_COMPACT_STMODE,
+                                profilename,
+                                &profilsize,
+                                locname,
+                                &aNbGauss);
+
+      static TInt MAX_NB_GAUSS_POINTS = 32;
+      if (aNbGauss <= 0 || aNbGauss > MAX_NB_GAUSS_POINTS)
+        aNbGauss = 1;
+
+      aGeom2NbGauss[aGeom] = aNbGauss;
+
+      if (theErr)
+        *theErr = aRet;
+      else if (aRet < 0)
+        EXCEPTION(std::runtime_error, "GetTimeStampInfo - MEDfieldnValueWithProfile(...)");
+    }
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampInfo
+  TWrapper
+  ::CrTimeStampInfo(const PFieldInfo& theFieldInfo,
+                    EEntiteMaillage theEntity,
+                    const TGeom2Size& theGeom2Size,
+                    const TGeom2NbGauss& theGeom2NbGauss,
+                    TInt theNumDt,
+                    TInt theNumOrd,
+                    TFloat theDt,
+                    const std::string& theUnitDt,
+                    const TGeom2Gauss& theGeom2Gauss)
+  {
+    return PTimeStampInfo(new TTTimeStampInfo
+                          (theFieldInfo,
+                           theEntity,
+                           theGeom2Size,
+                           theGeom2NbGauss,
+                           theNumDt,
+                           theNumOrd,
+                           theDt,
+                           theUnitDt,
+                           theGeom2Gauss));
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampInfo
+  TWrapper
+  ::CrTimeStampInfo(const PFieldInfo& theFieldInfo,
+                    const PTimeStampInfo& theInfo)
+  {
+    return PTimeStampInfo(new TTTimeStampInfo
+                          (theFieldInfo,
+                           theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampInfo
+  TWrapper
+  ::GetPTimeStampInfo(const PFieldInfo& theFieldInfo,
+                      EEntiteMaillage theEntity,
+                      const TGeom2Size& theGeom2Size,
+                      TInt theId,
+                      TErr* theErr)
+  {
+    PTimeStampInfo anInfo = CrTimeStampInfo(theFieldInfo, theEntity, theGeom2Size);
+    GetTimeStampInfo(theId, *anInfo, theErr);
+
+#ifdef _DEBUG_
+    INITMSG(MYDEBUG, "GetPTimeStampInfo - anEntity = "<<anInfo->GetEntity()<<"\n");
+    TGeom2NbGauss& aGeom2NbGauss = anInfo->myGeom2NbGauss;
+    TGeom2NbGauss::const_iterator anIter = aGeom2NbGauss.begin();
+    for (; anIter != aGeom2NbGauss.end(); anIter++) {
+      const EGeometrieElement& aGeom = anIter->first;
+      INITMSG(MYDEBUG, "aGeom = "<<aGeom<<" - "<<aGeom2NbGauss[aGeom]<<";\n");
+    }
+#endif
+
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  TInt
+  TWrapper
+  ::GetNbProfiles(TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return -1;
+
+    return MEDnProfile(myFile->Id());
+  }
+
+  //----------------------------------------------------------------------------
+  TProfileInfo::TInfo
+  TWrapper
+  ::GetProfilePreInfo(TInt theId,
+                      TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return TProfileInfo::TInfo();
+
+    med_int aSize = -1;
+    TVector<char> aName(GetNOMLength()+1);
+
+    TErr aRet;
+    aRet = MEDprofileInfo(myFile->Id(),
+                          theId,
+                          &aName[0],
+                          &aSize);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetProfilePreInfo - MEDprofileInfo(...)");
+
+    return TProfileInfo::TInfo(&aName[0], aSize);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetProfileInfo(TInt theId,
+                   TProfileInfo& theInfo,
+                   TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    TProfileInfo& anInfo = const_cast<TProfileInfo&>(theInfo);
+    TValueHolder<TElemNum, med_int> anElemNum(anInfo.myElemNum);
+    TValueHolder<TString, char> aProfileName(anInfo.myName);
+
+    TErr aRet;
+    aRet = MEDprofileRd(myFile->Id(),
+                        &aProfileName,
+                        &anElemNum);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetProfileInfo - MEDprofileRd(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetProfileInfo(const TProfileInfo& theInfo,
+                   TErr* theErr)
+  {
+    TErr aRet;
+    SetProfileInfo(theInfo, eLECTURE_ECRITURE, &aRet);
+
+    if (aRet < 0)
+      SetProfileInfo(theInfo, eLECTURE_AJOUT, &aRet);
+
+    if (aRet < 0)
+      SetProfileInfo(theInfo, eCREATION, &aRet);
+
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetProfileInfo(const TProfileInfo& theInfo,
+                   EModeAcces theMode,
+                   TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    TProfileInfo& anInfo = const_cast<TProfileInfo&>(theInfo);
+    TValueHolder<TElemNum, med_int> anElemNum(anInfo.myElemNum);
+    TValueHolder<TString, char>     aProfileName(anInfo.myName);
+
+    TErr aRet;
+    aRet = MEDprofileWr(myFile->Id(),      // descripteur du fichier.
+                        &aProfileName,     // tableau de valeurs du profil.
+                        theInfo.GetSize(), // taille du profil.
+                        &anElemNum);       // nom profil.
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetProfileInfo - MEDprofileWr(...)");
+  }
+
+  //----------------------------------------------------------------------------
+  PProfileInfo
+  TWrapper
+  ::CrProfileInfo(const TProfileInfo::TInfo& theInfo,
+                  EModeProfil theMode)
+  {
+    return PProfileInfo(new TTProfileInfo
+                        (theInfo,
+                         theMode));
+  }
+
+  //----------------------------------------------------------------------------
+  PProfileInfo
+  TWrapper
+  ::GetPProfileInfo(TInt theId,
+                    EModeProfil theMode,
+                    TErr* theErr)
+  {
+    TProfileInfo::TInfo aPreInfo = GetProfilePreInfo(theId);
+    PProfileInfo anInfo = CrProfileInfo(aPreInfo, theMode);
+    GetProfileInfo(theId, *anInfo, theErr);
+
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
+                      const TMKey2Profile& theMKey2Profile,
+                      const TKey2Gauss& theKey2Gauss,
+                      TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    TIdt anId = myFile->Id();
+
+    TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theTimeStampValue->myModeSwitch);
+    MED::TGeom2Profile& aGeom2Profile = theTimeStampValue->myGeom2Profile;
+
+    MED::PTimeStampInfo aTimeStampInfo = theTimeStampValue->myTimeStampInfo;
+    TValueHolder<EEntiteMaillage, med_entity_type> anEntity(aTimeStampInfo->myEntity);
+    TValueHolder<TInt, med_int> aNumDt(aTimeStampInfo->myNumDt);
+    TValueHolder<TInt, med_int> aNumOrd(aTimeStampInfo->myNumOrd);
+
+    MED::PFieldInfo aFieldInfo = aTimeStampInfo->myFieldInfo;
+    TValueHolder<TString, char> aFieldName(aFieldInfo->myName);
+    TValueHolder<EBooleen, med_bool> anIsLocal(aFieldInfo->myIsLocal);
+
+    MED::PMeshInfo aMeshInfo = aFieldInfo->myMeshInfo;
+    TValueHolder<TString, char> aMeshName(aMeshInfo->myName);
+
+    TGeom2Gauss& aGeom2Gauss = aTimeStampInfo->myGeom2Gauss;
+    TVector<char> aGaussName(GetNOMLength()+1);
+
+    med_storage_mode aProfileMode = med_storage_mode(boost::get<0>(theMKey2Profile));
+    MED::TKey2Profile aKey2Profile = boost::get<1>(theMKey2Profile);
+    TVector<char> aProfileName(GetNOMLength()+1);
+
+    TGeom2Size& aGeom2Size = aTimeStampInfo->myGeom2Size;
+    TGeom2Size::iterator anIter = aGeom2Size.begin();
+    for (; anIter != aGeom2Size.end(); anIter++) {
+      EGeometrieElement aGeom = anIter->first;
+      TInt aNbElem = anIter->second;
+      med_int profilesize, aNbGauss;
+
+      TInt aNbVal = MEDfieldnValueWithProfile(anId,
+                                              &aFieldName,
+                                              aNumDt,
+                                              aNumOrd,
+                                              anEntity,
+                                              med_geometry_type(aGeom),
+                                              1,
+                                              aProfileMode,
+                                              &aProfileName[0],
+                                              &profilesize,
+                                              &aGaussName[0],
+                                              &aNbGauss);
+
+      if (aNbVal <= 0) {
+        if (theErr) {
+          *theErr = -1;
+          return;
+        }
+        EXCEPTION(std::runtime_error, "GetTimeStampValue - MEDfieldnValueWithProfile(...) - aNbVal == "<<aNbVal<<" <= 0");
+      }
+
+      TInt aNbComp = aFieldInfo->myNbComp;
+      TInt aNbValue = aNbVal;// / aNbGauss; rules in MED changed
+      theTimeStampValue->AllocateValue(aGeom,
+                                       aNbValue,
+                                       aNbGauss,
+                                       aNbComp);
+      TInt aValueSize = theTimeStampValue->GetValueSize(aGeom);
+
+      INITMSG(MYDEBUG,
+              "TWrapper::GetTimeStampValue - aGeom = "<<aGeom<<
+              "; aNbVal = "<<aNbVal<<
+              "; aNbValue = "<<aNbValue<<
+              "; aNbGauss = "<<aNbGauss<<
+              "; aNbComp = "<<aNbComp<<
+              std::endl);
+
+      TErr aRet = MEDfieldValueWithProfileRd(anId,
+                                             &aFieldName,
+                                             aNumDt,
+                                             aNumOrd,
+                                             anEntity,
+                                             med_geometry_type(aGeom),
+                                             aProfileMode,
+                                             &aProfileName[0],
+                                             aModeSwitch,
+                                             MED_ALL_CONSTITUENT,
+                                             theTimeStampValue->GetValuePtr(aGeom));
+      if (aRet < 0) {
+        if (theErr) {
+          *theErr = MED_FALSE;
+          return;
+        }
+        EXCEPTION(std::runtime_error, "GetTimeStampValue - MEDfieldValueWithProfileRd(...)");
+      }
+
+      MED::PGaussInfo aGaussInfo;
+      TGaussInfo::TKey aKey(aGeom, &aGaussName[0]);
+      if (strcmp(&aGaussName[0], "") != 0) {
+        MED::TKey2Gauss::const_iterator anIter = theKey2Gauss.find(aKey);
+        if (anIter != theKey2Gauss.end()) {
+          aGaussInfo = anIter->second;
+          aGeom2Gauss[aGeom] = aGaussInfo;
+        }
+      }
+
+      MED::PProfileInfo aProfileInfo;
+      if (strcmp(&aProfileName[0], MED_NO_PROFILE) != 0) {
+        MED::TKey2Profile::const_iterator anIter = aKey2Profile.find(&aProfileName[0]);
+        if (anIter != aKey2Profile.end()) {
+          aProfileInfo = anIter->second;
+          aGeom2Profile[aGeom] = aProfileInfo;
+        }
+      }
+
+      if (aGaussInfo && aNbGauss != aGaussInfo->GetNbGauss()) {
+        if (theErr) {
+          *theErr = MED_FALSE;
+          return;
+        }
+        EXCEPTION(std::runtime_error, "GetTimeStampValue - aNbGauss != aGaussInfo->GetNbGauss()");
+      }
+
+      if (aProfileInfo && aProfileInfo->IsPresent()) {
+        TInt aNbSubElem = aProfileInfo->GetSize();
+        TInt aProfileSize = aNbSubElem*aNbComp*aNbGauss;
+        if (aProfileSize != aValueSize) {
+          if (theErr) {
+            *theErr = -1;
+            return;
+          }
+          EXCEPTION(std::runtime_error,
+                    "GetTimeStampValue - aProfileSize("<<aProfileSize<<
+                    ") != aValueSize("<<aValueSize<<
+                    "); aNbVal = "<<aNbVal<<
+                    "; anEntity = "<<anEntity<<
+                    "; aGeom = "<<aGeom<<
+                    "; aNbElem = "<<aNbElem<<
+                    "; aNbSubElem = "<<aNbSubElem<<
+                    "; aNbComp = "<<aNbComp<<
+                    "; aNbGauss = "<<aNbGauss<<
+                    "");
+        }
+      }
+      else{
+        if ((aProfileMode == MED_GLOBAL_STMODE) && (aNbElem != aNbValue)) {
+          if (theErr) {
+            *theErr = -1;
+            return;
+          }
+          EXCEPTION(std::runtime_error,
+                    "GetTimeStampValue - aNbElem("<<aNbElem<<
+                    ") != aNbValue("<<aNbValue<<
+                    "); aNbVal = "<<aNbVal<<
+                    "; anEntity = "<<anEntity<<
+                    "; aGeom = "<<aGeom<<
+                    "; aNbElem = "<<aNbElem<<
+                    "; aNbComp = "<<aNbComp<<
+                    "; aNbGauss = "<<aNbGauss<<
+                    "");
+        }
+      }
+    }
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
+                      TErr* theErr)
+  {
+    TErr aRet;
+    SetTimeStampValue(theTimeStampValue, eLECTURE_ECRITURE, &aRet);
+
+    if (aRet < 0)
+      SetTimeStampValue(theTimeStampValue, eLECTURE_AJOUT, &aRet);
+
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetTimeStampValue(const MED::PTimeStampValueBase& theTimeStampValue,
+                      EModeAcces theMode,
+                      TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    TErr aRet;
+    TIdt anId = myFile->Id();
+
+    TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theTimeStampValue->myModeSwitch);
+    MED::TGeom2Profile& aGeom2Profile = theTimeStampValue->myGeom2Profile;
+
+    MED::PTimeStampInfo aTimeStampInfo = theTimeStampValue->myTimeStampInfo;
+    TValueHolder<EEntiteMaillage, med_entity_type> anEntity(aTimeStampInfo->myEntity);
+    TValueHolder<TInt, med_int> aNumDt(aTimeStampInfo->myNumDt);
+    TValueHolder<TInt, med_int> aNumOrd(aTimeStampInfo->myNumOrd);
+    TValueHolder<TString, char> anUnitDt(aTimeStampInfo->myUnitDt);
+    TValueHolder<TFloat, med_float> aDt(aTimeStampInfo->myDt);
+    MED::TGeom2Gauss& aGeom2Gauss = aTimeStampInfo->myGeom2Gauss;
+
+    MED::PFieldInfo aFieldInfo = aTimeStampInfo->myFieldInfo;
+    TValueHolder<TString, char> aFieldName(aFieldInfo->myName);
+
+    MED::PMeshInfo aMeshInfo = aFieldInfo->myMeshInfo;
+    TValueHolder<TString, char> aMeshName(aMeshInfo->myName);
+
+    const TGeomSet& aGeomSet = theTimeStampValue->myGeomSet;
+    TGeomSet::const_iterator anIter = aGeomSet.begin();
+    for (; anIter != aGeomSet.end(); anIter++) {
+      EGeometrieElement aGeom = *anIter;
+
+      TVector<char> aGaussName(GetNOMLength()+1);
+      MED::TGeom2Gauss::const_iterator aGaussIter = aGeom2Gauss.find(aGeom);
+      if (aGaussIter != aGeom2Gauss.end()) {
+        MED::PGaussInfo aGaussInfo = aGaussIter->second;
+        strcpy(&aGaussName[0], &aGaussInfo->myName[0]);
+      }
+
+      TVector<char> aProfileName(GetNOMLength()+1);
+      med_storage_mode aProfileMode = med_storage_mode(eNO_PFLMOD);
+      MED::TGeom2Profile::const_iterator aProfileIter = aGeom2Profile.find(aGeom);
+      if (aProfileIter != aGeom2Profile.end()) {
+        MED::PProfileInfo aProfileInfo = aProfileIter->second;
+        aProfileMode = med_storage_mode(aProfileInfo->myMode);
+        strcpy(&aProfileName[0], &aProfileInfo->myName[0]);
+      }
+
+      med_int aNbVal = theTimeStampValue->GetNbVal(aGeom);
+
+      aRet = MEDfieldValueWithProfileWr(anId,
+                                        &aFieldName,
+                                        aNumDt,
+                                        aNumOrd,
+                                        aDt,
+                                        anEntity,
+                                        med_geometry_type(aGeom),
+                                        aProfileMode,
+                                        &aProfileName[0],
+                                        &aGaussName[0],
+                                        aModeSwitch,
+                                        MED_ALL_CONSTITUENT,
+                                        aNbVal,
+                                        theTimeStampValue->GetValuePtr(aGeom));
+      if (aRet < 0) {
+        if (theErr) {
+          *theErr = MED_FALSE;
+          break;
+        }
+        EXCEPTION(std::runtime_error, "SetTimeStampValue - MEDfieldValueWithProfileWr(...)");
+      }
+
+    }
+
+    INITMSG(MYDEBUG, "TWrapper::SetTimeStampValue - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampValueBase
+  TWrapper
+  ::CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     ETypeChamp theTypeChamp,
+                     const TGeom2Profile& theGeom2Profile,
+                     EModeSwitch theMode)
+  {
+    if (theTypeChamp == eFLOAT64)
+      return PTimeStampValueBase(new TTTimeStampValue<TFloatMeshValue>
+                                 (theTimeStampInfo,
+                                  theTypeChamp,
+                                  theGeom2Profile,
+                                  theMode));
+    return PTimeStampValueBase(new TTTimeStampValue<TIntMeshValue>
+                               (theTimeStampInfo,
+                                theTypeChamp,
+                                theGeom2Profile,
+                                theMode));
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampValueBase
+  TWrapper
+  ::CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const TGeom2Profile& theGeom2Profile,
+                     EModeSwitch theMode)
+  {
+    PFieldInfo aFieldInfo = theTimeStampInfo->GetFieldInfo();
+    return CrTimeStampValue(theTimeStampInfo,
+                            aFieldInfo->GetType(),
+                            theGeom2Profile,
+                            theMode);
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampValueBase
+  TWrapper
+  ::CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const PTimeStampValueBase& theInfo,
+                     ETypeChamp theTypeChamp)
+  {
+    if (theTypeChamp == eFLOAT64)
+      return PTimeStampValueBase(new TTTimeStampValue<TFloatMeshValue>
+                                 (theTimeStampInfo,
+                                  theInfo,
+                                  theTypeChamp));
+    return PTimeStampValueBase(new TTTimeStampValue<TIntMeshValue>
+                               (theTimeStampInfo,
+                                theInfo,
+                                theTypeChamp));
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampValueBase
+  TWrapper
+  ::CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const PTimeStampValueBase& theInfo)
+  {
+    PFieldInfo aFieldInfo = theTimeStampInfo->GetFieldInfo();
+    return CrTimeStampValue(theTimeStampInfo,
+                            theInfo,
+                            aFieldInfo->GetType());
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampValueBase
+  TWrapper
+  ::GetPTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                       const TMKey2Profile& theMKey2Profile,
+                       const TKey2Gauss& theKey2Gauss,
+                       TErr* theErr)
+  {
+    PFieldInfo aFieldInfo = theTimeStampInfo->GetFieldInfo();
+    PTimeStampValueBase anInfo = CrTimeStampValue(theTimeStampInfo,
+                                                  aFieldInfo->GetType());
+    GetTimeStampValue(anInfo,
+                      theMKey2Profile,
+                      theKey2Gauss,
+                      theErr);
+#ifdef _DEBUG_
+    if (aFieldInfo->GetType() == eFLOAT64)
+      Print<TFloatTimeStampValue>(anInfo);
+    else
+      Print<TIntTimeStampValue>(anInfo);
+#endif
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetTimeStampVal(const PTimeStampVal& theVal,
+                    const TMKey2Profile& theMKey2Profile,
+                    const TKey2Gauss& theKey2Gauss,
+                    TErr* theErr)
+  {
+    PTimeStampInfo aTimeStampInfo = theVal->GetTimeStampInfo();
+    PFieldInfo aFieldInfo = aTimeStampInfo->GetFieldInfo();
+    if (aFieldInfo->GetType() == eFLOAT64)
+      GetTimeStampValue(theVal,
+                        theMKey2Profile,
+                        theKey2Gauss,
+                        theErr);
+    else{
+      PTimeStampValueBase aVal = CrTimeStampValue(aTimeStampInfo,
+                                                  theVal,
+                                                  eINT);
+      GetTimeStampValue(aVal,
+                        theMKey2Profile,
+                        theKey2Gauss,
+                        theErr);
+      CopyTimeStampValueBase(aVal, theVal);
+    }
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetTimeStamp(const PTimeStampVal& theVal,
+                 TErr* theErr)
+  {
+    PTimeStampInfo aTimeStampInfo = theVal->GetTimeStampInfo();
+    PFieldInfo aFieldInfo = aTimeStampInfo->GetFieldInfo();
+    if (aFieldInfo->GetType() == eFLOAT64)
+      SetTimeStampValue(theVal, theErr);
+    else{
+      PTimeStampValueBase aVal = CrTimeStampValue(aTimeStampInfo,
+                                                  eINT,
+                                                  theVal->GetGeom2Profile(),
+                                                  theVal->GetModeSwitch());
+      CopyTimeStampValueBase(theVal, aVal);
+      SetTimeStampValue(aVal, theErr);
+    }
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampVal
+  TWrapper
+  ::CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                   const TGeom2Profile& theGeom2Profile,
+                   EModeSwitch theMode)
+  {
+    return CrTimeStampValue(theTimeStampInfo,
+                            eFLOAT64,
+                            theGeom2Profile,
+                            theMode);
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampVal
+  TWrapper
+  ::CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                   const PTimeStampVal& theInfo)
+  {
+    return CrTimeStampValue(theTimeStampInfo,
+                            theInfo,
+                            eFLOAT64);
+  }
+
+  //----------------------------------------------------------------------------
+  PTimeStampVal
+  TWrapper
+  ::GetPTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                     const TMKey2Profile& theMKey2Profile,
+                     const TKey2Gauss& theKey2Gauss,
+                     TErr* theErr)
+  {
+    PTimeStampVal anInfo = CrTimeStampVal(theTimeStampInfo);
+    GetTimeStampVal(anInfo,
+                    theMKey2Profile,
+                    theKey2Gauss,
+                    theErr);
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  PGrilleInfo
+  TWrapper
+  ::GetPGrilleInfo(const PMeshInfo& theMeshInfo)
+  {
+    if (theMeshInfo->GetType() != eSTRUCTURE)
+      return PGrilleInfo();
+
+    EGrilleType type;
+    GetGrilleType(*theMeshInfo, type);
+    PGrilleInfo anInfo;
+    if (type == eGRILLE_STANDARD) {
+      const TInt nnoeuds = GetNbNodes(*theMeshInfo);
+      anInfo = CrGrilleInfo(theMeshInfo, type, nnoeuds);
+    }
+    else {
+      TIntVector aVec;
+      aVec.resize(theMeshInfo->GetDim());
+      for (int aAxe=0;aAxe<theMeshInfo->GetDim();aAxe++) {
+        ETable aATable = eCOOR_IND1;
+        switch (aAxe) {
+        case 0:
+          aATable = eCOOR_IND1;
+          break;
+        case 1:
+          aATable = eCOOR_IND2;
+          break;
+        case 2:
+          aATable = eCOOR_IND3;
+          break;
+        }
+        aVec[aAxe] = GetNbNodes(*theMeshInfo, aATable);
+      }
+      anInfo = CrGrilleInfo(theMeshInfo, type, aVec);
+    }
+
+    GetGrilleInfo(anInfo);
+    anInfo->SetGrilleType(type);
+
+#ifdef _DEBUG_
+    INITMSG(MYDEBUG, "GetPGrilleInfo: ");
+    {
+      TInt aNbElem = anInfo->GetNbNodes();
+      BEGMSG(MYVALUEDEBUG, "GetFamNumNode: ");
+      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+        ADDMSG(MYVALUEDEBUG, anInfo->GetFamNumNode(iElem)<<", ");
+      }
+      TInt aNbCells = anInfo->GetNbCells();
+      BEGMSG(MYVALUEDEBUG, "GetFamNum: ");
+      for (TInt iElem = 0; iElem < aNbCells; iElem++) {
+        ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", ");
+      }
+      ADDMSG(MYVALUEDEBUG, std::endl);
+      BEGMSG(MYVALUEDEBUG, "GetCoordName: ");
+      for (TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++) {
+        ADDMSG(MYVALUEDEBUG, anInfo->GetCoordName(iElem)<<", ");
+      }
+      ADDMSG(MYVALUEDEBUG, std::endl);
+      BEGMSG(MYVALUEDEBUG, "GetCoordUnit: ");
+      for (TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++) {
+        ADDMSG(MYVALUEDEBUG, anInfo->GetCoordUnit(iElem)<<", ");
+      }
+      ADDMSG(MYVALUEDEBUG, std::endl);
+
+    }
+#endif
+
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  PGrilleInfo
+  TWrapper
+  ::GetPGrilleInfo(const PMeshInfo& theMeshInfo,
+                   const PGrilleInfo& theInfo)
+  {
+    PGrilleInfo anInfo = CrGrilleInfo(theMeshInfo, theInfo);
+    return anInfo;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetGrilleInfo(TGrilleInfo& theInfo,
+                  TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    EMaillage aMaillageType = aMeshInfo.myType;
+
+    GetGrilleType(aMeshInfo, theInfo.myGrilleType, theErr);
+    EGrilleType aGrilleType = theInfo.myGrilleType;
+
+    TErr aRet = 0;
+    if (aMaillageType == eSTRUCTURE && aGrilleType == eGRILLE_STANDARD) {
+      GetGrilleStruct(aMeshInfo, theInfo.myGrilleStructure, theErr);
+
+      TValueHolder<TNodeCoord, med_float> aCoord(theInfo.myCoord);
+      TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theInfo.myModeSwitch);
+      TValueHolder<TString, char> aCoordNames(theInfo.myCoordNames);
+      TValueHolder<TString, char> aCoordUnits(theInfo.myCoordUnits);
+      //med_axis_type aRepere;
+
+      aRet = MEDmeshNodeCoordinateRd(myFile->Id(),
+                                     &aMeshName,
+                                     MED_NO_DT,
+                                     MED_NO_IT,
+                                     aModeSwitch,
+                                     &aCoord);
+
+      if (theErr)
+        *theErr = aRet;
+      else if (aRet < 0)
+        EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDmeshNodeCoordinateRd(...)");
+
+      //TInt aNbNodes = theInfo.GetNbNodes();//GetNbFamilies(aMeshInfo);
+      TValueHolder<TElemNum, med_int> aFamNumNode(theInfo.myFamNumNode);
+
+      aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(),
+                                         &aMeshName,
+                                         MED_NO_DT,
+                                         MED_NO_IT,
+                                         MED_NODE,
+                                         MED_NO_GEOTYPE,
+                                         &aFamNumNode);
+
+      if (aRet < 0) {
+        //            if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files
+        {
+          int mySize = (int)theInfo.myFamNumNode.size();
+          theInfo.myFamNumNode.clear();
+          theInfo.myFamNumNode.resize(mySize,0);
+          aRet = 0;
+        }
+        //            else
+        //              EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...)");
+      }
+      if (theErr)
+        *theErr = aRet;
+
+      //============================
+    }
+
+    if (aMaillageType == eSTRUCTURE && aGrilleType != eGRILLE_STANDARD) {
+      ETable aTable = eCOOR_IND1;
+      for (med_int anAxis = 1; anAxis <= aMeshInfo.myDim; anAxis++) {
+        switch (anAxis) {
+        case 1:
+          aTable = eCOOR_IND1;
+          break;
+        case 2:
+          aTable = eCOOR_IND2;
+          break;
+        case 3:
+          aTable = eCOOR_IND3;
+          break;
+        default:
+          aRet = -1;
+        }
+
+        if (theErr)
+          *theErr = aRet;
+        else if (aRet < 0)
+          EXCEPTION(std::runtime_error, "GetGrilleInfo - anAxis number out of range(...)");
+
+        TInt aNbIndexes = GetNbNodes(aMeshInfo, aTable);
+        if (aNbIndexes < 0)
+          EXCEPTION(std::runtime_error, "GetGrilleInfo - Erreur a la lecture de la taille de l'indice");
+
+        TValueHolder<TFloatVector, med_float> anIndexes(theInfo.GetIndexes(anAxis-1));
+        //TValueHolder<ETable, med_data_type > table(aTable);
+        //char aCompNames[MED_SNAME_SIZE+1];
+        //char anUnitNames[MED_SNAME_SIZE+1];
+        aRet=MEDmeshGridIndexCoordinateRd(myFile->Id(),
+                                          &aMeshName,
+                                          MED_NO_DT,MED_NO_IT,
+                                          anAxis,
+                                          &anIndexes);
+
+        //theInfo.SetCoordName(anAxis-1, aCompNames);
+        //theInfo.SetCoordUnit(anAxis-1, anUnitNames);
+        theInfo.SetGrilleStructure(anAxis-1, aNbIndexes);
+
+        if (theErr)
+          *theErr = aRet;
+        else if (aRet < 0)
+          EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDindicesCoordLire(...)");
+      }
+    }
+
+    EGeometrieElement aGeom = theInfo.GetGeom();
+    EEntiteMaillage aEntity = theInfo.GetEntity();
+    TInt aNbCells = theInfo.GetNbCells();
+
+    theInfo.myFamNum.resize(aNbCells);
+    TValueHolder<TElemNum, med_int> aFamNum(theInfo.myFamNum);
+
+    aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(),
+                                       &aMeshName, MED_NO_DT, MED_NO_IT, med_entity_type(aEntity),
+                                       med_geometry_type(aGeom), &aFamNum);
+
+    if (aMeshInfo.myDim == 3)
+      {
+        aGeom = theInfo.GetSubGeom();
+        aEntity = theInfo.GetSubEntity();
+        aNbCells = theInfo.GetNbSubCells();
+
+        theInfo.myFamSubNum.resize(aNbCells, 0);
+        TValueHolder<TElemNum, med_int> aFamNum(theInfo.myFamSubNum);
+
+        aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(),
+                                           &aMeshName,
+                                           MED_NO_DT,
+                                           MED_NO_IT,
+                                           med_entity_type(aEntity),
+                                           med_geometry_type(aGeom),
+                                           &aFamNum);
+      }
+    if (aRet < 0) {
+      //          if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files
+      {
+        int mySize = (int)theInfo.myFamNumNode.size();
+        theInfo.myFamNumNode.clear();
+        theInfo.myFamNumNode.resize(mySize, 0);
+        aRet = 0;
+      }
+      //          else
+      //            EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...)");
+    }
+    if (theErr)
+      *theErr = aRet;
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetGrilleInfo(const MED::TGrilleInfo& theInfo,
+                  TErr* theErr)
+  {
+    SetGrilleInfo(theInfo, eLECTURE_ECRITURE, theErr);
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::SetGrilleInfo(const MED::TGrilleInfo& theInfo,
+                  EModeAcces theMode,
+                  TErr* theErr)
+  {
+    if (theInfo.myMeshInfo->myType != eSTRUCTURE)
+      return;
+    TFileWrapper aFileWrapper(myFile, theMode, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    MED::TGrilleInfo& anInfo = const_cast<MED::TGrilleInfo&>(theInfo);
+
+    MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+
+    TValueHolder<EGrilleType, med_grid_type > aGrilleType(anInfo.myGrilleType);
+
+    TErr aRet = 0;
+    aRet = MEDmeshGridTypeRd(myFile->Id(),
+                             &aMeshName,
+                             &aGrilleType);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "SetGrilleInfo - MEDmeshGridTypeRd(...)");
+
+    if (anInfo.myGrilleType == eGRILLE_STANDARD) {
+      TValueHolder<TNodeCoord, med_float> aCoord(anInfo.myCoord);
+      TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(anInfo.myModeSwitch);
+      TValueHolder<TString, char> aCoordNames(anInfo.myCoordNames);
+      TValueHolder<TString, char> aCoordUnits(anInfo.myCoordUnits);
+      med_int aNbNoeuds = med_int(anInfo.myCoord.size() / aMeshInfo.myDim);
+      //med_axis_type aRepere = MED_CARTESIAN;
+
+      aRet = MEDmeshNodeCoordinateWr(myFile->Id(),
+                                     &aMeshName,
+                                     MED_NO_DT,
+                                     MED_NO_IT,
+                                     MED_UNDEF_DT,
+                                     aModeSwitch,
+                                     aNbNoeuds,
+                                     &aCoord);
+
+      if (aRet < 0)
+        EXCEPTION(std::runtime_error, "SetGrilleInfo - MEDmeshNodeCoordinateWr(...)");
+
+      TValueHolder<TIntVector, med_int> aGrilleStructure(anInfo.myGrilleStructure);
+      aRet = MEDmeshGridStructWr(myFile->Id(),
+                                 &aMeshName,
+                                 MED_NO_DT,
+                                 MED_NO_IT,
+                                 MED_UNDEF_DT,
+                                 &aGrilleStructure);
+      if (aRet < 0)
+        EXCEPTION(std::runtime_error, "SetGrilleInfo - MEDmeshGridStructWr(...)");
+
+    }
+    else {
+      for (med_int aAxis = 0; aAxis < aMeshInfo.myDim; aAxis++) {
+        aRet = MEDmeshGridIndexCoordinateWr(myFile->Id(),
+                                            &aMeshName,
+                                            MED_NO_DT,
+                                            MED_NO_IT,
+                                            MED_UNDEF_DT,
+                                            aAxis+1,
+                                            anInfo.GetIndexes(aAxis).size(),
+                                            &anInfo.GetIndexes(aAxis)[0]);
+
+        if (aRet < 0)
+          EXCEPTION(std::runtime_error, "SetGrilleInfo - MEDmeshGridIndexCoordinateWr(...)");
+      }
+
+    }
+
+    return;
+  }
+
+  //----------------------------------------------------------------------------
+  PGrilleInfo
+  TWrapper
+  ::CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const PGrilleInfo& theInfo)
+  {
+    return PGrilleInfo(new TTGrilleInfo
+                       (theMeshInfo,
+                        theInfo));
+  }
+
+  //----------------------------------------------------------------------------
+  PGrilleInfo
+  TWrapper
+  ::CrGrilleInfo(const PMeshInfo& theMeshInfo)
+  {
+    return PGrilleInfo(); // not implemented????
+  }
+
+  //----------------------------------------------------------------------------
+  PGrilleInfo
+  TWrapper
+  ::CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type)
+  {
+    return PGrilleInfo(new TTGrilleInfo
+                       (theMeshInfo,
+                        type));
+  }
+
+  //----------------------------------------------------------------------------
+  PGrilleInfo
+  TWrapper
+  ::CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type,
+                 const TInt& nbNodes)
+  {
+    return PGrilleInfo(new TTGrilleInfo
+                       (theMeshInfo,
+                        type,
+                        nbNodes));
+  }
+
+  //----------------------------------------------------------------------------
+  PGrilleInfo
+  TWrapper
+  ::CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type,
+                 const MED::TIntVector& nbNodeVec)
+  {
+    return PGrilleInfo(new TTGrilleInfo
+                       (theMeshInfo,
+                        type,
+                        nbNodeVec));
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetGrilleType(const MED::TMeshInfo& theMeshInfo,
+                  EGrilleType& theGridType,
+                  TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      EXCEPTION(std::runtime_error, " GetGrilleType - aFileWrapper (...)");
+
+    MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
+
+    if (aMeshInfo.myType == eSTRUCTURE) {
+      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+      TValueHolder<EGrilleType, med_grid_type> aGridType(theGridType);
+      TErr aRet = MEDmeshGridTypeRd(myFile->Id(),
+                                    &aMeshName,
+                                    &aGridType);
+
+      if (aRet < 0)
+        EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDmeshGridTypeRd(...)");
+    }
+  }
+
+  //----------------------------------------------------------------------------
+  void
+  TWrapper
+  ::GetGrilleStruct(const MED::TMeshInfo& theMeshInfo,
+                    TIntVector& theStruct,
+                    TErr* theErr)
+  {
+    TFileWrapper aFileWrapper(myFile, eLECTURE, theErr);
+
+    if (theErr && *theErr < 0)
+      return;
+
+    TErr aRet;
+    MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
+
+    TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
+    TValueHolder<TIntVector, med_int> aGridStructure(theStruct);
+
+    aRet = MEDmeshGridStructRd(myFile->Id(),
+                               &aMeshName,
+                               MED_NO_DT,
+                               MED_NO_IT,
+                               &aGridStructure);
+    if (theErr)
+      *theErr = aRet;
+    else if (aRet < 0)
+      EXCEPTION(std::runtime_error, "GetGrilleInfo - MEDmeshGridStructRd(...)");
+  }
+}
diff --git a/src/MEDWrapper/MED_Wrapper.hxx b/src/MEDWrapper/MED_Wrapper.hxx
new file mode 100644 (file)
index 0000000..841eb4e
--- /dev/null
@@ -0,0 +1,1027 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_Wrapper_HeaderFile
+#define MED_Wrapper_HeaderFile
+
+#include "MED_WrapperDef.hxx"
+#include "MED_Structures.hxx"
+#include "MED_Algorithm.hxx"
+
+#include <boost/thread/mutex.hpp>
+
+namespace MED
+{
+  //----------------------------------------------------------------------------
+  class TFile;
+  typedef boost::shared_ptr<TFile> PFile;
+
+  typedef enum {eLECTURE, eLECTURE_ECRITURE, eLECTURE_AJOUT, eCREATION} EModeAcces;
+
+  //----------------------------------------------------------------------------
+  //! Class that wraps the MED API
+  class MEDWRAPPER_EXPORT TWrapper
+  {
+    friend class TLockProxy;
+
+    typedef boost::mutex TMutex;
+    //! Synchronization primitive that allows supporting thread safety for the MED access
+    TMutex myMutex;
+
+    TWrapper();
+    TWrapper(const TWrapper&);
+    TWrapper& operator=(const TWrapper&);
+
+  public:
+    TWrapper(const std::string& theFileName);
+
+    virtual
+    ~TWrapper();
+
+    //! Read number of MED Mesh entities in the MED file
+    virtual
+    TInt
+    GetNbMeshes(TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED Mesh representation by its number
+    virtual
+    void
+    GetMeshInfo(TInt theMeshId,
+                TMeshInfo& theInfo,
+                TErr* theErr = NULL);
+
+    //! Write the MEDWrapper MED Mesh representation into the MED file
+    virtual
+    void
+    SetMeshInfo(const TMeshInfo& theInfo,
+                TErr* theErr = NULL);
+
+    void
+    SetMeshInfo(const MED::TMeshInfo& theInfo,
+                EModeAcces theMode,
+                TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED Mesh representation
+    virtual
+    PMeshInfo
+    CrMeshInfo(TInt theDim = 0,
+               TInt theSpaceDim = 0,
+               const std::string& theValue = "",
+               EMaillage theType = eNON_STRUCTURE,
+               const std::string& theDesc = "");
+
+    //! Copy constructor for the MEDWrapper MED Mesh representation
+    virtual
+    PMeshInfo
+    CrMeshInfo(const PMeshInfo& theInfo);
+
+    //! Get a MEDWrapper MED Mesh representation by its number
+    virtual
+    PMeshInfo
+    GetPMeshInfo(TInt theId,
+                 TErr* theErr = NULL);
+
+    //! Read number of MED Family entities in the MED file
+    virtual
+    TInt
+    GetNbFamilies(const TMeshInfo& theMeshInfo,
+                  TErr* theErr = NULL);
+
+    //! Read number of attributes for MED Family
+    virtual
+    TInt
+    GetNbFamAttr(TInt theFamId,
+                 const TMeshInfo& theInfo,
+                 TErr* theErr = NULL);
+
+    //! Read number of MED Groups to which the MED Family belongs to
+    virtual
+    TInt
+     GetNbFamGroup(TInt theFamId,
+                  const TMeshInfo& theInfo,
+                  TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED Family representation by its number
+    virtual
+    void
+    GetFamilyInfo(TInt theFamId,
+                  TFamilyInfo& theInfo,
+                  TErr* theErr = NULL);
+
+    //! Write a MEDWrapper MED Family representation into the MED file
+    virtual
+    void
+    SetFamilyInfo(const TFamilyInfo& theInfo,
+                  TErr* theErr = NULL);
+
+    void
+    SetFamilyInfo(const MED::TFamilyInfo& theInfo,
+                  EModeAcces theMode,
+                  TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED Family representation
+    virtual
+    PFamilyInfo
+    CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 TInt theNbGroup = 0,
+                 TInt theNbAttr = 0,
+                 TInt theId = 0,
+                 const std::string& theValue = "");
+
+    //! Create a MEDWrapper MED Family representation
+    virtual
+    PFamilyInfo
+    CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 const std::string& theValue,
+                 TInt theId,
+                 const TStringSet& theGroupNames,
+                 const TStringVector& theAttrDescs = TStringVector(),
+                 const TIntVector& theAttrIds = TIntVector(),
+                 const TIntVector& theAttrVals = TIntVector());
+
+    //! Copy constructor for the MEDWrapper MED Family representation
+    virtual
+    PFamilyInfo
+    CrFamilyInfo(const PMeshInfo& theMeshInfo,
+                 const PFamilyInfo& theInfo);
+
+    //! Get a MEDWrapper MED Family representation by its number
+    PFamilyInfo
+    GetPFamilyInfo(const PMeshInfo& theMeshInfo,
+                   TInt theId,
+                   TErr* theErr = NULL);
+
+    //! Read sequence of names for any descendant of TElemInfo
+    virtual
+    void
+    GetNames(TElemInfo& theInfo,
+             TInt theNb,
+             EEntiteMaillage theEntity,
+             EGeometrieElement theGeom,
+             TErr* theErr = NULL);
+
+    //! Write sequence of names for any descendant of TElemInfo
+    virtual
+    void
+    SetNames(const TElemInfo& theInfo,
+             EEntiteMaillage theEntity,
+             EGeometrieElement theGeom,
+             TErr* theErr = NULL);
+
+    void
+    SetNames(const TElemInfo& theInfo,
+             EModeAcces theMode,
+             EEntiteMaillage theEntity,
+             EGeometrieElement theGeom,
+             TErr* theErr = NULL);
+
+    //! Read sequence of numerated data for any descendant of TElemInfo
+    virtual
+    void
+    GetNumeration(TElemInfo& theInfo,
+                  TInt theNb,
+                  EEntiteMaillage theEntity,
+                  EGeometrieElement theGeom,
+                  TErr* theErr = NULL);
+
+    //! Write sequence of numerated data for any descendant of TElemInfo
+    virtual
+    void
+    SetNumeration(const TElemInfo& theInfo,
+                  EEntiteMaillage theEntity,
+                  EGeometrieElement theGeom,
+                  TErr* theErr = NULL);
+
+    void
+    SetNumeration(const TElemInfo& theInfo,
+                  EModeAcces theMode,
+                  EEntiteMaillage theEntity,
+                  EGeometrieElement theGeom,
+                  TErr* theErr = NULL);
+
+    //! Read sequence of MED Families' indices for any descendant of TElemInfo
+    virtual
+    void
+    GetFamilies(TElemInfo& theInfo,
+                TInt theNb,
+                EEntiteMaillage theEntity,
+                EGeometrieElement theGeom,
+                TErr* theErr = NULL);
+
+    //! Write sequence of MED Families' indices for any descendant of TElemInfo
+    virtual
+    void
+    SetFamilies(const TElemInfo& theInfo,
+                EEntiteMaillage theEntity,
+                EGeometrieElement theGeom,
+                TErr* theErr = NULL);
+
+    void
+    SetFamilies(const TElemInfo& theInfo,
+                EModeAcces theMode,
+                EEntiteMaillage theEntity,
+                EGeometrieElement theGeom,
+                TErr* theErr = NULL);
+
+    //! Read number of nodes in MED Mesh
+    virtual
+    TInt
+    GetNbNodes(const TMeshInfo& theMeshInfo,
+               TErr* theErr = NULL);
+
+    virtual
+    TInt
+    GetNbNodes(const TMeshInfo& theMeshInfo,
+               ETable theTable,
+               TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED Nodes representation from the MED file
+    virtual
+    void
+    GetNodeInfo(TNodeInfo& theInfo,
+                TErr* theErr = NULL);
+
+    //! Write the MEDWrapper MED Nodes representation into the MED file
+    virtual
+    void
+    SetNodeInfo(const TNodeInfo& theInfo,
+                TErr* theErr = NULL);
+
+    void
+    SetNodeInfo(const MED::TNodeInfo& theInfo,
+                EModeAcces theMode,
+                TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED Nodes representation
+    virtual
+    PNodeInfo
+    CrNodeInfo(const PMeshInfo& theMeshInfo,
+               TInt theNbElem,
+               EModeSwitch theMode = eFULL_INTERLACE,
+               ERepere theSystem = eCART,
+               EBooleen theIsElemNum = eVRAI,
+               EBooleen theIsElemNames = eVRAI);
+
+    //! Create a MEDWrapper MED Nodes representation
+    virtual
+    PNodeInfo
+    CrNodeInfo(const PMeshInfo& theMeshInfo,
+               const TFloatVector& theNodeCoords,
+               EModeSwitch theMode = eFULL_INTERLACE,
+               ERepere theSystem = eCART,
+               const TStringVector& theCoordNames = TStringVector(),
+               const TStringVector& theCoordUnits = TStringVector(),
+               const TIntVector& theFamilyNums = TIntVector(),
+               const TIntVector& theElemNums = TIntVector(),
+               const TStringVector& theElemNames = TStringVector());
+
+    //! Copy constructor for the MEDWrapper MED Nodes representation
+    virtual
+    PNodeInfo
+    CrNodeInfo(const PMeshInfo& theMeshInfo,
+               const PNodeInfo& theInfo);
+
+    //! Get a MEDWrapper MED Nodes representation from the MED file
+    PNodeInfo
+    GetPNodeInfo(const PMeshInfo& theMeshInfo,
+                 TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED Elements representation
+    virtual
+    PElemInfo
+    CrElemInfo(const PMeshInfo& theMeshInfo,
+               TInt theNbElem,
+               EBooleen theIsElemNum = eVRAI,
+               EBooleen theIsElemNames = eVRAI);
+
+    //! Create a MEDWrapper MED Elements representation
+    virtual
+    PElemInfo
+    CrElemInfo(const PMeshInfo& theMeshInfo,
+               TInt theNbElem,
+               const TIntVector& theFamNum,
+               const TIntVector& aElemNum,
+               const TStringVector& aElemNames);
+
+    //! Get a MEDWrapper MED Element representation from the MED file
+    PElemInfo
+    GetPElemInfo(const PMeshInfo& theMeshInfo,
+                 EEntiteMaillage theEntity = eNOEUD,
+                 EGeometrieElement theGeom = ePOINT1,
+                 EConnectivite theConnMode = eNOD,
+                 TErr* theErr = NULL);
+
+    //! Read number of MED Polygones in MED Mesh
+    virtual
+    TInt
+    GetNbPolygones(const TMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   EConnectivite theConnMode = eNOD,
+                   TErr* theErr = NULL);
+
+    //! Read connectivity information for the MED Polygones in defined MED Mesh
+    virtual
+    TInt
+    GetPolygoneConnSize(const TMeshInfo& theMeshInfo,
+                        EEntiteMaillage theEntity,
+                        EGeometrieElement theGeom,
+                        EConnectivite theConnMode = eNOD,
+                        TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED Polygones representation from the MED file
+    virtual
+    void
+    GetPolygoneInfo(TPolygoneInfo& theInfo,
+                    TErr* theErr = NULL);
+
+    //! Write a MEDWrapper MED Polygones representation into the MED file
+    virtual
+    void
+    SetPolygoneInfo(const TPolygoneInfo& theInfo,
+                    TErr* theErr = NULL);
+
+    void
+    SetPolygoneInfo(const MED::TPolygoneInfo& theInfo,
+                    EModeAcces theMode,
+                    TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED Polygones representation
+    virtual
+    PPolygoneInfo
+    CrPolygoneInfo(const PMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   TInt theNbElem,
+                   TInt theConnSize,
+                   EConnectivite theConnMode = eNOD,
+                   EBooleen theIsElemNum = eVRAI,
+                   EBooleen theIsElemNames = eVRAI);
+
+    //! Create a MEDWrapper MED Polygones representation
+    virtual
+    PPolygoneInfo
+    CrPolygoneInfo(const PMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   const TIntVector& theIndexes,
+                   const TIntVector& theConnectivities,
+                   EConnectivite theConnMode = eNOD,
+                   const TIntVector& theFamilyNums = TIntVector(),
+                   const TIntVector& theElemNums = TIntVector(),
+                   const TStringVector& theElemNames = TStringVector());
+
+    //! Copy constructor for the MEDWrapper MED Polygones representation
+    virtual
+    PPolygoneInfo
+    CrPolygoneInfo(const PMeshInfo& theMeshInfo,
+                   const PPolygoneInfo& theInfo);
+
+    //! Get a MEDWrapper MED Polygones representation from the MED file
+    PPolygoneInfo
+    GetPPolygoneInfo(const PMeshInfo& theMeshInfo,
+                     EEntiteMaillage theEntity,
+                     EGeometrieElement theGeom,
+                     EConnectivite theConnMode = eNOD);
+
+    //! Read number of MED Polyedres in MED Mesh
+    virtual
+    TInt
+    GetNbPolyedres(const TMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   EConnectivite theConnMode = eNOD,
+                   TErr* theErr = NULL);
+
+    //! Read connectivity information for the MED Polyedres in MED Mesh
+    virtual
+    void
+    GetPolyedreConnSize(const TMeshInfo& theMeshInfo,
+                        TInt& theNbFaces,
+                        TInt& theConnSize,
+                        EConnectivite theConnMode = eNOD,
+                        TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED Polyedres representation from the MED file
+    virtual
+    void
+    GetPolyedreInfo(TPolyedreInfo& theInfo,
+                    TErr* theErr = NULL);
+
+    //! Write a MEDWrapper MED Polyedres representation into the MED file
+    virtual
+    void
+    SetPolyedreInfo(const TPolyedreInfo& theInfo,
+                    TErr* theErr = NULL);
+
+    void
+    SetPolyedreInfo(const MED::TPolyedreInfo& theInfo,
+                    EModeAcces theMode,
+                    TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED Polyedres representation
+    virtual
+    PPolyedreInfo
+    CrPolyedreInfo(const PMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   TInt theNbElem,
+                   TInt theNbFaces,
+                   TInt theConnSize,
+                   EConnectivite theConnMode = eNOD,
+                   EBooleen theIsElemNum = eVRAI,
+                   EBooleen theIsElemNames = eVRAI);
+
+    //! Create a MEDWrapper MED Polyedres representation
+    virtual
+    PPolyedreInfo
+    CrPolyedreInfo(const PMeshInfo& theMeshInfo,
+                   EEntiteMaillage theEntity,
+                   EGeometrieElement theGeom,
+                   const TIntVector& theIndexes,
+                   const TIntVector& theFaces,
+                   const TIntVector& theConnectivities,
+                   EConnectivite theConnMode = eNOD,
+                   const TIntVector& theFamilyNums = TIntVector(),
+                   const TIntVector& theElemNums = TIntVector(),
+                   const TStringVector& theElemNames = TStringVector());
+
+    //! Copy constructor for the MEDWrapper MED Polyedres representation
+    virtual
+    PPolyedreInfo
+    CrPolyedreInfo(const PMeshInfo& theMeshInfo,
+                   const PPolyedreInfo& theInfo);
+
+    //! Get a MEDWrapper MED Polyedres representation from the MED file
+    PPolyedreInfo
+    GetPPolyedreInfo(const PMeshInfo& theMeshInfo,
+                     EEntiteMaillage theEntity,
+                     EGeometrieElement theGeom,
+                     EConnectivite theConnMode = eNOD);
+
+    //! Get TEntityInfo which contains brief information about existing cells
+    //  and their destribution among MED ENTITIES
+    virtual
+    TEntityInfo
+    GetEntityInfo(const TMeshInfo& theMeshInfo,
+                  EConnectivite theConnMode = eNOD,
+                  TErr* theErr = NULL);
+
+    //! Read number of cells for defined MED Mesh, ENTITY and geometrical type with given connectivity mode
+    virtual
+    TInt
+    GetNbCells(const TMeshInfo& theMeshInfo,
+               EEntiteMaillage theEntity,
+               EGeometrieElement theGeom,
+               EConnectivite theConnMode = eNOD,
+               TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED Cells representation from the MED file
+    virtual
+    void
+    GetCellInfo(TCellInfo& theInfo,
+                TErr* theErr = NULL);
+
+    //! Write the MEDWrapper MED Cells representation into the MED file
+    virtual
+    void
+    SetCellInfo(const TCellInfo& theInfo,
+                TErr* theErr = NULL);
+
+    void
+    SetCellInfo(const MED::TCellInfo& theInfo,
+                EModeAcces theMode,
+                TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED Cells representation
+    virtual
+    PCellInfo
+    CrCellInfo(const PMeshInfo& theMeshInfo,
+               EEntiteMaillage theEntity,
+               EGeometrieElement theGeom,
+               TInt theNbElem,
+               EConnectivite theConnMode = eNOD,
+               EBooleen theIsElemNum = eVRAI,
+               EBooleen theIsElemNames = eVRAI,
+               EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! Create a MEDWrapper MED Cells representation
+    virtual
+    PCellInfo
+    CrCellInfo(const PMeshInfo& theMeshInfo,
+               EEntiteMaillage theEntity,
+               EGeometrieElement theGeom,
+               const TIntVector& theConnectivities,
+               EConnectivite theConnMode = eNOD,
+               const TIntVector& theFamilyNums = TIntVector(),
+               const TIntVector& theElemNums = TIntVector(),
+               const TStringVector& theElemNames = TStringVector(),
+               EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! Copy constructor for the MEDWrapper MED Cells representation
+    virtual
+    PCellInfo
+    CrCellInfo(const PMeshInfo& theMeshInfo,
+               const PCellInfo& theInfo);
+
+    //! Get a MEDWrapper MED Cells representation from the MED file
+    PCellInfo
+    GetPCellInfo(const PMeshInfo& theMeshInfo,
+                 EEntiteMaillage theEntity,
+                 EGeometrieElement theGeom,
+                 EConnectivite theConnMode = eNOD,
+                 TErr* theErr = NULL);
+
+    //! Read geom type of MED_BALL structural element
+    EGeometrieElement
+    GetBallGeom(const TMeshInfo& theMeshInfo);
+
+    //! Read number of balls in the Mesh
+    /*! This feature is supported since version 3.0 */
+    virtual
+    TInt
+    GetNbBalls(const TMeshInfo& theMeshInfo);
+
+    //! Read a MEDWrapper representation of MED_BALL from the MED file
+    /*! This feature is supported since version 3.0 */
+    virtual
+    void
+    GetBallInfo(TBallInfo& theInfo,
+                TErr* theErr = NULL);
+
+    //! Write a MEDWrapper representation of MED_BALL into the MED file
+    /*! This feature is supported since version 3.0 */
+    virtual
+    void
+    SetBallInfo(const TBallInfo& theInfo,
+                TErr* theErr = NULL);
+
+    void
+    SetBallInfo(const TBallInfo& theInfo,
+                EModeAcces theMode,
+                TErr* theErr);
+
+    //! Create a MEDWrapper MED Balls representation
+    /*! This feature is supported since version 3.0 */
+    virtual
+    PBallInfo
+    CrBallInfo(const PMeshInfo& theMeshInfo,
+               TInt theNbBalls,
+               EBooleen theIsElemNum = eVRAI);
+
+    //! Create a MEDWrapper MED Balls representation
+    /*! This feature is supported since version 3.0 */
+    virtual
+    PBallInfo
+    CrBallInfo(const PMeshInfo& theMeshInfo,
+               const TIntVector& theNodes,
+               TFloatVector& theDiameters,
+               const TIntVector& theFamilyNums = TIntVector(),
+               const TIntVector& theElemNums = TIntVector());
+
+    //! Copy constructor for the MEDWrapper MED Balls representation
+    /*! This feature is supported since version 3.0 */
+    virtual
+    PBallInfo
+    CrBallInfo(const PMeshInfo& theMeshInfo,
+               const PBallInfo& theInfo);
+
+    //! Get a MEDWrapper MED Balls representation from the MED file
+    /*! This feature is supported since version 3.0 */
+    virtual
+    PBallInfo
+    GetPBallInfo(const PMeshInfo& theMeshInfo);
+
+    //! Read number of MED FIELDS in the MED Mesh
+    virtual
+    TInt
+    GetNbFields(TErr* theErr = NULL);
+
+    //! Read number of components for the MED FIELD by its order number
+    virtual
+    TInt
+    GetNbComp(TInt theFieldId,
+              TErr* theErr = NULL);
+
+    //! Read MEDWrapper MED FIELD representation from the MED file by its order number
+    virtual
+    void
+    GetFieldInfo(TInt theFieldId,
+                 TFieldInfo& theInfo,
+                 TErr* theErr = NULL);
+
+    //! Write MEDWrapper MED FIELD representation into the MED file
+    virtual
+    void
+    SetFieldInfo(const TFieldInfo& theInfo,
+                 TErr* theErr = NULL);
+
+    void
+    SetFieldInfo(const MED::TFieldInfo& theInfo,
+                 EModeAcces theMode,
+                 TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED FIELD representation
+    virtual
+    PFieldInfo
+    CrFieldInfo(const PMeshInfo& theMeshInfo,
+                TInt theNbComp = 0,
+                ETypeChamp theType = eFLOAT64,
+                const std::string& theValue = "",
+                EBooleen theIsLocal = eVRAI,
+                TInt theNbRef = 1);
+
+    //! Copy constructor for the MEDWrapper MED FIELD representation
+    virtual
+    PFieldInfo
+    CrFieldInfo(const PMeshInfo& theMeshInfo,
+                const PFieldInfo& theInfo);
+
+    //! Get a MEDWrapper MED FIELD representation from the MED file
+    PFieldInfo
+    GetPFieldInfo(const PMeshInfo& theMeshInfo,
+                  TInt theId,
+                  TErr* theErr = NULL);
+
+    //! Read number of MED GAUSS in the MED Mesh
+    virtual
+    TInt
+    GetNbGauss(TErr* theErr = NULL);
+
+    //! Read brief MED GAUSS information by its order number from the MED file
+    virtual
+    TGaussInfo::TInfo
+    GetGaussPreInfo(TInt theId,
+                    TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED GAUSS representation by its order number from the MED file
+    virtual
+    void
+    GetGaussInfo(TInt theId,
+                 TGaussInfo& theInfo,
+                 TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED GAUSS representation
+    virtual
+    PGaussInfo
+    CrGaussInfo(const TGaussInfo::TInfo& theInfo,
+                EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! Read number of MED TIMESTAMPS in the MED Mesh
+    /*!
+      In addition, the following information can be obtained:
+      - what MED ENTITY the MED TIMESTAMP is connected to;
+      - what geometrical types the MED TIMESTAMP is defined on.
+    */
+    virtual
+    TInt
+    GetNbTimeStamps(const TFieldInfo& theInfo,
+                    const TEntityInfo& theEntityInfo,
+                    EEntiteMaillage& theEntity,
+                    TGeom2Size& theGeom2Size,
+                    TErr* theErr = NULL);
+
+    //! Read MEDWrapper MED TIMESTAMP representation by its order number from the MED file
+    virtual
+    void
+    GetTimeStampInfo(TInt theTimeStampId,
+                     TTimeStampInfo& theInfo,
+                     TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED TIMESTAMP representation
+    virtual
+    PTimeStampInfo
+    CrTimeStampInfo(const PFieldInfo& theFieldInfo,
+                    EEntiteMaillage theEntity,
+                    const TGeom2Size& theGeom2Size,
+                    const TGeom2NbGauss& theGeom2NbGauss = TGeom2NbGauss(),
+                    TInt theNumDt = 0,
+                    TInt theNumOrd = 0,
+                    TFloat theDt = 0,
+                    const std::string& theUnitDt = "",
+                    const TGeom2Gauss& theGeom2Gauss = TGeom2Gauss());
+
+    //! Copy constructor for the MEDWrapper MED TIMESTAMP representation
+    virtual
+    PTimeStampInfo
+    CrTimeStampInfo(const PFieldInfo& theFieldInfo,
+                    const PTimeStampInfo& theInfo);
+
+    //! Get MEDWrapper MED TIMESTAMP representation from the MED file
+    PTimeStampInfo
+    GetPTimeStampInfo(const PFieldInfo& theFieldInfo,
+                      EEntiteMaillage theEntity,
+                      const TGeom2Size& theGeom2Size,
+                      TInt theId,
+                      TErr* theErr = NULL);
+
+    //! Read number of MED PROFILES in the MED file
+    virtual
+    TInt
+    GetNbProfiles(TErr* theErr = NULL);
+
+    //! Read brief MED PROFILE information by its order number from the MED file
+    virtual
+    TProfileInfo::TInfo
+    GetProfilePreInfo(TInt theId,
+                      TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED PROFILE representation by its order number from the MED file
+    virtual
+    void
+    GetProfileInfo(TInt theId,
+                   TProfileInfo& theInfo,
+                   TErr* theErr = NULL);
+
+    //! Write a MEDWrapper MED PROFILE representation into the MED file
+    virtual
+    void
+    SetProfileInfo(const TProfileInfo& theInfo,
+                   TErr* theErr = NULL);
+
+    void
+    SetProfileInfo(const TProfileInfo& theInfo,
+                   EModeAcces theMode,
+                   TErr* theErr = NULL);
+
+    //! Create a MEDWrapper MED PROFILE representation
+    virtual
+    PProfileInfo
+    CrProfileInfo(const TProfileInfo::TInfo& theInfo,
+                  EModeProfil theMode = eCOMPACT);
+
+    //! Get a MEDWrapper MED PROFILE representation from the MED file
+    PProfileInfo
+    GetPProfileInfo(TInt theId,
+                    EModeProfil theMode = eCOMPACT,
+                    TErr* theErr = NULL);
+
+    //! Read the values for MEDWrapper MED TIMESTAMP from the MED file
+    virtual
+    void
+    GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
+                      const TMKey2Profile& theMKey2Profile,
+                      const TKey2Gauss& theKey2Gauss,
+                      TErr* theErr = NULL);
+
+    //! Write the values for MEDWrapper MED TIMESTAMP into the MED file
+    virtual
+    void
+    SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
+                      TErr* theErr = NULL);
+
+    void
+    SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
+                      EModeAcces theMode,
+                      TErr* theErr = NULL);
+
+    //! Create the values for MEDWrapper MED TIMESTAMP representation
+    virtual
+    PTimeStampValueBase
+    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     ETypeChamp theTypeChamp,
+                     const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
+                     EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! Create the values for MEDWrapper MED TIMESTAMP representation
+    virtual
+    PTimeStampValueBase
+    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
+                     EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! Copy constructor for the values for MEDWrapper MED TIMESTAMP representation
+    virtual
+    PTimeStampValueBase
+    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const PTimeStampValueBase& theInfo,
+                     ETypeChamp theTypeChamp);
+
+    //! Copy constructor for the values for MEDWrapper MED TIMESTAMP representation
+    virtual
+    PTimeStampValueBase
+    CrTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                     const PTimeStampValueBase& theInfo);
+
+    //! Get the values for MEDWrapper MED TIMESTAMP from the MED file
+    PTimeStampValueBase
+    GetPTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+                       const TMKey2Profile& theMKey2Profile,
+                       const TKey2Gauss& theKey2Gauss,
+                       TErr* theErr = NULL);
+
+    //
+    // Backward compatibility declarations
+    //
+
+    //! Read the values for MEDWrapper MED TIMESTAMP from the MED file
+    virtual
+    void
+    GetTimeStampVal(const PTimeStampVal& theVal,
+                    const TMKey2Profile& theMKey2Profile,
+                    const TKey2Gauss& theKey2Gauss,
+                    TErr* theErr = NULL);
+
+    //! Write the values for MEDWrapper MED TIMESTAMP into the MED file
+    virtual
+    void
+    SetTimeStamp(const PTimeStampVal& theVal,
+                 TErr* theErr = NULL);
+
+    //! Create the values for MEDWrapper MED TIMESTAMP representation
+    virtual
+    PTimeStampVal
+    CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                   const TGeom2Profile& theGeom2Profile = TGeom2Profile(),
+                   EModeSwitch theMode = eFULL_INTERLACE);
+
+    //! Copy constructor for the values for MEDWrapper MED TIMESTAMP representation
+    virtual
+    PTimeStampVal
+    CrTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                   const PTimeStampVal& theInfo);
+
+    //! Get the values for MEDWrapper MED TIMESTAMP from the MED file
+    PTimeStampVal
+    GetPTimeStampVal(const PTimeStampInfo& theTimeStampInfo,
+                     const TMKey2Profile& theMKey2Profile,
+                     const TKey2Gauss& theKey2Gauss,
+                     TErr* theErr = NULL);
+
+    //! Read a MEDWrapper MED Grille representation from the MED file
+    PGrilleInfo
+    GetPGrilleInfo(const PMeshInfo& theMeshInfo);
+
+    //! Read a MEDWrapper MED Grille representation from the MED file
+    PGrilleInfo
+    GetPGrilleInfo(const PMeshInfo& theMeshInfo,
+                   const PGrilleInfo& theInfo);
+
+    //! Read a MEDWrapper MED Grille representation from the MED file
+    virtual
+    void
+    GetGrilleInfo(TGrilleInfo& theInfo,
+                  TErr* theErr = NULL);
+
+    //! Write the MEDWrapper MED Grille representation into the MED file
+    virtual
+    void
+    SetGrilleInfo(const TGrilleInfo& theInfo,
+                  TErr* theErr = NULL);
+
+    void
+    SetGrilleInfo(const MED::TGrilleInfo& theGrilleInfo,
+                  EModeAcces theMode,
+                  TErr* theErr = NULL);
+
+    //! Create the MEDWrapper MED Grille representation
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const PGrilleInfo& theGrilleInfo);
+
+    //! Create the MEDWrapper MED Grille representation
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo);
+
+    //! Create the MEDWrapper MED Grille representation
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type);
+
+    //! Create the MEDWrapper MED Grille representation
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type,
+                 const TInt& nbNodes);
+
+    //! Create the MEDWrapper MED Grille representation
+    virtual
+    PGrilleInfo
+    CrGrilleInfo(const PMeshInfo& theMeshInfo,
+                 const EGrilleType& type,
+                 const MED::TIntVector& nbNodeVec);
+
+    //! Get a MEDWrapper MED Grille type
+    virtual
+    void
+    GetGrilleType(const TMeshInfo& theMeshInfo,
+                  EGrilleType& type,
+                  TErr* theErr = NULL);
+
+    //! Get a MEDWrapper MED Grille structure
+    void
+    GetGrilleStruct(const MED::TMeshInfo& theMeshInfo,
+                    TIntVector& theStruct,
+                    TErr* theErr = NULL);
+
+  protected:
+    PFile myFile;
+  };
+
+  //----------------------------------------------------------------------------
+  typedef SharedPtr<TWrapper> PWrapper;
+
+  //----------------------------------------------------------------------------
+  //! This class provides thread-safety for MEDWrapper interaction
+  class MEDWRAPPER_EXPORT TLockProxy
+  {
+    TLockProxy& operator=(const TLockProxy& );
+    TWrapper* myWrapper;
+
+  public:
+    TLockProxy(TWrapper* theWrapper);
+    ~TLockProxy();
+
+    TWrapper* operator->() const;
+  };
+
+  //----------------------------------------------------------------------------
+  //! Specialization of SharedPtr for TWrapper
+  template<>
+  class MEDWRAPPER_EXPORT SharedPtr<TWrapper>: public boost::shared_ptr<TWrapper>
+  {
+  public:
+    SharedPtr() {}
+
+    SharedPtr(TWrapper* p):
+      boost::shared_ptr<TWrapper>(p)
+    {}
+
+    template<class Y>
+    explicit SharedPtr(Y* p):
+      boost::shared_ptr<TWrapper>(p)
+    {}
+
+    template<class Y>
+    SharedPtr(const SharedPtr<Y>& r):
+      boost::shared_ptr<TWrapper>(boost::dynamic_pointer_cast<TWrapper,Y>(r))
+    {}
+
+    template<class Y>
+    SharedPtr&
+    operator=(const SharedPtr<Y>& r)
+    {
+      SharedPtr<TWrapper>(r).swap(*this);
+      return *this;
+    }
+
+    template<class Y>
+    SharedPtr&
+    operator()(Y* p) // Y must be complete
+    {
+      return operator=<Y>(SharedPtr<Y>(p));
+    }
+
+    template<class Y>
+    SharedPtr&
+    operator()(const SharedPtr<Y>& r) // Y must be complete
+    {
+      return operator=<Y>(SharedPtr<Y>(r));
+    }
+
+    TLockProxy
+    operator->() const // never throws
+    {
+      return TLockProxy(this->get());
+    }
+
+  protected:
+    operator const TWrapper&() const;
+
+    operator TWrapper&();
+
+    TWrapper&
+    operator*() const;
+
+    TWrapper*
+    get() const // never throws
+    {
+      return boost::shared_ptr<TWrapper>::get();
+    }
+  };
+}
+
+#endif // MED_Wrapper_HeaderFile
diff --git a/src/MEDWrapper/MED_WrapperDef.hxx b/src/MEDWrapper/MED_WrapperDef.hxx
new file mode 100755 (executable)
index 0000000..473abaa
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef MED_WrapperDef_HeaderFile
+#define MED_WrapperDef_HeaderFile
+
+#ifdef WIN32
+#  if defined(MEDWRAPPER_EXPORTS) || defined(MEDWrapper_EXPORTS)
+#    define MEDWRAPPER_EXPORT __declspec( dllexport )
+#  else
+#    define MEDWRAPPER_EXPORT __declspec( dllimport )
+#  endif // WIN32
+#else
+#  define MEDWRAPPER_EXPORT
+#endif
+
+#endif // MED_WrapperDef_HeaderFile
diff --git a/src/MEDWrapper/V2_2/CMakeLists.txt b/src/MEDWrapper/V2_2/CMakeLists.txt
deleted file mode 100644 (file)
index e62780c..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# Copyright (C) 2012-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-#
-# This library is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-#
-# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-#
-
-# --- options ---
-# additional include directories
-INCLUDE_DIRECTORIES(
-  ${MEDFILE_INCLUDE_DIRS}
-  ${HDF5_INCLUDE_DIRS}
-  ${Boost_INCLUDE_DIRS}
-  ${KERNEL_INCLUDE_DIRS}
-  ${CMAKE_CURRENT_SOURCE_DIR}/../Base
-)
-
-# additional preprocessor / compiler flags
-ADD_DEFINITIONS(
-  ${HDF5_DEFINITIONS}
-  ${BOOST_DEFINITIONS}
-)
-
-SET(_link_LIBRARIES
-  ${HDF5_LIBS}
-  ${MEDFILE_C_LIBRARIES}
-  ${Boost_LIBRARIES}
-  MEDWrapperBase
-)
-
-# --- headers ---
-
-# header files / no moc processing
-SET(MEDWrapper_V2_2_HEADERS
-  MED_V2_2_Wrapper.hxx
-)
-
-# --- sources ---
-
-# sources / static
-SET(MEDWrapper_V2_2_SOURCES
-  MED_V2_2_Wrapper.cxx
-)
-
-# --- rules ---
-
-ADD_LIBRARY(MEDWrapper_V2_2 ${MEDWrapper_V2_2_SOURCES})
-TARGET_LINK_LIBRARIES(MEDWrapper_V2_2 ${_link_LIBRARIES})
-INSTALL(TARGETS MEDWrapper_V2_2 EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
-
-INSTALL(FILES ${MEDWrapper_V2_2_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
diff --git a/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.cxx b/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.cxx
deleted file mode 100644 (file)
index 344542e..0000000
+++ /dev/null
@@ -1,2889 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-
-#include "MED_V2_2_Wrapper.hxx"
-#include "MED_Algorithm.hxx"
-#include "MED_Utilities.hxx"
-
-#include <med.h>
-#include <med_err.h>
-#include <med_proto.h>
-
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-// #else
-// static int MYDEBUG = 0;
-#endif
-
-
-
-namespace MED
-{
-  template<>
-  TInt
-  GetDESCLength<eV2_2>()
-  {
-    return 200;
-  }
-
-  template<>
-  TInt
-  GetIDENTLength<eV2_2>()
-  {
-    return 8;
-  }
-
-  template<>
-  TInt
-  GetNOMLength<eV2_2>()
-  {
-    return 64;
-  }
-
-  template<>
-  TInt
-  GetLNOMLength<eV2_2>()
-  {
-    return 80;
-  }
-
-  template<>
-  TInt
-  GetPNOMLength<eV2_2>()
-  {
-    return 16;
-  }
-
-  template<>
-  void
-  GetVersionRelease<eV2_2>(TInt& majeur, TInt& mineur, TInt& release)
-  {
-    majeur=MED_MAJOR_NUM;
-    mineur=MED_MINOR_NUM;
-    release=MED_RELEASE_NUM;
-  }
-
-  template<>
-  TInt
-  GetNbConn<eV2_2>(EGeometrieElement typmai,
-                   EEntiteMaillage typent,
-                   TInt mdim)
-  {
-    return typmai%100;
-  }
-
-  namespace V2_2
-  {
-
-    //---------------------------------------------------------------
-    class TFile{
-      TFile();
-      TFile(const TFile&);
-      
-    public:
-      TFile(const std::string& theFileName, TInt theMinor=-1):
-        myCount(0),
-        myFid(0), 
-        myFileName(theFileName),
-        myMinor(theMinor)
-      {
-        if ((myMinor < 0) || (myMinor > MED_MINOR_NUM)) myMinor = MED_MINOR_NUM;
-      }
-      
-      ~TFile()
-      { 
-        Close();
-      }
-      
-      void
-      Open(EModeAcces theMode, TErr* theErr = NULL)
-      {
-        if(myCount++ == 0){
-          const char* aFileName = myFileName.c_str();
-          myFid = MEDfileVersionOpen(aFileName,med_access_mode(theMode), MED_MAJOR_NUM, myMinor, MED_RELEASE_NUM);
-        }
-        if(theErr)
-          *theErr = TErr(myFid);
-        else if(myFid < 0)
-          EXCEPTION(std::runtime_error,"TFile - MEDfileVersionOpen('"<<myFileName<<"',"<<theMode<<"',"<< MED_MAJOR_NUM<<"',"<< myMinor<<"',"<< MED_RELEASE_NUM<<")");
-      }
-
-      const TIdt& Id() const 
-      { 
-        if(myFid < 0)
-          EXCEPTION(std::runtime_error,"TFile - GetFid() < 0");
-        return myFid;
-      }
-
-      void Close()
-      { 
-        if(--myCount == 0)
-          MEDfileClose(myFid);
-      }
-
-    protected:
-      TInt myCount;
-      TIdt myFid;
-      std::string myFileName;
-      TInt myMinor;
-    };
-
-
-    //---------------------------------------------------------------
-    class TFileWrapper
-    {
-      PFile myFile;
-      TInt myMinor;
-
-    public:
-      TFileWrapper(const PFile& theFile, EModeAcces theMode, TErr* theErr = NULL, TInt theMinor=-1):
-        myFile(theFile),
-        myMinor(theMinor)
-      {
-        if (myMinor < 0) myMinor = MED_MINOR_NUM;
-        myFile->Open(theMode,theErr);
-      }
-      
-      ~TFileWrapper()
-      {
-        myFile->Close();
-      }
-    };
-
-
-    //---------------------------------------------------------------
-    TVWrapper::TVWrapper(const std::string& theFileName, TInt theMinor):
-      myMinor(theMinor),
-      myFile(new TFile(theFileName, theMinor))
-    {
-      TErr aRet;
-      myFile->Open( eLECTURE_ECRITURE, &aRet );
-      if(aRet < 0) {
-        myFile->Close();
-        myFile->Open( eLECTURE, &aRet );
-      }
-      if(aRet < 0) {
-        myFile->Close();
-        myFile->Open( eCREATION, &aRet );
-      }
-    }
-
-
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbMeshes(TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      return MEDnMesh(myFile->Id());
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetMeshInfo(TInt theMeshId, 
-                  MED::TMeshInfo& theInfo,
-                  TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      TValueHolder<TString, char> aMeshName(theInfo.myName);
-      TValueHolder<TInt, med_int> aDim(theInfo.myDim);
-      TValueHolder<TInt, med_int> aSpaceDim(theInfo.mySpaceDim);
-      TValueHolder<EMaillage, med_mesh_type> aType(theInfo.myType);
-      char dtunit[MED_SNAME_SIZE+1];
-      med_sorting_type sorttype;
-      med_int nstep;
-      med_axis_type at;
-      int naxis=MEDmeshnAxis(myFile->Id(),theMeshId);
-      char *axisname=new char[naxis*MED_SNAME_SIZE+1];
-      char *axisunit=new char[naxis*MED_SNAME_SIZE+1];
-      TErr aRet = MEDmeshInfo(myFile->Id(),
-                              theMeshId,
-                              &aMeshName,
-                              &aSpaceDim,
-                              &aDim,
-                              &aType,
-                              &theInfo.myDesc[0],
-                              dtunit,
-                              &sorttype,
-                              &nstep,
-                              &at,
-                              axisname,
-                              axisunit);
-      delete [] axisname;
-      delete [] axisunit;
-      if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetMeshInfo - MEDmeshInfo(...)");
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetMeshInfo(const MED::TMeshInfo& theInfo,
-                  EModeAcces theMode,
-                  TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      MED::TMeshInfo& anInfo = const_cast<MED::TMeshInfo&>(theInfo);
-      
-      TValueHolder<TString, char> aMeshName(anInfo.myName);
-      TValueHolder<TInt, med_int> aDim(anInfo.myDim);
-      TValueHolder<TInt, med_int> aSpaceDim(anInfo.mySpaceDim);
-      TValueHolder<EMaillage, med_mesh_type> aType(anInfo.myType);
-      TValueHolder<TString, char> aDesc(anInfo.myDesc);
-
-      char *nam=new char[aSpaceDim*MED_SNAME_SIZE+1];
-      std::fill(nam,nam+aSpaceDim*MED_SNAME_SIZE+1,'\0');
-      char *unit=new char[aSpaceDim*MED_SNAME_SIZE+1];
-      std::fill(unit,unit+aSpaceDim*MED_SNAME_SIZE+1,'\0');
-      TErr aRet = MEDmeshCr(myFile->Id(),
-                            &aMeshName,
-                            aSpaceDim,
-                            aDim,
-                            aType,
-                            &aDesc,
-                            "",
-                            MED_SORT_DTIT,
-                            MED_CARTESIAN,
-                            nam,
-                            unit);
-      delete [] nam;
-      delete [] unit;
-      
-      //if(aRet == 0)
-      //  aRet = MEDunvCr(myFile->Id(),&aMeshName);
-      
-      INITMSG(MYDEBUG,"TVWrapper::SetMeshInfo - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
-      
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetMeshInfo - MEDmeshCr(...)");
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::SetMeshInfo(const MED::TMeshInfo& theInfo,
-                  TErr* theErr)
-    {
-      TErr aRet;
-      SetMeshInfo(theInfo,eLECTURE_ECRITURE,&aRet);
-      
-      if(aRet < 0)
-        SetMeshInfo(theInfo,eLECTURE_AJOUT,&aRet);
-
-      if(aRet < 0)
-        SetMeshInfo(theInfo,eCREATION,&aRet);
-
-      if(theErr)
-        *theErr = aRet;
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbFamilies(const MED::TMeshInfo& theInfo,
-                    TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      MED::TMeshInfo& anInfo = const_cast<MED::TMeshInfo&>(theInfo);
-      TValueHolder<TString, char> aName(anInfo.myName);
-      return MEDnFamily(myFile->Id(),&aName);
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbFamAttr(TInt theFamId, 
-                   const MED::TMeshInfo& theInfo,
-                   TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      MED::TMeshInfo& anInfo = const_cast<MED::TMeshInfo&>(theInfo);
-
-      TValueHolder<TString, char> aName(anInfo.myName);
-
-      return MEDnFamily23Attribute(myFile->Id(),&aName,theFamId);
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbFamGroup(TInt theFamId, 
-                    const MED::TMeshInfo& theInfo,
-                    TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      MED::TMeshInfo& anInfo = const_cast<MED::TMeshInfo&>(theInfo);
-
-      TValueHolder<TString, char> aName(anInfo.myName);
-
-      return MEDnFamilyGroup(myFile->Id(),&aName,theFamId);
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetFamilyInfo(TInt theFamId, 
-                    MED::TFamilyInfo& theInfo,
-                    TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-      
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TValueHolder<TString, char> aFamilyName(theInfo.myName);
-      TValueHolder<TInt, med_int> aFamilyId(theInfo.myId);
-      TValueHolder<TFamAttr, med_int> anAttrId(theInfo.myAttrId);
-      TValueHolder<TFamAttr, med_int> anAttrVal(theInfo.myAttrVal);
-      TValueHolder<TString, char> anAttrDesc(theInfo.myAttrDesc);
-      TValueHolder<TString, char> aGroupNames(theInfo.myGroupNames);
-      
-      TErr aRet = MEDfamily23Info(myFile->Id(),
-                                  &aMeshName,
-                                  theFamId,
-                                  &aFamilyName,
-                                  &anAttrId,
-                                  &anAttrVal,
-                                  &anAttrDesc,
-                                  &aFamilyId,
-                                  &aGroupNames);
-
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetFamilyInfo - MEDfamily23Info(...) - "<<
-                  " aMeshInfo.myName = '"<<&aMeshName<<
-                  "'; theFamId = "<<theFamId<<
-                  "; theInfo.myNbGroup = "<<theInfo.myNbGroup<<
-                  "; theInfo.myNbAttr = "<<theInfo.myNbAttr);
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetFamilyInfo(const MED::TFamilyInfo& theInfo,
-                    EModeAcces theMode,
-                    TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      MED::TFamilyInfo& anInfo = const_cast<MED::TFamilyInfo&>(theInfo);
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-      
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TValueHolder<TString, char> aFamilyName(anInfo.myName);
-      TValueHolder<TInt, med_int> aFamilyId(anInfo.myId);
-      TValueHolder<TFamAttr, med_int> anAttrId(anInfo.myAttrId);
-      TValueHolder<TFamAttr, med_int> anAttrVal(anInfo.myAttrVal);
-      TValueHolder<TInt, med_int> aNbAttr(anInfo.myNbAttr);
-      TValueHolder<TString, char> anAttrDesc(anInfo.myAttrDesc);
-      TValueHolder<TInt, med_int> aNbGroup(anInfo.myNbGroup);
-      TValueHolder<TString, char> aGroupNames(anInfo.myGroupNames);
-
-      TErr aRet = MEDfamilyCr(myFile->Id(),
-                              &aMeshName, 
-                              &aFamilyName,
-                              aFamilyId,
-                              aNbGroup,
-                              &aGroupNames);                 
-
-      INITMSG(MYDEBUG,"TVWrapper::SetFamilyInfo - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
-      
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetFamilyInfo - MEDfamilyCr(...)");
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetFamilyInfo(const MED::TFamilyInfo& theInfo,
-                    TErr* theErr)
-    {
-      TErr aRet;
-      SetFamilyInfo(theInfo,eLECTURE_ECRITURE,&aRet);
-      
-      if(aRet < 0)
-        SetFamilyInfo(theInfo,eLECTURE_AJOUT,&aRet);
-
-      if(theErr)
-        *theErr = aRet;
-    }
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetNames(TElemInfo&        theInfo,
-               TInt              theNb,
-               EEntiteMaillage   theEntity, 
-               EGeometrieElement theGeom,
-               TErr*             theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      if ( theGeom == eBALL )
-        theGeom = GetBallGeom( theInfo.myMeshInfo );
-
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-
-      TValueHolder<TString, char>                        aMeshName  (aMeshInfo.myName);
-      TValueHolder<TString, char>                        anElemNames(theInfo.myElemNames);
-      TValueHolder<EEntiteMaillage, med_entity_type>     anEntity   (theEntity);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom      (theGeom);
-      
-      TErr aRet = MEDmeshEntityNameRd(myFile->Id(),
-                                      &aMeshName,
-                                      MED_NO_DT,
-                                      MED_NO_IT,
-                                      anEntity,
-                                      aGeom,
-                                      &anElemNames);
-
-      theInfo.myIsElemNames = aRet != 0? eFAUX : eVRAI ;
-
-      if(theErr)
-        *theErr = aRet;
-    }
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetNumeration(TElemInfo&        theInfo,
-                    TInt              theNb,
-                    EEntiteMaillage   theEntity, 
-                    EGeometrieElement theGeom,
-                    TErr*             theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      if ( theGeom == eBALL )
-        theGeom = GetBallGeom( theInfo.myMeshInfo );
-
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-      
-      TValueHolder<TString, char>                        aMeshName(aMeshInfo.myName);
-      TValueHolder<TElemNum, med_int>                    anElemNum(theInfo.myElemNum);
-      TValueHolder<EEntiteMaillage, med_entity_type>     anEntity (theEntity);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theGeom);
-      
-      TErr aRet = MEDmeshEntityNumberRd(myFile->Id(),
-                                        &aMeshName,
-                                        MED_NO_DT,
-                                        MED_NO_IT,
-                                        anEntity,
-                                        aGeom,
-                                        &anElemNum);
-
-      theInfo.myIsElemNum = aRet != 0? eFAUX : eVRAI;
-
-      if(theErr)
-        *theErr = aRet;
-    }
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetFamilies(TElemInfo&        theInfo,
-                  TInt              theNb,
-                  EEntiteMaillage   theEntity, 
-                  EGeometrieElement theGeom,
-                  TErr*             theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-
-      if ( theGeom == eBALL )
-        theGeom = GetBallGeom( theInfo.myMeshInfo );
-      
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-
-      TValueHolder<TString, char>                        aMeshName(aMeshInfo.myName);
-      TValueHolder<TElemNum, med_int>                    aFamNum  (theInfo.myFamNum);
-      TValueHolder<EEntiteMaillage, med_entity_type>     anEntity (theEntity);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theGeom);
-      
-      TErr aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(),
-                                              &aMeshName,
-                                              MED_NO_DT,
-                                              MED_NO_IT,
-                                              anEntity,
-                                              aGeom,
-                                              &aFamNum);
-
-      if(aRet < 0)
-      {
-//        if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files
-          {
-            int aSize = (int)theInfo.myFamNum->size();
-            theInfo.myFamNum->clear();
-            theInfo.myFamNum->resize(aSize,0);
-            aRet = 0;
-          }
-//        else
-//          EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...) of CELLS");
-      }
-      if(theErr)
-        *theErr = aRet;
-    }
-
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetNames(const TElemInfo& theInfo,
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               TErr* theErr)
-    { 
-      SetNames(theInfo,eLECTURE_ECRITURE,theEntity,theGeom,theErr);
-    }
-
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetNames(const TElemInfo&  theInfo,
-               EModeAcces        theMode,
-               EEntiteMaillage   theEntity, 
-               EGeometrieElement theGeom,
-               TErr*             theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-
-      if ( theGeom == eBALL )
-        theGeom = GetBallGeom( theInfo.myMeshInfo );
-
-      MED::TElemInfo& anInfo = const_cast<MED::TElemInfo&>(theInfo);
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-
-      TErr aRet = 0;
-      if(theInfo.myIsElemNames)
-      {
-        TValueHolder<TString, char>                        aMeshName  (aMeshInfo.myName);
-        TValueHolder<TString, char>                        anElemNames(anInfo.myElemNames);
-        TValueHolder<EEntiteMaillage, med_entity_type>     anEntity   (theEntity);
-        TValueHolder<EGeometrieElement, med_geometry_type> aGeom      (theGeom);
-      
-        aRet  = MEDmeshEntityNameWr(myFile->Id(),
-                                    &aMeshName,
-                                    MED_NO_DT,
-                                    MED_NO_IT,
-                                    anEntity,
-                                    aGeom, 
-                                    (TInt)anInfo.myElemNames->size(),
-                                    &anElemNames);
-        if(theErr) 
-          *theErr = aRet;
-        else if(aRet < 0)
-          EXCEPTION(std::runtime_error,"SetNames - MEDmeshEntityNameWr(...)");
-      }
-    }
-
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetNumeration(const TElemInfo& theInfo,
-                    EEntiteMaillage theEntity, 
-                    EGeometrieElement theGeom,
-                    TErr* theErr)
-    { 
-      SetNumeration(theInfo,eLECTURE_ECRITURE,theEntity,theGeom,theErr);
-    }
-
-
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::SetNumeration(const TElemInfo&  theInfo,
-                    EModeAcces        theMode,
-                    EEntiteMaillage   theEntity, 
-                    EGeometrieElement theGeom,
-                    TErr*             theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-
-      if ( theGeom == eBALL )
-        theGeom = GetBallGeom( theInfo.myMeshInfo );
-
-      MED::TElemInfo& anInfo = const_cast<MED::TElemInfo&>(theInfo);
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-
-      TErr aRet = 0;
-      if(theInfo.myIsElemNum)
-      {
-        TValueHolder<TString, char>                        aMeshName(aMeshInfo.myName);
-        TValueHolder<TElemNum, med_int>                    anElemNum(anInfo.myElemNum);
-        TValueHolder<EEntiteMaillage, med_entity_type>     anEntity (theEntity);
-        TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theGeom);
-      
-        aRet  = MEDmeshEntityNumberWr(myFile->Id(),
-                                      &aMeshName,
-                                      MED_NO_DT,
-                                      MED_NO_IT,
-                                      anEntity,
-                                      aGeom,
-                                      (TInt)anInfo.myElemNum->size(),
-                                      &anElemNum);
-        if(theErr) 
-          *theErr = aRet;
-        else if(aRet < 0)
-          EXCEPTION(std::runtime_error,"SetNumeration - MEDmeshEntityNumberWr(...)");
-      }
-    }
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetFamilies(const TElemInfo&  theInfo,
-                  EEntiteMaillage   theEntity, 
-                  EGeometrieElement theGeom,
-                  TErr*             theErr)
-    { 
-      SetFamilies(theInfo,eLECTURE_ECRITURE,theEntity,theGeom,theErr);
-    }
-
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::SetFamilies(const TElemInfo&  theInfo,
-                  EModeAcces        theMode,
-                  EEntiteMaillage   theEntity, 
-                  EGeometrieElement theGeom,
-                  TErr*             theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-
-      if ( theGeom == eBALL )
-        theGeom = GetBallGeom( theInfo.myMeshInfo );
-
-      MED::TElemInfo& anInfo = const_cast<MED::TElemInfo&>(theInfo);
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-
-      TValueHolder<TString, char>                        aMeshName(aMeshInfo.myName);
-      TValueHolder<TElemNum, med_int>                    aFamNum  (anInfo.myFamNum);
-      TValueHolder<EEntiteMaillage, med_entity_type>     anEntity (theEntity);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theGeom);
-      
-      TErr aRet = MEDmeshEntityFamilyNumberWr(myFile->Id(),
-                                              &aMeshName,
-                                              MED_NO_DT,
-                                              MED_NO_IT,
-                                              anEntity,
-                                              aGeom,
-                                              (TInt)anInfo.myFamNum->size(),
-                                              &aFamNum);
-      
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetFamilies - MEDmeshEntityFamilyNumberWr(...)");
-    }
-    
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbNodes(const MED::TMeshInfo& theMeshInfo,
-                 ETable theTable,
-                 TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
-      
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TValueHolder<ETable, med_data_type > aTable(theTable);
-      med_bool chgt,trsf;
-      return MEDmeshnEntity(myFile->Id(),
-                            &aMeshName,
-                            MED_NO_DT,
-                            MED_NO_IT,
-                            MED_NODE,
-                            MED_NO_GEOTYPE,
-                            aTable,
-                            MED_NO_CMODE,
-                            &chgt,
-                            &trsf);
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetNodeInfo(MED::TNodeInfo& theInfo,
-                  TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TValueHolder<TInt, med_int> aDim(aMeshInfo.myDim);
-      TValueHolder<TNodeCoord, med_float> aCoord(theInfo.myCoord);
-      TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theInfo.myModeSwitch);
-      TValueHolder<ERepere, med_axis_type> aSystem(theInfo.mySystem);
-      TValueHolder<TString, char> aCoordNames(theInfo.myCoordNames);
-      TValueHolder<TString, char> aCoordUnits(theInfo.myCoordUnits);
-      TValueHolder<TString, char> anElemNames(theInfo.myElemNames);
-      //TValueHolder<EBooleen, med_bool> anIsElemNames(theInfo.myIsElemNames);
-      TValueHolder<TElemNum, med_int> anElemNum(theInfo.myElemNum);
-      //TValueHolder<EBooleen, med_bool> anIsElemNum(theInfo.myIsElemNum);
-      TValueHolder<TElemNum, med_int> aFamNum(theInfo.myFamNum);
-      TValueHolder<TInt, med_int> aNbElem(theInfo.myNbElem);
-
-      TErr aRet = MEDmeshNodeCoordinateRd(myFile->Id(),
-                                          &aMeshName,
-                                          MED_NO_DT,
-                                          MED_NO_IT,
-                                          aModeSwitch,
-                                          &aCoord);
-
-      TErr aRet2 =MEDmeshEntityFamilyNumberRd(myFile->Id(),
-                                  &aMeshName,
-                                  MED_NO_DT,
-                                  MED_NO_IT,
-                                  MED_NODE,
-                                  MED_NO_GEOTYPE ,
-                                  &aFamNum);
-      if (aRet2  < 0)
-      {
-//        if (aRet2 == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files
-          {
-            int mySize = (int)theInfo.myFamNum->size();
-            theInfo.myFamNum->clear();
-            theInfo.myFamNum->resize(mySize,0);
-          }
-//        else
-//          EXCEPTION(std::runtime_error,"GetNodeInfo - MEDmeshEntityFamilyNumberRd(...)");
-      }
-                                  
-      if ( MEDmeshEntityNameRd(myFile->Id(),
-                          &aMeshName,
-                          MED_NO_DT,
-                          MED_NO_IT,
-                          MED_NODE,
-                          MED_NO_GEOTYPE ,
-                          &anElemNames) < 0) theInfo.myIsElemNames=eFAUX;
-      
-      if ( MEDmeshEntityNumberRd(myFile->Id(),
-                            &aMeshName,
-                            MED_NO_DT,
-                            MED_NO_IT,
-                            MED_NODE,
-                            MED_NO_GEOTYPE ,
-                            &anElemNum) < 0 ) theInfo.myIsElemNum=eFAUX;
-      
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetNodeInfo - MEDmeshNodeCoordinateRd(...)");
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetNodeInfo(const MED::TNodeInfo& theInfo,
-                  EModeAcces theMode,
-                  TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      MED::TNodeInfo& anInfo = const_cast<MED::TNodeInfo&>(theInfo);
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-      
-      TValueHolder<TString, char>                aMeshName    (aMeshInfo.myName);
-      TValueHolder<TNodeCoord, med_float>        aCoord       (anInfo.myCoord);
-      TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch  (anInfo.myModeSwitch);
-      TValueHolder<ERepere, med_axis_type>       aSystem      (anInfo.mySystem);
-      TValueHolder<TString, char>                aCoordNames  (anInfo.myCoordNames);
-      TValueHolder<TString, char>                aCoordUnits  (anInfo.myCoordUnits);
-      TValueHolder<TString, char>                anElemNames  (anInfo.myElemNames);
-      TValueHolder<EBooleen, med_bool>           anIsElemNames(anInfo.myIsElemNames);
-      TValueHolder<TElemNum, med_int>            anElemNum    (anInfo.myElemNum);
-      TValueHolder<EBooleen, med_bool>           anIsElemNum  (anInfo.myIsElemNum);
-      TValueHolder<TElemNum, med_int>            aFamNum      (anInfo.myFamNum);
-      TValueHolder<TInt, med_int>                aNbElem      (anInfo.myNbElem);
-
-      TErr aRet = MEDmeshNodeCoordinateWr(myFile->Id(),
-                                          &aMeshName,
-                                          MED_NO_DT,
-                                          MED_NO_IT,
-                                          MED_NO_DT,
-                                          aModeSwitch,
-                                          aNbElem,
-                                          &aCoord);
-                                          
-      MEDmeshEntityFamilyNumberWr(myFile->Id(),
-                                  &aMeshName,
-                                  MED_NO_DT,
-                                  MED_NO_IT,
-                                  MED_NODE,
-                                  MED_NO_GEOTYPE,
-                                  aNbElem,
-                                  &aFamNum);
-      if(anIsElemNames)
-        MEDmeshEntityNameWr(myFile->Id(),
-                            &aMeshName,
-                            MED_NO_DT,
-                            MED_NO_IT,
-                            MED_NODE,
-                            MED_NO_GEOTYPE,
-                            aNbElem,
-                            &anElemNames);
-      if(anIsElemNum)
-        MEDmeshEntityNumberWr(myFile->Id(),
-                              &aMeshName,
-                              MED_NO_DT,
-                              MED_NO_IT,
-                              MED_NODE,
-                              MED_NO_GEOTYPE,
-                              aNbElem,
-                              &anElemNum);
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetNodeInfo - MEDmeshNodeCoordinateWr(...)");
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetNodeInfo(const MED::TNodeInfo& theInfo,
-                  TErr* theErr)
-    {
-      TErr aRet;
-      SetNodeInfo(theInfo,eLECTURE_ECRITURE,&aRet);
-      
-      if(aRet < 0)
-        SetNodeInfo(theInfo,eLECTURE_AJOUT,&aRet);
-
-      if(theErr) 
-        *theErr = aRet;
-    }
-    
-
-    //-----------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetPolygoneInfo(MED::TPolygoneInfo& theInfo,
-                      TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-        return;
-
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-
-      TValueHolder<TString, char                       > aMeshName(aMeshInfo.myName);
-      TValueHolder<TElemNum, med_int                   > anIndex  (theInfo.myIndex);
-      TValueHolder<TElemNum, med_int                   > aConn    (theInfo.myConn);
-      TValueHolder<EEntiteMaillage, med_entity_type    > anEntity (theInfo.myEntity);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (theInfo.myGeom);
-      TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(theInfo.myConnMode);
-      TInt aNbElem = (TInt)theInfo.myElemNum->size();
-
-      TErr aRet;
-      aRet = MEDmeshPolygon2Rd(myFile->Id(), &aMeshName,
-                               MED_NO_DT, MED_NO_IT,
-                               anEntity, aGeom,
-                               aConnMode, &anIndex, &aConn);
-
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetPolygoneInfo - MEDmeshPolygonRd(...)");
-
-      if(theInfo.myIsElemNames){
-        GetNames(theInfo,aNbElem,theInfo.myEntity,theInfo.myGeom,&aRet);
-        if(theErr) 
-          *theErr = aRet;
-      }
-
-      if(theInfo.myIsElemNum){
-        GetNumeration(theInfo,aNbElem,theInfo.myEntity,theInfo.myGeom,&aRet);
-        if(theErr) 
-          *theErr = aRet;
-      }
-
-      GetFamilies(theInfo,aNbElem,theInfo.myEntity,theInfo.myGeom,&aRet);
-      if(theErr) 
-        *theErr = aRet;
-    }
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetPolygoneInfo(const MED::TPolygoneInfo& theInfo,
-                      TErr* theErr)
-    {
-      SetPolygoneInfo(theInfo,eLECTURE_ECRITURE,theErr);
-    }
-    
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::SetPolygoneInfo(const MED::TPolygoneInfo& theInfo,
-                      EModeAcces theMode,
-                      TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-
-      MED::TPolygoneInfo& anInfo = const_cast<MED::TPolygoneInfo&>(theInfo);
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-
-      TValueHolder<TString, char                       > aMeshName(aMeshInfo.myName);
-      TValueHolder<TElemNum, med_int                   > anIndex  (anInfo.myIndex);
-      TValueHolder<TElemNum, med_int                   > aConn    (anInfo.myConn);
-      TValueHolder<EEntiteMaillage, med_entity_type    > anEntity (anInfo.myEntity);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom    (anInfo.myGeom);
-      TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(anInfo.myConnMode);
-
-      TErr aRet = MEDmeshPolygon2Wr(myFile->Id(), &aMeshName,
-                                    MED_NO_DT, MED_NO_IT, MED_UNDEF_DT,
-                                    anEntity, aGeom,
-                                    aConnMode, anInfo.myNbElem + 1,
-                                    &anIndex, &aConn);
-      if(theErr)
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetPolygoneInfo - MEDmeshPolygonWr(...)");
-      
-      SetNames(anInfo,theInfo.myEntity,anInfo.myGeom,&aRet);
-      if(theErr) 
-        *theErr = aRet;
-      
-      SetNumeration(anInfo,theInfo.myEntity,anInfo.myGeom,&aRet);
-      if(theErr) 
-        *theErr = aRet;
-      
-      SetFamilies(anInfo,theInfo.myEntity,anInfo.myGeom,&aRet);
-      if(theErr) 
-        *theErr = aRet;
-    }
-
-    //----------------------------------------------------------------------------
-    TInt 
-    TVWrapper
-    ::GetNbPolygones(const MED::TMeshInfo& theMeshInfo, 
-                     EEntiteMaillage theEntity, 
-                     EGeometrieElement theGeom, 
-                     EConnectivite theConnMode,
-                     TErr* theErr)
-    {
-      return GetNbCells(theMeshInfo,theEntity,theGeom,theConnMode,theErr);
-    }
-    
-    //----------------------------------------------------------------------------
-    TInt 
-    TVWrapper
-    ::GetPolygoneConnSize(const MED::TMeshInfo& theMeshInfo, 
-                          EEntiteMaillage theEntity, 
-                          EGeometrieElement theGeom, 
-                          EConnectivite theConnMode,
-                          TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-        return 0;
-
-      MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
-      
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      med_int aTaille = 0;
-      med_bool chgt,trsf;
-      aTaille=MEDmeshnEntity(myFile->Id(),
-                             &aMeshName,
-                             MED_NO_DT,
-                             MED_NO_IT,
-                             med_entity_type(theEntity),
-                             med_geometry_type(theGeom),
-                             MED_CONNECTIVITY,
-                             med_connectivity_mode(theConnMode),
-                             &chgt,
-                             &trsf);
-
-      
-      if(aTaille < 0)
-        EXCEPTION(std::runtime_error,"GetPolygoneInfo - MEDmeshnEntity(...)");
-
-      return TInt(aTaille);
-    }
-
-    //-----------------------------------------------------------------
-    void 
-    TVWrapper
-    ::GetPolyedreInfo(TPolyedreInfo& theInfo,
-                      TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-        return;
-
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TInt aNbElem = (TInt)theInfo.myElemNum->size();
-      TValueHolder<TElemNum, med_int> anIndex(theInfo.myIndex);
-      TValueHolder<TElemNum, med_int> aFaces(theInfo.myFaces);
-      TValueHolder<TElemNum, med_int> aConn(theInfo.myConn);
-      TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(theInfo.myConnMode);
-
-      TErr aRet;
-      aRet = MEDmeshPolyhedronRd(myFile->Id(),
-                                 &aMeshName,
-                                 MED_NO_DT,
-                                 MED_NO_IT,
-                                 MED_CELL,
-                                 aConnMode,
-                                 &anIndex,
-                                 &aFaces,
-                                 &aConn);
-
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetPolygoneInfo - MEDmeshPolyhedronRd(...)");
-
-      if(theInfo.myIsElemNames){
-        GetNames(theInfo,aNbElem,theInfo.myEntity,ePOLYEDRE,&aRet);
-        if(theErr)
-          *theErr = aRet;
-      }
-
-      if(theInfo.myIsElemNum){
-        GetNumeration(theInfo,aNbElem,theInfo.myEntity,ePOLYEDRE,&aRet);
-        if(theErr) 
-          *theErr = aRet;
-      }
-
-      GetFamilies(theInfo,aNbElem,theInfo.myEntity,ePOLYEDRE,&aRet);
-      if(theErr) 
-        *theErr = aRet;
-    }
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetPolyedreInfo(const TPolyedreInfo& theInfo,
-                      TErr* theErr)
-    {
-      SetPolyedreInfo(theInfo,eLECTURE_ECRITURE,theErr);
-    }
-    
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::SetPolyedreInfo(const MED::TPolyedreInfo& theInfo,
-                      EModeAcces theMode,
-                      TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-
-      MED::TPolyedreInfo& anInfo = const_cast<MED::TPolyedreInfo&>(theInfo);
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TValueHolder<TElemNum, med_int> anIndex(anInfo.myIndex);
-      TValueHolder<TElemNum, med_int> aFaces(anInfo.myFaces);
-      TValueHolder<TElemNum, med_int> aConn(anInfo.myConn);
-      TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(anInfo.myConnMode);
-
-      TErr aRet;
-      aRet = MEDmeshPolyhedronWr(myFile->Id(),
-                                 &aMeshName,
-                                 MED_NO_DT,
-                                 MED_NO_IT,
-                                 MED_UNDEF_DT,
-                                 MED_CELL,
-                                 aConnMode,
-                                 anInfo.myNbElem+1,
-                                 &anIndex,
-                                 (TInt)anInfo.myFaces->size(),
-                                 &aFaces,
-                                 &aConn);
-      
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetPolyedreInfo - MEDmeshPolyhedronWr(...)");
-      
-      TValueHolder<EEntiteMaillage, med_entity_type> anEntity(anInfo.myEntity);
-
-      if(theInfo.myIsElemNames){
-        TValueHolder<TString, char> anElemNames(anInfo.myElemNames);
-        aRet  = MEDmeshEntityNameWr(myFile->Id(),
-                                    &aMeshName,
-                                    MED_NO_DT,
-                                    MED_NO_IT,
-                                    anEntity,
-                                    MED_POLYHEDRON,
-                                    (TInt)anInfo.myElemNames->size(),
-                                    &anElemNames);
-        if(theErr) 
-          *theErr = aRet;
-        else if(aRet < 0)
-          EXCEPTION(std::runtime_error,"SetPolyedreInfo - MEDmeshEntityNameWr(...)");
-      }
-      
-      if(theInfo.myIsElemNum){
-        TValueHolder<TElemNum, med_int> anElemNum(anInfo.myElemNum);
-        aRet = MEDmeshEntityNumberWr(myFile->Id(),
-                                     &aMeshName,
-                                     MED_NO_DT,
-                                     MED_NO_IT,
-                                     anEntity,
-                                     MED_POLYHEDRON,
-                                     (TInt)anInfo.myElemNum->size(),
-                                     &anElemNum);
-        if(theErr) 
-          *theErr = aRet;
-        else if(aRet < 0)
-          EXCEPTION(std::runtime_error,"SetPolyedreInfo - MEDmeshEntityNumberWr(...)");
-      }
-      
-      
-      TValueHolder<TElemNum, med_int> aFamNum(anInfo.myFamNum);
-      aRet = MEDmeshEntityFamilyNumberWr(myFile->Id(),
-                                         &aMeshName,
-                                         MED_NO_DT,
-                                         MED_NO_IT,
-                                         anEntity,
-                                         MED_POLYHEDRON,
-                                         (TInt)anInfo.myFamNum->size(),
-                                         &aFamNum);
-      
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetPolyedreInfo - MEDmeshEntityFamilyNumberWr(...)");
-    }
-
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbPolyedres(const MED::TMeshInfo& theMeshInfo, 
-                     EEntiteMaillage theEntity, 
-                     EGeometrieElement theGeom, 
-                     EConnectivite theConnMode,
-                     TErr* theErr)
-    {
-      return GetNbCells(theMeshInfo,theEntity,theGeom,theConnMode,theErr);
-    }
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper    ::GetPolyedreConnSize(const TMeshInfo& theMeshInfo,
-                          TInt& theNbFaces,
-                          TInt& theConnSize,
-                          EConnectivite theConnMode,
-                          TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0) 
-        EXCEPTION(std::runtime_error,"GetPolyedreConnSize - (...)");
-
-      MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
-      
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TValueHolder<EConnectivite, med_connectivity_mode> aConnMode(theConnMode);
-      //TValueHolder<TInt, med_int> aNbFaces(theNbFaces);
-      //TValueHolder<TInt, med_int> aConnSize(theConnSize);
-
-      med_bool chgt,trsf;
-      theNbFaces = MEDmeshnEntity(myFile->Id(),
-                                  &aMeshName,
-                                  MED_NO_DT,
-                                  MED_NO_IT,
-                                  MED_CELL,
-                                  MED_POLYHEDRON,
-                                  MED_INDEX_NODE,
-                                  aConnMode,
-                                  &chgt,
-                                  &trsf);
-
-      theConnSize = MEDmeshnEntity(myFile->Id(),
-                                  &aMeshName,
-                                  MED_NO_DT,
-                                  MED_NO_IT,
-                                  MED_CELL,
-                                  MED_POLYHEDRON,
-                                  MED_CONNECTIVITY,
-                                  aConnMode,
-                                  &chgt,
-                                  &trsf);
-
-      if(theNbFaces < 0 || theConnSize<0)
-        EXCEPTION(std::runtime_error,"GetPolygoneInfo - MEDmeshnEntity(...)");
-
-    }
-    
-    //-----------------------------------------------------------------
-    TEntityInfo
-    TVWrapper
-    ::GetEntityInfo(const MED::TMeshInfo& theMeshInfo,
-                    EConnectivite theConnMode,
-                    TErr* theErr)
-    {
-      TEntityInfo anInfo;
-      
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return anInfo;
-
-      if(theMeshInfo.GetType() == eNON_STRUCTURE) {
-        TInt aNbElem = GetNbNodes(theMeshInfo);
-        if(aNbElem > 0){
-          anInfo[eNOEUD][ePOINT1] = aNbElem;
-          const TEntity2GeomSet& anEntity2GeomSet = GetEntity2GeomSet();
-          TEntity2GeomSet::const_iterator anIter = anEntity2GeomSet.begin();
-          TEntity2GeomSet::const_iterator anIterEnd = anEntity2GeomSet.end();
-          for(; anIter != anIterEnd; anIter++){
-            const EEntiteMaillage& anEntity = anIter->first;
-            const TGeomSet& aGeomSet = anIter->second;
-            TGeomSet::const_iterator anIter2 = aGeomSet.begin();
-            TGeomSet::const_iterator anIterEnd2 = aGeomSet.end();
-            for(; anIter2 != anIterEnd2; anIter2++){
-              const EGeometrieElement& aGeom = *anIter2;
-              aNbElem = GetNbCells(theMeshInfo,anEntity,aGeom,theConnMode,theErr);
-              if(aNbElem > 0) {
-                if ( anEntity == eSTRUCT_ELEMENT ) {
-                  const TInt nbStructTypes = aNbElem;
-                  for ( TInt structType = 0; structType < nbStructTypes; ++structType ) {
-                    // check type name to keep only "MED_BALL" structured element
-                    TValueHolder<TString, char> aMeshName((TString&) theMeshInfo.myName );
-                    char                        geotypename[ MED_NAME_SIZE + 1] = "";
-                    med_geometry_type           geotype;
-                    MEDmeshEntityInfo( myFile->Id(), &aMeshName, MED_NO_DT, MED_NO_IT,
-                                       med_entity_type(anEntity), structType+1,
-                                       geotypename, &geotype);
-                    if ( strcmp( geotypename, MED_BALL_NAME ) == 0 ) {
-                      aNbElem = GetNbCells( theMeshInfo, anEntity, EGeometrieElement(geotype),
-                                            theConnMode, theErr);
-                      if ( aNbElem > 0 )
-                        anInfo[anEntity][EGeometrieElement(geotype)] = aNbElem;
-                    }
-                  }
-                }
-                else {
-                  anInfo[anEntity][aGeom] = aNbElem;
-                }
-              }
-            }
-          }
-        }
-      } else { // eSTRUCTURE
-        EGrilleType aGrilleType;
-        TInt aNbNodes = 1;
-        TInt aNbElem  = 1;
-        TInt aNbSub   = 0;
-        TInt aDim = theMeshInfo.GetDim();
-        EGeometrieElement aGeom, aSubGeom;
-        EEntiteMaillage aSubEntity = eMAILLE;
-
-        GetGrilleType(theMeshInfo, aGrilleType);
-
-        TIntVector aStruct(aDim);
-        if(aGrilleType == eGRILLE_STANDARD)
-        {
-          GetGrilleStruct(theMeshInfo, aStruct, theErr);
-        }
-        else
-        { // eGRILLE_CARTESIENNE and eGRILLE_POLAIRE
-          ETable aTable[3] = { eCOOR_IND1, eCOOR_IND2, eCOOR_IND3 };
-          for(med_int anAxis = 0; anAxis < aDim; anAxis++)
-            aStruct[ anAxis ] = GetNbNodes(theMeshInfo, aTable[anAxis]);
-        }
-        for(med_int i = 0; i < aDim; i++){
-          aNbNodes = aNbNodes * aStruct[i];
-          aNbElem = aNbElem * (aStruct[i] - 1);
-        }
-        switch(aDim){
-        case 1:
-          aGeom = eSEG2;
-          break;
-        case 2:
-          aGeom = eQUAD4;
-          aSubGeom = eSEG2;
-          aSubEntity = eARETE;
-          aNbSub =
-            (aStruct[0]  ) * (aStruct[1]-1) +
-            (aStruct[0]-1) * (aStruct[1]  );
-          break;
-        case 3:
-          aGeom = eHEXA8;
-          aSubGeom = eQUAD4;
-          aSubEntity = eFACE;
-          aNbSub =
-            (aStruct[0]  ) * (aStruct[1]-1) * (aStruct[2]-1) +
-            (aStruct[0]-1) * (aStruct[1]  ) * (aStruct[2]-1) +
-            (aStruct[0]-1) * (aStruct[1]-1) * (aStruct[2]  );
-          break;
-        }
-        anInfo[eNOEUD][ePOINT1] = aNbNodes;
-        anInfo[eMAILLE][aGeom] = aNbElem;
-        if ( aDim > 1 )
-          anInfo[aSubEntity][aSubGeom] = aNbSub;
-      }
-      return anInfo;
-    }
-
-
-    //-----------------------------------------------------------------
-    TInt TVWrapper::GetNbCells(const MED::TMeshInfo& theMeshInfo,
-                               EEntiteMaillage theEntity,
-                               EGeometrieElement theGeom,
-                               EConnectivite theConnMode,
-                               TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-        return -1;
-
-      MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      med_bool chgt,trsf;
-      switch ( theGeom )
-      {
-      case MED::ePOLYGONE:
-      case MED::ePOLYGON2:
-      {
-        return MEDmeshnEntity(myFile->Id(),&aMeshName,
-                              MED_NO_DT,MED_NO_IT,
-                              med_entity_type(theEntity),med_geometry_type(theGeom),
-                              MED_INDEX_NODE,med_connectivity_mode(theConnMode),
-                              &chgt,&trsf)-1;
-      }
-      case MED::ePOLYEDRE:
-      {
-        return MEDmeshnEntity(myFile->Id(),&aMeshName,
-                              MED_NO_DT,MED_NO_IT,
-                              med_entity_type(theEntity),MED_POLYHEDRON,
-                              MED_INDEX_FACE,med_connectivity_mode(theConnMode),
-                              &chgt,&trsf)-1;
-      }
-      case MED::eBALL:
-      {
-        return GetNbBalls( theMeshInfo );
-      }
-      default:
-      {
-        return MEDmeshnEntity(myFile->Id(),&aMeshName,
-                              MED_NO_DT,MED_NO_IT,
-                              med_entity_type(theEntity),med_geometry_type(theGeom),
-                              MED_CONNECTIVITY,med_connectivity_mode(theConnMode),
-                              &chgt,&trsf);
-      }
-      }
-      return 0;
-    }
-
-
-    //----------------------------------------------------------------------------
-    void TVWrapper::GetCellInfo(MED::TCellInfo& theInfo, TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-        return;
-
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-
-      TValueHolder<TString, char>                        aMeshName    (aMeshInfo.myName);
-      TValueHolder<TElemNum, med_int>                    aConn        (theInfo.myConn);
-      TValueHolder<EModeSwitch, med_switch_mode>         aModeSwitch  (theInfo.myModeSwitch);
-      TValueHolder<TString, char>                        anElemNames  (theInfo.myElemNames);
-      TValueHolder<EBooleen, med_bool>                   anIsElemNames(theInfo.myIsElemNames);
-      TValueHolder<TElemNum, med_int>                    anElemNum    (theInfo.myElemNum);
-      TValueHolder<EBooleen, med_bool>                   anIsElemNum  (theInfo.myIsElemNum);
-      TValueHolder<TElemNum, med_int>                    aFamNum      (theInfo.myFamNum);
-      TValueHolder<EBooleen, med_bool>                   anIsFamNum   (theInfo.myIsFamNum);
-      TValueHolder<EEntiteMaillage, med_entity_type>     anEntity     (theInfo.myEntity);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom        (theInfo.myGeom);
-      TValueHolder<EConnectivite, med_connectivity_mode> aConnMode    (theInfo.myConnMode);
-
-      TErr aRet;
-      aRet = MEDmeshElementRd(myFile->Id(),
-                              &aMeshName,
-                              MED_NO_DT,
-                              MED_NO_IT,
-                              anEntity,
-                              aGeom,
-                              aConnMode,
-                              aModeSwitch,
-                              &aConn,
-                              &anIsElemNames,
-                              &anElemNames,
-                              &anIsElemNum,
-                              &anElemNum,
-                              &anIsFamNum,
-                              &aFamNum);
-
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetCellInfo - MEDmeshElementRd(...)");
-      
-      if (anIsFamNum == MED_FALSE)
-        {
-          int mySize = (int) theInfo.myFamNum->size();
-          theInfo.myFamNum->clear();
-          theInfo.myFamNum->resize(mySize, 0);
-        }
-      
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetCellInfo(const MED::TCellInfo& theInfo,
-                  EModeAcces theMode,
-                  TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-
-      MED::TCellInfo& anInfo    = const_cast<MED::TCellInfo&>(theInfo);
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-
-      TValueHolder<TString, char>                        aMeshName    (aMeshInfo.myName);
-      TValueHolder<TElemNum, med_int>                    aConn        (anInfo.myConn);
-      TValueHolder<EModeSwitch, med_switch_mode>         aModeSwitch  (anInfo.myModeSwitch);
-      TValueHolder<TString, char>                        anElemNames  (anInfo.myElemNames);
-      TValueHolder<EBooleen, med_bool>                   anIsElemNames(anInfo.myIsElemNames);
-      TValueHolder<TElemNum, med_int>                    anElemNum    (anInfo.myElemNum);
-      TValueHolder<EBooleen, med_bool>                   anIsElemNum  (anInfo.myIsElemNum);
-      TValueHolder<TElemNum, med_int>                    aFamNum      (anInfo.myFamNum);
-      TValueHolder<EBooleen, med_bool>                   anIsFamNum   (anInfo.myIsFamNum);
-      TValueHolder<EEntiteMaillage, med_entity_type>     anEntity     (anInfo.myEntity);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom        (anInfo.myGeom);
-      TValueHolder<EConnectivite, med_connectivity_mode> aConnMode    (anInfo.myConnMode);
-      TValueHolder<TInt, med_int>                        aNbElem      (anInfo.myNbElem);
-
-      TErr aRet;
-      aRet = MEDmeshElementConnectivityWr(myFile->Id(),
-                                          &aMeshName,
-                                          MED_NO_DT,
-                                          MED_NO_IT,
-                                          MED_UNDEF_DT,
-                                          anEntity,
-                                          aGeom,
-                                          aConnMode,
-                                          aModeSwitch,
-                                          aNbElem,
-                                          &aConn);
-
-      MEDmeshEntityFamilyNumberWr(myFile->Id(),
-                                  &aMeshName,
-                                  MED_NO_DT,
-                                  MED_NO_IT,
-                                  anEntity,
-                                  aGeom,
-                                  aNbElem,
-                                  &aFamNum);
-      if(anIsElemNames)
-        MEDmeshEntityNameWr(myFile->Id(),
-                            &aMeshName,
-                            MED_NO_DT,
-                            MED_NO_IT,
-                            anEntity,
-                            aGeom,
-                            aNbElem,
-                            &anElemNames);
-      if(anIsElemNum)
-        MEDmeshEntityNumberWr(myFile->Id(),
-                              &aMeshName,
-                              MED_NO_DT,
-                              MED_NO_IT,
-                              anEntity,
-                              aGeom,
-                              aNbElem,
-                              &anElemNum);
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetCellInfo - MEDmeshElementWr(...)");
-    }
-    
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetCellInfo(const MED::TCellInfo& theInfo,
-                  TErr* theErr)
-    {
-      SetCellInfo(theInfo,eLECTURE_ECRITURE,theErr);
-    }
-
-    //----------------------------------------------------------------------------
-    //! Read geom type of MED_BALL structural element
-    EGeometrieElement TVWrapper::GetBallGeom(const TMeshInfo& theMeshInfo)
-    {
-      TErr anError;
-      TFileWrapper aFileWrapper(myFile, eLECTURE, &anError, myMinor);
-
-      // read med_geometry_type of "MED_BALL" element
-      char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME;
-      return EGeometrieElement( MEDstructElementGeotype( myFile->Id(), geotypename ) );
-    }
-
-    //----------------------------------------------------------------------------
-    //! Read number of balls in the Mesh
-    TInt TVWrapper::GetNbBalls(const TMeshInfo& theMeshInfo)
-    {
-      TErr anError;
-      TFileWrapper aFileWrapper(myFile, eLECTURE, &anError, myMinor);
-
-      EGeometrieElement ballType = GetBallGeom( theMeshInfo );
-      if ( ballType < 0 )
-        return 0;
-
-      return GetNbCells( theMeshInfo, eSTRUCT_ELEMENT, ballType, eNOD );
-    }
-
-    //----------------------------------------------------------------------------
-    //! Read a MEDWrapped representation of MED_BALL from the MED file
-    void TVWrapper::GetBallInfo(TBallInfo& theInfo, TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      // check geometry of MED_BALL
-      if ( theInfo.myGeom == eBALL )
-      {
-        theInfo.myGeom = GetBallGeom( *theInfo.myMeshInfo );
-        if ( theInfo.myGeom < 0 ) {
-          if ( !theErr )
-            EXCEPTION(std::runtime_error,"GetBallInfo - no balls in the mesh");
-          *theErr = theInfo.myGeom;
-          return;
-        }
-      }
-
-      // read nodes ids
-      GetCellInfo( theInfo );
-
-      // read diameters
-      TValueHolder<TString, char>                        aMeshName (theInfo.myMeshInfo->myName);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom     (theInfo.myGeom);
-      TValueHolder<TFloatVector, void>                   aDiam     (theInfo.myDiameters);
-      char varattname[ MED_NAME_SIZE + 1] = MED_BALL_DIAMETER;
-
-      TErr aRet = MEDmeshStructElementVarAttRd( myFile->Id(), &aMeshName,
-                                                MED_NO_DT, MED_NO_IT,
-                                                aGeom,
-                                                varattname,
-                                                &aDiam);
-      if ( theErr )
-        *theErr = aRet;
-      else if ( aRet < 0 )
-        EXCEPTION(std::runtime_error,"GetBallInfo - pb at reading diameters");
-    }
-
-
-    //----------------------------------------------------------------------------
-    //! Write a MEDWrapped representation of MED_BALL to the MED file
-    void  TVWrapper::SetBallInfo(const TBallInfo& theInfo, EModeAcces theMode, TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-
-      TErr ret;
-      char ballsupportname[MED_NAME_SIZE+1]="BALL_SUPPORT_MESH";
-      EGeometrieElement ballGeom = GetBallGeom( *theInfo.myMeshInfo );
-      if ( ballGeom < 0 )
-      {
-        // no ball model in the file, create support mesh for it
-        char dummyname [MED_NAME_SIZE*3+1]="";
-        if (( ret = MEDsupportMeshCr( myFile->Id(),
-                                      ballsupportname,
-                                      theInfo.myMeshInfo->GetSpaceDim(),
-                                      theInfo.myMeshInfo->GetDim(),
-                                      "Support mesh for a ball model",
-                                      MED_CARTESIAN,
-                                      /*axisname=*/dummyname, /*unitname=*/dummyname)) < 0) {
-          if ( !theErr )
-            EXCEPTION(std::runtime_error,"SetBallInfo - MEDsupportMeshCr");
-          *theErr = ret;
-          return;
-        }
-        // write coordinates of 1 node
-        med_float coord[3] = {0,0,0};
-        if ((ret = MEDmeshNodeCoordinateWr(myFile->Id(),
-                                           ballsupportname, MED_NO_DT, MED_NO_IT, 0.0,
-                                           MED_FULL_INTERLACE, /*nnode=*/1, coord)) < 0) {
-          if ( !theErr )
-            EXCEPTION(std::runtime_error,"SetBallInfo - MEDmeshNodeCoordinateWr");
-          *theErr = ret;
-          return;
-        }
-        // ball model creation
-        char geotypename[ MED_NAME_SIZE + 1] = MED_BALL_NAME;
-        if (( ballGeom = (EGeometrieElement) MEDstructElementCr(myFile->Id(),
-                                                                geotypename,
-                                                                theInfo.myMeshInfo->GetSpaceDim(),
-                                                                ballsupportname,
-                                                                MED_NODE,MED_NONE)) < 0 ) {
-          if ( !theErr )
-            EXCEPTION(std::runtime_error,"SetBallInfo - MEDstructElementCr");
-          *theErr = ret;
-          return;
-        }
-        // create diameter attribute
-        if (( ret = MEDstructElementVarAttCr(myFile->Id(),
-                                             geotypename, MED_BALL_DIAMETER,
-                                             MED_ATT_FLOAT64, /*ncomp=*/1)) < 0) {
-          if ( !theErr )
-            EXCEPTION(std::runtime_error,"SetBallInfo - MEDstructElementVarAttCr");
-          *theErr = ret;
-          return;
-        }
-      } // ballGeom < 0
-
-      TBallInfo& aBallInfo = ((TBallInfo&) theInfo );
-      aBallInfo.myGeom = ballGeom;
-
-      // write node ids
-      SetCellInfo(theInfo,theMode,theErr);
-      if ( theErr && theErr < 0 )
-        return;
-
-      // write diameter
-      TValueHolder<TString, char>                        aMeshName (aBallInfo.myMeshInfo->myName);
-      TValueHolder<EGeometrieElement, med_geometry_type> aGeom     (aBallInfo.myGeom);
-      TValueHolder<TFloatVector, void>                   aDiam     (aBallInfo.myDiameters);
-      ret = MEDmeshStructElementVarAttWr(myFile->Id(), &aMeshName,
-                                         MED_NO_DT, MED_NO_IT,
-                                         aGeom, MED_BALL_DIAMETER,
-                                         theInfo.myNbElem, &aDiam);
-      if ( theErr )
-        *theErr = ret;
-      else if ( ret < 0 )
-        EXCEPTION(std::runtime_error,"SetBallInfo - MEDmeshStructElementVarAttWr");
-    }
-
-    //----------------------------------------------------------------------------
-    //! Write a MEDWrapped representation of MED_BALL to the MED file
-    void  TVWrapper::SetBallInfo(const TBallInfo& theInfo, TErr* theErr)
-    {
-      SetBallInfo( theInfo, eLECTURE_ECRITURE, theErr );
-    }
-
-    //-----------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbFields(TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      return MEDnField(myFile->Id());
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbComp(TInt theFieldId,
-                TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      return MEDfieldnComponent(myFile->Id(),theFieldId);
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetFieldInfo(TInt theFieldId, 
-                   MED::TFieldInfo& theInfo,
-                   TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      TString aFieldName(256); // Protect from memory problems with too long names
-      TValueHolder<ETypeChamp, med_field_type> aType(theInfo.myType);
-      TValueHolder<TString, char> aCompNames(theInfo.myCompNames);
-      TValueHolder<TString, char> anUnitNames(theInfo.myUnitNames);
-      MED::TMeshInfo& aMeshInfo = theInfo.myMeshInfo;
-      
-      TErr aRet;
-      med_bool local;
-      char dtunit[MED_SNAME_SIZE+1];
-          char local_mesh_name[MED_NAME_SIZE+1]="";
-      med_int nbofstp;
-      theInfo.myNbComp = MEDfieldnComponent(myFile->Id(),theFieldId);
-      aRet = MEDfieldInfo(myFile->Id(),
-                          theFieldId,
-                          &aFieldName[0],
-                          local_mesh_name,
-                          &local,
-                          &aType,
-                          &aCompNames,
-                          &anUnitNames,
-                          dtunit,
-                          &nbofstp);
-
-          if(strcmp(&aMeshInfo.myName[0],local_mesh_name) != 0 ) {
-                  if(theErr)
-                        *theErr = -1;
-                  return;
-          }
-
-      theInfo.SetName(aFieldName);
-
-      if(theErr)
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetFieldInfo - MEDfieldInfo(...)");
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetFieldInfo(const MED::TFieldInfo& theInfo,
-                   EModeAcces theMode,
-                   TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      MED::TFieldInfo& anInfo = const_cast<MED::TFieldInfo&>(theInfo);
-      
-      TValueHolder<TString, char> aFieldName(anInfo.myName);
-      TValueHolder<ETypeChamp, med_field_type> aType(anInfo.myType);
-      TValueHolder<TString, char> aCompNames(anInfo.myCompNames);
-      TValueHolder<TString, char> anUnitNames(anInfo.myUnitNames);
-      MED::TMeshInfo& aMeshInfo = anInfo.myMeshInfo;
-      TErr aRet;
-      char dtunit[MED_SNAME_SIZE+1];
-      std::fill(dtunit,dtunit+MED_SNAME_SIZE+1,'\0');
-      aRet = MEDfieldCr(myFile->Id(),
-                        &aFieldName,
-                        aType,
-                        anInfo.myNbComp,
-                        &aCompNames,
-                        &anUnitNames,
-                        dtunit,
-                        &aMeshInfo.myName[0]);
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetFieldInfo - MEDfieldCr(...)");
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetFieldInfo(const MED::TFieldInfo& theInfo,
-                   TErr* theErr)
-    {
-      TErr aRet;
-      SetFieldInfo(theInfo,eLECTURE_ECRITURE,&aRet);
-      
-      if(aRet < 0)
-        SetFieldInfo(theInfo,eLECTURE_AJOUT,&aRet);
-
-      if(theErr) 
-        *theErr = aRet;
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbGauss(TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      return MEDnLocalization(myFile->Id());
-    }
-
-
-    //----------------------------------------------------------------------------
-    TGaussInfo::TInfo
-    TVWrapper
-    ::GetGaussPreInfo(TInt theId, 
-                      TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-        return TGaussInfo::TInfo( TGaussInfo::TKey(ePOINT1,""),0 );
-      
-      med_int aNbGaussPoints = med_int();
-      TVector<char> aName(GetNOMLength<eV2_2>()+1);
-      med_geometry_type aGeom = MED_NONE;
-
-      TErr aRet;
-      med_int dim;
-      char geointerpname[MED_NAME_SIZE+1]="";
-      char ipointstructmeshname[MED_NAME_SIZE+1]="";
-      med_int nsectionmeshcell;
-      med_geometry_type sectiongeotype;
-      aRet = MEDlocalizationInfo (myFile->Id(),
-                                  theId,
-                                  &aName[0],
-                                  &aGeom,
-                                  &dim,
-                                  &aNbGaussPoints,
-                                  geointerpname,
-                                  ipointstructmeshname,
-                                  &nsectionmeshcell,
-                                  &sectiongeotype);
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetGaussPreInfo - MEDlocalizationInfo(...)");
-      return TGaussInfo::TInfo(TGaussInfo::TKey(EGeometrieElement(aGeom),&aName[0]),
-                               TInt(aNbGaussPoints));
-    }
-
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetGaussInfo(TInt theId, 
-                   TGaussInfo& theInfo,
-                   TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      TValueHolder<TNodeCoord, med_float> aRefCoord(theInfo.myRefCoord);
-      TValueHolder<TNodeCoord, med_float> aGaussCoord(theInfo.myGaussCoord);
-      TValueHolder<TWeight, med_float> aWeight(theInfo.myWeight);
-      TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theInfo.myModeSwitch);
-      TValueHolder<TString, char> aGaussName(theInfo.myName);
-
-      TErr aRet;
-      aRet = MEDlocalizationRd(myFile->Id(),
-                               &aGaussName,
-                               aModeSwitch,
-                               &aRefCoord,
-                               &aGaussCoord,
-                               &aWeight);
-
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetGaussInfo - MEDlocalizationRd(...)");
-    }
-
-
-    //----------------------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbProfiles(TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return -1;
-      
-      return MEDnProfile(myFile->Id());
-    }
-
-    TProfileInfo::TInfo
-    TVWrapper
-    ::GetProfilePreInfo(TInt theId, 
-                        TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-        return TProfileInfo::TInfo();
-      
-      med_int aSize = -1;
-      TVector<char> aName(GetNOMLength<eV2_2>()+1);
-
-      TErr aRet;
-      aRet = MEDprofileInfo(myFile->Id(),
-                            theId,
-                            &aName[0],
-                            &aSize);
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetProfilePreInfo - MEDprofileInfo(...)");
-      
-      return TProfileInfo::TInfo(&aName[0],aSize);
-    }
-
-    void
-    TVWrapper
-    ::GetProfileInfo(TInt theId, 
-                     TProfileInfo& theInfo,
-                     TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      TProfileInfo& anInfo = const_cast<TProfileInfo&>(theInfo);
-      TValueHolder<TElemNum, med_int> anElemNum(anInfo.myElemNum);
-      TValueHolder<TString, char>     aProfileName(anInfo.myName);
-
-      TErr aRet;
-      aRet = MEDprofileRd(myFile->Id(),
-                          &aProfileName,
-                          &anElemNum);
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetProfileInfo - MEDprofileRd(...)");
-    }
-
-    void
-    TVWrapper
-    ::SetProfileInfo(const TProfileInfo& theInfo,
-                     EModeAcces          theMode,
-                     TErr*               theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      TProfileInfo& anInfo = const_cast<TProfileInfo&>(theInfo);
-      TValueHolder<TElemNum, med_int> anElemNum(anInfo.myElemNum);
-      TValueHolder<TString, char>     aProfileName(anInfo.myName);
-
-      TErr aRet;
-      aRet = MEDprofileWr(myFile->Id(),      // descripteur du fichier.
-                          &aProfileName,        // tableau de valeurs du profil.
-                          theInfo.GetSize(), // taille du profil.
-                          &anElemNum);    // nom profil.
-      if(theErr)
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetProfileInfo - MEDprofileWr(...)");
-    }
-
-    void
-    TVWrapper
-    ::SetProfileInfo(const TProfileInfo& theInfo,
-                     TErr*               theErr)
-    {
-      TErr aRet;
-      SetProfileInfo(theInfo,eLECTURE_ECRITURE,&aRet);
-      
-      if(aRet < 0)
-        SetProfileInfo(theInfo,eLECTURE_AJOUT,&aRet);
-
-      if(aRet < 0)
-        SetProfileInfo(theInfo,eCREATION,&aRet);
-
-      if(theErr)
-        *theErr = aRet;
-    }
-
-    //-----------------------------------------------------------------
-    TInt
-    TVWrapper
-    ::GetNbTimeStamps(const MED::TFieldInfo& theInfo, 
-                      const MED::TEntityInfo& theEntityInfo,
-                      EEntiteMaillage& theEntity,
-                      TGeom2Size& theGeom2Size,
-                      TErr* theErr)
-    {
-      theEntity = EEntiteMaillage(-1);
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr){
-        if(theEntityInfo.empty())
-          *theErr = -1;
-        if(*theErr < 0)
-          return -1;
-      }else if(theEntityInfo.empty()) 
-        EXCEPTION(std::runtime_error,"GetNbTimeStamps - There is no any Entity on the Mesh");
-      
-      bool anIsPerformAdditionalCheck = GetNbMeshes() > 1;
-
-      theGeom2Size.clear();
-      TInt aNbTimeStamps = 0;
-      TIdt anId = myFile->Id();
-
-      MED::TFieldInfo& anInfo = const_cast<MED::TFieldInfo&>(theInfo);
-      TValueHolder<TString, char> aFieldName(anInfo.myName);
-      MED::TMeshInfo& aMeshInfo = anInfo.myMeshInfo;
-
-      // workaround for IPAL13676
-      MED::TEntityInfo localEntityInfo = theEntityInfo;
-      TEntityInfo::iterator anLocalIter = localEntityInfo.find(eMAILLE);
-      if(anLocalIter != localEntityInfo.end()){
-        localEntityInfo[eNOEUD_ELEMENT] = anLocalIter->second;
-      }
-        
-      TEntityInfo::const_iterator anIter = localEntityInfo.begin();
-      for(; anIter != localEntityInfo.end(); anIter++){
-        med_entity_type anEntity = med_entity_type(anIter->first);
-        const TGeom2Size& aGeom2Size = anIter->second;
-        TGeom2Size::const_iterator anGeomIter = aGeom2Size.begin();
-        for(; anGeomIter != aGeom2Size.end(); anGeomIter++){
-          med_geometry_type aGeom = med_geometry_type(anGeomIter->first);
-          char aMeshName[MED_NAME_SIZE+1];
-          med_bool islocal;
-          med_field_type ft;
-          char dtunit[MED_SNAME_SIZE+1];
-          med_int myNbComp = MEDfieldnComponentByName(anId,&aFieldName);
-          char *cname=new char[myNbComp*MED_SNAME_SIZE+1];
-          char *unitname=new char[myNbComp*MED_SNAME_SIZE+1];
-          TInt aNbStamps;
-          MEDfieldInfoByName(anId,
-                             &aFieldName,
-                             aMeshName,
-                             &islocal,
-                             &ft,
-                             cname,
-                             unitname,
-                             dtunit,
-                             &aNbStamps);
-          delete [] cname;
-          delete [] unitname;
-          med_int nval = 0;
-          med_int aNumDt;
-          med_int aNumOrd;
-          med_float aDt;
-          if (aNbStamps > 0)
-            {
-              MEDfieldComputingStepInfo(anId,
-                                        &aFieldName,
-                                        1,
-                                        &aNumDt,
-                                        &aNumOrd,
-                                        &aDt);
-              char profilename[MED_NAME_SIZE+1];
-              char locname[MED_NAME_SIZE+1];
-              med_int profilsize;
-              med_int aNbGauss;
-
-              // protection from crash (division by zero)
-              // inside MEDfieldnValueWithProfile function
-              // caused by the workaround for IPAL13676 (see above)
-              if( anEntity == MED_NODE_ELEMENT && aGeom % 100 == 0 )
-                continue;
-
-              nval = MEDfieldnValueWithProfile(anId,
-                                               &aFieldName,
-                                               aNumDt,
-                                               aNumOrd,
-                                               anEntity,
-                                               med_geometry_type(aGeom),
-                                               1,
-                                               MED_COMPACT_STMODE,
-                                               profilename,
-                                               &profilsize,
-                                               locname,
-                                               &aNbGauss);
-            }
-          bool anIsSatisfied =(nval > 0);
-          if(anIsSatisfied){
-            INITMSG(MYDEBUG,
-                    "GetNbTimeStamps aNbTimeStamps = "<<aNbStamps<<
-                    "; aGeom = "<<aGeom<<"; anEntity = "<<anEntity<<"\n");
-            if(anIsPerformAdditionalCheck){
-              anIsSatisfied = !strcmp(&aMeshName[0],&aMeshInfo.myName[0]);
-              if(!anIsSatisfied){
-                INITMSG(MYDEBUG,
-                        "GetNbTimeStamps aMeshName = '"<<&aMeshName[0]<<"' != "<<
-                        "; aMeshInfo.myName = '"<<&aMeshInfo.myName[0]<<"'\n");
-              }
-            }
-          }
-          if(anIsSatisfied){
-            theGeom2Size[EGeometrieElement(aGeom)] = anGeomIter->second;
-            theEntity = EEntiteMaillage(anEntity);
-            aNbTimeStamps = aNbStamps;
-          }
-        }
-        if(!theGeom2Size.empty()) 
-          break;
-      }
-      return aNbTimeStamps;
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetTimeStampInfo(TInt theTimeStampId, 
-                       MED::TTimeStampInfo& theInfo,
-                       TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      const TGeom2Size& aGeom2Size = theInfo.myGeom2Size;
-      
-      if(theErr){
-        if(aGeom2Size.empty())
-          *theErr = -1;
-        if(*theErr < 0)
-          return;
-      }else if(aGeom2Size.empty())
-        EXCEPTION(std::runtime_error,"GetTimeStampInfo - There is no any cell");
-      
-      MED::TFieldInfo& aFieldInfo = *theInfo.myFieldInfo;
-      MED::TMeshInfo& aMeshInfo = *aFieldInfo.myMeshInfo;
-      
-      TValueHolder<TString, char> aFieldName(aFieldInfo.myName);
-      TValueHolder<EEntiteMaillage, med_entity_type> anEntity(theInfo.myEntity);
-      TValueHolder<TInt, med_int> aNumDt(theInfo.myNumDt);
-      TValueHolder<TInt, med_int> aNumOrd(theInfo.myNumOrd);
-      TValueHolder<TString, char> anUnitDt(theInfo.myUnitDt);
-      TValueHolder<TFloat, med_float> aDt(theInfo.myDt);
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TValueHolder<EBooleen, med_bool> anIsLocal(aFieldInfo.myIsLocal);
-      TValueHolder<TInt, med_int> aNbRef(aFieldInfo.myNbRef);
-
-      TGeom2NbGauss& aGeom2NbGauss = theInfo.myGeom2NbGauss;
-
-      // just to get a time stamp unit (anUnitDt)
-      med_field_type aFieldType;
-      med_int aNbComp = MEDfieldnComponentByName(myFile->Id(), &aFieldName);
-      char *aCompName = new char[aNbComp*MED_SNAME_SIZE+1];
-      char *aCompUnit = new char[aNbComp*MED_SNAME_SIZE+1];
-      TInt aNbStamps;
-      MEDfieldInfoByName(myFile->Id(),
-                         &aFieldName,
-                         &aMeshName,
-                         &anIsLocal,
-                         &aFieldType,
-                         aCompName,
-                         aCompUnit,
-                         &anUnitDt,
-                         &aNbStamps);
-      delete [] aCompName;
-      delete [] aCompUnit;
-
-      TGeom2Size::const_iterator anIter = aGeom2Size.begin();
-      for(; anIter != aGeom2Size.end(); anIter++){
-        const EGeometrieElement& aGeom = anIter->first;
-        med_int aNbGauss = -1;
-
-        TErr aRet;
-        aRet = MEDfieldComputingStepInfo(myFile->Id(),
-                                         &aFieldName,
-                                         theTimeStampId,
-                                         &aNumDt,  
-                                         &aNumOrd,
-                                         &aDt);
-        char profilename[MED_NAME_SIZE+1];
-        med_int profilsize;
-        char locname[MED_NAME_SIZE+1];
-        MEDfieldnValueWithProfile(myFile->Id(),
-                                  &aFieldName,
-                                  aNumDt,
-                                  aNumOrd,
-                                  anEntity,
-                                  med_geometry_type(aGeom),
-                                  1,
-                                  MED_COMPACT_STMODE,
-                                  profilename,
-                                  &profilsize,
-                                  locname,
-                                  &aNbGauss);
-
-        static TInt MAX_NB_GAUSS_POINTS = 32;
-        if(aNbGauss <= 0 || aNbGauss > MAX_NB_GAUSS_POINTS)
-          aNbGauss = 1;
-
-        aGeom2NbGauss[aGeom] = aNbGauss;
-
-        if(theErr) 
-          *theErr = aRet;
-        else if(aRet < 0)
-          EXCEPTION(std::runtime_error,"GetTimeStampInfo - MEDfieldnValueWithProfile(...)");
-      }      
-    }
-    
-
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
-                        const TMKey2Profile& theMKey2Profile,
-                        const TKey2Gauss& theKey2Gauss,
-                        TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      TIdt anId = myFile->Id();
-      
-      TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theTimeStampValue->myModeSwitch);
-      MED::TGeom2Profile& aGeom2Profile = theTimeStampValue->myGeom2Profile;
-
-      MED::PTimeStampInfo aTimeStampInfo = theTimeStampValue->myTimeStampInfo;
-      TValueHolder<EEntiteMaillage, med_entity_type> anEntity(aTimeStampInfo->myEntity);
-      TValueHolder<TInt, med_int> aNumDt(aTimeStampInfo->myNumDt);
-      TValueHolder<TInt, med_int> aNumOrd(aTimeStampInfo->myNumOrd);
-
-      MED::PFieldInfo aFieldInfo = aTimeStampInfo->myFieldInfo;
-      TValueHolder<TString, char> aFieldName(aFieldInfo->myName);
-      TValueHolder<EBooleen, med_bool> anIsLocal(aFieldInfo->myIsLocal);
-
-      MED::PMeshInfo aMeshInfo = aFieldInfo->myMeshInfo;
-      TValueHolder<TString, char> aMeshName(aMeshInfo->myName);
-      
-      TGeom2Gauss& aGeom2Gauss = aTimeStampInfo->myGeom2Gauss;
-      TVector<char> aGaussName(GetNOMLength<eV2_2>()+1);
-
-      med_storage_mode aProfileMode = med_storage_mode(boost::get<0>(theMKey2Profile));
-      MED::TKey2Profile aKey2Profile = boost::get<1>(theMKey2Profile);
-      TVector<char> aProfileName(GetNOMLength<eV2_2>()+1);
-
-      TGeom2Size& aGeom2Size = aTimeStampInfo->myGeom2Size;
-      TGeom2Size::iterator anIter = aGeom2Size.begin();
-      for(; anIter != aGeom2Size.end(); anIter++){
-        EGeometrieElement aGeom = anIter->first;
-        TInt aNbElem = anIter->second;
-        med_int profilesize,aNbGauss;
-
-        TInt aNbVal = MEDfieldnValueWithProfile(anId,
-                                                &aFieldName,
-                                                aNumDt,
-                                                aNumOrd,
-                                                anEntity,
-                                                med_geometry_type(aGeom),
-                                                1,
-                                                aProfileMode,
-                                                &aProfileName[0],
-                                                &profilesize,
-                                                &aGaussName[0],
-                                                &aNbGauss);
-
-        if(aNbVal <= 0){
-          if(theErr){
-            *theErr = -1;
-            return;
-          }
-          EXCEPTION(std::runtime_error,"GetTimeStampValue - MEDfieldnValueWithProfile(...) - aNbVal == "<<aNbVal<<" <= 0");
-        }
-        
-        TInt aNbComp = aFieldInfo->myNbComp;
-        TInt aNbValue = aNbVal;// / aNbGauss; rules in MED changed
-        theTimeStampValue->AllocateValue(aGeom,
-                                         aNbValue,
-                                         aNbGauss,
-                                         aNbComp);
-        TInt aValueSize = theTimeStampValue->GetValueSize(aGeom);
-
-        INITMSG(MYDEBUG,
-                "TVWrapper::GetTimeStampValue - aGeom = "<<aGeom<<
-                "; aNbVal = "<<aNbVal<<
-                "; aNbValue = "<<aNbValue<<
-                "; aNbGauss = "<<aNbGauss<<
-                "; aNbComp = "<<aNbComp<<
-                std::endl);
-        
-        TErr aRet = MEDfieldValueWithProfileRd(anId,
-                                               &aFieldName,
-                                               aNumDt,
-                                               aNumOrd,
-                                               anEntity,
-                                               med_geometry_type(aGeom),
-                                               aProfileMode,
-                                               &aProfileName[0],
-                                               aModeSwitch,
-                                               MED_ALL_CONSTITUENT,
-                                               theTimeStampValue->GetValuePtr(aGeom));
-        if(aRet < 0){
-          if(theErr){
-            *theErr = MED_FALSE;
-            return;
-          }
-          EXCEPTION(std::runtime_error,"GetTimeStampValue - MEDfieldValueWithProfileRd(...)");
-        }
-
-        MED::PGaussInfo aGaussInfo;
-        TGaussInfo::TKey aKey(aGeom,&aGaussName[0]);
-        if(strcmp(&aGaussName[0],"") != 0){
-          MED::TKey2Gauss::const_iterator anIter = theKey2Gauss.find(aKey);
-          if(anIter != theKey2Gauss.end()){
-            aGaussInfo = anIter->second;
-            aGeom2Gauss[aGeom] = aGaussInfo;
-          }
-        }
-        
-        MED::PProfileInfo aProfileInfo;
-        if(strcmp(&aProfileName[0],MED_NO_PROFILE) != 0){
-          MED::TKey2Profile::const_iterator anIter = aKey2Profile.find(&aProfileName[0]);
-          if(anIter != aKey2Profile.end()){
-            aProfileInfo = anIter->second;
-            aGeom2Profile[aGeom] = aProfileInfo;
-          }
-        }
-
-        if(aGaussInfo && aNbGauss != aGaussInfo->GetNbGauss()){
-          if(theErr){
-            *theErr = MED_FALSE;
-            return;
-          }
-          EXCEPTION(std::runtime_error,"GetTimeStampValue - aNbGauss != aGaussInfo->GetNbGauss()");
-        }
-        
-        if(aProfileInfo && aProfileInfo->IsPresent()){
-          TInt aNbSubElem = aProfileInfo->GetSize();
-          TInt aProfileSize = aNbSubElem*aNbComp*aNbGauss;
-          if(aProfileSize != aValueSize){
-            if(theErr){
-              *theErr = -1;
-              return;
-            }
-            EXCEPTION(std::runtime_error,
-                      "GetTimeStampValue - aProfileSize("<<aProfileSize<<
-                      ") != aValueSize("<<aValueSize<<
-                      "); aNbVal = "<<aNbVal<<
-                      "; anEntity = "<<anEntity<<
-                      "; aGeom = "<<aGeom<<
-                      "; aNbElem = "<<aNbElem<<
-                      "; aNbSubElem = "<<aNbSubElem<<
-                      "; aNbComp = "<<aNbComp<<
-                      "; aNbGauss = "<<aNbGauss<<
-                      "");
-          }
-        }else{
-          if((aProfileMode == MED_GLOBAL_STMODE) && (aNbElem != aNbValue)){
-            if(theErr){
-              *theErr = -1;
-              return;
-            }
-            EXCEPTION(std::runtime_error,
-                      "GetTimeStampValue - aNbElem("<<aNbElem<<
-                      ") != aNbValue("<<aNbValue<<
-                      "); aNbVal = "<<aNbVal<<
-                      "; anEntity = "<<anEntity<<
-                      "; aGeom = "<<aGeom<<
-                      "; aNbElem = "<<aNbElem<<
-                      "; aNbComp = "<<aNbComp<<
-                      "; aNbGauss = "<<aNbGauss<<
-                      "");
-          }
-        }
-      }
-    }
-    
-    
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::SetTimeStampValue(const MED::PTimeStampValueBase& theTimeStampValue,
-                        EModeAcces theMode,
-                        TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-        return;
-      
-      TErr aRet;
-      TIdt anId = myFile->Id();
-      
-      TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theTimeStampValue->myModeSwitch);
-      MED::TGeom2Profile& aGeom2Profile = theTimeStampValue->myGeom2Profile;
-
-      MED::PTimeStampInfo aTimeStampInfo = theTimeStampValue->myTimeStampInfo;
-      TValueHolder<EEntiteMaillage, med_entity_type> anEntity(aTimeStampInfo->myEntity);
-      TValueHolder<TInt, med_int> aNumDt(aTimeStampInfo->myNumDt);
-      TValueHolder<TInt, med_int> aNumOrd(aTimeStampInfo->myNumOrd);
-      TValueHolder<TString, char> anUnitDt(aTimeStampInfo->myUnitDt);
-      TValueHolder<TFloat, med_float> aDt(aTimeStampInfo->myDt);
-      MED::TGeom2Gauss& aGeom2Gauss = aTimeStampInfo->myGeom2Gauss;
-
-      MED::PFieldInfo aFieldInfo = aTimeStampInfo->myFieldInfo;
-      TValueHolder<TString, char> aFieldName(aFieldInfo->myName);
-
-      MED::PMeshInfo aMeshInfo = aFieldInfo->myMeshInfo;
-      TValueHolder<TString, char> aMeshName(aMeshInfo->myName);
-      
-      const TGeomSet& aGeomSet = theTimeStampValue->myGeomSet;
-      TGeomSet::const_iterator anIter = aGeomSet.begin();
-      for(; anIter != aGeomSet.end(); anIter++){
-        EGeometrieElement aGeom = *anIter;
-
-        TVector<char> aGaussName(GetNOMLength<eV2_2>()+1);
-        MED::TGeom2Gauss::const_iterator aGaussIter = aGeom2Gauss.find(aGeom);
-        if(aGaussIter != aGeom2Gauss.end()){
-          MED::PGaussInfo aGaussInfo = aGaussIter->second;
-          strcpy(&aGaussName[0],&aGaussInfo->myName[0]);
-        }
-
-        TVector<char> aProfileName(GetNOMLength<eV2_2>()+1);
-        med_storage_mode aProfileMode = med_storage_mode(eNO_PFLMOD);
-        MED::TGeom2Profile::const_iterator aProfileIter = aGeom2Profile.find(aGeom);
-        if(aProfileIter != aGeom2Profile.end()){
-          MED::PProfileInfo aProfileInfo = aProfileIter->second;
-          aProfileMode = med_storage_mode(aProfileInfo->myMode);
-          strcpy(&aProfileName[0],&aProfileInfo->myName[0]);
-        }
-
-        med_int aNbVal = theTimeStampValue->GetNbVal(aGeom);
-
-        aRet = MEDfieldValueWithProfileWr(anId,
-                                          &aFieldName,
-                                          aNumDt,
-                                          aNumOrd,
-                                          aDt,
-                                          anEntity,
-                                          med_geometry_type(aGeom),
-                                          aProfileMode,
-                                          &aProfileName[0],
-                                          &aGaussName[0],
-                                          aModeSwitch,
-                                          MED_ALL_CONSTITUENT,
-                                          aNbVal,
-                                          theTimeStampValue->GetValuePtr(aGeom));
-        if(aRet < 0){
-          if(theErr){
-            *theErr = MED_FALSE;
-            break;
-          }
-          EXCEPTION(std::runtime_error,"SetTimeStampValue - MEDfieldValueWithProfileWr(...)");
-        }
-        
-      }
-      
-      INITMSG(MYDEBUG,"TVWrapper::SetTimeStampValue - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
-    }
-
-    
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
-                        TErr* theErr)
-    {
-      TErr aRet;
-      SetTimeStampValue(theTimeStampValue,eLECTURE_ECRITURE,&aRet);
-      
-      if(aRet < 0)
-        SetTimeStampValue(theTimeStampValue,eLECTURE_AJOUT,&aRet);
-
-      if(theErr) 
-        *theErr = aRet;
-    }
-    
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::SetGrilleInfo(const MED::TGrilleInfo& theInfo,
-                    TErr* theErr)
-    {
-      SetGrilleInfo(theInfo,eLECTURE_ECRITURE,theErr);
-    }
-
-    //----------------------------------------------------------------------------
-    void 
-    TVWrapper
-    ::SetGrilleInfo(const MED::TGrilleInfo& theInfo,
-                    EModeAcces theMode,
-                    TErr* theErr)
-    {
-      if(theInfo.myMeshInfo->myType != eSTRUCTURE)
-        return;
-      TFileWrapper aFileWrapper(myFile,theMode,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-          return;
-
-      MED::TGrilleInfo& anInfo = const_cast<MED::TGrilleInfo&>(theInfo);
-
-      MED::TMeshInfo& aMeshInfo = *anInfo.myMeshInfo;
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-
-      TValueHolder<EGrilleType, med_grid_type > aGrilleType(anInfo.myGrilleType);
-
-      TErr aRet = 0;
-      aRet = MEDmeshGridTypeRd(myFile->Id(),
-                               &aMeshName,
-                               &aGrilleType);
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"SetGrilleInfo - MEDmeshGridTypeRd(...)");
-      
-      if(anInfo.myGrilleType == eGRILLE_STANDARD){
-        TValueHolder<TNodeCoord, med_float> aCoord(anInfo.myCoord);
-        TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(anInfo.myModeSwitch);
-        TValueHolder<TString, char> aCoordNames(anInfo.myCoordNames);
-        TValueHolder<TString, char> aCoordUnits(anInfo.myCoordUnits);
-        med_int aNbNoeuds = med_int(anInfo.myCoord.size() / aMeshInfo.myDim);
-        //med_axis_type aRepere = MED_CARTESIAN;
-
-        aRet = MEDmeshNodeCoordinateWr(myFile->Id(),
-                                       &aMeshName,
-                                       MED_NO_DT,
-                                       MED_NO_IT,
-                                       MED_UNDEF_DT,
-                                       aModeSwitch,
-                                       aNbNoeuds,
-                                       &aCoord);
-
-        if(aRet < 0)
-          EXCEPTION(std::runtime_error,"SetGrilleInfo - MEDmeshNodeCoordinateWr(...)");
-
-        TValueHolder<TIntVector, med_int> aGrilleStructure(anInfo.myGrilleStructure);
-        aRet = MEDmeshGridStructWr(myFile->Id(),
-                                    &aMeshName,
-                                   MED_NO_DT,
-                                   MED_NO_IT,
-                                   MED_UNDEF_DT,
-                                   &aGrilleStructure);
-        if(aRet < 0)
-          EXCEPTION(std::runtime_error,"SetGrilleInfo - MEDmeshGridStructWr(...)");
-        
-      } else {
-        for(med_int aAxis = 0; aAxis < aMeshInfo.myDim; aAxis++){
-          aRet = MEDmeshGridIndexCoordinateWr(myFile->Id(),
-                                              &aMeshName,
-                                              MED_NO_DT,
-                                              MED_NO_IT,
-                                              MED_UNDEF_DT,
-                                              aAxis+1,
-                                              anInfo.GetIndexes(aAxis).size(),
-                                              &anInfo.GetIndexes(aAxis)[0]);
-
-          if(aRet < 0)
-            EXCEPTION(std::runtime_error,"SetGrilleInfo - MEDmeshGridIndexCoordinateWr(...)");
-        }
-        
-      }
-
-      return;
-    }
-
-    //----------------------------------------------------------------------------
-    void
-    TVWrapper
-    ::GetGrilleInfo(TGrilleInfo& theInfo,
-                    TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-          return;
-      
-      MED::TMeshInfo& aMeshInfo = *theInfo.myMeshInfo;
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      EMaillage aMaillageType = aMeshInfo.myType;
-      
-      GetGrilleType(aMeshInfo, theInfo.myGrilleType, theErr);
-      EGrilleType aGrilleType = theInfo.myGrilleType;
-
-      TErr aRet = 0;
-      if(aMaillageType == eSTRUCTURE && aGrilleType == eGRILLE_STANDARD) {
-        GetGrilleStruct(aMeshInfo, theInfo.myGrilleStructure, theErr);
-
-        TValueHolder<TNodeCoord, med_float> aCoord(theInfo.myCoord);
-        TValueHolder<EModeSwitch, med_switch_mode> aModeSwitch(theInfo.myModeSwitch);
-        TValueHolder<TString, char> aCoordNames(theInfo.myCoordNames);
-        TValueHolder<TString, char> aCoordUnits(theInfo.myCoordUnits);
-        //med_axis_type aRepere;
-
-        aRet = MEDmeshNodeCoordinateRd(myFile->Id(),
-                                       &aMeshName,
-                                       MED_NO_DT,
-                                       MED_NO_IT,
-                                       aModeSwitch,
-                                       &aCoord);
-
-        if(theErr) 
-          *theErr = aRet;
-        else if(aRet < 0)
-          EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshNodeCoordinateRd(...)");
-
-        //TInt aNbNodes = theInfo.GetNbNodes();//GetNbFamilies(aMeshInfo);
-        TValueHolder<TElemNum, med_int> aFamNumNode(theInfo.myFamNumNode);
-        
-        aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(),
-                                           &aMeshName,
-                                           MED_NO_DT,
-                                           MED_NO_IT,
-                                           MED_NODE,
-                                           MED_NO_GEOTYPE,
-                                           &aFamNumNode);
-
-        if(aRet < 0)
-        {
-//            if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files
-              {
-                int mySize = (int)theInfo.myFamNumNode.size();
-                theInfo.myFamNumNode.clear();
-                theInfo.myFamNumNode.resize(mySize,0);
-                aRet = 0;
-              }
-//            else
-//              EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...)");
-        }
-        if(theErr) 
-          *theErr = aRet;
-
-        //============================
-      }
-
-      if(aMaillageType == eSTRUCTURE && aGrilleType != eGRILLE_STANDARD){
-        ETable aTable = eCOOR_IND1;
-        for(med_int anAxis = 1; anAxis <= aMeshInfo.myDim; anAxis++){
-          switch(anAxis){
-          case 1 :
-            aTable = eCOOR_IND1;
-            break;
-          case 2 :
-            aTable = eCOOR_IND2;
-            break;
-          case 3 :
-            aTable = eCOOR_IND3;
-            break;
-          default :
-            aRet = -1;
-          }
-            
-          if(theErr) 
-            *theErr = aRet;
-          else if(aRet < 0)
-            EXCEPTION(std::runtime_error,"GetGrilleInfo - anAxis number out of range(...)");
-          
-          TInt aNbIndexes = GetNbNodes(aMeshInfo,aTable);
-          if(aNbIndexes < 0)
-            EXCEPTION(std::runtime_error,"GetGrilleInfo - Erreur a la lecture de la taille de l'indice");
-            
-          TValueHolder<TFloatVector, med_float> anIndexes(theInfo.GetIndexes(anAxis-1));
-          //TValueHolder<ETable, med_data_type > table(aTable);
-          //char aCompNames[MED_SNAME_SIZE+1];
-          //char anUnitNames[MED_SNAME_SIZE+1];
-          aRet=MEDmeshGridIndexCoordinateRd(myFile->Id(),&aMeshName,
-                                            MED_NO_DT,MED_NO_IT,
-                                            anAxis,
-                                            &anIndexes);
-
-          //theInfo.SetCoordName(anAxis-1, aCompNames);
-          //theInfo.SetCoordUnit(anAxis-1, anUnitNames);
-          theInfo.SetGrilleStructure(anAxis-1, aNbIndexes);
-
-          if(theErr) 
-            *theErr = aRet;
-          else if(aRet < 0)
-            EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDindicesCoordLire(...)");
-        }
-      }
-
-      EGeometrieElement aGeom = theInfo.GetGeom();
-      EEntiteMaillage aEntity = theInfo.GetEntity();
-      TInt aNbCells = theInfo.GetNbCells();
-      
-      theInfo.myFamNum.resize(aNbCells);
-      TValueHolder<TElemNum, med_int> aFamNum(theInfo.myFamNum);
-      
-      aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(),
-                                         &aMeshName,MED_NO_DT,MED_NO_IT,med_entity_type(aEntity),
-                                         med_geometry_type(aGeom),&aFamNum);
-
-      if ( aMeshInfo.myDim == 3 )
-      {
-        aGeom = theInfo.GetSubGeom();
-        aEntity = theInfo.GetSubEntity();
-        aNbCells = theInfo.GetNbSubCells();
-      
-        theInfo.myFamSubNum.resize(aNbCells,0);
-        TValueHolder<TElemNum, med_int> aFamNum(theInfo.myFamSubNum);
-      
-        aRet = MEDmeshEntityFamilyNumberRd(myFile->Id(),
-                                    &aMeshName,MED_NO_DT,MED_NO_IT,
-                                    med_entity_type(aEntity),
-                                    med_geometry_type(aGeom),&aFamNum);
-      }
-      if(aRet < 0)
-      {
-//          if (aRet == MED_ERR_DOESNTEXIST) // --- only valid with MED3.x files
-            {
-              int mySize = (int)theInfo.myFamNumNode.size();
-              theInfo.myFamNumNode.clear();
-              theInfo.myFamNumNode.resize(mySize,0);
-              aRet = 0;
-            }
-//          else
-//            EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshEntityFamilyNumberRd(...)");
-      }
-      if(theErr) 
-        *theErr = aRet;
-    }
-
-    void
-    TVWrapper
-    ::GetGrilleType(const MED::TMeshInfo& theMeshInfo,
-                    EGrilleType& theGridType,
-                    TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-
-      if(theErr && *theErr < 0)
-        EXCEPTION(std::runtime_error," GetGrilleType - aFileWrapper (...)");
-
-      MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
-      
-      if(aMeshInfo.myType == eSTRUCTURE){
-        TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-        TValueHolder<EGrilleType, med_grid_type> aGridType(theGridType);
-        TErr aRet = MEDmeshGridTypeRd(myFile->Id(),
-                                      &aMeshName,
-                                      &aGridType);
-
-        if(aRet < 0)
-          EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshGridTypeRd(...)");
-      }
-    }    
-    
-    void
-    TVWrapper
-    ::GetGrilleStruct(const MED::TMeshInfo& theMeshInfo,
-                      TIntVector& theStruct,
-                      TErr* theErr)
-    {
-      TFileWrapper aFileWrapper(myFile,eLECTURE,theErr, myMinor);
-      
-      if(theErr && *theErr < 0)
-          return;
-      
-      TErr aRet;
-      MED::TMeshInfo& aMeshInfo = const_cast<MED::TMeshInfo&>(theMeshInfo);
-
-      TValueHolder<TString, char> aMeshName(aMeshInfo.myName);
-      TValueHolder<TIntVector, med_int> aGridStructure(theStruct);
-        
-      aRet = MEDmeshGridStructRd(myFile->Id(),
-                                 &aMeshName,
-                                 MED_NO_DT,
-                                 MED_NO_IT,
-                                 &aGridStructure);
-      if(theErr) 
-        *theErr = aRet;
-      else if(aRet < 0)
-        EXCEPTION(std::runtime_error,"GetGrilleInfo - MEDmeshGridStructRd(...)");
-    }
-
-  }
-}
diff --git a/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx b/src/MEDWrapper/V2_2/MED_V2_2_Wrapper.hxx
deleted file mode 100644 (file)
index 45f9a14..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-#ifndef MED_V2_2_Wrapper_HeaderFile
-#define MED_V2_2_Wrapper_HeaderFile
-
-#ifdef WIN32
- #if defined MEDWRAPPER_V2_2_EXPORTS || defined MEDWrapper_V2_2_EXPORTS
-  #if defined WIN32
-   #define MED_V22_WRAPPER_EXPORT __declspec( dllexport )
-  #else
-   #define MED_V22_WRAPPER_EXPORT
-  #endif
- #else
-  #if defined WIN32
-   #define MED_V22_WRAPPER_EXPORT __declspec( dllimport )
-  #else
-   #define MED_V22_WRAPPER_EXPORT
-  #endif
- #endif
-#else
- #define MED_V22_WRAPPER_EXPORT
-#endif
-
-#include "MED_Structures.hxx"
-#include "MED_TWrapper.hxx"
-
-namespace MED
-{
-  template<>
-  TInt MED_V22_WRAPPER_EXPORT
-  GetDESCLength<eV2_2>();
-  
-  template<>
-  TInt MED_V22_WRAPPER_EXPORT
-  GetIDENTLength<eV2_2>();
-  
-  template<>
-  TInt MED_V22_WRAPPER_EXPORT
-  GetNOMLength<eV2_2>();
-  
-  template<>
-  TInt MED_V22_WRAPPER_EXPORT
-  GetLNOMLength<eV2_2>();
-  
-  template<>
-  TInt MED_V22_WRAPPER_EXPORT
-  GetPNOMLength<eV2_2>();
-
-  template<>
-  void MED_V22_WRAPPER_EXPORT
-  GetVersionRelease<eV2_2>(TInt& majeur, TInt& mineur, TInt& release);
-
-  template<>
-  TInt MED_V22_WRAPPER_EXPORT
-  GetNbConn<eV2_2>(EGeometrieElement typmai,
-                   EEntiteMaillage typent,
-                   TInt mdim);
-
-  namespace V2_2
-  {
-    //----------------------------------------------------------------------------
-    class TFile;
-    typedef boost::shared_ptr<TFile> PFile;
-    
-    typedef enum {eLECTURE, eLECTURE_ECRITURE, eLECTURE_AJOUT, eCREATION} EModeAcces; 
-
-    //----------------------------------------------------------------------------
-    class MED_V22_WRAPPER_EXPORT TVWrapper: public MED::TTWrapper<eV2_2>
-    {
-      TVWrapper();
-      TVWrapper(const TVWrapper&);
-      TVWrapper& operator=(const TVWrapper&);
-      
-    public:
-      TVWrapper(const std::string& theFileName, TInt theMinor=-1);
-
-      //----------------------------------------------------------------------------
-      virtual 
-      TInt
-      GetNbMeshes(TErr* theErr = NULL);
-      
-      virtual
-      void
-      GetMeshInfo(TInt theMeshId, MED::TMeshInfo&,
-                               TErr* theErr = NULL);
-
-      virtual
-      void
-      SetMeshInfo(const MED::TMeshInfo& theInfo,
-                  TErr* theErr = NULL);
-      
-      void SetMeshInfo(const MED::TMeshInfo& theInfo,
-                       EModeAcces theMode,
-                       TErr* theErr = NULL);
-      
-      
-      //----------------------------------------------------------------------------
-      virtual
-      TInt
-      GetNbFamilies(const MED::TMeshInfo& theMeshInfo,
-                    TErr* theErr = NULL);
-
-      virtual 
-      TInt
-      GetNbFamAttr(TInt theFamId, 
-                   const MED::TMeshInfo& theInfo,
-                   TErr* theErr = NULL);
-      
-      virtual
-      TInt
-      GetNbFamGroup(TInt theFamId, 
-                    const MED::TMeshInfo& theInfo,
-                    TErr* theErr = NULL);
-      
-      virtual
-      void
-      GetFamilyInfo(TInt theFamId, 
-                    MED::TFamilyInfo& theInfo,
-                    TErr* theErr = NULL);
-      
-      virtual
-      void
-      SetFamilyInfo(const MED::TFamilyInfo& theInfo,
-                    TErr* theErr = NULL);
-      
-      void 
-      SetFamilyInfo(const MED::TFamilyInfo& theInfo,
-                    EModeAcces theMode,
-                    TErr* theErr = NULL);
-      
-      
-      //----------------------------------------------------------------------------
-      virtual
-      void
-      GetNames(TElemInfo& theInfo,
-               TInt nb,
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               TErr* theErr = NULL);
-
-      virtual
-      void
-      GetNumeration(TElemInfo& theInfo,
-                    TInt nb,
-                    EEntiteMaillage theEntity, 
-                    EGeometrieElement theGeom,
-                    TErr* theErr = NULL);
-
-      virtual
-      void
-      GetFamilies(TElemInfo& theInfo,
-                  TInt nb,
-                  EEntiteMaillage theEntity, 
-                  EGeometrieElement theGeom,
-                  TErr* theErr = NULL);
-
-      virtual
-      void
-      SetNames(const TElemInfo& theInfo,
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               TErr* theErr = NULL);
-
-      void
-      SetNames(const TElemInfo& theInfo,
-               EModeAcces theMode,
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               TErr* theErr = NULL);
-      
-      virtual
-      void
-      SetNumeration(const TElemInfo& theInfo,
-                    EEntiteMaillage theEntity, 
-                    EGeometrieElement theGeom,
-                    TErr* theErr = NULL);
-      void
-      SetNumeration(const TElemInfo& theInfo,
-                    EModeAcces theMode,
-                    EEntiteMaillage theEntity, 
-                    EGeometrieElement theGeom,
-                    TErr* theErr = NULL);
-      
-      virtual
-      void
-      SetFamilies(const TElemInfo& theInfo,
-                  EEntiteMaillage theEntity, 
-                  EGeometrieElement theGeom,
-                  TErr* theErr = NULL);
-      void
-      SetFamilies(const TElemInfo& theInfo,
-                  EModeAcces theMode,
-                  EEntiteMaillage theEntity, 
-                  EGeometrieElement theGeom,
-                  TErr* theErr = NULL);
-
-      //----------------------------------------------------------------------------
-      virtual
-      TInt
-      GetNbNodes(const MED::TMeshInfo& theMeshInfo,
-                 TErr* theErr = NULL)
-      {
-        return GetNbNodes(theMeshInfo,eCOOR,theErr);
-      }
-
-      TInt
-      GetNbNodes(const MED::TMeshInfo& theMeshInfo,
-                 ETable theTable,
-                 TErr* theErr = NULL);
-      
-      virtual 
-      void
-      GetNodeInfo(MED::TNodeInfo& theInfo,
-                  TErr* theErr = NULL);
-      
-      virtual
-      void
-      SetNodeInfo(const MED::TNodeInfo& theInfo,
-                  TErr* theErr = NULL);
-      
-      void
-      SetNodeInfo(const MED::TNodeInfo& theInfo,
-                  EModeAcces theMode,
-                  TErr* theErr = NULL);
-      
-      //----------------------------------------------------------------------------
-      virtual
-      void
-      GetPolygoneInfo(TPolygoneInfo& theInfo,
-                      TErr* theErr = NULL);
-
-      virtual 
-      void
-      SetPolygoneInfo(const TPolygoneInfo& theInfo,
-                                   TErr* theErr = NULL);
-      
-      void
-      SetPolygoneInfo(const MED::TPolygoneInfo& theInfo,
-                      EModeAcces theMode,
-                      TErr* theErr = NULL);
-
-      virtual 
-      TInt
-      GetNbPolygones(const TMeshInfo& theMeshInfo,
-                   EEntiteMaillage theEntity,
-                   EGeometrieElement theGeom,
-                   EConnectivite theConnMode = eNOD,
-                   TErr* theErr = NULL);
-      
-      virtual 
-      TInt
-      GetPolygoneConnSize(const TMeshInfo& theMeshInfo,
-                        EEntiteMaillage theEntity,
-                        EGeometrieElement theGeom,
-                        EConnectivite theConnMode = eNOD,
-                        TErr* theErr = NULL);
-
-      //----------------------------------------------------------------------------
-      virtual 
-      void
-      GetPolyedreInfo(TPolyedreInfo& theInfo,
-                      TErr* theErr = NULL);
-      
-      virtual
-      void
-      SetPolyedreInfo(const TPolyedreInfo& theInfo,
-                      TErr* theErr = NULL);
-      
-      void
-      SetPolyedreInfo(const MED::TPolyedreInfo& theInfo,
-                      EModeAcces theMode,
-                      TErr* theErr = NULL);
-      
-      virtual
-      TInt
-      GetNbPolyedres(const TMeshInfo& theMeshInfo,
-                     EEntiteMaillage,
-                     EGeometrieElement,
-                     EConnectivite,
-                     TErr* theErr = NULL);
-      
-      virtual 
-      void
-      GetPolyedreConnSize(const TMeshInfo& theMeshInfo,
-                          TInt& theNbFaces,
-                          TInt& theConnSize,
-                          EConnectivite theConnMode = eNOD,
-                          TErr* theErr = NULL);
-      
-      //----------------------------------------------------------------------------
-      virtual
-      TEntityInfo
-      GetEntityInfo(const MED::TMeshInfo& theMeshInfo,
-                    EConnectivite theConnMode = eNOD,
-                    TErr* theErr = NULL);
-      
-      virtual 
-      TInt
-      GetNbCells(const MED::TMeshInfo& theMeshInfo, 
-                 EEntiteMaillage, 
-                 EGeometrieElement, 
-                 EConnectivite theConnMode = eNOD,
-                 TErr* theErr = NULL);
-      
-      virtual
-      void
-      GetCellInfo(MED::TCellInfo& theInfo,
-                  TErr* theErr = NULL);
-
-      virtual 
-      void
-      SetCellInfo(const MED::TCellInfo& theInfo,
-                  TErr* theErr = NULL);
-      
-      void 
-      SetCellInfo(const MED::TCellInfo& theInfo,
-                  EModeAcces theMode,
-                  TErr* theErr = NULL);
-      
-      //----------------------------------------------------------------------------
-      //! Read geom type of MED_BALL structural element
-      EGeometrieElement GetBallGeom(const TMeshInfo& theMeshInfo);
-      
-      //! Read number of balls in the Mesh
-      virtual TInt GetNbBalls(const TMeshInfo& theMeshInfo);
-
-      //! Read a MEDWrapped representation of MED_BALL from the MED file
-      virtual void GetBallInfo(TBallInfo& theInfo, TErr* theErr = NULL);
-
-      //! Write a MEDWrapped representation of MED_BALL to the MED file
-      virtual void  SetBallInfo(const TBallInfo& theInfo, TErr* theErr);
-
-      //! Write a MEDWrapped representation of MED_BALL to the MED file
-      void  SetBallInfo(const TBallInfo& theInfo, EModeAcces theMode, TErr* theErr);
-
-      //----------------------------------------------------------------------------
-      virtual
-      TInt
-      GetNbFields(TErr* theErr = NULL);
-      
-      virtual
-      TInt
-      GetNbComp(TInt theFieldId,
-                TErr* theErr = NULL);
-      
-      virtual 
-      void
-      GetFieldInfo(TInt theFieldId, 
-                   MED::TFieldInfo& theInfo,
-                   TErr* theErr = NULL);
-      
-      virtual
-      void
-      SetFieldInfo(const MED::TFieldInfo& theInfo,
-                   TErr* theErr = NULL);
-      
-      void
-      SetFieldInfo(const MED::TFieldInfo& theInfo,
-                   EModeAcces theMode,
-                   TErr* theErr = NULL);
-      
-      //----------------------------------------------------------------------------
-      virtual 
-      TInt
-      GetNbGauss(TErr* theErr = NULL);
-
-      virtual 
-      TGaussInfo::TInfo
-      GetGaussPreInfo(TInt theId, 
-                      TErr* theErr = NULL);
-
-      virtual 
-      void
-      GetGaussInfo(TInt theId, 
-                   TGaussInfo& theInfo,
-                   TErr* theErr = NULL);
-
-      //----------------------------------------------------------------------------
-      virtual 
-      TInt
-      GetNbProfiles(TErr* theErr = NULL);
-
-      virtual 
-      TProfileInfo::TInfo
-      GetProfilePreInfo(TInt theId, 
-                        TErr* theErr = NULL);
-      
-      virtual 
-      void
-      GetProfileInfo(TInt theId, 
-                     TProfileInfo& theInfo,
-                     TErr* theErr = NULL);
-
-      virtual
-      void
-      SetProfileInfo(const TProfileInfo& theInfo,
-                     TErr*               theErr = NULL);
-
-      void
-      SetProfileInfo(const TProfileInfo& theInfo,
-                     EModeAcces          theMode,
-                     TErr*               theErr = NULL);
-
-      //----------------------------------------------------------------------------
-      virtual 
-      TInt
-      GetNbTimeStamps(const MED::TFieldInfo& theInfo, 
-                      const MED::TEntityInfo& theEntityInfo,
-                      EEntiteMaillage& theEntity,
-                      TGeom2Size& theGeom2Size,
-                      TErr* theErr = NULL);
-      
-      virtual 
-      void
-      GetTimeStampInfo(TInt theTimeStampId, 
-                       MED::TTimeStampInfo& theInfo,
-                       TErr* theErr = NULL);
-      
-      virtual
-      void
-      GetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
-                        const TMKey2Profile& theMKey2Profile,
-                        const TKey2Gauss& theKey2Gauss,
-                        TErr* theErr = NULL);
-      
-      virtual
-      void
-      SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
-                        TErr* theErr = NULL);
-      
-      void 
-      SetTimeStampValue(const PTimeStampValueBase& theTimeStampValue,
-                        EModeAcces theMode,
-                        TErr* theErr = NULL);
-      
-
-      //----------------------------------------------------------------------------
-      virtual
-      void
-      GetGrilleInfo(TGrilleInfo& theGrilleInfo,
-                    TErr* theErr = NULL);
-      
-      virtual
-      void
-      SetGrilleInfo(const MED::TGrilleInfo& theGrilleInfo,
-                    TErr* theErr = NULL);
-
-      void
-      SetGrilleInfo(const MED::TGrilleInfo& theGrilleInfo,
-                    EModeAcces theMode,
-                    TErr* theErr = NULL);
-
-      virtual
-      void
-      GetGrilleType(const MED::TMeshInfo& theMeshInfo,
-                    EGrilleType& type,
-                    TErr* theErr = NULL);
-
-      void
-      GetGrilleStruct(const MED::TMeshInfo& theMeshInfo,
-                      TIntVector& theStruct,
-                      TErr* theErr = NULL);
-
-    protected:
-      PFile myFile;
-      TInt myMinor;
-    };
-  }
-}
-
-#endif
diff --git a/src/MEDWrapper/mprint_version.cxx b/src/MEDWrapper/mprint_version.cxx
new file mode 100644 (file)
index 0000000..7ade43c
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include <med.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+
+int main (int argc, char **argv)
+{
+  if ( argc < 2 )
+    return -1;
+
+  med_idt fid = MEDfileOpen(argv[1], MED_ACC_RDONLY);
+  if (fid < 0)
+    return 1;
+
+  med_int major, minor, release;
+  med_err aRet = MEDfileNumVersionRd(fid, &major, &minor, &release);
+  MEDfileClose(fid);
+  if (aRet < 0) {
+    // VSR: simulate med 2.3.6 behavior, med file version is assumed to be 2.1 or older
+    major = 2;
+    minor = release = -1;
+  }
+
+  printf("%d.%d.%d\n", major, minor, release);
+  return 0;
+}
index 0a9be930932a69e3e95ac543e7661c1813c439b0..32240fb47e7ad4c531bbe295ee18dd3cbb2776c7 100644 (file)
 
 /*!
  * Constructor
- * @param aStudy pointer to the Study
  *
  */
-GeomSelectionTools::GeomSelectionTools(_PTR(Study) aStudy)
+GeomSelectionTools::GeomSelectionTools()
 {
-  myStudy = aStudy;
-}
-
-/*!
- * Accessor to the Study used by this GeomSelectionTools object
- * @return The study used by the GeomSelectionTools class
- */
-_PTR(Study) GeomSelectionTools::getMyStudy()
-{
-    return myStudy;
 }
 
 /*!
@@ -137,7 +126,7 @@ std::string GeomSelectionTools::getFirstSelectedEntry()
  */
 std::string GeomSelectionTools::getEntryOfObject(Handle(SALOME_InteractiveObject) anIO){
   std::string entry="";
-  _PTR(SObject) aSO = myStudy->FindObjectID(anIO->getEntry());
+  _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(anIO->getEntry());
   if (aSO){
     _PTR(SObject) aRefSObj;
     // If selected object is a reference
@@ -157,7 +146,7 @@ std::string GeomSelectionTools::getEntryOfObject(Handle(SALOME_InteractiveObject
  */
 std::string GeomSelectionTools::getNameFromEntry(std::string entry){
   std::string name = "";
-  _PTR(SObject) aSO = myStudy->FindObjectID(entry);
+  _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry);
   if (aSO){
     _PTR(SObject) aRefSObj;
     // If selected object is a reference
@@ -180,7 +169,7 @@ std::string GeomSelectionTools::getFirstSelectedComponentDataType()
   Handle(SALOME_InteractiveObject) anIO;
   std::string DataType="";
   anIO=GeomSelectionTools::getFirstSelectedSalomeObject();
-  _PTR(SObject) aSO = myStudy->FindObjectID(anIO->getEntry());
+  _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(anIO->getEntry());
   if (aSO){
     _PTR(SObject) aRefSObj;
     // If selected object is a reference
@@ -201,7 +190,7 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){
 //   MESSAGE("GeomSelectionTools::entryToShapeType"<<entry );
   TopoDS_Shape S = TopoDS_Shape();
   TopAbs_ShapeEnum ShapeType = TopAbs_SHAPE;
-   _PTR(SObject) aSO = myStudy->FindObjectID(entry);
+   _PTR(SObject) aSO = SalomeApp_Application::getStudy()->FindObjectID(entry);
   if (aSO){
     _PTR(SObject) aRefSObj;
     GEOM::GEOM_Object_var aShape;
@@ -225,7 +214,7 @@ TopAbs_ShapeEnum GeomSelectionTools::entryToShapeType(std::string entry){
         if (aShape->GetType() == GEOM_GROUP){
 //           MESSAGE("It's a group");
           GEOM::GEOM_IGroupOperations_wrap aGroupOp =
-            _geomEngine->GetIGroupOperations(myStudy->StudyId());
+            _geomEngine->GetIGroupOperations();
           ShapeType= (TopAbs_ShapeEnum)aGroupOp->GetType(aShape);
         }
         // if not
index c4013ff99ea1be648e251a9a78ea043a81f92f09..0fc4cbaf36910424fd7e9e40e1e8ee30aeda9898 100644 (file)
@@ -49,13 +49,9 @@ class LightApp_SelectionMgr;
 class PLUGINUTILS_EXPORT GeomSelectionTools
 {
 
-private:
-
-  _PTR(Study) myStudy;
-
 public:
 
-  GeomSelectionTools(_PTR(Study));
+  GeomSelectionTools();
   static SalomeApp_Application*  GetSalomeApplication();
   static LightApp_SelectionMgr* selectionMgr();
   SALOME_ListIO* getSelectedSalomeObjects();
@@ -67,7 +63,6 @@ public:
   TopAbs_ShapeEnum getFirstSelectedShapeType();
   TopAbs_ShapeEnum entryToShapeType(std::string );
   GeomAbs_SurfaceType getFaceInformation(TopoDS_Shape);
-  _PTR(Study) getMyStudy();
 };
 
 //////////////////////////////////////////
index 7858c1c4aed5d17161a0c351e7d84c8a79e5309a..e96f78f1ba598b8c2d62f05e4432deff4240a5bf 100644 (file)
@@ -27,7 +27,7 @@ INCLUDE_DIRECTORIES(
   ${Boost_INCLUDE_DIRS}
   ${HDF5_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/Controls
-  ${PROJECT_SOURCE_DIR}/src/MEDWrapper/Base
+  ${PROJECT_SOURCE_DIR}/src/MEDWrapper
   ${PROJECT_SOURCE_DIR}/src/Driver
   ${PROJECT_SOURCE_DIR}/src/DriverDAT
   ${PROJECT_SOURCE_DIR}/src/DriverMED
index 561f64471f04bd14af51428a18bacd5de113570e..febb8e0406d718825c8cdb1b2620bcc9c54c0c17 100644 (file)
@@ -173,8 +173,8 @@ const SMESH_Algo::Features& SMESH_Algo::GetFeatures( const std::string& algoType
  */
 //=============================================================================
 
-SMESH_Algo::SMESH_Algo (int hypId, int studyId, SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+SMESH_Algo::SMESH_Algo (int hypId, SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _compatibleAllHypFilter = _compatibleNoAuxHypFilter = NULL;
   _onlyUnaryInput = _requireDiscreteBoundary = _requireShape = true;
@@ -202,26 +202,26 @@ SMESH_Algo::~SMESH_Algo()
  */
 //=============================================================================
 
-SMESH_0D_Algo::SMESH_0D_Algo(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Algo(hypId, studyId, gen)
+SMESH_0D_Algo::SMESH_0D_Algo(int hypId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, gen)
 {
   _shapeType = (1 << TopAbs_VERTEX);
   _type = ALGO_0D;
 }
-SMESH_1D_Algo::SMESH_1D_Algo(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Algo(hypId, studyId, gen)
+SMESH_1D_Algo::SMESH_1D_Algo(int hypId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, gen)
 {
   _shapeType = (1 << TopAbs_EDGE);
   _type = ALGO_1D;
 }
-SMESH_2D_Algo::SMESH_2D_Algo(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Algo(hypId, studyId, gen)
+SMESH_2D_Algo::SMESH_2D_Algo(int hypId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, gen)
 {
   _shapeType = (1 << TopAbs_FACE);
   _type = ALGO_2D;
 }
-SMESH_3D_Algo::SMESH_3D_Algo(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Algo(hypId, studyId, gen)
+SMESH_3D_Algo::SMESH_3D_Algo(int hypId, SMESH_Gen* gen)
+  : SMESH_Algo(hypId, gen)
 {
   _shapeType = (1 << TopAbs_SOLID);
   _type = ALGO_3D;
index 81ff8eb3aabda71a1c9cd8e603110b2395afb9bb..03154a989fcee01691d6d04984c20881bcefef37 100644 (file)
@@ -102,10 +102,9 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
   /*!
    * \brief Creates algorithm
     * \param hypId - algorithm ID
-    * \param studyId - study ID
     * \param gen - SMESH_Gen
    */
-  SMESH_Algo(int hypId, int studyId, SMESH_Gen * gen);
+  SMESH_Algo(int hypId, SMESH_Gen * gen);
 
   /*!
    * \brief Destructor
@@ -475,19 +474,19 @@ protected:
 class SMESH_EXPORT SMESH_0D_Algo: public SMESH_Algo
 {
 public:
-  SMESH_0D_Algo(int hypId, int studyId,  SMESH_Gen* gen);
+  SMESH_0D_Algo(int hypId, SMESH_Gen* gen);
 };
 
 class SMESH_EXPORT SMESH_1D_Algo: public SMESH_Algo
 {
 public:
-  SMESH_1D_Algo(int hypId, int studyId,  SMESH_Gen* gen);
+  SMESH_1D_Algo(int hypId, SMESH_Gen* gen);
 };
 
 class SMESH_EXPORT SMESH_2D_Algo: public SMESH_Algo
 {
 public:
-  SMESH_2D_Algo(int hypId, int studyId, SMESH_Gen* gen);
+  SMESH_2D_Algo(int hypId, SMESH_Gen* gen);
   /*!
    * \brief Method in which an algorithm generating a structured mesh
    *        fixes positions of in-face nodes after there movement
@@ -500,7 +499,7 @@ public:
 class SMESH_EXPORT SMESH_3D_Algo: public SMESH_Algo
 {
 public:
-  SMESH_3D_Algo(int hypId, int studyId, SMESH_Gen* gen);
+  SMESH_3D_Algo(int hypId, SMESH_Gen* gen);
 };
 
 #endif
index 69e499dd5effcb8884fc45b732ea9091ac037258..36e454366a4165396b8da07ba93724a5e0eb7ee6 100644 (file)
@@ -65,6 +65,8 @@ using namespace std;
 
 SMESH_Gen::SMESH_Gen()
 {
+  _studyContext = new StudyContextStruct;
+  _studyContext->myDocument = new SMESHDS_Document();
   _localId = 0;
   _hypId   = 0;
   _segmentation = _nbSegments = 10;
@@ -94,19 +96,14 @@ namespace
 
 SMESH_Gen::~SMESH_Gen()
 {
-  std::map < int, StudyContextStruct * >::iterator i_sc = _mapStudyContext.begin();
-  for ( ; i_sc != _mapStudyContext.end(); ++i_sc )
-  {
-    StudyContextStruct* context = i_sc->second;
-    std::map < int, SMESH_Hypothesis * >::iterator i_hyp = context->mapHypothesis.begin();
-    for ( ; i_hyp != context->mapHypothesis.end(); ++i_hyp )
+    std::map < int, SMESH_Hypothesis * >::iterator i_hyp = _studyContext->mapHypothesis.begin();
+    for ( ; i_hyp != _studyContext->mapHypothesis.end(); ++i_hyp )
     {
       if ( _Hyp* h = static_cast< _Hyp*>( i_hyp->second ))
         h->NullifyGen();
     }
-    delete context->myDocument;
-    delete context;
-  }
+  delete _studyContext->myDocument;
+  delete _studyContext;
 }
 
 //=============================================================================
@@ -116,21 +113,17 @@ SMESH_Gen::~SMESH_Gen()
  */
 //=============================================================================
 
-SMESH_Mesh* SMESH_Gen::CreateMesh(int theStudyId, bool theIsEmbeddedMode)
+SMESH_Mesh* SMESH_Gen::CreateMesh(bool theIsEmbeddedMode)
   throw(SALOME_Exception)
 {
   Unexpect aCatch(SalomeException);
 
-  // Get studyContext, create it if it doesn't exist, with a SMESHDS_Document
-  StudyContextStruct *aStudyContext = GetStudyContext(theStudyId);
-
   // create a new SMESH_mesh object
   SMESH_Mesh *aMesh = new SMESH_Mesh(_localId++,
-                                     theStudyId,
                                      this,
                                      theIsEmbeddedMode,
-                                     aStudyContext->myDocument);
-  aStudyContext->mapMesh[_localId-1] = aMesh;
+                                     _studyContext->myDocument);
+  _studyContext->mapMesh[_localId-1] = aMesh;
 
   return aMesh;
 }
@@ -1149,17 +1142,9 @@ SMESH_Algo *SMESH_Gen::GetAlgo(SMESH_subMesh * aSubMesh,
  */
 //=============================================================================
 
-StudyContextStruct *SMESH_Gen::GetStudyContext(int studyId)
+StudyContextStruct *SMESH_Gen::GetStudyContext()
 {
-  // Get studyContext, create it if it doesn't exist, with a SMESHDS_Document
-
-  if (_mapStudyContext.find(studyId) == _mapStudyContext.end())
-  {
-    _mapStudyContext[studyId] = new StudyContextStruct;
-    _mapStudyContext[studyId]->myDocument = new SMESHDS_Document(studyId);
-  }
-  StudyContextStruct *myStudyContext = _mapStudyContext[studyId];
-  return myStudyContext;
+  return _studyContext;
 }
 
 //================================================================================
index 64eb26a70a83a274f066faab99fcf7d338f88281..d4c70292274dc1ff6767a401cc08744492b05189 100644 (file)
@@ -66,7 +66,7 @@ public:
   SMESH_Gen();
   ~SMESH_Gen();
 
-  SMESH_Mesh* CreateMesh(int theStudyId, bool theIsEmbeddedMode)
+  SMESH_Mesh* CreateMesh(bool theIsEmbeddedMode)
     throw(SALOME_Exception);
 
   enum ComputeFlags
@@ -147,7 +147,7 @@ public:
   // if Compute() would fail because of some algo bad state
   // theErrors list contains problems description
 
-  StudyContextStruct *GetStudyContext(int studyId);
+  StudyContextStruct *GetStudyContext();
 
   static int GetShapeDim(const TopAbs_ShapeEnum & aShapeType);
   static int GetShapeDim(const TopoDS_Shape &     aShape)
@@ -165,7 +165,7 @@ public:
 private:
 
   int _localId;                         // unique Id of created objects, within SMESH_Gen entity
-  std::map < int, StudyContextStruct * >_mapStudyContext;
+  StudyContextStruct* _studyContext;
 
   // hypotheses managing
   int _hypId;
index 23c52bcc3200786b7c93c76b0e08c471693353c4..ce08b40570c998a6a77f6f35f498655f2bac2ef9 100644 (file)
@@ -41,15 +41,13 @@ using namespace std;
 //=============================================================================
 
 SMESH_Hypothesis::SMESH_Hypothesis(int hypId,
-                                   int studyId,
                                    SMESH_Gen* gen) : SMESHDS_Hypothesis(hypId)
 {
   _gen            = gen;
-  _studyId        = studyId;
   _type           = PARAM_ALGO;
   _shapeType      = 0;  // to be set by algo with TopAbs_Enum
   _param_algo_dim = -1; // to be set by algo parameter
-  StudyContextStruct* myStudyContext = gen->GetStudyContext(_studyId);
+  StudyContextStruct* myStudyContext = gen->GetStudyContext();
   myStudyContext->mapHypothesis[hypId] = this;
 }
 
@@ -63,7 +61,7 @@ SMESH_Hypothesis::~SMESH_Hypothesis()
 {
   if ( _gen )
   {
-    StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId);
+    StudyContextStruct* myStudyContext = _gen->GetStudyContext();
     myStudyContext->mapHypothesis[_hypId] = 0;
   }
 }
@@ -106,22 +104,11 @@ int SMESH_Hypothesis::GetShapeType() const
  */
 //=============================================================================
 
-int SMESH_Hypothesis::GetStudyId() const
-{
-  return _studyId;
-}
-
-//=============================================================================
-/*!
- * 
- */
-//=============================================================================
-
 void SMESH_Hypothesis::NotifySubMeshesHypothesisModification()
 {
   // for all meshes in study
 
-  StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId);
+  StudyContextStruct* myStudyContext = _gen->GetStudyContext();
   map<int, SMESH_Mesh*>::iterator itm;
   for (itm = myStudyContext->mapMesh.begin();
        itm != myStudyContext->mapMesh.end();
@@ -161,7 +148,7 @@ void SMESH_Hypothesis::SetLibName(const char* theLibName)
 
 SMESH_Mesh* SMESH_Hypothesis::GetMeshByPersistentID(int id)
 {
-  StudyContextStruct* myStudyContext = _gen->GetStudyContext(_studyId);
+  StudyContextStruct* myStudyContext = _gen->GetStudyContext();
   map<int, SMESH_Mesh*>::iterator itm = myStudyContext->mapMesh.begin();
   for ( ; itm != myStudyContext->mapMesh.end(); itm++)
   {
index 7973a26a140d97dd3d4d035183d745b3a498494a..9aef12133684fe6e27e10459cb5b33711c8a10c8 100644 (file)
@@ -69,10 +69,9 @@ public:
   static bool IsStatusFatal(Hypothesis_Status theStatus)
   { return theStatus >= HYP_UNKNOWN_FATAL; }
 
-  SMESH_Hypothesis(int hypId, int studyId, SMESH_Gen* gen);
+  SMESH_Hypothesis(int hypId, SMESH_Gen* gen);
   virtual ~SMESH_Hypothesis();
   virtual int GetDim() const;
-  int         GetStudyId() const;
   SMESH_Gen*  GetGen() const { return (SMESH_Gen*) _gen; }
   virtual int GetShapeType() const;
   virtual const char* GetLibName() const;
@@ -126,7 +125,6 @@ public:
 
 protected:
   SMESH_Gen* _gen;
-  int        _studyId;
   int        _shapeType;
   int        _param_algo_dim; // to be set at descendant hypothesis constructor
 
index 0e2b961ea89b5ee73dc2a7ee317a325e99f55595..9c9491da224806d2dfe5d3e9edd3d4e63f47098f 100644 (file)
@@ -106,7 +106,6 @@ class SMESH_Mesh::SubMeshHolder : public SMESHDS_TSubMeshHolder< SMESH_subMesh >
 //=============================================================================
 
 SMESH_Mesh::SMESH_Mesh(int               theLocalId, 
-                       int               theStudyId, 
                        SMESH_Gen*        theGen,
                        bool              theIsEmbeddedMode,
                        SMESHDS_Document* theDocument):
@@ -114,7 +113,6 @@ SMESH_Mesh::SMESH_Mesh(int               theLocalId,
 {
   if(MYDEBUG) MESSAGE("SMESH_Mesh::SMESH_Mesh(int localId)");
   _id            = theLocalId;
-  _studyId       = theStudyId;
   _gen           = theGen;
   _myDocument    = theDocument;
   _myMeshDS      = theDocument->NewMesh(theIsEmbeddedMode,theLocalId);
@@ -135,7 +133,6 @@ SMESH_Mesh::SMESH_Mesh(int               theLocalId,
 
 SMESH_Mesh::SMESH_Mesh():
   _id(-1),
-  _studyId(-1),
   _groupId( 0 ),
   _nbSubShapes( 0 ),
   _isShapeToMesh( false ),
@@ -208,7 +205,7 @@ SMESH_Mesh::~SMESH_Mesh()
   // remove self from studyContext
   if ( _gen )
   {
-    StudyContextStruct * studyContext = _gen->GetStudyContext( _studyId );
+    StudyContextStruct * studyContext = _gen->GetStudyContext();
     studyContext->mapMesh.erase( _id );
   }
   if ( _myDocument )
@@ -248,7 +245,7 @@ SMESH_Mesh* SMESH_Mesh::FindMesh( int meshId ) const
   if ( _id == meshId )
     return (SMESH_Mesh*) this;
 
-  if ( StudyContextStruct *aStudyContext = _gen->GetStudyContext( _studyId ))
+  if ( StudyContextStruct *aStudyContext = _gen->GetStudyContext())
   {
     std::map < int, SMESH_Mesh * >::iterator i_m = aStudyContext->mapMesh.find( meshId );
     if ( i_m != aStudyContext->mapMesh.end() )
@@ -734,7 +731,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
   Unexpect aCatch(SalomeException);
   if(MYDEBUG) MESSAGE("SMESH_Mesh::RemoveHypothesis");
 
-  StudyContextStruct *sc = _gen->GetStudyContext(_studyId);
+  StudyContextStruct *sc = _gen->GetStudyContext();
   if (sc->mapHypothesis.find(anHypId) == sc->mapHypothesis.end())
     throw SALOME_Exception(LOCALIZED("hypothesis does not exist"));
 
@@ -995,7 +992,7 @@ int SMESH_Mesh::GetHypotheses(const SMESH_subMesh *               aSubMesh,
 
 SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const int anHypId) const
 {
-  StudyContextStruct *sc = _gen->GetStudyContext(_studyId);
+  StudyContextStruct *sc = _gen->GetStudyContext();
   if (sc->mapHypothesis.find(anHypId) == sc->mapHypothesis.end())
     return NULL;
 
@@ -1379,7 +1376,6 @@ bool SMESH_Mesh::HasDuplicatedGroupNamesMED()
  *  \param [in] theAutoGroups - boolean parameter for creating/not creating
  *              the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
  *              the typical use is auto_groups=false.
- *  \param [in] theVersion - defines the version of format of MED file, that will be created
  *  \param [in] meshPart - mesh data to export
  *  \param [in] theAutoDimension - if \c true, a space dimension of a MED mesh can be either
      *         - 1D if all mesh nodes lie on OX coordinate axis, or
@@ -1395,7 +1391,6 @@ bool SMESH_Mesh::HasDuplicatedGroupNamesMED()
 void SMESH_Mesh::ExportMED(const char *        file, 
                            const char*         theMeshName, 
                            bool                theAutoGroups,
-                           int                 theVersion,
                            const SMESHDS_Mesh* meshPart,
                            bool                theAutoDimension,
                            bool                theAddODOnVertices,
@@ -1406,7 +1401,7 @@ void SMESH_Mesh::ExportMED(const char *        file,
   SMESH_TRY;
 
   DriverMED_W_SMESHDS_Mesh myWriter;
-  myWriter.SetFile         ( file, MED::EVersion(theVersion) );
+  myWriter.SetFile         ( file );
   myWriter.SetMesh         ( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS   );
   myWriter.SetAutoDimension( theAutoDimension );
   myWriter.AddODOnVertices ( theAddODOnVertices );
@@ -1476,19 +1471,19 @@ void SMESH_Mesh::ExportSAUV(const char *file,
 #ifdef WIN32
   cmd = "%PYTHONBIN% ";
 #else
-  cmd = "python ";
+  cmd = "python3 ";
 #endif
   cmd += "-c \"";
   cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')";
   cmd += "\"";
   system(cmd.c_str());
-  ExportMED(medfilename.c_str(), theMeshName, theAutoGroups, /*theVersion=*/1,
+  ExportMED(medfilename.c_str(), theMeshName, theAutoGroups,
             /*meshPart=*/NULL, /*theAutoDimension=*/false, /*theAddODOnVertices=*/false,
             /*theAllElemsToGroup=*/true ); // theAllElemsToGroup is for PAL0023413
 #ifdef WIN32
   cmd = "%PYTHONBIN% ";
 #else
-  cmd = "python ";
+  cmd = "python3 ";
 #endif
   cmd += "-c \"";
   cmd += "from medutilities import convert ; convert(r'" + medfilename + "', 'MED', 'GIBI', 1, r'" + file + "')";
@@ -1497,7 +1492,7 @@ void SMESH_Mesh::ExportSAUV(const char *file,
 #ifdef WIN32
   cmd = "%PYTHONBIN% ";
 #else
-  cmd = "python ";
+  cmd = "python3 ";
 #endif
   cmd += "-c \"";
   cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')";
index 054616c5e361ec3833fe375d482a1bb211f33142..78681c396fd8679bf750f210d5fd36b0ec893e81 100644 (file)
@@ -68,7 +68,6 @@ class SMESH_EXPORT SMESH_Mesh
 {
  public:
   SMESH_Mesh(int               theLocalId,
-             int               theStudyId,
              SMESH_Gen*        theGen,
              bool              theIsEmbeddedMode,
              SMESHDS_Document* theDocument);
@@ -250,7 +249,6 @@ class SMESH_EXPORT SMESH_Mesh
   void ExportMED(const char *        theFile, 
                  const char*         theMeshName = NULL, 
                  bool                theAutoGroups = true, 
-                 int                 theVersion = 0,
                  const SMESHDS_Mesh* theMeshPart = 0,
                  bool                theAutoDimension = false,
                  bool                theAddODOnVertices = false,
@@ -362,7 +360,6 @@ private:
   
 protected:
   int                        _id;           // id given by creator (unique within the creator instance)
-  int                        _studyId;
   int                        _groupId;      // id generator for group objects
   int                        _nbSubShapes;  // initial nb of subshapes in the shape to mesh
   bool                       _isShapeToMesh;// set to true when a shape is given (only once)
index 4ac6d4322a9f651cb743a8639bf5ddbafd9e6f1e..6dcea0662cb37fadfacc1dea2a646a99bc70324c 100644 (file)
@@ -71,8 +71,6 @@ SET(_link_LIBRARIES
   SMESHDS
   SMESHControls
   MEDWrapper
-  MEDWrapperBase
-  MEDWrapper_V2_2
 )
 
 # --- headers ---
index 4513302d3767bc5e5210122c58d16156ef8d13eb..f9de0bee1f245c13ff48e381c0cd3902297cc6a7 100644 (file)
@@ -35,7 +35,7 @@ using namespace std;
 //function : Create
 //purpose  : 
 //=======================================================================
-SMESHDS_Document::SMESHDS_Document(int UserID):myUserID(UserID)
+SMESHDS_Document::SMESHDS_Document()
 {
 }
 
index 73fdc3b9fe87d358a9dbccffe1d0a545fd6fd34f..1cb0c9a9bf92adad5e9347d9fb58f4e5ea9e4996 100644 (file)
 class SMESHDS_EXPORT SMESHDS_Document
 {
   public:
-        SMESHDS_Document(int UserID);
-        ~SMESHDS_Document();
-        SMESHDS_Mesh *       NewMesh(bool theIsEmbeddedMode, int MeshID);
-        void                 RemoveMesh(int MeshID);
-        SMESHDS_Mesh *       GetMesh(int MeshID);
-        void                 AddHypothesis(SMESHDS_Hypothesis * H);
-        void                 RemoveHypothesis(int HypID);
-        SMESHDS_Hypothesis * GetHypothesis(int HypID);
-        int                  NbMeshes();
-        int                  NbHypothesis();
-        void                 InitMeshesIterator();
-        SMESHDS_Mesh *       NextMesh();
-        bool                 MoreMesh();        
-        void                 InitHypothesisIterator();
-        SMESHDS_Hypothesis * NextHypothesis();
-        bool                 MoreHypothesis();  
+    SMESHDS_Document();
+    ~SMESHDS_Document();
+    SMESHDS_Mesh *       NewMesh(bool theIsEmbeddedMode, int MeshID);
+    void                 RemoveMesh(int MeshID);
+    SMESHDS_Mesh *       GetMesh(int MeshID);
+    void                 AddHypothesis(SMESHDS_Hypothesis * H);
+    void                 RemoveHypothesis(int HypID);
+    SMESHDS_Hypothesis * GetHypothesis(int HypID);
+    int                  NbMeshes();
+    int                  NbHypothesis();
+    void                 InitMeshesIterator();
+    SMESHDS_Mesh *       NextMesh();
+    bool                 MoreMesh();
+    void                 InitHypothesisIterator();
+    SMESHDS_Hypothesis * NextHypothesis();
+    bool                 MoreHypothesis();
 
   private:
-        int                                         myUserID;
-        std::map<int,SMESHDS_Mesh*>                 myMeshes;
-        std::map<int,SMESHDS_Hypothesis*>           myHypothesis;
-        std::map<int,SMESHDS_Mesh*>::iterator       myMeshesIt;
-        std::map<int,SMESHDS_Hypothesis*>::iterator myHypothesisIt;
+    std::map<int,SMESHDS_Mesh*>                 myMeshes;
+    std::map<int,SMESHDS_Hypothesis*>           myHypothesis;
+    std::map<int,SMESHDS_Mesh*>::iterator       myMeshesIt;
+    std::map<int,SMESHDS_Hypothesis*>::iterator myHypothesisIt;
 };
 
 #endif
index b3acd18ac98e08c4d317cf1d817b222180475513..a06cac1571ce8964d8841ed66d46cacb0182cd00 100644 (file)
@@ -42,7 +42,7 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_SOURCE_DIR}/src/SMESHUtils
   ${PROJECT_SOURCE_DIR}/src/Controls
   ${PROJECT_SOURCE_DIR}/src/SMESHClient
-  ${PROJECT_SOURCE_DIR}/src/MEDWrapper/Base
+  ${PROJECT_SOURCE_DIR}/src/MEDWrapper
   ${PROJECT_BINARY_DIR}
   ${PROJECT_BINARY_DIR}/idl
 )
index f85aa4a45a4ac0ac8b6aeb3691188777a4e50271..2e698c6ded5431d7b3d2393f6b807129692e2667 100644 (file)
@@ -195,7 +195,7 @@ namespace
 
   void ExportMeshToFile(int theCommandID);
 
-  void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap);
+  void SetDisplayMode(int theCommandID, VTK::MarkerMap& theMarkerMap);
 
   void SetDisplayEntity(int theCommandID);
 
@@ -239,8 +239,8 @@ namespace
     }
     else if ( theCommandID == SMESHOp::OpImportSAUV ||
               theCommandID == SMESHOp::OpPopupImportSAUV ) {
-      filter.append( QObject::tr( "SAUV files (*.sauv*)" ) );
-      filter.append( QObject::tr( "All files (*)" ) );
+      filter.append( QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)" );
+      filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" );
     }
     else if ( theCommandID == SMESHOp::OpImportGMF ||
               theCommandID == SMESHOp::OpPopupImportGMF ) {
@@ -277,7 +277,7 @@ namespace
     if ( filenames.count() > 0 )
     {
       SUIT_OverrideCursor wc;
-      _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+      _PTR(Study) aStudy = SMESH::getStudy();
 
       QStringList errors;
       QStringList anEntryList;
@@ -653,8 +653,7 @@ namespace
 
     // Get parameters of export operation
 
-    QString            aFilename;
-    SMESH::MED_VERSION aFormat = SMESH::MED_LATEST;
+    QString aFilename;
     // Init the parameters with the default values
     bool aIsASCII_STL   = true;
     bool toCreateGroups = false;
@@ -741,33 +740,14 @@ namespace
     }
     else if ( isMED || isSAUV ) // Export to MED or SAUV
     {
-      QMap<QString, SMESH::MED_VERSION> aFilterMap;
+      QStringList filters;
       if ( isMED ) {
-        QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2));
-        aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 );
-        int minor = v22.split(".").last().toInt();
-        int vv= int(SMESH::MED_MINOR_0); // add all minor from 0 to current
-        for (int ii=0; ii<minor; ii++)
-          {
-            QString vs = aMesh->GetVersionString(SMESH::MED_VERSION(vv), 2);
-            aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( vs ) + " (*.med)",  SMESH::MED_VERSION(vv));
-            vv = vv +1;
-          }
+        filters << QObject::tr( "MED_FILES_FILTER" ) + " (*.med)";
       }
       else { // isSAUV
-        aFilterMap.insert("All files (*)", SMESH::MED_V2_1 );
-        aFilterMap.insert("SAUV files (*.sauv)", SMESH::MED_V2_2 );
-        aFilterMap.insert("SAUV files (*.sauve)", SMESH::MED_V2_1 );
+        filters << QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)";
       }
 
-      QStringList filters;
-      QString aDefaultFilter;
-      QMap<QString, SMESH::MED_VERSION>::const_iterator it = aFilterMap.begin();
-      for ( ; it != aFilterMap.end(); ++it ) {
-        filters.push_back( it.key() );
-        if (it.value() == SMESH::MED_V2_2)
-          aDefaultFilter = it.key();
-      }
       QStringList checkBoxes;
       checkBoxes << QObject::tr("SMESH_AUTO_GROUPS") << QObject::tr("SMESH_AUTO_DIM");
 
@@ -780,7 +760,6 @@ namespace
         new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true, wdgList );
       fd->setWindowTitle( aTitle );
       fd->setNameFilters( filters );
-      fd->selectNameFilter( aDefaultFilter );
       fd->SetChecked( toCreateGroups, 0 );
       fd->SetChecked( toFindOutDim,   1 );
       if ( !anInitialPath.isEmpty() )
@@ -808,34 +787,13 @@ namespace
           aFilename = QString::null;
           break;
         }
-        aFormat = aFilterMap[fd->selectedNameFilter()];
         toOverwrite = fv->isOverwrite();
         is_ok = true;
         if ( !aFilename.isEmpty() ) {
-          // med-2.1 does not support poly elements
-          if ( aFormat==SMESH::MED_V2_1 )
-            for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
-              SMESH::SMESH_IDSource_var aMeshItem = (*aMeshIter).first;
-              SMESH::long_array_var nbElems = aMeshItem->GetMeshInfo();
-              if ( nbElems[ SMESH::Entity_Polygon   ] + nbElems[ SMESH::Entity_Quad_Polygon   ] +
-                   nbElems[ SMESH::Entity_Polyhedra ] + nbElems[ SMESH::Entity_Quad_Polyhedra ])
-              {
-                int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
-                                                    QObject::tr("SMESH_WRN_WARNING"),
-                                                    QObject::tr("SMESH_EXPORT_MED_V2_1").arg((*aMeshIter).second),
-                                                    QObject::tr("SMESH_BUT_YES"),
-                                                    QObject::tr("SMESH_BUT_NO"), 0, 1);
-                if (aRet != 0) {
-                  is_ok = false;
-                  break;
-                }
-              }
-            }
           if( !toOverwrite ) {
             // can't append to an existing using other format
-            SMESH::MED_VERSION aVersion = aFormat; //SMESH::MED_V2_1;
-            bool isVersionOk = SMESHGUI::GetSMESHGen()->GetMEDVersion( aFilename.toUtf8().constData(), aVersion );
-            if( !isVersionOk || aVersion != aFormat ) {
+            bool isVersionOk = SMESHGUI::GetSMESHGen()->CheckCompatibility( aFilename.toUtf8().constData() );
+            if ( !isVersionOk ) {
               int aRet = SUIT_MessageBox::warning(SMESHGUI::desktop(),
                                                   QObject::tr("SMESH_WRN_WARNING"),
                                                   QObject::tr("SMESH_EXPORT_MED_VERSION_COLLISION").arg(aFilename),
@@ -920,11 +878,11 @@ namespace
             const QString&            geoAssFields = aFieldList[ aMeshIndex ].second;
             const bool                   hasFields = ( fields.length() || !geoAssFields.isEmpty() );
             if ( !hasFields && aMeshOrGroup->_is_equivalent( aMeshItem ))
-              aMeshItem->ExportToMEDX( aFilename.toUtf8().data(), toCreateGroups,
-                                       aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim );
+              aMeshItem->ExportMED( aFilename.toUtf8().data(), toCreateGroups,
+                                    toOverwrite && aMeshIndex == 0, toFindOutDim );
             else
               aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups,
-                                          aFormat, toOverwrite && aMeshIndex == 0, toFindOutDim,
+                                          toOverwrite && aMeshIndex == 0, toFindOutDim,
                                           fields, geoAssFields.toLatin1().data() );
           }
         }
@@ -1358,7 +1316,7 @@ namespace
       if ( selected.Extent() )
       {
         Handle(SALOME_InteractiveObject) anIObject = selected.First();
-        _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+        _PTR(Study) aStudy = SMESH::getStudy();
         _PTR(SObject) aSObj = aStudy->FindObjectID(anIObject->getEntry());
         if (aSObj) {
           if ( aStudy->GetUseCaseBuilder()->SortChildren( aSObj, true/*AscendingOrder*/ ) ) {
@@ -1369,7 +1327,7 @@ namespace
     }
   }
 
-  void SetDisplayMode(int theCommandID, SMESHGUI_StudyId2MarkerMap& theMarkerMap)
+  void SetDisplayMode(int theCommandID, VTK::MarkerMap& theMarkerMap)
   {
     SALOME_ListIO selected;
     SalomeApp_Application* app =
@@ -1391,8 +1349,6 @@ namespace
       return;
     }
 
-    _PTR(Study) aStudy = appStudy->studyDS();
-
     aSel->selectedObjects( selected );
 
     if ( selected.Extent() >= 1 )
@@ -1491,7 +1447,7 @@ namespace
             break;
         }
 
-        SMESHGUI_PropertiesDlg dlg( theMarkerMap[ aStudy->StudyId() ], SMESHGUI::desktop() );
+        SMESHGUI_PropertiesDlg dlg( theMarkerMap, SMESHGUI::desktop() );
         // nodes: color, marker
         dlg.setNodeColor( nodeColor );
         if( markerType != VTK::MT_USER )
@@ -1547,8 +1503,8 @@ namespace
           orientation3d    = dlg.orientation3d();
           shrinkCoef       = dlg.shrinkCoef() / 100.;
 
-          // store point markers map that might be changed by the user
-          theMarkerMap[ aStudy->StudyId() ] = dlg.customMarkers();
+          // store point markers that might be changed by the user
+          theMarkerMap = dlg.customMarkers();
 
           // set properties from dialog box to the presentations
           SALOME_ListIteratorOfListIO It( selected );
@@ -1564,9 +1520,8 @@ namespace
               anActor->SetMarkerStd( markerType, markerScale );
             }
             else {
-              const VTK::MarkerMap& markerMap = theMarkerMap[ aStudy->StudyId() ];
-              VTK::MarkerMap::const_iterator iter = markerMap.find( markerId );
-              if ( iter != markerMap.end() )
+              VTK::MarkerMap::const_iterator iter = theMarkerMap.find( markerId );
+              if ( iter != theMarkerMap.end() )
                 anActor->SetMarkerTexture( markerId, iter->second.second );
             }
             // volumes: normal color, reversed color (delta)
@@ -1705,7 +1660,7 @@ namespace
   void Control( int theCommandID )
   {
     SMESH_Actor::eControl aControl = SMESH_Actor::eControl( ActionToControl( theCommandID ));
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+    _PTR(Study) aStudy = SMESH::getStudy();
 
     SALOME_ListIO selected;
     if ( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() )
@@ -1724,7 +1679,7 @@ namespace
             if ( !anIDSrc->_is_nil() ) {
               SMESH_Actor *anActor = SMESH::FindActorByEntry( anIO->getEntry());
               if (( !anActor && selected.Extent() == 1 ) &&
-                  ( anActor = SMESH::CreateActor( aStudy, anIO->getEntry() )))
+                  ( anActor = SMESH::CreateActor( anIO->getEntry() )))
               {
                 anActor->SetControlMode( aControl );
                 SMESH::DisplayActor( SMESH::GetCurrentVtkView(), anActor );
@@ -1781,7 +1736,7 @@ namespace
 
   QString CheckTypeObject(const Handle(SALOME_InteractiveObject) & theIO)
   {
-    _PTR(Study)  aStudy = SMESH::GetActiveStudyDocument();
+    _PTR(Study)  aStudy = SMESH::getStudy();
     _PTR(SObject) aSObj = aStudy->FindObjectID(theIO->getEntry());
     if (aSObj) {
       _PTR(SComponent) aSComp = aSObj->GetFatherComponent();
@@ -1845,7 +1800,7 @@ void SMESHGUI::OnEditDelete()
   LightApp_SelectionMgr* aSel = SMESHGUI::selectionMgr();
   SALOME_ListIO selected; aSel->selectedObjects( selected, QString::null, false );
 
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+  _PTR(Study) aStudy = SMESH::getStudy();
   _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
   _PTR(GenericAttribute) anAttr;
   _PTR(AttributeIOR) anIOR;
@@ -2233,17 +2188,6 @@ SMESHGUI* SMESHGUI::GetSMESHGUI()
     smeshMod = dynamic_cast<SMESHGUI*>( module );
   }
 
-  if ( smeshMod && smeshMod->application() && smeshMod->application()->activeStudy() )
-  {
-    SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( smeshMod->application()->activeStudy() );
-    if ( study )
-    {
-      _PTR(Study) aStudy = study->studyDS();
-      if ( aStudy )
-        GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() );
-    }
-  }
-
   return smeshMod;
 }
 
@@ -2416,36 +2360,27 @@ bool SMESHGUI::DefineDlgPosition(QWidget * aDlg, int &x, int &y)
   return true;
 }
 
-//=============================================================================
 /*!
- *
- */
-//=============================================================================
-static int isStudyLocked(_PTR(Study) theStudy){
-  return theStudy->GetProperties()->IsLocked();
-}
-
-static bool checkLock(_PTR(Study) theStudy) {
-  if (isStudyLocked(theStudy)) {
-    SUIT_MessageBox::warning( SMESHGUI::desktop(),
-                              QObject::tr("WRN_WARNING"),
-                              QObject::tr("WRN_STUDY_LOCKED") );
+ * \brief Verifies whether study of operation is locked
+  * \param theMess - specifies whether message box must be shown if study is locked
+  * \return State of study.
+*
+* Verifies whether study of operation is locked. If second parameter is TRUE and study
+* is locked when corresponding message box appears
+*/
+bool SMESHGUI::isStudyLocked( bool theMessage )
+{
+  if ( SMESH::getStudy()->GetProperties()->IsLocked() )
+  {
+    if ( theMessage )
+      SUIT_MessageBox::warning( SMESHGUI::desktop(),
+                                QObject::tr( "WRN_WARNING" ),
+                                QObject::tr( "WRN_STUDY_LOCKED" ) );
     return true;
   }
   return false;
 }
 
-//=======================================================================
-//function : CheckActiveStudyLocked
-//purpose  :
-//=======================================================================
-
-bool SMESHGUI::isActiveStudyLocked()
-{
-  _PTR(Study) aStudy = activeStudy()->studyDS();
-  return checkLock( aStudy );
-}
-
 //=============================================================================
 /*!
  *
@@ -2457,15 +2392,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   if( !anApp )
     return false;
 
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active
   SUIT_ResourceMgr* mgr = resourceMgr();
   if( !mgr )
     return false;
 
-  if (CORBA::is_nil(GetSMESHGen()->GetCurrentStudy())) {
-    GetSMESHGen()->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy());
-  }
-
   SUIT_ViewWindow* view = application()->desktop()->activeWindow();
   SVTK_ViewWindow* vtkwnd = dynamic_cast<SVTK_ViewWindow*>( view );
 
@@ -2473,7 +2403,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   switch (theCommandID) {
   case SMESHOp::OpDelete:
-    if(checkLock(aStudy)) break;
+    if(isStudyLocked()) break;
     OnEditDelete();
     break;
   case SMESHOp::OpImportDAT:
@@ -2491,7 +2421,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case SMESHOp::OpPopupImportSAUV:
   case SMESHOp::OpPopupImportGMF:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       ::ImportMeshesFromFile(GetSMESHGen(),theCommandID);
       break;
     }
@@ -2653,7 +2583,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpUpdate:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       SUIT_OverrideCursor wc;
       try {
         OCC_CATCH_SIGNALS;
@@ -2718,7 +2648,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         }
 
         // PAL13338 + PAL15161 -->
-        if ( ( theCommandID==SMESHOp::OpShow || theCommandID==SMESHOp::OpShowOnly ) && !checkLock(aStudy)) {
+        if ( ( theCommandID==SMESHOp::OpShow || theCommandID==SMESHOp::OpShowOnly ) && !isStudyLocked()) {
           SMESH::UpdateView();
           SMESHGUI::GetSMESHGUI()->EmitSignalVisibilityChanged();
         }
@@ -2740,7 +2670,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpNode:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
 
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
@@ -2767,14 +2697,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     break;
   case SMESHOp::OpCopyMesh:
     {
-      if (checkLock(aStudy)) break;
+      if (isStudyLocked()) break;
       EmitSignalDeactivateDialog();
       ( new SMESHGUI_CopyMeshDlg( this ) )->show();
     }
     break;
   case SMESHOp::OpBuildCompoundMesh:
     {
-      if (checkLock(aStudy)) break;
+      if (isStudyLocked()) break;
       EmitSignalDeactivateDialog();
       ( new SMESHGUI_BuildCompoundDlg( this ) )->show();
     }
@@ -2789,7 +2719,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         break;
       }
 
-      if ( checkLock( aStudy ) )
+      if ( isStudyLocked() )
         break;
 
       /*Standard_Boolean aRes;
@@ -2819,7 +2749,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         break;
       }
 
-      if ( checkLock( aStudy ) )
+      if ( isStudyLocked() )
         break;
 
       EmitSignalDeactivateDialog();
@@ -2838,7 +2768,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpSmoothing:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_SmoothingDlg( this ) )->show();
@@ -2850,7 +2780,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpExtrusion:
     {
-      if (checkLock(aStudy)) break;
+      if (isStudyLocked()) break;
       if (vtkwnd) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_ExtrusionDlg ( this ) )->show();
@@ -2861,7 +2791,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpExtrusionAlongAPath:
     {
-      if (checkLock(aStudy)) break;
+      if (isStudyLocked()) break;
       if (vtkwnd) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_ExtrusionAlongPathDlg( this ) )->show();
@@ -2872,7 +2802,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpRevolution:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_RevolutionDlg( this ) )->show();
@@ -2884,7 +2814,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpPatternMapping:
     {
-      if ( checkLock( aStudy ) )
+      if ( isStudyLocked() )
         break;
       if ( vtkwnd )
       {
@@ -2913,7 +2843,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         break;
       }
 
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       EmitSignalDeactivateDialog();
       SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_nil();
 
@@ -2940,7 +2870,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         break;
       }
 
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       EmitSignalDeactivateDialog();
 
       LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
@@ -2953,7 +2883,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         // check if submesh is selected
         Handle(SALOME_InteractiveObject) IObject = selected.First();
         if (IObject->hasEntry()) {
-          _PTR(SObject) aSObj = aStudy->FindObjectID(IObject->getEntry());
+          _PTR(SObject) aSObj = SMESH::getStudy()->FindObjectID(IObject->getEntry());
           if( aSObj ) {
             SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( SMESH::SObjectToObject( aSObj ) );
             if (!aSubMesh->_is_nil()) {
@@ -3017,7 +2947,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         break;
       }
 
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       EmitSignalDeactivateDialog();
 
       LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
@@ -3047,7 +2977,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpAddElemGroupPopup:     // Add elements to group
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if (myState == 800) {
         SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) myActiveDialogBox;
         if (aDlg) aDlg->onAdd();
@@ -3057,7 +2987,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpRemoveElemGroupPopup:  // Remove elements from group
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if (myState == 800) {
         SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) myActiveDialogBox;
         if (aDlg) aDlg->onRemove();
@@ -3073,7 +3003,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         break;
       }
 
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       EmitSignalDeactivateDialog();
 
       LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
@@ -3113,7 +3043,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         break;
       }
 
-      if ( checkLock( aStudy ) )
+      if ( isStudyLocked() )
         break;
 
       EmitSignalDeactivateDialog();
@@ -3133,7 +3063,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
     case SMESHOp::OpGroupUnderlyingElem: // Create groups of entities from existing groups of superior dimensions
     {
-      if ( checkLock( aStudy ) )
+      if ( isStudyLocked() )
         break;
 
       EmitSignalDeactivateDialog();
@@ -3151,7 +3081,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         break;
       }
 
-      if ( checkLock( aStudy ) )
+      if ( isStudyLocked() )
         break;
 
       EmitSignalDeactivateDialog();
@@ -3193,7 +3123,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpEditHypothesis:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
 
       LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
       SALOME_ListIO selected;
@@ -3238,7 +3168,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpUnassign:                      // REMOVE HYPOTHESIS / ALGORITHMS
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       SUIT_OverrideCursor wc;
 
       LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr();
@@ -3269,7 +3199,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case SMESHOp::OpPyramid:
   case SMESHOp::OpHexagonalPrism:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
         SMDSAbs_EntityType type = SMDSEntity_Edge;
@@ -3295,7 +3225,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpPolyhedron:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_CreatePolyhedralVolumeDlg( this ) )->show();
@@ -3318,7 +3248,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case SMESHOp::OpQuadraticHexahedron:
   case SMESHOp::OpTriQuadraticHexahedron:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
         SMDSAbs_EntityType type = SMDSEntity_Last;
@@ -3349,7 +3279,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpRemoveNodes:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_RemoveNodesDlg( this ) )->show();
@@ -3362,7 +3292,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpRemoveElements:                                    // REMOVES ELEMENTS
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_RemoveElementsDlg( this ) )->show();
@@ -3376,7 +3306,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpClearMesh: {
 
-    if(checkLock(aStudy)) break;
+    if(isStudyLocked()) break;
 
     SALOME_ListIO selected;
     if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() )
@@ -3397,7 +3327,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
         SMESH::ModifiedMesh( aMeshSObj, false, true);
         // hide groups and submeshes
         _PTR(ChildIterator) anIter =
-          SMESH::GetActiveStudyDocument()->NewChildIterator( aMeshSObj );
+          SMESH::getStudy()->NewChildIterator( aMeshSObj );
         for ( anIter->InitEx(true); anIter->More(); anIter->Next() )
         {
           _PTR(SObject) so = anIter->Value();
@@ -3416,7 +3346,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   }
   case SMESHOp::OpRemoveOrphanNodes:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       SALOME_ListIO selected;
       if( LightApp_SelectionMgr *aSel = SMESHGUI::selectionMgr() )
         aSel->selectedObjects( selected );
@@ -3455,7 +3385,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpRenumberingNodes:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_RenumberingDlg( this, 0 ) )->show();
@@ -3469,7 +3399,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpRenumberingElements:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_RenumberingDlg( this, 1 ) )->show();
@@ -3483,7 +3413,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpTranslation:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_TranslationDlg( this ) )->show();
@@ -3496,7 +3426,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpRotation:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_RotationDlg( this ) )->show();
@@ -3509,7 +3439,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpSymmetry:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if(vtkwnd) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_SymmetryDlg( this ) )->show();
@@ -3522,7 +3452,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpScale:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_ScaleDlg( this ) )->show();
@@ -3536,7 +3466,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpSewing:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if(vtkwnd) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_SewingDlg( this ) )->show();
@@ -3549,7 +3479,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpMergeNodes:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if(vtkwnd) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_MergeDlg( this, 0 ) )->show();
@@ -3562,7 +3492,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpMergeElements:
     {
-      if (checkLock(aStudy)) break;
+      if (isStudyLocked()) break;
       if (vtkwnd) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_MergeDlg( this, 1 ) )->show();
@@ -3579,7 +3509,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpDuplicateNodes:
     {
-      if(checkLock(aStudy)) break;
+      if(isStudyLocked()) break;
       if ( vtkwnd ) {
         EmitSignalDeactivateDialog();
         ( new SMESHGUI_DuplicateNodesDlg( this ) )->show();
@@ -4885,11 +4815,7 @@ bool SMESHGUI::activateModule( SUIT_Study* study )
   action(SMESHOp::OpDelete)->setEnabled(true); // Delete: Key_Delete
 
   //  0020210. Make SMESH_Gen update meshes at switching GEOM->SMESH
-  GetSMESHGen()->SetCurrentStudy(SALOMEDS::Study::_nil());
-  if ( SalomeApp_Study* s = dynamic_cast<SalomeApp_Study*>( study )) {
-    if ( _PTR(Study) aStudy = s->studyDS() )
-      GetSMESHGen()->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() );
-  }
+  GetSMESHGen()->UpdateStudy();
 
   // get all view currently opened in the study and connect their signals  to
   // the corresponding slots of the class.
@@ -4922,7 +4848,7 @@ void SMESHGUI::studyClosed( SUIT_Study* s )
 {
   if( !s )
     return;
-  SMESH::RemoveVisuData( s->id() );
+  SMESH::RemoveVisuData();
   SalomeApp_Module::studyClosed( s );
 }
 
@@ -4938,16 +4864,11 @@ void SMESHGUI::OnGUIEvent()
 
 SMESH::SMESH_Gen_var SMESHGUI::GetSMESHGen()
 {
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active
   if ( CORBA::is_nil( myComponentSMESH ) )
-    {
-      SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH
-      if ( aStudy )
-        aGUI.myComponentSMESH->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy());
-      return aGUI.myComponentSMESH;
-    }
-  if ( aStudy )
-    myComponentSMESH->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy());
+  {
+    SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH
+    return aGUI.myComponentSMESH;
+  }
   return myComponentSMESH;
 }
 
@@ -5657,8 +5578,7 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const
 
 void SMESHGUI::switchToOperation(int id)
 {
-  if ( _PTR(Study) aStudy = SMESH::GetActiveStudyDocument() )
-    activeStudy()->abortAllOperations();
+  activeStudy()->abortAllOperations();
   startOperation( id );
 }
 
@@ -5751,12 +5671,11 @@ void SMESHGUI::storeVisualParameters (int savePoint)
                                                              savePoint);
   _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
 
-  // store map of custom markers
-  const VTK::MarkerMap& aMarkerMap = myMarkerMap[ studyDS->StudyId() ];
-  if( !aMarkerMap.empty() )
+  // store custom markers
+  if( !myMarkerMap.empty() )
   {
-    VTK::MarkerMap::const_iterator anIter = aMarkerMap.begin();
-    for( ; anIter != aMarkerMap.end(); anIter++ )
+    VTK::MarkerMap::const_iterator anIter = myMarkerMap.begin();
+    for( ; anIter != myMarkerMap.end(); anIter++ )
     {
       int anId = anIter->first;
       VTK::MarkerData aMarkerData = anIter->second;
@@ -6104,8 +6023,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
                                                              savePoint);
   _PTR(IParameters) ip = ClientFactory::getIParameters(ap);
 
-  // restore map of custom markers and map of clipping planes
-  VTK::MarkerMap& aMarkerMap = myMarkerMap[ studyDS->StudyId() ];
+  // restore custom markers and map of clipping planes
   TPlaneDataMap aPlaneDataMap;
 
   std::vector<std::string> properties = ip->getProperties();
@@ -6162,7 +6080,7 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
           aMarkerTexture.push_back( aChar.digitValue() );
       }
 
-      aMarkerMap[ anId ] = VTK::MarkerData( aMarkerFileName, aMarkerTexture );
+      myMarkerMap[ anId ] = VTK::MarkerData( aMarkerFileName, aMarkerTexture );
     }
     else if( aPropertyType == "ClippingPlane" )
     {
@@ -6680,8 +6598,8 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
                     aSmeshActor->SetMarkerStd( (VTK::MarkerType)aParam1, (VTK::MarkerScale)aParam2 );
                   }
                   else if( data[0] == "custom" ) {
-                    VTK::MarkerMap::const_iterator markerIt = aMarkerMap.find( aParam1 );
-                    if( markerIt != aMarkerMap.end() ) {
+                    VTK::MarkerMap::const_iterator markerIt = myMarkerMap.find( aParam1 );
+                    if( markerIt != myMarkerMap.end() ) {
                       VTK::MarkerData aMarkerData = markerIt->second;
                       aSmeshActor->SetMarkerTexture( aParam1, aMarkerData.second );
                     }
@@ -7085,7 +7003,7 @@ bool SMESHGUI::renameAllowed( const QString& entry) const {
     return false;
 
   // check type to prevent renaming of inappropriate objects
-  int aType = SMESHGUI_Selection::type(qPrintable(entry), SMESH::GetActiveStudyDocument());
+  int aType = SMESHGUI_Selection::type(qPrintable(entry));
   if (aType == SMESH::MESH || aType == SMESH::GROUP ||
       aType == SMESH::SUBMESH || aType == SMESH::SUBMESH_COMPOUND ||
       aType == SMESH::SUBMESH_SOLID || aType == SMESH::SUBMESH_FACE ||
@@ -7132,7 +7050,7 @@ bool SMESHGUI::renameObject( const QString& entry, const QString& name) {
     if ( obj->FindAttribute(anAttr, "AttributeName") ) {
       aName = anAttr;
       // check type to prevent renaming of inappropriate objects
-      int aType = SMESHGUI_Selection::type( qPrintable(entry), SMESH::GetActiveStudyDocument() );
+      int aType = SMESHGUI_Selection::type( qPrintable(entry));
       if (aType == SMESH::MESH || aType == SMESH::GROUP ||
           aType == SMESH::SUBMESH || aType == SMESH::SUBMESH_COMPOUND ||
           aType == SMESH::SUBMESH_SOLID || aType == SMESH::SUBMESH_FACE ||
index 92a51bf56bb073f03f6c8a6dec22384d713d0f44..44b7671bbfb4187056a99a239e731197910febc5 100644 (file)
@@ -63,8 +63,6 @@ class LightApp_SelectionMgr;
 class SMESH_Actor;
 class SMESHGUI_FilterLibraryDlg;
 
-typedef std::map<int, VTK::MarkerMap> SMESHGUI_StudyId2MarkerMap;
-
 namespace SMESH
 {
   class OrientedPlane;
@@ -96,14 +94,14 @@ public :
   static SUIT_ResourceMgr*        resourceMgr();
   static SUIT_Desktop*            desktop();
   static SalomeApp_Study*         activeStudy();
-  
-  bool                            isActiveStudyLocked();
 
   static bool                     automaticUpdate(unsigned int requestedSize = 0, bool* limitExceeded = 0);
   static bool                     automaticUpdate( SMESH::SMESH_IDSource_ptr, int*, bool*, int*, long* );
 
   static void                     Modified( bool = true );
 
+  static bool                     isStudyLocked( bool = true );
+
   virtual LightApp_Displayer*     displayer();
   virtual QString                 engineIOR() const;
   virtual void                    initialize( CAM_Application* );
@@ -225,7 +223,7 @@ private :
 
   SMESHGUI_FilterLibraryDlg*      myFilterLibraryDlg;
 
-  SMESHGUI_StudyId2MarkerMap      myMarkerMap;
+  VTK::MarkerMap                  myMarkerMap;
   SMESHGUI_ClippingPlaneInfoMap   myClippingPlaneInfoMap;
 
   vtkSmartPointer<vtkCallbackCommand> myEventCallbackCommand;
index 30a8fc92d6f29faa74f8de50050ceb17dc7454d5..a015b4181e1bdd6b9b04185f0d633b1ea2023cfc 100644 (file)
@@ -310,8 +310,7 @@ void SMESHGUI_Add0DElemsOnAllNodesOp::selectionDone()
     _PTR(SObject) group0DRoot;
     if ( meshSO && meshSO->FindSubObject( SMESH::Tag_0DElementsGroups, group0DRoot ))
     {
-      _PTR(Study)              aStudy = SMESH::GetActiveStudyDocument();
-      _PTR(ChildIterator) group0DIter = aStudy->NewChildIterator( group0DRoot );
+      _PTR(ChildIterator) group0DIter = SMESH::getStudy()->NewChildIterator( group0DRoot );
       for ( ; group0DIter->More(); group0DIter->Next() )
       {
         _PTR(SObject) groupSO = group0DIter->Value();
index 25bbd46e7c12d24af2e0db2541e6bb6c3d72ffe7..aea995c8823cd43610f476b0bde02abcaff123e4 100644 (file)
@@ -549,7 +549,7 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
   if( !isValid() )
     return;
 
-  if (myNbOkNodes && !mySMESHGUI->isActiveStudyLocked()) {
+  if (myNbOkNodes && !SMESHGUI::isStudyLocked()) {
     myBusy = true;
     QStringList aListId = myEditCurrentArgument->text().split(" ", QString::SkipEmptyParts);
     SMESH::long_array_var anArrayOfIndices = new SMESH::long_array;
index 4193be407c39abb92198d6e1f6867f1f2446423f..0c8b92b1926e5d4352171a811a57153fe59cd393 100644 (file)
@@ -695,7 +695,7 @@ bool SMESHGUI_AddQuadraticElementDlg::ClickOnApply()
   if( !isValid() )
     return false;
 
-  if ( mySMESHGUI->isActiveStudyLocked() || myBusy || !IsValid() )
+  if ( SMESHGUI::isStudyLocked() || myBusy || !IsValid() )
     return false;
 
   BusyLocker lock( myBusy );
index aac578ba22440c023b86bdbc78fd84907d199f1c..0cd63352b9c86ce79a25a0f6561459fda6ef0c86 100644 (file)
@@ -250,10 +250,7 @@ QString SMESHGUI_BuildCompoundDlg::GetDefaultName(const QString& theOperation)
   QString aName = "";
 
   // collect all object names of SMESH component
-  SalomeApp_Study* appStudy =
-    dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
-  if ( !appStudy ) return aName;
-  _PTR(Study) aStudy = appStudy->studyDS();
+  _PTR(Study) aStudy = SMESH::getStudy();
 
   std::set<std::string> aSet;
   _PTR(SComponent) aMeshCompo (aStudy->FindComponent("SMESH"));
@@ -283,7 +280,7 @@ QString SMESHGUI_BuildCompoundDlg::GetDefaultName(const QString& theOperation)
 //=================================================================================
 bool SMESHGUI_BuildCompoundDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if (!isValid())
@@ -335,7 +332,7 @@ bool SMESHGUI_BuildCompoundDlg::ClickOnApply()
       SMESH::UpdateView();
 
       _PTR(SObject) aSO = SMESH::FindSObject(aMesh.in());
-      if ( SMESH_Actor* anActor = SMESH::CreateActor(aSO->GetStudy(), aSO->GetID().c_str()) ) {
+      if ( SMESH_Actor* anActor = SMESH::CreateActor( aSO->GetID().c_str()) ) {
         SMESH::DisplayActor(SMESH::GetActiveWindow(), anActor);
         SMESH::UpdateView();
       }
index d7d455b6d79cf5dd58d9cb0247e70e8f802e4cb9..55a87509d6480b73bd28f60640a6244d00e53c2f 100644 (file)
@@ -1068,11 +1068,7 @@ void SMESHGUI_ClippingDlg::updateActorList()
 {
   ActorList->clear();
 
-  SalomeApp_Study* anAppStudy = SMESHGUI::activeStudy();
-  if( !anAppStudy )
-    return;
-
-  _PTR(Study) aStudy = anAppStudy->studyDS();
+  _PTR(Study) aStudy = SMESH::getStudy();
   if( !aStudy )
     return;
 
index dd82c712df9a994a10d89b98ef017262b45bfcdc..3c3363d6fdbb23533da667858396eb0739f8db29 100644 (file)
@@ -379,9 +379,7 @@ namespace SMESH
     _PTR(SObject) so = SMESH::FindSObject(aMainShape);
     if ( subShapeID == 1 || !so )
       return so;
-    _PTR(ChildIterator) it;
-    if (_PTR(Study) study = SMESH::GetActiveStudyDocument())
-      it =  study->NewChildIterator(so);
+    _PTR(ChildIterator) it = SMESH::getStudy()->NewChildIterator(so);
     _PTR(SObject) subSO;
     if ( it ) {
       for ( it->InitEx(true); !subSO && it->More(); it->Next() ) {
@@ -927,7 +925,7 @@ void SMESHGUI_BaseComputeOp::computeMesh()
 
     // NPAL16631: if ( !memoryLack )
     {
-      _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID(myIObject->getEntry());
+      _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID(myIObject->getEntry());
       SMESH::ModifiedMesh( sobj,
                            !computeFailed && aHypErrors.isEmpty(),
                            myMesh->NbNodes() == 0);
@@ -998,8 +996,7 @@ void SMESHGUI_BaseComputeOp::computeMesh()
               {
                 toDisplay = true;
                 SMESH_Actor *anActor = SMESH::FindActorByObject( aMesh );
-                if ( !anActor ) anActor = SMESH::CreateActor( (*anIter).second->GetStudy(),
-                                                              (*anIter).second->GetID().c_str(),
+                if ( !anActor ) anActor = SMESH::CreateActor( (*anIter).second->GetID().c_str(),
                                                               /*clearLog =*/ true );
                 if ( anActor ) // actor is not created for an empty mesh
                 {
@@ -1267,7 +1264,6 @@ void SMESHGUI_BaseComputeOp::stopOperation()
 void SMESHGUI_BaseComputeOp::onPublishShape()
 {
   GEOM::GEOM_Gen_var      geomGen = SMESH::GetGEOMGen();
-  SALOMEDS::Study_var       study = SMESHGUI::GetSMESHGen()->GetCurrentStudy();
   GEOM::GEOM_Object_var meshShape = myMesh->GetShapeToMesh();
 
   QStringList entryList;
@@ -1283,7 +1279,7 @@ void SMESHGUI_BaseComputeOp::onPublishShape()
       if ( !SMESH::getSubShapeSO( 1, myMainShape )) // the main shape not published
       {
         QString name = GEOMBase::GetDefaultName( SMESH::shapeTypeName( myMainShape, "MAIN_SHAPE" ));
-        SALOMEDS::SObject_wrap so = geomGen->AddInStudy( study, myMainShape,
+        SALOMEDS::SObject_wrap so = geomGen->AddInStudy( myMainShape,
                                                          name.toLatin1().data(),
                                                          GEOM::GEOM_Object::_nil());
         // look for myMainShape in the table
@@ -1302,7 +1298,7 @@ void SMESHGUI_BaseComputeOp::onPublishShape()
         if ( curSub == 1 ) continue;
       }
       QString name = GEOMBase::GetDefaultName( SMESH::shapeTypeName( shape, "ERROR_SHAPE" ));
-      SALOMEDS::SObject_wrap so = geomGen->AddInStudy( study, shape,
+      SALOMEDS::SObject_wrap so = geomGen->AddInStudy( shape,
                                                        name.toLatin1().data(), myMainShape);
       if ( !so->_is_nil() ) {
         CORBA::String_var name  = so->GetName();
@@ -1743,7 +1739,7 @@ void SMESHGUI_PrecomputeOp::initDialog()
   QList<int> modes;
 
   QMap<int, int> modeMap;
-  _PTR(SObject)  pMesh = studyDS()->FindObjectID( myIObject->getEntry() );
+  _PTR(SObject)  pMesh = SMESH::getStudy()->FindObjectID( myIObject->getEntry() );
   getAssignedAlgos( pMesh, modeMap );
   if ( modeMap.contains( SMESH::DIM_3D ) )
   {
@@ -1786,8 +1782,7 @@ void SMESHGUI_PrecomputeOp::getAssignedAlgos(_PTR(SObject)  theMesh,
   int aPart = SMESH::Tag_RefOnAppliedAlgorithms;
   if ( theMesh->FindSubObject( aPart, aHypFolder ))
   {
-    _PTR(ChildIterator) anIter =
-      SMESH::GetActiveStudyDocument()->NewChildIterator( aHypFolder );
+    _PTR(ChildIterator) anIter = SMESH::getStudy()->NewChildIterator( aHypFolder );
     for ( ; anIter->More(); anIter->Next() )
     {
       _PTR(SObject) anObj = anIter->Value();
@@ -1830,8 +1825,7 @@ void SMESHGUI_PrecomputeOp::getAssignedAlgos(_PTR(SObject)  theMesh,
     if ( !theMesh->FindSubObject( aPart, aHypFolder ))
       continue;
 
-    _PTR(ChildIterator) anIter =
-      SMESH::GetActiveStudyDocument()->NewChildIterator( aHypFolder );
+    _PTR(ChildIterator) anIter = SMESH::getStudy()->NewChildIterator( aHypFolder );
     for ( anIter->InitEx(true); anIter->More(); anIter->Next() )
     {
       _PTR(SObject) anObj = anIter->Value();
index 77b0a8fe67c5ff3363075ec18a53c1f2c5c973ba..2e25f2c5220487ab2e325a2f6f285e495929579e 100644 (file)
@@ -129,7 +129,7 @@ void SMESHGUI_ConvToQuadOp::selectionDone()
   try
   {
     QString anObjEntry = myDlg->selectedObject( 0 );
-    _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() );
+    _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toLatin1().data() );
     if ( !pObj ) return;
 
     SMESH::SMESH_IDSource_var idSource = 
@@ -204,7 +204,7 @@ bool SMESHGUI_ConvToQuadOp::onApply()
   QString aMess;
 
   QString anObjEntry = myDlg->selectedObject( 0 );
-  _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() );
+  _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toLatin1().data() );
   if ( !pObj )
   {
     dlg()->show();
@@ -383,7 +383,7 @@ SMESHGUI_ConvToQuadOp::DestinationMesh( const SMESH::SMESH_IDSource_var& idSourc
 void SMESHGUI_ConvToQuadOp::ConnectRadioButtons( int id )
 {
   QString anObjEntry = myDlg->selectedObject( 0 );
-  _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() );
+  _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toLatin1().data() );
   if ( !pObj ) return;
 
   SMESH::SMESH_IDSource_var idSource = 
index 0fc5aef49ba59fd75f94e995ff9e4a20ef7ee09d..b6609fcff170f51dbd081d3852524135d9223d89 100644 (file)
@@ -303,7 +303,7 @@ void SMESHGUI_CopyMeshDlg::Init (bool ResetControls)
 
 bool SMESHGUI_CopyMeshDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if( !isValid() )
index e938f0667250f9a48878ba630d0ebf2b9ae07f7d..38f64d2ad93ae9a334323a1e19e2e3a7ec0c6bde 100644 (file)
@@ -448,7 +448,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply()
   if( !isValid() )
     return;
 
-  if ( myNbOkElements>0 && !mySMESHGUI->isActiveStudyLocked())
+  if ( myNbOkElements>0 && !SMESHGUI::isStudyLocked())
     {
       if(checkEditLine(false) == -1) {return;}
       busy = true;
index 7711022c36f3a4372bbb18b3aecb12cac125cac7..6f589a9a0e42c5bd7568036fab40709e6c3f8bc9 100644 (file)
@@ -194,7 +194,7 @@ bool SMESHGUI_DeleteGroupDlg::isValid()
     return false;
   }
 
-  return !mySMESHGUI->isActiveStudyLocked();
+  return !SMESHGUI::isStudyLocked();
 }
 
 //=================================================================================
index 14088fe1a169614ce010ba1a9fd6c30ca7aa91ac..fd673c22a2ba68d98f2ef6549fd71bf674f77987 100644 (file)
@@ -233,8 +233,7 @@ void SMESHGUI_DisplayEntitiesDlg::onOk()
   const char* entry = myIObject->getEntry();
   
   if ( !myActor ) {
-    myActor = SMESH::CreateActor(SMESH::GetActiveStudyDocument(), 
-                                 entry, true);
+    myActor = SMESH::CreateActor(entry, true);
   }
 
   if( myEntityMode != myActor->GetEntityMode() ) {
index 6fa1ee65c890bcd55e362321a7c2965725f447e5..633d9196abbb7570e76281e887a010e33ca567a0 100644 (file)
@@ -68,7 +68,7 @@ SALOME_Prs* SMESHGUI_Displayer::buildPresentation( const QString& entry, SALOME_
       SUIT_ViewWindow* wnd = vtk_viewer->getViewManager()->getActiveView();
       SMESH_Actor* anActor = SMESH::FindActorByEntry( wnd, entry.toLatin1().data() );
       if( !anActor )
-        anActor = SMESH::CreateActor( study()->studyDS(), entry.toLatin1().data(), true );
+        anActor = SMESH::CreateActor( entry.toLatin1().data(), true );
       if( anActor )
       {
         SMESH::DisplayActor( wnd, anActor );
@@ -94,12 +94,7 @@ bool SMESHGUI_Displayer::canBeDisplayed( const QString& entry, const QString& vi
   if(viewer_type != SVTK_Viewer::Type())
     return res;
   
-  SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
-  if( !study )
-    return res;
-  
-  
-  _PTR(SObject) obj = study->studyDS()->FindObjectID( (const char*)entry.toLatin1() );
+  _PTR(SObject) obj = SMESH::getStudy()->FindObjectID( (const char*)entry.toLatin1() );
   CORBA::Object_var anObj = SMESH::SObjectToObject( obj );
   
     /*
index e9e235766fe5788e8e00ed4e7a7590e127e61e90..383c936857b0565912a7c94e6420ad71fe703751 100644 (file)
@@ -402,7 +402,7 @@ void SMESHGUI_DuplicateNodesDlg::onConstructorsClicked (int constructorId)
 */
 bool SMESHGUI_DuplicateNodesDlg::onApply()
 {
-  if ( mySMESHGUI->isActiveStudyLocked() || !isValid() )
+  if ( SMESHGUI::isStudyLocked() || !isValid() )
     return false;
 
   BusyLocker lock( myBusy );
@@ -705,7 +705,7 @@ void SMESHGUI_DuplicateNodesDlg::onDeactivate()
 */
 void SMESHGUI_DuplicateNodesDlg::onGenerate()
 {
-  if ( mySMESHGUI->isActiveStudyLocked() )
+  if ( SMESHGUI::isStudyLocked() )
     return;
 
   SUIT_OverrideCursor aWaitCursor;
index 9b6ce1843a433aec2cd615b149e4feafcd3c4d87..417d1f803f4a813800dca173f6df50f98a9948aa 100644 (file)
@@ -394,7 +394,7 @@ void SMESHGUI_ExtrusionAlongPathDlg::CheckIsEnable()
 //=================================================================================
 bool SMESHGUI_ExtrusionAlongPathDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if ( !SelectorWdg->IsAnythingSelected() || myPath->_is_nil() )
index 205544cfa0993ba688f3dfd69a386640774a7525..7a37a17158400f98af2d3fad2914c06d2a20197e 100644 (file)
@@ -1092,7 +1092,7 @@ void SMESHGUI_ExtrusionDlg::ClickOnRadio()
 
 bool SMESHGUI_ExtrusionDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if (!isValid())
index 91034498099e2bca288b7a9b63f0b97c0eb32f72..816fe312b9a21c7980ce2f3a74c2dc16e2ad1f25 100644 (file)
@@ -92,9 +92,8 @@ GetAllFields(const QList< QPair< SMESH::SMESH_IDSource_var, QString > >& meshes,
   myFields = & fields;
   myTree->clear();
   
-  _PTR(Study) study = SMESH::GetActiveStudyDocument();
   GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
-  GEOM::GEOM_IFieldOperations_wrap fieldOp = geomGen->GetIFieldOperations( study->StudyId() );
+  GEOM::GEOM_IFieldOperations_wrap fieldOp = geomGen->GetIFieldOperations();
 
   for ( int iM = 0; iM < meshes.count(); ++iM )
   {
index 4cb1bb4b1d89c593698f6482effc3977421cedae..b7f1b0dde5aa1d217b079a66e4ff47501889bf50 100644 (file)
@@ -23,8 +23,6 @@
 //
 #include "SMESHGUI_FileInfoDlg.h"
 
-#include "MED_Common.hxx"
-
 #include <QGridLayout>
 #include <QLabel>
 #include <QLineEdit>
index badc87709ffda3ac8d7ea9c786df6d9ef3b5b3ce..d0f3a6512b620fd47c8dee5249af031c30cbd371 100755 (executable)
@@ -1369,8 +1369,7 @@ void SMESHGUI_FilterTable::SetCriterion (const int                       theRow,
   {
     if ( strlen( theCriterion.ThresholdID ) > 0 ) // shape ID -> name
     {
-      _PTR(SObject) sobj =
-        SMESH::GetActiveStudyDocument()->FindObjectID( theCriterion.ThresholdID.in() );
+      _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( theCriterion.ThresholdID.in() );
       if ( !sobj )
         aTable->item( theRow, 2 )->setText( QString( theCriterion.ThresholdID ) );
       else
@@ -3199,8 +3198,7 @@ bool SMESHGUI_FilterDlg::isValid() const
       QString aName;
       myTable->GetThreshold(i, aName);
 
-      std::vector<_PTR(SObject)> aList =
-        SMESH::GetActiveStudyDocument()->FindObjectByName(aName.toLatin1().constData(), "GEOM");
+      std::vector<_PTR(SObject)> aList = SMESH::getStudy()->FindObjectByName(aName.toLatin1().constData(), "GEOM");
       if (aList.size() == 0) {
         SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INSUFFICIENT_DATA"),
                                      tr("BAD_SHAPE_NAME").arg(aName));
index 5ec69fed3974685b0e6d6e8cefec956a777e021c..a23d80aa330af5e6685a294cc48c8add33c50edd 100644 (file)
@@ -495,7 +495,7 @@ void SMESHGUI_FindElemByPointOp::onSelectionDone()
     if (aList.Extent() == 1 && aList.First()->hasEntry())
     {
       Handle(SALOME_InteractiveObject) anIO = aList.First();
-      _PTR(SObject) pObj = studyDS()->FindObjectID(anIO->getEntry());
+      _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID(anIO->getEntry());
       CORBA::Object_var anObj = SMESH::IObjectToObject( anIO );
       newMeshEntry = anIO->getEntry();
       SMESH::SMESH_IDSource_var aMeshOrPart = SMESH::SMESH_IDSource::_narrow(anObj);
index 974b54ff88e1b17e6cae96b89332c9a59d62bcaa..5367420060850c3a9f8e3d8bada1c2cdd4261f5d 100644 (file)
@@ -93,11 +93,7 @@ namespace SMESH
     if ( !aMeshShape->_is_nil() )
       return aMeshShape;
 
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-    if (!aStudy)
-      return aMeshShape;
-
-    _PTR(ChildIterator) anIter (aStudy->NewChildIterator(theSO));
+    _PTR(ChildIterator) anIter (SMESH::getStudy()->NewChildIterator(theSO));
     for ( ; anIter->More(); anIter->Next()) {
       _PTR(SObject) aSObject = anIter->Value();
       _PTR(SObject) aRefSOClient;
@@ -120,11 +116,7 @@ namespace SMESH
     if (!smeshSO)
       return 0;
 
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-    if (!aStudy)
-      return 0;
-
-    _PTR(ChildIterator) anIter (aStudy->NewChildIterator( smeshSO ));
+    _PTR(ChildIterator) anIter (SMESH::getStudy()->NewChildIterator( smeshSO ));
     for ( ; anIter->More(); anIter->Next()) {
       _PTR(SObject) aSObject = anIter->Value();
       _PTR(SObject) aRefSOClient;
@@ -153,11 +145,10 @@ namespace SMESH
                                      long                  theID)
   {
     GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-    if (!aStudy || geomGen->_is_nil())
+    if (geomGen->_is_nil())
       return GEOM::GEOM_Object::_nil();
     GEOM::GEOM_IShapesOperations_wrap aShapesOp =
-      geomGen->GetIShapesOperations(aStudy->StudyId());
+      geomGen->GetIShapesOperations();
     if (aShapesOp->_is_nil())
       return GEOM::GEOM_Object::_nil();
     GEOM::GEOM_Object_wrap subShape = aShapesOp->GetSubShape (theMainShape,theID);
@@ -183,10 +174,7 @@ namespace SMESH
     meshGeom.clear();
     if ( hypIO.IsNull() ) return false;
 
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-    if ( !aStudy ) return false;
-
-    _PTR(SObject) hypSO = aStudy->FindObjectID( hypIO->getEntry() );
+    _PTR(SObject) hypSO = SMESH::getStudy()->FindObjectID( hypIO->getEntry() );
     if ( !hypSO ) return false;
 
     // Depth() is a number of fathers
index 0b2cbb975fc1fdd221592a962687deb4986afdd5..dc1a29fa3b5c42cf4c09a45bd8222090c01842d6 100644 (file)
@@ -498,10 +498,7 @@ QString SMESHGUI_GroupDlg::GetDefaultName(const QString& theOperation)
   QString aName = "";
 
   // collect all object names of SMESH component
-  SalomeApp_Study* appStudy =
-    dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
-  if ( !appStudy ) return aName;
-  _PTR(Study) aStudy = appStudy->studyDS();
+  _PTR(Study) aStudy = SMESH::getStudy();
 
   std::set<std::string> aSet;
   _PTR(SComponent) aMeshCompo (aStudy->FindComponent( "SMESH" ));
@@ -528,14 +525,13 @@ QString SMESHGUI_GroupDlg::GetDefaultName(const QString& theOperation)
 void  SMESHGUI_GroupDlg::setDefaultName() const
 {
   QString aResName;
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
   int i=1;
   QString aPrefix ="Group_";
   _PTR(SObject) anObj;
   do
   {
     aResName = aPrefix + QString::number( i++ );
-    anObj = aStudy->FindObject( SMESH::toUtf8(aResName) );
+    anObj = SMESH::getStudy()->FindObject( SMESH::toUtf8(aResName) );
   }
   while ( anObj );
   myName->setText(aResName); 
@@ -664,7 +660,7 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup,
   else if ( grpType == 1 ) // group on geom
   {
     QString aShapeName( "" );
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+    _PTR(Study) aStudy = SMESH::getStudy();
     GEOM::GEOM_Object_var aGroupShape = myGroupOnGeom->GetShape();
     if (!aGroupShape->_is_nil())
     {
@@ -915,7 +911,7 @@ void SMESHGUI_GroupDlg::setSelectionMode (int theMode)
 //=================================================================================
 bool SMESHGUI_GroupDlg::onApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if (myName->text().trimmed().isEmpty())
@@ -1050,7 +1046,7 @@ bool SMESHGUI_GroupDlg::onApply()
       if (myMesh->_is_nil() || !myGeomObjects->length())
         return false;
 
-      _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+      _PTR(Study) aStudy = SMESH::getStudy();
 
       if (myGeomObjects->length() == 1) {
         myGroupOnGeom = myMesh->CreateGroupFromGEOM(aType,
@@ -1064,12 +1060,11 @@ bool SMESHGUI_GroupDlg::onApply()
 
         // create a geometry group
         GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
-        _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
 
-        if (geomGen->_is_nil() || !aStudy)
+        if (geomGen->_is_nil())
           return false;
 
-        GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations(aStudy->StudyId());
+        GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations();
         if (op->_is_nil())
           return false;
 
@@ -1095,7 +1090,7 @@ bool SMESHGUI_GroupDlg::onApply()
           QString aNewGeomGroupName ( "Auto_group_for_" );
           aNewGeomGroupName += myName->text();
           SALOMEDS::SObject_var aNewGroupSO =
-            geomGen->AddInStudy(aSMESHGen->GetCurrentStudy(), aGroupVar,
+            geomGen->AddInStudy(aGroupVar,
                                 SMESH::toUtf8(aNewGeomGroupName), aMeshShape);
         }
 
@@ -1412,13 +1407,12 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
           continue;
 
         // Check if group constructed on the same shape as a mesh or on its child
-        _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
 
         // The main shape of the group
         GEOM::GEOM_Object_var aGroupMainShape;
         if (aGeomGroup->GetType() == 37) {
           GEOM::GEOM_IGroupOperations_wrap anOp =
-            SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
+            SMESH::GetGEOMGen()->GetIGroupOperations();
           aGroupMainShape = anOp->GetMainShape(aGeomGroup);
           // aGroupMainShape is an existing servant => GEOM_Object_var not GEOM_Object_wrap
         }
@@ -1427,7 +1421,7 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
           aGroupMainShape->Register();
         }
         _PTR(SObject) aGroupMainShapeSO =
-          aStudy->FindObjectID(aGroupMainShape->GetStudyEntry());
+          SMESH::getStudy()->FindObjectID(aGroupMainShape->GetStudyEntry());
 
         _PTR(SObject) anObj, aRef;
         bool isRefOrSubShape = false;
@@ -2006,9 +2000,8 @@ void SMESHGUI_GroupDlg::onAdd()
     onListSelectionChanged();
 
   } else if (myCurrentLineEdit == myGeomGroupLine && myGeomObjects->length() == 1) {
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
     GEOM::GEOM_IGroupOperations_wrap aGroupOp =
-      SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
+      SMESH::GetGEOMGen()->GetIGroupOperations();
 
     SMESH::ElementType aGroupType = SMESH::ALL;
     switch(aGroupOp->GetType(myGeomObjects[0])) {
@@ -2021,8 +2014,8 @@ void SMESHGUI_GroupDlg::onAdd()
 
     if (aGroupType == aType) {
       _PTR(SObject) aGroupSO =
-        //aStudy->FindObjectIOR(aStudy->ConvertObjectToIOR(myGeomGroup));
-        aStudy->FindObjectID(myGeomObjects[0]->GetStudyEntry());
+        //SMESH::getStudy()->FindObjectIOR(SMESH::getStudy()->ConvertObjectToIOR(myGeomGroup));
+        SMESH::getStudy()->FindObjectID(myGeomObjects[0]->GetStudyEntry());
       // Construct filter
       SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager();
       SMESH::Filter_var aFilter = aFilterMgr->CreateFilter();
@@ -2454,8 +2447,7 @@ void SMESHGUI_GroupDlg::onPublishShapeByMeshDlg(SUIT_Operation* op)
     if ( !aGeomVar->_is_nil() )
     {
       QString ID = aGeomVar->GetStudyEntry();
-      _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-      if ( _PTR(SObject) aGeomSO = aStudy->FindObjectID( ID.toLatin1().data() )) {
+      if ( _PTR(SObject) aGeomSO = SMESH::getStudy()->FindObjectID( ID.toLatin1().data() )) {
         SALOME_ListIO anIOList;
         Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject
           ( aGeomSO->GetID().c_str(), "SMESH", aGeomSO->GetName().c_str() );
index 7808f78990d978c029568a89fcfcac5a1e8287b0..3c32b743eea5fa8d1accec0b353cc8044b23e2a5 100644 (file)
@@ -220,13 +220,12 @@ static SMESH::ElementType elementType(GEOM::GEOM_Object_var geom)
     case GEOM::COMPOUND: break;
     default:             return SMESH::ALL;
     }
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
     GEOM::GEOM_IShapesOperations_wrap aShapeOp =
-      SMESH::GetGEOMGen()->GetIShapesOperations(aStudy->StudyId());
+      SMESH::GetGEOMGen()->GetIShapesOperations();
 
     if ( geom->GetType() == 37 ) { // geom group
       GEOM::GEOM_IGroupOperations_wrap aGroupOp =
-        SMESH::GetGEOMGen()->GetIGroupOperations(aStudy->StudyId());
+        SMESH::GetGEOMGen()->GetIGroupOperations();
       if ( !aGroupOp->_is_nil() ) {
         // mainShape is an existing servant => GEOM_Object_var not GEOM_Object_wrap
         GEOM::GEOM_Object_var mainShape = aGroupOp->GetMainShape( geom );
@@ -297,11 +296,11 @@ bool SMESHGUI_GroupOnShapeOp::onApply()
 {
   SUIT_OverrideCursor aWaitCursor;
 
-  if (isStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   // study
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+  _PTR(Study) aStudy = SMESH::getStudy();
   if ( !aStudy ) return false;
 
   // mesh
@@ -461,7 +460,7 @@ void SMESHGUI_GroupOnShapeOp::selectionDone()
   QStringList goodNames, goodIds;
   if (nbSelected > 0) {
     // study
-    if (_PTR(Study) aStudy = SMESH::GetActiveStudyDocument()) {
+    if (_PTR(Study) aStudy = SMESH::getStudy()) {
       // mesh
       if (_PTR(SObject)  meshSO = aStudy->FindObjectID( myMeshID.toLatin1().data() )) {
         // shape to mesh
index 915933dc40e028d5e138cbc5b3c2133f0a8a940d..b4084b6655b391f4cf23e1a6d91dbff3b7e09e78 100644 (file)
@@ -629,7 +629,7 @@ void SMESHGUI_UnionGroupsDlg::reset()
 */
 bool SMESHGUI_UnionGroupsDlg::onApply()
 {
-  if ( getSMESHGUI()->isActiveStudyLocked())
+  if ( SMESHGUI::isStudyLocked())
     return false;
 
   // Verify validity of group name
@@ -738,7 +738,7 @@ void SMESHGUI_IntersectGroupsDlg::reset()
 */
 bool SMESHGUI_IntersectGroupsDlg::onApply()
 {
-  if ( getSMESHGUI()->isActiveStudyLocked())
+  if ( SMESHGUI::isStudyLocked())
     return false;
 
   // Verify validity of group name
@@ -898,7 +898,7 @@ void SMESHGUI_CutGroupsDlg::reset()
 */
 bool SMESHGUI_CutGroupsDlg::onApply()
 {
-  if ( getSMESHGUI()->isActiveStudyLocked())
+  if ( SMESHGUI::isStudyLocked())
     return false;
 
   // Verify validity of group name
@@ -1088,7 +1088,7 @@ void SMESHGUI_DimGroupDlg::setElementType( const SMESH::ElementType& theElemType
 */
 bool SMESHGUI_DimGroupDlg::onApply()
 {
-  if ( getSMESHGUI()->isActiveStudyLocked())
+  if ( SMESHGUI::isStudyLocked())
     return false;
 
   // Verify validity of group name
index f313c8ce2cba016f685848be11629ca21aec2226..bbb79cfe37e233e780e26c3fdc47f52d0e42e886 100644 (file)
@@ -213,7 +213,7 @@ QFrame* SMESHGUI_GenericHypothesisCreator::buildStdFrame()
       case QVariant::String:
         {
           if((*anIt).isVariable) {
-            _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+            _PTR(Study) aStudy = SMESH::getStudy();
             QString aVar = (*anIt).myValue.toString();
             if(aStudy->IsInteger(aVar.toLatin1().constData())){
               SalomeApp_IntSpinBox* sb = new SalomeApp_IntSpinBox( GroupC1 );
@@ -298,7 +298,7 @@ void SMESHGUI_GenericHypothesisCreator::onDialogFinished( int result )
   {
     //remove just created hypothesis
     _PTR(SObject) aHypSObject = SMESH::FindSObject( myHypo );
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+    _PTR(Study) aStudy = SMESH::getStudy();
     if( aStudy && !aStudy->GetProperties()->IsLocked() )
     {
       _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
index def3ff5572faf09584510e225003f46769ff9aa5..2ca363488847649e42c35757030ac7491573d710 100644 (file)
@@ -705,7 +705,7 @@ namespace SMESH
     SUIT_OverrideCursor wc;
 
     try {
-      _PTR(Study) aStudy = GetActiveStudyDocument();
+      _PTR(Study) aStudy = getStudy();
       _PTR(SObject) aHypObj = aStudy->FindObjectID( IObject->getEntry() );
       if( aHypObj )
       {
@@ -789,8 +789,7 @@ namespace SMESH
     if (!AlgoOrHyp->_is_nil()) {
       _PTR(SObject) SO_Hypothesis = SMESH::FindSObject(AlgoOrHyp);
       if (SO_Hypothesis) {
-        SObjectList listSO =
-          SMESHGUI::activeStudy()->studyDS()->FindDependances(SO_Hypothesis);
+        SObjectList listSO = SMESH::getStudy()->FindDependances(SO_Hypothesis);
 
         if(MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency number ="<<listSO.size());
         for (unsigned int i = 0; i < listSO.size(); i++) {
index e5eef00dd02ec8317a4a12a67930e1610e68be0a..73c54eb1ca251a616187e101b1ebc48490b97ea8 100644 (file)
@@ -302,8 +302,7 @@ void SMESHGUI_Make2DFrom3DOp::selectionDone()
       bool isMesh = true;
       for ( int i = 0; i < ids.count() && isMesh; ++i )
       {
-        _PTR(SObject) sobj =
-          SMESHGUI::activeStudy()->studyDS()->FindObjectID( ids[i].toLatin1().constData() );
+        _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( ids[i].toLatin1().constData() );
         mySrcMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( sobj );  
         //isMesh = !mySrcMesh->_is_nil(); // EAP - it's sometimes necessary to copy to a new mesh
       }
@@ -356,7 +355,7 @@ bool SMESHGUI_Make2DFrom3DOp::isValid( QString& msg ) const
     for ( int i = 0; i < entries.count(); ++i )
     {
       SMESH::SMESH_GroupBase_var grp;
-      if ( _PTR(SObject) sobj = SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[i].toLatin1().constData() ))
+      if ( _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entries[i].toLatin1().constData() ))
         grp = SMESH::SObjectToInterface<SMESH::SMESH_GroupBase>( sobj );
       if ( grp->_is_nil() ) {
         msg = tr( "SMESH_NOT_ONLY_GROUPS" );
@@ -370,7 +369,7 @@ bool SMESHGUI_Make2DFrom3DOp::isValid( QString& msg ) const
   for ( int i = 0; i < entries.count(); ++i )
   {
     SMESH::SMESH_IDSource_var idSource;
-    if ( _PTR(SObject) sobj = SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[i].toLatin1().constData() ))
+    if ( _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entries[i].toLatin1().constData() ))
       idSource = SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( sobj );
     if ( !idSource->_is_nil() ) {
       SMESH::array_of_ElementType_var types = idSource->GetTypes();
@@ -428,8 +427,7 @@ bool SMESHGUI_Make2DFrom3DOp::compute2DMesh( QStringList& theEntryList )
       groups->length( entries.count() );
       for ( int i = 0; i < entries.count(); ++i )
       {
-        _PTR(SObject) sobj =
-          SMESHGUI::activeStudy()->studyDS()->FindObjectID( entries[i].toLatin1().constData() );
+        _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entries[i].toLatin1().constData() );
         SMESH::SMESH_IDSource_var grp = SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( sobj );  
         SMESH::array_of_ElementType_var types = grp->GetTypes();
         if ( types->length() < 1 || types[0] != goodType )
@@ -482,7 +480,7 @@ bool SMESHGUI_Make2DFrom3DOp::compute2DMesh( QStringList& theEntryList )
 
 bool SMESHGUI_Make2DFrom3DOp::onApply()
 {
-  if ( isStudyLocked() )
+  if ( SMESHGUI::isStudyLocked() )
     return false;
 
   QString msg;
index 385bb8f1b95adc6bafe8ef53e340946858e53d8f..cd5a89ff5c3de644c2369612222b06d3cde59c82 100644 (file)
@@ -493,7 +493,7 @@ void SMESHGUI_MakeNodeAtPointOp::stopOperation()
 
 bool SMESHGUI_MakeNodeAtPointOp::onApply()
 {
-  if( isStudyLocked() )
+  if( SMESHGUI::isStudyLocked() )
     return false;
 
   if ( !myMeshActor ) {
index 2aba558af7aa5b6a827d67a863e8545462c1a3cf..d25b65970ef32240d3939f6cc4d85ac96475330e 100644 (file)
@@ -511,7 +511,7 @@ void SMESHGUI_MergeDlg::FindGravityCenter(TColStd_MapOfInteger & theElemsIdMap,
 //=================================================================================
 bool SMESHGUI_MergeDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked() || myMesh->_is_nil())
+  if (SMESHGUI::isStudyLocked() || myMesh->_is_nil())
     return false;
 
   try {
index 4fb23cb4eb9458873dc9d758e081fd77eb4f13b6..780ea97f8f8c044079c0689500d003a5f04367f3 100644 (file)
@@ -3245,12 +3245,6 @@ void SMESHGUI_MeshInfoDlg::showItemInfo( const QString& theStr )
 
 void SMESHGUI_MeshInfoDlg::dump()
 {
-  SUIT_Application* app = SUIT_Session::session()->activeApplication();
-  if ( !app ) return;
-  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study *>( app->activeStudy() );
-  if ( !appStudy ) return;
-  _PTR( Study ) aStudy = appStudy->studyDS();
-
   QStringList aFilters;
   aFilters.append( tr( "TEXT_FILES" ));
 
@@ -4002,12 +3996,6 @@ void SMESHGUI_CtrlInfoDlg::deactivate()
  */
 void SMESHGUI_CtrlInfoDlg::dump()
 {
-  SUIT_Application* app = SUIT_Session::session()->activeApplication();
-  if ( !app ) return;
-  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study *>( app->activeStudy() );
-  if ( !appStudy ) return;
-  _PTR( Study ) aStudy = appStudy->studyDS();
-
   QStringList aFilters;
   aFilters.append( tr( "TEXT_FILES" ));
 
index 43d92b9fc96c191ae3db98324bbbf30fb1e3a2f5..f9f5ab83ab4fe362ec1f26df2d76926d30d3a309 100644 (file)
@@ -133,7 +133,7 @@ LightApp_Dialog* SMESHGUI_MeshOp::dlg() const
 //================================================================================
 bool SMESHGUI_MeshOp::onApply()
 {
-  if (isStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   QString aMess;
@@ -227,7 +227,7 @@ void SMESHGUI_MeshOp::startOperation()
   }
   SMESHGUI_SelectionOp::startOperation();
   // iterate through dimensions and get available algorithms, set them to the dialog
-  _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" );
+  _PTR(SComponent) aFather = SMESH::getStudy()->FindComponent( "SMESH" );
   for ( int i = SMESH::DIM_0D; i <= SMESH::DIM_3D; i++ )
   {
     SMESHGUI_MeshTab* aTab = myDlg->tab( i );
@@ -329,7 +329,7 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const
 
   // mesh
   QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
-  _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() );
+  _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() );
   if (!pMesh) return false;
 
   SMESH::SMESH_Mesh_var mesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
@@ -345,17 +345,16 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const
 
   if (aGEOMs.count() > 0) {
     GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-    if (geomGen->_is_nil() || !aStudy) return false;
+    if (geomGen->_is_nil()) return false;
 
-    GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations(aStudy->StudyId());
+    GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations();
     if (op->_is_nil()) return false;
 
     // check all selected shapes
     QStringList::const_iterator aSubShapesIter = aGEOMs.begin();
     for ( ; aSubShapesIter != aGEOMs.end(); aSubShapesIter++) {
       QString aSubGeomEntry = (*aSubShapesIter);
-      _PTR(SObject) pSubGeom = studyDS()->FindObjectID(aSubGeomEntry.toLatin1().data());
+      _PTR(SObject) pSubGeom = SMESH::getStudy()->FindObjectID(aSubGeomEntry.toLatin1().data());
       if (!pSubGeom) return false;
 
       GEOM::GEOM_Object_var aSubGeomVar =
@@ -375,7 +374,7 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const
       if ( aSubGeomVar->GetShapeType() == GEOM::COMPOUND )
       {
         // is aSubGeomVar a compound of sub-shapes?
-        GEOM::GEOM_IShapesOperations_wrap sop = geomGen->GetIShapesOperations(aStudy->StudyId());
+        GEOM::GEOM_IShapesOperations_wrap sop = geomGen->GetIShapesOperations();
         if (sop->_is_nil()) return false;
         GEOM::ListOfLong_var ids = sop->GetAllSubShapesIDs( aSubGeomVar,
                                                             GEOM::SHAPE,/*sorted=*/false);
@@ -417,7 +416,7 @@ char* SMESHGUI_MeshOp::isSubmeshIgnored() const
 
     QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
     QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
-    _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() );
+    _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() );
     if ( pMesh ) {
 
       QStringList algoNames;
@@ -433,7 +432,7 @@ char* SMESHGUI_MeshOp::isSubmeshIgnored() const
       }
 
 //       GEOM::GEOM_Object_var geom;
-//       if (_PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.toLatin1().data() ))
+//       if (_PTR(SObject) pGeom = SMESH::getStudy()->FindObjectID( aGeomEntry.toLatin1().data() ))
 //         geom = SMESH::SObjectToInterface<GEOM::GEOM_Object>( pGeom );
 
 //       if ( !geom->_is_nil() && geom->GetShapeType() >= GEOM::FACE ) { // WIRE, EDGE as well
@@ -462,8 +461,8 @@ _PTR(SObject) SMESHGUI_MeshOp::getSubmeshByGeom() const
 {
   QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
   QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
-  _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() );
-  _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.toLatin1().data() );
+  _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() );
+  _PTR(SObject) pGeom = SMESH::getStudy()->FindObjectID( aGeomEntry.toLatin1().data() );
   if ( pMesh && pGeom ) {
     GEOM::GEOM_Object_var geom = SMESH::SObjectToInterface<GEOM::GEOM_Object>( pGeom );
     if ( !geom->_is_nil() ) {
@@ -480,7 +479,7 @@ _PTR(SObject) SMESHGUI_MeshOp::getSubmeshByGeom() const
       }
       _PTR(GenericAttribute) anAttr;
       _PTR(SObject) aSubmeshRoot;
-      _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+      _PTR(Study) aStudy = SMESH::getStudy();
       if ( pMesh->FindSubObject( tag, aSubmeshRoot ) )
       {
         _PTR(ChildIterator) smIter = aStudy->NewChildIterator( aSubmeshRoot );
@@ -523,7 +522,7 @@ void SMESHGUI_MeshOp::selectionDone()
 
     //Check geometry for mesh
     QString anObjEntry = myDlg->selectedObject(SMESHGUI_MeshDlg::Obj);
-    _PTR(SObject) pObj = studyDS()->FindObjectID(anObjEntry.toLatin1().data());
+    _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID(anObjEntry.toLatin1().data());
     if (pObj)
     {
       SMESH::SMESH_Mesh_var aMeshVar =
@@ -551,7 +550,7 @@ void SMESHGUI_MeshOp::selectionDone()
         int iSubSh = 0;
         for ( ; aSubShapesIter != aGEOMs.end(); aSubShapesIter++, iSubSh++) {
           QString aSubGeomEntry = (*aSubShapesIter);
-          _PTR(SObject) pSubGeom = studyDS()->FindObjectID(aSubGeomEntry.toLatin1().data());
+          _PTR(SObject) pSubGeom = SMESH::getStudy()->FindObjectID(aSubGeomEntry.toLatin1().data());
          
           if( pSubGeom ) { 
             SALOMEDS_SObject* sobj = _CAST(SObject,pSubGeom);
@@ -567,7 +566,7 @@ void SMESHGUI_MeshOp::selectionDone()
       } else {
         // get geometry by selected sub-mesh
         QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj );
-        _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() );
+        _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toLatin1().data() );
         GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj );
         if (!aGeomVar->_is_nil()) {
           aSeq->length(1);
@@ -694,12 +693,12 @@ void SMESHGUI_MeshOp::selectionDone()
         // enable/disable popup for choice of geom selection way
         bool enable = false;
         QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
-        if ( _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() )) {
+        if ( _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() )) {
           SMESH::SMESH_Mesh_var mesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
           if ( !mesh->_is_nil() ) {
             //rnv: issue 21056: EDF 1608 SMESH: Dialog Box "Create Sub Mesh": focus should automatically switch to geometry
             QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
-            _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.toLatin1().data() );
+            _PTR(SObject) pGeom = SMESH::getStudy()->FindObjectID( aGeomEntry.toLatin1().data() );
             if ( !pGeom || GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() )->_is_nil() )
               myDlg->activateObject(SMESHGUI_MeshDlg::Geom);
             enable = ( shapeDim > 1 ) && ( mesh->NbEdges() > 0 );
@@ -774,7 +773,7 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const
   {
     QString aMeshEntry = myDlg->selectedObject
       ( myToCreate ? SMESHGUI_MeshDlg::Mesh : SMESHGUI_MeshDlg::Obj );
-    if ( _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() )) {
+    if ( _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() )) {
       SMESH::SMESH_Mesh_var mesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( pMesh );
       if ( !mesh->_is_nil() && CORBA::is_nil( mesh->GetShapeToMesh() )) {
         theMess = tr( "IMPORTED_MESH" );
@@ -803,7 +802,7 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const
       }
       return true;
     }
-    _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.toLatin1().data() );
+    _PTR(SObject) pGeom = SMESH::getStudy()->FindObjectID( aGeomEntry.toLatin1().data() );
     if ( !pGeom || GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() )->_is_nil() )
     {
       theMess = tr( "GEOMETRY_OBJECT_IS_NULL" );
@@ -819,7 +818,7 @@ bool SMESHGUI_MeshOp::isValid( QString& theMess ) const
         theMess = tr( "MESH_IS_NOT_DEFINED" );
         return false;
       }
-      _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() );
+      _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() );
       if ( !pMesh || SMESH::SMESH_Mesh::_narrow( _CAST( SObject,pMesh )->GetObject() )->_is_nil() )
       {
         theMess = tr( "MESH_IS_NULL" );
@@ -946,7 +945,7 @@ void SMESHGUI_MeshOp::availableHyps( const int       theDim,
   QString aCurrentGeomToSelect;
   if ( !theMeshType.isEmpty() ) {
     aCurrentGeomToSelect = myDlg->selectedObject( myToCreate ? SMESHGUI_MeshDlg::Geom : SMESHGUI_MeshDlg::Obj );
-    if ( _PTR(SObject) so = studyDS()->FindObjectID( aCurrentGeomToSelect.toLatin1().data() )) {
+    if ( _PTR(SObject) so = SMESH::getStudy()->FindObjectID( aCurrentGeomToSelect.toLatin1().data() )) {
       aGeomVar = SMESH::GetGeom( so );
     }
    if ( aCurrentGeomToSelect != myLastGeomToSelect )
@@ -1050,8 +1049,7 @@ void SMESHGUI_MeshOp::existingHyps( const int       theDim,
 
   if ( theFather->FindSubObject( aPart, aHypRoot ) )
   {
-    _PTR(ChildIterator) anIter =
-      SMESH::GetActiveStudyDocument()->NewChildIterator( aHypRoot );
+    _PTR(ChildIterator) anIter = SMESH::getStudy()->NewChildIterator( aHypRoot );
     for ( ; anIter->More(); anIter->Next() )
     {
       _PTR(SObject) anObj = anIter->Value();
@@ -1122,14 +1120,14 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType,
   {
     anEntry = myDlg->selectedObject
       ( myToCreate ? SMESHGUI_MeshDlg::Mesh : SMESHGUI_MeshDlg::Obj );
-    if ( _PTR(SObject) pObj = studyDS()->FindObjectID( anEntry.toLatin1().data() ))
+    if ( _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anEntry.toLatin1().data() ))
     {
       CORBA::Object_ptr Obj = _CAST( SObject,pObj )->GetObject();
       if ( myToCreate ) // mesh and geom may be selected
       {
         aMeshVar = SMESH::SMESH_Mesh::_narrow( Obj );
         anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
-        if ( _PTR(SObject) pGeom = studyDS()->FindObjectID( anEntry.toLatin1().data() ))
+        if ( _PTR(SObject) pGeom = SMESH::getStudy()->FindObjectID( anEntry.toLatin1().data() ))
           aGeomVar= GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
       }
       else // edition: sub-mesh may be selected
@@ -1147,7 +1145,7 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType,
     if ( !myToCreate ) // mesh to edit can be selected
     {
       anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj );
-      if ( _PTR(SObject) pMesh = studyDS()->FindObjectID( anEntry.toLatin1().data() ))
+      if ( _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( anEntry.toLatin1().data() ))
       {
         aMeshVar = SMESH::SMESH_Mesh::_narrow( _CAST( SObject,pMesh )->GetObject() );
         if ( !aMeshVar->_is_nil() )
@@ -1156,7 +1154,7 @@ SMESHGUI_MeshOp::getInitParamsHypothesis( const QString& aHypType,
     }
     if ( aGeomVar->_is_nil() ) {
       anEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
-      if ( _PTR(SObject) pGeom = studyDS()->FindObjectID( anEntry.toLatin1().data() ))
+      if ( _PTR(SObject) pGeom = SMESH::getStudy()->FindObjectID( anEntry.toLatin1().data() ))
       {
         aGeomVar= GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
       }
@@ -1199,13 +1197,13 @@ void SMESHGUI_MeshOp::initHypCreator( SMESHGUI_GenericHypothesisCreator* theCrea
     aMeshEntry = aGeomEntry;
 
   if ( aMeshEntry != aGeomEntry ) { // Get Geom object from Mesh of a sub-mesh being edited
-    _PTR(SObject) pObj = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() );
+    _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() );
     GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj );
     aMeshEntry = ( aGeomVar->_is_nil() ) ? QString() : SMESH::toQStr( aGeomVar->GetStudyEntry() );
   }
 
   if ( aMeshEntry == "" && aGeomEntry == "" ) { // get geom of an object being edited
-    _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() );
+    _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toLatin1().data() );
     bool isMesh;
     GEOM::GEOM_Object_var aGeomVar = SMESH::GetShapeOnMeshOrSubMesh( pObj, &isMesh );
     if ( !aGeomVar->_is_nil() )
@@ -1218,7 +1216,7 @@ void SMESHGUI_MeshOp::initHypCreator( SMESHGUI_GenericHypothesisCreator* theCrea
 
   if ( anObjEntry != "" && aGeomEntry != "" && aMeshEntry == "" ) {
     // take geometry from submesh being created
-    _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() );
+    _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toLatin1().data() );
     if ( pObj ) {
       // if current object is sub-mesh
       SMESH::SMESH_subMesh_var aSubMeshVar =
@@ -1396,7 +1394,7 @@ void SMESHGUI_MeshOp::onHypoCreated( int result )
     myDlg->setEnabled( true );
   }
 
-  _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent("SMESH");
+  _PTR(SComponent) aFather = SMESH::getStudy()->FindComponent("SMESH");
 
   int nbHyp = myExistingHyps[myDim][myType].count();
   HypothesisData* algoData = hypData( myDim, Algo, currentHyp( myDim, Algo ));
@@ -1610,7 +1608,7 @@ void SMESHGUI_MeshOp::onAlgoSelected( const int theIndex,
 
   // set hypotheses corresponding to the found algorithms
 
-  _PTR(SObject) pObj = SMESH::GetActiveStudyDocument()->FindComponent("SMESH");
+  _PTR(SObject) pObj = SMESH::getStudy()->FindComponent("SMESH");
 
   for ( int dim = SMESH::DIM_0D; dim <= SMESH::DIM_3D; dim++ )
   {
@@ -1829,7 +1827,7 @@ bool SMESHGUI_MeshOp::createMesh( QString& theMess, QStringList& theEntryList )
   for ( int i = 0; it!=aList.end(); it++, ++i )
   {
     QString aGeomEntry = *it;
-    _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.toLatin1().data() );
+    _PTR(SObject) pGeom = SMESH::getStudy()->FindObjectID( aGeomEntry.toLatin1().data() );
     GEOM::GEOM_Object_var aGeomVar =
       GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
 
@@ -1896,7 +1894,7 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess, QStringList& theEntryList
 
   // get mesh object
   QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
-  _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() );
+  _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() );
   SMESH::SMESH_Mesh_var aMeshVar =
     SMESH::SMESH_Mesh::_narrow( _CAST( SObject,pMesh )->GetObject() );
   if (aMeshVar->_is_nil())
@@ -1916,17 +1914,16 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess, QStringList& theEntryList
   {
     //QString aGeomEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Geom );
     QString aGeomEntry = aGEOMs.first();
-    _PTR(SObject) pGeom = studyDS()->FindObjectID( aGeomEntry.toLatin1().data() );
+    _PTR(SObject) pGeom = SMESH::getStudy()->FindObjectID( aGeomEntry.toLatin1().data() );
     aGeomVar = GEOM::GEOM_Object::_narrow( _CAST( SObject,pGeom )->GetObject() );
   }
   else if (aGEOMs.count() > 1)
   {
     // create a GEOM group
     GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-    if (!geomGen->_is_nil() && aStudy) {
+    if (!geomGen->_is_nil()) {
       GEOM::GEOM_IGroupOperations_wrap op =
-        geomGen->GetIGroupOperations(aStudy->StudyId());
+        geomGen->GetIGroupOperations();
       if (!op->_is_nil()) {
         // check and add all selected GEOM objects: they must be
         // a sub-shapes of the main GEOM and must be of one type
@@ -1937,7 +1934,7 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess, QStringList& theEntryList
         QStringList::const_iterator aSubShapesIter = aGEOMs.begin();
         for ( ; aSubShapesIter != aGEOMs.end(); aSubShapesIter++, iSubSh++) {
           QString aSubGeomEntry = (*aSubShapesIter);
-          _PTR(SObject) pSubGeom = studyDS()->FindObjectID(aSubGeomEntry.toLatin1().data());
+          _PTR(SObject) pSubGeom = SMESH::getStudy()->FindObjectID(aSubGeomEntry.toLatin1().data());
           GEOM::GEOM_Object_var aSubGeomVar =
             GEOM::GEOM_Object::_narrow(_CAST(SObject,pSubGeom)->GetObject());
           TopAbs_ShapeEnum aSubShapeType = (TopAbs_ShapeEnum)aSubGeomVar->GetShapeType();
@@ -1960,9 +1957,8 @@ bool SMESHGUI_MeshOp::createSubMesh( QString& theMess, QStringList& theEntryList
           // publish the GEOM group in study
           QString aNewGeomGroupName ("Auto_group_for_");
           aNewGeomGroupName += aName;
-          SALOMEDS::Study_var aStudyVar = _CAST(Study, aStudy)->GetStudy();
           SALOMEDS::SObject_wrap aNewGroupSO =
-            geomGen->AddInStudy( aStudyVar, aGeomVar,
+            geomGen->AddInStudy( aGeomVar,
                                  aNewGeomGroupName.toLatin1().data(), mainGeom);
         }
       }
@@ -2117,7 +2113,7 @@ void SMESHGUI_MeshOp::setDefaultName( const QString& thePrefix ) const
 {
   QString aResName;
 
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+  _PTR(Study) aStudy = SMESH::getStudy();
   int i = 1;
 
   QString aPrefix = thePrefix;
@@ -2158,7 +2154,7 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim )
   QString aHypName = dataList[ aHypIndex ]->TypeName;
 
   // get existing algorithms
-  _PTR(SObject) pObj = SMESH::GetActiveStudyDocument()->FindComponent("SMESH");
+  _PTR(SObject) pObj = SMESH::getStudy()->FindComponent("SMESH");
   QStringList tmp;
   existingHyps( theDim, Algo, pObj, tmp, myExistingHyps[ theDim ][ Algo ]);
 
@@ -2204,7 +2200,7 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim )
         delete aCreator;
       }
       QStringList tmpList;
-      _PTR(SComponent) aFather = SMESH::GetActiveStudyDocument()->FindComponent( "SMESH" );
+      _PTR(SComponent) aFather = SMESH::getStudy()->FindComponent( "SMESH" );
       existingHyps( theDim, Algo, aFather, tmpList, myExistingHyps[ theDim ][ Algo ] );
     }
 
@@ -2233,7 +2229,7 @@ SMESH::SMESH_Hypothesis_var SMESHGUI_MeshOp::getAlgo( const int theDim )
 void SMESHGUI_MeshOp::readMesh()
 {
   QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj );
-  _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() );
+  _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toLatin1().data() );
   if ( !pObj )
     return;
 
@@ -2399,7 +2395,7 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess )
     return false;
 
   QString anObjEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Obj );
-  _PTR(SObject) pObj = studyDS()->FindObjectID( anObjEntry.toLatin1().data() );
+  _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toLatin1().data() );
   if ( !pObj )
     return false;
 
@@ -2582,7 +2578,7 @@ void SMESHGUI_MeshOp::onGeomSelectionByMesh( bool theByMesh )
     }
     // set mesh object to SMESHGUI_ShapeByMeshOp and start it
     QString aMeshEntry = myDlg->selectedObject( SMESHGUI_MeshDlg::Mesh );
-    if ( _PTR(SObject) pMesh = studyDS()->FindObjectID( aMeshEntry.toLatin1().data() )) {
+    if ( _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( aMeshEntry.toLatin1().data() )) {
       SMESH::SMESH_Mesh_var aMeshVar =
         SMESH::SMESH_Mesh::_narrow( _CAST( SObject,pMesh )->GetObject() );
       if ( !aMeshVar->_is_nil() ) {
@@ -2611,7 +2607,7 @@ void SMESHGUI_MeshOp::onPublishShapeByMeshDlg(SUIT_Operation* op)
     if ( !aGeomVar->_is_nil() )
     {
       QString ID = SMESH::toQStr( aGeomVar->GetStudyEntry() );
-      if ( _PTR(SObject) aGeomSO = studyDS()->FindObjectID( ID.toLatin1().data() )) {
+      if ( _PTR(SObject) aGeomSO = SMESH::getStudy()->FindObjectID( ID.toLatin1().data() )) {
         selectObject( aGeomSO );
         selectionDone();
       }
index eec510cea2d9e2819c48acdfe2f390d6c1b644ca..cab1695a5f155c89bccdd0734724236020e5582e 100644 (file)
@@ -280,7 +280,7 @@ bool SMESHGUI_MeshOrderMgr::SetMeshOrder( const  ListListId& theListListIds )
   if (theListListIds.isEmpty() || myMesh->_is_nil())
     return false;
 
-  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+  _PTR(Study) aStudy = SMESH::getStudy();
   _PTR(SObject) aMeshSObj = SMESH::FindSObject(myMesh);
   if ( !aStudy || !aMeshSObj )
     return false;
index 53e60ce65f9153acf8287c81e517ca0a0bb30952..8b0bd227c3e17d9b62df382b7feb1a28691f5deb 100755 (executable)
@@ -504,7 +504,7 @@ bool SMESHGUI_MeshPatternDlg::onApply()
         _PTR(SObject) aSO = SMESH::FindSObject(myMesh.in());
         SMESH_Actor* anActor = SMESH::FindActorByEntry(aSO->GetID().c_str());
         if (!anActor) {
-          anActor = SMESH::CreateActor(aSO->GetStudy(), aSO->GetID().c_str());
+          anActor = SMESH::CreateActor(aSO->GetID().c_str());
           if (anActor) {
             SMESH::DisplayActor(SMESH::GetActiveWindow(), anActor);
             SMESH::FitAll();
index 9b3d606a0b2507a3b90569116c5ca3e122b18a3c..0e322fc4a7c97fc37459a51537a7d02013b793f3 100644 (file)
@@ -64,7 +64,7 @@ namespace SMESH
   {
     QString baseName = thePostfix.isEmpty() ? 
       theBaseName : theBaseName + "_" + thePostfix;
-    if ( _PTR(Study) aStudy = GetActiveStudyDocument() ) {
+    if ( _PTR(Study) aStudy = getStudy() ) {
       QString name = baseName;
       while ( !aStudy->FindObjectByName( name.toLatin1().data(), "SMESH" ).empty() ) {
         int nb = 0;
@@ -90,7 +90,7 @@ namespace SMESH
     QString baseName = thePostfix.isEmpty() ? 
       theBaseName : theBaseName + "_" + thePostfix;
     QString name = baseName;
-    if ( _PTR(Study) aStudy = GetActiveStudyDocument() ) {
+    if ( _PTR(Study) aStudy = getStudy() ) {
       _PTR(SObject) p = theParent;
       if ( !p ) p = aStudy->FindComponent( "SMESH" );
       if ( p ) {
index 1b50b43d1a9db1ff8fbb51ac44f6dd007537e4ff..2c0ae0edabc67f19ed5b0d01a0f46d75bb4e1355 100755 (executable)
@@ -995,7 +995,7 @@ void SMESHGUI_MultiEditDlg::setSelectionMode()
 //=======================================================================
 bool SMESHGUI_MultiEditDlg::onApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
   if (!isValid(true))
     return false;
index 0e6bd0d98cd07e8f12ba03aab918441c806c44a1..5f2f2d9219df22fafb0819ace97a245f5cbe1ff5 100644 (file)
@@ -102,9 +102,7 @@ namespace SMESH
       SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor();
       theMesh->SetParameters( theParameters.join(":").toLatin1().constData() );
       aNodeId = aMeshEditor->AddNode( x, y, z );
-      _PTR(Study) aStudy = GetActiveStudyDocument();
-      CORBA::Long anId = aStudy->StudyId();
-      if (TVisualObjPtr aVisualObj = SMESH::GetVisualObj( anId, aSobj->GetID().c_str() ) ) {
+      if (TVisualObjPtr aVisualObj = SMESH::GetVisualObj( aSobj->GetID().c_str() ) ) {
         aVisualObj->Update( true );
       }
     } 
@@ -423,7 +421,7 @@ void SMESHGUI_NodesDlg::ClickOnOk()
 //=================================================================================
 bool SMESHGUI_NodesDlg::ClickOnApply()
 {
-  if ( mySMESHGUI->isActiveStudyLocked() )
+  if ( SMESHGUI::isStudyLocked() )
     return false;
 
   if ( myMesh->_is_nil() ) {
index 0a6b8bc2739757a6b65eb306c41e71e60e6616e6..2b604b0ebbb75fa7c6c43ecdd52a975faa7d2f7c 100755 (executable)
@@ -122,7 +122,7 @@ bool SMESHGUI_Operation::isReadyToStart() const
                               tr( "NO_MODULE" ) );
     return false;
   }
-  else if ( isStudyLocked() )
+  else if ( SMESHGUI::isStudyLocked() )
     return false;
 
   return true;
@@ -142,16 +142,6 @@ void SMESHGUI_Operation::setDialogActive( const bool active )
 
 }
 
-//=======================================================================
-// name    : studyDS
-// Purpose :
-//=======================================================================
-_PTR(Study) SMESHGUI_Operation::studyDS() const
-{
-  SalomeApp_Study* s = dynamic_cast<SalomeApp_Study*>( study() );
-  return s->studyDS();
-}
-
 //=======================================================================
 // name    : onOk
 // Purpose :
@@ -236,30 +226,6 @@ bool SMESHGUI_Operation::isApplyAndClose() const
   return myIsApplyAndClose;
 }
 
-/*!
- * \brief Verifies whether study of operation is locked
-  * \param theMess - specifies whether message box must be shown if study is locked
-  * \return State of study.
-*
-* Verifies whether study of operation is locked. If second parameter is TRUE and study
-* is locked when corresponding message box appears
-*/
-bool SMESHGUI_Operation::isStudyLocked( const bool theMess ) const
-{
-  if ( studyDS() )
-  {
-    if ( studyDS()->GetProperties()->IsLocked() )
-    {
-      if ( theMess )
-        SUIT_MessageBox::warning( SMESHGUI::desktop(), tr( "WRN_WARNING" ),
-                                  tr( "WRN_STUDY_LOCKED" ) );
-      return true;
-    }
-  }
-
-  return false;
-}
-
 /*!
  * \brief Verifies whether given operator is valid for this one
   * \param theOtherOp - other operation
index 990759dc8985b5553155e94863910872bd2d2e9f..3f3e891517cef6a322a7bbeaf952723df9874d9d 100755 (executable)
@@ -65,9 +65,6 @@ protected:
   virtual void      setDialogActive( const bool );
 
   SMESHGUI*         getSMESHGUI() const;
-  bool              isStudyLocked( const bool = true ) const;
-
-  _PTR(Study)       studyDS() const;
   
   virtual bool      isValid( SUIT_Operation* ) const;
 
index 067eb5f49e734f6c2d48e900f21e4fcb784dbbd3..620996d18f42eb585650ddd95a902ab52e592a83 100644 (file)
@@ -223,7 +223,7 @@ void SMESHGUI_RemoveElementsDlg::Init()
 //=================================================================================
 void SMESHGUI_RemoveElementsDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return;
 
   if (myNbOkElements)
index 805b37c85a1eccabe0371eb783e6abea10295d11..a94f4b488077fa5241bd3bbcef3ddc4703d7c4ff 100644 (file)
@@ -229,7 +229,7 @@ void SMESHGUI_RemoveNodesDlg::Init()
 //=================================================================================
 void SMESHGUI_RemoveNodesDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return;
 
   if (myNbOkNodes) {
index 5dc81e40ec90e9c995fb9939b978180ab1e7af28..9f21446747fc566a90f5c7e7eb7e2dee94b7dc5e 100644 (file)
@@ -210,7 +210,7 @@ void SMESHGUI_RenumberingDlg::Init()
 //=================================================================================
 void SMESHGUI_RenumberingDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return;
 
   if (!myMesh->_is_nil()) {
index cb3828246dbc0af8776cf4467737349e085ee480..f6f72edb2bc5f549b42e0299baa375aadc0dc956 100644 (file)
@@ -638,7 +638,7 @@ void SMESHGUI_ReorientFacesOp::onTextChange( const QString& theText )
 
 bool SMESHGUI_ReorientFacesOp::onApply()
 {
-  if( isStudyLocked() )
+  if( SMESHGUI::isStudyLocked() )
     return false;
 
   QString msg;
@@ -728,7 +728,7 @@ bool SMESHGUI_ReorientFacesOp::isValid( QString& msg )
 {
   // check object
   QString objectEntry = myDlg->selectedObject( EObject );
-  _PTR(SObject) pSObject = studyDS()->FindObjectID( objectEntry.toLatin1().data() );
+  _PTR(SObject) pSObject = SMESH::getStudy()->FindObjectID( objectEntry.toLatin1().data() );
   myObject = SMESH::SMESH_IDSource::_narrow( _CAST( SObject,pSObject )->GetObject() );
   if ( myObject->_is_nil() )
   {
@@ -749,7 +749,7 @@ bool SMESHGUI_ReorientFacesOp::isValid( QString& msg )
   if ( myDlg->myConstructorGrp->checkedId() == CONSTRUCTOR_VOLUME )
   {
     objectEntry = myDlg->selectedObject( EVolumes );
-    _PTR(SObject) pSObject = studyDS()->FindObjectID( objectEntry.toLatin1().data() );
+    _PTR(SObject) pSObject = SMESH::getStudy()->FindObjectID( objectEntry.toLatin1().data() );
     myVolumeObj = SMESH::SObjectToInterface< SMESH::SMESH_IDSource>( pSObject );
     if ( myVolumeObj->_is_nil() )
     {
index 27dfe0af088d7ed1aa05c443097c4cbf6c0bccf8..f23c6d2f652688145b890e611b82b215925d306c 100644 (file)
@@ -392,7 +392,7 @@ bool SMESHGUI_RevolutionDlg::isValid()
 //=================================================================================
 bool SMESHGUI_RevolutionDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if (!isValid())
index 48e7204cbac16bc01bc660abbe394a2435bd8198..291d908ddbb5686d539621f604c7126ee0fde7aa 100644 (file)
@@ -400,7 +400,7 @@ void SMESHGUI_RotationDlg::Init (bool ResetControls)
 //=================================================================================
 bool SMESHGUI_RotationDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if( !isValid() )
index 85e9dd46c84125ccf57c95c3cb9ebdf19c6ce611..001ee7d9440a02acbd4667a707abe59ec48c3fb6 100644 (file)
@@ -439,7 +439,7 @@ void SMESHGUI_ScaleDlg::ConstructorsClicked (int constructorId)
 //=================================================================================
 bool SMESHGUI_ScaleDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if( !isValid() )
index 5eb6dba66ad7937257c028548868e702a7c86aa9..a8704b8b977b460cc353abfa742720cccf13130d 100644 (file)
@@ -40,7 +40,7 @@
 #include <SMESH_ScalarBarActor.h>
 
 // SALOME GUI includes
-#include <SalomeApp_Study.h>
+#include <SalomeApp_Application.h>
 #include <LightApp_VTKSelector.h>
 #include <SVTK_ViewWindow.h>
 
@@ -75,15 +75,10 @@ void SMESHGUI_Selection::init( const QString& client, LightApp_SelectionMgr* mgr
 {
   LightApp_Selection::init( client, mgr );
 
-  if( mgr && study() )
+  if( mgr )
   {
-    SalomeApp_Study* aSStudy = dynamic_cast<SalomeApp_Study*>(study());
-    if (!aSStudy)
-      return;
-    _PTR(Study) aStudy = aSStudy->studyDS();
-
     for( int i=0, n=count(); i<n; i++ ) {
-      myTypes.append( typeName( type( entry( i ), aStudy ) ) );
+      myTypes.append( typeName( type( entry( i ) ) ) );
       myControls.append( controlMode( i ) );
     }
   }
@@ -203,8 +198,8 @@ QList<QVariant> SMESHGUI_Selection::elemTypes( int ind, bool fromObj ) const
   {
     if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
     {
-      _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
-      CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() );
+      _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
+      CORBA::Object_var obj = SMESH::SObjectToObject( sobj );
       SMESH::SMESH_IDSource_var idSrc = SMESH::SMESH_IDSource::_narrow( obj );
       if ( !CORBA::is_nil( idSrc ) )
       {
@@ -268,7 +263,7 @@ QString SMESHGUI_Selection::displayMode( int ind ) const
 
 bool SMESHGUI_Selection::isQuadratic( int ind ) const
 {
-  _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
+  _PTR(SObject) so = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
   if ( !so )
     return false;
   SMESH::SMESH_IDSource_var idSource =  SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( so );
@@ -470,11 +465,14 @@ bool SMESHGUI_Selection::isAutoColor( int ind ) const
 {
   if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
   {
-    _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
-    CORBA::Object_var      obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() );
-    SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
-    if ( !CORBA::is_nil( mesh ) )
-      return mesh->GetAutoColor();
+    _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
+    CORBA::Object_var obj = SMESH::SObjectToObject( sobj );
+
+    if ( !CORBA::is_nil( obj ) ) {
+      SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
+      if ( !CORBA::is_nil( mesh ) )
+        return mesh->GetAutoColor();
+    }
   }
   return false;
 }
@@ -488,8 +486,8 @@ int SMESHGUI_Selection::numberOfNodes( int ind ) const
 {
   if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
   {
-    _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
-    CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() );
+    _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
+    CORBA::Object_var obj = SMESH::SObjectToObject( sobj );
 
     if ( !CORBA::is_nil( obj ) ) {
       SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( obj );
@@ -519,8 +517,8 @@ int SMESHGUI_Selection::dim( int ind ) const
   int dim = -1;
   if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
   {
-    _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
-    CORBA::Object_var obj = SMESH::SObjectToObject( sobj, SMESH::GetActiveStudyDocument() );
+    _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
+    CORBA::Object_var obj = SMESH::SObjectToObject( sobj );
 
     if ( !CORBA::is_nil( obj ) ) {
       SMESH::SMESH_IDSource_var idSrc = SMESH::SMESH_IDSource::_narrow( obj );
@@ -554,7 +552,7 @@ bool SMESHGUI_Selection::isComputable( int ind ) const
                                               myTypes[ind].startsWith("Mesh " )))
   {
     QMap<int,int> modeMap;
-    _PTR(SObject) meshSO = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
+    _PTR(SObject) meshSO = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
 
     _PTR(SComponent) component = meshSO->GetFatherComponent();
     if ( meshSO->Depth() - component->Depth() > 1 ) // sub-mesh, get a mesh
@@ -580,7 +578,7 @@ bool SMESHGUI_Selection::isPreComputable( int ind ) const
     if ( maxDim < 2 ) // we can preview 1D or 2D
     {
       QMap<int,int> modeMap;
-      _PTR(SObject) pMesh = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
+      _PTR(SObject) pMesh = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
       SMESHGUI_PrecomputeOp::getAssignedAlgos( pMesh, modeMap );
       if ( modeMap.size() > 1 )
         return (( modeMap.contains( SMESH::DIM_3D )) ||
@@ -599,7 +597,7 @@ bool SMESHGUI_Selection::hasGeomReference( int ind ) const
 {
   if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] != "Unknown" )
   {
-    _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
+    _PTR(SObject) so = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
     GEOM::GEOM_Object_var shape = SMESH::GetShapeOnMeshOrSubMesh( so );
     return !shape->_is_nil();
   }
@@ -616,7 +614,7 @@ bool SMESHGUI_Selection::isEditableHyp( int ind ) const
   bool isEditable = true;
   if ( ind >= 0 && ind < myTypes.count() && myTypes[ind] == "Hypothesis" )
   {
-    _PTR(SObject) so = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
+    _PTR(SObject) so = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
     SMESH::SMESH_Hypothesis_var hyp = SMESH::SObjectToInterface<SMESH::SMESH_Hypothesis>( so );
     if ( !hyp->_is_nil() )
     {
@@ -653,9 +651,9 @@ bool SMESHGUI_Selection::hasChildren( int ind ) const
 {
   if ( ind >= 0 )
   {
-    _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
+    _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().data() );
     if ( sobj ) 
-      return SMESH::GetActiveStudyDocument()->GetUseCaseBuilder()->HasChildren( sobj );
+      return SMESH::getStudy()->GetUseCaseBuilder()->HasChildren( sobj );
   }
   return false;
 }
@@ -670,9 +668,10 @@ int SMESHGUI_Selection::nbChildren( int ind ) const
   int nb = 0;
   if ( ind >= 0 )
   {
-    _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().data() );
-    if ( sobj && sobj->GetStudy()->GetUseCaseBuilder()->IsUseCaseNode( sobj ) ) {
-      _PTR(UseCaseIterator) it = sobj->GetStudy()->GetUseCaseBuilder()->GetUseCaseIterator( sobj ); 
+    _PTR(Study) study = SMESH::getStudy();
+    _PTR(SObject) sobj = study->FindObjectID( entry( ind ).toLatin1().data() );
+    if ( sobj && study->GetUseCaseBuilder()->IsUseCaseNode( sobj ) ) {
+      _PTR(UseCaseIterator) it = study->GetUseCaseBuilder()->GetUseCaseIterator( sobj );
       for ( it->Init( false ); it->More(); it->Next() ) nb++;
     }
   }
@@ -694,10 +693,10 @@ bool SMESHGUI_Selection::isContainer( int ind ) const
 //purpose  : 
 //=======================================================================
 
-int SMESHGUI_Selection::type( const QString& entry, _PTR(Study) study )
+int SMESHGUI_Selection::type( const QString& entry )
 {
   int res = -1;
-  _PTR(SObject) obj = study->FindObjectID( entry.toLatin1().data() );
+  _PTR(SObject) obj = SalomeApp_Application::getStudy()->FindObjectID( entry.toLatin1().data() );
   if ( obj ) {
     _PTR(SObject) ref;
     if ( obj->ReferencedObject( ref ) )
@@ -793,7 +792,7 @@ QString SMESHGUI_Selection::typeName( const int t )
 bool SMESHGUI_Selection::isImported( const int ind ) const
 {
   bool res = false;
-  _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().constData() );
+  _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().constData() );
   if ( sobj )
   {
     SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( SMESH::SObjectToObject( sobj ) );
@@ -823,7 +822,7 @@ int SMESHGUI_Selection::guiState()
 
 QString SMESHGUI_Selection::groupType( int ind ) const
 {
-  _PTR(SObject) sobj = SMESH::GetActiveStudyDocument()->FindObjectID( entry( ind ).toLatin1().constData() );
+  _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entry( ind ).toLatin1().constData() );
   if ( sobj )
   {
     SMESH::SMESH_Group_var g = SMESH::SObjectToInterface<SMESH::SMESH_Group>( sobj );
index 71690c7137dfbe63f99ccda2ab828ed6a1502ea6..115b0e46f60ef1e6845ab64a81d6cca4afaa15f3 100644 (file)
@@ -85,7 +85,7 @@ public:
   
   SMESH_Actor*            getActor( int ) const;
 
-  static int              type( const QString&, _PTR(Study) );
+  static int              type( const QString& );
   static QString          typeName( const int );
   static  int             guiState();
   
index ca551105a5db5d68f9f9ababf00ecf2a9c66abb0..ed560b87ee5400108f0be8733d2db59ea87be068 100644 (file)
@@ -295,36 +295,28 @@ SVTK_Selector* SMESHGUI_SelectionOp::selector() const
 //=======================================================================
 int SMESHGUI_SelectionOp::typeById( const QString& str, const EntityType objtype ) const
 {
-  SalomeApp_Study* _study = dynamic_cast<SalomeApp_Study*>( study() );
-  if( !_study )
-    return -1;
-
-  _PTR( Study ) st = _study->studyDS();
+  _PTR(Study) aStudy = SMESH::getStudy();
 
   int res = -1;
   if( objtype == Object )
   {
-    SalomeApp_Study* _study = dynamic_cast<SalomeApp_Study*>( study() );
-    if( _study )
+    int t = SMESHGUI_Selection::type( str );
+    if( t<0 )
     {
-      int t = SMESHGUI_Selection::type( str, _study->studyDS() );
-      if( t<0 )
+      //try to get GEOM type
+      _PTR( SObject ) sobj = aStudy->FindObjectID( str.toLatin1().data() );
+      if( sobj )
       {
-        //try to get GEOM type
-        _PTR( SObject ) sobj = st->FindObjectID( str.toLatin1().data() );
-        if( sobj )
-        {
-          GEOM::GEOM_Object_var obj = GEOM::GEOM_Object::_narrow(
-            dynamic_cast<SALOMEDS_SObject*>( sobj.get() )->GetObject() );
-          if( !CORBA::is_nil( obj ) )
-            // as decoding of type id is not realized in LightApp_Dialog,
-            //make all GEOM objects have same type id
-            res = SMESHGUI_Dialog::prefix( "GEOM" );// + obj->GetType();
-        }
+        GEOM::GEOM_Object_var obj = GEOM::GEOM_Object::_narrow(
+          dynamic_cast<SALOMEDS_SObject*>( sobj.get() )->GetObject() );
+        if( !CORBA::is_nil( obj ) )
+          // as decoding of type id is not realized in LightApp_Dialog,
+          //make all GEOM objects have same type id
+          res = SMESHGUI_Dialog::prefix( "GEOM" );// + obj->GetType();
       }
-      else
-        res = SMESHGUI_Dialog::prefix( "SMESH" ) + t;
     }
+    else
+      res = SMESHGUI_Dialog::prefix( "SMESH" ) + t;
   }
   else
   {
@@ -335,7 +327,7 @@ int SMESHGUI_SelectionOp::typeById( const QString& str, const EntityType objtype
     int id = _id.toInt( &ok );
     if( ok )
     {
-      _PTR( SObject ) sobj = st->FindObjectID( entry.toLatin1().data() );
+      _PTR( SObject ) sobj = aStudy->FindObjectID( entry.toLatin1().data() );
       SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( 
         dynamic_cast<SALOMEDS_SObject*>( sobj.get() )->GetObject() );
       SMESH::SMESH_subMesh_var submesh = SMESH::SMESH_subMesh::_narrow( 
@@ -422,13 +414,9 @@ void SMESHGUI_SelectionOp::selected( QStringList& names,
       QString id = anIt.Value()->getEntry();
       ids.append( id );
       types.append( typeById( id, Object ) );
-      SalomeApp_Study* _study = dynamic_cast<SalomeApp_Study*>( study() );
-      if( _study )
-      {
-        _PTR(SObject) obj = _study->studyDS()->FindObjectID( anIt.Value()->getEntry() );
-        if( obj )
-          names.append( QString( obj->GetName().c_str() ).trimmed() );
-      }
+      _PTR(SObject) obj = SMESH::getStudy()->FindObjectID( anIt.Value()->getEntry() );
+      if( obj )
+        names.append( QString( obj->GetName().c_str() ).trimmed() );
     }
   }
 }
index 22253c4d69caec10655af62a565c787b09d98365..27dfe06e75e49695312599ab83ce2a0f6bf61e3e 100644 (file)
@@ -1293,7 +1293,7 @@ void SMESHGUI_SewingDlg::onSwapClicked()
 //=================================================================================
 bool SMESHGUI_SewingDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   bool aResult = false;
index 6bff0c7ece87d602dad77ff6046b3e1f155ad505..5d82de8bebb4970fd87b28a13febf0ceba41d897 100644 (file)
@@ -319,13 +319,12 @@ void SMESHGUI_ShapeByMeshOp::commitOperation()
     else
     {
       GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
-      _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
 
-      if (geomGen->_is_nil() || !aStudy)
+      if (geomGen->_is_nil())
         return;
 
       GEOM::GEOM_IShapesOperations_wrap aShapesOp =
-        geomGen->GetIShapesOperations(aStudy->StudyId());
+        geomGen->GetIShapesOperations();
       if (aShapesOp->_is_nil() )
         return;
 
@@ -364,7 +363,7 @@ void SMESHGUI_ShapeByMeshOp::commitOperation()
       else if (aNumberOfGO > 1)
       {
         GEOM::GEOM_IGroupOperations_wrap aGroupOp =
-          geomGen->GetIGroupOperations(aStudy->StudyId());
+          geomGen->GetIGroupOperations();
         if(aGroupOp->_is_nil())
           return;
 
@@ -386,9 +385,8 @@ void SMESHGUI_ShapeByMeshOp::commitOperation()
 
       // publish the GEOM object in study
       QString aNewGeomGroupName ( myDlg->myGeomName->text() );
-      SALOMEDS::Study_var aStudyVar = _CAST(Study,aStudy)->GetStudy();
       SALOMEDS::SObject_wrap aNewGroupSO =
-        geomGen->AddInStudy( aStudyVar, aGeomObject, 
+        geomGen->AddInStudy( aGeomObject,
                              aNewGeomGroupName.toLatin1().data(), aMeshShape);
 
       // get a GEOM_Object already published, which doesn't need UnRegister()
index 3a5e9227ae8e6dd25213c0fbd236a2a5a931259c..b3c14cb521d8dff03ad77b1cb5e2352dbc985e7c 100755 (executable)
@@ -493,7 +493,7 @@ void SMESHGUI_SingleEditDlg::enterEvent (QEvent*)
 //=================================================================================
 bool SMESHGUI_SingleEditDlg::onApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
   // verify validity of input data
   if (!isValid(true))
index caa4c51194fd1f1de33e69da4e28144d19cace2c..3f79c3292f28fee5482d190a51deff9a976d0e4f 100644 (file)
@@ -341,7 +341,7 @@ void SMESHGUI_SmoothingDlg::Init()
 //=================================================================================
 bool SMESHGUI_SmoothingDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if (!isValid())
index 71cca13a5fcbd77f3b4014f47a945258b98a86ab..75e03affbc832b5109a83cc0ef97f0fda2c7384f 100644 (file)
@@ -202,7 +202,7 @@ bool SMESHGUI_SplitBiQuadOp::onApply()
   int nbObj = 0;
   for ( int i = 0; i < entries.count() ; ++i )
   {
-    _PTR(SObject) pObj = studyDS()->FindObjectID( entries[i].toLatin1().data() );
+    _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( entries[i].toLatin1().data() );
     SMESH::SMESH_IDSource_var obj = SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( pObj );
     if( !CORBA::is_nil( obj ))
     {
index e6886021ad769e40218d413116f1c0ffd04f4254..f994189fd2df0932fe2c40f7dd43e79c54e070ec 100644 (file)
@@ -474,7 +474,7 @@ void SMESHGUI_SymmetryDlg::ConstructorsClicked (int constructorId)
 //=================================================================================
 bool SMESHGUI_SymmetryDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if( !isValid() )
index 75e5635bfa59a153b34e9938ac52e9e4a1259423..21342aebd88abef9f96f027c89ac26ab713ecb64 100644 (file)
@@ -475,7 +475,7 @@ void SMESHGUI_TranslationDlg::ConstructorsClicked (int constructorId)
 //=================================================================================
 bool SMESHGUI_TranslationDlg::ClickOnApply()
 {
-  if (mySMESHGUI->isActiveStudyLocked())
+  if (SMESHGUI::isStudyLocked())
     return false;
 
   if( !isValid() )
index 21f74593fbde626c20cdcba8a1061971d4209417..e6fdb1c157d7aa469158bd37b1e59ea8dd56259c 100644 (file)
@@ -76,12 +76,6 @@ namespace SMESH
     return SUIT_Session::session()->resourceMgr();
   }
 
-  _PTR(Study)
-  GetCStudy(const SalomeApp_Study* theStudy)
-  {
-    return theStudy->studyDS();
-  }
-
   CORBA::Object_var 
   DataOwnerToObject(const LightApp_DataOwnerPtr& theOwner)
   {
@@ -90,9 +84,8 @@ namespace SMESH
       const Handle(SALOME_InteractiveObject)& anIO = theOwner->IO();
       if(!anIO.IsNull()){
         if(anIO->hasEntry()){
-          _PTR(Study) aStudy = GetActiveStudyDocument();
-          _PTR(SObject) aSObj = aStudy->FindObjectID(anIO->getEntry());
-          anObj = SObjectToObject(aSObj,aStudy);
+          _PTR(SObject) aSObj = getStudy()->FindObjectID(anIO->getEntry());
+          anObj = SObjectToObject(aSObj);
         }
       }
     }
@@ -118,13 +111,12 @@ namespace SMESH
       return NULL;
   }
 
-  _PTR(Study) GetActiveStudyDocument()
+  _PTR(Study) getStudy()
   {
-    SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(GetActiveStudy());
-    if (aStudy)
-      return aStudy->studyDS();
-    else
-      return _PTR(Study)();
+    static _PTR(Study) _study;
+    if(!_study)
+      _study = SalomeApp_Application::getStudy();
+    return _study;
   }
 
   _PTR(SObject) FindSObject (CORBA::Object_ptr theObject)
@@ -132,26 +124,23 @@ namespace SMESH
     SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
       (SUIT_Session::session()->activeApplication());
     if (app && !CORBA::is_nil(theObject)) {
-      if(_PTR(Study) aStudy = GetActiveStudyDocument()){
-        CORBA::String_var anIOR = app->orb()->object_to_string(theObject);
-        if (strcmp(anIOR.in(), "") != 0)
-          return aStudy->FindObjectIOR(anIOR.in());
-      }
+      CORBA::String_var anIOR = app->orb()->object_to_string(theObject);
+      if (strcmp(anIOR.in(), "") != 0)
+        return getStudy()->FindObjectIOR(anIOR.in());
     }
     return _PTR(SObject)();
   }
 
   void SetName (_PTR(SObject) theSObject, const QString& theName)
   {
-    _PTR(Study) aStudy = GetActiveStudyDocument();
-    if (aStudy->GetProperties()->IsLocked())
+    if (getStudy()->GetProperties()->IsLocked())
       return;
     SMESHGUI::GetSMESHGen()->SetName(theSObject->GetIOR().c_str(), theName.toLatin1().data());
   }
 
   void SetValue (_PTR(SObject) theSObject, const QString& theValue)
   {
-    _PTR(Study) aStudy = GetActiveStudyDocument();
+    _PTR(Study) aStudy = getStudy();
     if (aStudy->GetProperties()->IsLocked())
       return;
     _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
@@ -164,7 +153,7 @@ namespace SMESH
   
   void setFileName (_PTR(SObject) theSObject, const QString& theValue)
   {
-    _PTR(Study) aStudy = GetActiveStudyDocument();
+    _PTR(Study) aStudy = getStudy();
     if (aStudy->GetProperties()->IsLocked())
       return;
     _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
@@ -177,7 +166,7 @@ namespace SMESH
   
   void setFileType (_PTR(SObject) theSObject, const QString& theValue)
   {
-    _PTR(Study) aStudy = GetActiveStudyDocument();
+    _PTR(Study) aStudy = getStudy();
     if (aStudy->GetProperties()->IsLocked())
       return;
     _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
@@ -188,8 +177,7 @@ namespace SMESH
       aFileType->SetValue(theValue.toLatin1().data());
   }
 
-  CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject,
-                                     _PTR(Study)   /*theStudy*/)
+  CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject )
   {
     SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
       (SUIT_Session::session()->activeApplication());
@@ -207,12 +195,6 @@ namespace SMESH
     return CORBA::Object::_nil();
   }
 
-  CORBA::Object_var SObjectToObject (_PTR(SObject) theSObject)
-  {
-    _PTR(Study) aStudy;// = GetActiveStudyDocument(); -- aStudy is not used
-    return SObjectToObject(theSObject,aStudy);
-  }
-
   _PTR(SObject) ObjectToSObject( CORBA::Object_ptr theObject )
   {
     _PTR(SObject) res;
@@ -220,9 +202,8 @@ namespace SMESH
       (SUIT_Session::session()->activeApplication());
     if ( app ) {
       CORBA::String_var ior = app->orb()->object_to_string( theObject );
-      SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
-      if ( study && strlen( ior ) > 0 )
-        res = study->studyDS()->FindObjectIOR( ior.in() );
+      if ( strlen( ior ) > 0 )
+        res = getStudy()->FindObjectIOR( ior.in() );
     }
     return res;
   }
@@ -231,9 +212,8 @@ namespace SMESH
   {
     if (!theIO.IsNull()) {
       if (theIO->hasEntry()) {
-        _PTR(Study) aStudy = GetActiveStudyDocument();
-        _PTR(SObject) anObj = aStudy->FindObjectID(theIO->getEntry());
-        return SObjectToObject(anObj,aStudy);
+        _PTR(SObject) anObj = getStudy()->FindObjectID(theIO->getEntry());
+        return SObjectToObject(anObj);
       }
     }
     return CORBA::Object::_nil();
@@ -279,8 +259,8 @@ namespace SMESH
 
   void ModifiedMesh (_PTR(SObject) theSObject, bool theIsNotModif, bool isEmptyMesh)
   {
-    _PTR(Study) aStudy = GetActiveStudyDocument();
-    if ( !aStudy || aStudy->GetProperties()->IsLocked() )
+    _PTR(Study) aStudy = getStudy();
+    if ( !aStudy || aStudy->GetProperties()->IsLocked())
       return;
 
     _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
@@ -314,7 +294,7 @@ namespace SMESH
           aPixmap = anAttr;
 
           std::string entry = aSObj1->GetID();
-          int objType = SMESHGUI_Selection::type( entry.c_str(), aStudy );
+          int objType = SMESHGUI_Selection::type( entry.c_str() );
           if ( objType == SMESH::HYPOTHESIS || objType == SMESH::ALGORITHM )
             continue;
 
index 5b2e0b89ba662fb1caa7aa102767b8e7f04a880c..4a1a1c600fbf7659f3b90103df606f4782854be7 100644 (file)
@@ -80,10 +80,6 @@ SMESHGUI_EXPORT
 SMESHGUI_EXPORT
   SUIT_ResourceMgr*
   GetResourceMgr( const SalomeApp_Module* );
-  
-SMESHGUI_EXPORT
-  _PTR(Study)
-  GetCStudy( const SalomeApp_Study* );
 
 SMESHGUI_EXPORT
   CORBA::Object_var DataOwnerToObject( const LightApp_DataOwnerPtr& );
@@ -104,7 +100,7 @@ SMESHGUI_EXPORT
   SUIT_ViewWindow* GetActiveWindow();
 
 SMESHGUI_EXPORT
-  _PTR(Study) GetActiveStudyDocument();
+  _PTR(Study) getStudy();
 
 SMESHGUI_EXPORT
   _PTR(SObject) FindSObject( CORBA::Object_ptr );
@@ -117,10 +113,6 @@ SMESHGUI_EXPORT
   void setFileType( _PTR(SObject), const QString& );
   void setFileName( _PTR(SObject), const QString& );
 
-SMESHGUI_EXPORT
-  CORBA::Object_var SObjectToObject( _PTR(SObject),
-                                     _PTR(Study) );
-
 SMESHGUI_EXPORT
   CORBA::Object_var SObjectToObject( _PTR(SObject) );
 
index 10bc6ba22351523fb3777999d8747c0da72b8bd6..eac67620e4a542e269441013450f698dad1d8e94 100644 (file)
@@ -76,7 +76,7 @@
 
 namespace SMESH
 {
-  typedef std::map<TKeyOfVisualObj,TVisualObjPtr> TVisualObjCont;
+  typedef std::map<std::string,TVisualObjPtr> TVisualObjCont;
   static TVisualObjCont VISUAL_OBJ_CONT;
 
   //=============================================================================
@@ -136,17 +136,13 @@ namespace SMESH
       }
     }
     
-    if (aViewManager ) {
-      int aStudyId = aViewManager->study()->id();
-      TVisualObjCont::key_type aKey(aStudyId,theEntry);
-      TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey);
-      if(anIter != VISUAL_OBJ_CONT.end()) {
-        // for unknown reason, object destructor is not called, so clear object manually
-        anIter->second->GetUnstructuredGrid()->SetCells(0,0,0,0,0);
-        anIter->second->GetUnstructuredGrid()->SetPoints(0);
-      }
-      VISUAL_OBJ_CONT.erase(aKey);
+    TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(theEntry);
+    if(anIter != VISUAL_OBJ_CONT.end()) {
+      // for unknown reason, object destructor is not called, so clear object manually
+      anIter->second->GetUnstructuredGrid()->SetCells(0,0,0,0,0);
+      anIter->second->GetUnstructuredGrid()->SetPoints(0);
     }
+    VISUAL_OBJ_CONT.erase(theEntry);
 
     if(actorRemoved)
       aStudy->setVisibilityState(theEntry, Qtx::HiddenState);
@@ -199,7 +195,7 @@ namespace SMESH
    */
   //================================================================================
 
-  void RemoveVisuData(int studyID)
+  void RemoveVisuData()
   {
     SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
       ( SUIT_Session::session()->activeApplication() );
@@ -207,8 +203,7 @@ namespace SMESH
     ViewManagerList viewMgrs = app->viewManagers();
     for ( int iM = 0; iM < viewMgrs.count(); ++iM ) {
       SUIT_ViewManager* aViewManager = viewMgrs.at( iM );
-      if ( aViewManager && aViewManager->getType() == SVTK_Viewer::Type() &&
-           aViewManager->study()->id() == studyID ) {
+      if ( aViewManager && aViewManager->getType() == SVTK_Viewer::Type() ) {
         QVector<SUIT_ViewWindow*> views = aViewManager->getViews();
         for ( int iV = 0; iV < views.count(); ++iV ) {
           if(SVTK_ViewWindow* vtkWnd = GetVtkViewWindow(views[iV])) {
@@ -229,16 +224,10 @@ namespace SMESH
     }
     TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.begin();
     for ( ; anIter != VISUAL_OBJ_CONT.end(); ) {
-      int curId = anIter->first.first;
-      if ( curId == studyID ) {
-        // for unknown reason, object destructor is not called, so clear object manually
-        anIter->second->GetUnstructuredGrid()->SetCells(0,0,0,0,0);
-        anIter->second->GetUnstructuredGrid()->SetPoints(0);
-        VISUAL_OBJ_CONT.erase( anIter++ ); // anIter++ returns a copy of self before incrementing
-      }
-      else {
-        anIter++;
-      }
+      // for unknown reason, object destructor is not called, so clear object manually
+      anIter->second->GetUnstructuredGrid()->SetCells(0,0,0,0,0);
+      anIter->second->GetUnstructuredGrid()->SetPoints(0);
+      VISUAL_OBJ_CONT.erase( anIter++ ); // anIter++ returns a copy of self before incrementing
     }
   }
 
@@ -278,18 +267,17 @@ namespace SMESH
    */
   //================================================================================
 
-  TVisualObjPtr GetVisualObj(int theStudyId, const char* theEntry, bool nulData){
+  TVisualObjPtr GetVisualObj(const char* theEntry, bool nulData){
     TVisualObjPtr aVisualObj;
-    TVisualObjCont::key_type aKey(theStudyId,theEntry);
     try{
       OCC_CATCH_SIGNALS;
-      TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(aKey);
+      TVisualObjCont::iterator anIter = VISUAL_OBJ_CONT.find(theEntry);
       if(anIter != VISUAL_OBJ_CONT.end()){
         aVisualObj = anIter->second;
       }else{
         SalomeApp_Application* app =
           dynamic_cast<SalomeApp_Application*>( SMESHGUI::activeStudy()->application() );
-        _PTR(Study) aStudy = SMESHGUI::activeStudy()->studyDS();
+        _PTR(Study) aStudy = SMESH::getStudy();
         _PTR(SObject) aSObj = aStudy->FindObjectID(theEntry);
         if(aSObj){
           _PTR(GenericAttribute) anAttr;
@@ -302,7 +290,7 @@ namespace SMESH
               SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(anObj);
               if(!aMesh->_is_nil()){
                 aVisualObj.reset(new SMESH_MeshObj(aMesh));
-                TVisualObjCont::value_type aValue(aKey,aVisualObj);
+                TVisualObjCont::value_type aValue(theEntry,aVisualObj);
                 VISUAL_OBJ_CONT.insert(aValue);
               }
               //Try narrow to SMESH_Group interface
@@ -313,10 +301,10 @@ namespace SMESH
                 aFatherSObj = aFatherSObj->GetFather();
                 if(!aFatherSObj) return aVisualObj;
                 CORBA::String_var anEntry = aFatherSObj->GetID().c_str();
-                TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in());
+                TVisualObjPtr aVisObj = GetVisualObj(anEntry.in());
                 if(SMESH_MeshObj* aMeshObj = dynamic_cast<SMESH_MeshObj*>(aVisObj.get())){
                   aVisualObj.reset(new SMESH_GroupObj(aGroup,aMeshObj));
-                  TVisualObjCont::value_type aValue(aKey,aVisualObj);
+                  TVisualObjCont::value_type aValue(theEntry,aVisualObj);
                   VISUAL_OBJ_CONT.insert(aValue);
                 }
               }
@@ -328,10 +316,10 @@ namespace SMESH
                 aFatherSObj = aFatherSObj->GetFather();
                 if(!aFatherSObj) return aVisualObj;
                 CORBA::String_var anEntry = aFatherSObj->GetID().c_str();
-                TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in());
+                TVisualObjPtr aVisObj = GetVisualObj(anEntry.in());
                 if(SMESH_MeshObj* aMeshObj = dynamic_cast<SMESH_MeshObj*>(aVisObj.get())){
                   aVisualObj.reset(new SMESH_subMeshObj(aSubMesh,aMeshObj));
-                  TVisualObjCont::value_type aValue(aKey,aVisualObj);
+                  TVisualObjCont::value_type aValue(theEntry,aVisualObj);
                   VISUAL_OBJ_CONT.insert(aValue);
                 }
               }
@@ -553,7 +541,7 @@ namespace SMESH
       return NULL;
 
     if(!CORBA::is_nil(theObject)){
-      _PTR(Study) aStudy = GetActiveStudyDocument();
+      _PTR(Study) aStudy = getStudy();
       CORBA::String_var anIOR = app->orb()->object_to_string( theObject );
       _PTR(SObject) aSObject = aStudy->FindObjectIOR(anIOR.in());
       if(aSObject){
@@ -565,14 +553,12 @@ namespace SMESH
   }
 
 
-  SMESH_Actor* CreateActor(_PTR(Study) theStudy,
-                           const char* theEntry,
+  SMESH_Actor* CreateActor(const char* theEntry,
                            int theIsClear)
   {
     SMESH_Actor *anActor = NULL;
-    CORBA::Long anId = theStudy->StudyId();
-    if(TVisualObjPtr aVisualObj = GetVisualObj(anId,theEntry)){
-      _PTR(SObject) aSObj = theStudy->FindObjectID(theEntry);
+    if(TVisualObjPtr aVisualObj = GetVisualObj(theEntry)){
+      _PTR(SObject) aSObj = getStudy()->FindObjectID(theEntry);
       if(aSObj){
         _PTR(GenericAttribute) anAttr;
         if(aSObj->FindAttribute(anAttr,"AttributeName")){
@@ -645,10 +631,7 @@ namespace SMESH
         Handle(SALOME_InteractiveObject) anIO = theActor->getIO();
         if(anIO->hasEntry()){
           std::string anEntry = anIO->getEntry();
-          SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>( vtkWnd->getViewManager()->study() );
-          int aStudyId = aStudy->id();
-          TVisualObjCont::key_type aKey(aStudyId,anEntry);
-          VISUAL_OBJ_CONT.erase(aKey);
+          VISUAL_OBJ_CONT.erase(anEntry);
         }
       }
       theActor->Delete();
@@ -753,13 +736,10 @@ namespace SMESH
             {
               //MESSAGE("---");
               SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(theWnd->getViewManager()->study());
-              _PTR(Study) aDocument = aStudy->studyDS();
-              // Pass non-visual objects (hypotheses, etc.), return true in this case
-              CORBA::Long anId = aDocument->StudyId();
               TVisualObjPtr aVisualObj;
-              if ( (aVisualObj = GetVisualObj(anId,theEntry)) && aVisualObj->IsValid())
+              if ( (aVisualObj = GetVisualObj(theEntry)) && aVisualObj->IsValid())
               {
-                if ((anActor = CreateActor(aDocument,theEntry,true))) {
+                if ((anActor = CreateActor(theEntry,true))) {
                   bool needFitAll = noSmeshActors(theWnd); // fit for the first object only
                   DisplayActor(theWnd,anActor);
                   anActor->SetVisibility(true);
@@ -827,9 +807,7 @@ namespace SMESH
   bool Update(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay)
   {
     //MESSAGE("Update");
-    _PTR(Study) aStudy = GetActiveStudyDocument();
-    CORBA::Long anId = aStudy->StudyId();
-    if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry())) {
+    if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(theIO->getEntry())) {
       if ( theDisplay )
         UpdateView(SMESH::eDisplay,theIO->getEntry());
       return true;
@@ -840,9 +818,7 @@ namespace SMESH
   bool UpdateNulData(const Handle(SALOME_InteractiveObject)& theIO, bool theDisplay)
   {
     //MESSAGE("UpdateNulData");
-    _PTR(Study) aStudy = GetActiveStudyDocument();
-    CORBA::Long anId = aStudy->StudyId();
-    if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,theIO->getEntry(), true)) {
+    if ( TVisualObjPtr aVisualObj = SMESH::GetVisualObj(theIO->getEntry(), true)) {
       if ( theDisplay )
         UpdateView(SMESH::eDisplay,theIO->getEntry());
       return true;
index b1159bd139ede160bfcaf7dff4b1451f8a89603b..217b1995da5f4190a58477e14c7f1a980f62e1a3 100644 (file)
@@ -63,10 +63,9 @@ class vtkActor;
 namespace SMESH
 {
   //----------------------------------------------------------------------------
-  typedef std::pair<int,std::string> TKeyOfVisualObj;
   
 SMESHGUI_EXPORT
-  TVisualObjPtr GetVisualObj( int, const char*, bool nulData =false );
+  TVisualObjPtr GetVisualObj( const char*, bool nulData =false );
 SMESHGUI_EXPORT
   void OnVisuException(); // PAL16631
 
@@ -103,13 +102,13 @@ SMESHGUI_EXPORT
 
   //----------------------------------------------------------------------------
 SMESHGUI_EXPORT  
-  SMESH_Actor* CreateActor( _PTR(Study), const char*, int = false );
+  SMESH_Actor* CreateActor( const char*, int = false );
 SMESHGUI_EXPORT
   void DisplayActor( SUIT_ViewWindow*, SMESH_Actor* );
 SMESHGUI_EXPORT
   void RemoveActor( SUIT_ViewWindow*, SMESH_Actor* );
 SMESHGUI_EXPORT
-  void RemoveVisuData( int );
+  void RemoveVisuData();
 
   //----------------------------------------------------------------------------
   enum EDisplaing { eDisplayAll, eDisplay, eDisplayOnly, eErase, eEraseAll };
index ef6213ce6bd44dbf90d693b37d5e89dfef7ba3ba..dba59dba77b8aa6c4b013400b0cff0b805bd4d80 100644 (file)
         <source>MED_FILES_FILTER</source>
         <translation>MED files</translation>
     </message>
+    <message>
+        <source>SAUV_FILES_FILTER</source>
+        <translation>SAUV files</translation>
+    </message>
     <message>
         <source>IDEAS_FILES_FILTER</source>
         <translation>IDEAS files</translation>
         <source>TEXT_FILES_FILTER</source>
         <translation>TXT files</translation>
     </message>
-    <message>
-        <source>MED_VX_FILES_FILTER</source>
-        <translation>MED %1 files</translation>
-    </message>
     <message>
         <source>STL_FILES_FILTER</source>
         <translation>STL files</translation>
@@ -1792,13 +1792,6 @@ Do you want to continue?</translation>
         <source>SMESH_EXPORT_ONLY_GPOUP</source>
         <translation>You are going to export the group without its mesh.
 Do you want to continue?</translation>
-    </message>
-    <message>
-        <source>SMESH_EXPORT_MED_V2_1</source>
-        <translation>During export mesh with name - &quot;%1&quot; to MED 2.1
-polygons and polyhedrons elements will be missed
-For correct export use MED 2.2
-Are you sure want to export to MED 2.1?</translation>
     </message>
     <message>
         <source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
index 2f5882e9983e92ed8e262014850e32c80b836b2b..5418e81c646357078c34d5dc30388a0d6640e71e 100755 (executable)
         <source>MED_FILES_FILTER</source>
         <translation>Fichiers MED</translation>
     </message>
+    <message>
+        <source>SAUV_FILES_FILTER</source>
+        <translation>Fichiers SAUV</translation>
+    </message>
     <message>
         <source>IDEAS_FILES_FILTER</source>
         <translation>Fichiers IDEAS</translation>
         <source>TEXT_FILES_FILTER</source>
         <translation>Fichiers TXT</translation>
     </message>
-    <message>
-        <source>MED_VX_FILES_FILTER</source>
-        <translation>Fichiers MED %1</translation>
-    </message>
     <message>
         <source>STL_FILES_FILTER</source>
         <translation>Fichiers STL</translation>
@@ -1776,13 +1776,6 @@ Voulez-vous continuer ?</translation>
         <source>SMESH_EXPORT_ONLY_GPOUP</source>
         <translation>Vous allez export le groupe sans son maillage.
 Voulez-vous continuer ?</translation>
-    </message>
-    <message>
-        <source>SMESH_EXPORT_MED_V2_1</source>
-        <translation>Les éléments polygonaux et polyèdriques seront omis 
-dans le cas d&apos;exportation du maillage &quot;%1&quot; à MED 2.1
-Utilisez MED 2.2 pour l&apos;exportation correcte.
-Voulez-vous effectuer l&apos;exportation à MED 2.1 ?</translation>
     </message>
     <message>
         <source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
index 77c6734106723236f063334737afec997108258e..5ea6dbe1d8291aaa21ed2434984cc894b92b6a08 100644 (file)
       <source>MED_FILES_FILTER</source>
       <translation>MEDファイル</translation>
     </message>
+    <message>
+        <source>SAUV_FILES_FILTER</source>
+        <translation>SAUVファイル</translation>
+    </message>
     <message>
       <source>IDEAS_FILES_FILTER</source>
       <translation>IDEAS ファイル</translation>
       <source>TEXT_FILES_FILTER</source>
       <translation>TXT ファイル</translation>
     </message>
-    <message>
-      <source>MED_VX_FILES_FILTER</source>
-      <translation>ファイル MED %1</translation>
-    </message>
     <message>
       <source>STL_FILES_FILTER</source>
       <translation>STL ファイル</translation>
       <source>SMESH_EXPORT_ONLY_GPOUP</source>
       <translation>そのメッシュなしでグループのエクスポートをしようとしています。続行しますか?</translation>
     </message>
-    <message>
-      <source>SMESH_EXPORT_MED_V2_1</source>
-      <translation>多角形、多面体要素は正しいエクスポート用 MED 2.1 MED 2.2 にメッシュ '%' のエクスポートの場合省略されます。MED 2.1 をエクスポートしますか。</translation>
-    </message>
     <message>
       <source>SMESH_EXPORT_MED_VERSION_COLLISION</source>
       <translation>ファイル「%1」MED バージョンは知られていないか、選択したバージョンと一致しません。ファイルを上書きしますか。</translation>
index aad6899d32debaa1f322d69d3123b24902fe804a..f37334a160308c8759f28b9568fdf5c1ec023b76 100644 (file)
@@ -434,7 +434,7 @@ namespace
     text << "import salome, SMESH\n";
     text << "salome.salome_init()\n";
     text << "from salome.smesh import smeshBuilder\n";
-    text << "smesh = smeshBuilder.New(salome.myStudy)\n";
+    text << "smesh = smeshBuilder.New()\n";
     text << "m=smesh.Mesh()\n";
     for ( size_t iE = 0; iE < bndSegsPerEdge.size(); ++iE )
     {
index f8fabc08cd59a31f9d1d231e58cf4400f932274e..2bb789ab37364c982d7d8cf051976bd86163597b 100644 (file)
@@ -31,8 +31,7 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_SOURCE_DIR}/src/Controls
   ${PROJECT_SOURCE_DIR}/src/SMDS
   ${PROJECT_SOURCE_DIR}/src/SMESHDS
-  ${PROJECT_SOURCE_DIR}/src/MEDWrapper/Base
-  ${PROJECT_SOURCE_DIR}/src/MEDWrapper/Factory
+  ${PROJECT_SOURCE_DIR}/src/MEDWrapper
   ${PROJECT_SOURCE_DIR}/src/Driver
   ${PROJECT_SOURCE_DIR}/src/DriverMED
   ${PROJECT_SOURCE_DIR}/src/DriverCGNS
@@ -70,6 +69,7 @@ SET(_link_LIBRARIES
   ${KERNEL_SalomeGenericObj}
   ${KERNEL_SalomeIDLKERNEL}
   ${KERNEL_SALOMELocalTrace}
+  ${KERNEL_SalomeKernelHelpers}
   ${CAS_TKCDF}
   ${CAS_TKBO}
   ${CAS_TKShHealing}
@@ -115,7 +115,7 @@ SET(SMESHEngine_HEADERS
 SET(SMESHEngine_SOURCES
   SMESH_Gen_i.cxx
   SMESH_Gen_i_1.cxx
-  SMESH_DumpPython.cxx
+  SMESH_PythonDump.cxx
   SMESH_Mesh_i.cxx
   SMESH_subMesh_i.cxx
   SMESH_MeshEditor_i.cxx
index e7155c2157326b01eca798cf5cf649af80d2fbf4..aed61ba95ee2c267a97bd70cdadc7996e7f0d6bd 100644 (file)
@@ -185,7 +185,7 @@ namespace {
     _AString comment;
 
     _pyID obj = cmd->GetObject();
-    if ( obj.Search( "print " ) == 1 )
+    if ( obj.Search( "print(" ) == 1 )
       return; // print statement
 
     if ( !obj.IsEmpty() && obj.Value( obj.Length() ) == ')' )
@@ -443,6 +443,18 @@ namespace {
       }
     }
   }
+
+  bool _FilterArg( const _AString& theArg  )
+  {
+    static std::list<_AString> filteredArgs;
+    static bool initialized = false;
+    if ( !initialized ) {
+      initialized = true;
+      filteredArgs.push_back( "SMESH.MED_V2_1" );
+      filteredArgs.push_back( "SMESH.MED_V2_2" );
+    }  
+    return std::find( filteredArgs.begin(), filteredArgs.end(), theArg ) != filteredArgs.end();
+  }
 }
 
 //================================================================================
@@ -464,7 +476,6 @@ SMESH_2smeshpy::ConvertScript(std::list< TCollection_AsciiString >&     theScrip
                               Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod,
                               Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
                               std::set< TCollection_AsciiString >&      theRemovedObjIDs,
-                              SALOMEDS::Study_ptr&                      theStudy,
                               const bool                                theToKeepAllCommands)
 {
   std::list< TCollection_AsciiString >::iterator lineIt;
@@ -487,7 +498,6 @@ SMESH_2smeshpy::ConvertScript(std::list< TCollection_AsciiString >&     theScrip
   theGen = new _pyGen( theEntry2AccessorMethod,
                        theObjectNames,
                        theRemovedObjIDs,
-                       theStudy,
                        theToKeepAllCommands );
 
   for ( lineIt = theScriptLines.begin(); lineIt != theScriptLines.end(); ++lineIt )
@@ -519,7 +529,6 @@ SMESH_2smeshpy::ConvertScript(std::list< TCollection_AsciiString >&     theScrip
   set<_pyID> createdObjects;
   createdObjects.insert( "smeshBuilder" );
   createdObjects.insert( "smesh" );
-  createdObjects.insert( "theStudy" );
   for ( cmd = theGen->GetCommands().begin(); cmd != theGen->GetCommands().end(); ++cmd )
   {
 #ifdef DUMP_CONVERSION
@@ -547,7 +556,6 @@ SMESH_2smeshpy::ConvertScript(std::list< TCollection_AsciiString >&     theScrip
 _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod,
                Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
                std::set< TCollection_AsciiString >&      theRemovedObjIDs,
-               SALOMEDS::Study_ptr&                      theStudy,
                const bool                                theToKeepAllCommands)
   : _pyObject( new _pyCommand( "", 0 )),
     myNbCommands( 0 ),
@@ -556,7 +564,6 @@ _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod
     myRemovedObjIDs( theRemovedObjIDs ),
     myNbFilters( 0 ),
     myToKeepAllCommands( theToKeepAllCommands ),
-    myStudy( SALOMEDS::Study::_duplicate( theStudy )),
     myGeomIDNb(0), myGeomIDIndex(-1)
 {
   // make that GetID() to return TPythonDump::SMESHGenName()
@@ -565,11 +572,11 @@ _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod
   GetCreationCmd()->GetString() += "=";
 
   // Find 1st digit of study entry by which a GEOM object differs from a SMESH object
-  if ( !theObjectNames.IsEmpty() && !CORBA::is_nil( theStudy ))
+  if ( !theObjectNames.IsEmpty() )
   {
     // find a GEOM entry
     _pyID geomID;
-    SALOMEDS::SComponent_wrap geomComp = theStudy->FindComponent("GEOM");
+    SALOMEDS::SComponent_wrap geomComp = SMESH_Gen_i::getStudyServant()->FindComponent("GEOM");
     if ( geomComp->_is_nil() ) return;
     CORBA::String_var entry = geomComp->GetID();
     geomID = entry.in();
@@ -691,7 +698,7 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
       _AString newCmd = indent + tab + ( aCommand->GetString().ToCString() + indent.Length() );
       _AString pasCmd = indent + tab + "pass"; // to keep valid if newCmd is erased
       _AString excStr = indent + "except:";
-      _AString msgStr = indent + "\tprint '"; msgStr += method + "() failed. Invalid file name?'";
+      _AString msgStr = indent + "\tprint('"; msgStr += method + "() failed. Invalid file name?')";
 
       myCommands.insert( --myCommands.end(), new _pyCommand( tryStr, myNbCommands ));
       aCommand->Clear();
@@ -1105,7 +1112,7 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
   static TStringSet smeshpyMethods;
   if ( smeshpyMethods.empty() ) {
     const char * names[] =
-      { "SetEmbeddedMode","IsEmbeddedMode","SetCurrentStudy","GetCurrentStudy",
+      { "SetEmbeddedMode","IsEmbeddedMode","UpdateStudy","GetStudy",
         "GetPattern","GetSubShapesId",
         "" }; // <- mark of array end
     smeshpyMethods.Insert( names );
@@ -1677,7 +1684,7 @@ bool _pyGen::IsNotPublished(const _pyID& theObjID) const
   // either the SMESH object is not in study or it is a GEOM object
   if ( IsGeomObject( theObjID ))
   {
-    SALOMEDS::SObject_wrap so = myStudy->FindObjectID( theObjID.ToCString() );
+    SALOMEDS::SObject_wrap so = SMESH_Gen_i::getStudyServant()->FindObjectID( theObjID.ToCString() );
     if ( so->_is_nil() ) return true;
     CORBA::Object_var obj = so->GetObject();
     return CORBA::is_nil( obj );
@@ -1980,16 +1987,26 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
   // ----------------------------------------------------------------------
   else if ( theCommand->MethodStartsFrom( "Export" ))
   {
-    if ( method == "ExportToMED" ||  // ExportToMED()  --> ExportMED()
-         method == "ExportToMEDX" )  // ExportToMEDX() --> ExportMED()
+    if ( method == "ExportToMED"  || // ExportToMED()  --> ExportMED()
+         method == "ExportToMEDX" || // ExportToMEDX() --> ExportMED()
+         method == "ExportMED" )
     {
       theCommand->SetMethod( "ExportMED" );
-      if ( theCommand->GetNbArgs() == 5 )
+      // filter out deprecated version parameter
+      vector< _AString > args;
+      for ( int i = 1; i <= theCommand->GetNbArgs(); i++ ) {
+        if ( !_FilterArg( theCommand->GetArg( i ) ) )
+          args.push_back( theCommand->GetArg( i ) );
+      }
+      theCommand->RemoveArgs();
+      for ( uint i = 0; i < args.size(); i++ )
+        theCommand->SetArg( i+1, args[i] );
+      if ( theCommand->GetNbArgs() == 4 )
       {
         // ExportToMEDX(...,autoDimension) -> ExportToMEDX(...,meshPart=None,autoDimension)
-        _AString autoDimension = theCommand->GetArg( 5 );
-        theCommand->SetArg( 5, "None" );
-        theCommand->SetArg( 6, autoDimension );
+        _AString autoDimension = theCommand->GetArg( 4 );
+        theCommand->SetArg( 4, "None" );
+        theCommand->SetArg( 5, autoDimension );
       }
     }
     else if ( method == "ExportCGNS" )
@@ -2015,6 +2032,15 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
       TCollection_AsciiString newMethod = method;
       newMethod.Remove( /*where=*/7, /*howmany=*/6 );
       theCommand->SetMethod( newMethod );
+      // filter out deprecated version parameter
+      vector< _AString > args;
+      for ( int i = 1; i <= theCommand->GetNbArgs(); i++ ) {
+        if ( !_FilterArg( theCommand->GetArg( i ) ) )
+          args.push_back( theCommand->GetArg( i ) );
+      }
+      theCommand->RemoveArgs();
+      for ( uint i = 0; i < args.size(); i++ )
+        theCommand->SetArg( i+1, args[i] );
       // make the 1st arg be the last one (or last but three for ExportMED())
       _pyID partID = theCommand->GetArg( 1 );
       int nbArgs = theCommand->GetNbArgs() - 3 * (newMethod == "ExportMED");
@@ -2126,7 +2152,7 @@ bool _pyMesh::NeedMeshAccess( const Handle(_pyCommand)& theCommand )
     const char * names[] =
       { "ExportDAT","ExportUNV","ExportSTL","ExportSAUV", "RemoveGroup","RemoveGroupWithContents",
         "GetGroups","UnionGroups","IntersectGroups","CutGroups","CreateDimGroup","GetLog","GetId",
-        "ClearLog","GetStudyId","HasDuplicatedGroupNamesMED","GetMEDMesh","NbNodes","NbElements",
+        "ClearLog","HasDuplicatedGroupNamesMED","GetMEDMesh","NbNodes","NbElements",
         "NbEdges","NbEdgesOfOrder","NbFaces","NbFacesOfOrder","NbTriangles",
         "NbTrianglesOfOrder","NbQuadrangles","NbQuadranglesOfOrder","NbPolygons","NbVolumes",
         "NbVolumesOfOrder","NbTetras","NbTetrasOfOrder","NbHexas","NbHexasOfOrder",
index 3c01f79bf78e77b6ac325d7c865fc869d41ea8ee..fa86d86826f46e40ea098425d21c79aec5a23bb4 100644 (file)
@@ -253,7 +253,6 @@ public:
   _pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod,
          Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
          std::set< TCollection_AsciiString >&      theRemovedObjIDs,
-         SALOMEDS::Study_ptr&                      theStudy,
          const bool                                theToKeepAllCommands);
   Handle(_pyCommand) AddCommand( const _AString& theCommand );
   void ExchangeCommands( Handle(_pyCommand) theCmd1, Handle(_pyCommand) theCmd2 );
@@ -324,7 +323,6 @@ private:
   Handle(_pyCommand)                        myLastCommand;
   int                                       myNbFilters;
   bool                                      myToKeepAllCommands;
-  SALOMEDS::Study_var                       myStudy;
   int                                       myGeomIDNb, myGeomIDIndex;
   std::map< _AString, ExportedMeshData >    myFile2ExportedMesh;
   Handle( _pyHypothesisReader )             myHypReader;
diff --git a/src/SMESH_I/SMESH_DumpPython.cxx b/src/SMESH_I/SMESH_DumpPython.cxx
deleted file mode 100644 (file)
index 7ca8be9..0000000
+++ /dev/null
@@ -1,1415 +0,0 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2.1 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-//
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//  File    : SMESH_DumpPython.cxx
-//  Created : Thu Mar 24 17:17:59 2005
-//  Author  : Julia DOROVSKIKH
-//  Module  : SMESH
-
-#include "SMESH_PythonDump.hxx"
-
-#include "SMESH_2smeshpy.hxx"
-#include "SMESH_Comment.hxx"
-#include "SMESH_Filter_i.hxx"
-#include "SMESH_Gen_i.hxx"
-#include "SMESH_MeshEditor_i.hxx"
-
-#include <SALOMEDS_wrap.hxx>
-
-#include <LDOMParser.hxx>
-#include <Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString.hxx>
-#include <TColStd_HSequenceOfInteger.hxx>
-#include <TCollection_AsciiString.hxx>
-
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
-#include "SMESH_TryCatch.hxx"
-
-namespace SMESH
-{
-
-  size_t TPythonDump::myCounter = 0;
-  const char theNotPublishedObjectName[] = "__NOT__Published__Object__";
-
-  TVar::TVar(CORBA::Double value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
-  TVar::TVar(CORBA::Long   value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
-  TVar::TVar(CORBA::Short  value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
-  TVar::TVar(const SMESH::double_array& value):myVals(value.length()), myIsList(true)
-  {
-    for ( size_t i = 0; i < value.length(); i++)
-      myVals[i] = SMESH_Comment(value[i]);
-  }
-
-  TPythonDump::
-  TPythonDump():myVarsCounter(0)
-  {
-    ++myCounter;
-  }
-  TPythonDump::
-  ~TPythonDump()
-  {
-    if(--myCounter == 0){
-      SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-      std::string aString = myStream.str();
-      TCollection_AsciiString aCollection(Standard_CString(aString.c_str()));
-      SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy();
-      if(!aStudy->_is_nil() && !aCollection.IsEmpty())
-      {
-        const std::string & objEntry = SMESH_Gen_i::GetSMESHGen()->GetLastObjEntry();
-        if ( !objEntry.empty() )
-          aCollection += (TVar::ObjPrefix() + objEntry ).c_str();
-        aSMESHGen->AddToPythonScript(aStudy->StudyId(),aCollection);
-        if(MYDEBUG) MESSAGE(aString);
-        // prevent misuse of already treated variables
-        aSMESHGen->UpdateParameters(CORBA::Object_var().in(),"");
-      }
-    }
-  }
-
-  TPythonDump& //!< store a variable value. Write either a value or '$varID$'
-  TPythonDump::
-  operator<<(const TVar& theVarValue)
-  {
-    const std::vector< int >& varIDs = SMESH_Gen_i::GetSMESHGen()->GetLastParamIndices();
-    if ( theVarValue.myIsList )
-    {
-      myStream << "[ ";
-      for ( size_t i = 1; i <= theVarValue.myVals.size(); ++i )
-      {
-        if ( myVarsCounter < (int)varIDs.size() && varIDs[ myVarsCounter ] >= 0 )
-          myStream << TVar::Quote() << varIDs[ myVarsCounter ] << TVar::Quote();
-        else
-          myStream << theVarValue.myVals[i-1];
-        if ( i < theVarValue.myVals.size() )
-          myStream << ", ";
-        ++myVarsCounter;
-      }
-      myStream << " ]";
-    }
-    else
-    {
-      if ( myVarsCounter < (int)varIDs.size() && varIDs[ myVarsCounter ] >= 0 )
-        myStream << TVar::Quote() << varIDs[ myVarsCounter ] << TVar::Quote();
-      else
-        myStream << theVarValue.myVals[0];
-      ++myVarsCounter;
-    }
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(long int theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(int theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(double theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(float theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const void* theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const char* theArg){
-    if ( theArg )
-      myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const std::string& theArg){
-    myStream<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const SMESH::ElementType& theArg)
-  {
-    myStream<<"SMESH.";
-    switch(theArg){
-    case ALL:    myStream<<"ALL";    break;
-    case NODE:   myStream<<"NODE";   break;
-    case EDGE:   myStream<<"EDGE";   break;
-    case FACE:   myStream<<"FACE";   break;
-    case VOLUME: myStream<<"VOLUME"; break;
-    case ELEM0D: myStream<<"ELEM0D"; break;
-    case BALL:   myStream<<"BALL";   break;
-    default:     myStream<<"__UNKNOWN__ElementType: " << theArg;
-    }
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(const SMESH::GeometryType& theArg)
-  {
-    myStream<<"SMESH.";
-    switch(theArg){
-    case Geom_POINT:      myStream<<"Geom_POINT";      break;
-    case Geom_EDGE:       myStream<<"Geom_EDGE";       break;
-    case Geom_TRIANGLE:   myStream<<"Geom_TRIANGLE";   break;
-    case Geom_QUADRANGLE: myStream<<"Geom_QUADRANGLE"; break;
-    case Geom_POLYGON:    myStream<<"Geom_POLYGON";    break;
-    case Geom_TETRA:      myStream<<"Geom_TETRA";      break;
-    case Geom_PYRAMID:    myStream<<"Geom_PYRAMID";    break;
-    case Geom_HEXA:       myStream<<"Geom_HEXA";       break;
-    case Geom_PENTA:      myStream<<"Geom_PENTA";      break;
-    case Geom_POLYHEDRA:  myStream<<"Geom_POLYHEDRA";  break;
-    case Geom_BALL:       myStream<<"Geom_BALL";       break;
-    default:    myStream<<"__UNKNOWN__GeometryType: " << theArg;
-    }
-    return *this;
-  }
-  TPythonDump&
-  TPythonDump::
-  operator<<(const SMESH::EntityType& theArg)
-  {
-    myStream<<"SMESH.";
-    switch(theArg){
-    case Entity_0D:                myStream<<"Entity_0D";                break;
-    case Entity_Edge:              myStream<<"Entity_Edge";              break;
-    case Entity_Quad_Edge:         myStream<<"Entity_Quad_Edge";         break;
-    case Entity_Triangle:          myStream<<"Entity_Triangle";          break;
-    case Entity_Quad_Triangle:     myStream<<"Entity_Quad_Triangle";     break;
-    case Entity_BiQuad_Triangle:   myStream<<"Entity_BiQuad_Triangle";   break;
-    case Entity_Quadrangle:        myStream<<"Entity_Quadrangle";        break;
-    case Entity_Quad_Quadrangle:   myStream<<"Entity_Quad_Quadrangle";   break;
-    case Entity_BiQuad_Quadrangle: myStream<<"Entity_BiQuad_Quadrangle"; break;
-    case Entity_Polygon:           myStream<<"Entity_Polygon";           break;
-    case Entity_Quad_Polygon:      myStream<<"Entity_Quad_Polygon";      break;
-    case Entity_Tetra:             myStream<<"Entity_Tetra";             break;
-    case Entity_Quad_Tetra:        myStream<<"Entity_Quad_Tetra";        break;
-    case Entity_Pyramid:           myStream<<"Entity_Pyramid";           break;
-    case Entity_Quad_Pyramid:      myStream<<"Entity_Quad_Pyramid";      break;
-    case Entity_Hexa:              myStream<<"Entity_Hexa";              break;
-    case Entity_Quad_Hexa:         myStream<<"Entity_Quad_Hexa";         break;
-    case Entity_TriQuad_Hexa:      myStream<<"Entity_TriQuad_Hexa";      break;
-    case Entity_Penta:             myStream<<"Entity_Penta";             break;
-    case Entity_Quad_Penta:        myStream<<"Entity_Quad_Penta";        break;
-    case Entity_BiQuad_Penta:      myStream<<"Entity_BiQuad_Penta";      break;
-    case Entity_Hexagonal_Prism:   myStream<<"Entity_Hexagonal_Prism";   break;
-    case Entity_Polyhedra:         myStream<<"Entity_Polyhedra";         break;
-    case Entity_Quad_Polyhedra:    myStream<<"Entity_Quad_Polyhedra";    break;
-    case Entity_Ball:              myStream<<"Entity_Ball";              break;
-    case Entity_Last:              myStream<<"Entity_Last";              break;
-    default:    myStream<<"__UNKNOWN__EntityType: " << theArg;
-    }
-    return *this;
-  }
-
-  template<class TArray>
-  void DumpArray(const TArray& theArray, TPythonDump & theStream)
-  {
-    if ( theArray.length() == 0 )
-    {
-      theStream << "[]";
-    }
-    else
-    {
-      theStream << "[ ";
-      for (CORBA::ULong i = 1; i <= theArray.length(); i++) {
-        theStream << theArray[i-1];
-        if ( i < theArray.length() )
-          theStream << ", ";
-      }
-      theStream << " ]";
-    }
-  }
-
-  TPythonDump&
-  TPythonDump::operator<<(const SMESH::long_array& theArg)
-  {
-    DumpArray( theArg, *this );
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::operator<<(const SMESH::double_array& theArg)
-  {
-    DumpArray( theArg, *this );
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::operator<<(const SMESH::nodes_array& theArg)
-  {
-    DumpArray( theArg, *this );
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::operator<<(const SMESH::string_array& theArray)
-  {
-    myStream << "[ ";
-    for ( CORBA::ULong i = 1; i <= theArray.length(); i++ ) {
-      myStream << "'" << theArray[i-1] << "'";
-      if ( i < theArray.length() )
-        myStream << ", ";
-    }
-    myStream << " ]";
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SALOMEDS::SObject_ptr aSObject)
-  {
-    if ( !aSObject->_is_nil() ) {
-      CORBA::String_var entry = aSObject->GetID();
-      myStream << entry.in();
-    }
-    else {
-      myStream << theNotPublishedObjectName;
-    }
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(CORBA::Object_ptr theArg)
-  {
-    SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study_var      aStudy = aSMESHGen->GetCurrentStudy();
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
-    if(!aSObject->_is_nil()) {
-      CORBA::String_var id = aSObject->GetID();
-      myStream << id;
-    } else if ( !CORBA::is_nil(theArg)) {
-      if ( aSMESHGen->CanPublishInStudy( theArg )) // not published SMESH object
-        myStream << "smeshObj_" << size_t(theArg);
-      else
-        myStream << theNotPublishedObjectName;
-    }
-    else
-      myStream << "None";
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::SMESH_Hypothesis_ptr theArg)
-  {
-    SALOMEDS::Study_var     aStudy = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
-    if(aSObject->_is_nil() && !CORBA::is_nil(theArg))
-      myStream << "hyp_" << theArg->GetId();
-    else
-      *this << aSObject;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::SMESH_IDSource_ptr theArg)
-  {
-    if ( CORBA::is_nil( theArg ) )
-      return *this << "None";
-    SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study_var      aStudy = aSMESHGen->GetCurrentStudy();
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(aStudy,theArg);
-    if(!aSObject->_is_nil())
-    {
-      return *this << aSObject;
-    }
-    if ( SMESH::Filter_i* filter = SMESH::DownCast<SMESH::Filter_i*>( theArg ))
-    {
-      return *this << filter;
-    }
-    if ( SMESH_MeshEditor_i::IsTemporaryIDSource( theArg ))
-    {
-      SMESH::SMESH_Mesh_var            mesh = theArg->GetMesh();
-      SMESH::long_array_var    anElementsId = theArg->GetIDs();
-      SMESH::array_of_ElementType_var types = theArg->GetTypes();
-      SMESH::ElementType               type = types->length() ? types[0] : SMESH::ALL;
-      SALOMEDS::SObject_wrap         meshSO = SMESH_Gen_i::ObjectToSObject(aStudy,mesh);
-      if ( meshSO->_is_nil() ) // don't waste memory for dumping not published objects
-        return *this << mesh << ".GetIDSource([], " << type << ")";
-      else
-        return *this << mesh << ".GetIDSource(" << anElementsId << ", " << type << ")";
-    }
-    return *this << theNotPublishedObjectName;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::FilterLibrary_i* theArg)
-  {
-    myStream<<"aFilterLibrary"<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::FilterManager_i* theArg)
-  {
-    myStream<<"aFilterManager";
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::Filter_i* theArg)
-  {
-    myStream<<"aFilter"<<theArg;
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::Functor_i* theArg)
-  {
-    if ( theArg ) {
-      FunctorType aFunctorType = theArg->GetFunctorType();
-      switch(aFunctorType) {
-      case FT_AspectRatio:           myStream<< "aAspectRatio";           break;
-      case FT_AspectRatio3D:         myStream<< "aAspectRatio3D";         break;
-      case FT_Warping:               myStream<< "aWarping";               break;
-      case FT_MinimumAngle:          myStream<< "aMinimumAngle";          break;
-      case FT_Taper:                 myStream<< "aTaper";                 break;
-      case FT_Skew:                  myStream<< "aSkew";                  break;
-      case FT_Area:                  myStream<< "aArea";                  break;
-      case FT_Volume3D:              myStream<< "aVolume3D";              break;
-      case FT_MaxElementLength2D:    myStream<< "aMaxElementLength2D";    break;
-      case FT_MaxElementLength3D:    myStream<< "aMaxElementLength3D";    break;
-      case FT_FreeBorders:           myStream<< "aFreeBorders";           break;
-      case FT_FreeEdges:             myStream<< "aFreeEdges";             break;
-      case FT_FreeNodes:             myStream<< "aFreeNodes";             break;
-      case FT_FreeFaces:             myStream<< "aFreeFaces";             break;
-      case FT_EqualNodes:            myStream<< "aEqualNodes";            break;
-      case FT_EqualEdges:            myStream<< "aEqualEdges";            break;
-      case FT_EqualFaces:            myStream<< "aEqualFaces";            break;
-      case FT_EqualVolumes:          myStream<< "aEqualVolumes";          break;
-      case FT_MultiConnection:       myStream<< "aMultiConnection";       break;
-      case FT_MultiConnection2D:     myStream<< "aMultiConnection2D";     break;
-      case FT_Length:                myStream<< "aLength";                break;
-      case FT_Length2D:              myStream<< "aLength2D";              break;
-      case FT_Deflection2D:          myStream<< "aDeflection2D";          break;
-      case FT_NodeConnectivityNumber:myStream<< "aNodeConnectivityNumber";break;
-      case FT_BelongToMeshGroup:     myStream<< "aBelongToMeshGroup";     break;
-      case FT_BelongToGeom:          myStream<< "aBelongToGeom";          break;
-      case FT_BelongToPlane:         myStream<< "aBelongToPlane";         break;
-      case FT_BelongToCylinder:      myStream<< "aBelongToCylinder";      break;
-      case FT_BelongToGenSurface:    myStream<< "aBelongToGenSurface";    break;
-      case FT_LyingOnGeom:           myStream<< "aLyingOnGeom";           break;
-      case FT_RangeOfIds:            myStream<< "aRangeOfIds";            break;
-      case FT_BadOrientedVolume:     myStream<< "aBadOrientedVolume";     break;
-      case FT_BareBorderVolume:      myStream<< "aBareBorderVolume";      break;
-      case FT_BareBorderFace:        myStream<< "aBareBorderFace";        break;
-      case FT_OverConstrainedVolume: myStream<< "aOverConstrainedVolume"; break;
-      case FT_OverConstrainedFace:   myStream<< "aOverConstrainedFace";   break;
-      case FT_LinearOrQuadratic:     myStream<< "aLinearOrQuadratic";     break;
-      case FT_GroupColor:            myStream<< "aGroupColor";            break;
-      case FT_ElemGeomType:          myStream<< "aElemGeomType";          break;
-      case FT_EntityType:            myStream<< "aEntityType";            break;
-      case FT_CoplanarFaces:         myStream<< "aCoplanarFaces";         break;
-      case FT_BallDiameter:          myStream<< "aBallDiameter";          break;
-      case FT_ConnectedElements:     myStream<< "aConnectedElements";     break;
-      case FT_LessThan:              myStream<< "aLessThan";              break;
-      case FT_MoreThan:              myStream<< "aMoreThan";              break;
-      case FT_EqualTo:               myStream<< "aEqualTo";               break;
-      case FT_LogicalNOT:            myStream<< "aLogicalNOT";            break;
-      case FT_LogicalAND:            myStream<< "aLogicalAND";            break;
-      case FT_LogicalOR:             myStream<< "aLogicalOR";             break;
-      case FT_Undefined:             myStream<< "anUndefined";            break;
-        //default: -- commented to have a compilation warning
-      }
-      myStream<<theArg;
-    }
-    return *this;
-  }
-
-  TPythonDump&
-  TPythonDump::
-  operator<<(SMESH::Measurements_i* theArg)
-  {
-    myStream<<"aMeasurements";
-    return *this;
-  }
-
-
-  TPythonDump& TPythonDump:: operator<<(SMESH_Gen_i* theArg)
-  {
-    myStream << SMESHGenName(); return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(SMESH_MeshEditor_i* theArg)
-  {
-    myStream << MeshEditorName() << "_" << ( theArg ? theArg->GetMeshId() : -1 ); return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const TCollection_AsciiString & theStr)
-  {
-    myStream << theStr; return *this;
-  }
-
-
-  TPythonDump& TPythonDump::operator<<(SMESH::MED_VERSION theVersion)
-  {
-    switch (theVersion) {
-    case SMESH::MED_V2_1: myStream << "SMESH.MED_V2_1"; break;
-    case SMESH::MED_V2_2: myStream << "SMESH.MED_V2_2"; break;
-    case SMESH::MED_LATEST: myStream << "SMESH.MED_LATEST"; break;
-    case SMESH::MED_MINOR_0: myStream << "SMESH.MED_MINOR_0"; break;
-    case SMESH::MED_MINOR_1: myStream << "SMESH.MED_MINOR_1"; break;
-    case SMESH::MED_MINOR_2: myStream << "SMESH.MED_MINOR_2"; break;
-    case SMESH::MED_MINOR_3: myStream << "SMESH.MED_MINOR_3"; break;
-    case SMESH::MED_MINOR_4: myStream << "SMESH.MED_MINOR_4"; break;
-    case SMESH::MED_MINOR_5: myStream << "SMESH.MED_MINOR_5"; break;
-    case SMESH::MED_MINOR_6: myStream << "SMESH.MED_MINOR_6"; break;
-    case SMESH::MED_MINOR_7: myStream << "SMESH.MED_MINOR_7"; break;
-    case SMESH::MED_MINOR_8: myStream << "SMESH.MED_MINOR_8"; break;
-    case SMESH::MED_MINOR_9: myStream << "SMESH.MED_MINOR_9"; break;
-    default: myStream << theVersion;
-    }
-    return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const SMESH::AxisStruct & theAxis)
-  {
-    *this << "SMESH.AxisStruct( "
-          << TVar( theAxis.x  ) << ", "
-          << TVar( theAxis.y  ) << ", "
-          << TVar( theAxis.z  ) << ", "
-          << TVar( theAxis.vx ) << ", "
-          << TVar( theAxis.vy ) << ", "
-          << TVar( theAxis.vz ) << " )";
-    return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const SMESH::DirStruct & theDir)
-  {
-    const SMESH::PointStruct & P = theDir.PS;
-    *this << "SMESH.DirStruct( SMESH.PointStruct ( "
-          << TVar( P.x ) << ", "
-          << TVar( P.y ) << ", "
-          << TVar( P.z ) << " ))";
-    return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const SMESH::PointStruct & P)
-  {
-    *this << "SMESH.PointStruct ( "
-          << TVar( P.x ) << ", "
-          << TVar( P.y ) << ", "
-          << TVar( P.z ) << " )";
-    return *this;
-  }
-
-  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups& theList)
-  {
-    DumpArray( theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups * theList)
-  {
-    DumpArray( *theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const GEOM::ListOfGO& theList)
-  {
-    DumpArray( theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const GEOM::ListOfGBO& theList)
-  {
-    DumpArray( theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfIDSources& theList)
-  {
-    DumpArray( theList, *this );
-    return *this;
-  }
-  TPythonDump& TPythonDump::operator<<(const SMESH::CoincidentFreeBorders& theCFB)
-  {
-    // dump CoincidentFreeBorders as a list of lists, each enclosed list
-    // contains node IDs of a group of coincident free borders where
-    // each consequent triple of IDs describe a free border: (n1, n2, nLast)
-    // For example [[1, 2, 10, 20, 21, 40], [11, 12, 15, 55, 54, 41]] describes
-    // two groups of coincident free borders, each group including two borders
-
-    myStream << "[";
-    for ( CORBA::ULong i = 0; i < theCFB.coincidentGroups.length(); ++i )
-    {
-      const SMESH::FreeBordersGroup& aGRP = theCFB.coincidentGroups[ i ];
-      if ( i ) myStream << ",";
-      myStream << "[";
-      for ( CORBA::ULong iP = 0; iP < aGRP.length(); ++iP )
-      {
-        const SMESH::FreeBorderPart& aPART = aGRP[ iP ];
-        if ( 0 <= aPART.border && aPART.border < (CORBA::Long)theCFB.borders.length() )
-        {
-          if ( iP ) myStream << ", ";
-          const SMESH::FreeBorder& aBRD = theCFB.borders[ aPART.border ];
-          myStream << aBRD.nodeIDs[ aPART.node1    ] << ",";
-          myStream << aBRD.nodeIDs[ aPART.node2    ] << ",";
-          myStream << aBRD.nodeIDs[ aPART.nodeLast ];
-        }
-      }
-      myStream << "]";
-    }
-    myStream << "]";
-
-    return *this;
-  }
-
-  const char* TPythonDump::NotPublishedObjectName()
-  {
-    return theNotPublishedObjectName;
-  }
-
-  TCollection_AsciiString myLongStringStart( "TPythonDump::LongStringStart" );
-  TCollection_AsciiString myLongStringEnd  ( "TPythonDump::LongStringEnd" );
-
-  //================================================================================
-  /*!
-   * \brief Return marker of long string literal beginning
-   * \param type - a name of functionality producing the string literal
-   * \retval TCollection_AsciiString - the marker string to be written into
-   * a raw python script
-   */
-  //================================================================================
-
-  TCollection_AsciiString TPythonDump::LongStringStart(const char* type)
-  {
-    return
-      myLongStringStart +
-      (Standard_Integer) strlen(type) +
-      " " +
-      (char*) type;
-  }
-
-  //================================================================================
-  /*!
-     * \brief Return marker of long string literal end
-      * \retval TCollection_AsciiString - the marker string to be written into
-      * a raw python script
-   */
-  //================================================================================
-
-  TCollection_AsciiString TPythonDump::LongStringEnd()
-  {
-    return myLongStringEnd;
-  }
-
-  //================================================================================
-  /*!
-     * \brief Cut out a long string literal from a string
-      * \param theText - text possibly containing string literals
-      * \param theFrom - position in the text to search from
-      * \param theLongString - the retrieved literal
-      * \param theStringType - a name of functionality produced the literal
-      * \retval bool - true if a string literal found
-     *
-     * The literal is removed from theText; theFrom points position right after
-     * the removed literal
-   */
-  //================================================================================
-
-  bool  TPythonDump::CutoutLongString( TCollection_AsciiString & theText,
-                                       int                     & theFrom,
-                                       TCollection_AsciiString & theLongString,
-                                       TCollection_AsciiString & theStringType)
-  {
-    if ( theFrom < 1 || theFrom > theText.Length() )
-      return false;
-
-    // ...script \  beg marker    \ \ type \       literal              \  end marker  \ script...
-    //  "theText myLongStringStart7 Pattern!!! SALOME Mesh Pattern file myLongStringEndtextEnd"
-    //  012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
-    //  0         1         2         3         4         5         6         7         8
-
-    theFrom = theText.Location( myLongStringStart, theFrom, theText.Length() ); // = 09
-    if ( !theFrom )
-      return false;
-
-    // find where literal begins
-    int literalBeg = theFrom + myLongStringStart.Length(); // = 26
-    char* typeLenStr = (char*) theText.ToCString() + literalBeg - 1; // = "7 Pattern!!! SALO...."
-    int typeLen = atoi ( typeLenStr ); // = 7
-    while ( *typeLenStr != ' ' ) { // look for ' ' after typeLen
-      literalBeg++; // 26 -> 27
-      typeLenStr++;
-    }
-    literalBeg += typeLen + 1; // = 35
-    if ( literalBeg > theText.Length() )
-      return false;
-
-    // where literal ends (i.e. end marker begins)
-    int literalEnd = theText.Location( myLongStringEnd, literalBeg, theText.Length() ); // = 64
-    if ( !literalEnd )
-      literalEnd = theText.Length();
-
-    // literal
-    theLongString = theText.SubString( literalBeg, literalEnd - 1); // "!!! SALOME Mesh Pattern file "
-    // type
-    theStringType = theText.SubString( literalBeg - typeLen, literalBeg - 1 ); // "Pattern"
-    // cut off literal
-    literalEnd += myLongStringEnd.Length(); // = 79
-    TCollection_AsciiString textEnd = theText.SubString( literalEnd, theText.Length() ); // "textE..."
-    theText = theText.SubString( 1, theFrom - 1 ) + textEnd;
-
-    return true;
-  }
-
-  void printException( const char* text )
-  {
-#ifdef _DEBUG_
-    cout << "Exception in SMESH_Gen_i::DumpPython(): " << text << endl;
-#endif
-  }
-}
-
-//=======================================================================
-//function : RemoveTabulation
-//purpose  : 
-//=======================================================================
-void RemoveTabulation( TCollection_AsciiString& theScript )
-{
-  std::string aString( theScript.ToCString() );
-  std::string::size_type aPos = 0;
-  while( aPos < aString.length() )
-  {
-    aPos = aString.find( "\n\t", aPos );
-    if( aPos == std::string::npos )
-      break;
-    aString.replace( aPos, 2, "\n" );
-    aPos++;
-  }
-  theScript = aString.c_str();
-}
-
-//=======================================================================
-//function : DumpPython
-//purpose  :
-//=======================================================================
-Engines::TMPFile* SMESH_Gen_i::DumpPython (CORBA::Object_ptr theStudy,
-                                           CORBA::Boolean isPublished,
-                                           CORBA::Boolean isMultiFile,
-                                           CORBA::Boolean& isValidScript)
-{
-  SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(theStudy);
-  if (CORBA::is_nil(aStudy))
-    return new Engines::TMPFile(0);
-
-  CORBA::String_var compDataType = ComponentDataType();
-  SALOMEDS::SObject_wrap aSO = aStudy->FindComponent( compDataType.in() );
-  if (CORBA::is_nil(aSO))
-    return new Engines::TMPFile(0);
-
-  // Map study entries to object names
-  Resource_DataMapOfAsciiStringAsciiString aMap;
-  Resource_DataMapOfAsciiStringAsciiString aMapNames;
-
-  SALOMEDS::ChildIterator_wrap Itr = aStudy->NewChildIterator(aSO);
-  for (Itr->InitEx(true); Itr->More(); Itr->Next()) {
-    SALOMEDS::SObject_wrap aValue = Itr->Value();
-    CORBA::String_var anID = aValue->GetID();
-    CORBA::String_var aName = aValue->GetName();
-    TCollection_AsciiString aGUIName ( (char*) aName.in() );
-    TCollection_AsciiString anEntry ( (char*) anID.in() );
-    if (aGUIName.Length() > 0) {
-      aMapNames.Bind( anEntry, aGUIName );
-      aMap.Bind( anEntry, aGUIName );
-    }
-  }
-
-  // Get trace of restored study
-  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
-  SALOMEDS::GenericAttribute_wrap anAttr =
-    aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject");
-
-  SALOMEDS::AttributePythonObject_var pyAttr =
-    SALOMEDS::AttributePythonObject::_narrow(anAttr);
-  CORBA::String_var oldValue = pyAttr->GetObject();
-  TCollection_AsciiString aSavedTrace (oldValue.in());
-
-  // Add trace of API methods calls and replace study entries by names
-  TCollection_AsciiString aScript;
-  aScript += DumpPython_impl(aStudy, aMap, aMapNames, isPublished, isMultiFile,
-                             myIsHistoricalPythonDump, isValidScript, aSavedTrace);
-
-  int aLen = aScript.Length();
-  unsigned char* aBuffer = new unsigned char[aLen+1];
-  strcpy((char*)aBuffer, aScript.ToCString());
-
-  CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
-  Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1);
-
-  bool hasNotPublishedObjects = aScript.Location( SMESH::theNotPublishedObjectName, 1, aLen);
-  isValidScript = isValidScript && !hasNotPublishedObjects;
-
-  return aStreamFile._retn();
-}
-
-//=============================================================================
-/*!
- *  AddToPythonScript
- */
-//=============================================================================
-void SMESH_Gen_i::AddToPythonScript (int theStudyID, const TCollection_AsciiString& theString)
-{
-  if (myPythonScripts.find(theStudyID) == myPythonScripts.end()) {
-    myPythonScripts[theStudyID] = new TColStd_HSequenceOfAsciiString;
-  }
-  myPythonScripts[theStudyID]->Append(theString);
-}
-
-//=============================================================================
-/*!
- *  RemoveLastFromPythonScript
- */
-//=============================================================================
-void SMESH_Gen_i::RemoveLastFromPythonScript (int theStudyID)
-{
-  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
-    int aLen = myPythonScripts[theStudyID]->Length();
-    myPythonScripts[theStudyID]->Remove(aLen);
-  }
-}
-
-//=======================================================================
-//function : SavePython
-//purpose  :
-//=======================================================================
-void SMESH_Gen_i::SavePython (SALOMEDS::Study_ptr theStudy)
-{
-  // Dump trace of API methods calls
-  TCollection_AsciiString aScript = GetNewPythonLines(theStudy->StudyId());
-
-  // Check contents of PythonObject attribute
-  CORBA::String_var compDataType = ComponentDataType();
-  SALOMEDS::SObject_wrap aSO = theStudy->FindComponent( compDataType.in() );
-  SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
-  SALOMEDS::GenericAttribute_wrap anAttr =
-    aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject");
-
-  SALOMEDS::AttributePythonObject_var pyAttr =
-    SALOMEDS::AttributePythonObject::_narrow(anAttr);
-  CORBA::String_var oldValue = pyAttr->GetObject();
-  TCollection_AsciiString oldScript (oldValue.in());
-
-  if (oldScript.Length() > 0) {
-    oldScript += "\n";
-    oldScript += aScript;
-  } else {
-    oldScript = aScript;
-  }
-
-  // Store in PythonObject attribute
-  pyAttr->SetObject(oldScript.ToCString(), 1);
-
-  // Clean trace of API methods calls
-  CleanPythonTrace(theStudy->StudyId());
-}
-
-
-// impl
-
-
-//=============================================================================
-/*!
- *  FindEntries: Returns a sequence of start/end positions of entries in the string
- */
-//=============================================================================
-Handle(TColStd_HSequenceOfInteger) FindEntries (TCollection_AsciiString& theString)
-{
-  Handle(TColStd_HSequenceOfInteger) aSeq = new TColStd_HSequenceOfInteger;
-  Standard_Integer aLen = theString.Length();
-  Standard_Boolean isFound = Standard_False;
-
-  char* arr = (char*) theString.ToCString();
-  Standard_Integer i = 0, j;
-
-  while(i < aLen) {
-    int c = (int)arr[i];
-    j = i+1;
-    if ( isdigit( c )) { //Is digit?
-
-      isFound = Standard_False;
-      while((j < aLen) && ( isdigit(c) || c == ':' )) { //Check if it is an entry
-        c = (int)arr[j++];
-        if(c == ':') isFound = Standard_True;
-      }
-
-      if (isFound) {
-        int prev = (i < 1) ? 0 : (int)arr[i - 1];
-        // to distinguish from a sketcher command:
-        // last char should be a digit, not ":",
-        // previous char should not be '"'.
-        if (arr[j-2] != ':' && prev != '"') {
-          aSeq->Append(i+1); // +1 because AsciiString starts from 1
-          aSeq->Append(j-1);
-        }
-      }
-    }
-
-    i = j;
-  }
-
-  return aSeq;
-}
-
-namespace {
-
-  //================================================================================
-  /*!
-   * \brief Make a string be a valid python name
-    * \param aName - a string to fix
-    * \retval bool - true if aName was not modified
-   */
-  //================================================================================
-
-  bool fixPythonName(TCollection_AsciiString & aName)
-  {
-    bool isValidName = true;
-    int nbUnderscore = 0;
-    int p;
-    // replace not allowed chars by underscore
-    const char* name = aName.ToCString();
-    for ( p = 0; name[p]; ++p ) {
-      if ( !isalnum( name[p] ) && name[p] != '_' )
-      {
-        if ( p == 0 || p+1 == aName.Length() || name[p-1] == '_')
-        {
-          aName.Remove( p+1, 1 ); // remove __ and _ from the start and the end
-          --p;
-          name = aName.ToCString();
-        }
-        else
-        {
-          aName.SetValue( p+1, '_');
-          nbUnderscore++;
-        }
-        isValidName = false;
-      }
-    }
-    // aName must not start with a digit
-    if ( aName.IsIntegerValue() ) {
-      aName.Insert( 1, 'a' );
-      isValidName = false;
-    }
-    // shorten names like CartesianParameters3D_400_400_400_1000000_1
-    const int nbAllowedUnderscore = 3; /* changed from 2 to 3 by an user request
-                                          posted to SALOME Forum */
-    if ( aName.Length() > 20 && nbUnderscore > nbAllowedUnderscore )
-    {
-      p = aName.Location( "_", 20, aName.Length());
-      if ( p > 1 )
-        aName.Trunc( p-1 );
-    }
-    return isValidName;
-  }
-
-  //================================================================================
-  /*!
-   * \brief Return Python module names of available plug-ins.
-   */
-  //================================================================================
-
-  std::vector<std::string> getPluginNames()
-  {
-    std::vector<std::string> pluginNames;
-    std::vector< std::string > xmlPaths = SMESH_Gen::GetPluginXMLPaths();
-    LDOMParser xmlParser;
-    for ( size_t i = 0; i < xmlPaths.size(); ++i )
-    {
-      bool error = xmlParser.parse( xmlPaths[i].c_str() );
-      if ( error )
-      {
-        TCollection_AsciiString data;
-        INFOS( xmlParser.GetError(data) );
-        continue;
-      }
-      // <meshers-group name="Standard Meshers"
-      //                resources="StdMeshers"
-      //                idl-module="StdMeshers"
-      //                server-lib="StdMeshersEngine"
-      //                gui-lib="StdMeshersGUI">
-      LDOM_Document xmlDoc   = xmlParser.getDocument();
-      LDOM_NodeList nodeList = xmlDoc.getElementsByTagName( "meshers-group" );
-      for ( int i = 0; i < nodeList.getLength(); ++i )
-      {
-        LDOM_Node       node = nodeList.item( i );
-        LDOM_Element&   elem = (LDOM_Element&) node;
-        LDOMString idlModule = elem.getAttribute( "idl-module" );
-        if ( strlen( idlModule.GetString() ) > 0 )
-          pluginNames.push_back( idlModule.GetString() );
-      }
-    }
-    return pluginNames;
-  }
-}
-
-//================================================================================
-/*!
- * \brief Createa a Dump Python script
- *  \param [in] theStudy - the study to dump
- *  \param [in,out] theObjectNames - map of an entry to a study and python name
- *  \param [in] theNames -  - map of an entry to a study name
- *  \param [in] isPublished - \c true if dump of object publication in study is needed
- *  \param [in] isMultiFile - \c true if dump of each module goes to a separate file
- *  \param [in] isHistoricalDump - \c true if removed object should be dumped
- *  \param [out] aValidScript - returns \c true if the returned script seems valid
- *  \param [in,out] theSavedTrace - the dump stored in the study. It's cleared to
- *         decrease memory usage.
- *  \return TCollection_AsciiString - the result dump script.
- */
-//================================================================================
-
-TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
-                        (SALOMEDS::Study_ptr                       theStudy,
-                         Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
-                         Resource_DataMapOfAsciiStringAsciiString& theNames,
-                         bool                                      isPublished,
-                         bool                                      isMultiFile,
-                         bool                                      isHistoricalDump,
-                         bool&                                     aValidScript,
-                         TCollection_AsciiString&                  theSavedTrace)
-{
-  SMESH_TRY;
-  const int aStudyID = theStudy->StudyId();
-
-  const TCollection_AsciiString aSmeshpy ( SMESH_2smeshpy::SmeshpyName() );
-  const TCollection_AsciiString aSMESHGen( SMESH_2smeshpy::GenName() );
-  const TCollection_AsciiString anOldGen ( SMESH::TPythonDump::SMESHGenName() );
-  const TCollection_AsciiString helper; // to comfortably append C strings to TCollection_AsciiString
-  const TCollection_AsciiString tab( isMultiFile ? "\t" : "" ), nt = helper + "\n" + tab;
-
-  std::list< TCollection_AsciiString > lines; // lines of a script
-  std::list< TCollection_AsciiString >::iterator linesIt;
-  
-  if ( isPublished )
-    lines.push_back(  aSMESHGen + " = smeshBuilder.New(theStudy)" );
-   else
-    lines.push_back(  aSMESHGen + " = smeshBuilder.New(None)" );
-  lines.push_back( helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()" );
-  lines.push_back( helper + "aMeasurements = "  + aSMESHGen + ".CreateMeasurements()" );
-
-  // Treat dump trace of restored study
-  if (theSavedTrace.Length() > 0)
-  {
-    linesIt = --lines.end();
-    // Split theSavedTrace into lines
-    int from = 1, end = theSavedTrace.Length(), to;
-    while ( from < end && ( to = theSavedTrace.Location( "\n", from, end )))
-    {
-      if ( theSavedTrace.ToCString()[from-1] == '\t' )
-        ++from;
-      if ( to != from )
-        lines.push_back( theSavedTrace.SubString( from, to - 1 ));
-      from = to + 1;
-    }
-    // For the conversion of IDL API calls -> smeshBuilder.py API, "smesh" standing for SMESH_Gen
-    // was replaces with "smeshgen" (==TPythonDump::SMESHGenName()).
-    // Change "smesh" -> "smeshgen" in the trace saved before passage to smeshBuilder.py API
-    bool isNewVersion =
-      theSavedTrace.Location( anOldGen + ".", 1, theSavedTrace.Length() );
-    theSavedTrace.Clear();
-    if ( !isNewVersion )
-    {
-      const TCollection_AsciiString aSmeshCall ( "smesh." ), gen( "gen" );
-      int beg, end, from;
-      for ( ++linesIt; linesIt != lines.end(); ++linesIt )
-      {
-        TCollection_AsciiString& aSavedLine = *linesIt;
-        end = aSavedLine.Length(), from = 1;
-        while ( from < end && ( beg = aSavedLine.Location( aSmeshCall, from, end )))
-        {
-          char charBefore = ( beg == 1 ) ? ' ' : aSavedLine.Value( beg - 1 );
-          if ( isspace( charBefore ) || charBefore == '=' ) { // "smesh." is not a part of a long word
-            aSavedLine.Insert( beg + aSmeshCall.Length() - 1, gen );// "smesh" -> "smeshgen"
-            end += gen.Length();
-          }
-          from = beg + aSmeshCall.Length();
-        }
-      }
-    }
-  }
-
-  // Add new dump trace of API methods calls to script lines
-  if (myPythonScripts.find( aStudyID ) != myPythonScripts.end())
-  {
-    Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScripts[ aStudyID ];
-    Standard_Integer istr, aLen = aPythonScript->Length();
-    for (istr = 1; istr <= aLen; istr++)
-      lines.push_back( aPythonScript->Value( istr ));
-  }
-
-  // Convert IDL API calls into smeshBuilder.py API.
-  // Some objects are wrapped with python classes and
-  // Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects
-  Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod;
-  std::set< TCollection_AsciiString >      aRemovedObjIDs;
-  if ( !getenv("NO_2smeshpy_conversion"))
-    SMESH_2smeshpy::ConvertScript( lines, anEntry2AccessorMethod,
-                                   theObjectNames, aRemovedObjIDs,
-                                   theStudy, isHistoricalDump );
-
-  bool importGeom = false;
-  GEOM::GEOM_Gen_ptr geom = GetGeomEngine();
-  {
-    // Add names of GEOM objects to theObjectNames to exclude same names of SMESH objects
-    GEOM::string_array_var aGeomNames = geom->GetAllDumpNames();
-    int ign = 0, nbgn = aGeomNames->length();
-    for (; ign < nbgn; ign++) {
-      TCollection_AsciiString aName = aGeomNames[ign].in();
-      theObjectNames.Bind(aName, "1");
-    }
-  }
-
-  TCollection_AsciiString anUpdatedScript;
-
-  Resource_DataMapOfAsciiStringAsciiString mapRemoved;
-  Resource_DataMapOfAsciiStringAsciiString mapEntries; // names and entries present in anUpdatedScript
-  Standard_Integer objectCounter = 0;
-  TCollection_AsciiString anEntry, aName, aGUIName, aBaseName("smeshObj_");
-
-  // Treat every script line and add it to anUpdatedScript
-  for ( linesIt = lines.begin(); linesIt != lines.end(); ++linesIt )
-  {
-    TCollection_AsciiString& aLine = *linesIt;
-    anUpdatedScript += tab;
-    {
-      //Replace characters used instead of quote marks to quote notebook variables
-      int pos = 1;
-      while (( pos = aLine.Location( 1, SMESH::TVar::Quote(), pos, aLine.Length() )))
-        aLine.SetValue( pos, '"' );
-    }
-    // Find entries to be replaced by names
-    Handle(TColStd_HSequenceOfInteger) aSeq = FindEntries(aLine);
-    const Standard_Integer aSeqLen = aSeq->Length();
-    Standard_Integer aStart = 1;
-    for (Standard_Integer i = 1; i <= aSeqLen; i += 2)
-    {
-      if ( aStart < aSeq->Value(i) )
-        anUpdatedScript += aLine.SubString( aStart, aSeq->Value(i) - 1 ); // line part before i-th entry
-      anEntry = aLine.SubString( aSeq->Value(i), aSeq->Value(i + 1) );
-      // is a GEOM object?
-      CORBA::String_var geomName = geom->GetDumpName( anEntry.ToCString() );
-      if ( !geomName.in() || !geomName.in()[0] ) {
-        // is a SMESH object
-        if ( theObjectNames.IsBound( anEntry )) {
-          // The Object is in Study
-          aName = theObjectNames.Find( anEntry );
-          // check validity of aName
-          bool isValidName = fixPythonName( aName );
-          if (theObjectNames.IsBound(aName) && anEntry != theObjectNames(aName)) {
-            // diff objects have same name - make a new name by appending a digit
-            TCollection_AsciiString aName2;
-            Standard_Integer i = 0;
-            do {
-              aName2 = aName + "_" + ++i;
-            } while (theObjectNames.IsBound(aName2) && anEntry != theObjectNames(aName2));
-            aName = aName2;
-            isValidName = false;
-          }
-          if ( !isValidName )
-            theObjectNames(anEntry) = aName;
-
-          if ( aLine.Value(1) != '#' )
-            mapEntries.Bind(anEntry, aName);
-        }
-        else
-        {
-          // Removed Object
-          do {
-            aName = aBaseName + (++objectCounter);
-          } while (theObjectNames.IsBound(aName));
-
-          if ( !aRemovedObjIDs.count( anEntry ) && aLine.Value(1) != '#')
-            mapRemoved.Bind(anEntry, aName);
-
-          theObjectNames.Bind(anEntry, aName);
-        }
-        theObjectNames.Bind(aName, anEntry); // to detect same name of diff objects
-      }
-      else
-      {
-        aName = geomName.in();
-        importGeom = true;
-      }
-      anUpdatedScript += aName;
-      aStart = aSeq->Value(i + 1) + 1;
-
-    } // loop on entries within aLine
-
-    if ( aSeqLen == 0 )
-      anUpdatedScript += aLine;
-    else if ( aSeq->Value( aSeqLen ) < aLine.Length() )
-      anUpdatedScript += aLine.SubString( aSeq->Value(aSeqLen) + 1, aLine.Length() );
-
-    anUpdatedScript += '\n';
-  }
-
-  // Make an initial part of aSript
-
-  TCollection_AsciiString initPart = "import ";
-  if ( isMultiFile )
-    initPart += "salome, ";
-  initPart += " SMESH, SALOMEDS\n";
-  initPart += "from salome.smesh import smeshBuilder\n";
-  if ( importGeom && isMultiFile )
-  {
-    initPart += ("\n## import GEOM dump file ## \n"
-                 "import string, os, sys, re, inspect\n"
-                 "thisFile   = inspect.getfile( inspect.currentframe() )\n"
-                 "thisModule = os.path.splitext( os.path.basename( thisFile ))[0]\n"
-                 "sys.path.insert( 0, os.path.dirname( thisFile ))\n"
-                 "exec(\"from \"+re.sub(\"SMESH$\",\"GEOM\",thisModule)+\" import *\")\n\n");
-  }
-  // import python files corresponding to plugins if they are used in anUpdatedScript
-  {
-    TCollection_AsciiString importStr;
-    std::vector<std::string> pluginNames = getPluginNames();
-    for ( size_t i = 0; i < pluginNames.size(); ++i )
-    {
-      // Convert access to plugin members:
-      // e.g. StdMeshers.QUAD_REDUCED -> StdMeshersBuilder.QUAD_REDUCED
-      TCollection_AsciiString pluginAccess = (pluginNames[i] + ".").c_str() ;
-      int iFrom = 1, iPos;
-      while (( iPos = anUpdatedScript.Location( pluginAccess, iFrom, anUpdatedScript.Length() )))
-      {
-        anUpdatedScript.Insert( iPos + pluginNames[i].size(), "Builder" );
-        iFrom = iPos + pluginNames[i].size() + 8;
-      }
-      // if any plugin member is used, import the plugin
-      if ( iFrom > 1 )
-        importStr += ( helper + "\n" "from salome." + pluginNames[i].c_str() +
-                       " import " + pluginNames[i].c_str() +"Builder" );
-    }
-    if ( !importStr.IsEmpty() )
-      initPart += importStr + "\n";
-  }
-
-  if ( isMultiFile )
-    initPart += "def RebuildData(theStudy):";
-  initPart += "\n";
-
-  anUpdatedScript.Prepend( initPart );
-
-  // Make a final part of aScript
-
-  // Dump object removal
-  TCollection_AsciiString removeObjPart;
-  if ( !mapRemoved.IsEmpty() ) {
-    removeObjPart += nt + "## some objects were removed";
-    removeObjPart += nt + "aStudyBuilder = theStudy.NewBuilder()";
-    Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapRemovedIt;
-    for ( mapRemovedIt.Initialize( mapRemoved ); mapRemovedIt.More(); mapRemovedIt.Next() ) {
-      aName   = mapRemovedIt.Value(); // python name
-      anEntry = mapRemovedIt.Key();
-      removeObjPart += nt + "SO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR(";
-      removeObjPart += aName;
-      // for object wrapped by class of smeshBuilder.py
-      if ( anEntry2AccessorMethod.IsBound( anEntry ) )
-        removeObjPart += helper + "." + anEntry2AccessorMethod( anEntry );
-      removeObjPart += helper + "))" + nt + "if SO: aStudyBuilder.RemoveObjectWithChildren(SO)";
-    }
-  }
-
-  // Set object names
-  TCollection_AsciiString setNamePart;
-  Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapEntriesIt;
-  for ( mapEntriesIt.Initialize( mapEntries ); mapEntriesIt.More(); mapEntriesIt.Next() )
-  {
-    anEntry = mapEntriesIt.Key();
-    aName   = mapEntriesIt.Value(); // python name
-    if ( theNames.IsBound( anEntry ))
-    {
-      aGUIName = theNames.Find(anEntry);
-      aGUIName.RemoveAll('\''); // remove a quote from a name (issue 22360)
-      setNamePart += nt + aSMESHGen + ".SetName(" + aName;
-      if ( anEntry2AccessorMethod.IsBound( anEntry ) )
-        setNamePart += helper + "." + anEntry2AccessorMethod( anEntry );
-      setNamePart += helper + ", '" + aGUIName + "')";
-    }
-  }
-  if ( !setNamePart.IsEmpty() )
-  {
-    setNamePart.Insert( 1, nt + "## Set names of Mesh objects" );
-  }
-
-  // Store visual properties of displayed objects
-
-  TCollection_AsciiString visualPropertiesPart;
-  if (isPublished)
-  {
-    //Output the script that sets up the visual parameters.
-    CORBA::String_var compDataType = ComponentDataType();
-    CORBA::String_var script = theStudy->GetDefaultScript( compDataType.in(), tab.ToCString() );
-    if ( script.in() && script.in()[0] ) {
-      visualPropertiesPart += nt + "### Store presentation parameters of displayed objects\n";
-      visualPropertiesPart += script.in();
-    }
-  }
-
-  anUpdatedScript += removeObjPart + '\n' + setNamePart + '\n' + visualPropertiesPart;
-
-  if ( isMultiFile )
-  {
-    anUpdatedScript +=
-      "\n\tpass"
-      "\n"
-      "\nif __name__ == '__main__':"
-      "\n\tSMESH_RebuildData = RebuildData"
-      "\n\texec('import '+re.sub('SMESH$','GEOM',thisModule)+' as GEOM_dump')"
-      "\n\tGEOM_dump.RebuildData( salome.myStudy )"
-      "\n\texec('from '+re.sub('SMESH$','GEOM',thisModule)+' import * ')"
-      "\n\tSMESH_RebuildData( salome.myStudy )";
-  }
-  anUpdatedScript += "\n";
-
-  // no need now as we use 'tab' and 'nt' variables depending on isMultiFile
-  // if( !isMultiFile ) // remove unnecessary tabulation
-  //   RemoveTabulation( anUpdatedScript );
-
-  // -----------------------------------------------------------------
-  // put string literals describing patterns into separate functions
-  // -----------------------------------------------------------------
-
-  TCollection_AsciiString aLongString, aFunctionType;
-  int where = 1;
-  std::set< std::string > functionNameSet;
-  while ( SMESH::TPythonDump::CutoutLongString( anUpdatedScript, where, aLongString, aFunctionType ))
-  {
-    // make a python string literal
-    aLongString.Prepend(":\n\treturn '''\n");
-    aLongString += "\n\t'''\n\tpass\n";
-
-    TCollection_AsciiString functionName;
-
-    // check if the function returning this literal is already defined
-    int posAlready = anUpdatedScript.Location( aLongString, where, anUpdatedScript.Length() );
-    if ( posAlready ) // already defined
-    {
-      // find the function name
-      int functBeg = posAlready;
-      char* script = (char*) anUpdatedScript.ToCString() + posAlready - 1; // look at ":" after "def function()"
-      while ( *script != ' ' ) {
-        script--;
-        functBeg--;
-      }
-      functBeg++; // do not take ' '
-      posAlready--; // do not take ':'
-      functionName = anUpdatedScript.SubString( functBeg, posAlready );
-    }
-    else // not defined yet
-    {
-      // find a unique function name
-      fixPythonName( aFunctionType );
-      Standard_Integer nb = 0;
-      do functionName = aFunctionType + "_" + ( nb++ ) + "()";
-      while ( !functionNameSet.insert( functionName.ToCString() ).second );
-
-      // define function
-      TCollection_AsciiString funDef = helper + "def " + functionName + aLongString;
-      if ( isMultiFile )
-      {
-        anUpdatedScript += helper + "\n\n" + funDef;
-      }
-      else
-      {
-        funDef += "\n\n";
-        anUpdatedScript.Insert( 1, funDef);
-        where += funDef.Length();
-      }
-    }
-    anUpdatedScript.InsertBefore( where, functionName ); // call function
-  }
-
-  aValidScript = true;
-
-  return anUpdatedScript;
-
-  SMESH_CATCH( SMESH::printException );
-
-  aValidScript = false;
-  return "";
-}
-
-//=============================================================================
-/*!
- *  GetNewPythonLines
- */
-//=============================================================================
-TCollection_AsciiString SMESH_Gen_i::GetNewPythonLines (int theStudyID)
-{
-  TCollection_AsciiString aScript;
-
-  // Dump trace of API methods calls
-  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
-    Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScripts[theStudyID];
-    Standard_Integer istr, aLen = aPythonScript->Length();
-    for (istr = 1; istr <= aLen; istr++) {
-      aScript += "\n";
-      aScript += aPythonScript->Value(istr);
-    }
-    aScript += "\n";
-  }
-
-  return aScript;
-}
-
-//=============================================================================
-/*!
- *  CleanPythonTrace
- */
-//=============================================================================
-void SMESH_Gen_i::CleanPythonTrace (int theStudyID)
-{
-  TCollection_AsciiString aScript;
-
-  // Clean trace of API methods calls
-  if (myPythonScripts.find(theStudyID) != myPythonScripts.end()) {
-    myPythonScripts[theStudyID]->Clear();
-  }
-}
index 28e749b6e758b5a0650660c187f9d41428028b78..73217f272fb12c92da5d84599da5696d452d1eaa 100644 (file)
@@ -136,18 +136,14 @@ static TopoDS_Shape getShapeByName( const char* theName )
   if ( theName != 0 )
   {
     SMESH_Gen_i* aSMESHGen     = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy();
-    if ( !aStudy->_is_nil() )
+    SALOMEDS::Study::ListOfSObject_var aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "GEOM" );
+    if ( aList->length() > 0 )
     {
-      SALOMEDS::Study::ListOfSObject_var aList = aStudy->FindObjectByName( theName, "GEOM" );
-      if ( aList->length() > 0 )
-      {
-        CORBA::Object_var        anObj = aList[ 0 ]->GetObject();
-        GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( anObj );
-        TopoDS_Shape             shape = aSMESHGen->GeomObjectToShape( aGeomObj );
-        SALOME::UnRegister( aList ); // UnRegister() objects in aList
-        return shape;
-      }
+      CORBA::Object_var        anObj = aList[ 0 ]->GetObject();
+      GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow( anObj );
+      TopoDS_Shape             shape = aSMESHGen->GeomObjectToShape( aGeomObj );
+      SALOME::UnRegister( aList ); // UnRegister() objects in aList
+      return shape;
     }
   }
   return TopoDS_Shape();
@@ -157,14 +153,11 @@ static TopoDS_Shape getShapeByID (const char* theID)
 {
   if ( theID && strlen( theID ) > 0 ) {
     SMESH_Gen_i*     aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy();
-    if ( !aStudy->_is_nil() ) {
-      SALOMEDS::SObject_wrap aSObj = aStudy->FindObjectID(theID);
-      if ( !aSObj->_is_nil() ) {
-        CORBA::Object_var          obj = aSObj->GetObject();
-        GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(obj);
-        return aSMESHGen->GeomObjectToShape( aGeomObj );
-      }
+    SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::getStudyServant()->FindObjectID(theID);
+    if ( !aSObj->_is_nil() ) {
+      CORBA::Object_var          obj = aSObj->GetObject();
+      GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(obj);
+      return aSMESHGen->GeomObjectToShape( aGeomObj );
     }
   }
   return TopoDS_Shape();
@@ -173,14 +166,10 @@ static TopoDS_Shape getShapeByID (const char* theID)
 // static std::string getShapeNameByID (const char* theID)
 // {
 //   if ( theID && strlen( theID ) > 0 ) {
-//     SMESH_Gen_i*     aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-//     SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy();
-//     if ( !aStudy->_is_nil() ) {
-//       SALOMEDS::SObject_wrap aSObj = aStudy->FindObjectID(theID);
-//       if ( !aSObj->_is_nil() ) {
-//         CORBA::String_var name = aSObj->GetName();
-//         return name.in();
-//       }
+//     SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::getStudyServant()->FindObjectID(theID);
+//     if ( !aSObj->_is_nil() ) {
+//       CORBA::String_var name = aSObj->GetName();
+//       return name.in();
 //     }
 //   }
 //   return "";
@@ -792,14 +781,10 @@ void BelongToMeshGroup_i::SetGroupID( const char* theID ) // IOR or StoreName
   }
   else if ( strncmp( "0:", myID.c_str(), 2 ) == 0 ) // transient mode + GUI
   {
-    SMESH_Gen_i* aSMESHGen     = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study_var aStudy = aSMESHGen->GetCurrentStudy();
-    if ( !aStudy->_is_nil() ) {
-      SALOMEDS::SObject_wrap aSObj = aStudy->FindObjectID( myID.c_str() );
-      if ( !aSObj->_is_nil() ) {
-        CORBA::Object_var obj = aSObj->GetObject();
-        SetGroup( SMESH::SMESH_GroupBase::_narrow( obj ));
-      }
+    SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::getStudyServant()->FindObjectID( myID.c_str() );
+    if ( !aSObj->_is_nil() ) {
+      CORBA::Object_var obj = aSObj->GetObject();
+      SetGroup( SMESH::SMESH_GroupBase::_narrow( obj ));
     }
   }
   else if ( !myID.empty() ) // persistent mode
@@ -825,7 +810,7 @@ SMESH::SMESH_GroupBase_ptr BelongToMeshGroup_i::GetGroup()
   {
     // search for a group in a current study
     SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    if ( StudyContext*  sc = aSMESHGen->GetCurrentStudyContext() )
+    if ( StudyContext*  sc = aSMESHGen->GetStudyContext() )
     {
       int id = 1;
       std::string ior;
@@ -1690,11 +1675,7 @@ void ConnectedElements_i::SetThreshold ( const char*
     }
   case SMESH::ConnectedElements::VERTEX: // get a VERTEX by its entry /////////////////
     {
-      SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
-      if ( study->_is_nil() )
-        THROW_SALOME_CORBA_EXCEPTION
-          ( "ConnectedElements_i::SetThreshold(): NULL current study", SALOME::BAD_PARAM );
-      SALOMEDS::SObject_wrap sobj = study->FindObjectID( threshold );
+      SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( threshold );
       if ( sobj->_is_nil() )
         THROW_SALOME_CORBA_EXCEPTION
           ( "ConnectedElements_i::SetThreshold(): invalid vertex study entry", SALOME::BAD_PARAM );
index b29e9a90173dd725ca4534098dad708a9ba8f289..bdf44dc4908d288304aa161f28a143cf7f080d9c 100644 (file)
 
 #include <map>
 #include <fstream>
+#include <sstream>
 #include <cstdio>
 #include <cstdlib>
 
@@ -298,7 +299,10 @@ SMESH_Gen_i::SMESH_Gen_i( CORBA::ORB_ptr            orb,
   _thisObj = this ;
   _id = myPoa->activate_object( _thisObj );
 
+  myStudyContext = new StudyContext;
+
   myIsEmbeddedMode = false;
+  myIsEnablePublish = true;
   myShapeReader = NULL;  // shape reader
   mySMESHGen = this;
   myIsHistoricalPythonDump = true;
@@ -356,11 +360,8 @@ SMESH_Gen_i::~SMESH_Gen_i()
   myHypCreatorMap.clear();
 
   // Clear study contexts data
-  map<int, StudyContext*>::iterator it;
-  for ( it = myStudyContextMap.begin(); it != myStudyContextMap.end(); ++it ) {
-    delete it->second;
-  }
-  myStudyContextMap.clear();
+  delete myStudyContext;
+
   // delete shape reader
   if ( myShapeReader )
     delete myShapeReader;
@@ -485,7 +486,7 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName
     getHypothesisCreator(theHypName, theLibName, aPlatformLibName);
 
   // create a new hypothesis object, store its ref. in studyContext
-  myHypothesis_i = aCreator->Create(myPoa, GetCurrentStudyID(), &myGen);
+  myHypothesis_i = aCreator->Create(myPoa, &myGen);
   if (myHypothesis_i)
   {
     myHypothesis_i->SetLibName( aPlatformLibName.c_str() ); // for persistency assurance
@@ -517,10 +518,10 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::createMesh()
   // Get or create the GEOM_Client instance
   try {
     // create a new mesh object servant, store it in a map in study context
-    SMESH_Mesh_i* meshServant = new SMESH_Mesh_i( GetPOA(), this, GetCurrentStudyID() );
+    SMESH_Mesh_i* meshServant = new SMESH_Mesh_i( GetPOA(), this );
     // create a new mesh object
     if(MYDEBUG) MESSAGE("myIsEmbeddedMode " << myIsEmbeddedMode);
-    meshServant->SetImpl( myGen.CreateMesh( GetCurrentStudyID(), myIsEmbeddedMode ));
+    meshServant->SetImpl( myGen.CreateMesh( myIsEmbeddedMode ));
 
     // activate the CORBA servant of Mesh
     SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( meshServant->_this() );
@@ -614,82 +615,74 @@ CORBA::Boolean SMESH_Gen_i::IsEmbeddedMode()
 
 //=============================================================================
 /*!
- *  SMESH_Gen_i::SetCurrentStudy
+ *  SMESH_Gen_i::SetEnablePublish
  *
- *  Set current study
+ *  Set enable publishing in the study
  */
 //=============================================================================
-
-void SMESH_Gen_i::SetCurrentStudy( SALOMEDS::Study_ptr theStudy )
+void SMESH_Gen_i::SetEnablePublish( CORBA::Boolean theIsEnablePublish )
 {
-  setCurrentStudy( theStudy );
+  myIsEnablePublish = theIsEnablePublish;
 }
 
-void SMESH_Gen_i::setCurrentStudy( SALOMEDS::Study_ptr theStudy,
-                                   bool                theStudyIsBeingClosed)
+//=============================================================================
+/*!
+ *  SMESH_Gen_i::IsEnablePublish
+ *
+ *  Check enable publishing
+ */
+//=============================================================================
+
+CORBA::Boolean SMESH_Gen_i::IsEnablePublish()
 {
-  int curStudyId = GetCurrentStudyID();
-  myCurrentStudy = SALOMEDS::Study::_duplicate( theStudy );
-  // create study context, if it doesn't exist and set current study
-  int studyId = GetCurrentStudyID();
-  if ( myStudyContextMap.find( studyId ) == myStudyContextMap.end() )
-    myStudyContextMap[ studyId ] = new StudyContext;
-
-  // myCurrentStudy may be nil
-  if ( !theStudyIsBeingClosed && !CORBA::is_nil( myCurrentStudy ) ) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
-    SALOMEDS::SComponent_wrap GEOM_var = myCurrentStudy->FindComponent( "GEOM" );
-    if( !GEOM_var->_is_nil() )
-      aStudyBuilder->LoadWith( GEOM_var, GetGeomEngine() );
-    // NPAL16168, issue 0020210
-    // Let meshes update their data depending on GEOM groups that could change
-    if ( curStudyId != studyId )
-    {
-      CORBA::String_var compDataType = ComponentDataType();
-      SALOMEDS::SComponent_wrap me = myCurrentStudy->FindComponent( compDataType.in() );
-      if ( !me->_is_nil() ) {
-        SALOMEDS::ChildIterator_wrap anIter = myCurrentStudy->NewChildIterator( me );
-        for ( ; anIter->More(); anIter->Next() ) {
-          SALOMEDS::SObject_wrap so = anIter->Value();
-          CORBA::Object_var     ior = SObjectToObject( so );
-          if ( SMESH_Mesh_i*   mesh = SMESH::DownCast<SMESH_Mesh_i*>( ior ))
-            mesh->CheckGeomModif();
-        }
-      }
-    }
-  }
+  return myIsEnablePublish;
 }
 
 //=============================================================================
 /*!
- *  SMESH_Gen_i::GetCurrentStudy
+ *  SMESH_Gen_i::UpdateStudy
  *
- *  Get current study
+ *  Update study (needed at switching GEOM->SMESH)
  */
 //=============================================================================
 
-SALOMEDS::Study_ptr SMESH_Gen_i::GetCurrentStudy()
+void SMESH_Gen_i::UpdateStudy()
 {
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetCurrentStudy: study Id = " << GetCurrentStudyID() );
-  if ( GetCurrentStudyID() < 0 )
-    return SALOMEDS::Study::_nil();
-  return SALOMEDS::Study::_duplicate( myCurrentStudy );
+  if ( !myStudyContext )
+    myStudyContext = new StudyContext;
+
+  SALOMEDS::Study_var aStudy = getStudyServant();
+  if ( !CORBA::is_nil( aStudy ) ) {
+    SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+    SALOMEDS::SComponent_wrap GEOM_var = aStudy->FindComponent( "GEOM" );
+    if( !GEOM_var->_is_nil() )
+      aStudyBuilder->LoadWith( GEOM_var, GetGeomEngine() );
+    // NPAL16168, issue 0020210
+    // Let meshes update their data depending on GEOM groups that could change
+    CORBA::String_var compDataType = ComponentDataType();
+    SALOMEDS::SComponent_wrap me = aStudy->FindComponent( compDataType.in() );
+    if ( !me->_is_nil() ) {
+      SALOMEDS::ChildIterator_wrap anIter = aStudy->NewChildIterator( me );
+      for ( ; anIter->More(); anIter->Next() ) {
+        SALOMEDS::SObject_wrap so = anIter->Value();
+        CORBA::Object_var     ior = SObjectToObject( so );
+        if ( SMESH_Mesh_i*   mesh = SMESH::DownCast<SMESH_Mesh_i*>( ior ))
+          mesh->CheckGeomModif();
+      }
+    }
+  }
 }
 
 //=============================================================================
 /*!
- *  SMESH_Gen_i::GetCurrentStudyContext
+ *  SMESH_Gen_i::GetStudyContext
  *
- *  Get current study context
+ *  Get study context
  */
 //=============================================================================
-StudyContext* SMESH_Gen_i::GetCurrentStudyContext()
+StudyContext* SMESH_Gen_i::GetStudyContext()
 {
-  if ( !CORBA::is_nil( myCurrentStudy ) &&
-       myStudyContextMap.find( GetCurrentStudyID() ) != myStudyContextMap.end() )
-    return myStudyContextMap[ myCurrentStudy->StudyId() ];
-  else
-    return 0;
+  return myStudyContext;
 }
 
 //=============================================================================
@@ -710,7 +703,7 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::CreateHypothesis( const char* theHypNam
 
   // Publish hypothesis/algorithm in the study
   if ( CanPublishInStudy( hyp ) ) {
-    SALOMEDS::SObject_wrap aSO = PublishHypothesis( myCurrentStudy, hyp );
+    SALOMEDS::SObject_wrap aSO = PublishHypothesis( hyp );
     if ( !aSO->_is_nil() ) {
       // Update Python script
       TPythonDump() << aSO << " = " << this << ".CreateHypothesis('"
@@ -835,12 +828,12 @@ CORBA::Boolean SMESH_Gen_i::GetSoleSubMeshUsingHyp( SMESH::SMESH_Hypothesis_ptr
                                                     SMESH::SMESH_Mesh_out       theMesh,
                                                     GEOM::GEOM_Object_out       theShape)
 {
-  if ( GetCurrentStudyID() < 0 || CORBA::is_nil( theHyp ))
+  if ( CORBA::is_nil( theHyp ))
     return false;
 
   // get Mesh component SO
   CORBA::String_var compDataType = ComponentDataType();
-  SALOMEDS::SComponent_wrap comp = myCurrentStudy->FindComponent( compDataType.in() );
+  SALOMEDS::SComponent_wrap comp = getStudyServant()->FindComponent( compDataType.in() );
   if ( CORBA::is_nil( comp ))
     return false;
 
@@ -848,7 +841,7 @@ CORBA::Boolean SMESH_Gen_i::GetSoleSubMeshUsingHyp( SMESH::SMESH_Hypothesis_ptr
   SMESH::SMESH_Mesh_var foundMesh;
   TopoDS_Shape          foundShape;
   bool                  isSole = true;
-  SALOMEDS::ChildIterator_wrap meshIter = myCurrentStudy->NewChildIterator( comp );
+  SALOMEDS::ChildIterator_wrap meshIter = getStudyServant()->NewChildIterator( comp );
   for ( ; meshIter->More() && isSole; meshIter->Next() )
   {
     SALOMEDS::SObject_wrap curSO = meshIter->Value();
@@ -1054,9 +1047,9 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMesh( GEOM::GEOM_Object_ptr theShapeObj
 
   // publish mesh in the study
   if ( CanPublishInStudy( mesh ) ) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+    SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
     aStudyBuilder->NewCommand();  // There is a transaction
-    SALOMEDS::SObject_wrap aSO = PublishMesh( myCurrentStudy, mesh.in() );
+    SALOMEDS::SObject_wrap aSO = PublishMesh( mesh.in() );
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
@@ -1085,9 +1078,9 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateEmptyMesh()
 
   // publish mesh in the study
   if ( CanPublishInStudy( mesh ) ) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+    SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
     aStudyBuilder->NewCommand();  // There is a transaction
-    SALOMEDS::SObject_wrap aSO = PublishMesh( myCurrentStudy, mesh.in() );
+    SALOMEDS::SObject_wrap aSO = PublishMesh( mesh.in() );
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
@@ -1140,9 +1133,9 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName
   string aFileName;
   // publish mesh in the study
   if ( CanPublishInStudy( aMesh ) ) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+    SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
     aStudyBuilder->NewCommand();  // There is a transaction
-    SALOMEDS::SObject_wrap aSO = PublishMesh( myCurrentStudy, aMesh.in(), aFileName.c_str() );
+    SALOMEDS::SObject_wrap aSO = PublishMesh( aMesh.in(), aFileName.c_str() );
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
@@ -1198,11 +1191,9 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileNa
 
   if (theStatus == SMESH::DRS_OK) {
     SALOMEDS::StudyBuilder_var aStudyBuilder;
-    if ( GetCurrentStudyID() > -1 )
-    {
-      aStudyBuilder = myCurrentStudy->NewBuilder();
-      aStudyBuilder->NewCommand();  // There is a transaction
-    }
+    aStudyBuilder = getStudyServant()->NewBuilder();
+    aStudyBuilder->NewCommand();  // There is a transaction
+
     aResult->length( aNames.size() );
     int i = 0;
 
@@ -1221,7 +1212,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileNa
         // little trick: for MED file theFileName and theFileNameForPython are the same, but they are different for SAUV
         // - as names of meshes are stored in MED file, we use them for data publishing
         // - as mesh name is not stored in UNV file, we use file name as name of mesh when publishing data
-        aSO = PublishMesh( myCurrentStudy, mesh.in(), ( theFileName == theFileNameForPython ) ? (*it).c_str() : aFileName.c_str() );
+        aSO = PublishMesh( mesh.in(), ( theFileName == theFileNameForPython ) ? (*it).c_str() : aFileName.c_str() );
 
       // Python Dump
       if ( !aSO->_is_nil() ) {
@@ -1288,7 +1279,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromSAUV( const char* theFileName,
 #ifdef WIN32
   cmd = "%PYTHONBIN% ";
 #else
-  cmd = "python ";
+  cmd = "python3 ";
 #endif
   cmd += "-c \"";
   cmd += "from medutilities import convert ; convert(r'" + sauvfilename + "', 'GIBI', 'MED', 1, r'" + medfilename + "')";
@@ -1298,7 +1289,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromSAUV( const char* theFileName,
 #ifdef WIN32
   cmd = "%PYTHONBIN% ";
 #else
-  cmd = "python ";
+  cmd = "python3 ";
 #endif
   cmd += "-c \"";
   cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')";
@@ -1332,10 +1323,9 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName
 #endif
   // publish mesh in the study
   if ( CanPublishInStudy( aMesh ) ) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+    SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
     aStudyBuilder->NewCommand();  // There is a transaction
-    SALOMEDS::SObject_wrap aSO = PublishInStudy
-      ( myCurrentStudy, SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() );
+    SALOMEDS::SObject_wrap aSO = PublishInStudy( SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() );
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
@@ -1383,7 +1373,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromCGNS( const char* theFileName,
 
     if (theStatus == SMESH::DRS_OK)
     {
-      SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+      SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
       aStudyBuilder->NewCommand();  // There is a transaction
 
       int i = 0;
@@ -1411,7 +1401,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromCGNS( const char* theFileName,
         // publish mesh in the study
         SALOMEDS::SObject_wrap aSO;
         if ( CanPublishInStudy( mesh ) )
-          aSO = PublishMesh( myCurrentStudy, mesh.in(), meshName.c_str() );
+          aSO = PublishMesh( mesh.in(), meshName.c_str() );
 
         // Python Dump
         if ( !aSO->_is_nil() ) {
@@ -1461,10 +1451,9 @@ SMESH_Gen_i::CreateMeshesFromGMF( const char*             theFileName,
 #endif
   // publish mesh in the study
   if ( CanPublishInStudy( aMesh ) ) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder = myCurrentStudy->NewBuilder();
+    SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
     aStudyBuilder->NewCommand();  // There is a transaction
-    SALOMEDS::SObject_wrap aSO = PublishInStudy
-      ( myCurrentStudy, SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() );
+    SALOMEDS::SObject_wrap aSO = PublishInStudy( SALOMEDS::SObject::_nil(), aMesh.in(), aFileName.c_str() );
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
@@ -1531,16 +1520,17 @@ CORBA::Boolean SMESH_Gen_i::IsReadyToCompute( SMESH::SMESH_Mesh_ptr theMesh,
 SALOMEDS::SObject_ptr SMESH_Gen_i::GetAlgoSO(const ::SMESH_Algo* algo)
 {
   if ( algo ) {
-    if ( !myCurrentStudy->_is_nil() ) {
+  SALOMEDS::Study_var aStudy = getStudyServant();
+    if ( !aStudy->_is_nil() ) {
       // find algo in the study
       CORBA::String_var compDataType  = ComponentDataType();
-      SALOMEDS::SComponent_wrap father = myCurrentStudy->FindComponent( compDataType.in() );
+      SALOMEDS::SComponent_wrap father = aStudy->FindComponent( compDataType.in() );
       if ( !father->_is_nil() ) {
-        SALOMEDS::ChildIterator_wrap itBig = myCurrentStudy->NewChildIterator( father );
+        SALOMEDS::ChildIterator_wrap itBig = aStudy->NewChildIterator( father );
         for ( ; itBig->More(); itBig->Next() ) {
           SALOMEDS::SObject_wrap gotBranch = itBig->Value();
           if ( gotBranch->Tag() == GetAlgorithmsRootTag() ) {
-            SALOMEDS::ChildIterator_wrap algoIt = myCurrentStudy->NewChildIterator( gotBranch );
+            SALOMEDS::ChildIterator_wrap algoIt = aStudy->NewChildIterator( gotBranch );
             for ( ; algoIt->More(); algoIt->Next() ) {
               SALOMEDS::SObject_wrap algoSO = algoIt->Value();
               CORBA::Object_var     algoIOR = SObjectToObject( algoSO );
@@ -2276,16 +2266,16 @@ SMESH_Gen_i::GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
     GEOM::GEOM_Gen_ptr    geomGen   = GetGeomEngine();
 
     // try to find the corresponding SObject
-    SALOMEDS::SObject_wrap SObj = ObjectToSObject( myCurrentStudy, geom.in() );
+    SALOMEDS::SObject_wrap SObj = ObjectToSObject( geom.in() );
     if ( SObj->_is_nil() ) // submesh can be not found even if published
     {
       // try to find published submesh
       GEOM::ListOfLong_var list = geom->GetSubShapeIndices();
       if ( !geom->IsMainShape() && list->length() == 1 ) {
-        SALOMEDS::SObject_wrap mainSO = ObjectToSObject( myCurrentStudy, mainShape );
+        SALOMEDS::SObject_wrap mainSO = ObjectToSObject( mainShape );
         SALOMEDS::ChildIterator_wrap it;
         if ( !mainSO->_is_nil() ) {
-          it = myCurrentStudy->NewChildIterator( mainSO );
+          it = getStudyServant()->NewChildIterator( mainSO );
         }
         if ( !it->_is_nil() ) {
           for ( it->InitEx(true); it->More(); it->Next() ) {
@@ -2305,7 +2295,7 @@ SMESH_Gen_i::GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
       }
     }
     if ( SObj->_is_nil() ) // publish a new subshape
-      SObj = geomGen->AddInStudy( myCurrentStudy, geom, theGeomName, mainShape );
+      SObj = geomGen->AddInStudy( geom, theGeomName, mainShape );
 
     // return only published geometry
     if ( !SObj->_is_nil() ) {
@@ -2353,10 +2343,10 @@ SMESH_Gen_i::FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
         GEOM::GEOM_Object_var geom = ShapeToGeomObject( meshDS->IndexToShape( shapeID ));
         if ( geom->_is_nil() ) {
           // try to find a published sub-shape
-          SALOMEDS::SObject_wrap mainSO = ObjectToSObject( myCurrentStudy, mainShape );
+          SALOMEDS::SObject_wrap mainSO = ObjectToSObject( mainShape );
           SALOMEDS::ChildIterator_wrap it;
           if ( !mainSO->_is_nil() ) {
-            it = myCurrentStudy->NewChildIterator( mainSO );
+            it = getStudyServant()->NewChildIterator( mainSO );
           }
           if ( !it->_is_nil() ) {
             for ( it->InitEx(true); it->More(); it->Next() ) {
@@ -2375,8 +2365,7 @@ SMESH_Gen_i::FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
         }
         if ( geom->_is_nil() ) {
           // explode
-          GEOM::GEOM_IShapesOperations_wrap op =
-            geomGen->GetIShapesOperations( GetCurrentStudyID() );
+          GEOM::GEOM_IShapesOperations_wrap op = geomGen->GetIShapesOperations();
           if ( !op->_is_nil() )
             geom = op->GetSubShape( mainShape, shapeID );
         }
@@ -2568,7 +2557,7 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
           int _assert[( nbNames == SMESH::NB_ELEMENT_TYPES ) ? 2 : -1 ]; _assert[0]=_assert[1]=0;
         }
         string groupName = "Gr";
-        SALOMEDS::SObject_wrap aMeshSObj = ObjectToSObject( myCurrentStudy, theMeshesArray[i] );
+        SALOMEDS::SObject_wrap aMeshSObj = ObjectToSObject( theMeshesArray[i] );
         if ( aMeshSObj ) {
           CORBA::String_var name = aMeshSObj->GetName();
           groupName += name;
@@ -2722,7 +2711,7 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
   }
 
   // IPAL21468 Change icon of compound because it need not be computed.
-  SALOMEDS::SObject_wrap aMeshSObj = ObjectToSObject( myCurrentStudy, aNewMesh );
+  SALOMEDS::SObject_wrap aMeshSObj = ObjectToSObject( aNewMesh );
   SetPixMap( aMeshSObj, "ICON_SMESH_TREE_MESH" );
 
   if (aNewMeshDS)
@@ -2769,7 +2758,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
   SMESH_Mesh_i*       newMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( newMesh );
   if ( !newMesh_i )
     THROW_SALOME_CORBA_EXCEPTION( "can't create a mesh", SALOME::INTERNAL_ERROR );
-  SALOMEDS::SObject_wrap meshSO = ObjectToSObject(myCurrentStudy, newMesh );
+  SALOMEDS::SObject_wrap meshSO = ObjectToSObject( newMesh );
   if ( !meshSO->_is_nil() )
   {
     SetName( meshSO, meshName, "Mesh" );
@@ -2960,6 +2949,22 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
   return newMesh._retn();
 }
 
+//================================================================================
+/*!
+ * \brief Get version of MED format being used.
+ */
+//================================================================================
+
+char* SMESH_Gen_i::GetMEDFileVersion()
+{
+  MED::TInt majeur, mineur, release;
+  majeur =  mineur = release = 0;
+  MED::GetVersionRelease(majeur, mineur, release);
+  std::ostringstream version;
+  version << majeur << "." << mineur << "." << release;
+  return CORBA::string_dup( version.str().c_str() );
+}
+
 //================================================================================
 /*!
  *  SMESH_Gen_i::GetMEDVersion
@@ -2967,28 +2972,22 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
  *  Get MED version of the file by its name
  */
 //================================================================================
-CORBA::Boolean SMESH_Gen_i::GetMEDVersion(const char* theFileName,
-                                          SMESH::MED_VERSION& theVersion)
+char* SMESH_Gen_i::GetMEDVersion(const char* theFileName)
 {
-  theVersion = SMESH::MED_V2_1;
-  MED::EVersion aVersion = MED::GetVersionId( theFileName );
-  switch( aVersion ) {
-    case MED::eV2_1     : theVersion = SMESH::MED_V2_1;    return true;
-    case MED::eV2_2     : theVersion = SMESH::MED_V2_2;    return true;
-    case MED::eLATEST   : theVersion = SMESH::MED_LATEST;  return true;
-    case MED::eMINOR_0  : theVersion = SMESH::MED_MINOR_0; return true;
-    case MED::eMINOR_1  : theVersion = SMESH::MED_MINOR_1; return true;
-    case MED::eMINOR_2  : theVersion = SMESH::MED_MINOR_2; return true;
-    case MED::eMINOR_3  : theVersion = SMESH::MED_MINOR_3; return true;
-    case MED::eMINOR_4  : theVersion = SMESH::MED_MINOR_4; return true;
-    case MED::eMINOR_5  : theVersion = SMESH::MED_MINOR_5; return true;
-    case MED::eMINOR_6  : theVersion = SMESH::MED_MINOR_6; return true;
-    case MED::eMINOR_7  : theVersion = SMESH::MED_MINOR_7; return true;
-    case MED::eMINOR_8  : theVersion = SMESH::MED_MINOR_8; return true;
-    case MED::eMINOR_9  : theVersion = SMESH::MED_MINOR_9; return true;
-    case MED::eVUnknown : return false;
-  }
-  return false;
+  std::string version = MED::GetMEDVersion( theFileName );
+  return CORBA::string_dup( version.c_str() );
+}
+
+//================================================================================
+/*!
+ *  SMESH_Gen_i::CheckCompatibility
+ *
+ *  Check compatibility of file with MED format being used.
+ */
+//================================================================================
+CORBA::Boolean SMESH_Gen_i::CheckCompatibility(const char* theFileName)
+{
+  return MED::CheckCompatibility( theFileName );
 }
 
 //================================================================================
@@ -3001,7 +3000,7 @@ CORBA::Boolean SMESH_Gen_i::GetMEDVersion(const char* theFileName,
 SMESH::string_array* SMESH_Gen_i::GetMeshNames(const char* theFileName)
 {
   SMESH::string_array_var aResult = new SMESH::string_array();
-  MED::PWrapper aMed = MED::CrWrapper( theFileName );
+  MED::PWrapper aMed = MED::CrWrapperR( theFileName );
   MED::TErr anErr;
   MED::TInt aNbMeshes = aMed->GetNbMeshes( &anErr );
   if( anErr >= 0 ) {
@@ -3025,16 +3024,13 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                                       const char*              theURL,
                                       bool                     isMultiFile )
 {
-  //  ASSERT( theComponent->GetStudy()->StudyId() == myCurrentStudy->StudyId() )
-  // san -- in case <myCurrentStudy> differs from theComponent's study,
-  // use that of the component
-  if ( theComponent->GetStudy()->StudyId() != GetCurrentStudyID() )
-    SetCurrentStudy( theComponent->GetStudy() );
+  if (!myStudyContext)
+    UpdateStudy();
 
   // Store study contents as a set of python commands
-  SavePython(myCurrentStudy);
+  SavePython();
 
-  StudyContext* myStudyContext = GetCurrentStudyContext();
+  SALOMEDS::Study_var aStudy = getStudyServant();
 
   // Declare a byte stream
   SALOMEDS::TMPFile_var aStreamFile;
@@ -3044,20 +3040,20 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
     ( isMultiFile ) ? TCollection_AsciiString( ( char* )theURL ) : ( char* )SALOMEDS_Tool::GetTmpDir().c_str();
 
   // Create a sequence of files processed
-  SALOMEDS::ListOfFileNames_var aFileSeq = new SALOMEDS::ListOfFileNames;
-  aFileSeq->length( NUM_TMP_FILES );
+  SALOMEDS_Tool::ListOfFiles aFileSeq;
+  aFileSeq.reserve( NUM_TMP_FILES );
 
   TCollection_AsciiString aStudyName( "" );
   if ( isMultiFile )
-    aStudyName = ( (char*)SALOMEDS_Tool::GetNameFromPath( myCurrentStudy->URL() ).c_str() );
+    aStudyName = ( (char*)SALOMEDS_Tool::GetNameFromPath( Kernel_Utils::encode(aStudy->URL()) ).c_str() );
 
   // Set names of temporary files
   TCollection_AsciiString filename =
     aStudyName + TCollection_AsciiString( "_SMESH.hdf" );        // for SMESH data itself
   TCollection_AsciiString meshfile =
     aStudyName + TCollection_AsciiString( "_SMESH_Mesh.med" );   // for mesh data to be stored in MED file
-  aFileSeq[ 0 ] = CORBA::string_dup( filename.ToCString() );
-  aFileSeq[ 1 ] = CORBA::string_dup( meshfile.ToCString() );
+  aFileSeq.push_back(CORBA::string_dup( filename.ToCString() ));
+  aFileSeq.push_back(CORBA::string_dup( meshfile.ToCString() ));
   filename = tmpDir + filename;
   meshfile = tmpDir + meshfile;
 
@@ -3091,7 +3087,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
   // SetStoreName() to groups before storing hypotheses to let them refer to
   // groups using "store name", which is "Group <group_persistent_id>"
   {
-    SALOMEDS::ChildIterator_wrap itBig = myCurrentStudy->NewChildIterator( theComponent );
+    SALOMEDS::ChildIterator_wrap itBig = aStudy->NewChildIterator( theComponent );
     for ( ; itBig->More(); itBig->Next() ) {
       SALOMEDS::SObject_wrap gotBranch = itBig->Value();
       if ( gotBranch->Tag() > GetAlgorithmsRootTag() ) {
@@ -3128,7 +3124,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
   aFile->CreateOnDisk();
 
   // --> iterator for top-level objects
-  SALOMEDS::ChildIterator_wrap itBig = myCurrentStudy->NewChildIterator( theComponent );
+  SALOMEDS::ChildIterator_wrap itBig = aStudy->NewChildIterator( theComponent );
   for ( ; itBig->More(); itBig->Next() ) {
     SALOMEDS::SObject_wrap gotBranch = itBig->Value();
 
@@ -3139,7 +3135,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
       aTopGroup->CreateOnDisk();
 
       // iterator for all hypotheses
-      SALOMEDS::ChildIterator_wrap it = myCurrentStudy->NewChildIterator( gotBranch );
+      SALOMEDS::ChildIterator_wrap it = aStudy->NewChildIterator( gotBranch );
       for ( ; it->More(); it->Next() ) {
         SALOMEDS::SObject_wrap mySObject = it->Value();
         CORBA::Object_var anObject = SObjectToObject( mySObject );
@@ -3208,7 +3204,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
       aTopGroup->CreateOnDisk();
 
       // iterator for all algorithms
-      SALOMEDS::ChildIterator_wrap it = myCurrentStudy->NewChildIterator( gotBranch );
+      SALOMEDS::ChildIterator_wrap it = aStudy->NewChildIterator( gotBranch );
       for ( ; it->More(); it->Next() ) {
         SALOMEDS::SObject_wrap mySObject = it->Value();
         CORBA::Object_var anObject = SObjectToObject( mySObject );
@@ -3357,13 +3353,13 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
             SALOMEDS::SObject_wrap myHypBranch;
             found = gotBranch->FindSubObject( GetRefOnAppliedHypothesisTag(), myHypBranch.inout() );
             if ( found && !shapeRefFound && hasShape) { // remove applied hyps
-              myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myHypBranch );
+              aStudy->NewBuilder()->RemoveObjectWithChildren( myHypBranch );
             }
             if ( found && (shapeRefFound || !hasShape) ) {
               aGroup = new HDFgroup( "Applied Hypotheses", aTopGroup );
               aGroup->CreateOnDisk();
 
-              SALOMEDS::ChildIterator_wrap it = myCurrentStudy->NewChildIterator( myHypBranch );
+              SALOMEDS::ChildIterator_wrap it = aStudy->NewChildIterator( myHypBranch );
               int hypNb = 0;
               for ( ; it->More(); it->Next() ) {
                 SALOMEDS::SObject_wrap mySObject = it->Value();
@@ -3401,13 +3397,13 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
             found = gotBranch->FindSubObject( GetRefOnAppliedAlgorithmsTag(),
                                               myAlgoBranch.inout() );
             if ( found && !shapeRefFound && hasShape) { // remove applied algos
-              myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( myAlgoBranch );
+              aStudy->NewBuilder()->RemoveObjectWithChildren( myAlgoBranch );
             }
             if ( found && (shapeRefFound || !hasShape)) {
               aGroup = new HDFgroup( "Applied Algorithms", aTopGroup );
               aGroup->CreateOnDisk();
 
-              SALOMEDS::ChildIterator_wrap it = myCurrentStudy->NewChildIterator( myAlgoBranch );
+              SALOMEDS::ChildIterator_wrap it = aStudy->NewChildIterator( myAlgoBranch );
               int algoNb = 0;
               for ( ; it->More(); it->Next() ) {
                 SALOMEDS::SObject_wrap mySObject = it->Value();
@@ -3450,7 +3446,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
               {
                 bool hasShapeRef = false;
                 SALOMEDS::ChildIterator_wrap itSM =
-                  myCurrentStudy->NewChildIterator( mySubmeshBranch );
+                  aStudy->NewChildIterator( mySubmeshBranch );
                 for ( ; itSM->More(); itSM->Next() ) {
                   SALOMEDS::SObject_wrap mySubRef, myShape, mySObject = itSM->Value();
                   if ( mySObject->FindSubObject( GetRefOnShapeTag(), mySubRef.inout() ))
@@ -3475,11 +3471,11 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                         }
                       }
                     }
-                    myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( mySObject );
+                    aStudy->NewBuilder()->RemoveObjectWithChildren( mySObject );
                   }
                 } // loop on submeshes of a type
                 if ( !shapeRefFound || !hasShapeRef ) { // remove the whole submeshes branch
-                  myCurrentStudy->NewBuilder()->RemoveObjectWithChildren( mySubmeshBranch );
+                  aStudy->NewBuilder()->RemoveObjectWithChildren( mySubmeshBranch );
                   found = false;
                 }
               }  // end check if there is shape reference in submeshes
@@ -3505,7 +3501,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                 aGroup->CreateOnDisk();
 
                 // iterator for all submeshes of given type
-                SALOMEDS::ChildIterator_wrap itSM = myCurrentStudy->NewChildIterator( mySubmeshBranch );
+                SALOMEDS::ChildIterator_wrap itSM = aStudy->NewChildIterator( mySubmeshBranch );
                 for ( ; itSM->More(); itSM->Next() ) {
                   SALOMEDS::SObject_wrap mySObject = itSM->Value();
                   CORBA::Object_var anSubObject = SObjectToObject( mySObject );
@@ -3542,7 +3538,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                       aSubSubGroup = new HDFgroup( "Applied Hypotheses", aSubGroup );
                       aSubSubGroup->CreateOnDisk();
 
-                      SALOMEDS::ChildIterator_wrap it = myCurrentStudy->NewChildIterator( mySubHypBranch );
+                      SALOMEDS::ChildIterator_wrap it = aStudy->NewChildIterator( mySubHypBranch );
                       int hypNb = 0;
                       for ( ; it->More(); it->Next() ) {
                         SALOMEDS::SObject_wrap mySubSObject = it->Value();
@@ -3579,7 +3575,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                       aSubSubGroup->CreateOnDisk();
 
                       SALOMEDS::ChildIterator_wrap it =
-                        myCurrentStudy->NewChildIterator( mySubAlgoBranch );
+                        aStudy->NewChildIterator( mySubAlgoBranch );
                       int algoNb = 0;
                       for ( ; it->More(); it->Next() ) {
                         SALOMEDS::SObject_wrap mySubSObject = it->Value();
@@ -3675,7 +3671,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                 aGroup = new HDFgroup( name_group, aTopGroup );
                 aGroup->CreateOnDisk();
 
-                SALOMEDS::ChildIterator_wrap it = myCurrentStudy->NewChildIterator( myGroupsBranch );
+                SALOMEDS::ChildIterator_wrap it = aStudy->NewChildIterator( myGroupsBranch );
                 for ( ; it->More(); it->Next() ) {
                   SALOMEDS::SObject_wrap mySObject = it->Value();
                   CORBA::Object_var aSubObject = SObjectToObject( mySObject );
@@ -3960,11 +3956,11 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
   delete aFile;
 
   // Convert temporary files to stream
-  aStreamFile = SALOMEDS_Tool::PutFilesToStream( tmpDir.ToCString(), aFileSeq.in(), isMultiFile );
+  aStreamFile = SALOMEDS_Tool::PutFilesToStream( tmpDir.ToCString(), aFileSeq, isMultiFile );
 
   // Remove temporary files and directory
   if ( !isMultiFile )
-    SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.ToCString(), aFileSeq.in(), true );
+    SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.ToCString(), aFileSeq, true );
 
   return aStreamFile._retn();
 }
@@ -4011,11 +4007,7 @@ void SMESH_Gen_i::loadGeomData( SALOMEDS::SComponent_ptr theCompRoot )
   if ( theCompRoot->_is_nil() )
     return;
 
-  SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow( theCompRoot->GetStudy() );
-  if ( aStudy->_is_nil() )
-    return;
-
-  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
   aStudyBuilder->LoadWith( theCompRoot, GetGeomEngine() );
 }
 
@@ -4032,30 +4024,27 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                         const char*              theURL,
                         bool                     isMultiFile )
 {
-  if ( theComponent->GetStudy()->StudyId() != GetCurrentStudyID() )
-    SetCurrentStudy( theComponent->GetStudy() );
-
+  if (!myStudyContext)
+    UpdateStudy();
+  SALOMEDS::Study_var aStudy = getStudyServant();
   /*  if( !theComponent->_is_nil() )
       {
-      //SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow( theComponent->GetStudy() );
-      if( !myCurrentStudy->FindComponent( "GEOM" )->_is_nil() )
-      loadGeomData( myCurrentStudy->FindComponent( "GEOM" ) );
+      if( !aStudy->FindComponent( "GEOM" )->_is_nil() )
+      loadGeomData( aStudy->FindComponent( "GEOM" ) );
       }*/
 
-  StudyContext* myStudyContext = GetCurrentStudyContext();
-
   // Get temporary files location
   TCollection_AsciiString tmpDir =
     ( char* )( isMultiFile ? theURL : SALOMEDS_Tool::GetTmpDir().c_str() );
 
   // Convert the stream into sequence of files to process
-  SALOMEDS::ListOfFileNames_var aFileSeq = SALOMEDS_Tool::PutStreamToFiles( theStream,
-                                                                            tmpDir.ToCString(),
-                                                                            isMultiFile );
+  SALOMEDS_Tool::ListOfFiles aFileSeq = SALOMEDS_Tool::PutStreamToFiles( theStream,
+                                                                         tmpDir.ToCString(),
+                                                                         isMultiFile );
   TCollection_AsciiString aStudyName( "" );
   if ( isMultiFile ) {
-    CORBA::String_var url = myCurrentStudy->URL();
-    aStudyName = (char*)SALOMEDS_Tool::GetNameFromPath( url.in() ).c_str();
+    CORBA::WString_var url = aStudy->URL();
+    aStudyName = (char*)SALOMEDS_Tool::GetNameFromPath( Kernel_Utils::encode(url.in()) ).c_str();
   }
   // Set names of temporary files
   TCollection_AsciiString filename = tmpDir + aStudyName + "_SMESH.hdf";
@@ -4359,7 +4348,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
             aDataset->ReadFromDisk( refFromFile );
             aDataset->CloseOnDisk();
             if ( strlen( refFromFile ) > 0 ) {
-              SALOMEDS::SObject_wrap shapeSO = myCurrentStudy->FindObjectID( refFromFile );
+              SALOMEDS::SObject_wrap shapeSO = aStudy->FindObjectID( refFromFile );
 
               // Make sure GEOM data are loaded first
               //loadGeomData( shapeSO->GetFatherComponent() );
@@ -4458,7 +4447,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
             aDataset->ReadFromDisk( refFromFile );
             aDataset->CloseOnDisk();
             // san - it is impossible to recover applied algorithms using their entries within Load() method
-            //SALOMEDS::SObject_wrap hypSO = myCurrentStudy->FindObjectID( refFromFile );
+            //SALOMEDS::SObject_wrap hypSO = aStudy->FindObjectID( refFromFile );
             //CORBA::Object_var hypObject = SObjectToObject( hypSO );
             int id = atoi( refFromFile );
             delete [] refFromFile;
@@ -4495,7 +4484,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
             aDataset->ReadFromDisk( refFromFile );
             aDataset->CloseOnDisk();
             // san - it is impossible to recover applied hypotheses using their entries within Load() method
-            //SALOMEDS::SObject_wrap hypSO = myCurrentStudy->FindObjectID( refFromFile );
+            //SALOMEDS::SObject_wrap hypSO = myStudy->FindObjectID( refFromFile );
             //CORBA::Object_var hypObject = SObjectToObject( hypSO );
             int id = atoi( refFromFile );
             delete [] refFromFile;
@@ -4566,7 +4555,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                 aDataset->ReadFromDisk( refFromFile );
                 aDataset->CloseOnDisk();
                 if ( strlen( refFromFile ) > 0 ) {
-                  SALOMEDS::SObject_wrap subShapeSO = myCurrentStudy->FindObjectID( refFromFile );
+                  SALOMEDS::SObject_wrap subShapeSO = aStudy->FindObjectID( refFromFile );
                   CORBA::Object_var subShapeObject = SObjectToObject( subShapeSO );
                   if ( !CORBA::is_nil( subShapeObject ) ) {
                     aSubShapeObject = GEOM::GEOM_Object::_narrow( subShapeObject );
@@ -4722,7 +4711,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                 aDataset->ReadFromDisk( refFromFile );
                 aDataset->CloseOnDisk();
                 if ( strlen( refFromFile ) > 0 ) {
-                  SALOMEDS::SObject_wrap shapeSO = myCurrentStudy->FindObjectID( refFromFile );
+                  SALOMEDS::SObject_wrap shapeSO = aStudy->FindObjectID( refFromFile );
                   CORBA::Object_var shapeObject = SObjectToObject( shapeSO );
                   if ( !CORBA::is_nil( shapeObject ) ) {
                     aShapeObject = GEOM::GEOM_Object::_narrow( shapeObject );
@@ -4872,7 +4861,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
     SMESH_File meshFile( meshfile.ToCString() );
     if ( !meshFile ) // no meshfile exists
     {
-      SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.ToCString(), aFileSeq.in(), true );
+      SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.ToCString(), aFileSeq, true );
     }
     else
     {
@@ -4889,12 +4878,11 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
 
   // creation of tree nodes for all data objects in the study
   // to support tree representation customization and drag-n-drop:
-  SALOMEDS::Study_var                    study = theComponent->GetStudy();
-  SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = study->GetUseCaseBuilder();
+  SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = aStudy->GetUseCaseBuilder();
   if ( !useCaseBuilder->IsUseCaseNode( theComponent ) ) {
     useCaseBuilder->SetRootCurrent();
     useCaseBuilder->Append( theComponent ); // component object is added as the top level item
-    SALOMEDS::ChildIterator_wrap it = study->NewChildIterator( theComponent );
+    SALOMEDS::ChildIterator_wrap it = aStudy->NewChildIterator( theComponent );
     for (it->InitEx(true); it->More(); it->Next()) {
       useCaseBuilder->AppendTo( it->Value()->GetFather(), it->Value() );
     }
@@ -4954,22 +4942,13 @@ void SMESH_Gen_i::Close( SALOMEDS::SComponent_ptr theComponent )
 {
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Close" );
 
-  // set correct current study
-  SALOMEDS::Study_var study = theComponent->GetStudy();
-  if ( study->StudyId() != GetCurrentStudyID())
-    setCurrentStudy( study, /*IsBeingClosed=*/true );
-
   // Clear study contexts data
-  int studyId = GetCurrentStudyID();
-  if ( myStudyContextMap.find( studyId ) != myStudyContextMap.end() ) {
-    delete myStudyContextMap[ studyId ];
-    myStudyContextMap.erase( studyId );
-  }
+  delete myStudyContext;
+  myStudyContext = 0;
 
   // remove the tmp files meshes are loaded from
   SMESH_PreMeshInfo::RemoveStudyFiles_TMP_METHOD( theComponent );
 
-  myCurrentStudy = SALOMEDS::Study::_nil();
   return;
 }
 
@@ -5002,7 +4981,6 @@ char* SMESH_Gen_i::IORToLocalPersistentID( SALOMEDS::SObject_ptr /*theSObject*/,
                                            CORBA::Boolean        /*isASCII*/ )
 {
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::IORToLocalPersistentID" );
-  StudyContext* myStudyContext = GetCurrentStudyContext();
 
   if ( myStudyContext && strcmp( IORString, "" ) != 0 ) {
     int anId = myStudyContext->findId( IORString );
@@ -5030,7 +5008,6 @@ char* SMESH_Gen_i::LocalPersistentIDToIOR( SALOMEDS::SObject_ptr /*theSObject*/,
                                            CORBA::Boolean        /*isASCII*/ )
 {
   if(MYDEBUG) MESSAGE( "SMESH_Gen_i::LocalPersistentIDToIOR(): id = " << aLocalPersistentID );
-  StudyContext* myStudyContext = GetCurrentStudyContext();
 
   if ( myStudyContext && strcmp( aLocalPersistentID, "" ) != 0 ) {
     int anId = atoi( aLocalPersistentID );
@@ -5046,7 +5023,6 @@ char* SMESH_Gen_i::LocalPersistentIDToIOR( SALOMEDS::SObject_ptr /*theSObject*/,
 
 int SMESH_Gen_i::RegisterObject(CORBA::Object_ptr theObject)
 {
-  StudyContext* myStudyContext = GetCurrentStudyContext();
   if ( myStudyContext && !CORBA::is_nil( theObject )) {
     CORBA::String_var iorString = GetORB()->object_to_string( theObject );
     return myStudyContext->addObject( string( iorString.in() ) );
@@ -5064,7 +5040,6 @@ int SMESH_Gen_i::RegisterObject(CORBA::Object_ptr theObject)
 
 CORBA::Long SMESH_Gen_i::GetObjectId(CORBA::Object_ptr theObject)
 {
-  StudyContext* myStudyContext = GetCurrentStudyContext();
   if ( myStudyContext && !CORBA::is_nil( theObject )) {
     string iorString = GetORB()->object_to_string( theObject );
     return myStudyContext->findId( iorString );
@@ -5084,18 +5059,13 @@ void SMESH_Gen_i::SetName(const char* theIOR,
 {
   if ( theIOR && strcmp( theIOR, "" ) ) {
     CORBA::Object_var anObject = GetORB()->string_to_object( theIOR );
-    SALOMEDS::SObject_wrap aSO = ObjectToSObject( myCurrentStudy, anObject );
+    SALOMEDS::SObject_wrap aSO = ObjectToSObject( anObject );
     if ( !aSO->_is_nil() ) {
       SetName( aSO, theName );
     }
   }
 }
 
-int SMESH_Gen_i::GetCurrentStudyID()
-{
-  return myCurrentStudy->_is_nil() || myCurrentStudy->_non_existent() ? -1 : myCurrentStudy->StudyId();
-}
-
 // Version information
 char* SMESH_Gen_i::getVersion()
 {
@@ -5117,9 +5087,8 @@ void SMESH_Gen_i::Move( const SMESH::sobject_list& what,
 {
   if ( CORBA::is_nil( where ) ) return;
 
-  SALOMEDS::Study_var study = where->GetStudy();
-  SALOMEDS::StudyBuilder_var studyBuilder = study->NewBuilder();
-  SALOMEDS::UseCaseBuilder_var useCaseBuilder = study->GetUseCaseBuilder();
+  SALOMEDS::StudyBuilder_var studyBuilder = getStudyServant()->NewBuilder();
+  SALOMEDS::UseCaseBuilder_var useCaseBuilder = getStudyServant()->GetUseCaseBuilder();
   SALOMEDS::SComponent_var father = where->GetFatherComponent();
   std::string dataType = father->ComponentDataType();
   if ( dataType != "SMESH" ) return; // not a SMESH component
index e5bd4f95ddc4ebe46783068c5ce8b2e5f5b45112..a0667465611147aab0f9b9af9bea00c3f6201736 100644 (file)
@@ -152,8 +152,9 @@ public:
   // Get CORBA object corresponding to the SALOMEDS::SObject
   static CORBA::Object_var SObjectToObject( SALOMEDS::SObject_ptr theSObject );
   // Get the SALOMEDS::SObject corresponding to a CORBA object
-  static SALOMEDS::SObject_ptr ObjectToSObject(SALOMEDS::Study_ptr theStudy,
-                                               CORBA::Object_ptr   theObject);
+  static SALOMEDS::SObject_ptr ObjectToSObject(CORBA::Object_ptr theObject);
+  // Get the SALOMEDS::Study from naming service
+  static SALOMEDS::Study_ptr getStudyServant();
   // Get GEOM Object corresponding to TopoDS_Shape
   GEOM::GEOM_Object_ptr ShapeToGeomObject (const TopoDS_Shape& theShape );
   // Get TopoDS_Shape corresponding to GEOM_Object
@@ -180,15 +181,19 @@ public:
   //GEOM::GEOM_Gen_ptr SetGeomEngine( const char* containerLoc );
   void SetGeomEngine( GEOM::GEOM_Gen_ptr geomcompo );
 
-  // Set current study
+  // Set embedded mode
   void SetEmbeddedMode( CORBA::Boolean theMode );
-  // Get current study
+  // Check embedded mode
   CORBA::Boolean IsEmbeddedMode();
 
-  // Set current study
-  void SetCurrentStudy( SALOMEDS::Study_ptr theStudy );
-  // Get current study
-  SALOMEDS::Study_ptr GetCurrentStudy();
+  // Set enable publishing in the study
+  void SetEnablePublish( CORBA::Boolean theIsEnablePublish );
+
+  // Check enable publishing
+  CORBA::Boolean IsEnablePublish();
+
+  // Update study
+  void UpdateStudy();
 
   // Create hypothesis/algorothm of given type
   SMESH::SMESH_Hypothesis_ptr CreateHypothesis (const char* theHypType,
@@ -376,9 +381,14 @@ public:
                                               CORBA::Double                 mergeTolerance)
     throw ( SALOME::SALOME_Exception );
 
+  // Get version of MED format being used.
+  char* GetMEDFileVersion();
+
   // Get MED version of the file by its name
-  CORBA::Boolean GetMEDVersion(const char* theFileName,
-                               SMESH::MED_VERSION& theVersion);
+  char* GetMEDVersion(const char* theFileName);
+
+  // Check compatibility of file with MED format being used.
+  CORBA::Boolean CheckCompatibility(const char* theFileName);
 
   // Get names of meshes defined in file with the specified name
   SMESH::string_array* GetMeshNames(const char* theFileName);
@@ -435,8 +445,7 @@ public:
   // Returns true if object can be published in the study
   bool CanPublishInStudy( CORBA::Object_ptr theIOR );
   // Publish object in the study
-  SALOMEDS::SObject_ptr PublishInStudy( SALOMEDS::Study_ptr   theStudy,
-                                        SALOMEDS::SObject_ptr theSObject,
+  SALOMEDS::SObject_ptr PublishInStudy( SALOMEDS::SObject_ptr theSObject,
                                         CORBA::Object_ptr     theObject,
                                         const char*           theName )
     throw ( SALOME::SALOME_Exception );
@@ -465,19 +474,17 @@ public:
   // Dump python
   // ============
 
-  virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy,
-                                       CORBA::Boolean isPublished,
+  virtual Engines::TMPFile* DumpPython(CORBA::Boolean isPublished,
                                        CORBA::Boolean isMultiFile,
                                        CORBA::Boolean& isValidScript);
 
-  void AddToPythonScript (int theStudyID, const TCollection_AsciiString& theString);
+  void AddToPythonScript (const TCollection_AsciiString& theString);
 
-  void RemoveLastFromPythonScript (int theStudyID);
+  void RemoveLastFromPythonScript();
 
-  void SavePython (SALOMEDS::Study_ptr theStudy);
+  void SavePython();
 
-  TCollection_AsciiString DumpPython_impl (SALOMEDS::Study_ptr theStudy,
-                                           Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
+  TCollection_AsciiString DumpPython_impl (Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
                                            Resource_DataMapOfAsciiStringAsciiString& theNames,
                                            bool isPublished,
                                            bool isMultiFile,
@@ -485,9 +492,9 @@ public:
                                            bool& aValidScript,
                                            TCollection_AsciiString& theSavedTrace);
 
-  TCollection_AsciiString GetNewPythonLines (int theStudyID);
+  TCollection_AsciiString GetNewPythonLines();
 
-  void CleanPythonTrace (int theStudyID);
+  void CleanPythonTrace();
 
   // *****************************************
   // Internal methods
@@ -517,33 +524,26 @@ public:
   static long GetBallElementsGroupsTag();
 
   // publishing methods
-  SALOMEDS::SComponent_ptr PublishComponent(SALOMEDS::Study_ptr theStudy);
-  SALOMEDS::SObject_ptr PublishMesh (SALOMEDS::Study_ptr   theStudy,
-                                     SMESH::SMESH_Mesh_ptr theMesh,
+  SALOMEDS::SComponent_ptr PublishComponent();
+  SALOMEDS::SObject_ptr PublishMesh (SMESH::SMESH_Mesh_ptr theMesh,
                                      const char*           theName = 0);
-  SALOMEDS::SObject_ptr PublishHypothesis (SALOMEDS::Study_ptr         theStudy,
-                                           SMESH::SMESH_Hypothesis_ptr theHyp,
+  SALOMEDS::SObject_ptr PublishHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp,
                                            const char*                 theName = 0);
-  SALOMEDS::SObject_ptr PublishSubMesh (SALOMEDS::Study_ptr      theStudy,
-                                        SMESH::SMESH_Mesh_ptr    theMesh,
+  SALOMEDS::SObject_ptr PublishSubMesh (SMESH::SMESH_Mesh_ptr    theMesh,
                                         SMESH::SMESH_subMesh_ptr theSubMesh,
                                         GEOM::GEOM_Object_ptr    theShapeObject,
                                         const char*              theName = 0);
-  SALOMEDS::SObject_ptr PublishGroup (SALOMEDS::Study_ptr    theStudy,
-                                      SMESH::SMESH_Mesh_ptr  theMesh,
+  SALOMEDS::SObject_ptr PublishGroup (SMESH::SMESH_Mesh_ptr  theMesh,
                                       SMESH::SMESH_GroupBase_ptr theGroup,
                                       GEOM::GEOM_Object_ptr  theShapeObject,
                                       const char*            theName = 0);
-  bool AddHypothesisToShape(SALOMEDS::Study_ptr         theStudy,
-                            SMESH::SMESH_Mesh_ptr       theMesh,
+  bool AddHypothesisToShape(SMESH::SMESH_Mesh_ptr       theMesh,
                             GEOM::GEOM_Object_ptr       theShapeObject,
                             SMESH::SMESH_Hypothesis_ptr theHyp);
-  bool RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy,
-                                 SMESH::SMESH_Mesh_ptr       theMesh,
+  bool RemoveHypothesisFromShape(SMESH::SMESH_Mesh_ptr       theMesh,
                                  GEOM::GEOM_Object_ptr       theShapeObject,
                                  SMESH::SMESH_Hypothesis_ptr theHyp);
-  SALOMEDS::SObject_ptr GetMeshOrSubmeshByShape (SALOMEDS::Study_ptr   theStudy,
-                                                 SMESH::SMESH_Mesh_ptr theMesh,
+  SALOMEDS::SObject_ptr GetMeshOrSubmeshByShape (SMESH::SMESH_Mesh_ptr theMesh,
                                                  GEOM::GEOM_Object_ptr theShape);
   static void SetName(SALOMEDS::SObject_ptr theSObject,
                       const char*           theName,
@@ -553,7 +553,7 @@ public:
                         const char*           thePixMap);
 
   //  Get study context
-  StudyContext* GetCurrentStudyContext();
+  StudyContext* GetStudyContext();
 
   // Register an object in a StudyContext; return object id
   int RegisterObject(CORBA::Object_ptr theObject);
@@ -565,7 +565,7 @@ public:
   template<class TInterface>
     typename TInterface::_var_type GetObjectByOldId( const int oldID )
   {
-    if ( StudyContext* myStudyContext = GetCurrentStudyContext() ) {
+    if ( myStudyContext ) {
       std::string ior = myStudyContext->getIORbyOldId( oldID );
       if ( !ior.empty() )
         return TInterface::_narrow(GetORB()->string_to_object( ior.c_str() ));
@@ -573,9 +573,6 @@ public:
     return TInterface::_nil();
   }
 
-  // Get current study ID
-  int GetCurrentStudyID();
-
   /*!
    * \brief Find SObject for an algo
    */
@@ -651,9 +648,6 @@ private:
                                                 const char* theCommandNameForPython,
                                                 const char* theFileNameForPython);
 
-  void setCurrentStudy( SALOMEDS::Study_ptr theStudy,
-                        bool                theStudyIsBeingClosed=false);
-
   std::vector<long> _GetInside(SMESH::SMESH_IDSource_ptr meshPart,
                                SMESH::ElementType     theElemType,
                                TopoDS_Shape& aShape,
@@ -671,11 +665,11 @@ private:
   // hypotheses managing
   std::map<std::string, GenericHypothesisCreator_i*> myHypCreatorMap;
 
-  std::map<int, StudyContext*>   myStudyContextMap;  // Map of study context objects
+  StudyContext*                  myStudyContext;  // study context
 
   GEOM_Client*                   myShapeReader;      // Shape reader
-  SALOMEDS::Study_var            myCurrentStudy;     // Current study
   CORBA::Boolean                 myIsEmbeddedMode;   // Current mode
+  CORBA::Boolean                 myIsEnablePublish;  // Enable publishing
 
   // Default color of groups
   std::string myDefaultGroupColor;
@@ -684,11 +678,11 @@ private:
   bool myToForgetMeshDataOnHypModif;
 
   // Dump Python: trace of API methods calls
-  std::map < int, Handle(TColStd_HSequenceOfAsciiString) > myPythonScripts;
-  bool                                                     myIsHistoricalPythonDump;
-  std::vector< int >                                       myLastParamIndex;
-  std::vector< std::string >                               myLastParameters;
-  std::string                                              myLastObj;
+  Handle(TColStd_HSequenceOfAsciiString) myPythonScript;
+  bool                                   myIsHistoricalPythonDump;
+  std::vector< int >                     myLastParamIndex;
+  std::vector< std::string >             myLastParameters;
+  std::string                            myLastObj;
 };
 
 
index e434840ddec0bf0ffc29c787052ecaab81033880..6b3da78a1efcc5e3c0909a379c9bd534f64de8b7 100644 (file)
@@ -40,6 +40,7 @@
 #include <Utils_ExceptHandlers.hxx>
 #include <SALOMEDS_wrap.hxx>
 #include <SALOMEDS_Attributes_wrap.hxx>
+#include <SALOME_KernelServices.hxx>
 
 #include <TCollection_AsciiString.hxx>
 #include <TopoDS_Solid.hxx>
@@ -162,10 +163,11 @@ long SMESH_Gen_i::GetBallElementsGroupsTag()
 
 bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
 {
-  if(MYDEBUG) MESSAGE("CanPublishInStudy - "<<!CORBA::is_nil(myCurrentStudy));
-  if( GetCurrentStudyID() < 0 )
-    return false;
+  if(MYDEBUG) MESSAGE("CanPublishInStudy - "<<!CORBA::is_nil(getStudyServant()));
   
+  if( !myIsEnablePublish )
+    return false;
+
   SMESH::SMESH_Mesh_var aMesh       = SMESH::SMESH_Mesh::_narrow(theIOR);
   if( !aMesh->_is_nil() )
     return true;
@@ -191,18 +193,26 @@ bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
 //purpose  : Put a result into a SALOMEDS::SObject_wrap or call UnRegister()!
 //=======================================================================
 
-SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(SALOMEDS::Study_ptr theStudy,
-                                                   CORBA::Object_ptr   theObject)
+SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(CORBA::Object_ptr theObject)
 {
   SALOMEDS::SObject_wrap aSO;
-  if ( !CORBA::is_nil( theStudy ) && !CORBA::is_nil( theObject ))
+  if ( !CORBA::is_nil( theObject ))
   {
     CORBA::String_var objStr = SMESH_Gen_i::GetORB()->object_to_string( theObject );
-    aSO = theStudy->FindObjectIOR( objStr.in() );
+    aSO = getStudyServant()->FindObjectIOR( objStr.in() );
   }
   return aSO._retn();
 }
 
+//=======================================================================
+//function : GetStudyPtr
+//purpose  : Get study from naming service
+//=======================================================================
+SALOMEDS::Study_ptr SMESH_Gen_i::getStudyServant()
+{
+  return SALOMEDS::Study::_duplicate(KERNEL::getStudyServant());
+}
+
 //=======================================================================
 //function : objectToServant
 //purpose  : 
@@ -255,14 +265,14 @@ TopoDS_Shape SMESH_Gen_i::GeomObjectToShape(GEOM::GEOM_Object_ptr theGeomObject)
 //purpose  : 
 //=======================================================================
 
-static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr   theStudy,
-                                     CORBA::Object_ptr     theIOR,
+static SALOMEDS::SObject_ptr publish(CORBA::Object_ptr     theIOR,
                                      SALOMEDS::SObject_ptr theFatherObject,
                                      const int             theTag = 0,
                                      const char*           thePixMap = 0,
                                      const bool            theSelectable = true)
 {
-  SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theStudy, theIOR );
+  SALOMEDS::Study_var theStudy = SMESH_Gen_i::getStudyServant();
+  SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theIOR );
   SALOMEDS::StudyBuilder_var     aStudyBuilder = theStudy->NewBuilder();
   SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder();
   bool isNewSO = false, isInUseCaseTree = false;
@@ -356,8 +366,7 @@ void SMESH_Gen_i::SetName(SALOMEDS::SObject_ptr theSObject,
                           const char*           theDefaultName)
 {
   if ( !theSObject->_is_nil() ) {
-    SALOMEDS::Study_var               aStudy = theSObject->GetStudy();
-    SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+    SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
     SALOMEDS::GenericAttribute_wrap   anAttr =
       aStudyBuilder->FindOrCreateAttribute( theSObject, "AttributeName" );
     SALOMEDS::AttributeName_wrap aNameAttr = anAttr;
@@ -389,8 +398,7 @@ void SMESH_Gen_i::SetPixMap(SALOMEDS::SObject_ptr theSObject,
 {
   if ( !theSObject->_is_nil() && thePixMap && strlen( thePixMap ))
   {
-    SALOMEDS::Study_var               aStudy = theSObject->GetStudy();
-    SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+    SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
     SALOMEDS::GenericAttribute_wrap anAttr =
       aStudyBuilder->FindOrCreateAttribute( theSObject, "AttributePixMap" );
     SALOMEDS::AttributePixMap_wrap aPMAttr = anAttr;
@@ -403,21 +411,21 @@ void SMESH_Gen_i::SetPixMap(SALOMEDS::SObject_ptr theSObject,
 //purpose  : 
 //=======================================================================
 
-static void addReference (SALOMEDS::Study_ptr   theStudy,
-                          SALOMEDS::SObject_ptr theSObject,
+static void addReference (SALOMEDS::SObject_ptr theSObject,
                           CORBA::Object_ptr     theToObject,
                           int                   theTag = 0)
 {
-  SALOMEDS::SObject_wrap aToObjSO = SMESH_Gen_i::ObjectToSObject( theStudy, theToObject );
+  SALOMEDS::Study_var aStudy = SMESH_Gen_i::getStudyServant();
+  SALOMEDS::SObject_wrap aToObjSO = SMESH_Gen_i::ObjectToSObject( theToObject );
   if ( !aToObjSO->_is_nil() && !theSObject->_is_nil() ) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
+    SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
     SALOMEDS::SObject_wrap aReferenceSO;
     if ( !theTag ) {
       // check if the reference to theToObject already exists
       // and find a free label for the reference object
       bool isReferred = false;
       int tag = 1;
-      SALOMEDS::ChildIterator_wrap anIter = theStudy->NewChildIterator( theSObject );
+      SALOMEDS::ChildIterator_wrap anIter = aStudy->NewChildIterator( theSObject );
       for ( ; !isReferred && anIter->More(); anIter->Next(), ++tag ) {
         SALOMEDS::SObject_wrap curSO = anIter->Value();
         if ( curSO->ReferencedObject( aReferenceSO.inout() )) {
@@ -444,7 +452,7 @@ static void addReference (SALOMEDS::Study_ptr   theStudy,
 
     // add reference to the use case tree
     // (to support tree representation customization and drag-n-drop)
-    SALOMEDS::UseCaseBuilder_wrap  useCaseBuilder = theStudy->GetUseCaseBuilder();
+    SALOMEDS::UseCaseBuilder_wrap  useCaseBuilder = aStudy->GetUseCaseBuilder();
     SALOMEDS::UseCaseIterator_wrap    useCaseIter = useCaseBuilder->GetUseCaseIterator(theSObject);
     for ( ; useCaseIter->More(); useCaseIter->Next() )
     {
@@ -464,42 +472,41 @@ static void addReference (SALOMEDS::Study_ptr   theStudy,
  */
 //=============================================================================
 
-SALOMEDS::SObject_ptr SMESH_Gen_i::PublishInStudy(SALOMEDS::Study_ptr   theStudy,
-                                                  SALOMEDS::SObject_ptr theSObject,
+SALOMEDS::SObject_ptr SMESH_Gen_i::PublishInStudy(SALOMEDS::SObject_ptr theSObject,
                                                   CORBA::Object_ptr     theIOR,
                                                   const char*           theName)
      throw (SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
   SALOMEDS::SObject_wrap aSO;
-  if ( CORBA::is_nil( theStudy ) || CORBA::is_nil( theIOR ))
+  if ( CORBA::is_nil( theIOR ))
     return aSO._retn();
   if(MYDEBUG) MESSAGE("PublishInStudy");
 
   // Publishing a mesh
   SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( theIOR );
   if( !aMesh->_is_nil() )
-    aSO = PublishMesh( theStudy, aMesh, theName );
+    aSO = PublishMesh( aMesh, theName );
 
   // Publishing a sub-mesh
   SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( theIOR );
   if( aSO->_is_nil() && !aSubMesh->_is_nil() ) {
     GEOM::GEOM_Object_var aShapeObject = aSubMesh->GetSubShape();
     aMesh = aSubMesh->GetFather();
-    aSO = PublishSubMesh( theStudy, aMesh, aSubMesh, aShapeObject, theName );
+    aSO = PublishSubMesh( aMesh, aSubMesh, aShapeObject, theName );
   }
 
   // Publishing a hypothesis or algorithm
   SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( theIOR );
   if ( aSO->_is_nil() && !aHyp->_is_nil() )
-    aSO = PublishHypothesis( theStudy, aHyp );
+    aSO = PublishHypothesis( aHyp );
 
   // Publishing a group
   SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(theIOR);
   if ( aSO->_is_nil() && !aGroup->_is_nil() ) {
     GEOM::GEOM_Object_var aShapeObject;
     aMesh = aGroup->GetMesh();
-    aSO = PublishGroup( theStudy, aMesh, aGroup, aShapeObject, theName );
+    aSO = PublishGroup( aMesh, aGroup, aShapeObject, theName );
   }
   if(MYDEBUG) MESSAGE("PublishInStudy_END");
 
@@ -511,17 +518,15 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishInStudy(SALOMEDS::Study_ptr   theStudy
 //purpose  : 
 //=======================================================================
 
-SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theStudy)
+SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent()
 {
-  if ( CORBA::is_nil( theStudy ))
-    return SALOMEDS::SComponent::_nil();
   if(MYDEBUG) MESSAGE("PublishComponent");
 
-  SALOMEDS::StudyBuilder_var    aStudyBuilder  = theStudy->NewBuilder(); 
-  SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder();
+  SALOMEDS::StudyBuilder_var    aStudyBuilder  = getStudyServant()->NewBuilder();
+  SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = getStudyServant()->GetUseCaseBuilder();
 
   CORBA::String_var   compDataType = ComponentDataType();
-  SALOMEDS::SComponent_wrap father = theStudy->FindComponent( compDataType.in() );
+  SALOMEDS::SComponent_wrap father = getStudyServant()->FindComponent( compDataType.in() );
   if ( !CORBA::is_nil( father ) ) {
     // check that the component is added to the use case browser
     if ( !useCaseBuilder->IsUseCaseNode( father ) ) {
@@ -564,21 +569,19 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theSt
 //purpose  : 
 //=======================================================================
 
-SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr   theStudy,
-                                                SMESH::SMESH_Mesh_ptr theMesh,
+SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SMESH::SMESH_Mesh_ptr theMesh,
                                                 const char*           theName)
 {
-  if ( CORBA::is_nil( theStudy ) ||
-       CORBA::is_nil( theMesh ))
+  if ( CORBA::is_nil( theMesh ))
     return SALOMEDS::SComponent::_nil();
   if(MYDEBUG) MESSAGE("PublishMesh--IN");
 
   // find or publish a mesh
 
-  SALOMEDS::SObject_wrap aMeshSO = ObjectToSObject( theStudy, theMesh );
+  SALOMEDS::SObject_wrap aMeshSO = ObjectToSObject( theMesh );
   if ( aMeshSO->_is_nil() )
   {
-    SALOMEDS::SComponent_wrap father = PublishComponent( theStudy );
+    SALOMEDS::SComponent_wrap father = PublishComponent();
     if ( father->_is_nil() )
       return aMeshSO._retn();
 
@@ -589,7 +592,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr   theStudy,
     else
       aTag++;
 
-    aMeshSO = publish (theStudy, theMesh, father, aTag, "ICON_SMESH_TREE_MESH_WARN" );
+    aMeshSO = publish ( theMesh, father, aTag, "ICON_SMESH_TREE_MESH_WARN" );
     if ( aMeshSO->_is_nil() )
       return aMeshSO._retn();
   }
@@ -599,7 +602,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr   theStudy,
 
   GEOM::GEOM_Object_var aShapeObject = theMesh->GetShapeToMesh();
   if ( !CORBA::is_nil( aShapeObject )) {
-    addReference( theStudy, aMeshSO, aShapeObject, GetRefOnShapeTag() );
+    addReference( aMeshSO, aShapeObject, GetRefOnShapeTag() );
 
     // Publish global hypotheses
 
@@ -607,8 +610,8 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr   theStudy,
     for ( CORBA::ULong i = 0; i < hypList->length(); i++ )
     {
       SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( hypList[ i ]);
-      SALOMEDS::SObject_wrap so = PublishHypothesis( theStudy, aHyp );
-      AddHypothesisToShape( theStudy, theMesh, aShapeObject, aHyp );
+      SALOMEDS::SObject_wrap so = PublishHypothesis( aHyp );
+      AddHypothesisToShape( theMesh, aShapeObject, aHyp );
     }
   }
 
@@ -623,7 +626,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr   theStudy,
     SMESH::SMESH_subMesh_ptr aSubMesh = (*subIt).second->_this();
     if ( !CORBA::is_nil( aSubMesh )) {
       aShapeObject = aSubMesh->GetSubShape();
-      SALOMEDS::SObject_wrap( PublishSubMesh( theStudy, theMesh, aSubMesh, aShapeObject ));
+      SALOMEDS::SObject_wrap( PublishSubMesh( theMesh, aSubMesh, aShapeObject ));
     }
   }
 
@@ -638,7 +641,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr   theStudy,
       SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGroup );
       if ( !aGeomGroup->_is_nil() )
         aShapeObj = aGeomGroup->GetShape();
-      SALOMEDS::SObject_wrap( PublishGroup( theStudy, theMesh, aGroup, aShapeObj ));
+      SALOMEDS::SObject_wrap( PublishGroup( theMesh, aGroup, aShapeObj ));
     }
   }
 
@@ -651,22 +654,20 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr   theStudy,
 //purpose  : 
 //=======================================================================
 
-SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SALOMEDS::Study_ptr      theStudy,
-                                                   SMESH::SMESH_Mesh_ptr    theMesh,
+SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SMESH::SMESH_Mesh_ptr    theMesh,
                                                    SMESH::SMESH_subMesh_ptr theSubMesh,
                                                    GEOM::GEOM_Object_ptr    theShapeObject,
                                                    const char*              theName)
 {
-  if (theStudy->_is_nil() || theMesh->_is_nil() ||
-      theSubMesh->_is_nil() || theShapeObject->_is_nil() )
+  if ( theMesh->_is_nil() || theSubMesh->_is_nil() || theShapeObject->_is_nil() )
     return SALOMEDS::SObject::_nil();
 
-  SALOMEDS::SObject_wrap aSubMeshSO = ObjectToSObject( theStudy, theSubMesh );
+  SALOMEDS::SObject_wrap aSubMeshSO = ObjectToSObject( theSubMesh );
   if ( aSubMeshSO->_is_nil() )
   {
-    SALOMEDS::SObject_wrap aMeshSO = ObjectToSObject( theStudy, theMesh );
+    SALOMEDS::SObject_wrap aMeshSO = ObjectToSObject( theMesh );
     if ( aMeshSO->_is_nil() ) {
-      aMeshSO = PublishMesh( theStudy, theMesh );
+      aMeshSO = PublishMesh( theMesh );
       if ( aMeshSO->_is_nil())
         return SALOMEDS::SObject::_nil();
     }
@@ -705,8 +706,8 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SALOMEDS::Study_ptr      theS
     }
 
     // Find or create submesh root
-    SALOMEDS::SObject_wrap aRootSO = publish (theStudy, CORBA::Object::_nil(),
-                                             aMeshSO, aRootTag, 0, false );
+    SALOMEDS::SObject_wrap aRootSO = publish ( CORBA::Object::_nil(),
+                                               aMeshSO, aRootTag, 0, false );
     if ( aRootSO->_is_nil() )
       return aSubMeshSO._retn();
 
@@ -716,7 +717,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SALOMEDS::Study_ptr      theS
     SMESH::array_of_ElementType_var elemTypes = theSubMesh->GetTypes();
     const int isEmpty = ( elemTypes->length() == 0 );
     const char* pm[2] = { "ICON_SMESH_TREE_MESH", "ICON_SMESH_TREE_MESH_WARN" };
-    aSubMeshSO = publish (theStudy, theSubMesh, aRootSO, 0, pm[isEmpty] );
+    aSubMeshSO = publish ( theSubMesh, aRootSO, 0, pm[isEmpty] );
     if ( aSubMeshSO->_is_nil() )
       return aSubMeshSO._retn();
   }
@@ -724,15 +725,15 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SALOMEDS::Study_ptr      theS
 
   // Add reference to theShapeObject
 
-  addReference( theStudy, aSubMeshSO, theShapeObject, 1 );
+  addReference( aSubMeshSO, theShapeObject, 1 );
 
   // Publish hypothesis
 
   SMESH::ListOfHypothesis_var hypList = theMesh->GetHypothesisList( theShapeObject );
   for ( CORBA::ULong i = 0; i < hypList->length(); i++ ) {
     SMESH::SMESH_Hypothesis_var aHyp = SMESH::SMESH_Hypothesis::_narrow( hypList[ i ]);
-    SALOMEDS::SObject_wrap so = PublishHypothesis( theStudy, aHyp );
-    AddHypothesisToShape( theStudy, theMesh, theShapeObject, aHyp );
+    SALOMEDS::SObject_wrap so = PublishHypothesis( aHyp );
+    AddHypothesisToShape( theMesh, theShapeObject, aHyp );
   }
 
   return aSubMeshSO._retn();
@@ -743,21 +744,20 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishSubMesh (SALOMEDS::Study_ptr      theS
 //purpose  : 
 //=======================================================================
 
-SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr    theStudy,
-                                                 SMESH::SMESH_Mesh_ptr  theMesh,
+SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SMESH::SMESH_Mesh_ptr  theMesh,
                                                  SMESH::SMESH_GroupBase_ptr theGroup,
                                                  GEOM::GEOM_Object_ptr  theShapeObject,
                                                  const char*            theName)
 {
-  if (theStudy->_is_nil() || theMesh->_is_nil() || theGroup->_is_nil() )
+  if (theMesh->_is_nil() || theGroup->_is_nil() )
     return SALOMEDS::SObject::_nil();
 
-  SALOMEDS::SObject_wrap aGroupSO = ObjectToSObject( theStudy, theGroup );
+  SALOMEDS::SObject_wrap aGroupSO = ObjectToSObject( theGroup );
   if ( aGroupSO->_is_nil() )
   {
-    SALOMEDS::SObject_wrap aMeshSO = ObjectToSObject( theStudy, theMesh );
+    SALOMEDS::SObject_wrap aMeshSO = ObjectToSObject( theMesh );
     if ( aMeshSO->_is_nil() ) {
-      aMeshSO = PublishInStudy( theStudy, SALOMEDS::SObject::_nil(), theMesh, "");
+      aMeshSO = PublishInStudy( SALOMEDS::SObject::_nil(), theMesh, "");
       if ( aMeshSO->_is_nil())
         return SALOMEDS::SObject::_nil();
     }
@@ -773,8 +773,8 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr    theStudy
       long aRootTag = GetNodeGroupsTag() + aType - 1;
 
       // Find or create groups root
-      SALOMEDS::SObject_wrap aRootSO = publish (theStudy, CORBA::Object::_nil(),
-                                               aMeshSO, aRootTag, 0, false );
+      SALOMEDS::SObject_wrap aRootSO = publish ( CORBA::Object::_nil(),
+                                                 aMeshSO, aRootTag, 0, false );
       if ( aRootSO->_is_nil() ) return SALOMEDS::SObject::_nil();
 
       if ( aType < sizeof(aRootNames)/sizeof(char*) )
@@ -798,7 +798,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr    theStudy
             isEmpty = ( allElemTypes[i] != theGroup->GetType() );
         }
       }
-      aGroupSO = publish (theStudy, theGroup, aRootSO, 0, pm[isEmpty].c_str() );
+      aGroupSO = publish ( theGroup, aRootSO, 0, pm[isEmpty].c_str() );
     }
     if ( aGroupSO->_is_nil() )
       return aGroupSO._retn();
@@ -808,7 +808,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr    theStudy
 
   //Add reference to geometry
   if ( !theShapeObject->_is_nil() )
-    addReference( theStudy, aGroupSO, theShapeObject, 1 );
+    addReference( aGroupSO, theShapeObject, 1 );
 
   return aGroupSO._retn();
 }
@@ -819,20 +819,19 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishGroup (SALOMEDS::Study_ptr    theStudy
 //=======================================================================
 
 SALOMEDS::SObject_ptr
-  SMESH_Gen_i::PublishHypothesis (SALOMEDS::Study_ptr         theStudy,
-                                  SMESH::SMESH_Hypothesis_ptr theHyp,
+  SMESH_Gen_i::PublishHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp,
                                   const char*                 theName)
 {
   if(MYDEBUG) MESSAGE("PublishHypothesis")
-  if (theStudy->_is_nil() || theHyp->_is_nil())
+  if (theHyp->_is_nil())
     return SALOMEDS::SObject::_nil();
 
   CORBA::String_var hypType = theHyp->GetName();
 
-  SALOMEDS::SObject_wrap aHypSO = ObjectToSObject( theStudy, theHyp );
+  SALOMEDS::SObject_wrap aHypSO = ObjectToSObject( theHyp );
   if ( aHypSO->_is_nil() )
   {
-    SALOMEDS::SComponent_wrap father = PublishComponent( theStudy );
+    SALOMEDS::SComponent_wrap father = PublishComponent();
     if ( father->_is_nil() )
       return aHypSO._retn();
 
@@ -840,7 +839,7 @@ SALOMEDS::SObject_ptr
     bool isAlgo = ( !SMESH::SMESH_Algo::_narrow( theHyp )->_is_nil() );
     int aRootTag = isAlgo ? GetAlgorithmsRootTag() : GetHypothesisRootTag();
     SALOMEDS::SObject_wrap aRootSO =
-      publish (theStudy, CORBA::Object::_nil(),father, aRootTag,
+      publish (CORBA::Object::_nil(),father, aRootTag,
                isAlgo ? "ICON_SMESH_TREE_ALGO" : "ICON_SMESH_TREE_HYPO", false);
     SetName( aRootSO, isAlgo ?  "Algorithms" : "Hypotheses" );
 
@@ -851,7 +850,7 @@ SALOMEDS::SObject_ptr
     string pluginName = myHypCreatorMap[ hypType.in() ]->GetModuleName();
     if ( pluginName != "StdMeshers" )
       aPmName = pluginName + "::" + aPmName;
-    aHypSO = publish( theStudy, theHyp, aRootSO, 0, aPmName.c_str() );
+    aHypSO = publish( theHyp, aRootSO, 0, aPmName.c_str() );
   }
 
   SetName( aHypSO, theName, hypType.in() );
@@ -866,8 +865,7 @@ SALOMEDS::SObject_ptr
 //=======================================================================
 
 SALOMEDS::SObject_ptr
-  SMESH_Gen_i::GetMeshOrSubmeshByShape (SALOMEDS::Study_ptr   theStudy,
-                                        SMESH::SMESH_Mesh_ptr theMesh,
+  SMESH_Gen_i::GetMeshOrSubmeshByShape (SMESH::SMESH_Mesh_ptr theMesh,
                                         GEOM::GEOM_Object_ptr theShape)
 {
   if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape")
@@ -886,12 +884,12 @@ SALOMEDS::SObject_ptr
   if ( !aShape.IsNull() && mesh_i && mesh_i->GetImpl().GetMeshDS() ) {
     SMESHDS_Mesh* meshDS = mesh_i->GetImpl().GetMeshDS();
     if ( aShape.IsSame( meshDS->ShapeToMesh() ))
-      aMeshOrSubMesh = ObjectToSObject( theStudy, theMesh );
+      aMeshOrSubMesh = ObjectToSObject( theMesh );
     else {
       int shapeID = meshDS->ShapeToIndex( aShape );
       SMESH::SMESH_subMesh_var aSubMesh = mesh_i->getSubMesh(shapeID);
       if ( !aSubMesh->_is_nil() )
-        aMeshOrSubMesh = ObjectToSObject( theStudy, aSubMesh );
+        aMeshOrSubMesh = ObjectToSObject( aSubMesh );
     }
   }
   if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape--END")
@@ -903,27 +901,26 @@ SALOMEDS::SObject_ptr
 //purpose  : 
 //=======================================================================
 
-bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr         theStudy,
-                                       SMESH::SMESH_Mesh_ptr       theMesh,
+bool SMESH_Gen_i::AddHypothesisToShape(SMESH::SMESH_Mesh_ptr       theMesh,
                                        GEOM::GEOM_Object_ptr       theShape,
                                        SMESH::SMESH_Hypothesis_ptr theHyp)
 {
   if(MYDEBUG) MESSAGE("AddHypothesisToShape")
-  if (theStudy->_is_nil() || theMesh->_is_nil() ||
+  if (theMesh->_is_nil() ||
       theHyp->_is_nil() || (theShape->_is_nil()
                             && theMesh->HasShapeToMesh()) )
     return false;
 
-  SALOMEDS::SObject_wrap aMeshSO = ObjectToSObject( theStudy, theMesh );
+  SALOMEDS::SObject_wrap aMeshSO = ObjectToSObject( theMesh );
   if ( aMeshSO->_is_nil() )
-    aMeshSO = PublishMesh( theStudy, theMesh );
-  SALOMEDS::SObject_wrap aHypSO = PublishHypothesis( theStudy, theHyp );
+    aMeshSO = PublishMesh( theMesh );
+  SALOMEDS::SObject_wrap aHypSO = PublishHypothesis( theHyp );
   if ( aMeshSO->_is_nil() || aHypSO->_is_nil())
     return false;
 
   // Find a mesh or submesh referring to theShape
   SALOMEDS::SObject_wrap aMeshOrSubMesh =
-    GetMeshOrSubmeshByShape( theStudy, theMesh, theShape );
+    GetMeshOrSubmeshByShape( theMesh, theShape );
   if ( aMeshOrSubMesh->_is_nil() )
   {
     // publish submesh
@@ -933,7 +930,7 @@ bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr         theStudy,
       SMESHDS_Mesh* meshDS = mesh_i->GetImpl().GetMeshDS();
       int shapeID = meshDS->ShapeToIndex( aShape );
       SMESH::SMESH_subMesh_var aSubMesh = mesh_i->getSubMesh(shapeID);
-      aMeshOrSubMesh = PublishSubMesh( theStudy, theMesh, aSubMesh, theShape );
+      aMeshOrSubMesh = PublishSubMesh( theMesh, aSubMesh, theShape );
     }
     if ( aMeshOrSubMesh->_is_nil() )
       return false;
@@ -942,12 +939,12 @@ bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr         theStudy,
   //Find or Create Applied Hypothesis root
   bool aIsAlgo = !SMESH::SMESH_Algo::_narrow( theHyp )->_is_nil();
   SALOMEDS::SObject_wrap AHR =
-    publish (theStudy, CORBA::Object::_nil(), aMeshOrSubMesh,
+    publish (CORBA::Object::_nil(), aMeshOrSubMesh,
              aIsAlgo ? GetRefOnAppliedAlgorithmsTag() : GetRefOnAppliedHypothesisTag(),
              aIsAlgo ? "ICON_SMESH_TREE_ALGO" : "ICON_SMESH_TREE_HYPO", false);
   SetName( AHR, aIsAlgo ? "Applied algorithms" : "Applied hypotheses" );
 
-  addReference( theStudy, AHR, theHyp );
+  addReference( AHR, theHyp );
 
   if(MYDEBUG) MESSAGE("AddHypothesisToShape--END")
   return true;
@@ -958,17 +955,16 @@ bool SMESH_Gen_i::AddHypothesisToShape(SALOMEDS::Study_ptr         theStudy,
 //purpose  : 
 //=======================================================================
 
-bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy,
-                                            SMESH::SMESH_Mesh_ptr       theMesh,
+bool SMESH_Gen_i::RemoveHypothesisFromShape(SMESH::SMESH_Mesh_ptr       theMesh,
                                             GEOM::GEOM_Object_ptr       theShape,
                                             SMESH::SMESH_Hypothesis_ptr theHyp)
 {
-  if (theStudy->_is_nil() || theMesh->_is_nil() ||
+  if (theMesh->_is_nil() ||
       theHyp->_is_nil() || (theShape->_is_nil()
                             && theMesh->HasShapeToMesh()))
     return false;
 
-  SALOMEDS::SObject_wrap aHypSO = ObjectToSObject( theStudy, theHyp );
+  SALOMEDS::SObject_wrap aHypSO = ObjectToSObject( theHyp );
   if ( aHypSO->_is_nil() )
     return false;
 
@@ -976,13 +972,13 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy
 
   // Find a mesh or sub-mesh referring to theShape
   SALOMEDS::SObject_wrap aMeshOrSubMesh =
-    GetMeshOrSubmeshByShape( theStudy, theMesh, theShape );
+    GetMeshOrSubmeshByShape( theMesh, theShape );
   if ( aMeshOrSubMesh->_is_nil() )
     return false;
 
   // Find and remove a reference to aHypSO
   SALOMEDS::SObject_wrap aRef, anObj;
-  SALOMEDS::ChildIterator_wrap it = theStudy->NewChildIterator( aMeshOrSubMesh );
+  SALOMEDS::ChildIterator_wrap it = getStudyServant()->NewChildIterator( aMeshOrSubMesh );
   bool found = false;
   for ( it->InitEx( true ); ( it->More() && !found ); it->Next() ) {
     anObj = it->Value();
@@ -993,7 +989,7 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy
     }
     if ( found )
     {
-      SALOMEDS::StudyBuilder_var builder = theStudy->NewBuilder();
+      SALOMEDS::StudyBuilder_var builder = getStudyServant()->NewBuilder();
       builder->RemoveObject( anObj );
     }
   }
@@ -1012,10 +1008,6 @@ bool SMESH_Gen_i::RemoveHypothesisFromShape(SALOMEDS::Study_ptr         theStudy
 
 void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theParameters)
 {
-  SALOMEDS::Study_var aStudy = GetCurrentStudy();
-  if ( aStudy->_is_nil() )
-    return;
-
   // find variable names within theParameters
 
   myLastObj.clear();
@@ -1032,7 +1024,7 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP
       if ( prevPos < pos )
       {
         string val( theParameters + prevPos, theParameters + pos );
-        if ( !aStudy->IsVariable( val.c_str() ))
+        if ( !getStudyServant()->IsVariable( val.c_str() ))
           val.clear();
         myLastParameters.push_back( val );
         nbVars += (! myLastParameters.back().empty() );
@@ -1054,14 +1046,14 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP
   // (2) indices of found variables in myLastParamIndex.
 
   // remember theObject
-  SALOMEDS::SObject_wrap aSObj =  ObjectToSObject(aStudy,theObject);
+  SALOMEDS::SObject_wrap aSObj =  ObjectToSObject(theObject);
   if ( aSObj->_is_nil() )
     return;
   CORBA::String_var anObjEntry = aSObj->GetID();
   myLastObj = anObjEntry.in();
 
   // get a string of variable names
-  SALOMEDS::StudyBuilder_var   aStudyBuilder = aStudy->NewBuilder();
+  SALOMEDS::StudyBuilder_var   aStudyBuilder = getStudyServant()->NewBuilder();
   SALOMEDS::GenericAttribute_wrap     anAttr =
     aStudyBuilder->FindOrCreateAttribute( aSObj, "AttributeString" );
   SALOMEDS::AttributeString_wrap aStringAttr = anAttr;
@@ -1130,15 +1122,11 @@ void SMESH_Gen_i::UpdateParameters(CORBA::Object_ptr theObject, const char* theP
 std::vector< std::string > SMESH_Gen_i::GetAllParameters(const std::string& theObjectEntry) const
 {
   std::vector< std::string > varNames;
-  if ( myCurrentStudy->_is_nil() )
-    return varNames;
 
-  SALOMEDS::SObject_wrap aSObj = myCurrentStudy->FindObjectID( theObjectEntry.c_str() );
-  if ( myCurrentStudy->_is_nil() )
-    return varNames;
+  SALOMEDS::SObject_wrap aSObj = getStudyServant()->FindObjectID( theObjectEntry.c_str() );
 
   // get a string of variable names
-  SALOMEDS::StudyBuilder_var   aStudyBuilder = myCurrentStudy->NewBuilder();
+  SALOMEDS::StudyBuilder_var   aStudyBuilder = getStudyServant()->NewBuilder();
   SALOMEDS::GenericAttribute_wrap     anAttr =
     aStudyBuilder->FindOrCreateAttribute( aSObj, "AttributeString" );
   SALOMEDS::AttributeString_wrap aStringAttr = anAttr;
@@ -1183,7 +1171,7 @@ std::vector< std::string > SMESH_Gen_i::GetAllParameters(const std::string& theO
 //   //const char* aParameters = theParameters;
 // //   const char* aParameters = CORBA::string_dup(theParameters);
 //   TCollection_AsciiString anInputParams;
-//   SALOMEDS::Study_var aStudy = GetCurrentStudy();
+//   SALOMEDS::Study_var aStudy = getStudyServant();
 //   if( !aStudy->_is_nil() ) {
 // //     SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(theParameters);
 // //     for(int j=0;j<aSections->length();j++) {
@@ -1232,7 +1220,7 @@ char* SMESH_Gen_i::GetParameters(CORBA::Object_ptr theObject)
 {
   CORBA::String_var aResult("");
 
-  SALOMEDS::SObject_wrap aSObj = ObjectToSObject( myCurrentStudy, theObject );
+  SALOMEDS::SObject_wrap aSObj = ObjectToSObject( theObject );
   if ( !aSObj->_is_nil() )
   {
     SALOMEDS::GenericAttribute_wrap attr;
index d580262ded1d33b8a9dc214ee0e14d6ed3e21475..354a1daf0fbba3a0bbd680fbe2e5d60dddde8cdd 100644 (file)
@@ -150,9 +150,8 @@ void SMESH_GroupBase_i::SetName( const char* theName )
 
   // Update group name in a study
   SMESH_Gen_i*              aGen = myMeshServant->GetGen();
-  SALOMEDS::Study_var      aStudy = aGen->GetCurrentStudy();
   SMESH::SMESH_GroupBase_var aGrp = _this();
-  SALOMEDS::SObject_var      anSO = aGen->ObjectToSObject( aStudy, aGrp );
+  SALOMEDS::SObject_var      anSO = aGen->ObjectToSObject( aGrp );
   if ( !anSO->_is_nil() )
   {
     aGen->SetName( anSO, theName );
index b3e4e48325a354797167f1a2e8973ca85d028712..9b9779d68505ced3e554ecd12f1cc19695906ea0 100644 (file)
@@ -128,8 +128,7 @@ bool SMESH_Hypothesis_i::IsPublished()
   bool res = false;
   if ( SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen())
   {
-    SALOMEDS::Study_var study = gen->GetCurrentStudy();
-    SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( study, _this());
+    SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( _this());
     res = !SO->_is_nil();
   }
   return res;
index 85f1d01964e6fe6d89d8ed771132247748d4f6a4..ee8baec36a57907d6ee10f3fd5b1e015f4c0332f 100644 (file)
@@ -133,7 +133,6 @@ class SMESH_I_EXPORT GenericHypothesisCreator_i
 public:
   // Create a hypothesis
   virtual SMESH_Hypothesis_i* Create(PortableServer::POA_ptr thePOA,
-                                     int                     theStudyId,
                                      ::SMESH_Gen*            theGenImpl) = 0;
   virtual ~GenericHypothesisCreator_i() {}
 
@@ -153,10 +152,9 @@ template <class T> class HypothesisCreator_i: public GenericHypothesisCreator_i
 {
 public:
   virtual SMESH_Hypothesis_i* Create (PortableServer::POA_ptr thePOA,
-                                      int                     theStudyId,
                                       ::SMESH_Gen*            theGenImpl)
   {
-    return new T (thePOA, theStudyId, theGenImpl);
+    return new T (thePOA, theGenImpl);
   };
 };
 
index 6cad2a92eb6c6fed23f9df6f5a0e75e8eca01be2..4f8809f99951434c43091235847d92b1b40eabe4 100644 (file)
@@ -102,7 +102,7 @@ namespace MeshEditor_I {
     SMDSAbs_ElementType myPreviewType; // type to show
     //!< Constructor
     TPreviewMesh(SMDSAbs_ElementType previewElements = SMDSAbs_All) {
-      _isShapeToMesh = (_id =_studyId = 0);
+      _isShapeToMesh = (_id = 0);
       _myMeshDS  = new SMESHDS_Mesh( _id, true );
       myPreviewType = previewElements;
     }
@@ -5395,8 +5395,7 @@ SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::makeMesh(const char* theMeshName)
 {
   SMESH_Gen_i*              gen = SMESH_Gen_i::GetSMESHGen();
   SMESH::SMESH_Mesh_var    mesh = gen->CreateEmptyMesh();
-  SALOMEDS::Study_var     study = gen->GetCurrentStudy();
-  SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject( study, mesh );
+  SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject( mesh );
   gen->SetName( meshSO, theMeshName, "Mesh" );
   gen->SetPixMap( meshSO, "ICON_SMESH_TREE_MESH_IMPORTED");
 
index 76fe5989c8a613e24bedbff5489702ad24851041..a38dd896f89afe2660bf15b49ef60e6f300c3472 100644 (file)
@@ -104,14 +104,12 @@ int SMESH_Mesh_i::_idGenerator = 0;
 //=============================================================================
 
 SMESH_Mesh_i::SMESH_Mesh_i( PortableServer::POA_ptr thePOA,
-                            SMESH_Gen_i*            gen_i,
-                            CORBA::Long             studyId )
+                            SMESH_Gen_i*            gen_i )
 : SALOME::GenericObj_i( thePOA )
 {
   _impl          = NULL;
   _gen_i         = gen_i;
   _id            = _idGenerator++;
-  _studyId       = studyId;
   _editor        = NULL;
   _previewEditor = NULL;
   _preMeshInfo   = NULL;
@@ -239,9 +237,7 @@ GEOM::GEOM_Object_ptr SMESH_Mesh_i::GetShapeToMesh()
         for ( ; data != _geomGroupData.end(); ++data )
           if ( data->_smeshObject->_is_equivalent( _this() ))
           {
-            SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-            if ( study->_is_nil() ) break;
-            SALOMEDS::SObject_wrap so = study->FindObjectID( data->_groupEntry.c_str() );
+            SALOMEDS::SObject_wrap so = SMESH_Gen_i::getStudyServant()->FindObjectID( data->_groupEntry.c_str() );
             CORBA::Object_var     obj = _gen_i->SObjectToObject( so );
             aShapeObj = GEOM::GEOM_Object::_narrow( obj );
             break;
@@ -406,8 +402,8 @@ SMESH_Mesh_i::ImportMEDFile( const char* theFileName, const char* theMeshName )
   CreateGroupServants();
 
   int major, minor, release;
-  if( !MED::getMEDVersion( theFileName, major, minor, release ) )
-    major = minor = release = -1;
+  major = minor = release = 0;
+  MED::GetMEDVersion(theFileName, major, minor, release);
   _medFileInfo           = new SMESH::MedFileInfo();
   _medFileInfo->fileName = theFileName;
   _medFileInfo->fileSize = 0;
@@ -447,19 +443,6 @@ SMESH::DriverMED_ReadStatus SMESH_Mesh_i::ImportCGNSFile( const char*  theFileNa
   return ConvertDriverMEDReadStatus(status);
 }
 
-//================================================================================
-/*!
- * \brief Return string representation of a MED file version comprising nbDigits
- */
-//================================================================================
-
-char* SMESH_Mesh_i::GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits)
-{
-  string ver = DriverMED_W_SMESHDS_Mesh::GetVersionString(MED::EVersion(version),
-                                                          nbDigits);
-  return CORBA::string_dup( ver.c_str() );
-}
-
 //=============================================================================
 /*!
  *  ImportUNVFile
@@ -499,8 +482,7 @@ int SMESH_Mesh_i::ImportSTLFile( const char* theFileName )
   std::string name = _impl->STLToMesh( theFileName );
   if ( !name.empty() )
   {
-    SALOMEDS::Study_var     study = _gen_i->GetCurrentStudy();
-    SALOMEDS::SObject_wrap meshSO = _gen_i->ObjectToSObject( study, _this() );
+    SALOMEDS::SObject_wrap meshSO = _gen_i->ObjectToSObject( _this() );
     _gen_i->SetName( meshSO, name.c_str() );
   }
 
@@ -609,8 +591,7 @@ SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Object_ptr       aSubShape,
   SMESH::SMESH_Mesh_var mesh( _this() );
   if ( !SMESH_Hypothesis::IsStatusFatal(status) )
   {
-    SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-    _gen_i->AddHypothesisToShape( study, mesh, aSubShape, anHyp );
+    _gen_i->AddHypothesisToShape( mesh, aSubShape, anHyp );
   }
   if(MYDEBUG) MESSAGE( " AddHypothesis(): status = " << status );
 
@@ -695,8 +676,7 @@ SMESH::Hypothesis_Status SMESH_Mesh_i::RemoveHypothesis(GEOM::GEOM_Object_ptr aS
 
   if ( !SMESH_Hypothesis::IsStatusFatal(status) )
   {
-    SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-    _gen_i->RemoveHypothesisFromShape( study, mesh, aSubShape, anHyp );
+    _gen_i->RemoveHypothesisFromShape( mesh, aSubShape, anHyp );
   }
   // Update Python script
   if(_impl->HasShapeToMesh())
@@ -866,9 +846,8 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::GetSubMesh(GEOM::GEOM_Object_ptr aSubShap
       subMesh = createSubMesh( aSubShape );
     if ( _gen_i->CanPublishInStudy( subMesh ))
     {
-      SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
       SALOMEDS::SObject_wrap aSO =
-        _gen_i->PublishSubMesh( study, aMesh, subMesh, aSubShape, theName );
+        _gen_i->PublishSubMesh( aMesh, subMesh, aSubShape, theName );
       if ( !aSO->_is_nil()) {
         // Update Python script
         TPythonDump() << aSO << " = " << aMesh << ".GetSubMesh( "
@@ -897,28 +876,25 @@ void SMESH_Mesh_i::RemoveSubMesh( SMESH::SMESH_subMesh_ptr theSubMesh )
     return;
 
   GEOM::GEOM_Object_var aSubShape;
-  SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
-  if ( !aStudy->_is_nil() )  {
-    // Remove submesh's SObject
-    SALOMEDS::SObject_wrap anSO = _gen_i->ObjectToSObject( aStudy, theSubMesh );
-    if ( !anSO->_is_nil() ) {
-      long aTag = SMESH_Gen_i::GetRefOnShapeTag();
-      SALOMEDS::SObject_wrap anObj, aRef;
-      if ( anSO->FindSubObject( aTag, anObj.inout() ) &&
-           anObj->ReferencedObject( aRef.inout() ))
-      {
-        CORBA::Object_var obj = aRef->GetObject();
-        aSubShape = GEOM::GEOM_Object::_narrow( obj );
-      }
-      // if ( aSubShape->_is_nil() ) // not published shape (IPAL13617)
-      //   aSubShape = theSubMesh->GetSubShape();
+  // Remove submesh's SObject
+  SALOMEDS::SObject_wrap anSO = _gen_i->ObjectToSObject( theSubMesh );
+  if ( !anSO->_is_nil() ) {
+    long aTag = SMESH_Gen_i::GetRefOnShapeTag();
+    SALOMEDS::SObject_wrap anObj, aRef;
+    if ( anSO->FindSubObject( aTag, anObj.inout() ) &&
+         anObj->ReferencedObject( aRef.inout() ))
+    {
+      CORBA::Object_var obj = aRef->GetObject();
+      aSubShape = GEOM::GEOM_Object::_narrow( obj );
+    }
+    // if ( aSubShape->_is_nil() ) // not published shape (IPAL13617)
+    //   aSubShape = theSubMesh->GetSubShape();
 
-      SALOMEDS::StudyBuilder_var builder = aStudy->NewBuilder();
-      builder->RemoveObjectWithChildren( anSO );
+    SALOMEDS::StudyBuilder_var builder = SMESH_Gen_i::getStudyServant()->NewBuilder();
+    builder->RemoveObjectWithChildren( anSO );
 
-      // Update Python script
-      TPythonDump() << SMESH::SMESH_Mesh_var( _this() ) << ".RemoveSubMesh( " << anSO << " )";
-    }
+    // Update Python script
+    TPythonDump() << SMESH::SMESH_Mesh_var( _this() ) << ".RemoveSubMesh( " << anSO << " )";
   }
 
   if ( removeSubMesh( theSubMesh, aSubShape.in() ))
@@ -948,9 +924,8 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::CreateGroup( SMESH::ElementType theElemType
   if ( _gen_i->CanPublishInStudy( aNewGroup ) )
   {
     SMESH::SMESH_Mesh_var mesh = _this();
-    SALOMEDS::Study_var  study = _gen_i->GetCurrentStudy();
     SALOMEDS::SObject_wrap aSO =
-      _gen_i->PublishGroup( study, mesh, aNewGroup, GEOM::GEOM_Object::_nil(), theName);
+      _gen_i->PublishGroup( mesh, aNewGroup, GEOM::GEOM_Object::_nil(), theName);
     if ( !aSO->_is_nil())
       // Update Python script
       TPythonDump() << aSO << " = " << mesh << ".CreateGroup( "
@@ -985,9 +960,8 @@ SMESH_Mesh_i::CreateGroupFromGEOM (SMESH::ElementType    theElemType,
     if ( _gen_i->CanPublishInStudy( aNewGroup ) )
     {
       SMESH::SMESH_Mesh_var mesh = _this();
-      SALOMEDS::Study_var  study = _gen_i->GetCurrentStudy();
       SALOMEDS::SObject_wrap aSO =
-        _gen_i->PublishGroup( study, mesh, aNewGroup, theGeomObj, theName );
+        _gen_i->PublishGroup( mesh, aNewGroup, theGeomObj, theName );
       if ( !aSO->_is_nil())
         TPythonDump() << aSO << " = " << mesh << ".CreateGroupFromGEOM( "
                       << theElemType << ", '" << theName << "', " << theGeomObj << " )";
@@ -1034,9 +1008,8 @@ SMESH_Mesh_i::CreateGroupFromFilter(SMESH::ElementType theElemType,
   if ( _gen_i->CanPublishInStudy( aNewGroup ) )
   {
     SMESH::SMESH_Mesh_var mesh = _this();
-    SALOMEDS::Study_var  study = _gen_i->GetCurrentStudy();
     SALOMEDS::SObject_wrap aSO =
-      _gen_i->PublishGroup( study, mesh, aNewGroup, GEOM::GEOM_Object::_nil(), theName );
+      _gen_i->PublishGroup( mesh, aNewGroup, GEOM::GEOM_Object::_nil(), theName );
 
     if ( !aSO->_is_nil())
       pd << aSO << " = " << mesh << ".CreateGroupFromFilter( "
@@ -1063,19 +1036,15 @@ void SMESH_Mesh_i::RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup )
   if ( !aGroup )
     return;
 
-  SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
-  if ( !aStudy->_is_nil() )
+  SALOMEDS::SObject_wrap aGroupSO = _gen_i->ObjectToSObject( theGroup );
+  if ( !aGroupSO->_is_nil() )
   {
-    SALOMEDS::SObject_wrap aGroupSO = _gen_i->ObjectToSObject( aStudy, theGroup );
-    if ( !aGroupSO->_is_nil() )
-    {
-      // Update Python script
-      TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".RemoveGroup( " << aGroupSO << " )";
+    // Update Python script
+    TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".RemoveGroup( " << aGroupSO << " )";
 
-      // Remove group's SObject
-      SALOMEDS::StudyBuilder_var builder = aStudy->NewBuilder();
-      builder->RemoveObjectWithChildren( aGroupSO );
-    }
+    // Remove group's SObject
+    SALOMEDS::StudyBuilder_var builder = SMESH_Gen_i::getStudyServant()->NewBuilder();
+    builder->RemoveObjectWithChildren( aGroupSO );
   }
   aGroup->Modified(/*removed=*/true); // notify dependent Filter with FT_BelongToMeshGroup criterion
 
@@ -1836,14 +1805,13 @@ void SMESH_Mesh_i::addGeomGroupData(GEOM::GEOM_Object_ptr theGeomObj,
   if ( CORBA::is_nil( theGeomObj ) || theGeomObj->GetType() != GEOM_GROUP )
     return;
   // group SO
-  SALOMEDS::Study_var    study   = _gen_i->GetCurrentStudy();
-  SALOMEDS::SObject_wrap groupSO = _gen_i->ObjectToSObject( study, theGeomObj );
+  SALOMEDS::SObject_wrap groupSO = _gen_i->ObjectToSObject( theGeomObj );
   if ( groupSO->_is_nil() )
     return;
   // group indices
   GEOM::GEOM_Gen_var geomGen = _gen_i->GetGeomEngine();
   GEOM::GEOM_IGroupOperations_wrap groupOp =
-    geomGen->GetIGroupOperations( _gen_i->GetCurrentStudyID() );
+    geomGen->GetIGroupOperations();
   GEOM::ListOfLong_var ids = groupOp->GetObjects( theGeomObj );
 
   // store data
@@ -1891,9 +1859,7 @@ TopoDS_Shape SMESH_Mesh_i::newGroupShape( TGeomGroupData & groupData)
   TopoDS_Shape newShape;
 
   // get geom group
-  SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-  if ( study->_is_nil() ) return newShape; // means "not changed"
-  SALOMEDS::SObject_wrap groupSO = study->FindObjectID( groupData._groupEntry.c_str() );
+  SALOMEDS::SObject_wrap groupSO = SMESH_Gen_i::getStudyServant()->FindObjectID( groupData._groupEntry.c_str() );
   if ( !groupSO->_is_nil() )
   {
     CORBA::Object_var groupObj = _gen_i->SObjectToObject( groupSO );
@@ -1904,7 +1870,7 @@ TopoDS_Shape SMESH_Mesh_i::newGroupShape( TGeomGroupData & groupData)
     set<int> curIndices;
     GEOM::GEOM_Gen_var geomGen = _gen_i->GetGeomEngine();
     GEOM::GEOM_IGroupOperations_wrap groupOp =
-      geomGen->GetIGroupOperations( _gen_i->GetCurrentStudyID() );
+      geomGen->GetIGroupOperations();
     GEOM::ListOfLong_var   ids = groupOp->GetObjects( geomGroup );
     for ( CORBA::ULong i = 0; i < ids->length(); ++i )
       curIndices.insert( ids[i] );
@@ -1969,9 +1935,6 @@ void SMESH_Mesh_i::CheckGeomModif()
 {
   if ( !_impl->HasShapeToMesh() ) return;
 
-  SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-  if ( study->_is_nil() ) return;
-
   GEOM::GEOM_Object_var mainGO = _gen_i->ShapeToGeomObject( _impl->GetShapeToMesh() );
   //if ( mainGO->_is_nil() ) return;
 
@@ -2118,9 +2081,6 @@ void SMESH_Mesh_i::CheckGeomGroupModif()
 {
   if ( !_impl->HasShapeToMesh() ) return;
 
-  SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-  if ( study->_is_nil() ) return;
-
   CORBA::Long nbEntities = NbNodes() + NbElements();
 
   // Check if group contents changed
@@ -2307,7 +2267,7 @@ void SMESH_Mesh_i::CheckGeomGroupModif()
         if ( _mapGroups.find( oldID ) == _mapGroups.end() )
           continue;
         // get group name
-        SALOMEDS::SObject_wrap groupSO = _gen_i->ObjectToSObject( study,_mapGroups[oldID] );
+        SALOMEDS::SObject_wrap groupSO = _gen_i->ObjectToSObject( _mapGroups[oldID] );
         CORBA::String_var      name    = groupSO->GetName();
         // update
         SMESH_GroupBase_i*  group_i    = SMESH::DownCast<SMESH_GroupBase_i*>(_mapGroups[oldID] );
@@ -2328,15 +2288,15 @@ void SMESH_Mesh_i::CheckGeomGroupModif()
   if ( newNbEntities != nbEntities )
   {
     // Add all SObjects with icons to soToUpdateIcons
-    soToUpdateIcons.push_back( _gen_i->ObjectToSObject( study, _this() )); // mesh
+    soToUpdateIcons.push_back( _gen_i->ObjectToSObject( _this() )); // mesh
 
     for (map<int, SMESH::SMESH_subMesh_ptr>::iterator i_sm = _mapSubMeshIor.begin();
          i_sm != _mapSubMeshIor.end(); ++i_sm ) // submeshes
-      soToUpdateIcons.push_back( _gen_i->ObjectToSObject( study, i_sm->second ));
+      soToUpdateIcons.push_back( _gen_i->ObjectToSObject( i_sm->second ));
 
     for ( map<int, SMESH::SMESH_GroupBase_ptr>::iterator i_gr = _mapGroups.begin();
           i_gr != _mapGroups.end(); ++i_gr ) // groups
-      soToUpdateIcons.push_back( _gen_i->ObjectToSObject( study, i_gr->second ));
+      soToUpdateIcons.push_back( _gen_i->ObjectToSObject( i_gr->second ));
   }
 
   list< SALOMEDS::SObject_wrap >::iterator so = soToUpdateIcons.begin();
@@ -2382,10 +2342,10 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::ConvertToStandalone( SMESH::SMESH_GroupBase
 
   SALOMEDS::StudyBuilder_var builder;
   SALOMEDS::SObject_wrap     aGroupSO;
-  SALOMEDS::Study_var        aStudy = _gen_i->GetCurrentStudy();
+  SALOMEDS::Study_var        aStudy = SMESH_Gen_i::getStudyServant();
   if ( !aStudy->_is_nil() ) {
     builder  = aStudy->NewBuilder();
-    aGroupSO = _gen_i->ObjectToSObject( aStudy, theGroup );
+    aGroupSO = _gen_i->ObjectToSObject( theGroup );
     if ( !aGroupSO->_is_nil() )
     {
       // remove reference to geometry
@@ -2706,17 +2666,6 @@ CORBA::Long SMESH_Mesh_i::GetId()throw(SALOME::SALOME_Exception)
   return _id;
 }
 
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-
-CORBA::Long SMESH_Mesh_i::GetStudyId()throw(SALOME::SALOME_Exception)
-{
-  return _studyId;
-}
-
 //=============================================================================
 namespace
 {
@@ -2976,9 +2925,9 @@ string SMESH_Mesh_i::prepareMeshNameAndGroups(const char*    file,
   // Perform Export
   PrepareForWriting(file, overwrite);
   string aMeshName = "Mesh";
-  SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
+  SALOMEDS::Study_var aStudy = SMESH_Gen_i::getStudyServant();
   if ( !aStudy->_is_nil() ) {
-    SALOMEDS::SObject_wrap aMeshSO = _gen_i->ObjectToSObject( aStudy, _this() );
+    SALOMEDS::SObject_wrap aMeshSO = _gen_i->ObjectToSObject(  _this() );
     if ( !aMeshSO->_is_nil() ) {
       CORBA::String_var name = aMeshSO->GetName();
       aMeshName = name;
@@ -3011,15 +2960,14 @@ string SMESH_Mesh_i::prepareMeshNameAndGroups(const char*    file,
 
 //================================================================================
 /*!
- * \brief Export to med file
+ * \brief Export to MED file
  */
 //================================================================================
 
-void SMESH_Mesh_i::ExportToMEDX (const char*        file,
-                                 CORBA::Boolean     auto_groups,
-                                 SMESH::MED_VERSION theVersion,
-                                 CORBA::Boolean     overwrite,
-                                 CORBA::Boolean     autoDimension)
+void SMESH_Mesh_i::ExportMED(const char*        file,
+                             CORBA::Boolean     auto_groups,
+                             CORBA::Boolean     overwrite,
+                             CORBA::Boolean     autoDimension)
   throw(SALOME::SALOME_Exception)
 {
   //MESSAGE("SMESH::MED_VERSION:"<< theVersion);
@@ -3028,45 +2976,16 @@ void SMESH_Mesh_i::ExportToMEDX (const char*        file,
     _preMeshInfo->FullLoadFromFile();
 
   string aMeshName = prepareMeshNameAndGroups(file, overwrite);
-  _impl->ExportMED( file, aMeshName.c_str(), auto_groups, theVersion, 0, autoDimension );
+  _impl->ExportMED( file, aMeshName.c_str(), auto_groups, 0, autoDimension );
 
-  TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportToMEDX( r'"
+  TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportMED( r'"
                 << file << "', " << auto_groups << ", "
-                << theVersion << ", " << overwrite << ", "
+                << overwrite << ", "
                 << autoDimension << " )";
 
   SMESH_CATCH( SMESH::throwCorbaException );
 }
 
-//================================================================================
-/*!
- * \brief Export a mesh to a med file
- */
-//================================================================================
-
-void SMESH_Mesh_i::ExportToMED (const char*        file,
-                                CORBA::Boolean     auto_groups,
-                                SMESH::MED_VERSION theVersion)
-  throw(SALOME::SALOME_Exception)
-{
-  //MESSAGE("SMESH::MED_VERSION:"<< theVersion);
-  ExportToMEDX(file,auto_groups,theVersion,true);
-}
-
-//================================================================================
-/*!
- * \brief Export a mesh to a med file
- */
-//================================================================================
-
-void SMESH_Mesh_i::ExportMED (const char* file,
-                              CORBA::Boolean auto_groups)
-  throw(SALOME::SALOME_Exception)
-{
-  //MESSAGE("SMESH::MED_VERSION:"<< SMESH::MED_LATEST);
-  ExportToMEDX(file,auto_groups,SMESH::MED_LATEST,true);
-}
-
 //================================================================================
 /*!
  * \brief Export a mesh to a SAUV file
@@ -3154,8 +3073,7 @@ void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii)
                 << ".ExportSTL( r'" << file << "', " << isascii << " )";
 
   CORBA::String_var name;
-  SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-  SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( study, _this() );
+  SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( _this() );
   if ( !so->_is_nil() )
     name = so->GetName();
 
@@ -3173,7 +3091,6 @@ void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii)
 void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                                    const char*               file,
                                    CORBA::Boolean            auto_groups,
-                                   SMESH::MED_VERSION        version,
                                    CORBA::Boolean            overwrite,
                                    CORBA::Boolean            autoDimension,
                                    const GEOM::ListOfFields& fields,
@@ -3227,7 +3144,7 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
   {
     aMeshName = prepareMeshNameAndGroups(file, overwrite);
     _impl->ExportMED( file, aMeshName.c_str(), auto_groups,
-                      version, 0, autoDimension, /*addODOnVertices=*/have0dField);
+                      0, autoDimension, /*addODOnVertices=*/have0dField);
     meshDS = _impl->GetMeshDS();
   }
   else
@@ -3237,17 +3154,15 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
 
     PrepareForWriting(file, overwrite);
 
-    SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
-    if ( !aStudy->_is_nil() ) {
-      SALOMEDS::SObject_wrap SO = _gen_i->ObjectToSObject( aStudy, meshPart );
-      if ( !SO->_is_nil() ) {
-        CORBA::String_var name = SO->GetName();
-        aMeshName = name;
-      }
+    SALOMEDS::SObject_wrap SO = _gen_i->ObjectToSObject( meshPart );
+    if ( !SO->_is_nil() ) {
+      CORBA::String_var name = SO->GetName();
+      aMeshName = name;
     }
+
     SMESH_MeshPartDS* partDS = new SMESH_MeshPartDS( meshPart );
     _impl->ExportMED( file, aMeshName.c_str(), auto_groups,
-                      version, partDS, autoDimension, /*addODOnVertices=*/have0dField);
+                      partDS, autoDimension, /*addODOnVertices=*/have0dField);
     meshDS = tmpDSDeleter._obj = partDS;
   }
 
@@ -3273,7 +3188,7 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
   }
   TPythonDump() << _this() << ".ExportPartToMED( "
                 << meshPart << ", r'" << file << "', "
-                << auto_groups << ", " << version << ", " << overwrite << ", "
+                << auto_groups << ", " << overwrite << ", "
                 << autoDimension << ", " << goList
                 << ", '" << ( geomAssocFields ? geomAssocFields : "" ) << "'" << " )";
 
@@ -3611,8 +3526,7 @@ void SMESH_Mesh_i::ExportPartToSTL(::SMESH::SMESH_IDSource_ptr meshPart,
   PrepareForWriting(file);
 
   CORBA::String_var name;
-  SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-  SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( study, meshPart );
+  SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( meshPart );
   if ( !so->_is_nil() )
     name = so->GetName();
 
@@ -3643,8 +3557,7 @@ void SMESH_Mesh_i::ExportCGNS(::SMESH::SMESH_IDSource_ptr meshPart,
   PrepareForWriting(file,overwrite);
 
   std::string meshName("");
-  SALOMEDS::Study_var study = _gen_i->GetCurrentStudy();
-  SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( study, meshPart );
+  SALOMEDS::SObject_wrap so = _gen_i->ObjectToSObject( meshPart );
   if ( !so->_is_nil() )
   {
     CORBA::String_var name = so->GetName();
@@ -4986,10 +4899,9 @@ SMESH_Mesh_i::MakeGroupsOfBadInputElements( int         theSubShapeID,
         groups[ ++iG ] = createGroup( SMESH::ElementType(i), theGroupName );
         if ( _gen_i->CanPublishInStudy( groups[ iG ] ))
         {
-          SALOMEDS::Study_var  study = _gen_i->GetCurrentStudy();
           SMESH::SMESH_Mesh_var mesh = _this();
           SALOMEDS::SObject_wrap aSO =
-            _gen_i->PublishGroup( study, mesh, groups[ iG ],
+            _gen_i->PublishGroup( mesh, groups[ iG ],
                                  GEOM::GEOM_Object::_nil(), theGroupName);
         }
         SMESH_GroupBase_i* grp_i = SMESH::DownCast< SMESH_GroupBase_i* >( groups[ iG ]);
@@ -5013,7 +4925,6 @@ SMESH_Mesh_i::MakeGroupsOfBadInputElements( int         theSubShapeID,
 
 void SMESH_Mesh_i::CreateGroupServants()
 {
-  SALOMEDS::Study_var  aStudy = _gen_i->GetCurrentStudy();
   SMESH::SMESH_Mesh_var aMesh = _this();
 
   set<int> addedIDs;
@@ -5050,10 +4961,8 @@ void SMESH_Mesh_i::CreateGroupServants()
     else        { nextId = 0; } // avoid "unused variable" warning in release mode
 
     // publishing the groups in the study
-    if ( !aStudy->_is_nil() ) {
-      GEOM::GEOM_Object_var shapeVar = _gen_i->ShapeToGeomObject( shape );
-      _gen_i->PublishGroup( aStudy, aMesh, groupVar, shapeVar, group->GetName());
-    }
+    GEOM::GEOM_Object_var shapeVar = _gen_i->ShapeToGeomObject( shape );
+    _gen_i->PublishGroup( aMesh, groupVar, shapeVar, group->GetName());
   }
   if ( !addedIDs.empty() )
   {
@@ -5119,10 +5028,6 @@ void SMESH_Mesh_i::checkGroupNames()
   int nbGrp = NbGroups();
   if ( !nbGrp )
     return;
-
-  SALOMEDS::Study_var aStudy = _gen_i->GetCurrentStudy();
-  if ( aStudy->_is_nil() )
-    return; // nothing to do
   
   SMESH::ListOfGroups* grpList = 0;
   // avoid dump of "GetGroups"
@@ -5136,7 +5041,7 @@ void SMESH_Mesh_i::checkGroupNames()
     SMESH::SMESH_GroupBase_ptr aGrp = (*grpList)[ gIndx ];
     if ( !aGrp )
       continue;
-    SALOMEDS::SObject_wrap aGrpSO = _gen_i->ObjectToSObject( aStudy, aGrp );
+    SALOMEDS::SObject_wrap aGrpSO = _gen_i->ObjectToSObject( aGrp );
     if ( aGrpSO->_is_nil() )
       continue;
     // correct name of the mesh group if necessary
@@ -5179,15 +5084,12 @@ SMESH::string_array* SMESH_Mesh_i::GetLastParameters()
   SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen();
   if(gen) {
     CORBA::String_var aParameters = GetParameters();
-    SALOMEDS::Study_var    aStudy = gen->GetCurrentStudy();
-    if ( !aStudy->_is_nil()) {
-      SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters); 
-      if ( aSections->length() > 0 ) {
-        SALOMEDS::ListOfStrings aVars = aSections[ aSections->length() - 1 ];
-        aResult->length( aVars.length() );
-        for ( CORBA::ULong i = 0;i < aVars.length(); i++ )
-          aResult[i] = CORBA::string_dup( aVars[i] );
-      }
+    SALOMEDS::ListOfListOfStrings_var aSections = SMESH_Gen_i::getStudyServant()->ParseVariables(aParameters);
+    if ( aSections->length() > 0 ) {
+      SALOMEDS::ListOfStrings aVars = aSections[ aSections->length() - 1 ];
+      aResult->length( aVars.length() );
+      for ( CORBA::ULong i = 0;i < aVars.length(); i++ )
+        aResult[i] = CORBA::string_dup( aVars[i] );
     }
   }
   return aResult._retn();
index 39fd2aa1cd12d618a8ef6534acdb21ca6784b293..d92889eb51a3011ad6a1f97fe75fed8841698c7f 100644 (file)
@@ -59,8 +59,7 @@ class SMESH_I_EXPORT SMESH_Mesh_i:
   SMESH_Mesh_i(const SMESH_Mesh_i&);
 public:
   SMESH_Mesh_i( PortableServer::POA_ptr thePOA,
-                SMESH_Gen_i*            myGen_i,
-                CORBA::Long             studyId );
+                SMESH_Gen_i*            myGen_i );
 
   virtual ~SMESH_Mesh_i();
 
@@ -185,8 +184,6 @@ public:
 
   CORBA::Long GetId() throw (SALOME::SALOME_Exception);
 
-  CORBA::Long GetStudyId() throw (SALOME::SALOME_Exception);
-
   // --- C++ interface
 
   void SetImpl(::SMESH_Mesh* impl);
@@ -228,21 +225,11 @@ public:
    *  Consider maximum group name length stored in MED file.
    */
   CORBA::Boolean HasDuplicatedGroupNamesMED();
-  /*!
-   * Return string representation of a MED file version comprising nbDigits
-   */
-  char* GetVersionString(SMESH::MED_VERSION version, CORBA::Short nbDigits);
 
-  void ExportToMEDX( const char*        file,
-                     CORBA::Boolean     auto_groups,
-                     SMESH::MED_VERSION version,
-                     CORBA::Boolean     overwrite,
-                     CORBA::Boolean     autoDimension=true) throw (SALOME::SALOME_Exception);
-  void ExportToMED ( const char*        file,
-                     CORBA::Boolean     auto_groups,
-                     SMESH::MED_VERSION version ) throw (SALOME::SALOME_Exception);
-  void ExportMED   ( const char*        file,
-                     CORBA::Boolean     auto_groups ) throw (SALOME::SALOME_Exception);
+  void ExportMED( const char*        file,
+                  CORBA::Boolean     auto_groups,
+                  CORBA::Boolean     overwrite,
+                  CORBA::Boolean     autoDimension = true) throw (SALOME::SALOME_Exception);
 
   void ExportSAUV( const char* file, CORBA::Boolean auto_groups ) throw (SALOME::SALOME_Exception);
 
@@ -260,7 +247,6 @@ public:
   void ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file,
                        CORBA::Boolean            auto_groups,
-                       SMESH::MED_VERSION        version,
                        CORBA::Boolean            overwrite,
                        CORBA::Boolean            autoDim,
                        const GEOM::ListOfFields& fields,
@@ -320,7 +306,7 @@ public:
   CORBA::Long NbPolygons()
     throw (SALOME::SALOME_Exception);
 
-  CORBA::Long NbPolygonsOfOrder(SMESH::ElementOrder order=SMESH::ORDER_ANY)
+  CORBA::Long NbPolygonsOfOrder(SMESH::ElementOrder order = SMESH::ORDER_ANY)
     throw (SALOME::SALOME_Exception);
 
   CORBA::Long NbVolumes()
@@ -704,7 +690,6 @@ private:
   ::SMESH_Mesh* _impl;        // :: force no namespace here
   SMESH_Gen_i*  _gen_i;
   int           _id;          // id given by creator (unique within the creator instance)
-  int           _studyId;
   std::map<int, SMESH::SMESH_subMesh_ptr>    _mapSubMeshIor;
   std::map<int, SMESH::SMESH_GroupBase_ptr>  _mapGroups;
   std::map<int, SMESH::SMESH_Hypothesis_ptr> _mapHypo;
index e4deee310cd1452ca5f53878725df143bdb6ac09..2b282b8d4549110011627dbdd993aa010b16e176 100644 (file)
@@ -707,8 +707,7 @@ void SMESH_NoteBook::ReplaceVariables()
         // dumped calls due to the fix of
         // issue 0021364:: Dump of netgen parameters has duplicate lines
         SMESH_Gen_i *          aGen = SMESH_Gen_i::GetSMESHGen();
-        SALOMEDS::Study_var  aStudy = aGen->GetCurrentStudy();
-        SALOMEDS::SObject_wrap sobj = aStudy->FindObjectID( (*it).first.ToCString() );
+        SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( (*it).first.ToCString() );
         CORBA::Object_var       obj = aGen->SObjectToObject( sobj );
         if ( SMESH_Hypothesis_i* h = SMESH::DownCast< SMESH_Hypothesis_i*>( obj ))
         {
@@ -745,7 +744,7 @@ void SMESH_NoteBook::InitObjectMap()
   if(!aGen)
     return;
   
-  SALOMEDS::Study_var aStudy = aGen->GetCurrentStudy();
+  SALOMEDS::Study_var aStudy = SMESH_Gen_i::getStudyServant();
   if(aStudy->_is_nil())
     return;
   
@@ -954,11 +953,7 @@ bool SMESH_NoteBook::GetReal(const TCollection_AsciiString& theVarName, double&
 {
   bool ok = false;
 
-  SMESH_Gen_i *aGen = SMESH_Gen_i::GetSMESHGen();
-  if(!aGen)
-    return ok;
-
-  SALOMEDS::Study_ptr aStudy = aGen->GetCurrentStudy();
+  SALOMEDS::Study_ptr aStudy = SMESH_Gen_i::getStudyServant();
   if(aStudy->_is_nil())
     return ok;
 
index 70dab5de7d79f0f008e2766148c0044d93519bea..bcea31b0c9e067eb9ba5ae639995a358ae4e375a 100644 (file)
@@ -58,7 +58,7 @@ using SMESH::TVar;
 static void addErrorCode(const char* thePyCommand)
 {
   TPythonDump() << "if (isDone != 1):";
-  TPythonDump() << "\tprint '" << thePyCommand << " :', pattern.GetErrorCode()";
+  TPythonDump() << "\tprint('" << thePyCommand << " :', pattern.GetErrorCode())";
 }
 
 //=============================================================================
index c7e753d89c3d5f9cda95af08eb166be2aa8b14c6..7db67ae582d658b8b00bc540f60bd3625cedcf09 100644 (file)
@@ -63,8 +63,8 @@ namespace
 {
   enum {  GroupOnFilter_OutOfDate = -1 };
 
-  // a map to count not yet loaded meshes 
-  static std::map< int, int > theStudyIDToMeshCounter;
+  // count not yet loaded meshes
+  static int theMeshCounter = 0;
 
   //================================================================================
   /*!
@@ -74,9 +74,7 @@ namespace
 
   void meshInfoLoaded( SMESH_Mesh_i* mesh )
   {
-    std::map< int, int >::iterator id2counter =
-      theStudyIDToMeshCounter.insert( std::make_pair( (int) mesh->GetStudyId(), 0 )).first;
-    id2counter->second++;
+    theMeshCounter++;
   }
   //================================================================================
   /*!
@@ -88,18 +86,18 @@ namespace
                          std::string   medFile,
                          std::string   hdfFile)
   {
-    if ( --theStudyIDToMeshCounter[ (int) mesh->GetStudyId() ] == 0 )
+    if ( --theMeshCounter == 0 )
     {
       std::string tmpDir = SALOMEDS_Tool::GetDirFromPath( hdfFile );
 
-      SALOMEDS::ListOfFileNames_var aFiles = new SALOMEDS::ListOfFileNames;
-      aFiles->length(2);
+      SALOMEDS_Tool::ListOfFiles aFiles;
+      aFiles.reserve(2);
       medFile = SALOMEDS_Tool::GetNameFromPath( medFile ) + ".med";
       hdfFile = SALOMEDS_Tool::GetNameFromPath( hdfFile ) + ".hdf";
-      aFiles[0] = medFile.c_str();
-      aFiles[1] = hdfFile.c_str();
+      aFiles.push_back(medFile.c_str());
+      aFiles.push_back(hdfFile.c_str());
 
-      SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.c_str(), aFiles.in(), true );
+      SALOMEDS_Tool::RemoveTemporaryFiles( tmpDir.c_str(), aFiles, true );
     }
   }
 
@@ -117,25 +115,22 @@ namespace
     SignalToGUI( SMESH_Mesh_i* mesh )
     {
       SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
-      SALOMEDS::Study_var study = gen->GetCurrentStudy();
-      if ( !study->_is_nil() && study->StudyId() == mesh->GetStudyId() )
+
+      SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject( mesh->_this() );
+      CORBA::Object_var        obj = gen->GetNS()->Resolve( "/Kernel/Session" );
+      _session = SALOME::Session::_narrow( obj );
+      if ( !meshSO->_is_nil() && !_session->_is_nil() )
       {
-        SALOMEDS::SObject_wrap meshSO = gen->ObjectToSObject(study, mesh->_this() );
-        CORBA::Object_var        obj = gen->GetNS()->Resolve( "/Kernel/Session" );
-        _session = SALOME::Session::_narrow( obj );
-        if ( !meshSO->_is_nil() && !_session->_is_nil() )
-        {
-          CORBA::String_var meshEntry = meshSO->GetID();
-          _messagePrefix = "SMESH/mesh_loading/";
-          _messagePrefix += meshEntry.in();
+        CORBA::String_var meshEntry = meshSO->GetID();
+        _messagePrefix = "SMESH/mesh_loading/";
+        _messagePrefix += meshEntry.in();
 
-          std::string msgToGUI = _messagePrefix + "/";
-          msgToGUI += SMESH_Comment( mesh->NbNodes() );
-          msgToGUI += "/";
-          msgToGUI += SMESH_Comment( mesh->NbElements() );
+        std::string msgToGUI = _messagePrefix + "/";
+        msgToGUI += SMESH_Comment( mesh->NbNodes() );
+        msgToGUI += "/";
+        msgToGUI += SMESH_Comment( mesh->NbElements() );
 
-          _session->emitMessageOneWay( msgToGUI.c_str());
-        }
+        _session->emitMessageOneWay( msgToGUI.c_str());
       }
     }
     void sendStop()
@@ -479,10 +474,7 @@ bool SMESH_PreMeshInfo::readMeshInfo()
 {
   _isInfoOk = true;
 
-  MED::PWrapper aMed = MED::CrWrapper(_medFileName,true);
-  // if ( aMed->GetVersion() != MED::eV2_2 )
-  //   return false;
-
+  MED::PWrapper aMed = MED::CrWrapperR(_medFileName);
   MED::PMeshInfo medMeshInfo = aMed->CrMeshInfo(3,3,SMESH_Comment( _meshID ));
 
   // read nb nodes
@@ -535,7 +527,7 @@ void SMESH_PreMeshInfo::readGroupInfo()
 
   map< int, vector< SMESH_PreMeshInfo* > > famId2grInfo;
 
-  MED::PWrapper aMed = MED::CrWrapper(_medFileName,false);
+  MED::PWrapper aMed = MED::CrWrapperR(_medFileName);
   MED::PMeshInfo medMeshInfo = aMed->CrMeshInfo(3,3,SMESH_Comment( _meshID ));
 
   // read families to fill in famId2grInfo
@@ -1239,10 +1231,9 @@ bool SMESH_PreMeshInfo::IsMeshInfoCorrect() const
 
 void SMESH_PreMeshInfo::RemoveStudyFiles_TMP_METHOD(SALOMEDS::SComponent_ptr smeshComp)
 {
-  SALOMEDS::Study_var study = smeshComp->GetStudy();
-  if ( theStudyIDToMeshCounter[ (int) study->StudyId() ] > 0 )
+  if ( theMeshCounter > 0 )
   {
-    SALOMEDS::ChildIterator_wrap itBig = study->NewChildIterator( smeshComp );
+    SALOMEDS::ChildIterator_wrap itBig = SMESH_Gen_i::getStudyServant()->NewChildIterator( smeshComp );
     for ( ; itBig->More(); itBig->Next() ) {
       SALOMEDS::SObject_wrap gotBranch = itBig->Value();
       CORBA::Object_var       anObject = SMESH_Gen_i::SObjectToObject( gotBranch );
diff --git a/src/SMESH_I/SMESH_PythonDump.cxx b/src/SMESH_I/SMESH_PythonDump.cxx
new file mode 100644 (file)
index 0000000..0828fc5
--- /dev/null
@@ -0,0 +1,1384 @@
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+//  File    : SMESH_DumpPython.cxx
+//  Created : Thu Mar 24 17:17:59 2005
+//  Author  : Julia DOROVSKIKH
+//  Module  : SMESH
+
+#include "SMESH_PythonDump.hxx"
+
+#include "SMESH_2smeshpy.hxx"
+#include "SMESH_Comment.hxx"
+#include "SMESH_Filter_i.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_MeshEditor_i.hxx"
+
+#include <SALOMEDS_wrap.hxx>
+
+#include <LDOMParser.hxx>
+#include <Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString.hxx>
+#include <TColStd_HSequenceOfInteger.hxx>
+#include <TCollection_AsciiString.hxx>
+
+#ifdef _DEBUG_
+static int MYDEBUG = 0;
+#else
+static int MYDEBUG = 0;
+#endif
+
+#include "SMESH_TryCatch.hxx"
+
+namespace SMESH
+{
+
+  size_t TPythonDump::myCounter = 0;
+  const char theNotPublishedObjectName[] = "__NOT__Published__Object__";
+
+  TVar::TVar(CORBA::Double value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(CORBA::Long   value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(CORBA::Short  value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(const SMESH::double_array& value):myVals(value.length()), myIsList(true)
+  {
+    for ( size_t i = 0; i < value.length(); i++)
+      myVals[i] = SMESH_Comment(value[i]);
+  }
+
+  TPythonDump::
+  TPythonDump():myVarsCounter(0)
+  {
+    ++myCounter;
+  }
+  TPythonDump::
+  ~TPythonDump()
+  {
+    if(--myCounter == 0){
+      SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+      std::string aString = myStream.str();
+      TCollection_AsciiString aCollection(Standard_CString(aString.c_str()));
+      if(!aCollection.IsEmpty())
+      {
+        const std::string & objEntry = SMESH_Gen_i::GetSMESHGen()->GetLastObjEntry();
+        if ( !objEntry.empty() )
+          aCollection += (TVar::ObjPrefix() + objEntry ).c_str();
+        aSMESHGen->AddToPythonScript(aCollection);
+        if(MYDEBUG) MESSAGE(aString);
+        // prevent misuse of already treated variables
+        aSMESHGen->UpdateParameters(CORBA::Object_var().in(),"");
+      }
+    }
+  }
+
+  TPythonDump& //!< store a variable value. Write either a value or '$varID$'
+  TPythonDump::
+  operator<<(const TVar& theVarValue)
+  {
+    const std::vector< int >& varIDs = SMESH_Gen_i::GetSMESHGen()->GetLastParamIndices();
+    if ( theVarValue.myIsList )
+    {
+      myStream << "[ ";
+      for ( size_t i = 1; i <= theVarValue.myVals.size(); ++i )
+      {
+        if ( myVarsCounter < (int)varIDs.size() && varIDs[ myVarsCounter ] >= 0 )
+          myStream << TVar::Quote() << varIDs[ myVarsCounter ] << TVar::Quote();
+        else
+          myStream << theVarValue.myVals[i-1];
+        if ( i < theVarValue.myVals.size() )
+          myStream << ", ";
+        ++myVarsCounter;
+      }
+      myStream << " ]";
+    }
+    else
+    {
+      if ( myVarsCounter < (int)varIDs.size() && varIDs[ myVarsCounter ] >= 0 )
+        myStream << TVar::Quote() << varIDs[ myVarsCounter ] << TVar::Quote();
+      else
+        myStream << theVarValue.myVals[0];
+      ++myVarsCounter;
+    }
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(long int theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(int theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(double theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(float theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const void* theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const char* theArg){
+    if ( theArg )
+      myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const std::string& theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const SMESH::ElementType& theArg)
+  {
+    myStream<<"SMESH.";
+    switch(theArg){
+    case ALL:    myStream<<"ALL";    break;
+    case NODE:   myStream<<"NODE";   break;
+    case EDGE:   myStream<<"EDGE";   break;
+    case FACE:   myStream<<"FACE";   break;
+    case VOLUME: myStream<<"VOLUME"; break;
+    case ELEM0D: myStream<<"ELEM0D"; break;
+    case BALL:   myStream<<"BALL";   break;
+    default:     myStream<<"__UNKNOWN__ElementType: " << theArg;
+    }
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(const SMESH::GeometryType& theArg)
+  {
+    myStream<<"SMESH.";
+    switch(theArg){
+    case Geom_POINT:      myStream<<"Geom_POINT";      break;
+    case Geom_EDGE:       myStream<<"Geom_EDGE";       break;
+    case Geom_TRIANGLE:   myStream<<"Geom_TRIANGLE";   break;
+    case Geom_QUADRANGLE: myStream<<"Geom_QUADRANGLE"; break;
+    case Geom_POLYGON:    myStream<<"Geom_POLYGON";    break;
+    case Geom_TETRA:      myStream<<"Geom_TETRA";      break;
+    case Geom_PYRAMID:    myStream<<"Geom_PYRAMID";    break;
+    case Geom_HEXA:       myStream<<"Geom_HEXA";       break;
+    case Geom_PENTA:      myStream<<"Geom_PENTA";      break;
+    case Geom_POLYHEDRA:  myStream<<"Geom_POLYHEDRA";  break;
+    case Geom_BALL:       myStream<<"Geom_BALL";       break;
+    default:    myStream<<"__UNKNOWN__GeometryType: " << theArg;
+    }
+    return *this;
+  }
+  TPythonDump&
+  TPythonDump::
+  operator<<(const SMESH::EntityType& theArg)
+  {
+    myStream<<"SMESH.";
+    switch(theArg){
+    case Entity_0D:                myStream<<"Entity_0D";                break;
+    case Entity_Edge:              myStream<<"Entity_Edge";              break;
+    case Entity_Quad_Edge:         myStream<<"Entity_Quad_Edge";         break;
+    case Entity_Triangle:          myStream<<"Entity_Triangle";          break;
+    case Entity_Quad_Triangle:     myStream<<"Entity_Quad_Triangle";     break;
+    case Entity_BiQuad_Triangle:   myStream<<"Entity_BiQuad_Triangle";   break;
+    case Entity_Quadrangle:        myStream<<"Entity_Quadrangle";        break;
+    case Entity_Quad_Quadrangle:   myStream<<"Entity_Quad_Quadrangle";   break;
+    case Entity_BiQuad_Quadrangle: myStream<<"Entity_BiQuad_Quadrangle"; break;
+    case Entity_Polygon:           myStream<<"Entity_Polygon";           break;
+    case Entity_Quad_Polygon:      myStream<<"Entity_Quad_Polygon";      break;
+    case Entity_Tetra:             myStream<<"Entity_Tetra";             break;
+    case Entity_Quad_Tetra:        myStream<<"Entity_Quad_Tetra";        break;
+    case Entity_Pyramid:           myStream<<"Entity_Pyramid";           break;
+    case Entity_Quad_Pyramid:      myStream<<"Entity_Quad_Pyramid";      break;
+    case Entity_Hexa:              myStream<<"Entity_Hexa";              break;
+    case Entity_Quad_Hexa:         myStream<<"Entity_Quad_Hexa";         break;
+    case Entity_TriQuad_Hexa:      myStream<<"Entity_TriQuad_Hexa";      break;
+    case Entity_Penta:             myStream<<"Entity_Penta";             break;
+    case Entity_Quad_Penta:        myStream<<"Entity_Quad_Penta";        break;
+    case Entity_BiQuad_Penta:      myStream<<"Entity_BiQuad_Penta";      break;
+    case Entity_Hexagonal_Prism:   myStream<<"Entity_Hexagonal_Prism";   break;
+    case Entity_Polyhedra:         myStream<<"Entity_Polyhedra";         break;
+    case Entity_Quad_Polyhedra:    myStream<<"Entity_Quad_Polyhedra";    break;
+    case Entity_Ball:              myStream<<"Entity_Ball";              break;
+    case Entity_Last:              myStream<<"Entity_Last";              break;
+    default:    myStream<<"__UNKNOWN__EntityType: " << theArg;
+    }
+    return *this;
+  }
+
+  template<class TArray>
+  void DumpArray(const TArray& theArray, TPythonDump & theStream)
+  {
+    if ( theArray.length() == 0 )
+    {
+      theStream << "[]";
+    }
+    else
+    {
+      theStream << "[ ";
+      for (CORBA::ULong i = 1; i <= theArray.length(); i++) {
+        theStream << theArray[i-1];
+        if ( i < theArray.length() )
+          theStream << ", ";
+      }
+      theStream << " ]";
+    }
+  }
+
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::long_array& theArg)
+  {
+    DumpArray( theArg, *this );
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::double_array& theArg)
+  {
+    DumpArray( theArg, *this );
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::nodes_array& theArg)
+  {
+    DumpArray( theArg, *this );
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::string_array& theArray)
+  {
+    myStream << "[ ";
+    for ( CORBA::ULong i = 1; i <= theArray.length(); i++ ) {
+      myStream << "'" << theArray[i-1] << "'";
+      if ( i < theArray.length() )
+        myStream << ", ";
+    }
+    myStream << " ]";
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SALOMEDS::SObject_ptr aSObject)
+  {
+    if ( !aSObject->_is_nil() ) {
+      CORBA::String_var entry = aSObject->GetID();
+      myStream << entry.in();
+    }
+    else {
+      myStream << theNotPublishedObjectName;
+    }
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(CORBA::Object_ptr theArg)
+  {
+    SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(theArg);
+    if(!aSObject->_is_nil()) {
+      CORBA::String_var id = aSObject->GetID();
+      myStream << id;
+    } else if ( !CORBA::is_nil(theArg)) {
+      if ( aSMESHGen->CanPublishInStudy( theArg )) // not published SMESH object
+        myStream << "smeshObj_" << size_t(theArg);
+      else
+        myStream << theNotPublishedObjectName;
+    }
+    else
+      myStream << "None";
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::SMESH_Hypothesis_ptr theArg)
+  {
+    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(theArg);
+    if(aSObject->_is_nil() && !CORBA::is_nil(theArg))
+      myStream << "hyp_" << theArg->GetId();
+    else
+      *this << aSObject;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::SMESH_IDSource_ptr theArg)
+  {
+    if ( CORBA::is_nil( theArg ) )
+      return *this << "None";
+    SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(theArg);
+    if(!aSObject->_is_nil())
+    {
+      return *this << aSObject;
+    }
+    if ( SMESH::Filter_i* filter = SMESH::DownCast<SMESH::Filter_i*>( theArg ))
+    {
+      return *this << filter;
+    }
+    if ( SMESH_MeshEditor_i::IsTemporaryIDSource( theArg ))
+    {
+      SMESH::SMESH_Mesh_var            mesh = theArg->GetMesh();
+      SMESH::long_array_var    anElementsId = theArg->GetIDs();
+      SMESH::array_of_ElementType_var types = theArg->GetTypes();
+      SMESH::ElementType               type = types->length() ? types[0] : SMESH::ALL;
+      SALOMEDS::SObject_wrap         meshSO = SMESH_Gen_i::ObjectToSObject(mesh);
+      if ( meshSO->_is_nil() ) // don't waste memory for dumping not published objects
+        return *this << mesh << ".GetIDSource([], " << type << ")";
+      else
+        return *this << mesh << ".GetIDSource(" << anElementsId << ", " << type << ")";
+    }
+    return *this << theNotPublishedObjectName;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::FilterLibrary_i* theArg)
+  {
+    myStream<<"aFilterLibrary"<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::FilterManager_i* theArg)
+  {
+    myStream<<"aFilterManager";
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::Filter_i* theArg)
+  {
+    myStream<<"aFilter"<<theArg;
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::Functor_i* theArg)
+  {
+    if ( theArg ) {
+      FunctorType aFunctorType = theArg->GetFunctorType();
+      switch(aFunctorType) {
+      case FT_AspectRatio:           myStream<< "aAspectRatio";           break;
+      case FT_AspectRatio3D:         myStream<< "aAspectRatio3D";         break;
+      case FT_Warping:               myStream<< "aWarping";               break;
+      case FT_MinimumAngle:          myStream<< "aMinimumAngle";          break;
+      case FT_Taper:                 myStream<< "aTaper";                 break;
+      case FT_Skew:                  myStream<< "aSkew";                  break;
+      case FT_Area:                  myStream<< "aArea";                  break;
+      case FT_Volume3D:              myStream<< "aVolume3D";              break;
+      case FT_MaxElementLength2D:    myStream<< "aMaxElementLength2D";    break;
+      case FT_MaxElementLength3D:    myStream<< "aMaxElementLength3D";    break;
+      case FT_FreeBorders:           myStream<< "aFreeBorders";           break;
+      case FT_FreeEdges:             myStream<< "aFreeEdges";             break;
+      case FT_FreeNodes:             myStream<< "aFreeNodes";             break;
+      case FT_FreeFaces:             myStream<< "aFreeFaces";             break;
+      case FT_EqualNodes:            myStream<< "aEqualNodes";            break;
+      case FT_EqualEdges:            myStream<< "aEqualEdges";            break;
+      case FT_EqualFaces:            myStream<< "aEqualFaces";            break;
+      case FT_EqualVolumes:          myStream<< "aEqualVolumes";          break;
+      case FT_MultiConnection:       myStream<< "aMultiConnection";       break;
+      case FT_MultiConnection2D:     myStream<< "aMultiConnection2D";     break;
+      case FT_Length:                myStream<< "aLength";                break;
+      case FT_Length2D:              myStream<< "aLength2D";              break;
+      case FT_Deflection2D:          myStream<< "aDeflection2D";          break;
+      case FT_NodeConnectivityNumber:myStream<< "aNodeConnectivityNumber";break;
+      case FT_BelongToMeshGroup:     myStream<< "aBelongToMeshGroup";     break;
+      case FT_BelongToGeom:          myStream<< "aBelongToGeom";          break;
+      case FT_BelongToPlane:         myStream<< "aBelongToPlane";         break;
+      case FT_BelongToCylinder:      myStream<< "aBelongToCylinder";      break;
+      case FT_BelongToGenSurface:    myStream<< "aBelongToGenSurface";    break;
+      case FT_LyingOnGeom:           myStream<< "aLyingOnGeom";           break;
+      case FT_RangeOfIds:            myStream<< "aRangeOfIds";            break;
+      case FT_BadOrientedVolume:     myStream<< "aBadOrientedVolume";     break;
+      case FT_BareBorderVolume:      myStream<< "aBareBorderVolume";      break;
+      case FT_BareBorderFace:        myStream<< "aBareBorderFace";        break;
+      case FT_OverConstrainedVolume: myStream<< "aOverConstrainedVolume"; break;
+      case FT_OverConstrainedFace:   myStream<< "aOverConstrainedFace";   break;
+      case FT_LinearOrQuadratic:     myStream<< "aLinearOrQuadratic";     break;
+      case FT_GroupColor:            myStream<< "aGroupColor";            break;
+      case FT_ElemGeomType:          myStream<< "aElemGeomType";          break;
+      case FT_EntityType:            myStream<< "aEntityType";            break;
+      case FT_CoplanarFaces:         myStream<< "aCoplanarFaces";         break;
+      case FT_BallDiameter:          myStream<< "aBallDiameter";          break;
+      case FT_ConnectedElements:     myStream<< "aConnectedElements";     break;
+      case FT_LessThan:              myStream<< "aLessThan";              break;
+      case FT_MoreThan:              myStream<< "aMoreThan";              break;
+      case FT_EqualTo:               myStream<< "aEqualTo";               break;
+      case FT_LogicalNOT:            myStream<< "aLogicalNOT";            break;
+      case FT_LogicalAND:            myStream<< "aLogicalAND";            break;
+      case FT_LogicalOR:             myStream<< "aLogicalOR";             break;
+      case FT_Undefined:             myStream<< "anUndefined";            break;
+        //default: -- commented to have a compilation warning
+      }
+      myStream<<theArg;
+    }
+    return *this;
+  }
+
+  TPythonDump&
+  TPythonDump::
+  operator<<(SMESH::Measurements_i* theArg)
+  {
+    myStream<<"aMeasurements";
+    return *this;
+  }
+
+  TPythonDump& TPythonDump:: operator<<(SMESH_Gen_i* theArg)
+  {
+    myStream << SMESHGenName(); return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(SMESH_MeshEditor_i* theArg)
+  {
+    myStream << MeshEditorName() << "_" << ( theArg ? theArg->GetMeshId() : -1 ); return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const TCollection_AsciiString & theStr)
+  {
+    myStream << theStr; return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const SMESH::AxisStruct & theAxis)
+  {
+    *this << "SMESH.AxisStruct( "
+          << TVar( theAxis.x  ) << ", "
+          << TVar( theAxis.y  ) << ", "
+          << TVar( theAxis.z  ) << ", "
+          << TVar( theAxis.vx ) << ", "
+          << TVar( theAxis.vy ) << ", "
+          << TVar( theAxis.vz ) << " )";
+    return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const SMESH::DirStruct & theDir)
+  {
+    const SMESH::PointStruct & P = theDir.PS;
+    *this << "SMESH.DirStruct( SMESH.PointStruct ( "
+          << TVar( P.x ) << ", "
+          << TVar( P.y ) << ", "
+          << TVar( P.z ) << " ))";
+    return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const SMESH::PointStruct & P)
+  {
+    *this << "SMESH.PointStruct ( "
+          << TVar( P.x ) << ", "
+          << TVar( P.y ) << ", "
+          << TVar( P.z ) << " )";
+    return *this;
+  }
+
+  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups& theList)
+  {
+    DumpArray( theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfGroups * theList)
+  {
+    DumpArray( *theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const GEOM::ListOfGO& theList)
+  {
+    DumpArray( theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const GEOM::ListOfGBO& theList)
+  {
+    DumpArray( theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const SMESH::ListOfIDSources& theList)
+  {
+    DumpArray( theList, *this );
+    return *this;
+  }
+  TPythonDump& TPythonDump::operator<<(const SMESH::CoincidentFreeBorders& theCFB)
+  {
+    // dump CoincidentFreeBorders as a list of lists, each enclosed list
+    // contains node IDs of a group of coincident free borders where
+    // each consequent triple of IDs describe a free border: (n1, n2, nLast)
+    // For example [[1, 2, 10, 20, 21, 40], [11, 12, 15, 55, 54, 41]] describes
+    // two groups of coincident free borders, each group including two borders
+
+    myStream << "[";
+    for ( CORBA::ULong i = 0; i < theCFB.coincidentGroups.length(); ++i )
+    {
+      const SMESH::FreeBordersGroup& aGRP = theCFB.coincidentGroups[ i ];
+      if ( i ) myStream << ",";
+      myStream << "[";
+      for ( CORBA::ULong iP = 0; iP < aGRP.length(); ++iP )
+      {
+        const SMESH::FreeBorderPart& aPART = aGRP[ iP ];
+        if ( 0 <= aPART.border && aPART.border < (CORBA::Long)theCFB.borders.length() )
+        {
+          if ( iP ) myStream << ", ";
+          const SMESH::FreeBorder& aBRD = theCFB.borders[ aPART.border ];
+          myStream << aBRD.nodeIDs[ aPART.node1    ] << ",";
+          myStream << aBRD.nodeIDs[ aPART.node2    ] << ",";
+          myStream << aBRD.nodeIDs[ aPART.nodeLast ];
+        }
+      }
+      myStream << "]";
+    }
+    myStream << "]";
+
+    return *this;
+  }
+
+  const char* TPythonDump::NotPublishedObjectName()
+  {
+    return theNotPublishedObjectName;
+  }
+
+  TCollection_AsciiString myLongStringStart( "TPythonDump::LongStringStart" );
+  TCollection_AsciiString myLongStringEnd  ( "TPythonDump::LongStringEnd" );
+
+  //================================================================================
+  /*!
+   * \brief Return marker of long string literal beginning
+   * \param type - a name of functionality producing the string literal
+   * \retval TCollection_AsciiString - the marker string to be written into
+   * a raw python script
+   */
+  //================================================================================
+
+  TCollection_AsciiString TPythonDump::LongStringStart(const char* type)
+  {
+    return
+      myLongStringStart +
+      (Standard_Integer) strlen(type) +
+      " " +
+      (char*) type;
+  }
+
+  //================================================================================
+  /*!
+     * \brief Return marker of long string literal end
+      * \retval TCollection_AsciiString - the marker string to be written into
+      * a raw python script
+   */
+  //================================================================================
+
+  TCollection_AsciiString TPythonDump::LongStringEnd()
+  {
+    return myLongStringEnd;
+  }
+
+  //================================================================================
+  /*!
+     * \brief Cut out a long string literal from a string
+      * \param theText - text possibly containing string literals
+      * \param theFrom - position in the text to search from
+      * \param theLongString - the retrieved literal
+      * \param theStringType - a name of functionality produced the literal
+      * \retval bool - true if a string literal found
+     *
+     * The literal is removed from theText; theFrom points position right after
+     * the removed literal
+   */
+  //================================================================================
+
+  bool  TPythonDump::CutoutLongString( TCollection_AsciiString & theText,
+                                       int                     & theFrom,
+                                       TCollection_AsciiString & theLongString,
+                                       TCollection_AsciiString & theStringType)
+  {
+    if ( theFrom < 1 || theFrom > theText.Length() )
+      return false;
+
+    // ...script \  beg marker    \ \ type \       literal              \  end marker  \ script...
+    //  "theText myLongStringStart7 Pattern!!! SALOME Mesh Pattern file myLongStringEndtextEnd"
+    //  012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
+    //  0         1         2         3         4         5         6         7         8
+
+    theFrom = theText.Location( myLongStringStart, theFrom, theText.Length() ); // = 09
+    if ( !theFrom )
+      return false;
+
+    // find where literal begins
+    int literalBeg = theFrom + myLongStringStart.Length(); // = 26
+    char* typeLenStr = (char*) theText.ToCString() + literalBeg - 1; // = "7 Pattern!!! SALO...."
+    int typeLen = atoi ( typeLenStr ); // = 7
+    while ( *typeLenStr != ' ' ) { // look for ' ' after typeLen
+      literalBeg++; // 26 -> 27
+      typeLenStr++;
+    }
+    literalBeg += typeLen + 1; // = 35
+    if ( literalBeg > theText.Length() )
+      return false;
+
+    // where literal ends (i.e. end marker begins)
+    int literalEnd = theText.Location( myLongStringEnd, literalBeg, theText.Length() ); // = 64
+    if ( !literalEnd )
+      literalEnd = theText.Length();
+
+    // literal
+    theLongString = theText.SubString( literalBeg, literalEnd - 1); // "!!! SALOME Mesh Pattern file "
+    // type
+    theStringType = theText.SubString( literalBeg - typeLen, literalBeg - 1 ); // "Pattern"
+    // cut off literal
+    literalEnd += myLongStringEnd.Length(); // = 79
+    TCollection_AsciiString textEnd = theText.SubString( literalEnd, theText.Length() ); // "textE..."
+    theText = theText.SubString( 1, theFrom - 1 ) + textEnd;
+
+    return true;
+  }
+
+  void printException( const char* text )
+  {
+#ifdef _DEBUG_
+    cout << "Exception in SMESH_Gen_i::DumpPython(): " << text << endl;
+#endif
+  }
+}
+
+//=======================================================================
+//function : RemoveTabulation
+//purpose  : 
+//=======================================================================
+void RemoveTabulation( TCollection_AsciiString& theScript )
+{
+  std::string aString( theScript.ToCString() );
+  std::string::size_type aPos = 0;
+  while( aPos < aString.length() )
+  {
+    aPos = aString.find( "\n\t", aPos );
+    if( aPos == std::string::npos )
+      break;
+    aString.replace( aPos, 2, "\n" );
+    aPos++;
+  }
+  theScript = aString.c_str();
+}
+
+//=======================================================================
+//function : DumpPython
+//purpose  :
+//=======================================================================
+Engines::TMPFile* SMESH_Gen_i::DumpPython (CORBA::Boolean isPublished,
+                                           CORBA::Boolean isMultiFile,
+                                           CORBA::Boolean& isValidScript)
+{
+  SALOMEDS::Study_var aStudy = getStudyServant();
+  if (CORBA::is_nil(aStudy))
+    return new Engines::TMPFile(0);
+
+  CORBA::String_var compDataType = ComponentDataType();
+  SALOMEDS::SObject_wrap aSO = aStudy->FindComponent( compDataType.in() );
+  if (CORBA::is_nil(aSO))
+    return new Engines::TMPFile(0);
+
+  // Map study entries to object names
+  Resource_DataMapOfAsciiStringAsciiString aMap;
+  Resource_DataMapOfAsciiStringAsciiString aMapNames;
+
+  SALOMEDS::ChildIterator_wrap Itr = aStudy->NewChildIterator(aSO);
+  for (Itr->InitEx(true); Itr->More(); Itr->Next()) {
+    SALOMEDS::SObject_wrap aValue = Itr->Value();
+    CORBA::String_var anID = aValue->GetID();
+    CORBA::String_var aName = aValue->GetName();
+    TCollection_AsciiString aGUIName ( (char*) aName.in() );
+    TCollection_AsciiString anEntry ( (char*) anID.in() );
+    if (aGUIName.Length() > 0) {
+      aMapNames.Bind( anEntry, aGUIName );
+      aMap.Bind( anEntry, aGUIName );
+    }
+  }
+
+  // Get trace of restored study
+  SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
+  SALOMEDS::GenericAttribute_wrap anAttr =
+    aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject");
+
+  SALOMEDS::AttributePythonObject_var pyAttr =
+    SALOMEDS::AttributePythonObject::_narrow(anAttr);
+  CORBA::String_var oldValue = pyAttr->GetObject();
+  TCollection_AsciiString aSavedTrace (oldValue.in());
+
+  // Add trace of API methods calls and replace study entries by names
+  TCollection_AsciiString aScript;
+  aScript += DumpPython_impl(aMap, aMapNames, isPublished, isMultiFile,
+                             myIsHistoricalPythonDump, isValidScript, aSavedTrace);
+
+  int aLen = aScript.Length();
+  unsigned char* aBuffer = new unsigned char[aLen+1];
+  strcpy((char*)aBuffer, aScript.ToCString());
+
+  CORBA::Octet* anOctetBuf =  (CORBA::Octet*)aBuffer;
+  Engines::TMPFile_var aStreamFile = new Engines::TMPFile(aLen+1, aLen+1, anOctetBuf, 1);
+
+  bool hasNotPublishedObjects = aScript.Location( SMESH::theNotPublishedObjectName, 1, aLen);
+  isValidScript = isValidScript && !hasNotPublishedObjects;
+
+  return aStreamFile._retn();
+}
+
+//=============================================================================
+/*!
+ *  AddToPythonScript
+ */
+//=============================================================================
+void SMESH_Gen_i::AddToPythonScript (const TCollection_AsciiString& theString)
+{
+  if (myPythonScript.IsNull()) {
+    myPythonScript = new TColStd_HSequenceOfAsciiString;
+  }
+  myPythonScript->Append(theString);
+}
+
+//=============================================================================
+/*!
+ *  RemoveLastFromPythonScript
+ */
+//=============================================================================
+void SMESH_Gen_i::RemoveLastFromPythonScript()
+{
+  if (!myPythonScript.IsNull()) {
+    int aLen = myPythonScript->Length();
+    myPythonScript->Remove(aLen);
+  }
+}
+
+//=======================================================================
+//function : SavePython
+//purpose  :
+//=======================================================================
+void SMESH_Gen_i::SavePython()
+{
+  // Dump trace of API methods calls
+  TCollection_AsciiString aScript = GetNewPythonLines();
+
+  // Check contents of PythonObject attribute
+  CORBA::String_var compDataType = ComponentDataType();
+  SALOMEDS::SObject_wrap aSO = getStudyServant()->FindComponent( compDataType.in() );
+  SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
+  SALOMEDS::GenericAttribute_wrap anAttr =
+    aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePythonObject");
+
+  SALOMEDS::AttributePythonObject_var pyAttr =
+    SALOMEDS::AttributePythonObject::_narrow(anAttr);
+  CORBA::String_var oldValue = pyAttr->GetObject();
+  TCollection_AsciiString oldScript (oldValue.in());
+
+  if (oldScript.Length() > 0) {
+    oldScript += "\n";
+    oldScript += aScript;
+  } else {
+    oldScript = aScript;
+  }
+
+  // Store in PythonObject attribute
+  pyAttr->SetObject(oldScript.ToCString(), 1);
+
+  // Clean trace of API methods calls
+  CleanPythonTrace();
+}
+
+
+// impl
+
+
+//=============================================================================
+/*!
+ *  FindEntries: Returns a sequence of start/end positions of entries in the string
+ */
+//=============================================================================
+Handle(TColStd_HSequenceOfInteger) FindEntries (TCollection_AsciiString& theString)
+{
+  Handle(TColStd_HSequenceOfInteger) aSeq = new TColStd_HSequenceOfInteger;
+  Standard_Integer aLen = theString.Length();
+  Standard_Boolean isFound = Standard_False;
+
+  char* arr = (char*) theString.ToCString();
+  Standard_Integer i = 0, j;
+
+  while(i < aLen) {
+    int c = (int)arr[i];
+    j = i+1;
+    if ( isdigit( c )) { //Is digit?
+
+      isFound = Standard_False;
+      while((j < aLen) && ( isdigit(c) || c == ':' )) { //Check if it is an entry
+        c = (int)arr[j++];
+        if(c == ':') isFound = Standard_True;
+      }
+
+      if (isFound) {
+        int prev = (i < 1) ? 0 : (int)arr[i - 1];
+        // to distinguish from a sketcher command:
+        // last char should be a digit, not ":",
+        // previous char should not be '"'.
+        if (arr[j-2] != ':' && prev != '"') {
+          aSeq->Append(i+1); // +1 because AsciiString starts from 1
+          aSeq->Append(j-1);
+        }
+      }
+    }
+
+    i = j;
+  }
+
+  return aSeq;
+}
+
+namespace {
+
+  //================================================================================
+  /*!
+   * \brief Make a string be a valid python name
+    * \param aName - a string to fix
+    * \retval bool - true if aName was not modified
+   */
+  //================================================================================
+
+  bool fixPythonName(TCollection_AsciiString & aName)
+  {
+    bool isValidName = true;
+    int nbUnderscore = 0;
+    int p;
+    // replace not allowed chars by underscore
+    const char* name = aName.ToCString();
+    for ( p = 0; name[p]; ++p ) {
+      if ( !isalnum( name[p] ) && name[p] != '_' )
+      {
+        if ( p == 0 || p+1 == aName.Length() || name[p-1] == '_')
+        {
+          aName.Remove( p+1, 1 ); // remove __ and _ from the start and the end
+          --p;
+          name = aName.ToCString();
+        }
+        else
+        {
+          aName.SetValue( p+1, '_');
+          nbUnderscore++;
+        }
+        isValidName = false;
+      }
+    }
+    // aName must not start with a digit
+    if ( aName.IsIntegerValue() ) {
+      aName.Insert( 1, 'a' );
+      isValidName = false;
+    }
+    // shorten names like CartesianParameters3D_400_400_400_1000000_1
+    const int nbAllowedUnderscore = 3; /* changed from 2 to 3 by an user request
+                                          posted to SALOME Forum */
+    if ( aName.Length() > 20 && nbUnderscore > nbAllowedUnderscore )
+    {
+      p = aName.Location( "_", 20, aName.Length());
+      if ( p > 1 )
+        aName.Trunc( p-1 );
+    }
+    return isValidName;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return Python module names of available plug-ins.
+   */
+  //================================================================================
+
+  std::vector<std::string> getPluginNames()
+  {
+    std::vector<std::string> pluginNames;
+    std::vector< std::string > xmlPaths = SMESH_Gen::GetPluginXMLPaths();
+    LDOMParser xmlParser;
+    for ( size_t i = 0; i < xmlPaths.size(); ++i )
+    {
+      bool error = xmlParser.parse( xmlPaths[i].c_str() );
+      if ( error )
+      {
+        TCollection_AsciiString data;
+        INFOS( xmlParser.GetError(data) );
+        continue;
+      }
+      // <meshers-group name="Standard Meshers"
+      //                resources="StdMeshers"
+      //                idl-module="StdMeshers"
+      //                server-lib="StdMeshersEngine"
+      //                gui-lib="StdMeshersGUI">
+      LDOM_Document xmlDoc   = xmlParser.getDocument();
+      LDOM_NodeList nodeList = xmlDoc.getElementsByTagName( "meshers-group" );
+      for ( int i = 0; i < nodeList.getLength(); ++i )
+      {
+        LDOM_Node       node = nodeList.item( i );
+        LDOM_Element&   elem = (LDOM_Element&) node;
+        LDOMString idlModule = elem.getAttribute( "idl-module" );
+        if ( strlen( idlModule.GetString() ) > 0 )
+          pluginNames.push_back( idlModule.GetString() );
+      }
+    }
+    return pluginNames;
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Createa a Dump Python script
+ *  \param [in,out] theObjectNames - map of an entry to a study and python name
+ *  \param [in] theNames -  - map of an entry to a study name
+ *  \param [in] isPublished - \c true if dump of object publication in study is needed
+ *  \param [in] isMultiFile - \c true if dump of each module goes to a separate file
+ *  \param [in] isHistoricalDump - \c true if removed object should be dumped
+ *  \param [out] aValidScript - returns \c true if the returned script seems valid
+ *  \param [in,out] theSavedTrace - the dump stored in the study. It's cleared to
+ *         decrease memory usage.
+ *  \return TCollection_AsciiString - the result dump script.
+ */
+//================================================================================
+
+TCollection_AsciiString SMESH_Gen_i::DumpPython_impl
+                        (Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
+                         Resource_DataMapOfAsciiStringAsciiString& theNames,
+                         bool                                      isPublished,
+                         bool                                      isMultiFile,
+                         bool                                      isHistoricalDump,
+                         bool&                                     aValidScript,
+                         TCollection_AsciiString&                  theSavedTrace)
+{
+  SMESH_TRY;
+
+  const TCollection_AsciiString aSmeshpy ( SMESH_2smeshpy::SmeshpyName() );
+  const TCollection_AsciiString aSMESHGen( SMESH_2smeshpy::GenName() );
+  const TCollection_AsciiString anOldGen ( SMESH::TPythonDump::SMESHGenName() );
+  const TCollection_AsciiString helper; // to comfortably append C strings to TCollection_AsciiString
+  const TCollection_AsciiString tab( isMultiFile ? "\t" : "" ), nt = helper + "\n" + tab;
+
+  std::list< TCollection_AsciiString > lines; // lines of a script
+  std::list< TCollection_AsciiString >::iterator linesIt;
+  
+  if ( isPublished )
+    lines.push_back(  aSMESHGen + " = smeshBuilder.New()" );
+   else
+    lines.push_back(  aSMESHGen + " = smeshBuilder.New(False)" );
+  lines.push_back( helper + "aFilterManager = " + aSMESHGen + ".CreateFilterManager()" );
+  lines.push_back( helper + "aMeasurements = "  + aSMESHGen + ".CreateMeasurements()" );
+
+  // Treat dump trace of restored study
+  if (theSavedTrace.Length() > 0)
+  {
+    linesIt = --lines.end();
+    // Split theSavedTrace into lines
+    int from = 1, end = theSavedTrace.Length(), to;
+    while ( from < end && ( to = theSavedTrace.Location( "\n", from, end )))
+    {
+      if ( theSavedTrace.ToCString()[from-1] == '\t' )
+        ++from;
+      if ( to != from )
+        lines.push_back( theSavedTrace.SubString( from, to - 1 ));
+      from = to + 1;
+    }
+    // For the conversion of IDL API calls -> smeshBuilder.py API, "smesh" standing for SMESH_Gen
+    // was replaces with "smeshgen" (==TPythonDump::SMESHGenName()).
+    // Change "smesh" -> "smeshgen" in the trace saved before passage to smeshBuilder.py API
+    bool isNewVersion =
+      theSavedTrace.Location( anOldGen + ".", 1, theSavedTrace.Length() );
+    theSavedTrace.Clear();
+    if ( !isNewVersion )
+    {
+      const TCollection_AsciiString aSmeshCall ( "smesh." ), gen( "gen" );
+      int beg, end, from;
+      for ( ++linesIt; linesIt != lines.end(); ++linesIt )
+      {
+        TCollection_AsciiString& aSavedLine = *linesIt;
+        end = aSavedLine.Length(), from = 1;
+        while ( from < end && ( beg = aSavedLine.Location( aSmeshCall, from, end )))
+        {
+          char charBefore = ( beg == 1 ) ? ' ' : aSavedLine.Value( beg - 1 );
+          if ( isspace( charBefore ) || charBefore == '=' ) { // "smesh." is not a part of a long word
+            aSavedLine.Insert( beg + aSmeshCall.Length() - 1, gen );// "smesh" -> "smeshgen"
+            end += gen.Length();
+          }
+          from = beg + aSmeshCall.Length();
+        }
+      }
+    }
+  }
+
+  // Add new dump trace of API methods calls to script lines
+  if (!myPythonScript.IsNull())
+  {
+    Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScript;
+    Standard_Integer istr, aLen = aPythonScript->Length();
+    for (istr = 1; istr <= aLen; istr++)
+      lines.push_back( aPythonScript->Value( istr ));
+  }
+
+  // Convert IDL API calls into smeshBuilder.py API.
+  // Some objects are wrapped with python classes and
+  // Resource_DataMapOfAsciiStringAsciiString holds methods returning wrapped objects
+  Resource_DataMapOfAsciiStringAsciiString anEntry2AccessorMethod;
+  std::set< TCollection_AsciiString >      aRemovedObjIDs;
+  if ( !getenv("NO_2smeshpy_conversion"))
+    SMESH_2smeshpy::ConvertScript( lines, anEntry2AccessorMethod,
+                                   theObjectNames, aRemovedObjIDs,
+                                   isHistoricalDump );
+
+  bool importGeom = false;
+  GEOM::GEOM_Gen_ptr geom = GetGeomEngine();
+  {
+    // Add names of GEOM objects to theObjectNames to exclude same names of SMESH objects
+    GEOM::string_array_var aGeomNames = geom->GetAllDumpNames();
+    int ign = 0, nbgn = aGeomNames->length();
+    for (; ign < nbgn; ign++) {
+      TCollection_AsciiString aName = aGeomNames[ign].in();
+      theObjectNames.Bind(aName, "1");
+    }
+  }
+
+  TCollection_AsciiString anUpdatedScript;
+
+  Resource_DataMapOfAsciiStringAsciiString mapRemoved;
+  Resource_DataMapOfAsciiStringAsciiString mapEntries; // names and entries present in anUpdatedScript
+  Standard_Integer objectCounter = 0;
+  TCollection_AsciiString anEntry, aName, aGUIName, aBaseName("smeshObj_");
+
+  // Treat every script line and add it to anUpdatedScript
+  for ( linesIt = lines.begin(); linesIt != lines.end(); ++linesIt )
+  {
+    TCollection_AsciiString& aLine = *linesIt;
+    anUpdatedScript += tab;
+    {
+      //Replace characters used instead of quote marks to quote notebook variables
+      int pos = 1;
+      while (( pos = aLine.Location( 1, SMESH::TVar::Quote(), pos, aLine.Length() )))
+        aLine.SetValue( pos, '"' );
+    }
+    // Find entries to be replaced by names
+    Handle(TColStd_HSequenceOfInteger) aSeq = FindEntries(aLine);
+    const Standard_Integer aSeqLen = aSeq->Length();
+    Standard_Integer aStart = 1;
+    for (Standard_Integer i = 1; i <= aSeqLen; i += 2)
+    {
+      if ( aStart < aSeq->Value(i) )
+        anUpdatedScript += aLine.SubString( aStart, aSeq->Value(i) - 1 ); // line part before i-th entry
+      anEntry = aLine.SubString( aSeq->Value(i), aSeq->Value(i + 1) );
+      // is a GEOM object?
+      CORBA::String_var geomName = geom->GetDumpName( anEntry.ToCString() );
+      if ( !geomName.in() || !geomName.in()[0] ) {
+        // is a SMESH object
+        if ( theObjectNames.IsBound( anEntry )) {
+          // The Object is in Study
+          aName = theObjectNames.Find( anEntry );
+          // check validity of aName
+          bool isValidName = fixPythonName( aName );
+          if (theObjectNames.IsBound(aName) && anEntry != theObjectNames(aName)) {
+            // diff objects have same name - make a new name by appending a digit
+            TCollection_AsciiString aName2;
+            Standard_Integer i = 0;
+            do {
+              aName2 = aName + "_" + ++i;
+            } while (theObjectNames.IsBound(aName2) && anEntry != theObjectNames(aName2));
+            aName = aName2;
+            isValidName = false;
+          }
+          if ( !isValidName )
+            theObjectNames(anEntry) = aName;
+
+          if ( aLine.Value(1) != '#' )
+            mapEntries.Bind(anEntry, aName);
+        }
+        else
+        {
+          // Removed Object
+          do {
+            aName = aBaseName + (++objectCounter);
+          } while (theObjectNames.IsBound(aName));
+
+          if ( !aRemovedObjIDs.count( anEntry ) && aLine.Value(1) != '#')
+            mapRemoved.Bind(anEntry, aName);
+
+          theObjectNames.Bind(anEntry, aName);
+        }
+        theObjectNames.Bind(aName, anEntry); // to detect same name of diff objects
+      }
+      else
+      {
+        aName = geomName.in();
+        importGeom = true;
+      }
+      anUpdatedScript += aName;
+      aStart = aSeq->Value(i + 1) + 1;
+
+    } // loop on entries within aLine
+
+    if ( aSeqLen == 0 )
+      anUpdatedScript += aLine;
+    else if ( aSeq->Value( aSeqLen ) < aLine.Length() )
+      anUpdatedScript += aLine.SubString( aSeq->Value(aSeqLen) + 1, aLine.Length() );
+
+    anUpdatedScript += '\n';
+  }
+
+  // Make an initial part of aSript
+
+  TCollection_AsciiString initPart = "import ";
+  if ( isMultiFile )
+    initPart += "salome, ";
+  initPart += " SMESH, SALOMEDS\n";
+  initPart += "from salome.smesh import smeshBuilder\n";
+  if ( importGeom && isMultiFile )
+  {
+    initPart += ("\n## import GEOM dump file ## \n"
+                 "import string, os, sys, re, inspect\n"
+                 "thisFile   = inspect.getfile( inspect.currentframe() )\n"
+                 "thisModule = os.path.splitext( os.path.basename( thisFile ))[0]\n"
+                 "sys.path.insert( 0, os.path.dirname( thisFile ))\n"
+                 "exec(\"from \"+re.sub(\"SMESH$\",\"GEOM\",thisModule)+\" import *\")\n\n");
+  }
+  // import python files corresponding to plugins if they are used in anUpdatedScript
+  {
+    TCollection_AsciiString importStr;
+    std::vector<std::string> pluginNames = getPluginNames();
+    for ( size_t i = 0; i < pluginNames.size(); ++i )
+    {
+      // Convert access to plugin members:
+      // e.g. StdMeshers.QUAD_REDUCED -> StdMeshersBuilder.QUAD_REDUCED
+      TCollection_AsciiString pluginAccess = (pluginNames[i] + ".").c_str() ;
+      int iFrom = 1, iPos;
+      while (( iPos = anUpdatedScript.Location( pluginAccess, iFrom, anUpdatedScript.Length() )))
+      {
+        anUpdatedScript.Insert( iPos + pluginNames[i].size(), "Builder" );
+        iFrom = iPos + pluginNames[i].size() + 8;
+      }
+      // if any plugin member is used, import the plugin
+      if ( iFrom > 1 )
+        importStr += ( helper + "\n" "from salome." + pluginNames[i].c_str() +
+                       " import " + pluginNames[i].c_str() +"Builder" );
+    }
+    if ( !importStr.IsEmpty() )
+      initPart += importStr + "\n";
+  }
+
+  if ( isMultiFile )
+    initPart += "def RebuildData():";
+  initPart += "\n";
+
+  anUpdatedScript.Prepend( initPart );
+
+  // Make a final part of aScript
+
+  // Dump object removal
+  TCollection_AsciiString removeObjPart;
+  if ( !mapRemoved.IsEmpty() ) {
+    removeObjPart += nt + "## some objects were removed";
+    removeObjPart += nt + "aStudyBuilder = salome.myStudy.NewBuilder()";
+    Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapRemovedIt;
+    for ( mapRemovedIt.Initialize( mapRemoved ); mapRemovedIt.More(); mapRemovedIt.Next() ) {
+      aName   = mapRemovedIt.Value(); // python name
+      anEntry = mapRemovedIt.Key();
+      removeObjPart += nt + "SO = salome.myStudy.FindObjectIOR(salome.myStudy.ConvertObjectToIOR(";
+      removeObjPart += aName;
+      // for object wrapped by class of smeshBuilder.py
+      if ( anEntry2AccessorMethod.IsBound( anEntry ) )
+        removeObjPart += helper + "." + anEntry2AccessorMethod( anEntry );
+      removeObjPart += helper + "))" + nt + "if SO: aStudyBuilder.RemoveObjectWithChildren(SO)";
+    }
+  }
+
+  // Set object names
+  TCollection_AsciiString setNamePart;
+  Resource_DataMapIteratorOfDataMapOfAsciiStringAsciiString mapEntriesIt;
+  for ( mapEntriesIt.Initialize( mapEntries ); mapEntriesIt.More(); mapEntriesIt.Next() )
+  {
+    anEntry = mapEntriesIt.Key();
+    aName   = mapEntriesIt.Value(); // python name
+    if ( theNames.IsBound( anEntry ))
+    {
+      aGUIName = theNames.Find(anEntry);
+      aGUIName.RemoveAll('\''); // remove a quote from a name (issue 22360)
+      setNamePart += nt + aSMESHGen + ".SetName(" + aName;
+      if ( anEntry2AccessorMethod.IsBound( anEntry ) )
+        setNamePart += helper + "." + anEntry2AccessorMethod( anEntry );
+      setNamePart += helper + ", '" + aGUIName + "')";
+    }
+  }
+  if ( !setNamePart.IsEmpty() )
+  {
+    setNamePart.Insert( 1, nt + "## Set names of Mesh objects" );
+  }
+
+  // Store visual properties of displayed objects
+
+  TCollection_AsciiString visualPropertiesPart;
+  if (isPublished)
+  {
+    //Output the script that sets up the visual parameters.
+    CORBA::String_var compDataType = ComponentDataType();
+    CORBA::String_var script = getStudyServant()->GetDefaultScript( compDataType.in(), tab.ToCString() );
+    if ( script.in() && script.in()[0] ) {
+      visualPropertiesPart += nt + "### Store presentation parameters of displayed objects\n";
+      visualPropertiesPart += script.in();
+    }
+  }
+
+  anUpdatedScript += removeObjPart + '\n' + setNamePart + '\n' + visualPropertiesPart;
+
+  if ( isMultiFile )
+  {
+    anUpdatedScript +=
+      "\n\tpass"
+      "\n"
+      "\nif __name__ == '__main__':"
+      "\n\tSMESH_RebuildData = RebuildData"
+      "\n\texec('import '+re.sub('SMESH$','GEOM',thisModule)+' as GEOM_dump')"
+      "\n\tGEOM_dump.RebuildData()"
+      "\n\texec('from '+re.sub('SMESH$','GEOM',thisModule)+' import * ')"
+      "\n\tSMESH_RebuildData()";
+  }
+  anUpdatedScript += "\n";
+
+  // no need now as we use 'tab' and 'nt' variables depending on isMultiFile
+  // if( !isMultiFile ) // remove unnecessary tabulation
+  //   RemoveTabulation( anUpdatedScript );
+
+  // -----------------------------------------------------------------
+  // put string literals describing patterns into separate functions
+  // -----------------------------------------------------------------
+
+  TCollection_AsciiString aLongString, aFunctionType;
+  int where = 1;
+  std::set< std::string > functionNameSet;
+  while ( SMESH::TPythonDump::CutoutLongString( anUpdatedScript, where, aLongString, aFunctionType ))
+  {
+    // make a python string literal
+    aLongString.Prepend(":\n\treturn '''\n");
+    aLongString += "\n\t'''\n\tpass\n";
+
+    TCollection_AsciiString functionName;
+
+    // check if the function returning this literal is already defined
+    int posAlready = anUpdatedScript.Location( aLongString, where, anUpdatedScript.Length() );
+    if ( posAlready ) // already defined
+    {
+      // find the function name
+      int functBeg = posAlready;
+      char* script = (char*) anUpdatedScript.ToCString() + posAlready - 1; // look at ":" after "def function()"
+      while ( *script != ' ' ) {
+        script--;
+        functBeg--;
+      }
+      functBeg++; // do not take ' '
+      posAlready--; // do not take ':'
+      functionName = anUpdatedScript.SubString( functBeg, posAlready );
+    }
+    else // not defined yet
+    {
+      // find a unique function name
+      fixPythonName( aFunctionType );
+      Standard_Integer nb = 0;
+      do functionName = aFunctionType + "_" + ( nb++ ) + "()";
+      while ( !functionNameSet.insert( functionName.ToCString() ).second );
+
+      // define function
+      TCollection_AsciiString funDef = helper + "def " + functionName + aLongString;
+      if ( isMultiFile )
+      {
+        anUpdatedScript += helper + "\n\n" + funDef;
+      }
+      else
+      {
+        funDef += "\n\n";
+        anUpdatedScript.Insert( 1, funDef);
+        where += funDef.Length();
+      }
+    }
+    anUpdatedScript.InsertBefore( where, functionName ); // call function
+  }
+
+  aValidScript = true;
+
+  return anUpdatedScript;
+
+  SMESH_CATCH( SMESH::printException );
+
+  aValidScript = false;
+  return "";
+}
+
+//=============================================================================
+/*!
+ *  GetNewPythonLines
+ */
+//=============================================================================
+TCollection_AsciiString SMESH_Gen_i::GetNewPythonLines()
+{
+  TCollection_AsciiString aScript;
+
+  // Dump trace of API methods calls
+  if (!myPythonScript.IsNull()) {
+    Handle(TColStd_HSequenceOfAsciiString) aPythonScript = myPythonScript;
+    Standard_Integer istr, aLen = aPythonScript->Length();
+    for (istr = 1; istr <= aLen; istr++) {
+      aScript += "\n";
+      aScript += aPythonScript->Value(istr);
+    }
+    aScript += "\n";
+  }
+
+  return aScript;
+}
+
+//=============================================================================
+/*!
+ *  CleanPythonTrace
+ */
+//=============================================================================
+void SMESH_Gen_i::CleanPythonTrace()
+{
+  TCollection_AsciiString aScript;
+
+  // Clean trace of API methods calls
+  if (!myPythonScript.IsNull()) {
+    myPythonScript->Clear();
+  }
+}
index 52baab3035244f082942031af4abba8771853635..4c488220be2211f2711c0d51989684b6c7aa13d2 100644 (file)
@@ -69,7 +69,6 @@ public:
                 Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod,
                 Resource_DataMapOfAsciiStringAsciiString& theObjectNames,
                 std::set< TCollection_AsciiString >&      theRemovedObjIDs,
-                SALOMEDS::Study_ptr&                      theStudy,
                 const bool                                theHistoricalDump);
 
   /*!
@@ -201,9 +200,6 @@ namespace SMESH
     TPythonDump&
     operator<<(SMESH_MeshEditor_i* theArg);
 
-    TPythonDump&
-    operator<<(SMESH::MED_VERSION theArg);
-
     TPythonDump&
     operator<<(const SMESH::AxisStruct & theAxis);
 
index 3d407f85bacfcf9014f805b768a522f8ff1d27d1..c80998ee94c76d0960779659ab3878558bdf5fe1 100644 (file)
@@ -77,12 +77,12 @@ class SMeshStudyTools:
 
     ## This function updates the tools so that it works on the
     #  specified study.
-    def updateStudy(self, studyId=None):
+    def updateStudy(self):
         """
         This function updates the tools so that it works on the
         specified study.
         """
-        self.editor = getStudyEditor(studyId)
+        self.editor = getStudyEditor()
 
     ## Get the mesh item owning the mesh group \em meshGroupItem.
     #  \param  meshGroupItem (SObject) mesh group belonging to the searched mesh.
@@ -125,7 +125,7 @@ class SMeshStudyTools:
             return None
         import SMESH
         from salome.smesh import smeshBuilder
-        smesh = smeshBuilder.New(self.editor.study)
+        smesh = smeshBuilder.New()
 
         meshObject=salome.IDToObject(entry)
         return smesh.Mesh( meshObject )
@@ -155,7 +155,7 @@ class SMeshStudyTools:
             self.smeshGui = salome.ImportComponentGUI("SMESH")
 
         if not helper.SalomeGUI.hasDesktop():
-            print "displayMeshObject: no desktop available"
+            print("displayMeshObject: no desktop available")
             return
         self.smeshGui.CreateAndDisplayActor(entry)
 
@@ -183,17 +183,16 @@ class SMeshStudyTools:
 
 
 def TEST_createBoxMesh():
-    theStudy = helper.getActiveStudy()
     
     import GEOM
     from salome.geom import geomBuilder
-    geompy = geomBuilder.New(theStudy)
+    geompy = geomBuilder.New()
     
     box = geompy.MakeBoxDXDYDZ(200, 200, 200)
 
     import SMESH, SALOMEDS
     from salome.smesh import smeshBuilder
-    smesh = smeshBuilder.New(theStudy
+    smesh = smeshBuilder.New() 
 
     from salome.StdMeshers import StdMeshersBuilder
     boxmesh = smesh.Mesh(box)
@@ -207,7 +206,7 @@ def TEST_createBoxMesh():
 
     smesh.SetName(boxmesh.GetMesh(), 'boxmesh')
     if salome.sg.hasDesktop():
-        salome.sg.updateObjBrowser(True)
+        salome.sg.updateObjBrowser()
 
 #
 # Definitions:
index 67f0ba76d2db48cbbee9b419a5462aed508c04e3..2bb4d9ecfafb05fb75d63ba200673ae82ee2b0cd 100755 (executable)
@@ -25,11 +25,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 #-----------------------------GEOM----------------------------------------
@@ -67,7 +67,7 @@ plane_mesh = salome.IDToObject( Id_face1)
 
 mesh = smesh.Mesh(plane_mesh, "Mesh_1")
 
-print"---------------------Hypothesis and Algorithms"
+print("---------------------Hypothesis and Algorithms")
 
 #---------------- NumberOfSegments
 
@@ -75,12 +75,12 @@ numberOfSegment = 9
 
 algoWireDes = mesh.Segment()
 listHyp = algoWireDes.GetCompatibleHypothesis()
-print algoWireDes.GetName()
+print(algoWireDes.GetName())
 algoWireDes.SetName("Ware descritisation")
 
 hypNbSeg = algoWireDes.NumberOfSegments(numberOfSegment)
-print hypNbSeg.GetName()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "Nb. Segments")
 
 
@@ -89,19 +89,19 @@ maxElementArea = 200
 
 algoMef = mesh.Triangle()
 listHyp = algoMef.GetCompatibleHypothesis()
-print algoMef.GetName()
+print(algoMef.GetName())
 algoMef.SetName("Triangle (Mefisto)")
 
 hypArea200 = algoMef.MaxElementArea(maxElementArea)
-print hypArea200.GetName()
-print hypArea200.GetMaxElementArea()
+print(hypArea200.GetName())
+print(hypArea200.GetMaxElementArea())
 smesh.SetName(hypArea200, "Max. Element Area")
 
 
-print "---------------------Compute the mesh"
+print("---------------------Compute the mesh")
 
 ret = mesh.Compute()
-print ret
+print(ret)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
 
index a627b543cc78cc65d85e0c99c40f1b6cfc07c663..4f7866cb6f932ce82ff458d85ab847911d54dee2 100755 (executable)
@@ -29,11 +29,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 #----------------------------------GEOM
@@ -81,4 +81,4 @@ mesh2.Compute()
 
 
 # ---- udate object browser
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 5611f172ed11b6935059ba31a4c66a0bd1fe153b..2485546461c8ce4816fd17e3cd95554949fb1226 100755 (executable)
@@ -29,11 +29,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 # create points to build two circles
@@ -90,4 +90,4 @@ mesh1.Compute()
 mesh2.Compute()
 
 # ---- update object browser
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 7d2ee5a0955f0e9463d71e24fab1bbbd51c78d93..c390c7ec7c550fa985476a8f9a0c29b565fb2622 100644 (file)
@@ -25,11 +25,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -118,7 +118,7 @@ for i in range(0,nbzsteps):
             pass
         pass
     if len(nfaces)!=nbf:
-        print "len(nfaces)!=nbf"
+        print("len(nfaces)!=nbf")
         break
     newfaces.append(nfaces)
     # update faces for before next step of extrusion
@@ -217,4 +217,4 @@ for i in range(0,nbrs):
     oldnodes = newnodes
     pass
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index cc25ccda9d7af3dbb5f8bcf8a12f679f4f4ffe8b..04e6fc24488518be62f8af4c7ec549d93959e1b8 100644 (file)
@@ -54,13 +54,13 @@ def CheckBelongToGeomFilter(theMesh, theShape, theSubShape, theElemType):
     
 
 anElemType = SMESH.FACE;
-print "anElemType =", anElemType
+print("anElemType =", anElemType)
 #anIds = CheckBelongToGeomFilter(mesh,box,subShapeList[1],anElemType)
 anIds = CheckBelongToGeomFilter(mesh,box,box,anElemType)
-print "Number of ids = ", len(anIds)
-print "anIds = ", anIds
+print("Number of ids = ", len(anIds))
+print("anIds = ", anIds)
 ## Check old version
 #anIds = CheckBelongToGeomFilterOld(smesh,mesh.GetMesh(),box,box,anElemType)
 #print "anIds = ", anIds
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 4a197353f142083b2f1e422d601a5a83b501cb60..d6b8ec64b5926a14915d074959d29196a0e8a333 100644 (file)
@@ -31,11 +31,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 ## create a bottom box
 Box_inf = geompy.MakeBox(0., 0., 0., 200., 200., 50.)
@@ -104,4 +104,4 @@ Compound2 = smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 1, 0, 1e
 smesh.SetName(Compound2, 'Compound_with_UniteGrps_and_GrpsOfAllElems')
 #end
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index b0e936b19b7afb223153382a5f2b0a052740889a..4383ab44790b8292afc1285cc5fb0b6f8d12202a 100644 (file)
@@ -47,4 +47,4 @@ geompy.addToStudy(aGeomGroup2, "Group on Edges")
 aSmeshGroup1 = mesh.GroupOnGeom(aGeomGroup1, "SMESHGroup1", SMESH.FACE)
 aSmeshGroup2 = mesh.GroupOnGeom(aGeomGroup2, "SMESHGroup2", SMESH.EDGE)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 498235198a9ff4316916f83cbed5612832941daa..6d21e8fb804f12b13f43eebc2ad1b1210bd08ecd 100755 (executable)
@@ -53,25 +53,25 @@ geompy.addToStudy(aGeomGroup2, "Group on Edges")
 aSmeshGroup1 = mesh.GroupOnGeom(aGeomGroup1, "SMESHGroup1", SMESH.FACE)
 aSmeshGroup2 = mesh.GroupOnGeom(aGeomGroup2, "SMESHGroup2", SMESH.EDGE)
 
-print "Create aGroupOnShell - a group linked to a shell"
+print("Create aGroupOnShell - a group linked to a shell")
 aGroupOnShell = mesh.GroupOnGeom(shell, "GroupOnShell", SMESH.EDGE)
-print "aGroupOnShell type =", aGroupOnShell.GetType()
-print "aGroupOnShell size =", aGroupOnShell.Size()
-print "aGroupOnShell ids :", aGroupOnShell.GetListOfID()
+print("aGroupOnShell type =", aGroupOnShell.GetType())
+print("aGroupOnShell size =", aGroupOnShell.Size())
+print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
 
-print " "
+print(" ")
 
-print "Modify <LocalLength> hypothesis: 100 -> 50"
+print("Modify <LocalLength> hypothesis: 100 -> 50")
 hypLen1.SetLength(50)
-print "Contents of aGroupOnShell changes:"
-print "aGroupOnShell size =", aGroupOnShell.Size()
-print "aGroupOnShell ids :", aGroupOnShell.GetListOfID()
+print("Contents of aGroupOnShell changes:")
+print("aGroupOnShell size =", aGroupOnShell.Size())
+print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
 
-print " "
+print(" ")
 
-print "Re-compute mesh, contents of aGroupOnShell changes again:"
+print("Re-compute mesh, contents of aGroupOnShell changes again:")
 mesh.Compute()
-print "aGroupOnShell size =", aGroupOnShell.Size()
-print "aGroupOnShell ids :", aGroupOnShell.GetListOfID()
+print("aGroupOnShell size =", aGroupOnShell.Size())
+print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 4d7f05901b0b64d63379d94587c98facc5429fc7..f0e56293d43456aef9f2ca08550437efcf0f21ed 100644 (file)
@@ -47,4 +47,4 @@ BuildGroupLyingOn(mesh.GetMesh(), SMESH.FACE, "Group of faces lying on edge #1",
 # Second way
 mesh.MakeGroup("Group of faces lying on edge #2", SMESH.FACE, SMESH.FT_LyingOnGeom, edge)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 3e27b57ce9bf61c20ce2c6b4cd44cf97a7a10fa3..77055838d17dc6b53488d6bff1c3ce206fe976fe 100755 (executable)
@@ -30,46 +30,46 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import os
 import math
 
 #Sketcher_1 creation
-print "Sketcher creation..."
+print("Sketcher creation...")
 Sketcher_1 = geompy.MakeSketcher("Sketcher:F 100 -57.7:TT 100 57.7:TT 0 115.47:TT -100 57.7:TT -100 -57.7:TT 0 -115.47:WW") 
 geompy.addToStudy(Sketcher_1, "Sketcher_1")
 Face_1 = geompy.MakeFace(Sketcher_1, 1)
 geompy.addToStudy(Face_1, "Face_1")
 
 #Line creation
-print "Line  creation..."
+print("Line  creation...")
 Line_1 = geompy.MakeLineTwoPnt(geompy.MakeVertex(0,0,0), geompy.MakeVertex(0,0,100))
 geompy.addToStudy(Line_1, "Line_1")
 
 #Prism creation
-print "Prism creation..."
+print("Prism creation...")
 Prism_1 = geompy.MakePrismVecH(Face_1, Line_1, 100)
 geompy.addToStudy(Prism_1, "Prism_1")
 
 #Sketcher_2 creation
-print "Sketcher creation..."
+print("Sketcher creation...")
 Sketcher_2 = geompy.MakeSketcher("Sketcher:F 50 0:TT 80 0:TT 112 13:TT 112 48:TT 80 63:TT 80 90:TT 50 90:WW", [0,0,0, 1,0,0, 0,1,0]) 
 geompy.addToStudy(Sketcher_2, "Sketcher_2")
 Face_2 = geompy.MakeFace(Sketcher_2, 1)
 geompy.addToStudy(Face_2, "Face_2")
 
 #Revolution creation
-print "Revolution creation..."
+print("Revolution creation...")
 Revolution_1 = geompy.MakeRevolution(Face_2, Line_1, 2*math.pi)
 geompy.addToStudy(Revolution_1, "Revolution_1")
 
 #Common applying
-print "Common of Revolution and Prism..."
+print("Common of Revolution and Prism...")
 Common_1 = geompy.MakeBoolean(Revolution_1, Prism_1, 1)
 geompy.addToStudy(Common_1, "Common_1")
 
@@ -80,12 +80,12 @@ for i in range(0, len(CommonExplodedListEdges)):
     geompy.addToStudyInFather(Common_1, CommonExplodedListEdges[i], name)
 
 #Fillet applying
-print "Fillet creation..."
+print("Fillet creation...")
 Fillet_1 = geompy.MakeFillet(Common_1, 10, geompy.ShapeType["EDGE"], [5])
 geompy.addToStudy(Fillet_1, "Fillet_1")
 
 #Chamfer applying
-print "Chamfer creation..."
+print("Chamfer creation...")
 cyl_face = geompy.GetFaceNearPoint( Fillet_1, geompy.MakeVertex( 50, 0, 45 ), theName='cyl_face')
 cyl_face_id = geompy.GetSubShapeID( Fillet_1, cyl_face )
 top_face = geompy.GetFaceNearPoint( Fillet_1, geompy.MakeVertex( 60, 0, 90 ), theName='top_face')
@@ -99,14 +99,14 @@ top_face_id = geompy.GetSubShapeID( Chamfer_1, top_face )
 Chamfer_2 = geompy.MakeChamferEdge(Chamfer_1, 10, 10, cyl_face_id, top_face_id, theName='Chamfer_2' )
 
 #Import of the shape from "slots.brep"
-print "Import multi-rotation from the DATA_DIR/Shapes/Brep/slots.brep"
+print("Import multi-rotation from the DATA_DIR/Shapes/Brep/slots.brep")
 thePath = os.getenv("DATA_DIR")
 theFileName = os.path.join( thePath,"Shapes","Brep","slots.brep")
 theShapeForCut = geompy.ImportBREP(theFileName)
 geompy.addToStudy(theShapeForCut, "slot.brep_1")
 
 #Cut applying
-print "Cut..."
+print("Cut...")
 Cut_1 = geompy.MakeBoolean(Chamfer_2, theShapeForCut, 2)
 Cut_1_ID = geompy.addToStudy(Cut_1, "Cut_1")
 
@@ -118,44 +118,44 @@ shape_mesh = salome.IDToObject( Cut_1_ID )
 mesh = smesh.Mesh(shape_mesh, "Nut")
 
 #HYPOTHESIS CREATION
-print "-------------------------- Average length"
+print("-------------------------- Average length")
 theAverageLength = 5
 algoReg1D = mesh.Segment()
 hAvLength = algoReg1D.LocalLength(theAverageLength)
-print hAvLength.GetName()
-print hAvLength.GetId()
-print hAvLength.GetLength()
+print(hAvLength.GetName())
+print(hAvLength.GetId())
+print(hAvLength.GetLength())
 smesh.SetName(hAvLength, "AverageLength_"+str(theAverageLength))
 
-print "-------------------------- MaxElementArea"
+print("-------------------------- MaxElementArea")
 theMaxElementArea = 20
 algoMef = mesh.Triangle(smeshBuilder.MEFISTO)
 hArea = algoMef.MaxElementArea( theMaxElementArea )
-print hArea.GetName()
-print hArea.GetId()
-print hArea.GetMaxElementArea()
+print(hArea.GetName())
+print(hArea.GetId())
+print(hArea.GetMaxElementArea())
 smesh.SetName(hArea, "MaxElementArea_"+str(theMaxElementArea))
 
-print "-------------------------- MaxElementVolume"
+print("-------------------------- MaxElementVolume")
 theMaxElementVolume = 150
 algoNg = mesh.Tetrahedron(smeshBuilder.NETGEN)
 hVolume = algoNg.MaxElementVolume( theMaxElementVolume )
-print hVolume.GetName()
-print hVolume.GetId()
-print hVolume.GetMaxElementVolume()
+print(hVolume.GetName())
+print(hVolume.GetId())
+print(hVolume.GetMaxElementVolume())
 smesh.SetName(hVolume, "MaxElementVolume_"+str(theMaxElementVolume))
 
 
-print "-------------------------- compute the mesh of the mechanic piece"
+print("-------------------------- compute the mesh of the mechanic piece")
 mesh.Compute()
 
-print "Information about the Nut:"
-print "Number of nodes       : ", mesh.NbNodes()
-print "Number of edges       : ", mesh.NbEdges()
-print "Number of faces       : ", mesh.NbFaces()
-print "Number of triangles   : ", mesh.NbTriangles()
-print "Number of quadrangles : ", mesh.NbQuadrangles()
-print "Number of volumes     : ", mesh.NbVolumes()
-print "Number of tetrahedrons: ", mesh.NbTetras()
+print("Information about the Nut:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of quadrangles : ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index aee34bb7eb4744debae0ed718d9daa961e1be84d..c12165c0dd60815b84c143d3932469af60ab06b5 100644 (file)
@@ -29,11 +29,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 from math import sqrt
 
@@ -43,7 +43,7 @@ from math import sqrt
 barier_height = 7.0
 barier_radius = 5.6 / 2 # Rayon de la bariere
 colis_radius = 1.0 / 2  # Rayon du colis
-colis_step = 2.0        # Distance s\89parant deux colis
+colis_step = 2.0        # Distance sparant deux colis
 cc_width = 0.11         # Epaisseur du complement de colisage
 
 # --
@@ -83,15 +83,15 @@ Compound1 = geompy.MakeCompound([colis_cc_multi, barier])
 SubShape_theShape = geompy.SubShapeAll(Compound1,geompy.ShapeType["SOLID"])
 alveole = geompy.MakePartition(SubShape_theShape)
 
-print "Analysis of the geometry to mesh (right after the Partition) :"
+print("Analysis of the geometry to mesh (right after the Partition) :")
 
 subShellList = geompy.SubShapeAll(alveole, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(alveole, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(alveole, geompy.ShapeType["EDGE"])
 
-print "number of Shells in alveole : ", len(subShellList)
-print "number of Faces  in alveole : ", len(subFaceList)
-print "number of Edges  in alveole : ", len(subEdgeList)
+print("number of Shells in alveole : ", len(subShellList))
+print("number of Faces  in alveole : ", len(subFaceList))
+print("number of Edges  in alveole : ", len(subEdgeList))
 
 subshapes = geompy.SubShapeAll(alveole, geompy.ShapeType["SHAPE"])
 
@@ -113,18 +113,18 @@ alveole = geompy.MakeCompound( [ comp, subshapes[8] ])
 
 idalveole = geompy.addToStudy(alveole, "alveole")
 
-print "Analysis of the geometry to mesh (right after the MakeCompound) :"
+print("Analysis of the geometry to mesh (right after the MakeCompound) :")
 
 subShellList = geompy.SubShapeAll(alveole, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(alveole, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(alveole, geompy.ShapeType["EDGE"])
 
-print "number of Shells in alveole : ", len(subShellList)
-print "number of Faces  in alveole : ", len(subFaceList)
-print "number of Edges  in alveole : ", len(subEdgeList)
+print("number of Shells in alveole : ", len(subShellList))
+print("number of Faces  in alveole : ", len(subFaceList))
+print("number of Edges  in alveole : ", len(subEdgeList))
 
 status = geompy.CheckShape(alveole)
-print " check status ", status
+print(" check status ", status)
 
 
 # ---- init a Mesh with the alveole
@@ -132,56 +132,56 @@ shape_mesh = salome.IDToObject( idalveole )
 
 mesh = smesh.Mesh(shape_mesh, "MeshAlveole")
 
-print "-------------------------- create Hypothesis (In this case global hypothesis are used)"
+print("-------------------------- create Hypothesis (In this case global hypothesis are used)")
 
-print "-------------------------- NumberOfSegments"
+print("-------------------------- NumberOfSegments")
 
 numberOfSegments = 10
 
 regular1D = mesh.Segment()
 hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
-print "-------------------------- MaxElementArea"
+print("-------------------------- MaxElementArea")
 
 maxElementArea = 0.1
 
 mefisto2D = mesh.Triangle()
 hypArea = mefisto2D.MaxElementArea(maxElementArea)
-print hypArea.GetName()
-print hypArea.GetId()
-print hypArea.GetMaxElementArea()
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
 smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
-print "-------------------------- MaxElementVolume"
+print("-------------------------- MaxElementVolume")
 
 maxElementVolume = 0.5
 
 netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
 hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print hypVolume.GetName()
-print hypVolume.GetId()
-print hypVolume.GetMaxElementVolume()
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
 smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
-print "-------------------------- compute the mesh of alveole "
+print("-------------------------- compute the mesh of alveole ")
 ret = mesh.Compute()
 
 if ret != 0:
     log=mesh.GetLog(0) # no erase trace
     for linelog in log:
-        print linelog
-    print "Information about the Mesh_mechanic:"
-    print "Number of nodes       : ", mesh.NbNodes()
-    print "Number of edges       : ", mesh.NbEdges()
-    print "Number of faces       : ", mesh.NbFaces()
-    print "Number of triangles   : ", mesh.NbTriangles()
-    print "Number of volumes     : ", mesh.NbVolumes()
-    print "Number of tetrahedrons: ", mesh.NbTetras()
+        print(linelog)
+    print("Information about the Mesh_mechanic:")
+    print("Number of nodes       : ", mesh.NbNodes())
+    print("Number of edges       : ", mesh.NbEdges())
+    print("Number of faces       : ", mesh.NbFaces())
+    print("Number of triangles   : ", mesh.NbTriangles())
+    print("Number of volumes     : ", mesh.NbVolumes())
+    print("Number of tetrahedrons: ", mesh.NbTetras())
 else:
-    print "problem when computing the mesh"
+    print("problem when computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index faadf285e73105204d0242a298bab114e9cd1929..be5e1e24e727528776d14ca1659d28ce129f9b68 100644 (file)
@@ -31,11 +31,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -118,4 +118,4 @@ my_hexa.Quadrangle()
 my_hexa.Hexahedron()
 my_hexa.Compute()
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 65a12f5c3c8c141017538c6f2d88cba7fff63ce4..3d6d664f89438dd10942760c84886e7ca9740e7c 100644 (file)
@@ -31,11 +31,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -46,4 +46,4 @@ isMeshTest   = 1 # True
 
 GEOM_Spanner.MakeSpanner(geompy, math, isBlocksTest, isMeshTest, smesh)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 1d486f24a5f1c8efdb1687bb94dbd2f0e9600166..e7a8947264932abefe3e8d95b1336fd4c2aeab6c 100755 (executable)
@@ -34,11 +34,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 from salome import sg
 
@@ -70,4 +70,4 @@ alg3D.SetName("algo3D")
 
 box_mesh.Compute()
 
-sg.updateObjBrowser(True)
+sg.updateObjBrowser()
index 6bba8e16502c03fe95aca0aa16d4b33d338fe5f5..bab8d4abb796f0ca2f86a0b97112eb7f3d6e1a48 100644 (file)
@@ -28,11 +28,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 # ---- define 2 boxes box1 and box2
@@ -41,27 +41,27 @@ box1 = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
 
 idbox1 = geompy.addToStudy(box1, "box1")
 
-print "Analysis of the geometry box1 :"
+print("Analysis of the geometry box1 :")
 subShellList = geompy.SubShapeAll(box1, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(box1, geompy.ShapeType["EDGE"])
 
-print "number of Shells in box1 : ", len(subShellList)
-print "number of Faces  in box1 : ", len(subFaceList)
-print "number of Edges  in box1 : ", len(subEdgeList)
+print("number of Shells in box1 : ", len(subShellList))
+print("number of Faces  in box1 : ", len(subFaceList))
+print("number of Edges  in box1 : ", len(subEdgeList))
 
 box2 = geompy.MakeBox(100., 0., 0., 200., 200., 300.)
 
 idbox2 = geompy.addToStudy(box2, "box2")
 
-print "Analysis of the geometry box2 :"
+print("Analysis of the geometry box2 :")
 subShellList = geompy.SubShapeAll(box2, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])
 
-print "number of Shells in box2 : ", len(subShellList)
-print "number of Faces  in box2 : ", len(subFaceList)
-print "number of Edges  in box2 : ", len(subEdgeList)
+print("number of Shells in box2 : ", len(subShellList))
+print("number of Faces  in box2 : ", len(subFaceList))
+print("number of Edges  in box2 : ", len(subEdgeList))
 
 # append the tow boxes to make ine shel, referrencing only once
 # the internal interface
@@ -69,14 +69,14 @@ print "number of Edges  in box2 : ", len(subEdgeList)
 shell = geompy.MakePartition([box1, box2])
 idshell = geompy.addToStudy(shell, "shell")
 
-print "Analysis of the geometry shell (union of box1 and box2) :"
+print("Analysis of the geometry shell (union of box1 and box2) :")
 subShellList = geompy.SubShapeAll(shell, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(shell, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(shell, geompy.ShapeType["EDGE"])
 
-print "number of Shells in shell : ", len(subShellList)
-print "number of Faces  in shell : ", len(subFaceList)
-print "number of Edges  in shell : ", len(subEdgeList)
+print("number of Shells in shell : ", len(subShellList))
+print("number of Faces  in shell : ", len(subFaceList))
+print("number of Edges  in shell : ", len(subEdgeList))
 
 
 ### ---------------------------- SMESH --------------------------------------
@@ -88,54 +88,54 @@ mesh = smesh.Mesh(shell, "MeshBox2")
 
 # ---- set Hypothesis and Algorithm
 
-print "-------------------------- NumberOfSegments"
+print("-------------------------- NumberOfSegments")
 
 numberOfSegments = 10
 
 regular1D = mesh.Segment()
 hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
-print "-------------------------- MaxElementArea"
+print("-------------------------- MaxElementArea")
 
 maxElementArea = 500
 
 mefisto2D = mesh.Triangle()
 hypArea = mefisto2D.MaxElementArea(maxElementArea)
-print hypArea.GetName()
-print hypArea.GetId()
-print hypArea.GetMaxElementArea()
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
 smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
-print "-------------------------- MaxElementVolume"
+print("-------------------------- MaxElementVolume")
 
 maxElementVolume = 500
 
 netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
 hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print hypVolume.GetName()
-print hypVolume.GetId()
-print hypVolume.GetMaxElementVolume()
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
 smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
-print "-------------------------- compute shell"
+print("-------------------------- compute shell")
 ret = mesh.Compute()
-print ret
+print(ret)
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
     for linelog in log:
-        print linelog
-    print "Information about the MeshBox2:"
-    print "Number of nodes       : ", mesh.NbNodes()
-    print "Number of edges       : ", mesh.NbEdges()
-    print "Number of faces       : ", mesh.NbFaces()
-    print "Number of triangles   : ", mesh.NbTriangles()
-    print "Number of volumes     : ", mesh.NbVolumes()
-    print "Number of tetrahedrons: ", mesh.NbTetras()
+        print(linelog)
+    print("Information about the MeshBox2:")
+    print("Number of nodes       : ", mesh.NbNodes())
+    print("Number of edges       : ", mesh.NbEdges())
+    print("Number of faces       : ", mesh.NbFaces())
+    print("Number of triangles   : ", mesh.NbTriangles())
+    print("Number of volumes     : ", mesh.NbVolumes())
+    print("Number of tetrahedrons: ", mesh.NbTetras())
 else:
-    print "probleme when computing the mesh"
+    print("probleme when computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 6121df448b78d776151cffe1e7fc85196bc1c091..5f521343890c7e131c9ec5e5155c2ef41a7e157b 100644 (file)
@@ -29,11 +29,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---- define 3 boxes box1, box2 and box3
 
@@ -41,52 +41,52 @@ box1 = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
 
 idbox1 = geompy.addToStudy(box1, "box1")
 
-print "Analysis of the geometry box1 :"
+print("Analysis of the geometry box1 :")
 subShellList = geompy.SubShapeAll(box1, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(box1, geompy.ShapeType["EDGE"])
 
-print "number of Shells in box1 : ", len(subShellList)
-print "number of Faces  in box1 : ", len(subFaceList)
-print "number of Edges  in box1 : ", len(subEdgeList)
+print("number of Shells in box1 : ", len(subShellList))
+print("number of Faces  in box1 : ", len(subFaceList))
+print("number of Edges  in box1 : ", len(subEdgeList))
 
 box2 = geompy.MakeBox(100., 0., 0., 200., 200., 300.)
 
 idbox2 = geompy.addToStudy(box2, "box2")
 
-print "Analysis of the geometry box2 :"
+print("Analysis of the geometry box2 :")
 subShellList = geompy.SubShapeAll(box2, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])
 
-print "number of Shells in box2 : ", len(subShellList)
-print "number of Faces  in box2 : ", len(subFaceList)
-print "number of Edges  in box2 : ", len(subEdgeList)
+print("number of Shells in box2 : ", len(subShellList))
+print("number of Faces  in box2 : ", len(subFaceList))
+print("number of Edges  in box2 : ", len(subEdgeList))
 
 box3 = geompy.MakeBox(0., 0., 300., 200., 200., 500.)
 
 idbox3 = geompy.addToStudy(box3, "box3")
 
-print "Analysis of the geometry box3 :"
+print("Analysis of the geometry box3 :")
 subShellList = geompy.SubShapeAll(box3, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(box3, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(box3, geompy.ShapeType["EDGE"])
 
-print "number of Shells in box3 : ", len(subShellList)
-print "number of Faces  in box3 : ", len(subFaceList)
-print "number of Edges  in box3 : ", len(subEdgeList)
+print("number of Shells in box3 : ", len(subShellList))
+print("number of Faces  in box3 : ", len(subFaceList))
+print("number of Edges  in box3 : ", len(subEdgeList))
 
 shell = geompy.MakePartition([box1, box2, box3])
 idshell = geompy.addToStudy(shell,"shell")
 
-print "Analysis of the geometry shell (union of box1, box2 and box3) :"
+print("Analysis of the geometry shell (union of box1, box2 and box3) :")
 subShellList = geompy.SubShapeAll(shell, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(shell, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(shell, geompy.ShapeType["EDGE"])
 
-print "number of Shells in shell : ", len(subShellList)
-print "number of Faces  in shell : ", len(subFaceList)
-print "number of Edges  in shell : ", len(subEdgeList)
+print("number of Shells in shell : ", len(subShellList))
+print("number of Faces  in shell : ", len(subFaceList))
+print("number of Edges  in shell : ", len(subEdgeList))
 
 
 ### ---------------------------- SMESH --------------------------------------
@@ -98,54 +98,54 @@ mesh = smesh.Mesh(shell, "MeshBox3")
 
 # ---- set Hypothesis and Algorithm
 
-print "-------------------------- NumberOfSegments"
+print("-------------------------- NumberOfSegments")
 
 numberOfSegments = 10
 
 regular1D = mesh.Segment()
 hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
-print "-------------------------- MaxElementArea"
+print("-------------------------- MaxElementArea")
 
 maxElementArea = 500
 
 mefisto2D = mesh.Triangle()
 hypArea = mefisto2D.MaxElementArea(maxElementArea)
-print hypArea.GetName()
-print hypArea.GetId()
-print hypArea.GetMaxElementArea()
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
 smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
-print "-------------------------- MaxElementVolume"
+print("-------------------------- MaxElementVolume")
 
 maxElementVolume = 500
 
 netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
 hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print hypVolume.GetName()
-print hypVolume.GetId()
-print hypVolume.GetMaxElementVolume()
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
 smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
-print "-------------------------- compute shell"
+print("-------------------------- compute shell")
 ret = mesh.Compute()
-print ret
+print(ret)
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
     for linelog in log:
-        print linelog
-    print "Information about the MeshBox3:"
-    print "Number of nodes       : ", mesh.NbNodes()
-    print "Number of edges       : ", mesh.NbEdges()
-    print "Number of faces       : ", mesh.NbFaces()
-    print "Number of triangles   : ", mesh.NbTriangles()
-    print "Number of volumes     : ", mesh.NbVolumes()
-    print "Number of tetrahedrons: ", mesh.NbTetras()
+        print(linelog)
+    print("Information about the MeshBox3:")
+    print("Number of nodes       : ", mesh.NbNodes())
+    print("Number of edges       : ", mesh.NbEdges())
+    print("Number of faces       : ", mesh.NbFaces())
+    print("Number of triangles   : ", mesh.NbTriangles())
+    print("Number of volumes     : ", mesh.NbVolumes())
+    print("Number of tetrahedrons: ", mesh.NbTetras())
 else:
-    print "probleme when computing the mesh"
+    print("probleme when computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 4938de61eae577f5ed11bd78fac4e2916cef352e..f4b257c87ac59f0062f9f0393a1d0156d12ba3f2 100644 (file)
@@ -28,11 +28,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---- define a boxe
 
@@ -40,14 +40,14 @@ box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
 
 idbox = geompy.addToStudy(box, "box")
 
-print "Analysis of the geometry box :"
+print("Analysis of the geometry box :")
 subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"])
 
-print "number of Shells in box : ", len(subShellList)
-print "number of Faces  in box : ", len(subFaceList)
-print "number of Edges  in box : ", len(subEdgeList)
+print("number of Shells in box : ", len(subShellList))
+print("number of Faces  in box : ", len(subFaceList))
+print("number of Edges  in box : ", len(subEdgeList))
 
 
 ### ---------------------------- SMESH --------------------------------------
@@ -58,53 +58,53 @@ mesh = smesh.Mesh(box, "MeshBox")
 
 # ---- set Hypothesis and Algorithm
 
-print "-------------------------- NumberOfSegments"
+print("-------------------------- NumberOfSegments")
 numberOfSegments = 10
 
 regular1D = mesh.Segment()
 hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
-print "-------------------------- MaxElementArea"
+print("-------------------------- MaxElementArea")
 
 maxElementArea = 500
 
 mefisto2D = mesh.Triangle()
 hypArea = mefisto2D.MaxElementArea(maxElementArea)
-print hypArea.GetName()
-print hypArea.GetId()
-print hypArea.GetMaxElementArea()
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
 smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
-print "-------------------------- MaxElementVolume"
+print("-------------------------- MaxElementVolume")
 
 maxElementVolume = 500
 
 netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
 hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print hypVolume.GetName()
-print hypVolume.GetId()
-print hypVolume.GetMaxElementVolume()
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
 smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
-print "-------------------------- compute the mesh of the boxe"
+print("-------------------------- compute the mesh of the boxe")
 ret = mesh.Compute()
-print ret
+print(ret)
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
     for linelog in log:
-        print linelog
-    print "Information about the MeshBox:"
-    print "Number of nodes       : ", mesh.NbNodes()
-    print "Number of edges       : ", mesh.NbEdges()
-    print "Number of faces       : ", mesh.NbFaces()
-    print "Number of triangles   : ", mesh.NbTriangles()
-    print "Number of volumes     : ", mesh.NbVolumes()
-    print "Number of tetrahedrons: ", mesh.NbTetras()
+        print(linelog)
+    print("Information about the MeshBox:")
+    print("Number of nodes       : ", mesh.NbNodes())
+    print("Number of edges       : ", mesh.NbEdges())
+    print("Number of faces       : ", mesh.NbFaces())
+    print("Number of triangles   : ", mesh.NbTriangles())
+    print("Number of volumes     : ", mesh.NbVolumes())
+    print("Number of tetrahedrons: ", mesh.NbTetras())
 else:
-    print "probleme when computing the mesh"
+    print("probleme when computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index dfefee94cb1c4d6fcf07265435d56b37b82aa169..871ee0913baebc65d314025ef0313ae4cb93a516 100644 (file)
@@ -30,7 +30,7 @@ import SMESH_mechanic
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 mesh = SMESH_mechanic.mesh
 
 # ---- Criterion : AREA > 100
@@ -40,7 +40,7 @@ aGroup = mesh.MakeGroup("Area > 100", SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreTh
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Area > 100 Nb = ", len( anIds )
+print("Criterion: Area > 100 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
@@ -52,7 +52,7 @@ aGroup = mesh.MakeGroup("Taper > 3e-15", SMESH.FACE, SMESH.FT_Taper, SMESH.FT_Mo
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Taper > 3e-15 Nb = ", len( anIds )
+print("Criterion: Taper > 3e-15 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
@@ -64,7 +64,7 @@ aGroup = mesh.MakeGroup("Aspect Ratio > 1.3", SMESH.FACE, SMESH.FT_AspectRatio,
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Aspect Ratio > 1.3 Nb = ", len( anIds )
+print("Criterion: Aspect Ratio > 1.3 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
@@ -76,7 +76,7 @@ aGroup = mesh.MakeGroup("Minimum Angle < 30", SMESH.FACE, SMESH.FT_MinimumAngle,
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Minimum Angle < 30 Nb = ", len( anIds )
+print("Criterion: Minimum Angle < 30 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
@@ -88,7 +88,7 @@ aGroup = mesh.MakeGroup("Warp > 2e-13", SMESH.FACE, SMESH.FT_Warping, SMESH.FT_M
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Warp > 2e-13 Nb = ", len( anIds )
+print("Criterion: Warp > 2e-13 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
@@ -100,7 +100,7 @@ aGroup = mesh.MakeGroup("Skew > 18", SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreTha
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Skew > 18 Nb = ", len( anIds )
+print("Criterion: Skew > 18 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
@@ -112,7 +112,7 @@ aGroup = mesh.MakeGroup("Length > 10", SMESH.FACE, SMESH.FT_Length, SMESH.FT_Mor
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Length > 10 Nb = ", len( anIds )
+print("Criterion: Length > 10 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
@@ -124,7 +124,7 @@ aGroup = mesh.MakeGroup("Borders at multi-connections = 2", SMESH.EDGE, SMESH.FT
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Borders at multi-connections = 2 Nb = ", len( anIds )
+print("Criterion: Borders at multi-connections = 2 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
@@ -136,9 +136,9 @@ aGroup = mesh.MakeGroup("Element Diameter 2D > 10", SMESH.FACE, SMESH.FT_MaxElem
 
 # print result
 anIds = aGroup.GetIDs()
-print "Criterion: Element Diameter 2D > 10 Nb = ", len( anIds )
+print("Criterion: Element Diameter 2D > 10 Nb = ", len( anIds ))
 #for i in range( len( anIds ) ):
   #print anIds[ i ]
 
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index ef6ea57c1dc63563aac531a19e54d223e15b7327..68558d27ce1002edd90dd6447d04531a1c033d4b 100755 (executable)
@@ -36,11 +36,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -103,14 +103,14 @@ tol3d = 1.e-3
 vol = geompy.MakeGlueFaces(volComp,tol3d)
 idVol = geompy.addToStudy(vol,"volume")
 
-print "Analysis of the final volume:"
+print("Analysis of the final volume:")
 subShellList = geompy.SubShapeAllSorted(vol,ShapeTypeShell)
 subFaceList = geompy.SubShapeAllSorted(vol,ShapeTypeFace)
 subEdgeList = geompy.SubShapeAllSorted(vol,ShapeTypeEdge)
 
-print "number of Shells in the volume : ",len(subShellList)
-print "number of Faces in the volume : ",len(subFaceList)
-print "number of Edges in the volume : ",len(subEdgeList)
+print("number of Shells in the volume : ",len(subShellList))
+print("number of Faces in the volume : ",len(subFaceList))
+print("number of Edges in the volume : ",len(subEdgeList))
 
 idSubEdge = []
 for k in range(len(subEdgeList)):
@@ -131,7 +131,7 @@ for i in range(8):
     idEdgeZ.append(geompy.addToStudyInFather(vol,edgeZ[i],"EdgeZ"+str(i+1)))
 
 ### ---------------------------- SMESH --------------------------------------
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 # ---- init a Mesh with the volume
 
@@ -139,36 +139,36 @@ mesh = smesh.Mesh(vol, "meshVolume")
 
 # ---- set Hypothesis and Algorithm to main shape
 
-print "-------------------------- NumberOfSegments the global one"
+print("-------------------------- NumberOfSegments the global one")
 
 numberOfSegments = 10
 
 regular1D = mesh.Segment()
 regular1D.SetName("Wire Discretisation")
 hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments")
 
 
-print "-------------------------- Quadrangle_2D"
+print("-------------------------- Quadrangle_2D")
 
 quad2D=mesh.Quadrangle()
 quad2D.SetName("Quadrangle_2D")
 
-print "-------------------------- Hexa_3D"
+print("-------------------------- Hexa_3D")
 
 hexa3D=mesh.Hexahedron()
 hexa3D.SetName("Hexa_3D")
 
 
-print "-------------------------- NumberOfSegments in the Z direction"
+print("-------------------------- NumberOfSegments in the Z direction")
 
 numberOfSegmentsZ = 40
 
 for i in range(8):
-    print "-------------------------- add hypothesis to edge in the Z directions", (i+1)
+    print("-------------------------- add hypothesis to edge in the Z directions", (i+1))
 
     algo = mesh.Segment(edgeZ[i])
     hyp = algo.NumberOfSegments(numberOfSegmentsZ)
@@ -176,25 +176,25 @@ for i in range(8):
     smesh.SetName(algo.GetSubMesh(), "SubMeshEdgeZ_"+str(i+1))
   
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
 
-print "-------------------------- compute the mesh of the volume"
+print("-------------------------- compute the mesh of the volume")
 
 ret=mesh.Compute()
 
-print ret
+print(ret)
 if ret != 0:
 ##    log=mesh.GetLog(0) # no erase trace
 ##    for linelog in log:
 ##        print linelog
-    print "Information about the MeshBox :"
-    print "Number of nodes       : ", mesh.NbNodes()
-    print "Number of edges       : ", mesh.NbEdges()
-    print "Number of faces       : ", mesh.NbFaces()
-    print "Number of triangles   : ", mesh.NbTriangles()
-    print "Number of volumes     : ", mesh.NbVolumes()
-    print "Number of tetrahedrons: ", mesh.NbTetras()
+    print("Information about the MeshBox :")
+    print("Number of nodes       : ", mesh.NbNodes())
+    print("Number of edges       : ", mesh.NbEdges())
+    print("Number of faces       : ", mesh.NbFaces())
+    print("Number of triangles   : ", mesh.NbTriangles())
+    print("Number of volumes     : ", mesh.NbVolumes())
+    print("Number of tetrahedrons: ", mesh.NbTetras())
 else:
-    print "problem when Computing the mesh"
+    print("problem when Computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 6462381c2aefc89f574d6a28d66ca895251aec47..b4a4f72244291ad4b164e37452c5d3e275b91dfb 100644 (file)
@@ -30,7 +30,7 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import math
 
index 7d9245c3b5f908379f52129fed7dcb0f284fbde5..076e13bf264fcc1fd5b5fb1eed919d336f7f961c 100644 (file)
@@ -30,27 +30,27 @@ import SMESH_fixation
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 compshell = SMESH_fixation.compshell
 idcomp = SMESH_fixation.idcomp
 geompy = SMESH_fixation.geompy
 salome = SMESH_fixation.salome
 
-print "Analysis of the geometry to be meshed :"
+print("Analysis of the geometry to be meshed :")
 subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
 
-print "number of Shells in compshell : ", len(subShellList)
-print "number of Faces  in compshell : ", len(subFaceList)
-print "number of Edges  in compshell : ", len(subEdgeList)
+print("number of Shells in compshell : ", len(subShellList))
+print("number of Faces  in compshell : ", len(subFaceList))
+print("number of Edges  in compshell : ", len(subEdgeList))
 
 status = geompy.CheckShape(compshell)
-print " check status ", status
+print(" check status ", status)
 
 ### ---------------------------- SMESH --------------------------------------
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 # ---- init a Mesh with the compshell
 shape_mesh = salome.IDToObject( idcomp  )
@@ -60,43 +60,43 @@ mesh = smesh.Mesh(shape_mesh, "MeshCompShell")
 
 # ---- set Hypothesis and Algorithm
 
-print "-------------------------- NumberOfSegments"
+print("-------------------------- NumberOfSegments")
 
 numberOfSegments = 5
 
 regular1D = mesh.Segment()
 regular1D.SetName("Wire Discretisation")
 hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
-print "-------------------------- Quadrangle_2D"
+print("-------------------------- Quadrangle_2D")
 
 quad2D = mesh.Quadrangle()
 quad2D.SetName("Quadrangle_2D")
 
-print "-------------------------- Hexa_3D"
+print("-------------------------- Hexa_3D")
 
 hexa3D = mesh.Hexahedron()
 hexa3D.SetName("Hexa_3D")
 
-print "-------------------------- compute compshell"
+print("-------------------------- compute compshell")
 ret = mesh.Compute()
-print ret
+print(ret)
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
     for linelog in log:
-        print linelog
-    print "Information about the MeshcompShel:"
-    print "Number of nodes       : ", mesh.NbNodes()
-    print "Number of edges       : ", mesh.NbEdges()
-    print "Number of faces       : ", mesh.NbFaces()
-    print "Number of quadrangles : ", mesh.NbQuadrangles()
-    print "Number of volumes     : ", mesh.NbVolumes()
-    print "Number of hexahedrons : ", mesh.NbHexas()
+        print(linelog)
+    print("Information about the MeshcompShel:")
+    print("Number of nodes       : ", mesh.NbNodes())
+    print("Number of edges       : ", mesh.NbEdges())
+    print("Number of faces       : ", mesh.NbFaces())
+    print("Number of quadrangles : ", mesh.NbQuadrangles())
+    print("Number of volumes     : ", mesh.NbVolumes())
+    print("Number of hexahedrons : ", mesh.NbHexas())
 else:
-    print "problem when Computing the mesh"
+    print("problem when Computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index ed2c999f4f64480be14a3da4721f4e426ee7b8ac..ec532d57f7bb69714dbb6a1a422b52cc211f8792 100644 (file)
@@ -30,29 +30,29 @@ import SMESH_fixation
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 compshell = SMESH_fixation.compshell
 idcomp = SMESH_fixation.idcomp
 geompy = SMESH_fixation.geompy
 salome = SMESH_fixation.salome
 
-print "Analysis of the geometry to be meshed :"
+print("Analysis of the geometry to be meshed :")
 subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
 
-print "number of Shells in compshell : ", len(subShellList)
-print "number of Faces  in compshell : ", len(subFaceList)
-print "number of Edges  in compshell : ", len(subEdgeList)
+print("number of Shells in compshell : ", len(subShellList))
+print("number of Faces  in compshell : ", len(subFaceList))
+print("number of Edges  in compshell : ", len(subEdgeList))
 
 status = geompy.CheckShape(compshell)
-print " check status ", status
+print(" check status ", status)
 
 ### ---------------------------- SMESH --------------------------------------
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
-print "-------------------------- create Mesh, algorithm, hypothesis"
+print("-------------------------- create Mesh, algorithm, hypothesis")
 
 mesh = smesh.Mesh(compshell, "MeshcompShel");
 netgen = mesh.Tetrahedron(smeshBuilder.FULL_NETGEN)
@@ -61,19 +61,19 @@ netgen.SetMaxSize( 50 )
 netgen.SetFineness( smeshBuilder.Fine )
 #netgen.SetOptimize( 1 )
 
-print "-------------------------- compute mesh"
+print("-------------------------- compute mesh")
 ret = mesh.Compute()
-print ret
+print(ret)
 if ret != 0:
-    print "Information about the MeshcompShel:"
-    print "Number of nodes        : ", mesh.GetMesh().NbNodes()
-    print "Number of edges        : ", mesh.GetMesh().NbEdges()
-    print "Number of faces        : ", mesh.GetMesh().NbFaces()
-    print "Number of triangles    : ", mesh.GetMesh().NbTriangles()
-    print "Number of volumes      : ", mesh.GetMesh().NbVolumes()
-    print "Number of tetrahedrons : ", mesh.GetMesh().NbTetras()
+    print("Information about the MeshcompShel:")
+    print("Number of nodes        : ", mesh.GetMesh().NbNodes())
+    print("Number of edges        : ", mesh.GetMesh().NbEdges())
+    print("Number of faces        : ", mesh.GetMesh().NbFaces())
+    print("Number of triangles    : ", mesh.GetMesh().NbTriangles())
+    print("Number of volumes      : ", mesh.GetMesh().NbVolumes())
+    print("Number of tetrahedrons : ", mesh.GetMesh().NbTetras())
     
 else:
-    print "problem when computing the mesh"
+    print("problem when computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 4f578dd0168d1048621624226c4d03d9de4d45bd..ecbd2988354ec3f2823f4f6f8b85d594d4b352c1 100644 (file)
@@ -30,27 +30,27 @@ import SMESH_fixation
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 compshell = SMESH_fixation.compshell
 idcomp = SMESH_fixation.idcomp
 geompy = SMESH_fixation.geompy
 salome = SMESH_fixation.salome
 
-print "Analysis of the geometry to be meshed :"
+print("Analysis of the geometry to be meshed :")
 subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
 
-print "number of Shells in compshell : ", len(subShellList)
-print "number of Faces  in compshell : ", len(subFaceList)
-print "number of Edges  in compshell : ", len(subEdgeList)
+print("number of Shells in compshell : ", len(subShellList))
+print("number of Faces  in compshell : ", len(subFaceList))
+print("number of Edges  in compshell : ", len(subEdgeList))
 
 status = geompy.CheckShape(compshell)
-print " check status ", status
+print(" check status ", status)
 
 ### ---------------------------- SMESH --------------------------------------
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 # ---- init a Mesh with the compshell
 
@@ -59,16 +59,16 @@ mesh = smesh.Mesh(compshell, "MeshcompShell")
 
 # ---- set Hypothesis and Algorithm
 
-print "-------------------------- NumberOfSegments"
+print("-------------------------- NumberOfSegments")
 
 numberOfSegments = 5
 
 regular1D = mesh.Segment()
 regular1D.SetName("Wire Discretisation")
 hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 
 ## print "-------------------------- MaxElementArea"
@@ -83,44 +83,44 @@ smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
 ## print hypArea.GetMaxElementArea()
 ## smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
-print "-------------------------- LengthFromEdges"
+print("-------------------------- LengthFromEdges")
 
 mefisto2D = mesh.Triangle()
 mefisto2D.SetName("MEFISTO_2D")
 hypLengthFromEdges = mefisto2D.LengthFromEdges()
-print hypLengthFromEdges.GetName()
-print hypLengthFromEdges.GetId()
+print(hypLengthFromEdges.GetName())
+print(hypLengthFromEdges.GetId())
 smesh.SetName(hypLengthFromEdges, "LengthFromEdges")
 
 
-print "-------------------------- MaxElementVolume"
+print("-------------------------- MaxElementVolume")
 
 maxElementVolume = 1000
 
 netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
 netgen3D.SetName("NETGEN_3D")
 hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print hypVolume.GetName()
-print hypVolume.GetId()
-print hypVolume.GetMaxElementVolume()
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
 smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
 
-print "-------------------------- compute compshell"
+print("-------------------------- compute compshell")
 ret = mesh.Compute(mesh)
-print ret
+print(ret)
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
     for linelog in log:
-        print linelog
-    print "Information about the MeshcompShel:"
-    print "Number of nodes        : ", mesh.NbNodes()
-    print "Number of edges        : ", mesh.NbEdges()
-    print "Number of faces        : ", mesh.NbFaces()
-    print "Number of triangles    : ", mesh.NbTriangles()
-    print "Number of volumes      : ", mesh.NbVolumes()
-    print "Number of tetrahedrons : ", mesh.NbTetras()
+        print(linelog)
+    print("Information about the MeshcompShel:")
+    print("Number of nodes        : ", mesh.NbNodes())
+    print("Number of edges        : ", mesh.NbEdges())
+    print("Number of faces        : ", mesh.NbFaces())
+    print("Number of triangles    : ", mesh.NbTriangles())
+    print("Number of volumes      : ", mesh.NbVolumes())
+    print("Number of tetrahedrons : ", mesh.NbTetras())
     
 else:
-    print "problem when computing the mesh"
+    print("problem when computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 44ca46630e65ef8143cc7c3fbcb535a871c86c7d..05d1f94f920c11dbc2073ee5d7bfe95969d87baa 100644 (file)
@@ -29,11 +29,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 # ---------------------------- GEOM --------------------------------------
@@ -51,18 +51,18 @@ filename = filePath + filename
 shape = geompy.Import(filename, "BREP")
 idShape = geompy.addToStudy(shape, "flight")
 
-print "Analysis of the geometry flight :"
+print("Analysis of the geometry flight :")
 subShellList = geompy.SubShapeAll(shape, geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(shape, geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(shape, geompy.ShapeType["EDGE"])
 
-print "number of Shells in flight : ", len(subShellList)
-print "number of Faces  in flight : ", len(subFaceList)
-print "number of Edges  in flight : ", len(subEdgeList)
+print("number of Shells in flight : ", len(subShellList))
+print("number of Faces  in flight : ", len(subFaceList))
+print("number of Edges  in flight : ", len(subEdgeList))
 
 
 ### ---------------------------- SMESH --------------------------------------
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 # ---- init a Mesh with the shell
 shape_mesh = salome.IDToObject( idShape )
@@ -72,39 +72,39 @@ mesh = smesh.Mesh(shape_mesh, "MeshFlight")
 
 # ---- set Hypothesis and Algorithm
 
-print "-------------------------- LocalLength"
+print("-------------------------- LocalLength")
 
 lengthOfSegments = 0.3
 
 regular1D = mesh.Segment()
 hypLength = regular1D.LocalLength(lengthOfSegments)
-print hypLength.GetName()
-print hypLength.GetId()
-print hypLength.GetLength()
+print(hypLength.GetName())
+print(hypLength.GetId())
+print(hypLength.GetLength())
 smesh.SetName(hypLength, "LocalLength_" + str(lengthOfSegments))
 
-print "-------------------------- LengthFromEdges"
+print("-------------------------- LengthFromEdges")
 
 mefisto2D = mesh.Triangle()
 hypLengthFromEdge = mefisto2D.LengthFromEdges()
-print hypLengthFromEdge.GetName()
-print hypLengthFromEdge.GetId()
+print(hypLengthFromEdge.GetName())
+print(hypLengthFromEdge.GetId())
 smesh.SetName(hypLengthFromEdge,"LengthFromEdge")
 
-print "-------------------------- compute the skin flight"
+print("-------------------------- compute the skin flight")
 ret = mesh.Compute()
-print ret
+print(ret)
 if ret != 0:
     log = mesh.GetLog(0) # no erase trace
     for linelog in log:
-        print linelog
-    print "Information about the Mesh_mechanic_tetra:"
-    print "Number of nodes      : ", mesh.NbNodes()
-    print "Number of edges      : ", mesh.NbEdges()
-    print "Number of faces      : ", mesh.NbFaces()
-    print "Number of triangles  : ", mesh.NbTriangles()
-    print "Number of volumes    : ", mesh.NbVolumes()
+        print(linelog)
+    print("Information about the Mesh_mechanic_tetra:")
+    print("Number of nodes      : ", mesh.NbNodes())
+    print("Number of edges      : ", mesh.NbEdges())
+    print("Number of faces      : ", mesh.NbFaces())
+    print("Number of triangles  : ", mesh.NbTriangles())
+    print("Number of volumes    : ", mesh.NbVolumes())
 else:
-    print "probleme when computing the mesh"
+    print("probleme when computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 7bd4f3a83dcb675d29a79b5e6e96c4bbffe7c93c..709e27dad4bc1ea26000c5af53b6e82e70ac3711 100644 (file)
@@ -25,11 +25,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 # Create box without one plane
@@ -48,7 +48,7 @@ idbox = geompy.addToStudy( aBox, "box" )
 aBox  = salome.IDToObject( idbox )
 
 # Create mesh
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 mesh = smesh.Mesh(aBox, "Mesh_freebord")
 
@@ -71,8 +71,8 @@ aGroup = mesh.MakeGroupByCriterion("Free edges", aCriterion)
 anIds = aGroup.GetIDs()
 
 # print result
-print "Criterion: Free edges Nb = ", len( anIds )
+print("Criterion: Free edges Nb = ", len( anIds ))
 for i in range( len( anIds ) ):
-  print anIds[ i ]
+  print(anIds[ i ])
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index a2dd15b9361e916a348f19a3d21b5274fcb94259..5dd1d8f9e0d67f764619137c1ee1e57eded2d80b 100755 (executable)
@@ -24,11 +24,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # -----------------------------------------------------------------------------
 
@@ -58,18 +58,18 @@ idblob = geompy.addToStudy(blob,"blob")
 edgeGroups = geompy.Propagate( blob )
 assert len( edgeGroups ) == 3
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
 
 # -----------------------------------------------------------------------------
 
-print "-------------------------- mesh"
-smesh.SetCurrentStudy(salome.myStudy)
+print("-------------------------- mesh")
+smesh.UpdateStudy()
 
 # ---- define a mesh on the geom shape 'blob'
 mesh=smesh.Mesh(blob, "MeshBlob")
 
 # ---- assign global hypothesis and algorithms to mesh
-print "-------------------------- add hypothesis to mesh"
+print("-------------------------- add hypothesis to mesh")
 algo1 = mesh.Segment()
 algo2 = mesh.Quadrangle()
 algo3 = mesh.Hexahedron()
@@ -85,17 +85,17 @@ for edges in edgeGroups: # loop on groups of logically parallel edges
     pass
 
 # ---- compute mesh
-print "-------------------------- compute mesh"
+print("-------------------------- compute mesh")
 ok = mesh.Compute()
 if ok:
-    print "Information about the Mesh:"
-    print "Number of nodes       : ", mesh.NbNodes()
-    print "Number of edges       : ", mesh.NbEdges()
-    print "Number of faces       : ", mesh.NbFaces()
-    print "Number of quadrangles : ", mesh.NbQuadrangles()
-    print "Number of volumes     : ", mesh.NbVolumes()
-    print "Number of hexahedrons : ", mesh.NbHexas()
+    print("Information about the Mesh:")
+    print("Number of nodes       : ", mesh.NbNodes())
+    print("Number of edges       : ", mesh.NbEdges())
+    print("Number of faces       : ", mesh.NbFaces())
+    print("Number of quadrangles : ", mesh.NbQuadrangles())
+    print("Number of volumes     : ", mesh.NbVolumes())
+    print("Number of hexahedrons : ", mesh.NbHexas())
 else:
-    print "problem when Computing the mesh"
+    print("problem when Computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index b0445358183578336d58a4b047433b1f82fd6796..d09e9e78b0a1611f8880467587f6e86378e93dd9 100644 (file)
@@ -31,11 +31,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 from salome.StdMeshers import StdMeshersBuilder
 
@@ -127,33 +127,33 @@ name      = geompy.SubShapeName( sub_face4, mechanic )
 Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name )
 
 # ---------------------------- SMESH --------------------------------------
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 # -- Init --
 shape_mesh = salome.IDToObject( Id_mechanic )
 
 mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic")
 
-print "-------------------------- NumberOfSegments"
+print("-------------------------- NumberOfSegments")
 
 numberOfSegment = 10
 
 algo = mesh.Segment()
 hypNbSeg = algo.NumberOfSegments(numberOfSegment)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_10")
 
-print "-------------------------- MaxElementArea"
+print("-------------------------- MaxElementArea")
 
 maxElementArea = 25
 
 algo = mesh.Triangle()
 hypArea25 = algo.MaxElementArea(maxElementArea)
-print hypArea25.GetName()
-print hypArea25.GetId()
-print hypArea25.GetMaxElementArea()
+print(hypArea25.GetName())
+print(hypArea25.GetId())
+print(hypArea25.GetMaxElementArea())
 smesh.SetName(hypArea25, "MaxElementArea_25")
 
 # Create submesh on sub_face1 - sub_face4
@@ -175,17 +175,17 @@ smesh.SetName(algo.GetSubMesh(), "SubMeshFace3")
 algo = mesh.Quadrangle(sub_face4)
 smesh.SetName(algo.GetSubMesh(), "SubMeshFace4")
 
-print "-------------------------- compute the mesh of the mechanic piece"
+print("-------------------------- compute the mesh of the mechanic piece")
 
 mesh.Compute()
 
-print "Information about the Mesh_mechanic:"
-print "Number of nodes       : ", mesh.NbNodes()
-print "Number of edges       : ", mesh.NbEdges()
-print "Number of faces       : ", mesh.NbFaces()
-print "Number of triangles   : ", mesh.NbTriangles()
-print "Number of quadrangles : ", mesh.NbQuadrangles()
-print "Number of volumes     : ", mesh.NbVolumes()
-print "Number of tetrahedrons: ", mesh.NbTetras()
+print("Information about the Mesh_mechanic:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of quadrangles : ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index bb340bc9530e72ffa26c1cbe75f5b1150ef7cdcd..de61281744052262228bd3f267436e42a13e7d6f 100644 (file)
@@ -31,11 +31,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---------------------------- GEOM --------------------------------------
 
@@ -131,27 +131,27 @@ shape_mesh = salome.IDToObject( Id_mechanic )
 
 mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic")
 
-print "-------------------------- NumberOfSegments"
+print("-------------------------- NumberOfSegments")
 
 numberOfSegment = 10
 
 algo = mesh.Segment()
 hypNbSeg = algo.NumberOfSegments(numberOfSegment)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegment))
 
 
-print "-------------------------- MaxElementArea"
+print("-------------------------- MaxElementArea")
 
 maxElementArea = 25
 
 algo = mesh.Triangle()
 hypArea25 = algo.MaxElementArea(maxElementArea)
-print hypArea25.GetName()
-print hypArea25.GetId()
-print hypArea25.GetMaxElementArea()
+print(hypArea25.GetName())
+print(hypArea25.GetId())
+print(hypArea25.GetMaxElementArea())
 smesh.SetName(hypArea25, "MaxElementArea_" + str(maxElementArea))
 
 
@@ -179,18 +179,18 @@ smesh.SetName(algo.GetSubMesh(), "SubMeshFace4")
 submesh4 = algo.GetSubMesh()
 
 
-print "-------------------------- compute the mesh of the mechanic piece"
+print("-------------------------- compute the mesh of the mechanic piece")
 
 mesh.Compute()
 
-print "Information about the Mesh_mechanic:"
-print "Number of nodes       : ", mesh.NbNodes()
-print "Number of edges       : ", mesh.NbEdges()
-print "Number of faces       : ", mesh.NbFaces()
-print "Number of triangles   : ", mesh.NbTriangles()
-print "Number of quadrangles : ", mesh.NbQuadrangles()
-print "Number of volumes     : ", mesh.NbVolumes()
-print "Number of tetrahedrons: ", mesh.NbTetras()
+print("Information about the Mesh_mechanic:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of quadrangles : ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
 
 
 #1 cutting of quadrangles of the 'SubMeshFace2' submesh
@@ -234,4 +234,4 @@ mesh.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5)
 #9 reorientation of the submesh1
 mesh.ReorientObject(submesh1)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 326348b7cc43f1dcf643c4a46be3c0c0576284e3..5c0c5cefb2d019298269b79c7c8b7b08a9b7ee7a 100644 (file)
@@ -29,11 +29,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---------------------------- GEOM --------------------------------------
 
@@ -97,19 +97,19 @@ Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
 
 # ---- Analysis of the geometry
 
-print "Analysis of the geometry mechanic :"
+print("Analysis of the geometry mechanic :")
 
 subShellList = geompy.SubShapeAll(mechanic,geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["EDGE"])
 
-print "number of Shells in mechanic : ",len(subShellList)
-print "number of Faces in mechanic : ",len(subFaceList)
-print "number of Edges in mechanic : ",len(subEdgeList)
+print("number of Shells in mechanic : ",len(subShellList))
+print("number of Faces in mechanic : ",len(subFaceList))
+print("number of Edges in mechanic : ",len(subEdgeList))
 
 ### ---------------------------- SMESH --------------------------------------
 
-print "-------------------------- create Mesh, algorithm, hypothesis"
+print("-------------------------- create Mesh, algorithm, hypothesis")
 
 mesh = smesh.Mesh(mechanic, "Mesh_mechanic");
 netgen = mesh.Triangle(smeshBuilder.NETGEN)
@@ -119,20 +119,20 @@ netgen.SetFineness( smeshBuilder.Fine )
 netgen.SetQuadAllowed( 1 )
 #netgen.SetOptimize( 1 )
 
-print "-------------------------- compute mesh"
+print("-------------------------- compute mesh")
 ret = mesh.Compute()
-print ret
+print(ret)
 if ret != 0:
-    print "Information about the MeshcompShel:"
-    print "Number of nodes        : ", mesh.NbNodes()
-    print "Number of edges        : ", mesh.NbEdges()
-    print "Number of faces        : ", mesh.NbFaces()
-    print "Number of triangles    : ", mesh.NbTriangles()
-    print "Number of quadrangles  : ", mesh.NbQuadrangles()
-    print "Number of volumes      : ", mesh.NbVolumes()
-    print "Number of tetrahedrons : ", mesh.NbTetras()
+    print("Information about the MeshcompShel:")
+    print("Number of nodes        : ", mesh.NbNodes())
+    print("Number of edges        : ", mesh.NbEdges())
+    print("Number of faces        : ", mesh.NbFaces())
+    print("Number of triangles    : ", mesh.NbTriangles())
+    print("Number of quadrangles  : ", mesh.NbQuadrangles())
+    print("Number of volumes      : ", mesh.NbVolumes())
+    print("Number of tetrahedrons : ", mesh.NbTetras())
     
 else:
-    print "problem when computing the mesh"
+    print("problem when computing the mesh")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 18925dac7983059753770d4ddd1d08ce7e49f172..dc0fdafb2670037d28d1ef85046986b88a9eb900 100644 (file)
@@ -30,11 +30,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---------------------------- GEOM --------------------------------------
 
@@ -98,15 +98,15 @@ Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
 
 # ---- Analysis of the geometry
 
-print "Analysis of the geometry mechanic :"
+print("Analysis of the geometry mechanic :")
 
 subShellList = geompy.SubShapeAll(mechanic,geompy.ShapeType["SHELL"])
 subFaceList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["FACE"])
 subEdgeList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["EDGE"])
 
-print "number of Shells in mechanic : ",len(subShellList)
-print "number of Faces in mechanic : ",len(subFaceList)
-print "number of Edges in mechanic : ",len(subEdgeList)
+print("number of Shells in mechanic : ",len(subShellList))
+print("number of Faces in mechanic : ",len(subFaceList))
+print("number of Edges in mechanic : ",len(subEdgeList))
 
 ### ---------------------------- SMESH --------------------------------------
 
@@ -114,15 +114,15 @@ shape_mesh = salome.IDToObject( Id_mechanic  )
 
 mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic_tetra")
 
-print "-------------------------- add hypothesis to main mechanic"
+print("-------------------------- add hypothesis to main mechanic")
 
 numberOfSegment = 10
 
 algo1 = mesh.Segment()
 hypNbSeg = algo1.NumberOfSegments(numberOfSegment)
-print hypNbSeg.GetName()
-print hypNbSeg.GetId()
-print hypNbSeg.GetNumberOfSegments()
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
 smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegment))
 
 
@@ -130,9 +130,9 @@ maxElementArea = 20
 
 algo2 = mesh.Triangle(smeshBuilder.MEFISTO)
 hypArea = algo2.MaxElementArea(maxElementArea)
-print hypArea.GetName()
-print hypArea.GetId()
-print hypArea.GetMaxElementArea()
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
 smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
 
 
@@ -140,22 +140,22 @@ maxElementVolume = 20
 
 algo3 = mesh.Tetrahedron(smeshBuilder.NETGEN)
 hypVolume = algo3.MaxElementVolume(maxElementVolume)
-print hypVolume.GetName()
-print hypVolume.GetId()
-print hypVolume.GetMaxElementVolume()
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
 smesh.SetName(hypVolume, "maxElementVolume_" + str(maxElementVolume))
 
 
-print "-------------------------- compute the mesh of the mechanic piece"
+print("-------------------------- compute the mesh of the mechanic piece")
 mesh.Compute()
 
-print "Information about the Mesh_mechanic_tetra:"
-print "Number of nodes       : ", mesh.NbNodes()
-print "Number of edges       : ", mesh.NbEdges()
-print "Number of faces       : ", mesh.NbFaces()
-print "Number of triangles   : ", mesh.NbTriangles()
-print "Number of quadrangles: ", mesh.NbQuadrangles()
-print "Number of volumes     : ", mesh.NbVolumes()
-print "Number of tetrahedrons: ", mesh.NbTetras()
+print("Information about the Mesh_mechanic_tetra:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of quadrangles: ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 1ce3e6cbaa2b3b8fb5a0a4d82c96e99d594b95cf..80322918cd2a85c973d217654e2aaa0cb849dde1 100644 (file)
@@ -28,44 +28,44 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 from salome.StdMeshers import StdMeshersBuilder
 
 
 # ---- define a box
-print "Define box"
+print("Define box")
 box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
 idbox = geompy.addToStudy(box, "box")
 
 # ---- add faces of box to study
-print "Add faces to study"
+print("Add faces to study")
 idface = []
 subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
 for f in subShapeList:
   name = geompy.SubShapeName(f, box)
-  print name
+  print(name)
   idface.append( geompy.addToStudyInFather(box, f, name) )
 
 # ---- add edges of box to study
-print "Add edges to study"
+print("Add edges to study")
 idedge = []
 subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"])
 for f in subShapeList:
   name = geompy.SubShapeName(f, box)
-  print name
+  print(name)
   idedge.append( geompy.addToStudyInFather(box, f, name) )
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
 
 # ---- launch SMESH
 smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init(salome.myStudyId)
-smesh.SetCurrentStudy(salome.myStudy)
+smeshgui.Init()
+smesh.UpdateStudy()
 
 # ---- Creating meshes
 
@@ -73,7 +73,7 @@ box = salome.IDToObject(idbox)
 names = [ "MeshBoxReg", "MeshBoxScale", "MeshBoxTable", "MeshBoxExpr" ]
 
 
-print "-------------------------- Create ", names[0], " mesh"
+print("-------------------------- Create ", names[0], " mesh")
 mesh = smesh.Mesh(box, names[0])
 algo = mesh.Segment()
 hyp = algo.NumberOfSegments(7)
@@ -82,7 +82,7 @@ smesh.SetName(hyp, "NumberOfSegmentsReg")
 algo = mesh.Triangle()
 algo.MaxElementArea(2500)
 
-print "-------------------------- Create ", names[1], " mesh"
+print("-------------------------- Create ", names[1], " mesh")
 mesh = smesh.Mesh(box, names[1])
 algo = mesh.Segment()
 hyp = algo.NumberOfSegments(7)
@@ -92,7 +92,7 @@ smesh.SetName(hyp, "NumberOfSegmentsScale")
 algo = mesh.Triangle()
 algo.MaxElementArea(2500)
 
-print "-------------------------- Create ", names[2], " mesh"
+print("-------------------------- Create ", names[2], " mesh")
 mesh = smesh.Mesh(box,names[2])
 algo = mesh.Segment()
 hyp = algo.NumberOfSegments(7)
@@ -103,7 +103,7 @@ smesh.SetName(hyp, "NumberOfSegmentsTable")
 algo = mesh.Triangle()
 algo.MaxElementArea(2500)
 
-print "-------------------------- Create ", names[3], " mesh"
+print("-------------------------- Create ", names[3], " mesh")
 mesh = smesh.Mesh(box, names[3])
 algo = mesh.Segment()
 hyp = algo.NumberOfSegments(10)
@@ -115,5 +115,5 @@ algo = mesh.Triangle()
 algo.MaxElementArea(2500)
 
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
 
index e664de617ef56327998ad85e304ce68ac9d00ce0..89e49ce886e8eaaeaede8df31e4da339c68f504d 100644 (file)
@@ -31,7 +31,7 @@
 
 from launchConfigureParser import verbose
 
-if verbose(): print "============== import SMESH ======================="
+if verbose(): print("============== import SMESH =======================")
 
 import SMESH
 
index 9b40d719444a1035a092c8b698bfe7ba23be452b..a642a670d8d59ef8210875b87b595e2be1ace887 100644 (file)
@@ -29,11 +29,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---- define a box
 
@@ -63,49 +63,49 @@ ide = geompy.addToStudyInFather(face, edge, name)
 
 # ---- SMESH
 
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 box = salome.IDToObject(idb)
 mesh = smesh.Mesh(box, "Meshbox")
 
-print "-------------------------- add hypothesis to box"
+print("-------------------------- add hypothesis to box")
 
 algo_1 = mesh.Segment(box)
 hyp = algo_1.LocalLength(100)
-print hyp.GetName()
-print hyp.GetId()
-print hyp.GetLength()
+print(hyp.GetName())
+print(hyp.GetId())
+print(hyp.GetLength())
 
 algo_2 = mesh.Triangle(smeshBuilder.MEFISTO, box)
 hyp = algo_2.MaxElementArea(5000)
-print hyp.GetName()
-print hyp.GetId()
-print hyp.GetMaxElementArea()
+print(hyp.GetName())
+print(hyp.GetId())
+print(hyp.GetMaxElementArea())
 
 smesh.SetName(algo_2.GetSubMesh(), "SubMeshBox")
 
 
-print "-------------------------- add hypothesis to edge"
+print("-------------------------- add hypothesis to edge")
 
 edge = salome.IDToObject(ide)
 
 algo_3 = mesh.Segment(edge)
 hyp = algo_3.LocalLength(100)
-print hyp.GetName()
-print hyp.GetId()
-print hyp.GetLength()
+print(hyp.GetName())
+print(hyp.GetId())
+print(hyp.GetLength())
 
 smesh.SetName(algo_3.GetSubMesh(), "SubMeshEdge")
 
 
-print "-------------------------- compute face"
+print("-------------------------- compute face")
 
 face = salome.IDToObject(idf)
 
 ret = mesh.Compute(face)
-print ret
+print(ret)
 log = mesh.GetLog(0) # 0 - GetLog without ClearLog after, else if 1 - ClearLog after
 for a in log:
-    print "-------"
+    print("-------")
     ii = 0
     ir = 0
     comType = a.commandType
@@ -119,7 +119,7 @@ for a in log:
             ir = ir+1
             r3 = a.coords[ir]
             ir = ir+1
-            print "AddNode %i - %g %g %g" % (ind, r1, r2, r3)
+            print("AddNode %i - %g %g %g" % (ind, r1, r2, r3))
     elif comType == 1:
         for i in range(a.number):
             ind = a.indexes[ii]
@@ -128,23 +128,23 @@ for a in log:
             ii = ii+1
             i2 = a.indexes[ii]
             ii = ii+1
-            print "AddEdge %i - %i %i" % (ind, i1, i2)
+            print("AddEdge %i - %i %i" % (ind, i1, i2))
     elif comType == 2:
         for i in range(a.number):
             ind = a.indexes[ii]
-           print ind
+            print(ind)
             ii = ii+1
-           print ii
+            print(ii)
             i1 = a.indexes[ii]
             ii = ii+1
             i2 = a.indexes[ii]
-           print i2
+            print(i2)
             ii = ii+1
-           print "ii", ii
+            print("ii", ii)
             i3 = a.indexes[ii]
-           print i3
+            print(i3)
             #ii = ii+1
             ii = ii+1
-            print "AddTriangle %i - %i %i %i" % (ind, i1, i2, i3)
+            print("AddTriangle %i - %i %i %i" % (ind, i1, i2, i3))
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 23339f35ffb226671884e268b7ff734945790f40..1950f309701bf6ce5bbb52e4b9866ca704b8a9af 100644 (file)
@@ -28,11 +28,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---- define a box
 
@@ -44,7 +44,7 @@ idbox = geompy.addToStudy(box, "box")
 subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
 face = subShapeList[0]
 name = geompy.SubShapeName(face, box)
-print name
+print(name)
 idface = geompy.addToStudyInFather(box, face, name)
 
 # ---- add shell from box  in study
@@ -52,7 +52,7 @@ idface = geompy.addToStudyInFather(box, face, name)
 subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
 shell = subShellList[0]
 name = geompy.SubShapeName(shell, box)
-print name
+print(name)
 idshell = geompy.addToStudyInFather(box, shell, name)
 
 # ---- add first edge of face in study
@@ -60,7 +60,7 @@ idshell = geompy.addToStudyInFather(box, shell, name)
 edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
 edge = edgeList[0]
 name = geompy.SubShapeName(edge, face)
-print name
+print(name)
 idedge = geompy.addToStudyInFather(face, edge, name)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index ffc08c680a0d7d3568709659562b05fa9b4cd13a..caa0fa39df03ebbb0c33be6f41cc4a6fd69cb88b 100644 (file)
@@ -28,11 +28,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---- define a box
 
@@ -44,7 +44,7 @@ idbox = geompy.addToStudy(box, "box")
 subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
 face = subShapeList[0]
 name = geompy.SubShapeName(face, box)
-print name
+print(name)
 idface = geompy.addToStudyInFather(box, face, name)
 
 # ---- add shell from box  in study
@@ -52,7 +52,7 @@ idface = geompy.addToStudyInFather(box, face, name)
 subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
 shell = subShellList[0]
 name = geompy.SubShapeName(shell, box)
-print name
+print(name)
 idshell = geompy.addToStudyInFather(box, shell, name)
 
 # ---- add first edge of face in study
@@ -60,7 +60,7 @@ idshell = geompy.addToStudyInFather(box, shell, name)
 edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
 edge = edgeList[0]
 name = geompy.SubShapeName(edge, face)
-print name
+print(name)
 idedge = geompy.addToStudyInFather(face, edge, name)
 
 
@@ -70,44 +70,44 @@ idedge = geompy.addToStudyInFather(face, edge, name)
 
 mesh = smesh.Mesh(box, "Meshbox")
 
-print "-------------------------- add hypothesis to box"
+print("-------------------------- add hypothesis to box")
 algoReg1 = mesh.Segment()
 hypNbSeg1 = algoReg1.NumberOfSegments(7)
-print hypNbSeg1.GetName()
-print hypNbSeg1.GetId()
-print hypNbSeg1.GetNumberOfSegments()
+print(hypNbSeg1.GetName())
+print(hypNbSeg1.GetId())
+print(hypNbSeg1.GetNumberOfSegments())
 smesh.SetName(hypNbSeg1, "NumberOfSegments_7")
 
 algoMef1 = mesh.Triangle()
 hypArea1 = algoMef1.MaxElementArea(2500)
-print hypArea1.GetName()
-print hypArea1.GetId()
-print hypArea1.GetMaxElementArea()
+print(hypArea1.GetName())
+print(hypArea1.GetId())
+print(hypArea1.GetMaxElementArea())
 smesh.SetName(hypArea1, "MaxElementArea_2500")
 
 # ---- add hypothesis to edge
-print "-------------------------- add hypothesis to edge"
+print("-------------------------- add hypothesis to edge")
 edge = salome.IDToObject(idedge)
 
 algoReg2 = mesh.Segment(edge)
 hypLen1 = algoReg2.LocalLength(100)
 smesh.SetName(algoReg2.GetSubMesh(), "SubMeshEdge")
-print hypLen1.GetName()
-print hypLen1.GetId()
-print hypLen1.GetLength()
+print(hypLen1.GetName())
+print(hypLen1.GetId())
+print(hypLen1.GetLength())
 smesh.SetName(hypLen1, "Local_Length_100")
 
 # ---- add hypothesis to face
-print "-------------------------- add hypothesis to face"
+print("-------------------------- add hypothesis to face")
 face = salome.IDToObject(idface)
 
 algoMef2 = mesh.Triangle(face)
 hypArea2 = algoMef2.MaxElementArea(500)
 smesh.SetName(algoMef2.GetSubMesh(), "SubMeshFace")
-print hypArea2.GetName()
-print hypArea2.GetId()
-print hypArea2.GetMaxElementArea()
+print(hypArea2.GetName())
+print(hypArea2.GetId())
+print(hypArea2.GetMaxElementArea())
 smesh.SetName(hypArea2, "MaxElementArea_500")
 
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 0c510a12925ecee5c85618737c8b3eeba0061895..b8f54fd7f12650de5e6514460b46ff118d9523dc 100644 (file)
@@ -28,11 +28,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # ---- define a box
 
@@ -44,7 +44,7 @@ idbox = geompy.addToStudy(box, "box")
 subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
 face = subShapeList[0]
 name = geompy.SubShapeName(face, box)
-print name
+print(name)
 idface = geompy.addToStudyInFather(box, face, name)
 
 # ---- add shell from box  in study
@@ -52,7 +52,7 @@ idface = geompy.addToStudyInFather(box, face, name)
 subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
 shell = subShellList[0]
 name = geompy.SubShapeName(shell, box)
-print name
+print(name)
 idshell = geompy.addToStudyInFather(box, shell, name)
 
 # ---- add first edge of face in study
@@ -60,7 +60,7 @@ idshell = geompy.addToStudyInFather(box, shell, name)
 edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
 edge = edgeList[0]
 name = geompy.SubShapeName(edge, face)
-print name
+print(name)
 idedge = geompy.addToStudyInFather(face, edge, name)
 
 
@@ -70,49 +70,49 @@ idedge = geompy.addToStudyInFather(face, edge, name)
 
 mesh = smesh.Mesh(box, "Meshbox")
 
-print "-------------------------- add hypothesis to box"
+print("-------------------------- add hypothesis to box")
 algoReg1 = mesh.Segment()
 hypNbSeg1 = algoReg1.NumberOfSegments(7)
-print hypNbSeg1.GetName()
-print hypNbSeg1.GetId()
-print hypNbSeg1.GetNumberOfSegments()
+print(hypNbSeg1.GetName())
+print(hypNbSeg1.GetId())
+print(hypNbSeg1.GetNumberOfSegments())
 smesh.SetName(hypNbSeg1, "NumberOfSegments_7")
 
 algoMef1 = mesh.Triangle()
 hypArea1 = algoMef1.MaxElementArea(2500)
-print hypArea1.GetName()
-print hypArea1.GetId()
-print hypArea1.GetMaxElementArea()
+print(hypArea1.GetName())
+print(hypArea1.GetId())
+print(hypArea1.GetMaxElementArea())
 smesh.SetName(hypArea1, "MaxElementArea_2500")
 
 # ---- add hypothesis to edge
-print "-------------------------- add hypothesis to edge"
+print("-------------------------- add hypothesis to edge")
 edge = salome.IDToObject(idedge)
 
 algoReg2 = mesh.Segment(edge)
 hypLen1 = algoReg2.LocalLength(100)
 smesh.SetName(algoReg2.GetSubMesh(), "SubMeshEdge")
-print hypLen1.GetName()
-print hypLen1.GetId()
-print hypLen1.GetLength()
+print(hypLen1.GetName())
+print(hypLen1.GetId())
+print(hypLen1.GetLength())
 smesh.SetName(hypLen1, "Local_Length_100")
 
 # ---- add hypothesis to face
-print "-------------------------- add hypothesis to face"
+print("-------------------------- add hypothesis to face")
 face = salome.IDToObject(idface)
 
 algoMef2 = mesh.Triangle(face)
 hypArea2 = algoMef2.MaxElementArea(500)
 smesh.SetName(algoMef2.GetSubMesh(), "SubMeshFace")
-print hypArea2.GetName()
-print hypArea2.GetId()
-print hypArea2.GetMaxElementArea()
+print(hypArea2.GetName())
+print(hypArea2.GetId())
+print(hypArea2.GetMaxElementArea())
 smesh.SetName(hypArea2, "MaxElementArea_500")
 
 mesh.Compute()
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
 
 sg = salome.ImportComponentGUI('SMESH')
-if type(sg) != type(salome.salome_ComponentGUI):
+if not isinstance(sg, type(salome.salome_ComponentGUI)):
     sg.CreateAndDisplayActor('0:1:2:3')
index c7dc5b14a6802f6817b52b8a2734683d24256ab8..271d4261e1ae082f8a028942b584abcb135a3366 100644 (file)
@@ -28,11 +28,11 @@ from SMESH_test1 import *
 
 # ---- compute box
 
-print "-------------------------- compute box"
+print("-------------------------- compute box")
 ret = mesh.Compute()
-print ret
+print(ret)
 log = mesh.GetLog(0); # no erase trace
 for linelog in log:
-    print linelog
+    print(linelog)
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index e5209554718ddf37d5bacbadbcaccd522c154ad8..5f9e9c615334b7f8c6d2480cc513645acf6a36dc 100644 (file)
@@ -29,11 +29,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import math
 
 pi = math.pi
index 6467319a6c6213164c96481e4913b4a6433556b4..cd380cf5c62cda72bff17678f72cc23d92ac9c39 100755 (executable)
@@ -25,11 +25,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 
 # ---- GEOM
@@ -47,7 +47,7 @@ face = salome.IDToObject(idface)
 
 # ---- SMESH
 
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 mesh = smesh.Mesh(box, "Meshbox")
 
 # Set 1D algorithm/hypotheses to mesh
@@ -71,10 +71,10 @@ mesh.Compute()
 
 faces = submesh.GetElementsByType(SMESH.FACE)
 if len(faces) > 1:
-    print len(faces), len(faces)/2
+    print(len(faces), len(faces)/2)
     group1 = mesh.CreateEmptyGroup(SMESH.FACE,"Group of faces")
     group2 = mesh.CreateEmptyGroup(SMESH.FACE,"Another group of faces")
     group1.Add(faces[:int(len(faces)/2)])
     group2.Add(faces[int(len(faces)/2):])
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 0464598cc49f9a684bbde93bec25af1de100e62a..9ae62fbd4755d2aaa42954d992c9ee3dbf6277b3 100644 (file)
@@ -28,11 +28,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import CORBA
 import os
@@ -48,37 +48,37 @@ def SetSObjName(theSObj,theName) :
 def ConvertMED2UNV(thePath,theFile) :
     anInitFileName = thePath + theFile
     aMeshes,aResult = smesh.CreateMeshesFromMED(anInitFileName)
-    print aResult, aMeshes
+    print(aResult, aMeshes)
 
     for iMesh in range(len(aMeshes)) :
         aMesh = aMeshes[iMesh]
-        print aMesh.GetName(),
+        print(aMesh.GetName(), end=' ')
         aFileName = anInitFileName
         aFileName = os.path.basename(aFileName)
         aMesh.SetName(aFileName)
-        print aMesh.GetName()
+        print(aMesh.GetName())
 
         aOutPath = '/tmp/'
         aFileName = aOutPath + theFile + "." + str(iMesh) + ".unv"
         aMesh.ExportUNV(aFileName)
         aMesh = smesh.CreateMeshesFromUNV(aFileName)
-        print aMesh.GetName(),
+        print(aMesh.GetName(), end=' ')
         os.remove(aFileName)
         aFileName = os.path.basename(aFileName)
         aMesh.SetName(aFileName)
-        print aMesh.GetName()
+        print(aMesh.GetName())
 
 aPath = os.getenv('DATA_DIR') + '/MedFiles/'
 aListDir = os.listdir(aPath)
-print aListDir
+print(aListDir)
 
 for iFile in range(len(aListDir)) :
     aFileName = aListDir[iFile]
     aName,anExt = os.path.splitext(aFileName)
     if anExt == ".med" :
         aFileName = os.path.basename(aFileName)
-        print aFileName
+        print(aFileName)
         ConvertMED2UNV(aPath,aFileName)
         #break
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 29e0fccf368299dc8a0e38b5d606eef99f5e317f..1d3d393d7aed30ef3c3affa262bcb665bcc6854d 100644 (file)
@@ -369,7 +369,7 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
     def LengthNearVertex(self, length, vertex=0, UseExisting=0):
         import types
         store_geom = self.geom
-        if type(vertex) is types.IntType:
+        if isinstance(vertex, int):
             if vertex == 0 or vertex == 1:
                 from salome.geom import geomBuilder
                 vertex = self.mesh.geompyD.ExtractShapes(self.geom, geomBuilder.geomBuilder.ShapeType["VERTEX"],True)[vertex]
@@ -382,7 +382,7 @@ class StdMeshersBuilder_Segment(Mesh_Algorithm):
         # 0D algorithm
         if self.geom is None:
             self.geom = store_geom
-            raise RuntimeError, "Attempt to create SegmentAroundVertex_0D algorithm on None shape"
+            raise RuntimeError("Attempt to create SegmentAroundVertex_0D algorithm on None shape")
         from salome.smesh.smeshBuilder import AssureGeomPublished, GetName, TreatHypoStatus
         AssureGeomPublished( self.mesh, self.geom )
         name = GetName(self.geom)
@@ -983,7 +983,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     ## Return 3D hypothesis holding the 1D one
     def Get3DHypothesis(self):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         return self.distribHyp
 
@@ -991,15 +991,14 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  hypothesis. Returns the created hypothesis
     def OwnHypothesis(self, hypType, args=[], so="libStdMeshersEngine.so"):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         if not self.nbLayers is None:
             self.mesh.GetMesh().RemoveHypothesis( self.geom, self.nbLayers )
             self.mesh.GetMesh().AddHypothesis( self.geom, self.distribHyp )
-        study = self.mesh.smeshpyD.GetCurrentStudy() # prevents publishing own 1D hypothesis
-        self.mesh.smeshpyD.SetCurrentStudy( None )
+        self.mesh.smeshpyD.SetEnablePublish( False ) # prevents publishing own 1D hypothesis
         hyp = self.mesh.smeshpyD.CreateHypothesis(hypType, so)
-        self.mesh.smeshpyD.SetCurrentStudy( study ) # enables publishing
+        self.mesh.smeshpyD.SetEnablePublish( True ) # enables publishing
         if not self.distribHyp:
             self.distribHyp = self.Hypothesis("LayerDistribution", UseExisting=0)
         self.distribHyp.SetLayerDistribution( hyp )
@@ -1012,7 +1011,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #                     the same parameters, else (default) - creates a new one
     def NumberOfLayers(self, n, UseExisting=0):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         self.mesh.RemoveHypothesis( self.distribHyp, self.geom )
         from salome.smesh.smeshBuilder import IsEqual
@@ -1028,7 +1027,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param p the precision of rounding
     def LocalLength(self, l, p=1e-07):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         hyp = self.OwnHypothesis("LocalLength", [l,p])
         hyp.SetLength(l)
@@ -1041,7 +1040,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param s the scale factor (optional)
     def NumberOfSegments(self, n, s=[]):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         if not s:
             hyp = self.OwnHypothesis("NumberOfSegments", [n])
@@ -1058,7 +1057,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param end    the length of the last  segment
     def Arithmetic1D(self, start, end ):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         hyp = self.OwnHypothesis("Arithmetic1D", [start, end])
         hyp.SetLength(start, 1)
@@ -1072,7 +1071,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param ratio  the common ratio of the geometric progression
     def GeometricProgression(self, start, ratio ):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         hyp = self.OwnHypothesis("GeometricProgression", [start, ratio])
         hyp.SetStartLength( start )
@@ -1085,7 +1084,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param end   for the length of the last  segment
     def StartEndLength(self, start, end):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         hyp = self.OwnHypothesis("StartEndLength", [start, end])
         hyp.SetLength(start, 1)
@@ -1097,7 +1096,7 @@ class StdMeshersBuilder_Prism3D(Mesh_Algorithm):
     #  @param fineness defines the quality of the mesh within the range [0-1]
     def AutomaticLength(self, fineness=0):
         if self.algoType != "RadialPrism_3D":
-            print "Prism_3D algorithm doesn't support any hypothesis"
+            print("Prism_3D algorithm doesn't support any hypothesis")
             return None
         hyp = self.OwnHypothesis("AutomaticLength")
         hyp.SetFineness( fineness )
@@ -1163,10 +1162,9 @@ class StdMeshersBuilder_RadialAlgorithm(Mesh_Algorithm):
             self.distribHyp = self.Hypothesis("LayerDistribution2D", UseExisting=0)
         else:
             self.mesh.GetMesh().AddHypothesis( self.geom, self.distribHyp )
-        study = self.mesh.smeshpyD.GetCurrentStudy() # prevents publishing own 1D hypothesis
-        self.mesh.smeshpyD.SetCurrentStudy( None )
+        self.mesh.smeshpyD.SetEnablePublish( False )
         hyp = self.mesh.smeshpyD.CreateHypothesis(hypType, so)
-        self.mesh.smeshpyD.SetCurrentStudy( study ) # enables publishing
+        self.mesh.smeshpyD.SetEnablePublish( True )
         self.distribHyp.SetLayerDistribution( hyp )
         return hyp
 
@@ -1493,7 +1491,7 @@ class StdMeshersBuilder_Cartesian_3D(Mesh_Algorithm):
             self.mesh.AddHypothesis( self.hyp, self.geom )
 
         for axis, gridDef in enumerate( [xGridDef, yGridDef, zGridDef] ):
-            if not gridDef: raise ValueError, "Empty grid definition"
+            if not gridDef: raise ValueError("Empty grid definition")
             if isinstance( gridDef, str ):
                 self.hyp.SetGridSpacing( [gridDef], [], axis )
             elif isinstance( gridDef[0], str ):
index d2930389803d237054be1e5240fbf9b255b8c8f5..17a4a01f126b0ccf84999e0995b3ff0ddfb90f5a 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -323,4 +323,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index eca7e708dd6d40810fcd7204c581e8afd27d6d12..e47fde7e70679949cc4ed79d89d4dac19e4e15dd 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -125,4 +125,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 4d4205988c6b11b477098fdf088ddaae9422d4f2..302256fa1194d4ea6034df2022067f3f74a9b46f 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -112,4 +112,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 74709a2882291ab0d86215246e0e58c22a874641..96cb23479e23a05f017a75b4ef32f27b5c79f09d 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -117,4 +117,4 @@ mixed.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 63049972cb12fab9ab79f98f933847d74f2fde80..da8c97525a7855843e9d00b2071ea58169fb6cad 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -152,4 +152,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 252b4e896bc3870b265ce2ebfdc2d7b18c57b5da..dc59840dacc8e74e52c6e7f9aff20763e409f2ce 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -169,4 +169,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 099204117f2a2703a25b934d43984bdaa093f5a4..20de60dec649de490e637fa506663f01430797b1 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -109,4 +109,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index a9d4579c869f54daee8a19f363e1497bfe569467..d4577d2fab1e5a0c4bda45cd573aa5c274a7df2a 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -142,4 +142,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 63222cb3695d5165550baa5eb1dc8681ee354c00..b610ac554a54f370e6dd3abb570ff78d8b51f21a 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -145,4 +145,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 24cd31d44d1dbb075b7ab35af6c055803c5f6e7d..6fb26f2d5954d2b481af09f634f708e6b0b43f4d 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -107,4 +107,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 91b6a3d269ec9f1b42bf07a8f58c4f355985ba54..ae75f84c1874b61c15d5ecdecc60a67c9c40a3c2 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -128,4 +128,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 55164b7778e578751d408f59afa60c92486686ef..02e468333657748d8a6c002f9ffac984ea8e6564 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -143,4 +143,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 6cb4b1c2ddac575b226a3287c62d7148178b1ff0..6982aa6069f920e5012e789b0a2114e5a3b10993 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -261,4 +261,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index f908a3d7670c59c5876b208a276feecc3e2a5edd..1167d6390a68d4d63d5a4c9fcd4f148406f713f4 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometrie
 # =========
@@ -146,4 +146,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 42cfbaad7111077bba685412751bf3208b98dd73..46be8da3b275314d27e75cde829d61e1b70c873f 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometrie
 # =========
@@ -205,4 +205,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index d7ec0ea1d6b1890e212e1063dd3d2f31914fe2c3..cb8ce46f02e596e4059e6d1296160dea2e83e993 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -149,4 +149,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 4d8b06aeb165ae7ff8f0454a384b6e592811bc87..22a9c1d1ebb4692c258e9e0e63c4e0632934dda1 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometrie
 # =========
@@ -107,4 +107,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 3721e9a6b51d4ad8dc91070aa1876fe613ccf17c..afd7dc26f26a99621756ff37450941ddcb3a25f1 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import math
 
@@ -145,4 +145,4 @@ hexa.Compute()
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 4528d532324e46d8dde196d169ce97fcb1791e20..2bc7abf55c94053d5e4b357dfc90ffe772c5a699 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometrie
 # =========
@@ -190,4 +190,4 @@ hexa_groupe = hexa.Group(groupe)
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 034037120aa85e62557611344349dd69409abe7e..04e7d4d2b636236e561dd4e390e15529db830dc3 100644 (file)
@@ -27,11 +27,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Geometry
 # ========
@@ -136,4 +136,4 @@ tetra.Group(group)
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
\ No newline at end of file
+salome.sg.updateObjBrowser()
\ No newline at end of file
index 87b4cfbe0cd8486a3de616e0ee75f87c574a9da2..57b7c1ff13c4a0fb5f90211b5433a02df5dc44e2 100644 (file)
@@ -26,11 +26,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 geo = geompy
 
@@ -103,7 +103,7 @@ geompy.DifferenceList(group_1, [group_1_box])
 # Mesh the blocks with hexahedral
 # -------------------------------
 
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 def discretize(x, y, z,  n, s=blocks):
     p = geompy.MakeVertex(x, y, z)
@@ -134,4 +134,4 @@ hexa.Group(group_1)
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 72e0f631a0faeee7e48106daea43d0edc3cb715c..7edfad86d23a08a8a25b6328234e5313a7dd1b57 100644 (file)
@@ -25,11 +25,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import os
 
@@ -37,7 +37,7 @@ import os
 # ------
 
 tmpDir = os.getenv('SALOME_TMP_DIR', '/tmp')
-print "Output directory:", tmpDir
+print("Output directory:", tmpDir)
 
 # Path for ".med" files
 path = os.path.join( tmpDir, "ex29_%s_" % os.getenv('USER','unknown'))
@@ -205,7 +205,7 @@ MyMesh.ExportMED(path+"110_triangles_2.med", 0)
 SplitTrianglesIn4(MyMesh)
 
 NbCells2 = NbCells1*4
-print("Mesh with "+str(NbCells2)+" cells computed.")
+print(("Mesh with "+str(NbCells2)+" cells computed."))
 
 MyMesh.ExportMED(path+str(NbCells2)+"_triangles.med", 0)
 
@@ -215,7 +215,7 @@ MyMesh.ExportMED(path+str(NbCells2)+"_triangles.med", 0)
 SplitTrianglesIn4(MyMesh)
 
 NbCells3 = NbCells2*4
-print("Mesh with "+str(NbCells3)+" cells computed.")
+print(("Mesh with "+str(NbCells3)+" cells computed."))
 
 MyMesh.ExportMED(path+str(NbCells3)+"_triangles.med",0)
 
@@ -225,11 +225,11 @@ MyMesh.ExportMED(path+str(NbCells3)+"_triangles.med",0)
 SplitTrianglesIn4(MyMesh)
 
 NbCells4 = NbCells3*4
-print("Mesh with "+str(NbCells4)+" cells computed.")
+print(("Mesh with "+str(NbCells4)+" cells computed."))
 
 MyMesh.ExportMED(path+str(NbCells4)+"_triangles.med", 0)
 
 # Update the object browser
 # -------------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 7b9f96c33994ec3e89b9cd045aef20f9cd0956d1..76a0593fda983e20efa6279dac9a88bd6fae30c0 100755 (executable)
@@ -22,18 +22,18 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import math
 
 global Face_1
 Face_1 = geompy.MakeFaceHW(100, 100, 1)
 geompy.addToStudy( Face_1, "Face_1" )
 
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 from salome.StdMeshers import StdMeshersBuilder
 pattern = smesh.GetPattern()
 Mesh_1 = smesh.Mesh(Face_1)
@@ -87,5 +87,5 @@ aIntGrp=Mesh_1.IntersectListOfGroups([aRedGroup, aGreenGroup, aBlueGroup], "IntG
 # CutListOfGroups()
 aCutGrp=Mesh_1.CutListOfGroups([aRedGroup],[aGreenGroup,aBlueGroup],"CutGrp")
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
 
index cd8e7bdc1233df24ddd90937b37230d8e5dc1ec7..de69b2c8d1d1a78b41ac51518cedcfcfc628b91d 100644 (file)
@@ -26,11 +26,11 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 # Parameters
 # ----------
@@ -53,7 +53,7 @@ geompy.addToStudy(cylinder, "Cylinder")
 # Define a mesh on a geometry
 # ---------------------------
 
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 
 m = smesh.Mesh(cylinder)
 
@@ -76,7 +76,6 @@ algo3d.SetMEDName(results)
 algo3d.SetNbPart(4)
 algo3d.SetBackground(False)
 algo3d.SetKeepFiles(False)
-algo3d.SetToMeshHoles(True)
 
 # Launch meshers
 # --------------
@@ -87,11 +86,11 @@ status = m.Compute()
 # ----------
 
 if os.access(results+".xml", os.F_OK):
-    print "Ok: tepal"
+    print("Ok: tepal")
 else:
-    print "KO: tepal"
+    print("KO: tepal")
 
 # Update object browser
 # ---------------------
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
index 1643ae99ae4da6ef44913bd5ab5bf3611790305e..db8a03c63fb2de14829e0ddf06584af00269cf31 100755 (executable)
@@ -22,18 +22,18 @@ import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 import math
 
 global Box_1
 Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
 geompy.addToStudy( Box_1, "Box_1" )
 
-smesh.SetCurrentStudy(salome.myStudy)
+smesh.UpdateStudy()
 from salome.StdMeshers import StdMeshersBuilder
 Mesh_1 = smesh.Mesh(Box_1)
 Regular_1D = Mesh_1.Segment()
@@ -45,12 +45,12 @@ isDone = Mesh_1.Compute()
 
 ### CreateDimGroup()
 
-aListOf3d_1=range(721,821)
+aListOf3d_1=list(range(721,821))
 
 aGrp3D_1=Mesh_1.GetMesh().CreateGroup( SMESH.VOLUME, "Src 3D 1" )
 aGrp3D_1.Add( aListOf3d_1 )
 
-aListOf3d_2=range(821, 921)
+aListOf3d_2=list(range(821, 921))
 aGrp3D_2=Mesh_1.GetMesh().CreateGroup( SMESH.VOLUME, "Src 3D 2" )
 aGrp3D_2.Add( aListOf3d_2 )
 
@@ -60,5 +60,5 @@ aGrp1D = Mesh_1.CreateDimGroup( [aGrp3D_1, aGrp3D_2], SMESH.EDGE, "Edges" )
 
 aGrp0D = Mesh_1.CreateDimGroup( [aGrp3D_1, aGrp3D_2], SMESH.NODE, "Nodes" )
 
-salome.sg.updateObjBrowser(True)
+salome.sg.updateObjBrowser()
 
index 7538d91a348e17da76c92a718e85434e0cdea06e..92a88aaf3ac2364294328bb88c2ff852c24863de 100644 (file)
@@ -29,6 +29,7 @@
  \brief Module smesh
 """
 
+import inspect
 import salome
 from salome import *
 
@@ -42,14 +43,14 @@ from salome.smesh import smeshBuilder
 try:
     # get instance of class smeshBuilder
     engineSmesh = salome.lcc.FindOrLoadComponent( "FactoryServer", "SMESH" )
-    smesh = smeshBuilder.New(salome.myStudy, engineSmesh)
+    smesh = smeshBuilder.New(True,engineSmesh)
 except:
-    print "exception in smesh.py: instance creation failed"
+    print("exception in smesh.py: instance creation failed")
     smesh = None
     pass
 
 # load plugins and add dynamically generated methods to Mesh class,
-# the same for for global variables declared by plug-ins
+# the same for global variables declared by plug-ins
 from salome.smesh.smeshBuilder import *
 from salome.smesh.smeshBuilder import Mesh, algoCreator
 for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
@@ -58,9 +59,9 @@ for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
     pluginBuilderName = pluginName + "Builder"
     try:
         exec( "from salome.%s.%s import *" % (pluginName, pluginBuilderName))
-    except Exception, e:
+    except Exception as e:
         from salome_utils import verbose
-        if verbose(): print "Exception while loading %s: %s" % ( pluginBuilderName, e )
+        if verbose(): print("Exception while loading %s: %s" % ( pluginBuilderName, e ))
         continue
     exec( "from salome.%s import %s" % (pluginName, pluginBuilderName))
     plugin = eval( pluginBuilderName )
@@ -69,7 +70,7 @@ for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
     for k in dir( plugin ):
         if k[0] == '_': continue
         algo = getattr( plugin, k )
-        if type( algo ).__name__ == 'classobj' and hasattr( algo, "meshMethod" ):
+        if inspect.isclass(algo) and hasattr(algo, "meshMethod"):
             if not hasattr( Mesh, algo.meshMethod ):
                 setattr( Mesh, algo.meshMethod, algoCreator() )
                 pass
@@ -82,12 +83,12 @@ del pluginName
 # export the methods of smeshBuilder
 if smesh:
     for k in dir( smesh ):
-       if k[0] == '_': continue
-       globals()[k] = getattr( smesh, k )
+        if k[0] == '_': continue
+        globals()[k] = getattr( smesh, k )
     del k
     pass
 
-print """
+print("""
 ===============================================================================
 WARNING:
 Usage of smesh.py is deprecated in SALOME V7.2!
@@ -95,22 +96,21 @@ smesh.py will be removed in a future version!
 TODO:
 The following changes in your scripts are required to avoid this message:
 
-replace 
+replace
 -------
 
 import smesh, SMESH
-smesh.SetCurrentStudy(theStudy)
 
 with
 ----
 
 import SMESH
 from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New(salome.myStudy)
+smesh = smeshBuilder.New()
 
 you also need to modify some lines where smeshBuilder is used instead of smesh
 
-algo=smesh.xxxx  ==> algo=smeshBuilder.xxxx 
+algo=smesh.xxxx  ==> algo=smeshBuilder.xxxx
 
 See also SMESH User's Guide for more details
 
@@ -119,4 +119,4 @@ The smesh.py module works correctly only in the first created study.
 It does not work in the second, third, etc studies!
 
 ===============================================================================
-"""
+""")
index 270d5946bf631382e392f4febd7163d812c59347..d1e2f3bb23584320f531ab0386672fb146f5d52f 100644 (file)
@@ -84,12 +84,91 @@ import salome
 from salome.geom import geomBuilder
 
 import SMESH # This is necessary for back compatibility
+import omniORB                                   # back compatibility
+SMESH.MED_V2_1 = omniORB.EnumItem("MED_V2_1", 0) # back compatibility
+SMESH.MED_V2_2 = omniORB.EnumItem("MED_V2_2", 1) # back compatibility
+
 from   SMESH import *
 from   salome.smesh.smesh_algorithm import Mesh_Algorithm
 
 import SALOME
 import SALOMEDS
 import os
+import inspect
+
+# In case the omniORBpy EnumItem class does not fully support Python 3
+# (for instance in version 4.2.1-2), the comparison ordering methods must be
+# defined
+#
+try:
+    SMESH.Entity_Triangle < SMESH.Entity_Quadrangle
+except TypeError:
+    def enumitem_eq(self, other):
+        try:
+            if isinstance(other, omniORB.EnumItem):
+                if other._parent_id == self._parent_id:
+                    return self._v == other._v
+                else:
+                    return self._parent_id == other._parent_id
+            else:
+                return id(self) == id(other)
+        except:
+            return id(self) == id(other)
+
+    def enumitem_lt(self, other):
+        try:
+            if isinstance(other, omniORB.EnumItem):
+                if other._parent_id == self._parent_id:
+                    return self._v < other._v
+                else:
+                    return self._parent_id < other._parent_id
+            else:
+                return id(self) < id(other)
+        except:
+            return id(self) < id(other)
+
+    def enumitem_le(self, other):
+        try:
+            if isinstance(other, omniORB.EnumItem):
+                if other._parent_id == self._parent_id:
+                    return self._v <= other._v
+                else:
+                    return self._parent_id <= other._parent_id
+            else:
+                return id(self) <= id(other)
+        except:
+            return id(self) <= id(other)
+
+    def enumitem_gt(self, other):
+        try:
+            if isinstance(other, omniORB.EnumItem):
+                if other._parent_id == self._parent_id:
+                    return self._v > other._v
+                else:
+                    return self._parent_id > other._parent_id
+            else:
+                return id(self) > id(other)
+        except:
+            return id(self) > id(other)
+
+    def enumitem_ge(self, other):
+        try:
+            if isinstance(other, omniORB.EnumItem):
+                if other._parent_id == self._parent_id:
+                    return self._v >= other._v
+                else:
+                    return self._parent_id >= other._parent_id
+            else:
+                return id(self) >= id(other)
+        except:
+            return id(self) >= id(other)
+
+    omniORB.EnumItem.__eq__ = enumitem_eq
+    omniORB.EnumItem.__lt__ = enumitem_lt
+    omniORB.EnumItem.__le__ = enumitem_le
+    omniORB.EnumItem.__gt__ = enumitem_gt
+    omniORB.EnumItem.__ge__ = enumitem_ge
+
 
 ## Private class used to workaround a problem that sometimes isinstance(m, Mesh) returns False
 #
@@ -123,7 +202,7 @@ def ParseParameters(*args):
     Parameters = ""
     hasVariables = False
     varModifFun=None
-    if args and callable( args[-1] ):
+    if args and callable(args[-1]):
         args, varModifFun = args[:-1], args[-1]
     for parameter in args:
 
@@ -132,7 +211,7 @@ def ParseParameters(*args):
         if isinstance(parameter,str):
             # check if there is an inexistent variable name
             if not notebook.isVariable(parameter):
-                raise ValueError, "Variable with name '" + parameter + "' doesn't exist!!!"
+                raise ValueError("Variable with name '" + parameter + "' doesn't exist!!!")
             parameter = notebook.get(parameter)
             hasVariables = True
             if varModifFun:
@@ -162,8 +241,7 @@ SMESH.PointStruct.__init__ = __initPointStruct
 #  Parameters are stored in AxisStruct.parameters attribute
 def __initAxisStruct(ax,*args):
     if len( args ) != 6:
-        raise RuntimeError,\
-              "Bad nb args (%s) passed in SMESH.AxisStruct(x,y,z,dx,dy,dz)"%(len( args ))
+        raise RuntimeError("Bad nb args (%s) passed in SMESH.AxisStruct(x,y,z,dx,dy,dz)"%(len( args )))
     ax.x, ax.y, ax.z, ax.vx, ax.vy, ax.vz, ax.parameters,hasVars = ParseParameters(*args)
     pass
 SMESH.AxisStruct.__init__ = __initAxisStruct
@@ -189,13 +267,8 @@ def GetName(obj):
         except:
             ior = None
         if ior:
-            # CORBA object
-            studies = salome.myStudyManager.GetOpenStudies()
-            for sname in studies:
-                s = salome.myStudyManager.GetStudyByName(sname)
-                if not s: continue
-                sobj = s.FindObjectIOR(ior)
-                if not sobj: continue
+            sobj = salome.myStudy.FindObjectIOR(ior)
+            if sobj:
                 return sobj.GetName()
             if hasattr(obj, "GetName"):
                 # unknown CORBA object, having GetName() method
@@ -208,7 +281,7 @@ def GetName(obj):
             # unknown non-CORBA object, having GetName() method
             return obj.GetName()
         pass
-    raise RuntimeError, "Null or invalid object"
+    raise RuntimeError("Null or invalid object")
 
 ## Print error message if a hypothesis was not assigned.
 def TreatHypoStatus(status, hypName, geomName, isAlgo, mesh):
@@ -219,21 +292,21 @@ def TreatHypoStatus(status, hypName, geomName, isAlgo, mesh):
         pass
     reason = ""
     if hasattr( status, "__getitem__" ):
-        status,reason = status[0],status[1]
-    if status == HYP_UNKNOWN_FATAL :
+        status, reason = status[0], status[1]
+    if status == HYP_UNKNOWN_FATAL:
         reason = "for unknown reason"
-    elif status == HYP_INCOMPATIBLE :
+    elif status == HYP_INCOMPATIBLE:
         reason = "this hypothesis mismatches the algorithm"
-    elif status == HYP_NOTCONFORM :
+    elif status == HYP_NOTCONFORM:
         reason = "a non-conform mesh would be built"
-    elif status == HYP_ALREADY_EXIST :
+    elif status == HYP_ALREADY_EXIST:
         if isAlgo: return # it does not influence anything
         reason = hypType + " of the same dimension is already assigned to this shape"
-    elif status == HYP_BAD_DIM :
+    elif status == HYP_BAD_DIM:
         reason = hypType + " mismatches the shape"
-    elif status == HYP_CONCURENT :
+    elif status == HYP_CONCURENT:
         reason = "there are concurrent hypotheses on sub-shapes"
-    elif status == HYP_BAD_SUBSHAPE :
+    elif status == HYP_BAD_SUBSHAPE:
         reason = "the shape is neither the main one, nor its sub-shape, nor a valid group"
     elif status == HYP_BAD_GEOMETRY:
         reason = "the algorithm is not applicable to this geometry"
@@ -255,23 +328,18 @@ def TreatHypoStatus(status, hypName, geomName, isAlgo, mesh):
             if meshName and meshName != NO_NAME:
                 where = '"%s" shape in "%s" mesh ' % ( geomName, meshName )
     if status < HYP_UNKNOWN_FATAL and where:
-        print '"%s" was assigned to %s but %s' %( hypName, where, reason )
+        print('"%s" was assigned to %s but %s' %( hypName, where, reason ))
     elif where:
-        print '"%s" was not assigned to %s : %s' %( hypName, where, reason )
+        print('"%s" was not assigned to %s : %s' %( hypName, where, reason ))
     else:
-        print '"%s" was not assigned : %s' %( hypName, reason )
+        print('"%s" was not assigned : %s' %( hypName, reason ))
         pass
 
 ## Private method. Add geom (sub-shape of the main shape) into the study if not yet there
 def AssureGeomPublished(mesh, geom, name=''):
     if not isinstance( geom, geomBuilder.GEOM._objref_GEOM_Object ):
         return
-    if not geom.GetStudyEntry() and \
-           mesh.smeshpyD.GetCurrentStudy():
-        ## set the study
-        studyID = mesh.smeshpyD.GetCurrentStudy()._get_StudyId()
-        if studyID != mesh.geompyD.myStudyId:
-            mesh.geompyD.init_geom( mesh.smeshpyD.GetCurrentStudy())
+    if not geom.GetStudyEntry():
         ## get a name
         if not name and geom.GetShapeType() != geomBuilder.GEOM.COMPOUND:
             # for all groups SubShapeName() return "Compound_-1"
@@ -286,7 +354,7 @@ def AssureGeomPublished(mesh, geom, name=''):
 def FirstVertexOnCurve(mesh, edge):
     vv = mesh.geompyD.SubShapeAll( edge, geomBuilder.geomBuilder.ShapeType["VERTEX"])
     if not vv:
-        raise TypeError, "Given object has no vertices"
+        raise TypeError("Given object has no vertices")
     if len( vv ) == 1: return vv[0]
     v0   = mesh.geompyD.MakeVertexOnCurve(edge,0.)
     xyz  = mesh.geompyD.PointCoordinates( v0 ) # coords of the first vertex
@@ -301,6 +369,10 @@ def FirstVertexOnCurve(mesh, edge):
     else:
         return vv[1]
 
+## Return a long value from enumeration
+def EnumToLong(theItem):
+    return theItem._v
+
 # end of l1_auxiliary
 ## @}
 
@@ -314,7 +386,7 @@ created = False
 ## This class allows to create, load or manipulate meshes.
 #  It has a set of methods to create, load or copy meshes, to combine several meshes, etc.
 #  It also has methods to get infos and measure meshes.
-class smeshBuilder(object, SMESH._objref_SMESH_Gen):
+class smeshBuilder(SMESH._objref_SMESH_Gen):
 
     # MirrorType enumeration
     POINT = SMESH_MeshEditor.POINT
@@ -328,12 +400,12 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
     PrecisionConfusion = smeshPrecisionConfusion
 
     # TopAbs_State enumeration
-    [TopAbs_IN, TopAbs_OUT, TopAbs_ON, TopAbs_UNKNOWN] = range(4)
+    [TopAbs_IN, TopAbs_OUT, TopAbs_ON, TopAbs_UNKNOWN] = list(range(4))
 
     # Methods of splitting a hexahedron into tetrahedra
     Hex_5Tet, Hex_6Tet, Hex_24Tet, Hex_2Prisms, Hex_4Prisms = 1, 2, 3, 1, 2
 
-    def __new__(cls):
+    def __new__(cls, *args):
         global engine
         global smeshInst
         global doLcc
@@ -370,18 +442,18 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
         #print "====2 ", smeshInst
         return smeshInst
 
-    def __init__(self):
+    def __init__(self, *args):
         global created
         #print "--------------- smeshbuilder __init__ ---", created
         if not created:
-          created = True
-          SMESH._objref_SMESH_Gen.__init__(self)
+            created = True
+            SMESH._objref_SMESH_Gen.__init__(self, *args)
 
     ## Dump component to the Python script
     #  This method overrides IDL function to allow default values for the parameters.
     #  @ingroup l1_auxiliary
-    def DumpPython(self, theStudy, theIsPublished=True, theIsMultiFile=True):
-        return SMESH._objref_SMESH_Gen.DumpPython(self, theStudy, theIsPublished, theIsMultiFile)
+    def DumpPython(self, theIsPublished=True, theIsMultiFile=True):
+        return SMESH._objref_SMESH_Gen.DumpPython(self, theIsPublished, theIsMultiFile)
 
     ## Set mode of DumpPython(), \a historical or \a snapshot.
     #  In the \a historical mode, the Python Dump script includes all commands
@@ -394,14 +466,14 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
         else:            val = "false"
         SMESH._objref_SMESH_Gen.SetOption(self, "historical_python_dump", val)
 
-    ## Set the current study and Geometry component
+    ## Set Geometry component
     #  @ingroup l1_auxiliary
-    def init_smesh(self,theStudy,geompyD = None):
+    def init_smesh(self,isPublished = True,geompyD = None):
         #print "init_smesh"
-        self.SetCurrentStudy(theStudy,geompyD)
-        if theStudy:
+        self.UpdateStudy(geompyD)
+        if isPublished:
             global notebook
-            notebook.myStudy = theStudy
+            notebook.myStudy = salome.myStudy
 
     ## Create a mesh. This can be either an empty mesh, possibly having an underlying geometry,
     #  or a mesh wrapping a CORBA mesh given as a parameter.
@@ -417,11 +489,6 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
             obj,name = name,obj
         return Mesh(self,self.geompyD,obj,name)
 
-    ## Return a long value from enumeration
-    #  @ingroup l1_auxiliary
-    def EnumToLong(self,theItem):
-        return theItem._v
-
     ## Return a string representation of the color.
     #  To be used with filters.
     #  @param c color value (SALOMEDS.Color)
@@ -433,7 +500,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
         elif isinstance(c, str):
             val = c
         else:
-            raise ValueError, "Color value should be of string or SALOMEDS.Color type"
+            raise ValueError("Color value should be of string or SALOMEDS.Color type")
         return val
 
     ## Get PointStruct from vertex
@@ -451,7 +518,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
     def GetDirStruct(self,theVector):
         vertices = self.geompyD.SubShapeAll( theVector, geomBuilder.geomBuilder.ShapeType["VERTEX"] )
         if(len(vertices) != 2):
-            print "Error: vector object is incorrect."
+            print("Error: vector object is incorrect.")
             return None
         p1 = self.geompyD.PointCoordinates(vertices[0])
         p2 = self.geompyD.PointCoordinates(vertices[1])
@@ -523,34 +590,32 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
     #  @ingroup l1_auxiliary
     def IsEmbeddedMode(self):
         return SMESH._objref_SMESH_Gen.IsEmbeddedMode(self)
-
-    ## Set the current study. Calling SetCurrentStudy( None ) allows to
-    #  switch OFF automatic pubilishing in the Study of mesh objects.
+    
+    ## Update the current study. Calling UpdateStudy() allows to 
+    #  update meshes at switching GEOM->SMESH
     #  @ingroup l1_auxiliary
-    def SetCurrentStudy( self, theStudy, geompyD = None ):
+    def UpdateStudy( self, geompyD = None  ):
+        #self.UpdateStudy()
         if not geompyD:
             from salome.geom import geomBuilder
             geompyD = geomBuilder.geom
             pass
         self.geompyD=geompyD
         self.SetGeomEngine(geompyD)
-        SMESH._objref_SMESH_Gen.SetCurrentStudy(self,theStudy)
-        global notebook
-        if theStudy:
-            notebook = salome_notebook.NoteBook( theStudy )
-        else:
-            notebook = salome_notebook.NoteBook( salome_notebook.PseudoStudyForNoteBook() )
-        if theStudy:
-            sb = theStudy.NewBuilder()
-            sc = theStudy.FindComponent("SMESH")
-            if sc: sb.LoadWith(sc, self)
-            pass
+        SMESH._objref_SMESH_Gen.UpdateStudy(self)
+        sb = salome.myStudy.NewBuilder()
+        sc = salome.myStudy.FindComponent("SMESH")
+        if sc: sb.LoadWith(sc, self)
         pass
-
-    ## Get the current study
+        
+    ## Sets enable publishing in the study. Calling SetEnablePublish( false ) allows to
+    #  switch OFF publishing in the Study of mesh objects.
     #  @ingroup l1_auxiliary
-    def GetCurrentStudy(self):
-        return SMESH._objref_SMESH_Gen.GetCurrentStudy(self)
+    def SetEnablePublish( self, theIsEnablePublish ):
+        #self.SetEnablePublish(theIsEnablePublish)
+        SMESH._objref_SMESH_Gen.SetEnablePublish(self,theIsEnablePublish)
+        global notebook
+        notebook = salome_notebook.NoteBook( theIsEnablePublish )
 
     ## Create a Mesh object importing data from the given UNV file
     #  @return an instance of Mesh class
@@ -601,7 +666,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
         aSmeshMesh, error = SMESH._objref_SMESH_Gen.CreateMeshesFromGMF(self,
                                                                         theFileName,
                                                                         True)
-        if error.comment: print "*** CreateMeshesFromGMF() errors:\n", error.comment
+        if error.comment: print("*** CreateMeshesFromGMF() errors:\n", error.comment)
         return Mesh(self, self.geompyD, aSmeshMesh), error
 
     ## Concatenate the given meshes into one mesh. All groups of input meshes will be
@@ -653,7 +718,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
     def GetSubShapesId( self, theMainObject, theListOfSubObjects ):
         return SMESH._objref_SMESH_Gen.GetSubShapesId(self,theMainObject, theListOfSubObjects)
 
-    ## Create a pattern mapper. 
+    ## Create a pattern mapper.
     #  @return an instance of SMESH_Pattern
     #
     #  <a href="../tui_modifying_meshes_page.html#tui_pattern_mapping">Example of Patterns usage</a>
@@ -675,13 +740,13 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
     #  @return SMESH.Filter.Criterion
     #  @ingroup l1_controls
     def GetEmptyCriterion(self):
-        Type = self.EnumToLong(FT_Undefined)
-        Compare = self.EnumToLong(FT_Undefined)
+        Type = EnumToLong(FT_Undefined)
+        Compare = EnumToLong(FT_Undefined)
         Threshold = 0
         ThresholdStr = ""
         ThresholdID = ""
-        UnaryOp = self.EnumToLong(FT_Undefined)
-        BinaryOp = self.EnumToLong(FT_Undefined)
+        UnaryOp = EnumToLong(FT_Undefined)
+        BinaryOp = EnumToLong(FT_Undefined)
         Tolerance = 1e-07
         TypeOfElement = ALL
         Precision = -1 ##@1e-07
@@ -713,24 +778,24 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
                      BinaryOp=FT_Undefined,
                      Tolerance=1e-07):
         if not CritType in SMESH.FunctorType._items:
-            raise TypeError, "CritType should be of SMESH.FunctorType"
+            raise TypeError("CritType should be of SMESH.FunctorType")
         aCriterion               = self.GetEmptyCriterion()
         aCriterion.TypeOfElement = elementType
-        aCriterion.Type          = self.EnumToLong(CritType)
+        aCriterion.Type          = EnumToLong(CritType)
         aCriterion.Tolerance     = Tolerance
 
         aThreshold = Threshold
 
         if Compare in [FT_LessThan, FT_MoreThan, FT_EqualTo]:
-            aCriterion.Compare = self.EnumToLong(Compare)
+            aCriterion.Compare = EnumToLong(Compare)
         elif Compare == "=" or Compare == "==":
-            aCriterion.Compare = self.EnumToLong(FT_EqualTo)
+            aCriterion.Compare = EnumToLong(FT_EqualTo)
         elif Compare == "<":
-            aCriterion.Compare = self.EnumToLong(FT_LessThan)
+            aCriterion.Compare = EnumToLong(FT_LessThan)
         elif Compare == ">":
-            aCriterion.Compare = self.EnumToLong(FT_MoreThan)
+            aCriterion.Compare = EnumToLong(FT_MoreThan)
         elif Compare != FT_Undefined:
-            aCriterion.Compare = self.EnumToLong(FT_EqualTo)
+            aCriterion.Compare = EnumToLong(FT_EqualTo)
             aThreshold = Compare
 
         if CritType in [FT_BelongToGeom,     FT_BelongToPlane, FT_BelongToGenSurface,
@@ -748,7 +813,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
             elif isinstance( aThreshold, str ):
                 aCriterion.ThresholdStr = aThreshold
             else:
-                raise TypeError, "The Threshold should be a shape."
+                raise TypeError("The Threshold should be a shape.")
             if isinstance(UnaryOp,float):
                 aCriterion.Tolerance = UnaryOp
                 UnaryOp = FT_Undefined
@@ -757,10 +822,10 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
             # Check that Threshold is a group
             if isinstance(aThreshold, SMESH._objref_SMESH_GroupBase):
                 if aThreshold.GetType() != elementType:
-                    raise ValueError, "Group type mismatches Element type"
+                    raise ValueError("Group type mismatches Element type")
                 aCriterion.ThresholdStr = aThreshold.GetName()
                 aCriterion.ThresholdID  = salome.orb.object_to_string( aThreshold )
-                study = self.GetCurrentStudy()
+                study = salome.myStudy
                 if study:
                     so = study.FindObjectIOR( aCriterion.ThresholdID )
                     if so:
@@ -768,13 +833,13 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
                         if entry:
                             aCriterion.ThresholdID = entry
             else:
-                raise TypeError, "The Threshold should be a Mesh Group"
+                raise TypeError("The Threshold should be a Mesh Group")
         elif CritType == FT_RangeOfIds:
             # Check that Threshold is string
             if isinstance(aThreshold, str):
                 aCriterion.ThresholdStr = aThreshold
             else:
-                raise TypeError, "The Threshold should be a string."
+                raise TypeError("The Threshold should be a string.")
         elif CritType == FT_CoplanarFaces:
             # Check the Threshold
             if isinstance(aThreshold, int):
@@ -782,11 +847,10 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
             elif isinstance(aThreshold, str):
                 ID = int(aThreshold)
                 if ID < 1:
-                    raise ValueError, "Invalid ID of mesh face: '%s'"%aThreshold
+                    raise ValueError("Invalid ID of mesh face: '%s'"%aThreshold)
                 aCriterion.ThresholdID = aThreshold
             else:
-                raise TypeError,\
-                      "The Threshold should be an ID of mesh face and not '%s'"%aThreshold
+                raise TypeError("The Threshold should be an ID of mesh face and not '%s'"%aThreshold)
         elif CritType == FT_ConnectedElements:
             # Check the Threshold
             if isinstance(aThreshold, geomBuilder.GEOM._objref_GEOM_Object): # shape
@@ -800,7 +864,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
                 aCriterion.Threshold = aThreshold
             elif isinstance(aThreshold, list): # 3 point coordinates
                 if len( aThreshold ) < 3:
-                    raise ValueError, "too few point coordinates, must be 3"
+                    raise ValueError("too few point coordinates, must be 3")
                 aCriterion.ThresholdStr = " ".join( [str(c) for c in aThreshold[:3]] )
             elif isinstance(aThreshold, str):
                 if aThreshold.isdigit():
@@ -808,40 +872,39 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
                 else:
                     aCriterion.ThresholdStr = aThreshold # hope that it's point coordinates
             else:
-                raise TypeError,\
-                      "The Threshold should either a VERTEX, or a node ID, "\
-                      "or a list of point coordinates and not '%s'"%aThreshold
+                raise TypeError("The Threshold should either a VERTEX, or a node ID, "\
+                      "or a list of point coordinates and not '%s'"%aThreshold)
         elif CritType == FT_ElemGeomType:
             # Check the Threshold
             try:
-                aCriterion.Threshold = self.EnumToLong(aThreshold)
+                aCriterion.Threshold = EnumToLong(aThreshold)
                 assert( aThreshold in SMESH.GeometryType._items )
             except:
                 if isinstance(aThreshold, int):
                     aCriterion.Threshold = aThreshold
                 else:
-                    raise TypeError, "The Threshold should be an integer or SMESH.GeometryType."
+                    raise TypeError("The Threshold should be an integer or SMESH.GeometryType.")
                 pass
             pass
         elif CritType == FT_EntityType:
             # Check the Threshold
             try:
-                aCriterion.Threshold = self.EnumToLong(aThreshold)
+                aCriterion.Threshold = EnumToLong(aThreshold)
                 assert( aThreshold in SMESH.EntityType._items )
             except:
                 if isinstance(aThreshold, int):
                     aCriterion.Threshold = aThreshold
                 else:
-                    raise TypeError, "The Threshold should be an integer or SMESH.EntityType."
+                    raise TypeError("The Threshold should be an integer or SMESH.EntityType.")
                 pass
             pass
-        
+
         elif CritType == FT_GroupColor:
             # Check the Threshold
             try:
                 aCriterion.ThresholdStr = self.ColorToString(aThreshold)
             except:
-                raise TypeError, "The threshold value should be of SALOMEDS.Color type"
+                raise TypeError("The threshold value should be of SALOMEDS.Color type")
             pass
         elif CritType in [FT_FreeBorders, FT_FreeEdges, FT_FreeNodes, FT_FreeFaces,
                           FT_LinearOrQuadratic, FT_BadOrientedVolume,
@@ -850,7 +913,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
                           FT_EqualNodes,FT_EqualEdges,FT_EqualFaces,FT_EqualVolumes ]:
             # At this point the Threshold is unnecessary
             if aThreshold ==  FT_LogicalNOT:
-                aCriterion.UnaryOp = self.EnumToLong(FT_LogicalNOT)
+                aCriterion.UnaryOp = EnumToLong(FT_LogicalNOT)
             elif aThreshold in [FT_LogicalAND, FT_LogicalOR]:
                 aCriterion.BinaryOp = aThreshold
         else:
@@ -859,20 +922,20 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
                 aThreshold = float(aThreshold)
                 aCriterion.Threshold = aThreshold
             except:
-                raise TypeError, "The Threshold should be a number."
+                raise TypeError("The Threshold should be a number.")
                 return None
 
         if Threshold ==  FT_LogicalNOT or UnaryOp ==  FT_LogicalNOT:
-            aCriterion.UnaryOp = self.EnumToLong(FT_LogicalNOT)
+            aCriterion.UnaryOp = EnumToLong(FT_LogicalNOT)
 
         if Threshold in [FT_LogicalAND, FT_LogicalOR]:
-            aCriterion.BinaryOp = self.EnumToLong(Threshold)
+            aCriterion.BinaryOp = EnumToLong(Threshold)
 
         if UnaryOp in [FT_LogicalAND, FT_LogicalOR]:
-            aCriterion.BinaryOp = self.EnumToLong(UnaryOp)
+            aCriterion.BinaryOp = EnumToLong(UnaryOp)
 
         if BinaryOp in [FT_LogicalAND, FT_LogicalOR]:
-            aCriterion.BinaryOp = self.EnumToLong(BinaryOp)
+            aCriterion.BinaryOp = EnumToLong(BinaryOp)
 
         return aCriterion
 
@@ -919,8 +982,8 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
     #  @ingroup l1_controls
     def GetFilterFromCriteria(self,criteria, binOp=SMESH.FT_LogicalAND):
         for i in range( len( criteria ) - 1 ):
-            if criteria[i].BinaryOp == self.EnumToLong( SMESH.FT_Undefined ):
-                criteria[i].BinaryOp = self.EnumToLong( binOp )
+            if criteria[i].BinaryOp == EnumToLong( SMESH.FT_Undefined ):
+                criteria[i].BinaryOp = EnumToLong( binOp )
         aFilterMgr = self.CreateFilterManager()
         aFilter = aFilterMgr.CreateFilter()
         aFilter.SetCriteria(criteria)
@@ -973,7 +1036,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
         elif theCriterion == FT_BallDiameter:
             functor = aFilterMgr.CreateBallDiameter()
         else:
-            print "Error: given parameter is not numerical functor type."
+            print("Error: given parameter is not numerical functor type.")
         aFilterMgr.UnRegister()
         return functor
 
@@ -1007,7 +1070,7 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
         d = {}
         if hasattr(obj, "GetMeshInfo"):
             values = obj.GetMeshInfo()
-            for i in range(SMESH.Entity_Last._v):
+            for i in range(EnumToLong(SMESH.Entity_Last)):
                 if i < len(values): d[SMESH.EntityType._item(i)]=values[i]
             pass
         return d
@@ -1181,13 +1244,13 @@ omniORB.registerObjref(SMESH._objref_SMESH_Gen._NP_RepositoryId, smeshBuilder)
 #    import salome
 #    salome.salome_init()
 #    from salome.smesh import smeshBuilder
-#    smesh = smeshBuilder.New(salome.myStudy)
+#    smesh = smeshBuilder.New()
 #  \endcode
-#  @param  study     SALOME study, generally obtained by salome.myStudy.
+#  @param  isPublished If False, the notebool will not be used.
 #  @param  instance  CORBA proxy of SMESH Engine. If None, the default Engine is used.
 #  @return smeshBuilder instance
 
-def New( study, instance=None):
+def New( isPublished = True, instance=None):
     """
     Create a new smeshBuilder instance.The smeshBuilder class provides the Python
     interface to create or load meshes.
@@ -1196,10 +1259,10 @@ def New( study, instance=None):
         import salome
         salome.salome_init()
         from salome.smesh import smeshBuilder
-        smesh = smeshBuilder.New(salome.myStudy)
+        smesh = smeshBuilder.New()
 
     Parameters:
-        study     SALOME study, generally obtained by salome.myStudy.
+        isPublished If False, the notebool will not be used.
         instance  CORBA proxy of SMESH Engine. If None, the default Engine is used.
     Returns:
         smeshBuilder instance
@@ -1209,10 +1272,10 @@ def New( study, instance=None):
     global doLcc
     engine = instance
     if engine is None:
-      doLcc = True
+        doLcc = True
     smeshInst = smeshBuilder()
     assert isinstance(smeshInst,smeshBuilder), "Smesh engine class is %s but should be smeshBuilder.smeshBuilder. Import salome.smesh.smeshBuilder before creating the instance."%smeshInst.__class__
-    smeshInst.init_smesh(study)
+    smeshInst.init_smesh(isPublished)
     return smeshInst
 
 
@@ -1224,9 +1287,7 @@ def New( study, instance=None):
 #  It also has methods to define groups of mesh elements, to modify a mesh (by addition of
 #  new nodes and elements and by changing the existing entities), to get information
 #  about a mesh and to export a mesh in different formats.
-class Mesh:
-    __metaclass__ = MeshMeta
-
+class Mesh(metaclass=MeshMeta):
     geom = 0
     mesh = 0
     editor = 0
@@ -1241,8 +1302,8 @@ class Mesh:
     #  @param name Study name of the mesh
     #  @ingroup l2_construct
     def __init__(self, smeshpyD, geompyD, obj=0, name=0):
-        self.smeshpyD=smeshpyD
-        self.geompyD=geompyD
+        self.smeshpyD = smeshpyD
+        self.geompyD = geompyD
         if obj is None:
             obj = 0
         objHasName = False
@@ -1251,12 +1312,9 @@ class Mesh:
                 self.geom = obj
                 objHasName = True
                 # publish geom of mesh (issue 0021122)
-                if not self.geom.GetStudyEntry() and smeshpyD.GetCurrentStudy():
+                if not self.geom.GetStudyEntry():
                     objHasName = False
-                    studyID = smeshpyD.GetCurrentStudy()._get_StudyId()
-                    if studyID != geompyD.myStudyId:
-                        geompyD.init_geom( smeshpyD.GetCurrentStudy())
-                        pass
+                    geompyD.init_geom()
                     if name:
                         geo_name = name + " shape"
                     else:
@@ -1277,7 +1335,7 @@ class Mesh:
             self.geom = self.mesh.GetShapeToMesh()
 
         self.editor   = self.mesh.GetMeshEditor()
-        self.functors = [None] * SMESH.FT_Undefined._v
+        self.functors = [None] * EnumToLong(SMESH.FT_Undefined)
 
         # set self to algoCreator's
         for attrName in dir(self):
@@ -1294,7 +1352,7 @@ class Mesh:
             #self.mesh.UnRegister()
             pass
         pass
-        
+
     ## Initialize the Mesh object from an instance of SMESH_Mesh interface
     #  @param theMesh a SMESH_Mesh object
     #  @ingroup l2_construct
@@ -1448,12 +1506,12 @@ class Mesh:
             if discardModifs and self.mesh.HasModificationsToDiscard(): # issue 0020693
                 self.mesh.Clear()
             ok = self.smeshpyD.Compute(self.mesh, geom)
-        except SALOME.SALOME_Exception, ex:
-            print "Mesh computation failed, exception caught:"
-            print "    ", ex.details.text
+        except SALOME.SALOME_Exception as ex:
+            print("Mesh computation failed, exception caught:")
+            print("    ", ex.details.text)
         except:
             import traceback
-            print "Mesh computation failed, exception caught:"
+            print("Mesh computation failed, exception caught:")
             traceback.print_exc()
         if True:#not ok:
             allReasons = ""
@@ -1530,15 +1588,15 @@ class Mesh:
                 else:  msg += " has not been computed"
                 if allReasons != "": msg += ":"
                 else:                msg += "."
-                print msg
-                print allReasons
+                print(msg)
+                print(allReasons)
             pass
-        if salome.sg.hasDesktop() and self.mesh.GetStudyId() >= 0:
+        if salome.sg.hasDesktop():
             if not isinstance( refresh, list): # not a call from subMesh.Compute()
                 smeshgui = salome.ImportComponentGUI("SMESH")
-                smeshgui.Init(self.mesh.GetStudyId())
+                smeshgui.Init()
                 smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), ok, (self.NbNodes()==0) )
-                if refresh: salome.sg.updateObjBrowser(True)
+                if refresh: salome.sg.updateObjBrowser()
 
         return ok
 
@@ -1563,11 +1621,9 @@ class Mesh:
         try:
             shapeText = ""
             mainIOR  = salome.orb.object_to_string( self.GetShape() )
-            for sname in salome.myStudyManager.GetOpenStudies():
-                s = salome.myStudyManager.GetStudyByName(sname)
-                if not s: continue
-                mainSO = s.FindObjectIOR(mainIOR)
-                if not mainSO: continue
+            s = salome.myStudy
+            mainSO = s.FindObjectIOR(mainIOR)
+            if mainSO:
                 if subShapeID == 1:
                     shapeText = '"%s"' % mainSO.GetName()
                 subIt = s.NewChildIterator(mainSO)
@@ -1584,7 +1640,6 @@ class Mesh:
                         continue
                     if ids == subShapeID:
                         shapeText = '"%s"' % subSO.GetName()
-                        break
             if not shapeText:
                 shape = self.geompyD.GetSubShape( self.GetShape(), [subShapeID])
                 if shape:
@@ -1614,9 +1669,9 @@ class Mesh:
             pass
 
         groups = []
-        for algoName, shapes in algo2shapes.items():
+        for algoName, shapes in list(algo2shapes.items()):
             while shapes:
-                groupType = self.smeshpyD.EnumToLong( shapes[0].GetShapeType() )
+                groupType = EnumToLong( shapes[0].GetShapeType() )
                 otherTypeShapes = []
                 sameTypeShapes  = []
                 group = self.geompyD.CreateGroup( self.geom, groupType )
@@ -1655,12 +1710,11 @@ class Mesh:
     #  @ingroup l2_construct
     def Clear(self, refresh=False):
         self.mesh.Clear()
-        if ( salome.sg.hasDesktop() and 
-             salome.myStudyManager.GetStudyByID( self.mesh.GetStudyId() ) ):
+        if ( salome.sg.hasDesktop() ):
             smeshgui = salome.ImportComponentGUI("SMESH")
-            smeshgui.Init(self.mesh.GetStudyId())
+            smeshgui.Init()
             smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), False, True )
-            if refresh: salome.sg.updateObjBrowser(True)
+            if refresh: salome.sg.updateObjBrowser()
 
     ## Remove all nodes and elements of indicated shape
     #  @param refresh if @c True, Object browser is automatically updated (when running in GUI)
@@ -1670,9 +1724,9 @@ class Mesh:
         self.mesh.ClearSubMesh(geomId)
         if salome.sg.hasDesktop():
             smeshgui = salome.ImportComponentGUI("SMESH")
-            smeshgui.Init(self.mesh.GetStudyId())
+            smeshgui.Init()
             smeshgui.SetMeshIcon( salome.ObjectToID( self.mesh ), False, True )
-            if refresh: salome.sg.updateObjBrowser(True)
+            if refresh: salome.sg.updateObjBrowser()
 
     ## Compute a tetrahedral mesh using AutomaticLength + MEFISTO + Tetrahedron
     #  @param fineness [0.0,1.0] defines mesh fineness
@@ -1737,7 +1791,7 @@ class Mesh:
             AssureGeomPublished( self, geom, "shape for %s" % hyp.GetName())
             status = self.mesh.AddHypothesis(geom, hyp)
         else:
-            status = HYP_BAD_GEOMETRY,""
+            status = HYP_BAD_GEOMETRY, ""
         hyp_name = GetName( hyp )
         geom_name = ""
         if geom:
@@ -1782,7 +1836,7 @@ class Mesh:
             return self.mesh.RemoveHypothesis( shape, hyp )
         hypName = GetName( hyp )
         geoName = GetName( shape )
-        print "WARNING: RemoveHypothesis() failed as '%s' is not assigned to '%s' shape" % ( hypName, geoName )
+        print("WARNING: RemoveHypothesis() failed as '%s' is not assigned to '%s' shape" % ( hypName, geoName ))
         return None
 
     ## Get the list of hypotheses added on a geometry
@@ -1803,18 +1857,10 @@ class Mesh:
 
     ## Export the mesh in a file in MED format
     ## allowing to overwrite the file if it exists or add the exported data to its contents
-    #  @param f is the file name
+    #  @param fileName is the file name
     #  @param auto_groups boolean parameter for creating/not creating
     #  the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
     #  the typical use is auto_groups=False.
-    #  @param version MED format version
-    #         - MED_V2_1 is obsolete.
-    #         - MED_V2_2 means current version (kept for compatibility reasons)
-    #         - MED_LATEST means current version.
-    #         - MED_MINOR_x where x from 0 to 9 indicates the minor version of MED
-    #           to use for writing MED files, for backward compatibility :
-    #           for instance, with SALOME 8.4 use MED 3.2 (minor=2) instead of 3.3,
-    #           to allow the file to be read with SALOME 8.3.
     #  @param overwrite boolean parameter for overwriting/not overwriting the file
     #  @param meshPart a part of mesh (group, sub-mesh) to export instead of the mesh
     #  @param autoDimension if @c True (default), a space dimension of a MED mesh can be either
@@ -1823,24 +1869,40 @@ class Mesh:
     #         - 3D in the rest cases.<br>
     #         If @a autoDimension is @c False, the space dimension is always 3.
     #  @param fields list of GEOM fields defined on the shape to mesh.
-    #  @param geomAssocFields each character of this string means a need to export a 
+    #  @param geomAssocFields each character of this string means a need to export a
     #         corresponding field; correspondence between fields and characters is following:
     #         - 'v' stands for "_vertices _" field;
     #         - 'e' stands for "_edges _" field;
     #         - 'f' stands for "_faces _" field;
     #         - 's' stands for "_solids _" field.
     #  @ingroup l2_impexp
-    def ExportMED(self, f, auto_groups=0, version=MED_LATEST,
-                  overwrite=1, meshPart=None, autoDimension=True, fields=[], geomAssocFields=''):
+    def ExportMED(self, *args, **kwargs):
+        # process positional arguments
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
+        fileName        = args[0]
+        auto_groups     = args[1] if len(args) > 1 else False
+        overwrite       = args[2] if len(args) > 2 else True
+        meshPart        = args[3] if len(args) > 3 else None
+        autoDimension   = args[4] if len(args) > 4 else True
+        fields          = args[5] if len(args) > 5 else []
+        geomAssocFields = args[6] if len(args) > 6 else ''
+        # process keywords arguments
+        auto_groups     = kwargs.get("auto_groups", auto_groups)
+        overwrite       = kwargs.get("overwrite", overwrite)
+        meshPart        = kwargs.get("meshPart", meshPart)
+        autoDimension   = kwargs.get("autoDimension", autoDimension)
+        fields          = kwargs.get("fields", fields)
+        geomAssocFields = kwargs.get("geomAssocFields", geomAssocFields)
+        # invoke engine's function
         if meshPart or fields or geomAssocFields:
             unRegister = genObjUnRegister()
             if isinstance( meshPart, list ):
                 meshPart = self.GetIDSource( meshPart, SMESH.ALL )
                 unRegister.set( meshPart )
-            self.mesh.ExportPartToMED( meshPart, f, auto_groups, version, overwrite, autoDimension,
+            self.mesh.ExportPartToMED( meshPart, fileName, auto_groups, overwrite, autoDimension,
                                        fields, geomAssocFields)
         else:
-            self.mesh.ExportToMEDX(f, auto_groups, version, overwrite, autoDimension)
+            self.mesh.ExportMED(fileName, auto_groups, overwrite, autoDimension)
 
     ## Export the mesh in a file in SAUV format
     #  @param f is the file name
@@ -1933,15 +1995,36 @@ class Mesh:
     ## Deprecated, used only for compatibility! Please, use ExportMED() method instead.
     #  Export the mesh in a file in MED format
     #  allowing to overwrite the file if it exists or add the exported data to its contents
-    #  @param f the file name
-    #  @param version MED format version:
-    #         - MED_V2_1 is obsolete.
-    #         - MED_V2_2 means current version (kept for compatibility reasons)
-    #         - MED_LATEST means current version.
-    #         - MED_MINOR_x where x from 0 to 9 indicates the minor version of MED
-    #           to use for writing MED files, for backward compatibility :
-    #           for instance, with SALOME 8.4 use MED 3.2 (minor=2) instead of 3.3,
-    #           to allow the file to be read with SALOME 8.3.
+    #  @param fileName the file name
+    #  @param opt boolean parameter for creating/not creating
+    #         the groups Group_On_All_Nodes, Group_On_All_Faces, ...
+    #  @param overwrite boolean parameter for overwriting/not overwriting the file
+    #  @param autoDimension if @c True (default), a space dimension of a MED mesh can be either
+    #         - 1D if all mesh nodes lie on OX coordinate axis, or
+    #         - 2D if all mesh nodes lie on XOY coordinate plane, or
+    #         - 3D in the rest cases.<br>
+    #         If @a autoDimension is @c False, the space dimension is always 3.
+    #  @ingroup l2_impexp
+    def ExportToMED(self, *args, **kwargs):
+        print("WARNING: ExportToMED() is deprecated, use ExportMED() instead")
+        # process positional arguments
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
+        fileName      = args[0]
+        auto_groups   = args[1] if len(args) > 1 else False
+        overwrite     = args[2] if len(args) > 2 else True
+        autoDimension = args[3] if len(args) > 3 else True
+        # process keywords arguments
+        auto_groups   = kwargs.get("opt", auto_groups)         # old keyword name
+        auto_groups   = kwargs.get("auto_groups", auto_groups) # new keyword name
+        overwrite     = kwargs.get("overwrite", overwrite)
+        autoDimension = kwargs.get("autoDimension", autoDimension)
+        # invoke engine's function
+        self.mesh.ExportMED(fileName, auto_groups, overwrite, autoDimension)
+
+    ## Deprecated, used only for compatibility! Please, use ExportMED() method instead.
+    #  Export the mesh in a file in MED format
+    #  allowing to overwrite the file if it exists or add the exported data to its contents
+    #  @param fileName the file name
     #  @param opt boolean parameter for creating/not creating
     #         the groups Group_On_All_Nodes, Group_On_All_Faces, ...
     #  @param overwrite boolean parameter for overwriting/not overwriting the file
@@ -1951,14 +2034,26 @@ class Mesh:
     #         - 3D in the rest cases.<br>
     #         If @a autoDimension is @c False, the space dimension is always 3.
     #  @ingroup l2_impexp
-    def ExportToMED(self, f, version=MED_LATEST, opt=0, overwrite=1, autoDimension=True):
-        self.mesh.ExportToMEDX(f, opt, version, overwrite, autoDimension)
+    def ExportToMEDX(self, *args, **kwargs):
+        print("WARNING: ExportToMEDX() is deprecated, use ExportMED() instead")
+        # process positional arguments
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
+        fileName      = args[0]
+        auto_groups   = args[1] if len(args) > 1 else False
+        overwrite     = args[2] if len(args) > 2 else True
+        autoDimension = args[3] if len(args) > 3 else True
+        # process keywords arguments
+        auto_groups   = kwargs.get("auto_groups", auto_groups)
+        overwrite     = kwargs.get("overwrite", overwrite)
+        autoDimension = kwargs.get("autoDimension", autoDimension)
+        # invoke engine's function
+        self.mesh.ExportMED(fileName, auto_groups, overwrite, autoDimension)
 
     # Operations with groups:
     # ----------------------
 
     ## Create an empty mesh group
-    #  @param elementType the type of elements in the group; either of 
+    #  @param elementType the type of elements in the group; either of
     #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME)
     #  @param name the name of the mesh group
     #  @return SMESH_Group
@@ -1982,7 +2077,7 @@ class Mesh:
     #  the name is the same as the geometrical group name
     #  @param grp  a geometrical group, a vertex, an edge, a face or a solid
     #  @param name the name of the mesh group
-    #  @param typ  the type of elements in the group; either of 
+    #  @param typ  the type of elements in the group; either of
     #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME). If not set, it is
     #         automatically detected by the type of the geometry
     #  @return SMESH_GroupOnGeom
@@ -2009,17 +2104,16 @@ class Mesh:
         elif tgeo == "COMPOUND":
             sub = self.geompyD.SubShapeAll( shape, self.geompyD.ShapeType["SHAPE"])
             if not sub:
-                raise ValueError,"_groupTypeFromShape(): empty geometric group or compound '%s'" % GetName(shape)
+                raise ValueError("_groupTypeFromShape(): empty geometric group or compound '%s'" % GetName(shape))
             return self._groupTypeFromShape( sub[0] )
         else:
-            raise ValueError, \
-                  "_groupTypeFromShape(): invalid geometry '%s'" % GetName(shape)
+            raise ValueError("_groupTypeFromShape(): invalid geometry '%s'" % GetName(shape))
         return typ
 
     ## Create a mesh group with given \a name based on the \a filter which
     ## is a special type of group dynamically updating it's contents during
     ## mesh modification
-    #  @param typ  the type of elements in the group; either of 
+    #  @param typ  the type of elements in the group; either of
     #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
     #  @param name the name of the mesh group
     #  @param filter the filter defining group contents
@@ -2030,7 +2124,7 @@ class Mesh:
 
     ## Create a mesh group by the given ids of elements
     #  @param groupName the name of the mesh group
-    #  @param elementType the type of elements in the group; either of 
+    #  @param elementType the type of elements in the group; either of
     #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
     #  @param elemIDs either the list of ids, group, sub-mesh, or filter
     #  @return SMESH_Group
@@ -2115,7 +2209,7 @@ class Mesh:
 
     ## Get the list of groups existing in the mesh in the order
     #  of creation (starting from the oldest one)
-    #  @param elemType type of elements the groups contain; either of 
+    #  @param elemType type of elements the groups contain; either of
     #         (SMESH.ALL, SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME);
     #         by default groups of elements of all types are returned
     #  @return a sequence of SMESH_GroupBase
@@ -2150,7 +2244,7 @@ class Mesh:
 
     ## Find groups by name and type
     #  @param name name of the group of interest
-    #  @param elemType type of elements the groups contain; either of 
+    #  @param elemType type of elements the groups contain; either of
     #         (SMESH.ALL, SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME);
     #         by default one group of any type of elements is returned
     #         if elemType == SMESH.ALL then all groups of any type are returned
@@ -2162,7 +2256,7 @@ class Mesh:
             if group.GetName() == name:
                 if elemType is None:
                     return [group]
-                if ( elemType == SMESH.ALL or 
+                if ( elemType == SMESH.ALL or
                      group.GetType() == elemType ):
                     groups.append( group )
         return groups
@@ -2181,7 +2275,7 @@ class Mesh:
     #  @return an instance of SMESH_Group
     #  @ingroup l2_grps_operon
     def UnionListOfGroups(self, groups, name):
-      return self.mesh.UnionListOfGroups(groups, name)
+        return self.mesh.UnionListOfGroups(groups, name)
 
     ## Prodice an intersection of two groups.
     #  A new group is created. All mesh elements that are common
@@ -2197,7 +2291,7 @@ class Mesh:
     #  @return an instance of SMESH_Group
     #  @ingroup l2_grps_operon
     def IntersectListOfGroups(self, groups, name):
-      return self.mesh.IntersectListOfGroups(groups, name)
+        return self.mesh.IntersectListOfGroups(groups, name)
 
     ## Produce a cut of two groups.
     #  A new group is created. All mesh elements that are present in
@@ -2218,7 +2312,7 @@ class Mesh:
     ##
     #  Create a standalone group of entities basing on nodes of other groups.
     #  \param groups - list of reference groups, sub-meshes or filters, of any type.
-    #  \param elemType - a type of elements to include to the new group; either of 
+    #  \param elemType - a type of elements to include to the new group; either of
     #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME).
     #  \param name - a name of the new group.
     #  \param nbCommonNodes - a criterion of inclusion of an element to the new group
@@ -2288,12 +2382,6 @@ class Mesh:
     def GetId(self):
         return self.mesh.GetId()
 
-    ## Get the study Id
-    #  @return integer value, which is the study Id of the mesh
-    #  @ingroup l1_auxiliary
-    def GetStudyId(self):
-        return self.mesh.GetStudyId()
-
     ## Check the group names for duplications.
     #  Consider the maximum group name length stored in MED file.
     #  @return True or False
@@ -2900,7 +2988,7 @@ class Mesh:
     def Add0DElement( self, IDOfNode, DuplicateElements=True ):
         return self.editor.Add0DElement( IDOfNode, DuplicateElements )
 
-    ## Create 0D elements on all nodes of the given elements except those 
+    ## Create 0D elements on all nodes of the given elements except those
     #  nodes on which a 0D element already exists.
     #  @param theObject an object on whose nodes 0D elements will be created.
     #         It can be mesh, sub-mesh, group, list of element IDs or a holder
@@ -2909,7 +2997,7 @@ class Mesh:
     #         and/or found on nodes of \a theObject.
     #  @param DuplicateElements to add one more 0D element to a node or not
     #  @return an object (a new group or a temporary SMESH_IDSource) holding
-    #          IDs of new and/or found 0D elements. IDs of 0D elements 
+    #          IDs of new and/or found 0D elements. IDs of 0D elements
     #          can be retrieved from the returned object by calling GetIDs()
     #  @ingroup l2_modif_add
     def Add0DElementsToAllNodes(self, theObject, theGroupName="", DuplicateElements=False):
@@ -3009,8 +3097,8 @@ class Mesh:
             VertexID = Vertex
         try:
             self.editor.SetNodeOnVertex(NodeID, VertexID)
-        except SALOME.SALOME_Exception, inst:
-            raise ValueError, inst.details.text
+        except SALOME.SALOME_Exception as inst:
+            raise ValueError(inst.details.text)
         return True
 
 
@@ -3027,8 +3115,8 @@ class Mesh:
             EdgeID = Edge
         try:
             self.editor.SetNodeOnEdge(NodeID, EdgeID, paramOnEdge)
-        except SALOME.SALOME_Exception, inst:
-            raise ValueError, inst.details.text
+        except SALOME.SALOME_Exception as inst:
+            raise ValueError(inst.details.text)
         return True
 
     ## @brief Stores node position on a face
@@ -3045,8 +3133,8 @@ class Mesh:
             FaceID = Face
         try:
             self.editor.SetNodeOnFace(NodeID, FaceID, u, v)
-        except SALOME.SALOME_Exception, inst:
-            raise ValueError, inst.details.text
+        except SALOME.SALOME_Exception as inst:
+            raise ValueError(inst.details.text)
         return True
 
     ## @brief Binds a node to a solid
@@ -3061,8 +3149,8 @@ class Mesh:
             SolidID = Solid
         try:
             self.editor.SetNodeInVolume(NodeID, SolidID)
-        except SALOME.SALOME_Exception, inst:
-            raise ValueError, inst.details.text
+        except SALOME.SALOME_Exception as inst:
+            raise ValueError(inst.details.text)
         return True
 
     ## @brief Bind an element to a shape
@@ -3077,8 +3165,8 @@ class Mesh:
             ShapeID = Shape
         try:
             self.editor.SetMeshElementOnShape(ElementID, ShapeID)
-        except SALOME.SALOME_Exception, inst:
-            raise ValueError, inst.details.text
+        except SALOME.SALOME_Exception as inst:
+            raise ValueError(inst.details.text)
         return True
 
 
@@ -3122,7 +3210,7 @@ class Mesh:
     #  @param x  the X coordinate of a point
     #  @param y  the Y coordinate of a point
     #  @param z  the Z coordinate of a point
-    #  @param elementType type of elements to find; either of 
+    #  @param elementType type of elements to find; either of
     #         (SMESH.NODE, SMESH.EDGE, SMESH.FACE, SMESH.VOLUME); SMESH.ALL type
     #         means elements of any type excluding nodes, discrete and 0D elements.
     #  @param meshPart a part of mesh (group, sub-mesh) to search within
@@ -3540,12 +3628,12 @@ class Mesh:
         pattern = self.smeshpyD.GetPattern()
         isDone  = pattern.LoadFromFile(pattern_tetra)
         if not isDone:
-            print 'Pattern.LoadFromFile :', pattern.GetErrorCode()
+            print('Pattern.LoadFromFile :', pattern.GetErrorCode())
             return isDone
 
         pattern.ApplyToHexahedrons(self.mesh, theObject.GetIDs(), theNode000, theNode001)
         isDone = pattern.MakeMesh(self.mesh, False, False)
-        if not isDone: print 'Pattern.MakeMesh :', pattern.GetErrorCode()
+        if not isDone: print('Pattern.MakeMesh :', pattern.GetErrorCode())
 
         # split quafrangle faces near triangular facets of volumes
         self.SplitQuadsNearTriangularFacets()
@@ -3594,12 +3682,12 @@ class Mesh:
         pattern = self.smeshpyD.GetPattern()
         isDone  = pattern.LoadFromFile(pattern_prism)
         if not isDone:
-            print 'Pattern.LoadFromFile :', pattern.GetErrorCode()
+            print('Pattern.LoadFromFile :', pattern.GetErrorCode())
             return isDone
 
         pattern.ApplyToHexahedrons(self.mesh, theObject.GetIDs(), theNode000, theNode001)
         isDone = pattern.MakeMesh(self.mesh, False, False)
-        if not isDone: print 'Pattern.MakeMesh :', pattern.GetErrorCode()
+        if not isDone: print('Pattern.MakeMesh :', pattern.GetErrorCode())
 
         # Split quafrangle faces near triangular facets of volumes
         self.SplitQuadsNearTriangularFacets()
@@ -3699,9 +3787,9 @@ class Mesh:
                 self.editor.ConvertToQuadratic(theForce3d)
         error = self.editor.GetLastError()
         if error and error.comment:
-            print error.comment
+            print(error.comment)
         return error
-            
+
     ## Convert the mesh from quadratic to ordinary,
     #  deletes old quadratic elements, \n replacing
     #  them with ordinary mesh elements with the same id.
@@ -3752,13 +3840,13 @@ class Mesh:
         return mesh, group
 
     ##
-    # @brief Create missing boundary elements around either the whole mesh or 
+    # @brief Create missing boundary elements around either the whole mesh or
     #    groups of elements
     #  @param dimension - defines type of boundary elements to create, either of
     #                     { SMESH.BND_2DFROM3D, SMESH.BND_1DFROM3D, SMESH.BND_1DFROM2D }
     #  @param groupName - a name of group to store all boundary elements in,
     #    "" means not to create the group
-    #  @param meshName - a name of a new mesh, which is a copy of the initial 
+    #  @param meshName - a name of a new mesh, which is a copy of the initial
     #    mesh + created boundary elements; "" means not to create the new mesh
     #  @param toCopyAll - if true, the whole initial mesh will be copied into
     #    the new mesh else only boundary elements will be copied into the new mesh
@@ -3942,7 +4030,7 @@ class Mesh:
         if isinstance( basePoint, int):
             xyz = self.GetNodeXYZ( basePoint )
             if not xyz:
-                raise RuntimeError, "Invalid node ID: %s" % basePoint
+                raise RuntimeError("Invalid node ID: %s" % basePoint)
             basePoint = xyz
         if isinstance( basePoint, geomBuilder.GEOM._objref_GEOM_Object ):
             basePoint = self.geompyD.PointCoordinates( basePoint )
@@ -4002,7 +4090,7 @@ class Mesh:
             Elements = [ Elements.GetMesh() ]
         if isinstance( Elements, list ):
             if not Elements:
-                raise RuntimeError, "Elements empty!"
+                raise RuntimeError("Elements empty!")
             if isinstance( Elements[0], int ):
                 Elements = self.GetIDSource( Elements, SMESH.ALL )
                 unRegister.set( Elements )
@@ -4462,9 +4550,9 @@ class Mesh:
         if ( isinstance( thePoint, list )):
             thePoint = PointStruct( thePoint[0], thePoint[1], thePoint[2] )
         if ( isinstance( theScaleFact, float )):
-             theScaleFact = [theScaleFact]
+            theScaleFact = [theScaleFact]
         if ( isinstance( theScaleFact, int )):
-             theScaleFact = [ float(theScaleFact)]
+            theScaleFact = [ float(theScaleFact)]
 
         self.mesh.SetParameters(thePoint.parameters)
 
@@ -4490,9 +4578,9 @@ class Mesh:
         if ( isinstance( thePoint, list )):
             thePoint = PointStruct( thePoint[0], thePoint[1], thePoint[2] )
         if ( isinstance( theScaleFact, float )):
-             theScaleFact = [theScaleFact]
+            theScaleFact = [theScaleFact]
         if ( isinstance( theScaleFact, int )):
-             theScaleFact = [ float(theScaleFact)]
+            theScaleFact = [ float(theScaleFact)]
 
         self.mesh.SetParameters(thePoint.parameters)
         mesh = self.editor.ScaleMakeMesh(theObject, thePoint, theScaleFact,
@@ -4668,7 +4756,7 @@ class Mesh:
         if holeNodes and isinstance( holeNodes, list ) and isinstance( holeNodes[0], int ):
             holeNodes = SMESH.FreeBorder(nodeIDs=holeNodes)
         if not isinstance( holeNodes, SMESH.FreeBorder ):
-            raise TypeError, "holeNodes must be either SMESH.FreeBorder or list of integer and not %s" % holeNodes
+            raise TypeError("holeNodes must be either SMESH.FreeBorder or list of integer and not %s" % holeNodes)
         self.editor.FillHole( holeNodes )
 
     ## Return groups of FreeBorder's coincident within the given tolerance.
@@ -4678,7 +4766,7 @@ class Mesh:
     #  @ingroup l2_modif_trsf
     def FindCoincidentFreeBorders (self, tolerance=0.):
         return self.editor.FindCoincidentFreeBorders( tolerance )
-        
+
     ## Sew FreeBorder's of each group
     #  @param freeBorders either a SMESH.CoincidentFreeBorders structure or a list of lists
     #         where each enclosed list contains node IDs of a group of coincident free
@@ -4704,7 +4792,7 @@ class Mesh:
             coincidentGroups = []
             for nodeList in freeBorders:
                 if not nodeList or len( nodeList ) % 3:
-                    raise ValueError, "Wrong number of nodes in this group: %s" % nodeList
+                    raise ValueError("Wrong number of nodes in this group: %s" % nodeList)
                 group = []
                 while nodeList:
                     group.append  ( SMESH.FreeBorderPart( len(borders), 0, 1, 2 ))
@@ -4787,7 +4875,7 @@ class Mesh:
     def ClearLastCreated(self):
         self.editor.ClearLastCreated()
 
-    ## Create duplicates of given elements, i.e. create new elements based on the 
+    ## Create duplicates of given elements, i.e. create new elements based on the
     #  same nodes as the given ones.
     #  @param theElements - container of elements to duplicate. It can be a Mesh,
     #         sub-mesh, group, filter or a list of element IDs. If \a theElements is
@@ -4795,7 +4883,7 @@ class Mesh:
     #  @param theGroupName - a name of group to contain the generated elements.
     #                    If a group with such a name already exists, the new elements
     #                    are added to the existng group, else a new group is created.
-    #                    If \a theGroupName is empty, new elements are not added 
+    #                    If \a theGroupName is empty, new elements are not added
     #                    in any group.
     # @return a group where the new elements are added. None if theGroupName == "".
     #  @ingroup l2_modif_duplicat
@@ -4968,11 +5056,11 @@ class Mesh:
     #  @return TRUE if operation has been completed successfully, FALSE otherwise
     #  @ingroup l2_modif_duplicat
     def DoubleNodesOnGroupBoundaries(self, theDomains, createJointElems, onAllBoundaries=False ):
-       return self.editor.DoubleNodesOnGroupBoundaries( theDomains, createJointElems, onAllBoundaries )
+        return self.editor.DoubleNodesOnGroupBoundaries( theDomains, createJointElems, onAllBoundaries )
 
     ## Double nodes on some external faces and create flat elements.
     #  Flat elements are mainly used by some types of mechanic calculations.
-    #  
+    #
     #  Each group of the list must be constituted of faces.
     #  Triangles are transformed in prisms, and quadrangles in hexahedrons.
     #  @param theGroupsOfFaces - list of groups of faces
@@ -4980,7 +5068,7 @@ class Mesh:
     #  @ingroup l2_modif_duplicat
     def CreateFlatElementsOnFacesGroups(self, theGroupsOfFaces ):
         return self.editor.CreateFlatElementsOnFacesGroups( theGroupsOfFaces )
-    
+
     ## identify all the elements around a geom shape, get the faces delimiting the hole
     #
     def CreateHoleSkin(self, radius, theShape, groupName, theNodesCoords):
@@ -5024,7 +5112,7 @@ class Mesh:
         if not fn:
             fn = self.smeshpyD.GetFunctor(funcType)
             fn.SetMesh(self.mesh)
-            self.functors[ funcType._v ] = fn
+            self.functors[ EnumToLong(funcType) ] = fn
         return fn
 
     ## Return value of a functor for a given element
@@ -5160,15 +5248,33 @@ class Mesh:
 #  with old dump scripts which call SMESH_Mesh directly and not via smeshBuilder.Mesh
 #
 class meshProxy(SMESH._objref_SMESH_Mesh):
-    def __init__(self):
-        SMESH._objref_SMESH_Mesh.__init__(self)
+    def __init__(self, *args):
+        SMESH._objref_SMESH_Mesh.__init__(self, *args)
     def __deepcopy__(self, memo=None):
-        new = self.__class__()
+        new = self.__class__(self)
         return new
     def CreateDimGroup(self,*args): # 2 args added: nbCommonNodes, underlyingOnly
         if len( args ) == 3:
             args += SMESH.ALL_NODES, True
-        return SMESH._objref_SMESH_Mesh.CreateDimGroup( self, *args )
+        return SMESH._objref_SMESH_Mesh.CreateDimGroup(self, *args)
+    def ExportToMEDX(self, *args): # function removed
+        print("WARNING: ExportToMEDX() is deprecated, use ExportMED() instead")
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]]
+        SMESH._objref_SMESH_Mesh.ExportMED(self, *args)
+    def ExportToMED(self, *args): # function removed
+        print("WARNING: ExportToMED() is deprecated, use ExportMED() instead")
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]]
+        while len(args) < 4:  # !!!! nb of parameters for ExportToMED IDL's method
+            args.append(True)
+        SMESH._objref_SMESH_Mesh.ExportMED(self, *args)
+    def ExportPartToMED(self, *args): # 'version' parameter removed
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]]
+        SMESH._objref_SMESH_Mesh.ExportPartToMED(self, *args)
+    def ExportMED(self, *args): # signature of method changed
+        args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]]
+        while len(args) < 4:  # !!!! nb of parameters for ExportToMED IDL's method
+            args.append(True)
+        SMESH._objref_SMESH_Mesh.ExportMED(self, *args)
     pass
 omniORB.registerObjref(SMESH._objref_SMESH_Mesh._NP_RepositoryId, meshProxy)
 
@@ -5176,11 +5282,11 @@ omniORB.registerObjref(SMESH._objref_SMESH_Mesh._NP_RepositoryId, meshProxy)
 ## Private class wrapping SMESH.SMESH_SubMesh in order to add Compute()
 #
 class submeshProxy(SMESH._objref_SMESH_subMesh):
-    def __init__(self):
-        SMESH._objref_SMESH_subMesh.__init__(self)
+    def __init__(self, *args):
+        SMESH._objref_SMESH_subMesh.__init__(self, *args)
         self.mesh = None
     def __deepcopy__(self, memo=None):
-        new = self.__class__()
+        new = self.__class__(self)
         return new
 
     ## Compute the sub-mesh and return the status of the computation
@@ -5196,11 +5302,11 @@ class submeshProxy(SMESH._objref_SMESH_subMesh):
 
         ok = self.mesh.Compute( self.GetSubShape(),refresh=[] )
 
-        if salome.sg.hasDesktop() and self.mesh.GetStudyId() >= 0:
+        if salome.sg.hasDesktop():
             smeshgui = salome.ImportComponentGUI("SMESH")
-            smeshgui.Init(self.mesh.GetStudyId())
+            smeshgui.Init()
             smeshgui.SetMeshIcon( salome.ObjectToID( self ), ok, (self.GetNumberOfElements()==0) )
-            if refresh: salome.sg.updateObjBrowser(True)
+            if refresh: salome.sg.updateObjBrowser()
             pass
 
         return ok
@@ -5213,8 +5319,8 @@ omniORB.registerObjref(SMESH._objref_SMESH_subMesh._NP_RepositoryId, submeshProx
 #  smeshBuilder.Mesh
 #
 class meshEditor(SMESH._objref_SMESH_MeshEditor):
-    def __init__(self):
-        SMESH._objref_SMESH_MeshEditor.__init__(self)
+    def __init__(self, *args):
+        SMESH._objref_SMESH_MeshEditor.__init__(self, *args)
         self.mesh = None
     def __getattr__(self, name ): # method called if an attribute not found
         if not self.mesh:         # look for name() method in Mesh class
@@ -5223,10 +5329,10 @@ class meshEditor(SMESH._objref_SMESH_MeshEditor):
             return getattr( self.mesh, name )
         if name == "ExtrusionAlongPathObjX":
             return getattr( self.mesh, "ExtrusionAlongPathX" ) # other method name
-        print "meshEditor: attribute '%s' NOT FOUND" % name
+        print("meshEditor: attribute '%s' NOT FOUND" % name)
         return None
     def __deepcopy__(self, memo=None):
-        new = self.__class__()
+        new = self.__class__(self)
         return new
     def FindCoincidentNodes(self,*args): # a 2nd arg added (SeparateCornerAndMediumNodes)
         if len( args ) == 1: args += False,
@@ -5292,8 +5398,8 @@ class algoCreator:
 
     # Store a python class of algorithm
     def add(self, algoClass):
-        if type( algoClass ).__name__ == 'classobj' and \
-           hasattr( algoClass, "algoType"):
+        if inspect.isclass(algoClass) and \
+           hasattr(algoClass, "algoType"):
             self.algoTypeToClass[ algoClass.algoType ] = algoClass
             if not self.defaultAlgoType and \
                hasattr( algoClass, "isDefault") and algoClass.isDefault:
@@ -5341,10 +5447,11 @@ class algoCreator:
             algoType = self.defaultAlgoType
         if not algoType and self.algoTypeToClass:
             algoType = sorted( self.algoTypeToClass.keys() )[0]
-        if self.algoTypeToClass.has_key( algoType ):
+        if algoType in self.algoTypeToClass:
             #print "Create algo",algoType
+
             return self.algoTypeToClass[ algoType ]( self.mesh, shape )
-        raise RuntimeError, "No class found for algo type %s" % algoType
+        raise RuntimeError( "No class found for algo type %s" % algoType)
         return None
 
 ## Private class used to substitute and store variable parameters of hypotheses.
@@ -5369,11 +5476,11 @@ class hypMethodWrapper:
         except omniORB.CORBA.BAD_PARAM: # raised by hypothesis method call
             # maybe there is a replaced string arg which is not variable
             result = self.method( self.hyp, *args )
-        except ValueError, detail: # raised by ParseParameters()
+        except ValueError as detail: # raised by ParseParameters()
             try:
                 result = self.method( self.hyp, *args )
             except omniORB.CORBA.BAD_PARAM:
-                raise ValueError, detail # wrong variable name
+                raise ValueError(detail) # wrong variable name
 
         return result
     pass
@@ -5409,9 +5516,9 @@ for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
     pluginBuilderName = pluginName + "Builder"
     try:
         exec( "from salome.%s.%s import *" % (pluginName, pluginBuilderName))
-    except Exception, e:
-       from salome_utils import verbose
-       if verbose(): print "Exception while loading %s: %s" % ( pluginBuilderName, e )
+    except Exception as e:
+        from salome_utils import verbose
+        if verbose(): print("Exception while loading %s: %s" % ( pluginBuilderName, e ))
         continue
     exec( "from salome.%s import %s" % (pluginName, pluginBuilderName))
     plugin = eval( pluginBuilderName )
@@ -5422,7 +5529,7 @@ for pluginName in os.environ[ "SMESH_MeshersList" ].split( ":" ):
         if k[0] == '_': continue
         algo = getattr( plugin, k )
         #print "             algo:", str(algo)
-        if type( algo ).__name__ == 'classobj' and hasattr( algo, "meshMethod" ):
+        if inspect.isclass(algo) and hasattr(algo, "meshMethod"):
             #print "                     meshMethod:" , str(algo.meshMethod)
             if not hasattr( Mesh, algo.meshMethod ):
                 setattr( Mesh, algo.meshMethod, algoCreator( algo.meshMethod ))
index e5b5a3d6a3ee529fa2a4b0c3c8ab1025f137fcb1..92999bf2e2c5a8c861352cf1f177a79c5b45185d 100644 (file)
@@ -70,7 +70,7 @@ class Mesh_Algorithm:
     #  Finds only the hypotheses created in smeshpyD engine.
     #  @return SMESH.SMESH_Hypothesis
     def FindHypothesis (self, hypname, args, CompareMethod, smeshpyD):
-        study = smeshpyD.GetCurrentStudy()
+        study = salome.myStudy
         if not study: return None
         #to do: find component by smeshpyD object, not by its data type
         scomp = study.FindComponent(smeshpyD.ComponentDataType())
@@ -114,7 +114,7 @@ class Mesh_Algorithm:
     #  Finds only the algorithms, which have been created in smeshpyD engine.
     #  @return SMESH.SMESH_Algo
     def FindAlgorithm (self, algoname, smeshpyD):
-        study = smeshpyD.GetCurrentStudy()
+        study = salome.myStudy
         if not study: return None
         #to do: find component by smeshpyD object, not by its data type
         scomp = study.FindComponent(smeshpyD.ComponentDataType())
@@ -183,7 +183,7 @@ class Mesh_Algorithm:
     ## Private method.
     def Create(self, mesh, geom, hypo, so="libStdMeshersEngine.so"):
         if geom is None and mesh.mesh.HasShapeToMesh():
-            raise RuntimeError, "Attempt to create " + hypo + " algorithm on None shape"
+            raise RuntimeError("Attempt to create " + hypo + " algorithm on None shape")
         algo = self.FindAlgorithm(hypo, mesh.smeshpyD)
         if algo is None:
             algo = mesh.smeshpyD.CreateHypothesis(hypo, so)
@@ -195,7 +195,7 @@ class Mesh_Algorithm:
     def Assign(self, algo, mesh, geom):
         from salome.smesh.smeshBuilder import AssureGeomPublished, TreatHypoStatus, GetName
         if geom is None and mesh.mesh.HasShapeToMesh():
-            raise RuntimeError, "Attempt to create " + algo + " algorithm on None shape"
+            raise RuntimeError("Attempt to create " + algo + " algorithm on None shape")
         self.mesh = mesh
         if not geom or geom.IsSame( mesh.geom ):
             self.geom = mesh.geom
@@ -208,7 +208,7 @@ class Mesh_Algorithm:
         return
 
     def CompareHyp (self, hyp, args):
-        print "CompareHyp is not implemented for ", self.__class__.__name__, ":", hyp.GetName()
+        print("CompareHyp is not implemented for ", self.__class__.__name__, ":", hyp.GetName())
         return False
 
     def CompareEqualHyp (self, hyp, args):
@@ -285,9 +285,9 @@ class Mesh_Algorithm:
     def ViscousLayers(self, thickness, numberOfLayers, stretchFactor,
                       faces=[], isFacesToIgnore=True, extrMethod=StdMeshers.SURF_OFFSET_SMOOTH ):
         if not isinstance(self.algo, SMESH._objref_SMESH_3D_Algo):
-            raise TypeError, "ViscousLayers are supported by 3D algorithms only"
+            raise TypeError("ViscousLayers are supported by 3D algorithms only")
         if not "ViscousLayers" in self.GetCompatibleHypothesis():
-            raise TypeError, "ViscousLayers are not supported by %s"%self.algo.GetName()
+            raise TypeError("ViscousLayers are not supported by %s"%self.algo.GetName())
         if faces and isinstance( faces, geomBuilder.GEOM._objref_GEOM_Object ):
             faces = [ faces ]
         if faces and isinstance( faces[0], geomBuilder.GEOM._objref_GEOM_Object ):
@@ -323,9 +323,9 @@ class Mesh_Algorithm:
     def ViscousLayers2D(self, thickness, numberOfLayers, stretchFactor,
                         edges=[], isEdgesToIgnore=True ):
         if not isinstance(self.algo, SMESH._objref_SMESH_2D_Algo):
-            raise TypeError, "ViscousLayers2D are supported by 2D algorithms only"
+            raise TypeError("ViscousLayers2D are supported by 2D algorithms only")
         if not "ViscousLayers2D" in self.GetCompatibleHypothesis():
-            raise TypeError, "ViscousLayers2D are not supported by %s"%self.algo.GetName()
+            raise TypeError("ViscousLayers2D are not supported by %s"%self.algo.GetName())
         if edges and not isinstance( edges, list ) and not isinstance( edges, tuple ):
             edges = [edges]
         if edges and isinstance( edges[0], geomBuilder.GEOM._objref_GEOM_Object ):
@@ -356,29 +356,29 @@ class Mesh_Algorithm:
             if isinstance( i, int ):
                 s = geompy.SubShapes(self.mesh.geom, [i])[0]
                 if s.GetShapeType() != geomBuilder.GEOM.EDGE:
-                    raise TypeError, "Not EDGE index given"
+                    raise TypeError("Not EDGE index given")
                 resList.append( i )
             elif isinstance( i, geomBuilder.GEOM._objref_GEOM_Object ):
                 if i.GetShapeType() != geomBuilder.GEOM.EDGE:
-                    raise TypeError, "Not an EDGE given"
+                    raise TypeError("Not an EDGE given")
                 resList.append( geompy.GetSubShapeID(self.mesh.geom, i ))
             elif len( i ) > 1:
                 e = i[0]
                 v = i[1]
                 if not isinstance( e, geomBuilder.GEOM._objref_GEOM_Object ) or \
                    not isinstance( v, geomBuilder.GEOM._objref_GEOM_Object ):
-                    raise TypeError, "A list item must be a tuple (edge, 1st_vertex_of_edge)"
+                    raise TypeError("A list item must be a tuple (edge, 1st_vertex_of_edge)")
                 if v.GetShapeType() == geomBuilder.GEOM.EDGE and \
                    e.GetShapeType() == geomBuilder.GEOM.VERTEX:
                     v,e = e,v
                 if e.GetShapeType() != geomBuilder.GEOM.EDGE or \
                    v.GetShapeType() != geomBuilder.GEOM.VERTEX:
-                    raise TypeError, "A list item must be a tuple (edge, 1st_vertex_of_edge)"
+                    raise TypeError("A list item must be a tuple (edge, 1st_vertex_of_edge)")
                 vFirst = FirstVertexOnCurve( self.mesh, e )
                 tol    = geompy.Tolerance( vFirst )[-1]
                 if geompy.MinDistance( v, vFirst ) > 1.5*tol:
                     resList.append( geompy.GetSubShapeID(self.mesh.geom, e ))
             else:
-                raise TypeError, "Item must be either an edge or tuple (edge, 1st_vertex_of_edge)"
+                raise TypeError("Item must be either an edge or tuple (edge, 1st_vertex_of_edge)")
         return resList
 
index 8821880894511da5ab0d3a967a956b111e9f89b0..b609055e24416d50f89e19a3f6903d835bee2c39 100644 (file)
@@ -28,7 +28,7 @@ sm_gui = libSMESH_Swig.SMESH_Swig()
 
 import SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New(salome.myStudy)
+smesh =  smeshBuilder.New()
 
 import GEOM
 
@@ -46,7 +46,7 @@ _converter = {
 
 # Converts swig to idl enumeration
 def _swig2idl( type ):
-    if _converter.has_key( type ) :
+    if type in _converter :
         return _converter[type]
     return None
 
@@ -80,7 +80,7 @@ def select( mesh, lst, append = False ) :
     # Check mesh parameter
     entry = _getEntry(mesh)   
     if entry is None:
-        print "Wrong 'mesh' parameter"
+        print("Wrong 'mesh' parameter")
         return
     
     # Check lst parameter
@@ -91,7 +91,7 @@ def select( mesh, lst, append = False ) :
         if isinstance( lst,list ) :
             tmp = lst
         else :
-            print "Wrong 'lst' parameter"
+            print("Wrong 'lst' parameter")
             return
     sm_gui.select( entry, tmp, append )
 
@@ -99,7 +99,7 @@ def select( mesh, lst, append = False ) :
 def _preProcess(mesh) :
     m = _getMesh(mesh);
     if m is None:
-        print "Wrong 'mesh' parameter"
+        print("Wrong 'mesh' parameter")
         return [None, None]
     
     elemType = _swig2idl(sm_gui.getSelectionMode())
index 8a252507cbe8c7f57b70fd8a1d46b69315c7cff3..253ff7528b74ff635f49edd0bff2bbf0924f3306 100644 (file)
@@ -52,6 +52,7 @@ ADD_DEFINITIONS(
 SET(_link_LIBRARIES
   ${KERNEL_SalomeGenericObj}
   ${KERNEL_SALOMELocalTrace}
+  ${KERNEL_SalomeKernelHelpers}
   ${GUI_CAM}
   ${GUI_suit}
   ${GUI_qtx}
@@ -84,7 +85,7 @@ SET_DIRECTORY_PROPERTIES(PROPERTIES INCLUDE_DIRECTORIES "${_cmake_include_direct
 
 # swig flags
 SET_SOURCE_FILES_PROPERTIES(libSMESH_Swig.i PROPERTIES CPLUSPLUS ON)
-SET_SOURCE_FILES_PROPERTIES(libSMESH_Swig.i PROPERTIES SWIG_DEFINITIONS "-shadow")
+SET_SOURCE_FILES_PROPERTIES(libSMESH_Swig.i PROPERTIES SWIG_FLAGS "-py3")
 SET_SOURCE_FILES_PROPERTIES(libSMESH_swig_wrap.cpp PROPERTIES COMPILE_FLAGS "-DHAVE_CONFIG_H")
 
 # --- scripts ---
index e5a7aeeb068b838349bca1e1a913d45b8a99ec4b..a5a5dfe01e4cb991ecee9e37fb3a0f610e8e767f 100644 (file)
@@ -36,6 +36,7 @@
 #include <Utils_ORB_INIT.hxx>
 #include <Utils_SINGLETON.hxx>
 #include <SALOMEDSClient_ClientFactory.hxx>
+#include <SALOME_KernelServices.hxx>
 
 #include <utilities.h>
 
@@ -208,14 +209,13 @@ namespace
   void
   SetDomain(const char*                       theMeshOrSubMeshEntry,
             const char*                       theDomainEntry,
-            const SALOMEDS::Study_var&        theStudy,
             const SALOMEDS::StudyBuilder_var& theStudyBuilder,
             long                              theRefOnAppliedDomainTag,
             const QString&                    theAppliedDomainMEN,
             const QString&                    theAppliedDomainICON)
   {
-    SALOMEDS::SObject_var aMeshOrSubMeshSO = theStudy->FindObjectID(theMeshOrSubMeshEntry);
-    SALOMEDS::SObject_var    aHypothesisSO = theStudy->FindObjectID(theDomainEntry);
+    SALOMEDS::SObject_var aMeshOrSubMeshSO = KERNEL::getStudyServant()->FindObjectID(theMeshOrSubMeshEntry);
+    SALOMEDS::SObject_var    aHypothesisSO = KERNEL::getStudyServant()->FindObjectID(theDomainEntry);
 
     if(!aMeshOrSubMeshSO->_is_nil() && !aHypothesisSO->_is_nil()){
       //Find or Create Applied Hypothesis root
@@ -251,12 +251,10 @@ namespace
   void
   SetHypothesis(const char*                       theMeshOrSubMeshEntry,
                 const char*                       theDomainEntry,
-                const SALOMEDS::Study_var&        theStudy,
                 const SALOMEDS::StudyBuilder_var& theStudyBuilder)
   {
     SetDomain(theMeshOrSubMeshEntry,
               theDomainEntry,
-              theStudy,
               theStudyBuilder,
               SMESH::Tag_RefOnAppliedHypothesis,
               QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"),
@@ -268,12 +266,10 @@ namespace
   void
   SetAlgorithms(const char*                       theMeshOrSubMeshEntry,
                 const char*                       theDomainEntry,
-                const SALOMEDS::Study_var&        theStudy,
                 const SALOMEDS::StudyBuilder_var& theStudyBuilder)
   {
     SetDomain(theMeshOrSubMeshEntry,
               theDomainEntry,
-              theStudy,
               theStudyBuilder,
               SMESH::Tag_RefOnAppliedAlgorithms,
               QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"),
@@ -319,21 +315,15 @@ SMESH_Swig::SMESH_Swig()
 
 //===============================================================
 void
-SMESH_Swig::Init(int theStudyID)
+SMESH_Swig::Init()
 {
   class TEvent: public SALOME_Event
   {
-    int                         myStudyID;
-    SALOMEDS::Study_var&        myStudy;
     SALOMEDS::StudyBuilder_var& myStudyBuilder;
     SALOMEDS::SComponent_var&   mySComponentMesh;
   public:
-    TEvent(int                         theStudyID,
-           SALOMEDS::Study_var&        theStudy,
-           SALOMEDS::StudyBuilder_var& theStudyBuilder,
+    TEvent(SALOMEDS::StudyBuilder_var& theStudyBuilder,
            SALOMEDS::SComponent_var&   theSComponentMesh):
-      myStudyID       (theStudyID),
-      myStudy         (theStudy),
       myStudyBuilder  (theStudyBuilder),
       mySComponentMesh(theSComponentMesh)
     {}
@@ -351,26 +341,22 @@ SMESH_Swig::Init(int theStudyID)
       SUIT_Application* anApplication = aSession->activeApplication();
       SalomeApp_Application* anApp    = dynamic_cast<SalomeApp_Application*>(anApplication);
 
-      SALOME_NamingService* aNamingService = anApp->namingService();
-      CORBA::Object_var anObject           = aNamingService->Resolve("/myStudyManager");
-      SALOMEDS::StudyManager_var aStudyMgr = SALOMEDS::StudyManager::_narrow(anObject);
-      myStudy = aStudyMgr->GetStudyByID(myStudyID);
+      SALOMEDS::Study_var aStudy = KERNEL::getStudyServant();
 
       SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen();
-      aSMESHGen->SetCurrentStudy( myStudy.in() );
 
-      myStudyBuilder = myStudy->NewBuilder();
+      myStudyBuilder = aStudy->NewBuilder();
 
       SALOMEDS::GenericAttribute_var anAttr;
       SALOMEDS::AttributeName_var    aName;
       SALOMEDS::AttributePixMap_var  aPixmap;
 
-      SALOMEDS::SComponent_var aSComponent = myStudy->FindComponent("SMESH");
+      SALOMEDS::SComponent_var aSComponent = aStudy->FindComponent("SMESH");
       if ( aSComponent->_is_nil() )
       {
-        bool aLocked = myStudy->GetProperties()->IsLocked();
+        bool aLocked = aStudy->GetProperties()->IsLocked();
         if (aLocked)
-          myStudy->GetProperties()->SetLocked(false);
+          aStudy->GetProperties()->SetLocked(false);
 
         SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI();
         //SRN: BugID IPAL9186, load a SMESH gui if it hasn't been loaded
@@ -393,13 +379,13 @@ SMESH_Swig::Init(int theStudyID)
         aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" );
         aPixmap->UnRegister();
 
-        SALOMEDS::UseCaseBuilder_var useCaseBuilder = myStudy->GetUseCaseBuilder();
+        SALOMEDS::UseCaseBuilder_var useCaseBuilder = KERNEL::getStudyServant()->GetUseCaseBuilder();
         useCaseBuilder->SetRootCurrent();
         useCaseBuilder->Append( aSComponent.in() );
   
         myStudyBuilder->DefineComponentInstance(aSComponent,aSMESHGen);
         if (aLocked)
-          myStudy->GetProperties()->SetLocked(true);
+          KERNEL::getStudyServant()->GetProperties()->SetLocked(true);
       }
 
       mySComponentMesh = SALOMEDS::SComponent::_narrow(aSComponent);
@@ -410,9 +396,7 @@ SMESH_Swig::Init(int theStudyID)
 
   //MESSAGE("Init");
 
-  ProcessVoidEvent(new TEvent(theStudyID,
-                              myStudy,
-                              myStudyBuilder,
+  ProcessVoidEvent(new TEvent(myStudyBuilder,
                               mySComponentMesh));
 }
 
@@ -429,7 +413,7 @@ const char* SMESH_Swig::AddNewMesh(const char* theIOR)
 {
 
   // VSR: added temporarily - to be removed - objects are published automatically by engine
-  SALOMEDS::SObject_var aSObject = myStudy->FindObjectIOR(theIOR);
+  SALOMEDS::SObject_var aSObject = KERNEL::getStudyServant()->FindObjectIOR(theIOR);
   if (aSObject->_is_nil())
   {
     //Find or Create Hypothesis root
@@ -488,8 +472,8 @@ const char* SMESH_Swig::AddNewAlgorithms(const char* theIOR)
 void SMESH_Swig::SetShape(const char* theShapeEntry,
                           const char* theMeshEntry)
 {
-  SALOMEDS::SObject_var aGeomShapeSO = myStudy->FindObjectID( theShapeEntry );
-  SALOMEDS::SObject_var      aMeshSO = myStudy->FindObjectID( theMeshEntry );
+  SALOMEDS::SObject_var aGeomShapeSO = KERNEL::getStudyServant()->FindObjectID( theShapeEntry );
+  SALOMEDS::SObject_var      aMeshSO = KERNEL::getStudyServant()->FindObjectID( theMeshEntry );
 
   if(!aMeshSO->_is_nil() && !aGeomShapeSO->_is_nil()){
     SALOMEDS::SObject_var aSObject = myStudyBuilder->NewObjectToTag(aMeshSO, SMESH::Tag_RefOnShape);
@@ -507,7 +491,6 @@ void SMESH_Swig::SetHypothesis(const char* theMeshOrSubMeshEntry,
 {
   ::SetHypothesis(theMeshOrSubMeshEntry,
                   theDomainEntry,
-                  myStudy,
                   myStudyBuilder);
 }
 
@@ -518,7 +501,6 @@ void SMESH_Swig::SetAlgorithms(const char* theMeshOrSubMeshEntry,
 {
   ::SetAlgorithms(theMeshOrSubMeshEntry,
                   theDomainEntry,
-                  myStudy,
                   myStudyBuilder);
 }
 
@@ -527,7 +509,7 @@ void SMESH_Swig::SetAlgorithms(const char* theMeshOrSubMeshEntry,
 void
 SMESH_Swig::UnSetHypothesis(const char* theDomainEntry)
 {
-  SALOMEDS::SObject_var aDomainSO = myStudy->FindObjectID(theDomainEntry);
+  SALOMEDS::SObject_var aDomainSO = KERNEL::getStudyServant()->FindObjectID(theDomainEntry);
   if(!aDomainSO->_is_nil())
     myStudyBuilder->RemoveObject(aDomainSO);
 }
@@ -536,7 +518,7 @@ const char* SMESH_Swig::AddSubMesh(const char* theMeshEntry,
                                    const char* theSubMeshIOR,
                                    int theShapeType)
 {
-  SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID(theMeshEntry);
+  SALOMEDS::SObject_var aMeshSO = KERNEL::getStudyServant()->FindObjectID(theMeshEntry);
   if(!aMeshSO->_is_nil()) {
     long aShapeTag;
     QString aSubMeshName;
@@ -599,11 +581,11 @@ const char* SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry,
                                           const char* theSubMeshIOR,
                                           int         ShapeType)
 {
-  SALOMEDS::SObject_var aGeomShapeSO = myStudy->FindObjectID(theGeomShapeEntry);
+  SALOMEDS::SObject_var aGeomShapeSO = KERNEL::getStudyServant()->FindObjectID(theGeomShapeEntry);
   if(!aGeomShapeSO->_is_nil())
   {
     const char *       aSubMeshEntry = AddSubMesh(theMeshEntry,theSubMeshIOR,ShapeType);
-    SALOMEDS::SObject_var aSubMeshSO = myStudy->FindObjectID(aSubMeshEntry);
+    SALOMEDS::SObject_var aSubMeshSO = KERNEL::getStudyServant()->FindObjectID(aSubMeshEntry);
     if ( !aSubMeshSO->_is_nil()) {
       SetShape( theGeomShapeEntry, aSubMeshEntry );
       CORBA::String_var aString = aSubMeshSO->GetID();
@@ -843,7 +825,7 @@ void SMESH_Swig::UpdateActor( const char* Mesh_Entry ) {
 void SMESH_Swig::SetName(const char* theEntry,
                          const char* theName)
 {
-  SALOMEDS::SObject_var aSObject = myStudy->FindObjectID(theEntry);
+  SALOMEDS::SObject_var aSObject = KERNEL::getStudyServant()->FindObjectID(theEntry);
   SALOMEDS::GenericAttribute_var anAttr;
   SALOMEDS::AttributeName_var aName;
   if(!aSObject->_is_nil()){
@@ -869,15 +851,12 @@ void SMESH_Swig::SetMeshIcon(const char* theMeshEntry,
 {
   class TEvent: public SALOME_Event
   {
-    SALOMEDS::Study_var myStudy;
     std::string         myMeshEntry;
     bool                myIsComputed, myIsEmpty;
   public:
-    TEvent(const SALOMEDS::Study_var& theStudy,
-           const std::string&         theMeshEntry,
+    TEvent(const std::string&         theMeshEntry,
            const bool                 theIsComputed,
            const bool                 isEmpty):
-      myStudy     (theStudy),
       myMeshEntry (theMeshEntry),
       myIsComputed(theIsComputed),
       myIsEmpty   (isEmpty)
@@ -887,15 +866,14 @@ void SMESH_Swig::SetMeshIcon(const char* theMeshEntry,
     void
     Execute()
     {
-      SALOMEDS::SObject_ptr aMeshSO = myStudy->FindObjectID(myMeshEntry.c_str());
+      SALOMEDS::SObject_ptr aMeshSO = KERNEL::getStudyServant()->FindObjectID(myMeshEntry.c_str());
       if(_PTR(SObject) aMesh = ClientFactory::SObject(aMeshSO))
         SMESH::ModifiedMesh(aMesh,myIsComputed,myIsEmpty);
       // aMeshSO->UnRegister();  ~aMesh() already called UnRegister()!
     }
   };
 
-  ProcessVoidEvent(new TEvent(myStudy,
-                              theMeshEntry,
+  ProcessVoidEvent(new TEvent(theMeshEntry,
                               theIsComputed,
                               isEmpty));
 }
index 931614c1ef0082a5216bb505475e78dfafc3e329..fa564efa402ea2ba3e08771af5afe4f11eac62fb 100644 (file)
@@ -97,7 +97,7 @@ public:
   SMESH_Swig();
   ~SMESH_Swig();
     
-  void                       Init( int );
+  void                       Init();
 
   const char*                AddNewMesh( const char* );
 
@@ -143,7 +143,6 @@ public:
   void select( const char *id, std::vector<std::pair<int,int> >, bool apend = false );
 
 private:
-  SALOMEDS::Study_var        myStudy;
   SALOMEDS::StudyBuilder_var myStudyBuilder;
   SALOMEDS::SComponent_var   mySComponentMesh;
 };
index cb5cc2200bfb49789f0875b97a17e5fd0c593de4..e261ade1dbca6e59ba15791f4e8f868a1e6475a0 100644 (file)
@@ -110,7 +110,7 @@ class SMESH_Swig
   SMESH_Swig();
   ~SMESH_Swig();
 
-  void Init(int studyID);
+  void Init();
 
   const char* AddNewMesh(const char* IOR);
   const char* AddNewHypothesis(const char* IOR);
index ba2e031ac96c00f8c70f1a5b408b45d1e26a4638..8d98249022e7c0f9b0028b576e6b394ed347d4c8 100644 (file)
@@ -155,7 +155,7 @@ namespace // internal utils
   class AdaptiveAlgo : public StdMeshers_Regular_1D
   {
   public:
-    AdaptiveAlgo(int hypId, int studyId, SMESH_Gen* gen);
+    AdaptiveAlgo(int hypId, SMESH_Gen* gen);
     virtual bool Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape );
     virtual bool Evaluate(SMESH_Mesh &         theMesh,
                           const TopoDS_Shape & theShape,
@@ -916,9 +916,8 @@ namespace // internal utils
 //function : StdMeshers_Adaptive1D
 //purpose  : Constructor
 StdMeshers_Adaptive1D::StdMeshers_Adaptive1D(int         hypId,
-                                             int         studyId,
                                              SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen)
+  :SMESH_Hypothesis(hypId, gen)
 {
   myMinSize       = 1e-10;
   myMaxSize       = 1e+10;
@@ -1076,7 +1075,7 @@ SMESH_Algo* StdMeshers_Adaptive1D::GetAlgo() const
   if ( !myAlgo )
   {
     AdaptiveAlgo* newAlgo = 
-      new AdaptiveAlgo( _gen->GetANewId(), _studyId, _gen );
+      new AdaptiveAlgo( _gen->GetANewId(), _gen );
     newAlgo->SetHypothesis( this );
 
     ((StdMeshers_Adaptive1D*) this)->myAlgo = newAlgo;
@@ -1091,9 +1090,8 @@ SMESH_Algo* StdMeshers_Adaptive1D::GetAlgo() const
 //================================================================================
 
 AdaptiveAlgo::AdaptiveAlgo(int        hypId,
-                           int        studyId,
                            SMESH_Gen* gen)
-  : StdMeshers_Regular_1D( hypId, studyId, gen ),
+  : StdMeshers_Regular_1D( hypId, gen ),
     myHyp(NULL)
 {
   _name = "AdaptiveAlgo_1D";
index 601aeae0b05198156e629cd5a9dbd573efa1e1f6..39ea38e876d641d9d9f7d4f25a593708f0d77b13 100644 (file)
@@ -37,7 +37,7 @@
 class STDMESHERS_EXPORT StdMeshers_Adaptive1D : public SMESH_Hypothesis
 {
  public:
-  StdMeshers_Adaptive1D(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_Adaptive1D(int hypId, SMESH_Gen * gen);
   ~StdMeshers_Adaptive1D();
 
   /*!
index 1dff2051523f9b99505cac09045bc8c84c922410..89cea269a479528f6a5ee04bb96db512cb966b3c 100644 (file)
@@ -48,8 +48,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_Arithmetic1D::StdMeshers_Arithmetic1D(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_Arithmetic1D::StdMeshers_Arithmetic1D(int hypId, SMESH_Gen * gen)
+  :SMESH_Hypothesis(hypId, gen)
 {
   _begLength = 1.;
   _endLength = 10.;
index a95940dc4915e2479c0cc838565a7f8d88d482ac..e0b9cd9b76bd79889062e82ecfb10a077730370e 100644 (file)
@@ -41,7 +41,7 @@ class STDMESHERS_EXPORT StdMeshers_Arithmetic1D:
   public SMESH_Hypothesis
 {
 public:
-  StdMeshers_Arithmetic1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Arithmetic1D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Arithmetic1D();
 
   void SetLength(double length, bool isStartLength) throw(SALOME_Exception);
index 4e49040c1f0787dd0dbe7787c10db7da03d1b5f6..1041134d00bb98ee487bc4ec298cc2353b9f5419 100644 (file)
@@ -47,8 +47,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_AutomaticLength::StdMeshers_AutomaticLength(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_AutomaticLength::StdMeshers_AutomaticLength(int hypId, SMESH_Gen * gen)
+  :SMESH_Hypothesis(hypId, gen)
 {
   _name = "AutomaticLength";
   _param_algo_dim = 1; // is used by SMESH_Regular_1D
index d3da396c270b1880d20de641f2eedfae08bd2bbb..eb5b1cfb870ecb764c6a97b4ba8357bfd32402cd 100644 (file)
@@ -49,7 +49,7 @@ class TopoDS_TShape;
 class STDMESHERS_EXPORT StdMeshers_AutomaticLength:public SMESH_Hypothesis
 {
 public:
-  StdMeshers_AutomaticLength(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_AutomaticLength(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_AutomaticLength();
 
   /*!
index 6c0fcb6a59813343ab58eff1079e34bc4d36727f..0081653ef13391fac68eddeb16222b082f3afda2 100644 (file)
@@ -61,9 +61,8 @@ using namespace std;
 //=======================================================================
 
 StdMeshers_CartesianParameters3D::StdMeshers_CartesianParameters3D(int         hypId,
-                                                                   int         studyId,
                                                                    SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen),
+  : SMESH_Hypothesis(hypId, gen),
     _sizeThreshold( 4.0 ), // default according to the customer specification
     _toAddEdges( false )
 {
index f87cd346bc17e602274ef88f4f5e82f4f02049b3..e5ef065ccd75b3942a6701bbc032e1fb95c21621 100644 (file)
@@ -49,7 +49,7 @@ class STDMESHERS_EXPORT StdMeshers_CartesianParameters3D:  public SMESH_Hypothes
 {
 public:
   // Constructor
-  StdMeshers_CartesianParameters3D( int hypId, int studyId, SMESH_Gen * gen );
+  StdMeshers_CartesianParameters3D( int hypId, SMESH_Gen * gen );
 
   /*!
    * Sets coordinates of node positions along an axis (countered from 0)
index 62e590b62e4293f6ba6a621be5db9fb3a33b2b05..1a0b026ecc74d0cc7d402dd1d687fe1df9be56b3 100644 (file)
@@ -107,8 +107,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_Cartesian_3D::StdMeshers_Cartesian_3D(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_3D_Algo(hypId, studyId, gen)
+StdMeshers_Cartesian_3D::StdMeshers_Cartesian_3D(int hypId, SMESH_Gen * gen)
+  :SMESH_3D_Algo(hypId, gen)
 {
   _name = "Cartesian_3D";
   _shapeType = (1 << TopAbs_SOLID);       // 1 bit /shape type
index 2cc4855015a0bad836c02ca2f8cf002939358366..91e0587127116256c9ac7977d17432f1a2330bae 100644 (file)
@@ -41,7 +41,7 @@ class StdMeshers_CartesianParameters3D;
 class STDMESHERS_EXPORT StdMeshers_Cartesian_3D : public SMESH_3D_Algo
 {
 public:
-  StdMeshers_Cartesian_3D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Cartesian_3D(int hypId, SMESH_Gen* gen);
 
   virtual bool CheckHypothesis(SMESH_Mesh&         aMesh,
                                const TopoDS_Shape& aShape,
index ebdbd9ee47e0603cc27b89b7f55d12677945b6bd..7dff14e7e0097f688496c13288a7fd5ce4d7b3af 100644 (file)
@@ -267,8 +267,8 @@ private:
  */
 //================================================================================
 
-StdMeshers_CompositeHexa_3D::StdMeshers_CompositeHexa_3D(int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_3D_Algo(hypId, studyId, gen)
+StdMeshers_CompositeHexa_3D::StdMeshers_CompositeHexa_3D(int hypId, SMESH_Gen* gen)
+  :SMESH_3D_Algo(hypId, gen)
 {
   _name = "CompositeHexa_3D";
   _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);       // 1 bit /shape type
index 85cc6f2ec6c89f13064b897cff66f7fe5e0cb450..4987b2598df3b352f4d6a8d49f962928b03cb493 100644 (file)
@@ -42,7 +42,7 @@ struct _QuadFaceGrid;
 class STDMESHERS_EXPORT StdMeshers_CompositeHexa_3D: public SMESH_3D_Algo
 {
 public:
-  StdMeshers_CompositeHexa_3D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_CompositeHexa_3D(int hypId, SMESH_Gen* gen);
   //virtual ~StdMeshers_CompositeHexa_3D();
 
   virtual bool Compute(SMESH_Mesh&         aMesh,
index ee3858c26b53472351d82a11e8dde106ab5b870a..aa3f460a4ce0d4a4ada50855217f3f906b7e5fbc 100644 (file)
@@ -243,9 +243,8 @@ namespace {
 //=============================================================================
 
 StdMeshers_CompositeSegment_1D::StdMeshers_CompositeSegment_1D(int         hypId,
-                                                               int         studyId,
                                                                SMESH_Gen * gen)
-  :StdMeshers_Regular_1D(hypId, studyId, gen)
+  :StdMeshers_Regular_1D(hypId, gen)
 {
   _name = AlgoName();
 }
index 1a0129813037a17b80e60f8d22258d0f3061487a..7c2d2c046c8750bc2724f4c4084f65cf7b063dd7 100644 (file)
@@ -39,7 +39,7 @@ class TopoDS_Face;
 class STDMESHERS_EXPORT StdMeshers_CompositeSegment_1D: public StdMeshers_Regular_1D
 {
 public:
-  StdMeshers_CompositeSegment_1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_CompositeSegment_1D(int hypId, SMESH_Gen* gen);
 
   virtual bool Compute(SMESH_Mesh&         aMesh,
                        const TopoDS_Shape& aShape);
index fa0fcb264a1a47fa4c732cb67a9d9508e48f2edc..1e9227d9d3aa5c02f7ef35eaeb115e75e77c7aef 100644 (file)
@@ -50,9 +50,8 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Deflection1D::StdMeshers_Deflection1D(int         hypId,
-                                                 int         studyId,
                                                  SMESH_Gen * gen)
-     :SMESH_Hypothesis(hypId, studyId, gen)
+     :SMESH_Hypothesis(hypId, gen)
 {
   _value = 1.;
   _name = "Deflection1D";
index c1d2d741d7966689b96a3be4e3330ebc0420915b..466aa20cff43f24a4a90eb83ac1735a734a5ea68 100644 (file)
@@ -35,7 +35,7 @@
 class STDMESHERS_EXPORT StdMeshers_Deflection1D:public SMESH_Hypothesis
 {
  public:
-  StdMeshers_Deflection1D(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_Deflection1D(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_Deflection1D();
 
   void SetDeflection(double value) throw(SALOME_Exception);
index 254df4e1c2063d538d047ed2a4094d914ba0c542..b5934045b4fa19d3558f49faca6e0ac3453548dd 100644 (file)
@@ -35,9 +35,9 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_FixedPoints1D::StdMeshers_FixedPoints1D(int hypId, int studyId,
+StdMeshers_FixedPoints1D::StdMeshers_FixedPoints1D(int hypId,
                                                    SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen)
+  :SMESH_Hypothesis(hypId, gen)
 {
   _name = "FixedPoints1D";
   _param_algo_dim = 1;
index 342b5c9d5316d4486763c3b856eea534c6a62ff8..05f9030135a5c0abf7b5595a2351fb6e97844299 100644 (file)
@@ -38,7 +38,7 @@ class STDMESHERS_EXPORT StdMeshers_FixedPoints1D:
   public SMESH_Hypothesis
 {
 public:
-  StdMeshers_FixedPoints1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_FixedPoints1D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_FixedPoints1D();
 
   void SetPoints(std::vector<double>& listParams)
index 87514e2c9aea69233a7ce1d742aa6fb9e7930a2f..1d111112cb09d7a93e2e12068edcafcccc153922 100644 (file)
@@ -42,8 +42,8 @@
  */
 //=============================================================================
 
-StdMeshers_Geometric1D::StdMeshers_Geometric1D(int hypId, int studyId, SMESH_Gen * gen)
-  :StdMeshers_Reversible1D(hypId, studyId, gen)
+StdMeshers_Geometric1D::StdMeshers_Geometric1D(int hypId, SMESH_Gen * gen)
+  :StdMeshers_Reversible1D(hypId, gen)
 {
   _begLength = 1.;
   _ratio = 1.;
index 4efc66101a7379bcfc60822a952c00a2756594ff..9e11b259a8b8addeeab6d0369907b6172ad67dd4 100644 (file)
@@ -35,7 +35,7 @@
 class STDMESHERS_EXPORT StdMeshers_Geometric1D: public StdMeshers_Reversible1D
 {
 public:
-  StdMeshers_Geometric1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Geometric1D(int hypId, SMESH_Gen* gen);
 
   void SetStartLength(double length) throw(SALOME_Exception);
   void SetCommonRatio(double factor) throw(SALOME_Exception);
index a32b65891b4552a5a867931658beefe3b322a184..0cd90264c4dcd0a2d5592caa0ba1934693775a13 100644 (file)
@@ -1022,8 +1022,8 @@ namespace
 //purpose  : 
 //=======================================================================
 
-StdMeshers_HexaFromSkin_3D::StdMeshers_HexaFromSkin_3D(int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_3D_Algo(hypId, studyId, gen)
+StdMeshers_HexaFromSkin_3D::StdMeshers_HexaFromSkin_3D(int hypId, SMESH_Gen* gen)
+  :SMESH_3D_Algo(hypId, gen)
 {
   _name = "HexaFromSkin_3D";
 }
index d694319772d86165ccc29e939f6e148fd7be17f2..e530ffeb159703b37d3016fdf3215f9573a24484 100644 (file)
@@ -34,7 +34,7 @@
 class STDMESHERS_EXPORT StdMeshers_HexaFromSkin_3D : public SMESH_3D_Algo
 {
 public:
-  StdMeshers_HexaFromSkin_3D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_HexaFromSkin_3D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_HexaFromSkin_3D();
 
   virtual bool Compute(SMESH_Mesh & aMesh, SMESH_MesherHelper* aHelper);
index aa7b1c043afe64095f87a79f4e7b62d09b1b1815..72087519b3dcbe8cdeb0b37e21a9627166ef87c8 100644 (file)
@@ -70,8 +70,8 @@ static bool EvaluatePentahedralMesh(SMESH_Mesh &, const TopoDS_Shape &,
  */
 //=============================================================================
 
-StdMeshers_Hexa_3D::StdMeshers_Hexa_3D(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_3D_Algo(hypId, studyId, gen)
+StdMeshers_Hexa_3D::StdMeshers_Hexa_3D(int hypId, SMESH_Gen * gen)
+  :SMESH_3D_Algo(hypId, gen)
 {
   _name = "Hexa_3D";
   _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);       // 1 bit /shape type
@@ -367,7 +367,7 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh &         aMesh,
   TopExp::MapShapes( aShape, TopAbs_FACE, FF);
   if ( FF.Extent() != 6)
   {
-    static StdMeshers_CompositeHexa_3D compositeHexa(_gen->GetANewId(), 0, _gen);
+    static StdMeshers_CompositeHexa_3D compositeHexa(_gen->GetANewId(), _gen);
     if ( !compositeHexa.Compute( aMesh, aShape ))
       return error( compositeHexa.GetComputeError() );
     return true;
@@ -377,7 +377,7 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh &         aMesh,
   // ---------------------
   
   FaceQuadStructPtr quad[ 6 ];
-  StdMeshers_Quadrangle_2D quadAlgo( _gen->GetANewId(), GetStudyId(), _gen);
+  StdMeshers_Quadrangle_2D quadAlgo( _gen->GetANewId(), _gen);
   for ( int i = 0; i < 6; ++i )
   {
     if ( !( quad[i] = FaceQuadStructPtr( quadAlgo.CheckNbEdges( aMesh, FF( i+1 ),
@@ -699,7 +699,7 @@ bool StdMeshers_Hexa_3D::Evaluate(SMESH_Mesh & aMesh,
   }
   if (meshFaces.size() != 6) {
     //return error(COMPERR_BAD_SHAPE, TComm(meshFaces.size())<<" instead of 6 faces in a block");
-    static StdMeshers_CompositeHexa_3D compositeHexa(-10, 0, aMesh.GetGen());
+    static StdMeshers_CompositeHexa_3D compositeHexa(-10, aMesh.GetGen());
     return compositeHexa.Evaluate(aMesh, aShape, aResMap);
   }
   
@@ -809,7 +809,7 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh, SMESH_MesherHelper* aHelper
   static StdMeshers_HexaFromSkin_3D * algo = 0;
   if ( !algo ) {
     SMESH_Gen* gen = aMesh.GetGen();
-    algo = new StdMeshers_HexaFromSkin_3D( gen->GetANewId(), 0, gen );
+    algo = new StdMeshers_HexaFromSkin_3D( gen->GetANewId(), gen );
   }
   algo->InitComputeError();
   algo->Compute( aMesh, aHelper );
@@ -877,7 +877,7 @@ SMESH_ComputeErrorPtr ComputePentahedralMesh(SMESH_Mesh &          aMesh,
     static StdMeshers_Prism_3D * aPrism3D = 0;
     if ( !aPrism3D ) {
       SMESH_Gen* gen = aMesh.GetGen();
-      aPrism3D = new StdMeshers_Prism_3D( gen->GetANewId(), 0, gen );
+      aPrism3D = new StdMeshers_Prism_3D( gen->GetANewId(), gen );
     }
     SMESH_Hypothesis::Hypothesis_Status aStatus;
     if ( aPrism3D->CheckHypothesis( aMesh, aShape, aStatus ) ) {
@@ -908,7 +908,7 @@ bool EvaluatePentahedralMesh(SMESH_Mesh & aMesh,
     static StdMeshers_Prism_3D * aPrism3D = 0;
     if ( !aPrism3D ) {
       SMESH_Gen* gen = aMesh.GetGen();
-      aPrism3D = new StdMeshers_Prism_3D( gen->GetANewId(), 0, gen );
+      aPrism3D = new StdMeshers_Prism_3D( gen->GetANewId(), gen );
     }
     SMESH_Hypothesis::Hypothesis_Status aStatus;
     if ( aPrism3D->CheckHypothesis( aMesh, aShape, aStatus ) ) {
index 0548c3ff46c154219820ee40d5375aa9f0fb6d54..6c0b04dbdb4076218852df4c8a63cd339a85b006 100644 (file)
@@ -40,7 +40,7 @@ class SMESH_MesherHelper;
 class STDMESHERS_EXPORT StdMeshers_Hexa_3D : public SMESH_3D_Algo
 {
 public:
-  StdMeshers_Hexa_3D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Hexa_3D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Hexa_3D();
 
   virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
index bf5128733638d46de93b96d07121fe3eb92f7ff6..c3860b26b6e05da7ffb97bf414b6fa4b3f0a6ecb 100644 (file)
@@ -49,9 +49,8 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_ImportSource1D::StdMeshers_ImportSource1D(int         hypId,
-                                                     int         studyId,
                                                      SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen),
+  :SMESH_Hypothesis(hypId, gen),
    _toCopyMesh(false),
    _toCopyGroups(false)
 {
@@ -66,9 +65,8 @@ StdMeshers_ImportSource1D::StdMeshers_ImportSource1D(int         hypId,
 //=============================================================================
 
 StdMeshers_ImportSource2D::StdMeshers_ImportSource2D(int         hypId,
-                                                     int         studyId,
                                                      SMESH_Gen * gen)
-  :StdMeshers_ImportSource1D(hypId, studyId, gen)
+  :StdMeshers_ImportSource1D(hypId, gen)
 {
   _name = "ImportSource2D";
   _param_algo_dim = 2; // is used by StdMeshers_Import_2D;
@@ -206,7 +204,7 @@ const std::vector<SMESH_Group*>&  StdMeshers_ImportSource1D::GetGroups(bool load
 {
   // filter off deleted groups
   vector<SMESH_Group*> okGroups = getValidGroups( _groups,
-                                                  _gen->GetStudyContext(_studyId),
+                                                  _gen->GetStudyContext(),
                                                   loaded);
   if ( okGroups.size() != _groups.size() )
     ((StdMeshers_ImportSource1D*)this)->_groups = okGroups;
@@ -247,7 +245,7 @@ std::vector<SMESH_Mesh*> StdMeshers_ImportSource1D::GetSourceMeshes() const
   vector<SMESH_Mesh*> meshes;
   if ( !meshIDs.empty() )
   {
-    StudyContextStruct* studyContext = _gen->GetStudyContext(_studyId);
+    StudyContextStruct* studyContext = _gen->GetStudyContext();
     for ( set<int>::iterator id = meshIDs.begin(); id != meshIDs.end(); ++id )
     {
       map<int, SMESH_Mesh*>::iterator itm = studyContext->mapMesh.begin();
@@ -400,7 +398,7 @@ void StdMeshers_ImportSource1D::RestoreGroups(const std::vector<SMESH_Group*>& g
     int key1 = _resultGroupsStorage[i++];
     int key2 = _resultGroupsStorage[i++];
     pair<int, int> resMapKey( key1, key2 );
-    SMESH_Mesh* mesh = getTgtMeshByKey( resMapKey, _gen->GetStudyContext(_studyId));
+    SMESH_Mesh* mesh = getTgtMeshByKey( resMapKey, _gen->GetStudyContext());
     // restore mesh ids at least
     _resultGroups.insert( make_pair (resMapKey,vector<SMESH_Group*>() )); 
 
@@ -463,7 +461,7 @@ StdMeshers_ImportSource1D::GetResultGroups(const SMESHDS_Mesh& srcMesh,
   if ( key2groups == _resultGroups.end() )
     return 0;
   vector<SMESH_Group*> vec = getValidGroups((*key2groups).second,
-                                            _gen->GetStudyContext(_studyId) );
+                                            _gen->GetStudyContext() );
   if ( vec.size() != key2groups->second.size())
     key2groups->second = vec;
 
index 52329e514dd3b1d7f72e022300efc8c55ca89076..44077fd6fbc2565714d777dc78da91469ec49811 100644 (file)
@@ -48,7 +48,7 @@ class SMESH_subMesh;
 class STDMESHERS_EXPORT StdMeshers_ImportSource1D : public SMESH_Hypothesis
 {
  public:
-  StdMeshers_ImportSource1D(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_ImportSource1D(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_ImportSource1D();
 
   void SetGroups(const std::vector<SMESH_Group*>& groups);
@@ -95,6 +95,6 @@ private:
 class STDMESHERS_EXPORT StdMeshers_ImportSource2D : public StdMeshers_ImportSource1D
 {
  public:
-  StdMeshers_ImportSource2D(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_ImportSource2D(int hypId, SMESH_Gen * gen);
 };
 #endif
index aeb105383cecebebb26ccae74670cf2a2a632df8..20020982aeece4b3c8a32d4ce481ad864cd347a6 100644 (file)
@@ -60,8 +60,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_Import_1D::StdMeshers_Import_1D(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_1D_Algo(hypId, studyId, gen), _sourceHyp(0)
+StdMeshers_Import_1D::StdMeshers_Import_1D(int hypId, SMESH_Gen * gen)
+  :SMESH_1D_Algo(hypId, gen), _sourceHyp(0)
 {
   _name = "Import_1D";
   _shapeType = (1 << TopAbs_EDGE);
index ffee0fe4c4f336b492f543b62b74065c07169b45..5d9e5997ad9e076d2c61195b50f688e16f451ed0 100644 (file)
@@ -39,7 +39,7 @@ class StdMeshers_ImportSource1D;
 class STDMESHERS_EXPORT StdMeshers_Import_1D: public SMESH_1D_Algo
 {
 public:
-  StdMeshers_Import_1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Import_1D(int hypId, SMESH_Gen* gen);
 
   virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
                                const TopoDS_Shape& aShape,
index 949bd3a9073214bc786d6affa7d1840c79e433c3..ef13ad41877bb0ec7d704278cc71b4cbeaed40c1 100644 (file)
@@ -96,8 +96,8 @@ namespace
  */
 //=============================================================================
 
-StdMeshers_Import_1D2D::StdMeshers_Import_1D2D(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_2D_Algo(hypId, studyId, gen), _sourceHyp(0)
+StdMeshers_Import_1D2D::StdMeshers_Import_1D2D(int hypId, SMESH_Gen * gen)
+  :SMESH_2D_Algo(hypId, gen), _sourceHyp(0)
 {
   _name = "Import_1D2D";
   _shapeType = (1 << TopAbs_FACE);
index 15d1adf67011e1433f28ad53890d809f0b5c397f..5758d671ad1ae163f80b8aa56977c439d20bca19 100644 (file)
@@ -39,7 +39,7 @@ class StdMeshers_ImportSource1D;
 class STDMESHERS_EXPORT StdMeshers_Import_1D2D: public SMESH_2D_Algo
 {
 public:
-  StdMeshers_Import_1D2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Import_1D2D(int hypId, SMESH_Gen* gen);
 
   virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
                                const TopoDS_Shape& aShape,
index 05f0b2fd62e1503d9d1878e190155d364c8ba8c9..8a12ac3d2e3abaa5f9a37a4d6c64a13c8bb497bd 100644 (file)
@@ -40,9 +40,9 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_LayerDistribution::StdMeshers_LayerDistribution(int hypId, int studyId,
+StdMeshers_LayerDistribution::StdMeshers_LayerDistribution(int hypId,
                                                            SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _name = "LayerDistribution"; // used by RadialPrism_3D
   _param_algo_dim = 3; // 3D
index 8f7fb5e970a7aafc81b233d51ad056484026f4d7..7e3fe8384ed5a4c0a85363a497647c1aea98af1b 100644 (file)
@@ -51,7 +51,7 @@ class STDMESHERS_EXPORT StdMeshers_LayerDistribution:  public SMESH_Hypothesis
 {
 public:
   // Constructor
-  StdMeshers_LayerDistribution( int hypId, int studyId, SMESH_Gen * gen );
+  StdMeshers_LayerDistribution( int hypId, SMESH_Gen * gen );
   // Destructor
   virtual ~StdMeshers_LayerDistribution();
 
index 664995684537c90450d3f1f3976160a2d17567bf..75cdd43f962604a927c39420d951d37a814bfa1f 100644 (file)
@@ -36,9 +36,8 @@
 //=============================================================================
 
 StdMeshers_LayerDistribution2D::StdMeshers_LayerDistribution2D(int hypId,
-                                                               int studyId,
                                                                SMESH_Gen * gen)
-  : StdMeshers_LayerDistribution(hypId, studyId, gen)
+  : StdMeshers_LayerDistribution(hypId, gen)
 {
   _name = "LayerDistribution2D"; // used by RadialQuadrangle_1D2D
   _param_algo_dim = 2; // 2D
index 91510d103d488d6c4f9fba3d4e07165d509e1380..704b59f5e72dfa26ea5228eaf1ebc832c7fa707f 100644 (file)
@@ -43,7 +43,7 @@ class STDMESHERS_EXPORT StdMeshers_LayerDistribution2D
 {
 public:
   // Constructor
-  StdMeshers_LayerDistribution2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_LayerDistribution2D(int hypId, SMESH_Gen* gen);
   // Destructor
   virtual ~StdMeshers_LayerDistribution2D();
 
index ce35e21b918b80aac7f4281a39eb95029665514c..950dee5df6092a7309aec518bc25bbcc09918601 100644 (file)
@@ -38,8 +38,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_LengthFromEdges::StdMeshers_LengthFromEdges(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_LengthFromEdges::StdMeshers_LengthFromEdges(int hypId, SMESH_Gen* gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _mode =1;
   _name = "LengthFromEdges";
index 14494eec282e502282c80b9263af3bd166037299..01023caf068be2a5cf1419a550da8974009641a7 100644 (file)
@@ -38,7 +38,7 @@ class STDMESHERS_EXPORT StdMeshers_LengthFromEdges:
   public SMESH_Hypothesis
 {
 public:
-  StdMeshers_LengthFromEdges(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_LengthFromEdges(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_LengthFromEdges();
 
   void SetMode(int mode)
index e5c09bd04026f68b3926abfc71abf1c46f8a5b32..72b1543e6c74957ea47cd1e1a4eccbec6cf4d613 100644 (file)
@@ -52,8 +52,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_LocalLength::StdMeshers_LocalLength(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_LocalLength::StdMeshers_LocalLength(int hypId, SMESH_Gen * gen)
+  :SMESH_Hypothesis(hypId, gen)
 {
   _length = 1.;
   _precision = Precision::Confusion();
index 76815141bd8bae5ec997561954e0adaca9d8db5b..5ac6e8e3ffbbbc58503e9f9b8aaf5d05d5429c09 100644 (file)
@@ -37,7 +37,7 @@
 class STDMESHERS_EXPORT StdMeshers_LocalLength: public SMESH_Hypothesis
 {
  public:
-  StdMeshers_LocalLength(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_LocalLength(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_LocalLength();
 
   void SetLength(double length) throw(SALOME_Exception);
index 196dbe7daf0fe38a41e2c5fcb0ae0619158e8163..bbc594b163c9e2a3de4670ff8c6e8aabd4783a9d 100644 (file)
@@ -79,8 +79,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, int studyId, SMESH_Gen * gen):
-  SMESH_2D_Algo(hypId, studyId, gen)
+StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, SMESH_Gen * gen):
+  SMESH_2D_Algo(hypId, gen)
 {
   _name = "MEFISTO_2D";
   _shapeType = (1 << TopAbs_FACE);
index ba272fd3148d064233cf2afee882e6abed8ee778..ee89f144049eeab9d4e5bea9aa780a8de6fa3c9d 100644 (file)
@@ -47,7 +47,7 @@ class StdMeshers_FaceSide;
 class STDMESHERS_EXPORT StdMeshers_MEFISTO_2D: public SMESH_2D_Algo
 {
 public:
-  StdMeshers_MEFISTO_2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_MEFISTO_2D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_MEFISTO_2D();
 
   virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
index 5e423c4b5f5ee463b9b6fbbc69af074b9b9a1dcb..fb51d05ba5c1079edacc01b3720f425122bc1dfa 100644 (file)
@@ -48,8 +48,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_MaxElementArea::StdMeshers_MaxElementArea(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_MaxElementArea::StdMeshers_MaxElementArea(int hypId, SMESH_Gen* gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _maxArea =1.;
   _name = "MaxElementArea";
index 66139b17ce5c421a3561e90d94f6870c91a4f397..edc8142214a7d22af816cf2c2ff6bada0427ab4d 100644 (file)
@@ -37,7 +37,7 @@
 class STDMESHERS_EXPORT StdMeshers_MaxElementArea:public SMESH_Hypothesis
 {
 public:
-  StdMeshers_MaxElementArea(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_MaxElementArea(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_MaxElementArea();
 
   void SetMaxArea(double maxArea) throw(SALOME_Exception);
index 2ded219bbdcca3c44b874eaa1d51b46248699a9d..e8096a51d32f157f9d38d84389e19e56788efcbe 100644 (file)
@@ -48,8 +48,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_MaxElementVolume::StdMeshers_MaxElementVolume(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_MaxElementVolume::StdMeshers_MaxElementVolume(int hypId, SMESH_Gen* gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _maxVolume = 1.;
   _name = "MaxElementVolume";
index 291385f4d23e8ec19c27f701c6903da7a5106437..f790000fd8314a167024a1b56058113048a9cbe7 100644 (file)
@@ -38,7 +38,7 @@ class STDMESHERS_EXPORT StdMeshers_MaxElementVolume:
   public SMESH_Hypothesis
 {
 public:
-  StdMeshers_MaxElementVolume(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_MaxElementVolume(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_MaxElementVolume();
 
   void SetMaxVolume(double maxVolume)
index b8ca75232a2b732f12a47ceb4b43bb3cf4f734c0..1051fce5a1ed6c43e8cc8c52b672b76155b3cf9f 100644 (file)
@@ -47,8 +47,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_MaxLength::StdMeshers_MaxLength(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_MaxLength::StdMeshers_MaxLength(int hypId, SMESH_Gen * gen)
+  :SMESH_Hypothesis(hypId, gen)
 {
   _length = 1.;
   _preestimated = 0.;
index f9a6ab2ad55b2e451b6751b0d96d37d9cf273e54..ef31f125158262e99845afc3c0fd838e0d033709 100644 (file)
@@ -32,7 +32,7 @@
 class STDMESHERS_EXPORT StdMeshers_MaxLength: public SMESH_Hypothesis
 {
  public:
-  StdMeshers_MaxLength(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_MaxLength(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_MaxLength();
 
   void SetLength(double length) throw(SALOME_Exception);
index 301fd8ba3a41d8e7d2712286d686e633862a3332..c5bb45d6ad69f8ce1735117832517b78ae207361 100644 (file)
@@ -36,8 +36,8 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_NotConformAllowed::StdMeshers_NotConformAllowed(int hypId, int studyId, SMESH_Gen* gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_NotConformAllowed::StdMeshers_NotConformAllowed(int hypId, SMESH_Gen* gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _name = "NotConformAllowed";
   _param_algo_dim = -1; 
index 012eccfbada05c66b3e41d81f9af420c29bd3cc0..40b8db83d9b4401385c514873eb09e612ae255be 100644 (file)
@@ -37,7 +37,7 @@ class STDMESHERS_EXPORT StdMeshers_NotConformAllowed:
   public SMESH_Hypothesis
 {
 public:
-  StdMeshers_NotConformAllowed(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_NotConformAllowed(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_NotConformAllowed();
 
   virtual std::ostream & SaveTo(std::ostream & save);
index 55967940c81e29139fa115333ee4ff1c14c0a74b..e560a6ee63fb97b872e9bc7c19c8e39627b07db8 100644 (file)
@@ -42,9 +42,9 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_NumberOfLayers::StdMeshers_NumberOfLayers(int hypId, int studyId,
+StdMeshers_NumberOfLayers::StdMeshers_NumberOfLayers(int hypId,
                                                      SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _name = "NumberOfLayers"; // used by RadialPrism_3D
   _param_algo_dim = 3; // 3D
index b8dc0c0d7ca14beac4ddb14781debae58395ea10..b4f7ff2de6e27602ed066a5a218af565c9d7c4ab 100644 (file)
@@ -49,7 +49,7 @@ class STDMESHERS_EXPORT StdMeshers_NumberOfLayers:  public SMESH_Hypothesis
 {
 public:
   // Constructor
-  StdMeshers_NumberOfLayers( int hypId, int studyId, SMESH_Gen * gen );
+  StdMeshers_NumberOfLayers( int hypId, SMESH_Gen * gen );
   // Destructor
   virtual ~StdMeshers_NumberOfLayers();
 
index 74d6b0c9ac112bb052b4cbb478ebda35036e239f..fef954c5a6f4dd07f51334ca5948e0fb8f2d0871 100644 (file)
@@ -36,9 +36,8 @@
 //=============================================================================
 
 StdMeshers_NumberOfLayers2D::StdMeshers_NumberOfLayers2D(int hypId,
-                                                         int studyId,
                                                          SMESH_Gen * gen)
-  : StdMeshers_NumberOfLayers(hypId, studyId, gen)
+  : StdMeshers_NumberOfLayers(hypId, gen)
 {
   _name = "NumberOfLayers2D"; // used by RadialQuadrangle_1D2D
   _param_algo_dim = 2; // 2D
index 4514debc561bcd8585232f0db389aa7612db7c3d..d2df75fe9805d91c7949f67767103ca609dfa096 100644 (file)
@@ -43,7 +43,7 @@ class STDMESHERS_EXPORT StdMeshers_NumberOfLayers2D
 {
 public:
   // Constructor
-  StdMeshers_NumberOfLayers2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_NumberOfLayers2D(int hypId, SMESH_Gen* gen);
   // Destructor
   virtual ~StdMeshers_NumberOfLayers2D();
 };
index fc8da4162a1618b2844191f981091f90394ce84c..b6785f2edbce312b241ecdd9536b7fa48b26705c 100644 (file)
@@ -59,9 +59,8 @@ const double PRECISION = 1e-7;
 //=============================================================================
 
 StdMeshers_NumberOfSegments::StdMeshers_NumberOfSegments(int         hypId,
-                                                         int         studyId,
                                                          SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen),
+  : SMESH_Hypothesis(hypId, gen),
     _numberOfSegments(15),//issue 19923
     _distrType(DT_Regular),
     _scaleFactor(1.),
index a85308bbfae94d1708e586547b46992cfd458263..6e9e59e3eaefc37347ee35baec1a18a9a6529ff0 100644 (file)
@@ -45,7 +45,7 @@ class STDMESHERS_EXPORT StdMeshers_NumberOfSegments:
   public SMESH_Hypothesis
 {
 public:
-  StdMeshers_NumberOfSegments(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_NumberOfSegments(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_NumberOfSegments();
 
   // Builds point distribution according to passed function
index 78c4d62e5728cb26ab06988240050b5b413cd1f3..37054e80ec3c706467dc9918b7a1d221676ce03e 100644 (file)
@@ -49,9 +49,8 @@ using namespace std;
 //=======================================================================
 
 StdMeshers_PolygonPerFace_2D::StdMeshers_PolygonPerFace_2D(int        hypId,
-                                                           int        studyId,
                                                            SMESH_Gen* gen)
-  :SMESH_2D_Algo(hypId, studyId, gen)
+  :SMESH_2D_Algo(hypId, gen)
 {
   _name = "PolygonPerFace_2D";
 }
index 57a7afc8b49c7a4bfb8db8a9b3527b2bc23465ea..a3ff18e1876375aeeffa6d7e5560155638036254 100644 (file)
@@ -32,7 +32,7 @@
 class STDMESHERS_EXPORT StdMeshers_PolygonPerFace_2D: public SMESH_2D_Algo
 {
  public:
-  StdMeshers_PolygonPerFace_2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_PolygonPerFace_2D(int hypId, SMESH_Gen* gen);
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
                                const TopoDS_Shape&                  aShape,
index 9dde41365e3a12a664c5409d757d41c01b39da36..68535a2192dcf80b7858c11bfca16228962c354b 100644 (file)
@@ -96,15 +96,14 @@ namespace {
    */
   struct TQuadrangleAlgo : public StdMeshers_Quadrangle_2D
   {
-    TQuadrangleAlgo(int studyId, SMESH_Gen* gen)
-      : StdMeshers_Quadrangle_2D( gen->GetANewId(), studyId, gen)
+    TQuadrangleAlgo(SMESH_Gen* gen)
+      : StdMeshers_Quadrangle_2D( gen->GetANewId(), gen)
     {
     }
     static StdMeshers_Quadrangle_2D* instance( SMESH_Algo*         fatherAlgo,
                                                SMESH_MesherHelper* helper=0)
     {
-      static TQuadrangleAlgo* algo = new TQuadrangleAlgo( fatherAlgo->GetStudyId(),
-                                                          fatherAlgo->GetGen() );
+      static TQuadrangleAlgo* algo = new TQuadrangleAlgo( fatherAlgo->GetGen() );
       if ( helper &&
            algo->myProxyMesh &&
            algo->myProxyMesh->GetMesh() != helper->GetMesh() )
@@ -127,16 +126,15 @@ namespace {
   {
     StdMeshers_ProjectionSource1D myHyp;
 
-    TProjction1dAlgo(int studyId, SMESH_Gen* gen)
-      : StdMeshers_Projection_1D( gen->GetANewId(), studyId, gen),
-        myHyp( gen->GetANewId(), studyId, gen)
+    TProjction1dAlgo(SMESH_Gen* gen)
+      : StdMeshers_Projection_1D( gen->GetANewId(), gen),
+        myHyp( gen->GetANewId(), gen)
     {
       StdMeshers_Projection_1D::_sourceHypo = & myHyp;
     }
     static TProjction1dAlgo* instance( SMESH_Algo* fatherAlgo )
     {
-      static TProjction1dAlgo* algo = new TProjction1dAlgo( fatherAlgo->GetStudyId(),
-                                                            fatherAlgo->GetGen() );
+      static TProjction1dAlgo* algo = new TProjction1dAlgo( fatherAlgo->GetGen() );
       return algo;
     }
   };
@@ -148,16 +146,15 @@ namespace {
   {
     StdMeshers_ProjectionSource2D myHyp;
 
-    TProjction2dAlgo(int studyId, SMESH_Gen* gen)
-      : StdMeshers_Projection_1D2D( gen->GetANewId(), studyId, gen),
-        myHyp( gen->GetANewId(), studyId, gen)
+    TProjction2dAlgo(SMESH_Gen* gen)
+      : StdMeshers_Projection_1D2D( gen->GetANewId(), gen),
+        myHyp( gen->GetANewId(), gen)
     {
       StdMeshers_Projection_2D::_sourceHypo = & myHyp;
     }
     static TProjction2dAlgo* instance( SMESH_Algo* fatherAlgo )
     {
-      static TProjction2dAlgo* algo = new TProjction2dAlgo( fatherAlgo->GetStudyId(),
-                                                            fatherAlgo->GetGen() );
+      static TProjction2dAlgo* algo = new TProjction2dAlgo( fatherAlgo->GetGen() );
       return algo;
     }
     const NSProjUtils::TNodeNodeMap& GetNodesMap()
@@ -568,8 +565,8 @@ namespace {
 //purpose  : 
 //=======================================================================
 
-StdMeshers_Prism_3D::StdMeshers_Prism_3D(int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_3D_Algo(hypId, studyId, gen)
+StdMeshers_Prism_3D::StdMeshers_Prism_3D(int hypId, SMESH_Gen* gen)
+  :SMESH_3D_Algo(hypId, gen)
 {
   _name                    = "Prism_3D";
   _shapeType               = (1 << TopAbs_SOLID); // 1 bit per shape type
index 129a6e3e3d202d06c360084352d1a65baebc5544..b216d2029a50b9c6d139f40c05e966e8013947e8 100644 (file)
@@ -479,7 +479,7 @@ private:
 class STDMESHERS_EXPORT StdMeshers_Prism_3D: public SMESH_3D_Algo
 {
 public:
-  StdMeshers_Prism_3D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Prism_3D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Prism_3D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
index c3dd4ec00d02ac9616b8711a1653f7559e3dde6c..7dd9a452fb5a1630c1da8e8abfa0b665781b0ee2 100644 (file)
@@ -44,9 +44,9 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_ProjectionSource1D::StdMeshers_ProjectionSource1D(int hypId, int studyId,
+StdMeshers_ProjectionSource1D::StdMeshers_ProjectionSource1D(int hypId,
                                                              SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _name = "ProjectionSource1D"; // used by Projection_1D
   _param_algo_dim = 1; // 1D
index 122e7fa31bb716d5923930bfb826aad4b25c324c..d58535e2d60f5eb89fa76f1e5c838882547eb753 100644 (file)
@@ -49,7 +49,7 @@ class STDMESHERS_EXPORT StdMeshers_ProjectionSource1D: public SMESH_Hypothesis
 {
 public:
   // Constructor
-  StdMeshers_ProjectionSource1D( int hypId, int studyId, SMESH_Gen * gen );
+  StdMeshers_ProjectionSource1D( int hypId, SMESH_Gen * gen );
   // Destructor
   virtual ~StdMeshers_ProjectionSource1D();
 
index 0a0f3a81a4793523957d2bc3a14af4f3c2fb540f..ded88d4b74f4d92d3fbcd9dd2835a9670a2690a5 100644 (file)
@@ -45,9 +45,9 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_ProjectionSource2D::StdMeshers_ProjectionSource2D(int hypId, int studyId,
+StdMeshers_ProjectionSource2D::StdMeshers_ProjectionSource2D(int hypId,
                                                              SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _name = "ProjectionSource2D"; // used by Projection_2D
   _param_algo_dim = 2; // 2D
index b98847ae6bc4c75c5a924e1ca4c7d355162003fe..49e49747d43a64eed4e6d898ac9fef077a7f8dd9 100644 (file)
@@ -49,7 +49,7 @@ class STDMESHERS_EXPORT StdMeshers_ProjectionSource2D: public SMESH_Hypothesis
 {
 public:
   // Constructor
-  StdMeshers_ProjectionSource2D( int hypId, int studyId, SMESH_Gen * gen );
+  StdMeshers_ProjectionSource2D( int hypId, SMESH_Gen * gen );
   // Destructor
   virtual ~StdMeshers_ProjectionSource2D();
 
index 868553480bec4a8d907483909607c0c1a8e00b05..bffe39ae3c0398fa13615d0bd7b072ddb68491b6 100644 (file)
@@ -43,9 +43,9 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_ProjectionSource3D::StdMeshers_ProjectionSource3D(int hypId, int studyId,
+StdMeshers_ProjectionSource3D::StdMeshers_ProjectionSource3D(int hypId,
                                                              SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _name = "ProjectionSource3D"; // used by Projection_3D
   _param_algo_dim = 3; // 3D
index 54c5395ced97cf3c0192117dda9abb9f18db1120..d4d867e3b06b650ea2cc98893a5a7572db74ae70 100644 (file)
@@ -49,7 +49,7 @@ class STDMESHERS_EXPORT StdMeshers_ProjectionSource3D:  public SMESH_Hypothesis
 {
 public:
   // Constructor
-  StdMeshers_ProjectionSource3D( int hypId, int studyId, SMESH_Gen * gen );
+  StdMeshers_ProjectionSource3D( int hypId, SMESH_Gen * gen );
   // Destructor
   virtual ~StdMeshers_ProjectionSource3D();
 
index cf41af1960ad16421791d1a45aa3f275c18eec03..991541f36b056fa466e1755340a96ca9c0ce87af 100644 (file)
@@ -65,8 +65,8 @@ namespace TAssocTool = StdMeshers_ProjectionUtils;
 //purpose  : 
 //=======================================================================
 
-StdMeshers_Projection_1D::StdMeshers_Projection_1D(int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_1D_Algo(hypId, studyId, gen)
+StdMeshers_Projection_1D::StdMeshers_Projection_1D(int hypId, SMESH_Gen* gen)
+  :SMESH_1D_Algo(hypId, gen)
 {
   _name = "Projection_1D";
   _shapeType = (1 << TopAbs_EDGE);      // 1 bit per shape type
index 2fbd2742045df5fa91700b01b8aa4628cdea3458..aa0cfe10ce62c44e1bf19ab32b414af0cdd9e045 100644 (file)
@@ -38,7 +38,7 @@ class StdMeshers_ProjectionSource1D;
 class STDMESHERS_EXPORT StdMeshers_Projection_1D: public SMESH_1D_Algo
 {
 public:
-  StdMeshers_Projection_1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Projection_1D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Projection_1D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
index c0e53ceebc99d2c577aa1c7872bc7e8b4a7959be..607efdfa64ce7894535018ebb4e31feb132f7ff7 100644 (file)
@@ -93,8 +93,8 @@ namespace
 //purpose  : 
 //=======================================================================
 
-StdMeshers_Projection_1D2D::StdMeshers_Projection_1D2D(int hypId, int studyId, SMESH_Gen* gen)
-  :StdMeshers_Projection_2D(hypId, studyId, gen)
+StdMeshers_Projection_1D2D::StdMeshers_Projection_1D2D(int hypId, SMESH_Gen* gen)
+  :StdMeshers_Projection_2D(hypId, gen)
 {
   _name = "Projection_1D2D";
   _requireDiscreteBoundary = false;
index 58e2ce8cc49d71cc38106527d75aca9f9046c34b..7f72cc8603efb95a0785d312b0fe0953ef008c62 100644 (file)
@@ -31,7 +31,7 @@
 class STDMESHERS_EXPORT StdMeshers_Projection_1D2D: public StdMeshers_Projection_2D
 {
 public:
-  StdMeshers_Projection_1D2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Projection_1D2D(int hypId, SMESH_Gen* gen);
 
   virtual bool Compute(SMESH_Mesh& aMesh, const TopoDS_Shape& aShape);
 
index 0686b165a77c6301498028dd42455674b24afa52..a41c5ac6d2f77d9d3ba3ecac675b1d91beef9bab 100644 (file)
@@ -85,8 +85,8 @@ namespace TAssocTool = StdMeshers_ProjectionUtils;
 //purpose  : 
 //=======================================================================
 
-StdMeshers_Projection_2D::StdMeshers_Projection_2D(int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_2D_Algo(hypId, studyId, gen)
+StdMeshers_Projection_2D::StdMeshers_Projection_2D(int hypId, SMESH_Gen* gen)
+  :SMESH_2D_Algo(hypId, gen)
 {
   _name = "Projection_2D";
   _compatibleHypothesis.push_back("ProjectionSource2D");
index 0fbe35cc0cf7295d3430292e6b9fb42ab6d327d7..44ce8719c1e97d66aa3c51496d8382657841c8e1 100644 (file)
@@ -37,7 +37,7 @@ class StdMeshers_ProjectionSource2D;
 class STDMESHERS_EXPORT StdMeshers_Projection_2D: public SMESH_2D_Algo
 {
 public:
-  StdMeshers_Projection_2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Projection_2D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Projection_2D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
index 43a6c4c093ac3d5c7e201dda3f2633dcdde651a9..ea0fbfccd3ae9282e4a01fda25037304c80e3eb7 100644 (file)
@@ -65,8 +65,8 @@ using namespace std;
 //purpose  : 
 //=======================================================================
 
-StdMeshers_Projection_3D::StdMeshers_Projection_3D(int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_3D_Algo(hypId, studyId, gen)
+StdMeshers_Projection_3D::StdMeshers_Projection_3D(int hypId, SMESH_Gen* gen)
+  :SMESH_3D_Algo(hypId, gen)
 {
   _name = "Projection_3D";
   _shapeType = (1 << TopAbs_SHELL) | (1 << TopAbs_SOLID);  // 1 bit per shape type
index 78db64c6b11567d8d5aa0bab9e27c4ab1210d725..e61552ec6e8e6320a7b7787c4912383e8b03bf16 100644 (file)
@@ -36,7 +36,7 @@ class StdMeshers_ProjectionSource3D;
 class STDMESHERS_EXPORT StdMeshers_Projection_3D: public SMESH_3D_Algo
 {
 public:
-  StdMeshers_Projection_3D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Projection_3D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Projection_3D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
index 750d1abd2fe1caa3f5a9fb788b6e395448e4e204..f0e53c203e991efbff95a4fcfc905ecaf2d43d36 100644 (file)
@@ -85,16 +85,15 @@ namespace {
  */
 //=============================================================================
 
-StdMeshers_Propagation::StdMeshers_Propagation (int hypId, int studyId, SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_Propagation::StdMeshers_Propagation (int hypId, SMESH_Gen * gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _name = GetName();
   _param_algo_dim = -1; // 1D auxiliary
 }
 StdMeshers_PropagOfDistribution::StdMeshers_PropagOfDistribution (int hypId,
-                                                                  int studyId,
                                                                   SMESH_Gen * gen)
-  : StdMeshers_Propagation(hypId, studyId, gen)                        { _name = GetName(); }
+  : StdMeshers_Propagation(hypId, gen)                                 { _name = GetName(); }
 StdMeshers_Propagation::~StdMeshers_Propagation()                      {}
 string StdMeshers_Propagation::GetName ()                              { return "Propagation"; }
 string StdMeshers_PropagOfDistribution::GetName ()                     { return "PropagOfDistribution"; }
index 17b09eefce3e4bf9732ab735821a485c5420c4df..bc68acc9df3c7afbbce1611b6694bf8027158da3 100644 (file)
@@ -46,7 +46,7 @@ class SMESH_HypoFilter;
 class STDMESHERS_EXPORT StdMeshers_Propagation : public SMESH_Hypothesis
 {
  public:
-  StdMeshers_Propagation(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_Propagation(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_Propagation();
 
   virtual std::ostream & SaveTo(std::ostream & save);
@@ -105,7 +105,7 @@ class STDMESHERS_EXPORT StdMeshers_Propagation : public SMESH_Hypothesis
 class STDMESHERS_EXPORT StdMeshers_PropagOfDistribution: public StdMeshers_Propagation
 {
  public:
-  StdMeshers_PropagOfDistribution(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_PropagOfDistribution(int hypId, SMESH_Gen * gen);
 
   static std::string GetName();
 };
index 094784908ecec53c054022ea8ff4d7dd3db383ef..2043f1ea7df1e96c198611b04af88afa1392d201 100644 (file)
@@ -71,8 +71,8 @@ using namespace std;
 class StdMeshers_QuadFromMedialAxis_1D2D::Algo1D : public StdMeshers_Regular_1D
 {
 public:
-  Algo1D(int studyId, SMESH_Gen* gen):
-    StdMeshers_Regular_1D( gen->GetANewId(), studyId, gen )
+  Algo1D(SMESH_Gen* gen):
+    StdMeshers_Regular_1D( gen->GetANewId(), gen )
   {
   }
   void SetSegmentLength( double len )
@@ -152,9 +152,8 @@ public:
 //================================================================================
 
 StdMeshers_QuadFromMedialAxis_1D2D::StdMeshers_QuadFromMedialAxis_1D2D(int        hypId,
-                                                                       int        studyId,
                                                                        SMESH_Gen* gen)
-  : StdMeshers_Quadrangle_2D(hypId, studyId, gen),
+  : StdMeshers_Quadrangle_2D(hypId, gen),
     _regular1D( 0 )
 {
   _name = "QuadFromMedialAxis_1D2D";
@@ -741,7 +740,7 @@ namespace
     }
 
     // cout << "from salome.geom import geomBuilder" << endl;
-    // cout << "geompy = geomBuilder.New(salome.myStudy)" << endl;
+    // cout << "geompy = geomBuilder.New()" << endl;
     Handle(TColgp_HArray1OfPnt) points = new TColgp_HArray1OfPnt(1, pnt.size());
     for ( size_t i = 0; i < pnt.size(); ++i )
     {
@@ -2166,7 +2165,7 @@ bool StdMeshers_QuadFromMedialAxis_1D2D::Compute(SMESH_Mesh&         theMesh,
     SMESH_MAT2d::MedialAxis ma( F, sinuFace._sinuEdges, minSegLen, /*ignoreCorners=*/true );
 
     if ( !_regular1D )
-      _regular1D = new Algo1D( _studyId, _gen );
+      _regular1D = new Algo1D( _gen );
     _regular1D->SetSegmentLength( minSegLen );
 
     vector<double> maParams;
index 43a62debad005690b0203d9ceb2f18da15245d07..0940f15f06dbb748b7c0c4edcb412f728176a450 100644 (file)
@@ -37,7 +37,7 @@
 class STDMESHERS_EXPORT StdMeshers_QuadFromMedialAxis_1D2D: public StdMeshers_Quadrangle_2D
 {
  public:
-  StdMeshers_QuadFromMedialAxis_1D2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_QuadFromMedialAxis_1D2D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_QuadFromMedialAxis_1D2D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&         aMesh,
index e45b4cf687f494d50191386feca5db2e70dcc9cb..dc3e692e1ad7edc5c42cdc801a4a652e42f239f6 100644 (file)
@@ -42,9 +42,9 @@ using namespace std;
  *
  */
 //=============================================================================
-StdMeshers_QuadrangleParams::StdMeshers_QuadrangleParams(int hypId, int studyId,
+StdMeshers_QuadrangleParams::StdMeshers_QuadrangleParams(int hypId,
                                                          SMESH_Gen * gen)
-  : SMESH_Hypothesis(hypId, studyId, gen)
+  : SMESH_Hypothesis(hypId, gen)
 {
   _name = "QuadrangleParams";
   _param_algo_dim = 2;
index 051ec58a23dca00f17441c1da24fdc4015872699..64247e0b63e89918ccd2fcb15282a7a8f3cda87c 100644 (file)
@@ -44,7 +44,7 @@ enum StdMeshers_QuadType
 class STDMESHERS_EXPORT StdMeshers_QuadrangleParams: public SMESH_Hypothesis
 {
 public:
-  StdMeshers_QuadrangleParams(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_QuadrangleParams(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_QuadrangleParams();
 
   void SetTriaVertex (int id);
index 8b6ccfa3c85dddd5aebb768598841815a60a7043..5c81cfaef1acca42affb9c93eb88b4ec306c89ac 100644 (file)
@@ -36,9 +36,8 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_QuadranglePreference::StdMeshers_QuadranglePreference(int         hypId,
-                                                                 int         studyId,
                                                                  SMESH_Gen * gen)
-     :SMESH_Hypothesis(hypId, studyId, gen)
+     :SMESH_Hypothesis(hypId, gen)
 {
   _name = "QuadranglePreference";
   _param_algo_dim = -2; // auxiliary used by NETGEN 2D
index 9bc482e1aa0dd3dd6225eaddddeb307f7b793081..090f75bd68046bd38c3a5260445c3e8d777f1515 100644 (file)
@@ -41,7 +41,7 @@
 class STDMESHERS_EXPORT StdMeshers_QuadranglePreference:public SMESH_Hypothesis
 {
  public:
-  StdMeshers_QuadranglePreference(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_QuadranglePreference(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_QuadranglePreference();
   
   virtual std::ostream & SaveTo(std::ostream & save);
index 679769a8f8e0b7c5296de4fdec4a9911df41c665..b8a2ee5a81a172497b45ce48c15aac96f156bc3f 100644 (file)
@@ -79,9 +79,9 @@ using namespace std;
  */
 //=============================================================================
 
-StdMeshers_Quadrangle_2D::StdMeshers_Quadrangle_2D (int hypId, int studyId,
+StdMeshers_Quadrangle_2D::StdMeshers_Quadrangle_2D (int hypId,
                                                     SMESH_Gen* gen)
-  : SMESH_2D_Algo(hypId, studyId, gen),
+  : SMESH_2D_Algo(hypId, gen),
     myQuadranglePreference(false),
     myTrianglePreference(false),
     myTriaVertexID(-1),
index b35a1425f6097be692912627de0e30f6a95c1da0..7c121fb1fd9f7c363b583be9296a450fb7082c47 100644 (file)
@@ -135,7 +135,7 @@ struct FaceQuadStruct
 class STDMESHERS_EXPORT StdMeshers_Quadrangle_2D: public SMESH_2D_Algo
 {
  public:
-  StdMeshers_Quadrangle_2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Quadrangle_2D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Quadrangle_2D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&         aMesh,
index 81270bfab6efaf5ae36e2d566762f6b62c87f2a6..2c9839b7e90720630648cef333049bb5a54fdee9 100644 (file)
@@ -36,9 +36,8 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_QuadraticMesh::StdMeshers_QuadraticMesh(int         hypId,
-                                                   int         studyId,
                                                    SMESH_Gen * gen)
-     :SMESH_Hypothesis(hypId, studyId, gen)
+     :SMESH_Hypothesis(hypId, gen)
 {
   _name = "QuadraticMesh";
   _param_algo_dim = -1; // it means auxiliary, dim = 1
index 6fd428754655cf2cd42acdac780dd7dfed8d1c82..1f9f3927eb50aa789dd61ef90aa0e2aa9ff55ea1 100644 (file)
@@ -43,7 +43,7 @@
 class STDMESHERS_EXPORT StdMeshers_QuadraticMesh:public SMESH_Hypothesis
 {
  public:
-  StdMeshers_QuadraticMesh(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_QuadraticMesh(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_QuadraticMesh();
   
   virtual std::ostream & SaveTo(std::ostream & save);
index c5af23f3dd008138ee4142ac9b5854dd045bbc53..3ed74b3dabd57da54fb5c0e294e8a9bd8a9e51a9 100644 (file)
@@ -69,8 +69,8 @@ namespace ProjectionUtils = StdMeshers_ProjectionUtils;
 //purpose  : 
 //=======================================================================
 
-StdMeshers_RadialPrism_3D::StdMeshers_RadialPrism_3D(int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_3D_Algo(hypId, studyId, gen)
+StdMeshers_RadialPrism_3D::StdMeshers_RadialPrism_3D(int hypId, SMESH_Gen* gen)
+  :SMESH_3D_Algo(hypId, gen)
 {
   _name = "RadialPrism_3D";
   _shapeType = (1 << TopAbs_SOLID);     // 1 bit per shape type
@@ -336,7 +336,7 @@ public:
     const int myID = -1000;
     TNodeDistributor* myHyp = dynamic_cast<TNodeDistributor*>( aMesh.GetHypothesis( myID ));
     if ( !myHyp )
-      myHyp = new TNodeDistributor( myID, 0, aMesh.GetGen() );
+      myHyp = new TNodeDistributor( myID, aMesh.GetGen() );
     return myHyp;
   }
   // -----------------------------------------------------------------------------
@@ -374,8 +374,8 @@ public:
   }
 protected:
   // -----------------------------------------------------------------------------
-  TNodeDistributor( int hypId, int studyId, SMESH_Gen* gen)
-    : StdMeshers_Regular_1D( hypId, studyId, gen)
+  TNodeDistributor( int hypId, SMESH_Gen* gen)
+    : StdMeshers_Regular_1D( hypId, gen)
   {
   }
   // -----------------------------------------------------------------------------
index 71d4d2238bb7cf3ac41f6f60853b38bdc75324d6..e8300084b1b35373b6d1f97e0db19a30e19958c9 100644 (file)
@@ -43,7 +43,7 @@ class gp_Pnt;
 class STDMESHERS_EXPORT StdMeshers_RadialPrism_3D: public SMESH_3D_Algo
 {
 public:
-  StdMeshers_RadialPrism_3D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_RadialPrism_3D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_RadialPrism_3D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
index ca07b07a93b30c8922f80bec451d115b15dc305c..56e73fc770a85e139cb9a5c8e914f5447e696657 100644 (file)
@@ -74,9 +74,8 @@ using namespace std;
 //=======================================================================
 
 StdMeshers_RadialQuadrangle_1D2D::StdMeshers_RadialQuadrangle_1D2D(int        hypId,
-                                                                   int        studyId,
                                                                    SMESH_Gen* gen)
-  :StdMeshers_Quadrangle_2D( hypId, studyId, gen )
+  :StdMeshers_Quadrangle_2D( hypId, gen )
 {
   _name = "RadialQuadrangle_1D2D";
   _shapeType = (1 << TopAbs_FACE);        // 1 bit per shape type
@@ -631,7 +630,7 @@ public:
     const int myID = -1001;
     TNodeDistributor* myHyp = dynamic_cast<TNodeDistributor*>( aMesh.GetHypothesis( myID ));
     if ( !myHyp )
-      myHyp = new TNodeDistributor( myID, 0, aMesh.GetGen() );
+      myHyp = new TNodeDistributor( myID, aMesh.GetGen() );
     return myHyp;
   }
   // -----------------------------------------------------------------------------
@@ -726,8 +725,8 @@ public:
   }
 protected:
   // -----------------------------------------------------------------------------
-  TNodeDistributor( int hypId, int studyId, SMESH_Gen* gen)
-    : StdMeshers_Regular_1D( hypId, studyId, gen)
+  TNodeDistributor( int hypId, SMESH_Gen* gen)
+    : StdMeshers_Regular_1D( hypId, gen)
   {
   }
   // -----------------------------------------------------------------------------
index 0b0803b9d350b23a3698aed45e1727aec46627b4..50ca16eb92efa4a17e2f26459e3250f6fdc8db59 100644 (file)
@@ -39,7 +39,7 @@ class StdMeshers_LayerDistribution;
 class STDMESHERS_EXPORT StdMeshers_RadialQuadrangle_1D2D: public StdMeshers_Quadrangle_2D
 {
 public:
-  StdMeshers_RadialQuadrangle_1D2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_RadialQuadrangle_1D2D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_RadialQuadrangle_1D2D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
index 32270cdcc92af858c2ebf614bc383240250faf05..a555fd432ce54d246a3c19c89d29197f43c95e02 100644 (file)
@@ -78,9 +78,8 @@ using namespace StdMeshers;
 //=============================================================================
 
 StdMeshers_Regular_1D::StdMeshers_Regular_1D(int         hypId,
-                                             int         studyId,
                                              SMESH_Gen * gen)
-  :SMESH_1D_Algo( hypId, studyId, gen )
+  :SMESH_1D_Algo( hypId, gen )
 {
   _name = "Regular_1D";
   _shapeType = (1 << TopAbs_EDGE);
@@ -629,7 +628,7 @@ void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh &          theM
         double L = GCPnts_AbscissaPoint::Length( theC3d, *itU, l);
         static StdMeshers_Regular_1D* auxAlgo = 0;
         if ( !auxAlgo ) {
-          auxAlgo = new StdMeshers_Regular_1D( _gen->GetANewId(), _studyId, _gen );
+          auxAlgo = new StdMeshers_Regular_1D( _gen->GetANewId(), _gen );
           auxAlgo->_hypType = BEG_END_LENGTH;
         }
         auxAlgo->_value[ BEG_LENGTH_IND ] = Lm;
index 90dba12ad16366aa7b6ea8fe1b2eb0af6d420bd4..2845e55a29662feb834e4a744bdc22451f2cbda2 100644 (file)
@@ -44,7 +44,7 @@ class TopoDS_Vertex;
 class STDMESHERS_EXPORT StdMeshers_Regular_1D: public SMESH_1D_Algo
 {
 public:
-  StdMeshers_Regular_1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Regular_1D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_Regular_1D();
 
   virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
index 9562e9da185fa065fce7f9298ca40b370bf928d8..59284819337c5ccbe3e0db177a8c6feef374f5c9 100644 (file)
@@ -33,8 +33,8 @@
  */
 //=============================================================================
 
-StdMeshers_Reversible1D::StdMeshers_Reversible1D(int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen)
+StdMeshers_Reversible1D::StdMeshers_Reversible1D(int hypId, SMESH_Gen * gen)
+  :SMESH_Hypothesis(hypId, gen)
 {
   _param_algo_dim = 1; 
 }
index a856eddfad1e94e1199d72224f2e247514aaff5f..00d61a1dae6ea95b0497dc929d73f87a89e1ec29 100644 (file)
@@ -38,7 +38,7 @@
 class STDMESHERS_EXPORT StdMeshers_Reversible1D : public SMESH_Hypothesis
 {
 public:
-  StdMeshers_Reversible1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_Reversible1D(int hypId, SMESH_Gen* gen);
 
   void SetReversedEdges( const std::vector<int>& ids);
 
index b109328a58cbc6517d98c161f0a8a7e91b79732c..ae37844d71657730a4332a31dd759d303f3aabaf 100644 (file)
@@ -36,8 +36,8 @@
 //=======================================================================
 
 StdMeshers_SegmentAroundVertex_0D::StdMeshers_SegmentAroundVertex_0D
-                                   (int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_0D_Algo(hypId, studyId, gen)
+                                   (int hypId, SMESH_Gen* gen)
+  :SMESH_0D_Algo(hypId, gen)
 {
   _name = "SegmentAroundVertex_0D";
   // it is assigned to vertices but influence a state of EDGE submeshes
index 4b0e53968be642e481c3726fc719e2232fe36095..3e886a1aec46da333012a8d14669a775e4c1cd4a 100644 (file)
@@ -38,7 +38,7 @@
 class STDMESHERS_EXPORT StdMeshers_SegmentAroundVertex_0D: public SMESH_0D_Algo
 {
 public:
-  StdMeshers_SegmentAroundVertex_0D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_SegmentAroundVertex_0D(int hypId, SMESH_Gen* gen);
   virtual ~StdMeshers_SegmentAroundVertex_0D();
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
index 46baaadc2a292e2c9f0a1479c9455ebd38e4086b..e221883ec35d3a09e8a17c909049eca7958f151a 100644 (file)
@@ -50,8 +50,8 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_SegmentLengthAroundVertex::StdMeshers_SegmentLengthAroundVertex
-                                       (int hypId, int studyId, SMESH_Gen * gen)
-  :SMESH_Hypothesis(hypId, studyId, gen)
+                                       (int hypId, SMESH_Gen * gen)
+  :SMESH_Hypothesis(hypId, gen)
 {
   _length = 1.;
   _name = "SegmentLengthAroundVertex";
index 355bee46c5dbca13c2efa98271ce3debcdf59a02..acf96e04d8fa7794892479f5d493586c2f753a2f 100644 (file)
@@ -40,7 +40,7 @@
 class STDMESHERS_EXPORT StdMeshers_SegmentLengthAroundVertex:public SMESH_Hypothesis
 {
  public:
-  StdMeshers_SegmentLengthAroundVertex(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_SegmentLengthAroundVertex(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_SegmentLengthAroundVertex();
 
   void SetLength(double length) throw(SALOME_Exception);
index 51bb2cf92e91f443425f7c0d6b24ff547d3b4294..a2bf0f7e116cf39607ee72234659af1c60773e4d 100644 (file)
@@ -48,9 +48,8 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_StartEndLength::StdMeshers_StartEndLength(int         hypId,
-                                                     int         studyId,
                                                      SMESH_Gen * gen)
-     :SMESH_Hypothesis(hypId, studyId, gen)
+     :SMESH_Hypothesis(hypId, gen)
 {
   _begLength = 1.;
   _endLength = 10.;
index 12f5f3c9573124f62ed4a769286e047cc12fe278..576d8e1992ee3ef041386b4392352a03953d4f28 100644 (file)
@@ -37,7 +37,7 @@
 class STDMESHERS_EXPORT StdMeshers_StartEndLength:public SMESH_Hypothesis
 {
  public:
-  StdMeshers_StartEndLength(int hypId, int studyId, SMESH_Gen * gen);
+  StdMeshers_StartEndLength(int hypId, SMESH_Gen * gen);
   virtual ~ StdMeshers_StartEndLength();
 
   void SetLength(double length, bool isStartLength) throw(SALOME_Exception);
index 2999915f4e5382b1e1162e8f1546f27874fb4374..eccadb802bd4e21370f12b1dd3cd73df1f694ef9 100644 (file)
@@ -34,8 +34,8 @@
 //=======================================================================
 
 StdMeshers_UseExisting_1D::StdMeshers_UseExisting_1D
-                                   (int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_1D_Algo(hypId, studyId, gen)
+                                   (int hypId, SMESH_Gen* gen)
+  :SMESH_1D_Algo(hypId, gen)
 {
   _name = "UseExisting_1D";
   _shapeType = (1 << TopAbs_EDGE); // 1 bit per shape type
@@ -89,8 +89,8 @@ bool StdMeshers_UseExisting_1D::Evaluate(SMESH_Mesh&,
 //=======================================================================
 
 StdMeshers_UseExisting_2D::StdMeshers_UseExisting_2D
-                                   (int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_2D_Algo(hypId, studyId, gen)
+                                   (int hypId, SMESH_Gen* gen)
+  :SMESH_2D_Algo(hypId, gen)
 {
   _name = "UseExisting_2D";
   _shapeType = (1 << TopAbs_FACE); // 1 bit per shape type
index 89b3bf06f24c20f888c9a4d6328ac7220635c9f5..58d55e20b8bd1997d2fdcc5ae391e256c7c085f4 100644 (file)
@@ -35,7 +35,7 @@
 class STDMESHERS_EXPORT StdMeshers_UseExisting_2D: public SMESH_2D_Algo
 {
 public:
-  StdMeshers_UseExisting_2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_UseExisting_2D(int hypId, SMESH_Gen* gen);
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
                                const TopoDS_Shape&                  aShape,
@@ -50,7 +50,7 @@ public:
 class STDMESHERS_EXPORT StdMeshers_UseExisting_1D: public SMESH_1D_Algo
 {
 public:
-  StdMeshers_UseExisting_1D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_UseExisting_1D(int hypId, SMESH_Gen* gen);
 
   virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
                                const TopoDS_Shape&                  aShape,
index 34f3f07a5f18d87d3bb0466ebf30badb98574ede..475a7cef1d7f469029920d90fde530ecf9bbce53 100644 (file)
@@ -1212,8 +1212,8 @@ namespace VISCOUS_3D
 //================================================================================
 // StdMeshers_ViscousLayers hypothesis
 //
-StdMeshers_ViscousLayers::StdMeshers_ViscousLayers(int hypId, int studyId, SMESH_Gen* gen)
-  :SMESH_Hypothesis(hypId, studyId, gen),
+StdMeshers_ViscousLayers::StdMeshers_ViscousLayers(int hypId, SMESH_Gen* gen)
+  :SMESH_Hypothesis(hypId, gen),
    _isToIgnoreShapes(1), _nbLayers(1), _thickness(1), _stretchFactor(1),
    _method( SURF_OFFSET_SMOOTH )
 {
@@ -1688,8 +1688,8 @@ namespace VISCOUS_3D
       py = _pyStream = new ofstream(fname);
       *py << "import SMESH" << endl
           << "from salome.smesh import smeshBuilder" << endl
-          << "smesh  = smeshBuilder.New(salome.myStudy)" << endl
-          << "meshSO = smesh.GetCurrentStudy().FindObjectID('0:1:2:" << tag <<"')" << endl
+          << "smesh  = smeshBuilder.New()" << endl
+          << "meshSO = salome.myStudy.FindObjectID('0:1:2:" << tag <<"')" << endl
           << "mesh   = smesh.Mesh( meshSO.GetObject() )"<<endl;
       theNbPyFunc = 0;
     }
index ce01ea208cfc06def8a81eba4e0405aeeda693fa..0eeb07e0b8397295f421e1514bb26ce8ec75ed2f 100644 (file)
@@ -38,7 +38,7 @@
 class STDMESHERS_EXPORT StdMeshers_ViscousLayers : public SMESH_Hypothesis
 {
 public:
-  StdMeshers_ViscousLayers(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_ViscousLayers(int hypId, SMESH_Gen* gen);
 
   // Set boundary shapes (faces in 3D, edges in 2D) either to exclude from
   // treatment or to make the Viscous Layers on
index 6cb97c538332e2cbdd489f8bcbff599781373c14..7c8ebe7767b2d1ab32201f942d59331424984392 100644 (file)
@@ -501,8 +501,8 @@ namespace VISCOUS_2D
 //================================================================================
 // StdMeshers_ViscousLayers hypothesis
 //
-StdMeshers_ViscousLayers2D::StdMeshers_ViscousLayers2D(int hypId, int studyId, SMESH_Gen* gen)
-  :StdMeshers_ViscousLayers(hypId, studyId, gen)
+StdMeshers_ViscousLayers2D::StdMeshers_ViscousLayers2D(int hypId, SMESH_Gen* gen)
+  :StdMeshers_ViscousLayers(hypId, gen)
 {
   _name = StdMeshers_ViscousLayers2D::GetHypType();
   _param_algo_dim = -2; // auxiliary hyp used by 2D algos
@@ -600,7 +600,7 @@ StdMeshers_ViscousLayers2D::CheckHypothesis(SMESH_Mesh&
 // --------------------------------------------------------------------------------
 void StdMeshers_ViscousLayers2D::RestoreListeners() const
 {
-  StudyContextStruct* sc = _gen->GetStudyContext( _studyId );
+  StudyContextStruct* sc = _gen->GetStudyContext();
   std::map < int, SMESH_Mesh * >::iterator i_smesh = sc->mapMesh.begin();
   for ( ; i_smesh != sc->mapMesh.end(); ++i_smesh )
   {
index cff610b17aaa11d6b2f054ea2cbe2b345fa61766..554cee395e67a99efca3fd547c3dce76361c7019 100644 (file)
@@ -35,7 +35,7 @@ class StdMeshers_FaceSide;
 class STDMESHERS_EXPORT StdMeshers_ViscousLayers2D : public StdMeshers_ViscousLayers
 {
 public:
-  StdMeshers_ViscousLayers2D(int hypId, int studyId, SMESH_Gen* gen);
+  StdMeshers_ViscousLayers2D(int hypId, SMESH_Gen* gen);
   /*!
    * \brief Computes temporary 2D mesh to be used by 2D algorithm.
    *        Return SMESH_ProxyMesh for the given FACE, or NULL in case of error
index 1b390d361f1d5083aaa92e7b755d231b327f5e5b..74f46994099a8ac3218d37f78b573dc25040009e 100644 (file)
@@ -63,6 +63,7 @@ SET(_link_LIBRARIES
   ${QWT_LIBRARY}
   SalomeIDLSMESH
   SMESHFiltersSelection
+  SMESHEngine
   SMESH
   SMESHObject
 )
index 6f243e037dfe83d59999940a95b13acc50ec8df2..9f1de0c28e375fdb4a5b8b21152e210d73ad75a9 100644 (file)
@@ -152,7 +152,7 @@ void StdMeshersGUI_LayerDistributionParamWdg::onHypTypePopup( QAction* a )
   SMESH::SMESH_Gen_var gen = mySMESHGUI->GetSMESHGen();
 
   // avoid publishing a new 1D hyp
-  gen->SetCurrentStudy( SALOMEDS::Study::_nil() );
+  gen->SetEnablePublish( false );
 
   // create a hyp
   HypothesisData* aHypData = 0;
@@ -174,7 +174,7 @@ void StdMeshersGUI_LayerDistributionParamWdg::onHypTypePopup( QAction* a )
   }
 
   // restore current study
-  mySMESHGUI->GetSMESHGen();
+  gen->SetEnablePublish( true );
 
   onEdit();
 }
index 8ce79e2f83da5269f7367ad914bef2f8afec8c2a..74f99aa000f522c0535d1a62c132808634cc2499 100644 (file)
@@ -227,9 +227,9 @@ void StdMeshersGUI_ObjectReferenceParamWdg::SetObjects(SMESH::string_array_var&
   
   for ( unsigned i = 0; i < objects->length(); ++i )
   {
-    _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
+    _PTR(Study) aStudy = SMESH::getStudy();
     _PTR(SObject) aSObj = aStudy->FindObjectID(objects[i].in());
-    CORBA::Object_var anObj = SMESH::SObjectToObject(aSObj,aStudy);
+    CORBA::Object_var anObj = SMESH::SObjectToObject(aSObj);
     if ( !CORBA::is_nil( anObj )) {
       std::string name = aSObj->GetName();
       QString text = myObjNameLineEdit->text();
index bc551c68bfd1f2b1df132b4411eb286b4561f1f2..72ed9ba54443a83faeed6edb920295ec07794292 100644 (file)
@@ -423,10 +423,10 @@ bool StdMeshersGUI_StdHypothesisCreator::checkParams( QString& msg ) const
       GEOM::GEOM_Object_var face = w->GetObject< GEOM::GEOM_Object >();
 
       GEOM::GEOM_Gen_var geomGen = SMESH::GetGEOMGen();
-      _PTR(Study)         aStudy = SMESH::GetActiveStudyDocument();
+      _PTR(Study)         aStudy = SMESH::getStudy();
       GEOM::GEOM_IShapesOperations_wrap shapeOp;
       if ( !geomGen->_is_nil() && aStudy )
-        shapeOp = geomGen->GetIShapesOperations( aStudy->StudyId() );
+        shapeOp = geomGen->GetIShapesOperations();
       if ( !shapeOp->_is_nil() )
       {
         GEOM::ListOfLong_var vertices =
index 0518ee07ced03b644f3a84aa120d19bba24d92bc..a3a54de51ca3f9f3547652475d91fc2725c69520 100644 (file)
@@ -578,16 +578,12 @@ void StdMeshersGUI_SubShapeSelectorWdg::updateState()
 GEOM::GEOM_Object_var StdMeshersGUI_SubShapeSelectorWdg::GetGeomObjectByEntry( const QString& theEntry )
 {
   GEOM::GEOM_Object_var aGeomObj;
-  SALOMEDS::Study_var aStudy = SMESHGUI::GetSMESHGen()->GetCurrentStudy();
-  if ( !aStudy->_is_nil() )
+  SALOMEDS::SObject_var aSObj = SMESH_Gen_i::getStudyServant()->FindObjectID( theEntry.toLatin1().data() );
+  if (!aSObj->_is_nil() )
   {
-    SALOMEDS::SObject_var aSObj = aStudy->FindObjectID( theEntry.toLatin1().data() );
-    if (!aSObj->_is_nil() )
-    {
-      CORBA::Object_var obj = aSObj->GetObject();
-      aGeomObj = GEOM::GEOM_Object::_narrow(obj);
-      aSObj->UnRegister();
-    }
+    CORBA::Object_var obj = aSObj->GetObject();
+    aGeomObj = GEOM::GEOM_Object::_narrow(obj);
+    aSObj->UnRegister();
   }
   return aGeomObj._retn();
 }
index d0439c955f07ca29aaa536f396150e689ed82c28..de799712d3d478c42c018ff1e7301675b9bbbf22 100644 (file)
 //=======================================================================
 
 StdMeshers_Adaptive1D_i::StdMeshers_Adaptive1D_i( PortableServer::POA_ptr thePOA,
-                                                  int                     theStudyId,
                                                   ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Adaptive1D( theGenImpl->GetANewId(),
-                                            theStudyId,
                                             theGenImpl );
 }
 
index 7aa2c1879f5d19dde43a28423ba6944330341a85..060b8b42af428096df35cce90ebc5c258153566f 100644 (file)
@@ -46,7 +46,6 @@ class STDMESHERS_I_EXPORT StdMeshers_Adaptive1D_i:
  public:
   // Constructor
   StdMeshers_Adaptive1D_i( PortableServer::POA_ptr thePOA,
-                           int                     theStudyId,
                            ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_Adaptive1D_i();
index 824530ec2b2db20ede5d099baee0371fe5bae779..f5a60814429c615766a6e854e47105919834d5de 100644 (file)
@@ -46,14 +46,12 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Arithmetic1D_i::StdMeshers_Arithmetic1D_i( PortableServer::POA_ptr thePOA,
-                                                    int                     theStudyId,
-                                                    ::SMESH_Gen*            theGenImpl )
+                                                      ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Arithmetic1D( theGenImpl->GetANewId(),
-                                             theStudyId,
-                                             theGenImpl );
+                                              theGenImpl );
 }
 
 //=============================================================================
index 6dece73a47107afb933eed017ccdd8bdc5a71abd..622354e99ca1c846ad5d88f874d13c87d3a85938 100644 (file)
@@ -46,7 +46,6 @@ class STDMESHERS_I_EXPORT StdMeshers_Arithmetic1D_i:
 public:
   // Constructor
   StdMeshers_Arithmetic1D_i( PortableServer::POA_ptr thePOA,
-                            int                     theStudyId,
                              ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_Arithmetic1D_i();
index d532e39351b70d0d476c027e3facebdcc83c221d..9121614d6de672ff832a36d89a4c061860e65382 100644 (file)
@@ -47,13 +47,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_AutomaticLength_i::StdMeshers_AutomaticLength_i( PortableServer::POA_ptr thePOA,
-                                                            int                     theStudyId,
                                                             ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_AutomaticLength( theGenImpl->GetANewId(),
-                                                 theStudyId,
                                                  theGenImpl );
 }
 
index d883d1b0b269e39764c7008b4d992dcd28abe54b..63847bd6d787a39128f10f84a20f6f508b2ea5fe 100644 (file)
@@ -50,7 +50,6 @@ class STDMESHERS_I_EXPORT StdMeshers_AutomaticLength_i:
 public:
   // Constructor
   StdMeshers_AutomaticLength_i( PortableServer::POA_ptr thePOA,
-                                int                     theStudyId,
                                 ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_AutomaticLength_i();
index 90d4ea4928062f0d2af688fa1410da4b8ff0d739..18c7426e8a3ac44c5b1fc7e8d8c6b59c51626fae 100644 (file)
@@ -59,13 +59,11 @@ namespace
 
 StdMeshers_CartesianParameters3D_i::
 StdMeshers_CartesianParameters3D_i( PortableServer::POA_ptr thePOA,
-                                    int                     theStudyId,
                                     ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_CartesianParameters3D( theGenImpl->GetANewId(),
-                                                       theStudyId,
                                                        theGenImpl );
 }
 
index fb1fc91b3839f5b4a947196bb67be0f59e75c158..d9f4d603ab046f60107623980b64f47dd031ac42 100644 (file)
@@ -46,7 +46,6 @@ class STDMESHERS_I_EXPORT StdMeshers_CartesianParameters3D_i:
  public:
   // Constructor
   StdMeshers_CartesianParameters3D_i( PortableServer::POA_ptr thePOA,
-                                      int                     theStudyId,
                                       ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_CartesianParameters3D_i();
index 2eeaff8d14adb02798aa8b4f725b886b0e47f97a..b45cb6c0e76424b444c843bdbf34e4024cbe297d 100644 (file)
@@ -38,7 +38,6 @@
 //=============================================================================
 
 StdMeshers_Cartesian_3D_i::StdMeshers_Cartesian_3D_i( PortableServer::POA_ptr thePOA,
-                                                      int                     theStudyId,
                                                       ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA ), 
@@ -46,7 +45,6 @@ StdMeshers_Cartesian_3D_i::StdMeshers_Cartesian_3D_i( PortableServer::POA_ptr th
     SMESH_3D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Cartesian_3D( theGenImpl->GetANewId(),
-                                              theStudyId,
                                               theGenImpl );
 }
 
index 1eca0a00ee06c5ef91c305f9457d782340991d8b..6376d36d5986e6cba12abe668d7dcd834512aa69 100644 (file)
@@ -45,7 +45,6 @@ class STDMESHERS_I_EXPORT StdMeshers_Cartesian_3D_i:
 public:
   // Constructor
   StdMeshers_Cartesian_3D_i( PortableServer::POA_ptr thePOA,
-                             int                     theStudyId,
                              ::SMESH_Gen*            theGenImpl );
 
   // Destructor
index 01a579b56c5dd5108eb6f82e7c20fbd269e51d61..482a9f16a866dc14b728c225ea53f672c593c92d 100644 (file)
@@ -43,7 +43,6 @@ using namespace std;
 
 StdMeshers_CompositeSegment_1D_i::StdMeshers_CompositeSegment_1D_i
                                                 ( PortableServer::POA_ptr thePOA,
-                                                  int                     theStudyId,
                                                   ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -51,7 +50,6 @@ StdMeshers_CompositeSegment_1D_i::StdMeshers_CompositeSegment_1D_i
        SMESH_1D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_CompositeSegment_1D( theGenImpl->GetANewId(),
-                                                     theStudyId,
                                                      theGenImpl );
 }
 
index b7811f6291e795f0651324e8bb59a693562d42fa..b8f9948639d0b78bd86d56d3329254653925eccf 100644 (file)
@@ -44,7 +44,6 @@ class StdMeshers_CompositeSegment_1D_i:
 public:
   // Constructor
   StdMeshers_CompositeSegment_1D_i( PortableServer::POA_ptr thePOA,
-                                    int                     theStudyId,
                                     ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_CompositeSegment_1D_i();
index add0ede6dd369d9e5f1d8fee54ab2a52368f36ba..a89708793b752c177b9ce25832c4ff16c3b89d50 100644 (file)
@@ -47,14 +47,12 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Deflection1D_i::StdMeshers_Deflection1D_i( PortableServer::POA_ptr thePOA,
-                                          int                     theStudyId,
-                                          ::SMESH_Gen*            theGenImpl )
+                                                      ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Deflection1D( theGenImpl->GetANewId(),
-                                        theStudyId,
-                                        theGenImpl );
+                                              theGenImpl );
 }
 
 //=============================================================================
index 722da9b4231e6e9799cd26cdf1c6d48c8ebca64d..dfac16e1de009974801bfa35a8a0bde52a94cc89 100644 (file)
@@ -49,8 +49,7 @@ class STDMESHERS_I_EXPORT StdMeshers_Deflection1D_i:
 public:
   // Constructor
   StdMeshers_Deflection1D_i( PortableServer::POA_ptr thePOA,
-                       int                     theStudyId,
-                       ::SMESH_Gen*            theGenImpl );
+                             ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_Deflection1D_i();
 
index fbaa715c6aabe4e899d7c840f3bef6478480ed14..e6323cd314bc9ef29e736a2fe590085d6e438922 100644 (file)
@@ -44,13 +44,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_FixedPoints1D_i::StdMeshers_FixedPoints1D_i( PortableServer::POA_ptr thePOA,
-                                                        int                     theStudyId,
                                                         ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_FixedPoints1D(theGenImpl->GetANewId(),
-                                              theStudyId,
                                               theGenImpl);
 }
 
index 37522382183b177195efaf8e40ac8e52c7d27df1..7261ff7a76d1bd3b8df68e219c83927658aaf180 100644 (file)
@@ -43,7 +43,6 @@ class STDMESHERS_I_EXPORT StdMeshers_FixedPoints1D_i:
 public:
   // Constructor
   StdMeshers_FixedPoints1D_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
                               ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_FixedPoints1D_i();
index cd4d6ec0d37a242f204cd97424972bfbe0274bd3..1530dc26c304afd03f7c10e75f806df2c61c5adb 100644 (file)
 //=============================================================================
 
 StdMeshers_Geometric1D_i::StdMeshers_Geometric1D_i( PortableServer::POA_ptr thePOA,
-                                                    int                     theStudyId,
                                                     ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA ),
     StdMeshers_Reversible1D_i( this )
 {
   myBaseImpl = new ::StdMeshers_Geometric1D( theGenImpl->GetANewId(),
-                                             theStudyId,
                                              theGenImpl );
 }
 
index 38f0b6d8d26db1331db4827657aaf3f93ee03f55..f3a8964be4c912b28d8582b8da1913f11bbc65fe 100644 (file)
@@ -47,7 +47,6 @@ class STDMESHERS_I_EXPORT StdMeshers_Geometric1D_i:
  public:
   // Constructor
   StdMeshers_Geometric1D_i( PortableServer::POA_ptr thePOA,
-                            int                     theStudyId,
                             ::SMESH_Gen*            theGenImpl );
 
   void SetStartLength(CORBA::Double length) throw(SALOME::SALOME_Exception);
index 88e418edf738164c99184c134d9c2fff833192b6..6a47515cb8a8818e099c8646f8243c6eeee62d7c 100644 (file)
@@ -43,7 +43,6 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Hexa_3D_i::StdMeshers_Hexa_3D_i( PortableServer::POA_ptr thePOA,
-                                            int                     theStudyId,
                                             ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA ),
@@ -51,7 +50,6 @@ StdMeshers_Hexa_3D_i::StdMeshers_Hexa_3D_i( PortableServer::POA_ptr thePOA,
     SMESH_3D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Hexa_3D( theGenImpl->GetANewId(),
-                                         theStudyId,
                                          theGenImpl );
 }
 
index 98ef012dcd6236b6b40a2322763c31e06a60a4cb..37d38c035c5e310b5bb682e5f36fa899d89c92ac 100644 (file)
@@ -49,8 +49,7 @@ class STDMESHERS_I_EXPORT StdMeshers_Hexa_3D_i:
 public:
   // Constructor
   StdMeshers_Hexa_3D_i( PortableServer::POA_ptr thePOA,
-                   int                     theStudyId,
-                   ::SMESH_Gen*            theGenImpl );
+                        ::SMESH_Gen*            theGenImpl );
 
   // Destructor
   virtual ~StdMeshers_Hexa_3D_i();
index 61ec24bd4affaa6d55f584d40b11ce8905359884..9d6f613ea88bb40f81ffee4d07cb7194b624c0de 100644 (file)
@@ -51,13 +51,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_ImportSource1D_i::StdMeshers_ImportSource1D_i( PortableServer::POA_ptr thePOA,
-                                                          int                     theStudyId,
                                                           ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_ImportSource1D( theGenImpl->GetANewId(),
-                                                theStudyId,
                                                 theGenImpl );
   _groupEntries = new SMESH::string_array();
 }
@@ -87,7 +85,6 @@ void StdMeshers_ImportSource1D_i::SetSourceEdges(const SMESH::ListOfGroups& grou
   {
     std::vector<SMESH_Group*> smesh_groups;
     std::vector<string> entries;
-    SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
     for ( CORBA::ULong i = 0; i < groups.length(); ++i )
       if ( SMESH_GroupBase_i* gp_i = SMESH::DownCast<SMESH_GroupBase_i*>( groups[i] ))
       {
@@ -95,7 +92,7 @@ void StdMeshers_ImportSource1D_i::SetSourceEdges(const SMESH::ListOfGroups& grou
           THROW_SALOME_CORBA_EXCEPTION("Wrong group type", SALOME::BAD_PARAM);
         smesh_groups.push_back( gp_i->GetSmeshGroup() );
 
-        SALOMEDS::SObject_wrap so = SMESH_Gen_i::ObjectToSObject(study, groups[i]);
+        SALOMEDS::SObject_wrap so = SMESH_Gen_i::ObjectToSObject(groups[i]);
         if ( !so->_is_nil())
         {
           CORBA::String_var entry = so->GetID();
@@ -168,14 +165,13 @@ char* StdMeshers_ImportSource1D_i::SaveTo()
   std::ostringstream os;
   os << " " << _groupEntries->length();
 
-  SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
   for ( size_t i = 0; i < _groupEntries->length(); ++i )
   {
     // entry
     os << " " << _groupEntries[i];
 
     // id
-    SALOMEDS::SObject_wrap groupSO = study->FindObjectID( _groupEntries[i] );
+    SALOMEDS::SObject_wrap groupSO = SMESH_Gen_i::getStudyServant()->FindObjectID( _groupEntries[i] );
     CORBA::Object_var     groupObj;
     if ( !groupSO->_is_nil() )
       groupObj = groupSO->GetObject();
index 517549d6a17758fe2fc8d4bec64268519182c60e..2f9dca660ff62de495c31bff514ab9e1f1c29090 100644 (file)
@@ -44,7 +44,6 @@ class STDMESHERS_I_EXPORT StdMeshers_ImportSource1D_i:
  public:
   // Constructor
   StdMeshers_ImportSource1D_i( PortableServer::POA_ptr thePOA,
-                               int                     theStudyId,
                                ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_ImportSource1D_i();
index dc61b9cdd9ea22b3bd8e94e3abc2e418ef1d6665..1027d802a603c503e68c1c6aa74776d85fedccae 100644 (file)
@@ -50,13 +50,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_ImportSource2D_i::StdMeshers_ImportSource2D_i( PortableServer::POA_ptr thePOA,
-                                                          int                     theStudyId,
                                                           ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_ImportSource2D( theGenImpl->GetANewId(),
-                                                theStudyId,
                                                 theGenImpl );
   _groupEntries = new SMESH::string_array();
 }
@@ -86,7 +84,6 @@ void StdMeshers_ImportSource2D_i::SetSourceFaces(const SMESH::ListOfGroups& grou
   {
     std::vector<SMESH_Group*> smesh_groups;
     std::vector<string> entries;
-    SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
     for ( CORBA::ULong i = 0; i < groups.length(); ++i )
       if ( SMESH_GroupBase_i* gp_i = SMESH::DownCast<SMESH_GroupBase_i*>( groups[i] ))
       {
@@ -94,7 +91,7 @@ void StdMeshers_ImportSource2D_i::SetSourceFaces(const SMESH::ListOfGroups& grou
           THROW_SALOME_CORBA_EXCEPTION("Wrong group type", SALOME::BAD_PARAM);
         smesh_groups.push_back( gp_i->GetSmeshGroup() );
 
-        SALOMEDS::SObject_var so = SMESH_Gen_i::ObjectToSObject(study, groups[i]);
+        SALOMEDS::SObject_var so = SMESH_Gen_i::ObjectToSObject(groups[i]);
         if ( !so->_is_nil())
         {
           CORBA::String_var entry = so->GetID();
@@ -168,14 +165,13 @@ char* StdMeshers_ImportSource2D_i::SaveTo()
   std::ostringstream os;
   os << " " << _groupEntries->length();
 
-  SALOMEDS::Study_var study = SMESH_Gen_i::GetSMESHGen()->GetCurrentStudy();
   for ( CORBA::ULong i = 0; i < _groupEntries->length(); ++i )
   {
     // entry
     os << " " << _groupEntries[i];
 
     // id
-    SALOMEDS::SObject_var groupSO = study->FindObjectID( _groupEntries[i] );
+    SALOMEDS::SObject_var groupSO = SMESH_Gen_i::getStudyServant()->FindObjectID( _groupEntries[i] );
     CORBA::Object_var    groupObj;
     if ( !groupSO->_is_nil() ) {
       groupObj = groupSO->GetObject();
index bfa0e81b36f7d57b55cc7031cf4a118a35845c0e..685dd4febc8070d042ea232289d5bbfbbcbd1292 100644 (file)
@@ -44,7 +44,6 @@ class STDMESHERS_I_EXPORT StdMeshers_ImportSource2D_i:
  public:
   // Constructor
   StdMeshers_ImportSource2D_i( PortableServer::POA_ptr thePOA,
-                               int                     theStudyId,
                                ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_ImportSource2D_i();
index 061257e9f7955238115829df870558551056b5f6..8a84e648b877a6399e25b14bf70c9e3779b12c8b 100644 (file)
@@ -37,7 +37,6 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Import_1D2D_i::StdMeshers_Import_1D2D_i (PortableServer::POA_ptr thePOA,
-                                                    int                     theStudyId,
                                                     ::SMESH_Gen*            theGenImpl)
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA ), 
@@ -45,7 +44,6 @@ StdMeshers_Import_1D2D_i::StdMeshers_Import_1D2D_i (PortableServer::POA_ptr theP
     SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Import_1D2D(theGenImpl->GetANewId(),
-                                            theStudyId,
                                             theGenImpl );
 }
 
index 5e94f1a9a884b51942d546177ecdd9864241bc42..fa4f3fa0122c79d388b006f7c09b92066d843e0b 100644 (file)
@@ -39,7 +39,6 @@ class StdMeshers_Import_1D2D_i:
 public:
   // Constructor
   StdMeshers_Import_1D2D_i( PortableServer::POA_ptr thePOA,
-                            int                     theStudyId,
                             ::SMESH_Gen*            theGenImpl );
 
   // Destructor
index dfbda1eb99785bee3687587cafd068d9f3245db6..2b3d23412e1db3e275533310d785fd34be6efe55 100644 (file)
@@ -43,7 +43,6 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Import_1D_i::StdMeshers_Import_1D_i( PortableServer::POA_ptr thePOA,
-                                                int                     theStudyId,
                                                 ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA ), 
@@ -51,7 +50,6 @@ StdMeshers_Import_1D_i::StdMeshers_Import_1D_i( PortableServer::POA_ptr thePOA,
     SMESH_1D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Import_1D( theGenImpl->GetANewId(),
-                                           theStudyId,
                                            theGenImpl );
 }
 
index fb7641256f5654d951deff8ca4f44d9997dfbb72..9b9fce8830f43e8b922f4187fc211eee2df6346d 100644 (file)
@@ -42,7 +42,6 @@ class STDMESHERS_I_EXPORT StdMeshers_Import_1D_i:
  public:
   // Constructor
   StdMeshers_Import_1D_i( PortableServer::POA_ptr thePOA,
-                          int                     theStudyId,
                           ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_Import_1D_i();
index 013db3995da4ea1dc654502303af07c2218d20dc..9b81cd28656cfacfa45f9ac3df2a881d9ee1eaac 100644 (file)
 
 StdMeshers_LayerDistribution2D_i::StdMeshers_LayerDistribution2D_i
                                           (PortableServer::POA_ptr thePOA,
-                                           int                     theStudyId,
                                            ::SMESH_Gen*            theGenImpl )
 :SMESH_Hypothesis_i( thePOA ),
- StdMeshers_LayerDistribution_i(thePOA,theStudyId,theGenImpl)
+ StdMeshers_LayerDistribution_i(thePOA, theGenImpl)
 {
   myBaseImpl = new ::StdMeshers_LayerDistribution2D(theGenImpl->GetANewId(),
-                                                    theStudyId,
                                                     theGenImpl);
 }
 
index e95c43317f41d469ba996d7ee985bfd4a4e7ddc6..a5290de0a38b568c747de7e0061afaeff14fe021 100644 (file)
@@ -44,7 +44,6 @@ class StdMeshers_LayerDistribution2D_i:
 public:
   // Constructor
   StdMeshers_LayerDistribution2D_i(PortableServer::POA_ptr thePOA,
-                                   int                     theStudyId,
                                    ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_LayerDistribution2D_i();
index d8bb021801de5bdee13585d8c2b7e53b3632aec9..abe9066df65adf24ddf918f3281f4a241906babe 100644 (file)
@@ -45,13 +45,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_LayerDistribution_i::StdMeshers_LayerDistribution_i( PortableServer::POA_ptr thePOA,
-                                                                int                     theStudyId,
                                                                 ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_LayerDistribution( theGenImpl->GetANewId(),
-                                                   theStudyId,
                                                    theGenImpl );
 }
 
@@ -90,11 +88,10 @@ void StdMeshers_LayerDistribution_i::SetLayerDistribution(SMESH::SMESH_Hypothesi
     // Remove SO of 1D hypothesis if it was published
     if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen())
     {
-      SALOMEDS::Study_var study = gen->GetCurrentStudy();
-      SALOMEDS::SObject_var  SO = gen->ObjectToSObject( study, hyp1D );
+      SALOMEDS::SObject_var  SO = gen->ObjectToSObject( hyp1D );
       if ( ! SO->_is_nil() )
       {
-        SALOMEDS::StudyBuilder_var builder = study->NewBuilder();
+        SALOMEDS::StudyBuilder_var builder = SMESH_Gen_i::getStudyServant()->NewBuilder();
         builder->RemoveObjectWithChildren( SO );
         SO->UnRegister();
       }
@@ -198,8 +195,7 @@ void StdMeshers_LayerDistribution_i::LoadFrom( const char* theStream )
        is >> libName )
   {
     SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study_var curStudy = gen->GetCurrentStudy();
-    gen->SetCurrentStudy( SALOMEDS::Study::_nil() ); // prevent hypo publishing
+    gen->SetEnablePublish( false ); // prevent hypo publishing
 
     try {
       SMESH::SMESH_Hypothesis_var hyp1D =
@@ -221,7 +217,7 @@ void StdMeshers_LayerDistribution_i::LoadFrom( const char* theStream )
     }
     catch (...) {
     }
-    gen->SetCurrentStudy( curStudy );  // enable hypo publishing
+    gen->SetEnablePublish( true );  // enable hypo publishing
   }
 }
 
index 98947b7cffbfb521f15a2f20ca340dbd6fe493cd..69050ee700967ac7d3e527c6f2a1d8e5654e5ce1 100644 (file)
@@ -50,7 +50,6 @@ class StdMeshers_LayerDistribution_i:
 public:
   // Constructor
   StdMeshers_LayerDistribution_i( PortableServer::POA_ptr thePOA,
-                                  int                     theStudyId,
                                   ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_LayerDistribution_i();
index 7404b9e133fa6d528ef0e02b202969ae4353e820..94b3417012a19811e3a02e95c7b53621c09765eb 100644 (file)
@@ -44,14 +44,12 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_LengthFromEdges_i::StdMeshers_LengthFromEdges_i( PortableServer::POA_ptr thePOA,
-                                                  int                     theStudyId,
-                                                  ::SMESH_Gen*            theGenImpl )
+                                                            ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_LengthFromEdges( theGenImpl->GetANewId(),
-                                            theStudyId,
-                                            theGenImpl );
+                                                 theGenImpl );
 }
 
 //=============================================================================
index 5c88c7dfff3a92fca03046f6d0efeb6586024f84..98495ea098e7d7412c19da35fc46a99ecc5a5b8a 100644 (file)
@@ -48,8 +48,7 @@ class STDMESHERS_I_EXPORT StdMeshers_LengthFromEdges_i:
 public:
   // Constructor
   StdMeshers_LengthFromEdges_i( PortableServer::POA_ptr thePOA,
-                           int                     theStudyId,
-                           ::SMESH_Gen*            theGenImpl );
+                                ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_LengthFromEdges_i();
 
index af0e63a4895e3368db1063fd2c4a505e7c354430..06270a79336167b694d8803edd3e2dd3a6844a37 100644 (file)
@@ -47,13 +47,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_LocalLength_i::StdMeshers_LocalLength_i( PortableServer::POA_ptr thePOA,
-                                                    int                     theStudyId,
                                                     ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ),
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_LocalLength( theGenImpl->GetANewId(),
-                                             theStudyId,
                                              theGenImpl );
 }
 
index e3b30927e309e1bbe658ebdbc13a48f0347f3454..25504ef9fb437af2614da6a4839e0057b10edb31 100644 (file)
@@ -49,8 +49,7 @@ class STDMESHERS_I_EXPORT StdMeshers_LocalLength_i:
 public:
   // Constructor
   StdMeshers_LocalLength_i( PortableServer::POA_ptr thePOA,
-                       int                     theStudyId,
-                       ::SMESH_Gen*            theGenImpl );
+                            ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_LocalLength_i();
 
index d463a4ebec9f4782cc3e5de8030a6594afc9d51d..dd98b1449503570630a9e3e70d15a2591ce67b86 100644 (file)
@@ -44,16 +44,14 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_MEFISTO_2D_i::StdMeshers_MEFISTO_2D_i( PortableServer::POA_ptr thePOA,
-                                        int                     theStudyId,
-                                        ::SMESH_Gen*            theGenImpl )
+                                                  ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
        SMESH_Algo_i( thePOA ),
        SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_MEFISTO_2D( theGenImpl->GetANewId(),
-                                       theStudyId,
-                                       theGenImpl );
+                                            theGenImpl );
 }
 
 //=============================================================================
index 09937306403101b0adf1b811383ded6b78c59ae1..1313e4c8d2bddea2f3915bd876c1decccafe1316 100644 (file)
@@ -50,8 +50,7 @@ class STDMESHERS_I_EXPORT StdMeshers_MEFISTO_2D_i:
 public:
   // Constructor
   StdMeshers_MEFISTO_2D_i( PortableServer::POA_ptr thePOA,
-                      int                     theStudyId,
-                      ::SMESH_Gen*            theGenImpl );
+                           ::SMESH_Gen*            theGenImpl );
 
   // Destructor
   virtual ~StdMeshers_MEFISTO_2D_i();
index 017c33bb071eadbdfdccd70501866a92c4e8c12d..c61928156d7b4c91fb17408c57a4e3a8a18337c9 100644 (file)
@@ -47,14 +47,12 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_MaxElementArea_i::StdMeshers_MaxElementArea_i( PortableServer::POA_ptr thePOA,
-                                                int                     theStudyId,
-                                                ::SMESH_Gen*            theGenImpl )
+                                                          ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ) 
 {
   myBaseImpl = new ::StdMeshers_MaxElementArea( theGenImpl->GetANewId(),
-                                           theStudyId,
-                                           theGenImpl );
+                                                theGenImpl );
 }
 
 //=============================================================================
index 2e46ff056057328f4faf24cf60d7df5d795c9cc6..b20fb3e57840b6732cd2cc484ba1a8e010a1b279 100644 (file)
@@ -47,8 +47,7 @@ class STDMESHERS_I_EXPORT StdMeshers_MaxElementArea_i:
 public:
   // Constructor
   StdMeshers_MaxElementArea_i( PortableServer::POA_ptr thePOA,
-                          int                     theStudyId,
-                          ::SMESH_Gen*            theGenImpl );
+                               ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_MaxElementArea_i();
 
index c9861c1f6d1482fe3aa75cefa989b379d48e0ce8..17c19a25918675d51c0f804489dc8618f45dc0bb 100644 (file)
@@ -47,14 +47,12 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_MaxElementVolume_i::StdMeshers_MaxElementVolume_i( PortableServer::POA_ptr thePOA,
-                                                    int                     theStudyId,
-                                                    ::SMESH_Gen*            theGenImpl )
+                                                              ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_MaxElementVolume( theGenImpl->GetANewId(),
-                                             theStudyId,
-                                             theGenImpl );
+                                                  theGenImpl );
 }
 
 //=============================================================================
index 876d8e2c44d208ede4c155e73334b9461b005e2a..1f917e191b68f232f3c58c1ba4e56dc7365413e8 100644 (file)
@@ -47,8 +47,7 @@ class STDMESHERS_I_EXPORT StdMeshers_MaxElementVolume_i:
 public:
   // Constructor
   StdMeshers_MaxElementVolume_i( PortableServer::POA_ptr thePOA,
-                            int                     theStudyId,
-                            ::SMESH_Gen*            theGenImpl );
+                                 ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_MaxElementVolume_i();
 
index f26732a570ed558efdc4858b997e697f9d82f558..2dbd9019a1d0f9eed4070a7ad7de7481e4fd06d2 100644 (file)
@@ -42,13 +42,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_MaxLength_i::StdMeshers_MaxLength_i( PortableServer::POA_ptr thePOA,
-                                                int                     theStudyId,
                                                 ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_MaxLength( theGenImpl->GetANewId(),
-                                           theStudyId,
                                            theGenImpl );
 }
 
index 4f888e1be3b2347001cf2f759bea1b7b20a0d093..21de81ae343a7f2857b8cf958cbb637267c3308e 100644 (file)
@@ -44,8 +44,7 @@ class STDMESHERS_I_EXPORT StdMeshers_MaxLength_i:
 public:
   // Constructor
   StdMeshers_MaxLength_i( PortableServer::POA_ptr thePOA,
-                       int                     theStudyId,
-                       ::SMESH_Gen*            theGenImpl );
+                          ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_MaxLength_i();
 
index ba1f768c270dd8d81db18bb8288eed39601a4736..d8507a9dfd7485d667fdeefef6bab28c13c3b0f4 100644 (file)
@@ -42,13 +42,11 @@ using namespace std;
 
 StdMeshers_NotConformAllowed_i::StdMeshers_NotConformAllowed_i
                                 (PortableServer::POA_ptr thePOA,
-                                 int                     studyId,
                                  ::SMESH_Gen*            genImpl)
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_NotConformAllowed(genImpl->GetANewId(),
-                                                  studyId,
                                                   genImpl);
 }
 
index 2ee4a512dc61c65435b6e02cf7af9b7f8c17aeab..ee4107f10dac60d84816e76e039a7375dc9a31ce 100644 (file)
@@ -44,7 +44,6 @@ class STDMESHERS_I_EXPORT StdMeshers_NotConformAllowed_i:
 {
 public:
   StdMeshers_NotConformAllowed_i(PortableServer::POA_ptr thePOA,
-                                 int studyId,
                                  ::SMESH_Gen* genImpl);
   virtual ~StdMeshers_NotConformAllowed_i();
   
index 263e4d5c38dc7aea33f7d64f51161cb6c1fa8e52..4b7ff8800f4b1d31a0bde5b185859ba83331ac23 100644 (file)
 
 StdMeshers_NumberOfLayers2D_i::StdMeshers_NumberOfLayers2D_i
                                            (PortableServer::POA_ptr thePOA,
-                                            int                     theStudyId,
                                             ::SMESH_Gen*            theGenImpl)
  :SMESH_Hypothesis_i( thePOA ),
-  StdMeshers_NumberOfLayers_i(thePOA,theStudyId,theGenImpl)
+  StdMeshers_NumberOfLayers_i(thePOA, theGenImpl)
 {
   myBaseImpl = new ::StdMeshers_NumberOfLayers2D(theGenImpl->GetANewId(),
-                                                 theStudyId,
                                                  theGenImpl);
 }
 
index e9c9b22f8101240fef623ccb160fb26dc794875f..128cfca3438585b32c842fa2ac506a5f68dcf08a 100644 (file)
@@ -43,7 +43,6 @@ class StdMeshers_NumberOfLayers2D_i:
 public:
   // Constructor
   StdMeshers_NumberOfLayers2D_i( PortableServer::POA_ptr thePOA,
-                                 int                     theStudyId,
                                  ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_NumberOfLayers2D_i();
index 40905a6725928ec2be1bc2d4c3f24db8854f82fa..bcc1175432290e06f2e6d690cf48046dc492d1bf 100644 (file)
@@ -46,14 +46,12 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_NumberOfLayers_i::StdMeshers_NumberOfLayers_i( PortableServer::POA_ptr thePOA,
-                                                          int                     theStudyId,
                                                           ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_NumberOfLayers( theGenImpl->GetANewId(),
-                                                 theStudyId,
-                                                 theGenImpl );
+                                                theGenImpl );
 }
 
 //=============================================================================
index b47b10e795ac9c6050d3894ca962b1b3272b577f..6af3b6c14a4be3c28f151541af0c0170221d7c82 100644 (file)
@@ -51,7 +51,6 @@ class StdMeshers_NumberOfLayers_i:
 public:
   // Constructor
   StdMeshers_NumberOfLayers_i( PortableServer::POA_ptr thePOA,
-                               int                     theStudyId,
                                ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_NumberOfLayers_i();
index 5a75bf78e45a6b2e7bc3d38b2193532f83a50593..20397181e293bfebbb8a2aaf62587e7971902b22 100644 (file)
@@ -46,14 +46,12 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_NumberOfSegments_i::StdMeshers_NumberOfSegments_i( PortableServer::POA_ptr thePOA,
-                                                    int                     theStudyId,
-                                                    ::SMESH_Gen*            theGenImpl )
+                                                              ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_NumberOfSegments( theGenImpl->GetANewId(),
-                                             theStudyId,
-                                             theGenImpl );
+                                                  theGenImpl );
 }
 
 //=============================================================================
index 05be9d24d88e0bca5888bb4c8db903ea7c72ec73..1b8f1ea18d4e99c818e30e7bed4e29325045087a 100644 (file)
@@ -48,8 +48,7 @@ class STDMESHERS_I_EXPORT StdMeshers_NumberOfSegments_i:
 public:
   // Constructor
   StdMeshers_NumberOfSegments_i( PortableServer::POA_ptr thePOA,
-                            int                     theStudyId,
-                            ::SMESH_Gen*            theGenImpl );
+                                 ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_NumberOfSegments_i();
 
index 7ad64cee20dd2cf27951e8106619a2d25be2023b..c7e3988b845e69486f2f04bd30f532d488c27a38 100644 (file)
@@ -59,9 +59,8 @@ StdMeshers_ObjRefUlils::EntryOrShapeToGeomObject (const std::string&  theEntry,
 
   // try by entry
   if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
-    SALOMEDS::Study_var study = gen->GetCurrentStudy();
-    if ( ! theEntry.empty() && ! study->_is_nil() ) {
-      SALOMEDS::SObject_wrap sobj = study->FindObjectID( theEntry.c_str() );
+    if ( ! theEntry.empty() ) {
+      SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( theEntry.c_str() );
       CORBA::Object_var       obj = gen->SObjectToObject( sobj );
       geom = GEOM::GEOM_Object::_narrow( obj );
     }
@@ -88,7 +87,7 @@ void StdMeshers_ObjRefUlils::SaveToStream( const TopoDS_Shape& theShape, ostream
     if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
       GEOM::GEOM_Object_var geom = gen->ShapeToGeomObject( theShape );
       if ( ! geom->_is_nil() ) {
-        SALOMEDS::SObject_wrap sobj = gen->ObjectToSObject( gen->GetCurrentStudy(), geom );
+        SALOMEDS::SObject_wrap sobj = gen->ObjectToSObject( geom );
         if ( !sobj->_is_nil() ) {
           CORBA::String_var entry = sobj->GetID();
           stream << " " << entry.in();
@@ -117,13 +116,10 @@ TopoDS_Shape StdMeshers_ObjRefUlils::LoadFromStream( istream &    stream,
     if ( entry )
       * entry = str;
     if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
-      SALOMEDS::Study_var study = gen->GetCurrentStudy();
-      if ( ! study->_is_nil() ) {
-        SALOMEDS::SObject_wrap sobj = study->FindObjectID( str.c_str() );
-        CORBA::Object_var       obj = gen->SObjectToObject( sobj );
-        GEOM::GEOM_Object_var  geom = GEOM::GEOM_Object::_narrow( obj );
-        return gen->GeomObjectToShape( geom.in() );
-      }
+      SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( str.c_str() );
+      CORBA::Object_var       obj = gen->SObjectToObject( sobj );
+      GEOM::GEOM_Object_var  geom = GEOM::GEOM_Object::_narrow( obj );
+      return gen->GeomObjectToShape( geom.in() );
     }
   }
   if ( entry )
index ca30fd3d242e259d4289c750db4328036d7cc07a..fb2540c65c5331cfdda55ecb49db63e92a9e49f8 100644 (file)
@@ -110,7 +110,7 @@ public:
     if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
       std::string str;
       if (stream >> str) {
-        if ( StudyContext* myStudyContext = gen->GetCurrentStudyContext() ) {
+        if ( StudyContext* myStudyContext = gen->GetStudyContext() ) {
           std::string ior = myStudyContext->getIORbyOldId( atoi( str.c_str() ));
           if ( !ior.empty() )
              return TInterface::_narrow(gen->GetORB()->string_to_object( ior.c_str() ));
index 4659ab42bc2dc829404052cfb428ccf47aefe43d..54b61812e48a63ec74471ceac5be1fef7f307696 100644 (file)
@@ -36,7 +36,6 @@
 //=============================================================================
 
 StdMeshers_PolygonPerFace_2D_i::StdMeshers_PolygonPerFace_2D_i( PortableServer::POA_ptr thePOA,
-                                                                int                     theStudyId,
                                                                 ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA ),
@@ -44,7 +43,6 @@ StdMeshers_PolygonPerFace_2D_i::StdMeshers_PolygonPerFace_2D_i( PortableServer::
     SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_PolygonPerFace_2D( theGenImpl->GetANewId(),
-                                                   theStudyId,
                                                    theGenImpl );
 }
 
index a9f0f314b2fce9517a72448ef0bc2cdb145ecd41..c32bcb737c66097065665f9e7994b6552cd7dd22 100644 (file)
@@ -45,7 +45,6 @@ class STDMESHERS_I_EXPORT StdMeshers_PolygonPerFace_2D_i:
  public:
   // Constructor
   StdMeshers_PolygonPerFace_2D_i( PortableServer::POA_ptr thePOA,
-                                  int                     theStudyId,
                                   ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_PolygonPerFace_2D_i();
index 8f5999d65a3ad6deaa0f2953445ff2c7ed671b39..7d5bd2712d93564364c6dc2e86db0b678d32ff5b 100644 (file)
@@ -41,7 +41,6 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Prism_3D_i::StdMeshers_Prism_3D_i( PortableServer::POA_ptr thePOA,
-                                              int                     theStudyId,
                                               ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA ),
@@ -49,7 +48,6 @@ StdMeshers_Prism_3D_i::StdMeshers_Prism_3D_i( PortableServer::POA_ptr thePOA,
     SMESH_3D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Prism_3D( theGenImpl->GetANewId(),
-                                          theStudyId,
                                           theGenImpl );
 }
 //-----------------------------------------------------------------------------
@@ -79,7 +77,6 @@ CORBA::Boolean StdMeshers_Prism_3D_i::IsApplicable( const TopoDS_Shape &S,
 //=============================================================================
 
 StdMeshers_RadialPrism_3D_i::StdMeshers_RadialPrism_3D_i( PortableServer::POA_ptr thePOA,
-                                                          int                     theStudyId,
                                                           ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA ),
@@ -87,7 +84,6 @@ StdMeshers_RadialPrism_3D_i::StdMeshers_RadialPrism_3D_i( PortableServer::POA_pt
     SMESH_3D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_RadialPrism_3D( theGenImpl->GetANewId(),
-                                                theStudyId,
                                                 theGenImpl );
 }
 //-----------------------------------------------------------------------------
index 5cecfcd3be788b4b145f9ed5bb07a204e4f6668d..985b34615ec64ed13b62601d1f3135c832cd672b 100644 (file)
@@ -48,7 +48,6 @@ class StdMeshers_Prism_3D_i:
 public:
   // Constructor
   StdMeshers_Prism_3D_i( PortableServer::POA_ptr thePOA,
-                         int                     theStudyId,
                          ::SMESH_Gen*            theGenImpl );
 
   // Destructor
@@ -71,7 +70,6 @@ class StdMeshers_RadialPrism_3D_i:
 public:
   // Constructor
   StdMeshers_RadialPrism_3D_i( PortableServer::POA_ptr thePOA,
-                               int                     theStudyId,
                                ::SMESH_Gen*            theGenImpl );
 
   // Destructor
index 6067de55bd7116ce39f241a40dbdfb2cb1742a9d..7b4048662ec682fe71197117b45b25ab1952af9c 100644 (file)
@@ -48,12 +48,10 @@ using namespace std;
 
 StdMeshers_ProjectionSource1D_i::StdMeshers_ProjectionSource1D_i
 ( PortableServer::POA_ptr thePOA,
-  int                     theStudyId,
   ::SMESH_Gen*            theGenImpl ) : SALOME::GenericObj_i( thePOA ), 
                                          SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_ProjectionSource1D( theGenImpl->GetANewId(),
-                                                    theStudyId,
                                                     theGenImpl );
 }
 
index 2a818f201baebf77112db24eafc93f114215ad4d..024ccb63425dbd1ff7b1adf78ca86397d2997b52 100644 (file)
@@ -52,7 +52,6 @@ class StdMeshers_ProjectionSource1D_i:
 public:
   // Constructor
   StdMeshers_ProjectionSource1D_i( PortableServer::POA_ptr thePOA,
-                                   int                     theStudyId,
                                    ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_ProjectionSource1D_i();
index 369cc29dfee7cdd46bb10df40e91c1501715443c..ff036460353ccfe8ef201c736a13fe56b159ae29 100644 (file)
@@ -48,12 +48,10 @@ using namespace std;
 
 StdMeshers_ProjectionSource2D_i::StdMeshers_ProjectionSource2D_i
 ( PortableServer::POA_ptr thePOA,
-  int                     theStudyId,
   ::SMESH_Gen*            theGenImpl ) : SALOME::GenericObj_i( thePOA ), 
                                          SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_ProjectionSource2D( theGenImpl->GetANewId(),
-                                                    theStudyId,
                                                     theGenImpl );
 }
 
index eb929dc49a4b64d09ef18d3443dc755ee7ae2a13..add3b78ff8e3a8a9878116e022d0fe50961f4514 100644 (file)
@@ -52,7 +52,6 @@ class StdMeshers_ProjectionSource2D_i:
 public:
   // Constructor
   StdMeshers_ProjectionSource2D_i( PortableServer::POA_ptr thePOA,
-                                   int                     theStudyId,
                                    ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_ProjectionSource2D_i();
index 195fafc656e29e7d1f4f836369980cce6f16e28d..062602d89f4f2dce0f7a8db94a482b313f0cb0b8 100644 (file)
@@ -48,12 +48,10 @@ using namespace std;
 
 StdMeshers_ProjectionSource3D_i::StdMeshers_ProjectionSource3D_i
 ( PortableServer::POA_ptr thePOA,
-  int                     theStudyId,
   ::SMESH_Gen*            theGenImpl ) : SALOME::GenericObj_i( thePOA ), 
                                          SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_ProjectionSource3D( theGenImpl->GetANewId(),
-                                                    theStudyId,
                                                     theGenImpl );
 }
 
index 69d658827ce9faba54a0dc8f64fc89db0f8373e3..47458062ea1321fe83beffb55b90762c0bc83bc4 100644 (file)
@@ -53,7 +53,6 @@ class StdMeshers_ProjectionSource3D_i:
 public:
   // Constructor
   StdMeshers_ProjectionSource3D_i( PortableServer::POA_ptr thePOA,
-                                   int                     theStudyId,
                                    ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_ProjectionSource3D_i();
index 515b7e85b92bbd065b95c57801e353f35ca53b31..d9b135b0bc71d23dc25f3ca001f341de73b8a369 100644 (file)
@@ -40,7 +40,6 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Projection_3D_i::StdMeshers_Projection_3D_i( PortableServer::POA_ptr thePOA,
-                                                        int                     theStudyId,
                                                         ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -48,8 +47,7 @@ StdMeshers_Projection_3D_i::StdMeshers_Projection_3D_i( PortableServer::POA_ptr
        SMESH_3D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Projection_3D( theGenImpl->GetANewId(),
-                                    theStudyId,
-                                    theGenImpl );
+                                               theGenImpl );
 }
 //-----------------------------------------------------------------------------
 
@@ -82,7 +80,6 @@ CORBA::Boolean StdMeshers_Projection_3D_i::IsApplicable(const TopoDS_Shape &S,
 //=============================================================================
 
 StdMeshers_Projection_2D_i::StdMeshers_Projection_2D_i( PortableServer::POA_ptr thePOA,
-                                                        int                     theStudyId,
                                                         ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -90,8 +87,7 @@ StdMeshers_Projection_2D_i::StdMeshers_Projection_2D_i( PortableServer::POA_ptr
        SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Projection_2D( theGenImpl->GetANewId(),
-                                    theStudyId,
-                                    theGenImpl );
+                                               theGenImpl );
 }
 //-----------------------------------------------------------------------------
 
@@ -113,7 +109,6 @@ StdMeshers_Projection_2D_i::~StdMeshers_Projection_2D_i()
 //=============================================================================
 
 StdMeshers_Projection_1D2D_i::StdMeshers_Projection_1D2D_i( PortableServer::POA_ptr thePOA,
-                                                            int                     theStudyId,
                                                             ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ),
        SMESH_Hypothesis_i( thePOA ),
@@ -121,7 +116,6 @@ StdMeshers_Projection_1D2D_i::StdMeshers_Projection_1D2D_i( PortableServer::POA_
        SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Projection_1D2D( theGenImpl->GetANewId(),
-                                                 theStudyId,
                                                  theGenImpl );
 }
 //-----------------------------------------------------------------------------
@@ -144,7 +138,6 @@ StdMeshers_Projection_1D2D_i::~StdMeshers_Projection_1D2D_i()
 //=============================================================================
 
 StdMeshers_Projection_1D_i::StdMeshers_Projection_1D_i( PortableServer::POA_ptr thePOA,
-                                                        int                     theStudyId,
                                                         ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -152,8 +145,7 @@ StdMeshers_Projection_1D_i::StdMeshers_Projection_1D_i( PortableServer::POA_ptr
        SMESH_1D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Projection_1D( theGenImpl->GetANewId(),
-                                    theStudyId,
-                                    theGenImpl );
+                                               theGenImpl );
 }
 //-----------------------------------------------------------------------------
 
index d56f02c512e9d30ca8b9e8da7e91a1ba48f68cad..1aa53b802413e76e899ad71426e1fa316f109514 100644 (file)
@@ -50,7 +50,6 @@ class StdMeshers_Projection_3D_i:
 public:
   // Constructor
   StdMeshers_Projection_3D_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
                               ::SMESH_Gen*            theGenImpl );
 
   // Destructor
@@ -74,7 +73,6 @@ class StdMeshers_Projection_2D_i:
 public:
   // Constructor
   StdMeshers_Projection_2D_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
                               ::SMESH_Gen*            theGenImpl );
 
   // Destructor
@@ -95,7 +93,6 @@ class StdMeshers_Projection_1D2D_i:
 public:
   // Constructor
   StdMeshers_Projection_1D2D_i( PortableServer::POA_ptr thePOA,
-                                int                     theStudyId,
                                 ::SMESH_Gen*            theGenImpl );
 
   // Destructor
@@ -116,7 +113,6 @@ class StdMeshers_Projection_1D_i:
 public:
   // Constructor
   StdMeshers_Projection_1D_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
                               ::SMESH_Gen*            theGenImpl );
 
   // Destructor
index 6d086c514902089c61e7206cc5d74b922025c03b..bbdef0825b779b7560c5a8d981e61641b8bf7c81 100644 (file)
@@ -40,13 +40,11 @@ using namespace std;
  */
 //=============================================================================
 StdMeshers_Propagation_i::StdMeshers_Propagation_i (PortableServer::POA_ptr thePOA,
-                                                    int                     theStudyId,
                                                     ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Propagation(theGenImpl->GetANewId(),
-                                            theStudyId,
                                             theGenImpl);
 }
 
@@ -73,13 +71,11 @@ CORBA::Boolean StdMeshers_Propagation_i::IsDimSupported( SMESH::Dimension type )
 //=============================================================================
 StdMeshers_PropagOfDistribution_i::
 StdMeshers_PropagOfDistribution_i (PortableServer::POA_ptr thePOA,
-                                   int                     theStudyId,
                                    ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_PropagOfDistribution(theGenImpl->GetANewId(),
-                                                     theStudyId,
                                                      theGenImpl);
 }
 
index 00e07de4ca24d47c24c99a37979110d0c547c2ff..e2696dd3a112b0e01a463220790ec3346d46a885 100644 (file)
@@ -48,7 +48,6 @@ class STDMESHERS_I_EXPORT StdMeshers_Propagation_i:
 public:
   // Constructor
   StdMeshers_Propagation_i (PortableServer::POA_ptr thePOA,
-                            int                     theStudyId,
                             ::SMESH_Gen*            theGenImpl);
   
   // Verify whether hypothesis supports given entity type 
@@ -66,7 +65,6 @@ class STDMESHERS_I_EXPORT StdMeshers_PropagOfDistribution_i:
 public:
   // Constructor
   StdMeshers_PropagOfDistribution_i (PortableServer::POA_ptr thePOA,
-                                     int                     theStudyId,
                                      ::SMESH_Gen*            theGenImpl);
   
   // Verify whether hypothesis supports given entity type 
index 1681544faff61bd86766d6c4b0e51985b121377c..78b2841e1575a4d7a3f56809f3faaa3fe1a0ad2a 100644 (file)
@@ -45,13 +45,11 @@ using namespace std;
 
 StdMeshers_QuadrangleParams_i::StdMeshers_QuadrangleParams_i
                                           (PortableServer::POA_ptr thePOA,
-                                           int                     theStudyId,
                                            ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_QuadrangleParams(theGenImpl->GetANewId(),
-                                                 theStudyId,
                                                  theGenImpl);
 }
 
index 12c209f409537388be870e10de151b7ecdcd63d5..227dd86af497611380e676cfdaad148e32878931 100644 (file)
@@ -41,7 +41,6 @@ class STDMESHERS_I_EXPORT StdMeshers_QuadrangleParams_i:
 public:
   // Constructor
   StdMeshers_QuadrangleParams_i (PortableServer::POA_ptr thePOA,
-                                 int                     theStudyId,
                                  ::SMESH_Gen*            theGenImpl);
   // Destructor
   virtual ~StdMeshers_QuadrangleParams_i();
index 9fe0b11cbe69737c7c5b6726b4e0c7cfd44da67b..4752a3524835b11967f2b5b3771aa6d55e8a4def 100644 (file)
@@ -47,12 +47,10 @@ using namespace std;
 
 StdMeshers_QuadranglePreference_i::StdMeshers_QuadranglePreference_i
 ( PortableServer::POA_ptr thePOA,
-  int                     theStudyId,
   ::SMESH_Gen*            theGenImpl ): SALOME::GenericObj_i( thePOA ), 
                                         SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_QuadranglePreference( theGenImpl->GetANewId(),
-                                                      theStudyId,
                                                       theGenImpl );
 }
 
index a60e976bd3675c8acf42a713165286f36c1debd0..bce152a6949104b887dd2b5e15ed14af25b7854c 100644 (file)
@@ -49,7 +49,6 @@ class STDMESHERS_I_EXPORT StdMeshers_QuadranglePreference_i:
 public:
   // Constructor
   StdMeshers_QuadranglePreference_i( PortableServer::POA_ptr thePOA,
-                                     int                     theStudyId,
                                      ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_QuadranglePreference_i();
index 0aa84775a6be632e7971a0f51b77d2ba92b84536..c800dabffa1e4bedc7b41fe2cc4b1ace83329cb3 100644 (file)
@@ -45,7 +45,6 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Quadrangle_2D_i::StdMeshers_Quadrangle_2D_i( PortableServer::POA_ptr thePOA,
-                                                        int                     theStudyId,
                                                         ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA ),
@@ -53,7 +52,6 @@ StdMeshers_Quadrangle_2D_i::StdMeshers_Quadrangle_2D_i( PortableServer::POA_ptr
     SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Quadrangle_2D( theGenImpl->GetANewId(),
-                                               theStudyId,
                                                theGenImpl );
 }
 
@@ -107,7 +105,6 @@ CORBA::Boolean StdMeshers_Quadrangle_2D_i::IsApplicable( const TopoDS_Shape &S,
 
 StdMeshers_QuadFromMedialAxis_1D2D_i::
 StdMeshers_QuadFromMedialAxis_1D2D_i( PortableServer::POA_ptr thePOA,
-                                      int                     theStudyId,
                                       ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA ),
@@ -115,7 +112,6 @@ StdMeshers_QuadFromMedialAxis_1D2D_i( PortableServer::POA_ptr thePOA,
     SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_QuadFromMedialAxis_1D2D( theGenImpl->GetANewId(),
-                                                         theStudyId,
                                                          theGenImpl );
 }
 
index 4cdc9017e426711b8bc3437e411dd07a6ba347f4..83ff12d30f51f4d25678bb24797e99f1c3740bf7 100644 (file)
@@ -49,7 +49,6 @@ class STDMESHERS_I_EXPORT StdMeshers_Quadrangle_2D_i:
  public:
   // Constructor
   StdMeshers_Quadrangle_2D_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
                               ::SMESH_Gen*            theGenImpl );
 
   // Destructor
@@ -72,7 +71,6 @@ class STDMESHERS_I_EXPORT StdMeshers_QuadFromMedialAxis_1D2D_i:
  public:
   // Constructor
   StdMeshers_QuadFromMedialAxis_1D2D_i( PortableServer::POA_ptr thePOA,
-                                        int                     theStudyId,
                                         ::SMESH_Gen*            theGenImpl );
 
   // Destructor
index 24dd38aa377f75f6c9cc80a570ee319c0ac1991a..5012554125f4fd79ce69087ef9d4fea50de37ece 100644 (file)
@@ -48,12 +48,10 @@ using namespace std;
 
 StdMeshers_QuadraticMesh_i::StdMeshers_QuadraticMesh_i
 ( PortableServer::POA_ptr thePOA,
-  int                     theStudyId,
   ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_QuadraticMesh( theGenImpl->GetANewId(),
-                                               theStudyId,
                                                theGenImpl );
 }
 
index 785934aef3237ece7cc0ea972d2b99dc20f9e036..8788167434933d77a315005751ca54f339db3a9a 100644 (file)
@@ -50,7 +50,6 @@ class STDMESHERS_I_EXPORT StdMeshers_QuadraticMesh_i:
 public:
   // Constructor
   StdMeshers_QuadraticMesh_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
                               ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_QuadraticMesh_i();
index 1bb991a8bbb17523543f70c570d5ca68bd8ed0a6..889d86505d526156daac598c71244aff3e35f901 100644 (file)
@@ -38,7 +38,6 @@ using namespace std;
 
 StdMeshers_RadialQuadrangle_1D2D_i::StdMeshers_RadialQuadrangle_1D2D_i
                                            (PortableServer::POA_ptr thePOA,
-                                            int                     theStudyId,
                                             ::SMESH_Gen*            theGenImpl)
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -46,7 +45,6 @@ StdMeshers_RadialQuadrangle_1D2D_i::StdMeshers_RadialQuadrangle_1D2D_i
        SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_RadialQuadrangle_1D2D(theGenImpl->GetANewId(),
-                                                      theStudyId,
                                                       theGenImpl );
 }
 
index 63242f0f6326b55e334a79e047f79186b4476bc3..24944087f8840259de13820e09dc184bc7828ecf 100644 (file)
@@ -39,7 +39,6 @@ class StdMeshers_RadialQuadrangle_1D2D_i:
 public:
   // Constructor
   StdMeshers_RadialQuadrangle_1D2D_i( PortableServer::POA_ptr thePOA,
-                                      int                     theStudyId,
                                       ::SMESH_Gen*            theGenImpl );
 
   // Destructor
index 02f83b3c2f881644c4000a07b1803450016b2af6..05dd3c2ed5f63f2e4fd1fa88430ed30058614793 100644 (file)
@@ -43,7 +43,6 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i( PortableServer::POA_ptr thePOA,
-                                                  int                     theStudyId,
                                                   ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -51,7 +50,6 @@ StdMeshers_Regular_1D_i::StdMeshers_Regular_1D_i( PortableServer::POA_ptr thePOA
        SMESH_1D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_Regular_1D( theGenImpl->GetANewId(),
-                                            theStudyId,
                                             theGenImpl );
 }
 
index 7b83fa961c58f111cb2d7f7196c2e5a5a2e38b2f..8fd4a83e470de29e1fd31d86379dfb635d390700 100644 (file)
@@ -47,8 +47,7 @@ class STDMESHERS_I_EXPORT StdMeshers_Regular_1D_i:
 public:
   // Constructor
   StdMeshers_Regular_1D_i( PortableServer::POA_ptr thePOA,
-                      int                     theStudyId,
-                      ::SMESH_Gen*            theGenImpl );
+                           ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_Regular_1D_i();
  
index 57cbb7071924dfb4aa6149627820d1d837b0f099..9ddfea9c1cc0a36b4cf3ac2d62d294d5f26e720f 100644 (file)
@@ -44,7 +44,6 @@ using namespace std;
 
 StdMeshers_SegmentAroundVertex_0D_i::StdMeshers_SegmentAroundVertex_0D_i
                                                ( PortableServer::POA_ptr thePOA,
-                                                 int                     theStudyId,
                                                  ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -52,7 +51,6 @@ StdMeshers_SegmentAroundVertex_0D_i::StdMeshers_SegmentAroundVertex_0D_i
        SMESH_0D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_SegmentAroundVertex_0D( theGenImpl->GetANewId(),
-                                                        theStudyId,
                                                         theGenImpl );
 }
 //-----------------------------------------------------------------------------
index dea48624a844317f5e32416d6f0f9634178064f5..daba7fde374de23ca2bc2c0f6f8f2de2be20f345 100644 (file)
@@ -43,8 +43,7 @@ class StdMeshers_SegmentAroundVertex_0D_i:
 public:
   // Constructor
   StdMeshers_SegmentAroundVertex_0D_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
-                              ::SMESH_Gen*            theGenImpl );
+                                       ::SMESH_Gen*            theGenImpl );
 
   // Destructor
   virtual ~StdMeshers_SegmentAroundVertex_0D_i();
index 5801115bb8c81ddf1e3853d80b2ebce576255658..b8f52e7fe84e925db42bd916fae5a5847e97a1ec 100644 (file)
@@ -45,13 +45,11 @@ using namespace std;
 
 StdMeshers_SegmentLengthAroundVertex_i::StdMeshers_SegmentLengthAroundVertex_i
                                                     ( PortableServer::POA_ptr thePOA,
-                                                      int                     theStudyId,
                                                       ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_SegmentLengthAroundVertex( theGenImpl->GetANewId(),
-                                                           theStudyId,
                                                            theGenImpl );
 }
 
index c61971f020bf4221fa95168077b40f0da27c7347..572ed5c81b4d9e4e72e2546d5456e13ebcca5720 100644 (file)
@@ -46,7 +46,6 @@ class StdMeshers_SegmentLengthAroundVertex_i:
 public:
   // Constructor
   StdMeshers_SegmentLengthAroundVertex_i( PortableServer::POA_ptr thePOA,
-                                          int                     theStudyId,
                                           ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_SegmentLengthAroundVertex_i();
index 8d1edd67f317314a1eb74554bc5b9307f7f7ba75..fdceff6a438d0a67705552cdf05e13e40dc2341f 100644 (file)
@@ -47,14 +47,12 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_StartEndLength_i::StdMeshers_StartEndLength_i( PortableServer::POA_ptr thePOA,
-                                                         int                     theStudyId,
-                                                         ::SMESH_Gen*            theGenImpl )
+                                                          ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_StartEndLength( theGenImpl->GetANewId(),
-                                               theStudyId,
-                                               theGenImpl );
+                                                theGenImpl );
 }
 
 //=============================================================================
index 9a9f3a17ba431901ca259cae409d8d86508ee946..50cd8917bd33887c9f1ecf72282ecb67d5770e94 100644 (file)
@@ -49,7 +49,6 @@ class STDMESHERS_I_EXPORT StdMeshers_StartEndLength_i:
 public:
   // Constructor
   StdMeshers_StartEndLength_i(PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
                               ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_StartEndLength_i();
index ce339913d6a16898b4dc6fdac2f65f6d77cbdb81..57c4cde50cdd9c16a4c38aaa73c620ece9802045 100644 (file)
@@ -38,7 +38,6 @@
 
 StdMeshers_UseExisting_1D_i::StdMeshers_UseExisting_1D_i
                                                ( PortableServer::POA_ptr thePOA,
-                                                 int                     theStudyId,
                                                  ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -46,7 +45,6 @@ StdMeshers_UseExisting_1D_i::StdMeshers_UseExisting_1D_i
        SMESH_1D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_UseExisting_1D( theGenImpl->GetANewId(),
-                                                theStudyId,
                                                 theGenImpl );
 }
 //-----------------------------------------------------------------------------
@@ -70,7 +68,6 @@ StdMeshers_UseExisting_1D_i::~StdMeshers_UseExisting_1D_i()
 
 StdMeshers_UseExisting_2D_i::StdMeshers_UseExisting_2D_i
                                                ( PortableServer::POA_ptr thePOA,
-                                                 int                     theStudyId,
                                                  ::SMESH_Gen*            theGenImpl )
      : SALOME::GenericObj_i( thePOA ), 
        SMESH_Hypothesis_i( thePOA ), 
@@ -78,7 +75,6 @@ StdMeshers_UseExisting_2D_i::StdMeshers_UseExisting_2D_i
        SMESH_2D_Algo_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_UseExisting_2D( theGenImpl->GetANewId(),
-                                                theStudyId,
                                                 theGenImpl );
 }
 //-----------------------------------------------------------------------------
index 69f1d337dbc4763800778c9472d2f84ec43b1779..fe91a33c5747baadb4e5195ccf56663bff1bc876 100644 (file)
@@ -46,7 +46,6 @@ class StdMeshers_UseExisting_1D_i:
 public:
   // Constructor
   StdMeshers_UseExisting_1D_i( PortableServer::POA_ptr thePOA,
-                               int                     theStudyId,
                                ::SMESH_Gen*            theGenImpl );
 
   // Destructor
@@ -63,7 +62,6 @@ class StdMeshers_UseExisting_2D_i:
 public:
   // Constructor
   StdMeshers_UseExisting_2D_i( PortableServer::POA_ptr thePOA,
-                               int                     theStudyId,
                                ::SMESH_Gen*            theGenImpl );
 
   // Destructor
index fb0bbbcfd0e1c470af5c4da19ebac8387cb6fd7d..638d03d9522d378dd9a86f077b3b45b7ec09aac5 100644 (file)
@@ -47,13 +47,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_ViscousLayers2D_i::StdMeshers_ViscousLayers2D_i( PortableServer::POA_ptr thePOA,
-                                                            int                     theStudyId,
                                                             ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ),
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_ViscousLayers2D( theGenImpl->GetANewId(),
-                                                 theStudyId,
                                                  theGenImpl );
 }
 
index e13d2a905feab851c116317e714ff4c56e23d470..0b28e8597a42b6f57a7fbbe3673a2a08e5467057 100644 (file)
@@ -43,8 +43,7 @@ class STDMESHERS_I_EXPORT StdMeshers_ViscousLayers2D_i:
  public:
   // Constructor
   StdMeshers_ViscousLayers2D_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
-                              ::SMESH_Gen*            theGenImpl );
+                                ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_ViscousLayers2D_i();
 
index ee39c26da774a0b39ea405dacbd9725e1a9f0a43..fc06bfdb39727df353f0f0b5ff953a629080b5c1 100644 (file)
@@ -48,13 +48,11 @@ using namespace std;
 //=============================================================================
 
 StdMeshers_ViscousLayers_i::StdMeshers_ViscousLayers_i( PortableServer::POA_ptr thePOA,
-                                                        int                     theStudyId,
                                                         ::SMESH_Gen*            theGenImpl )
   : SALOME::GenericObj_i( thePOA ), 
     SMESH_Hypothesis_i( thePOA )
 {
   myBaseImpl = new ::StdMeshers_ViscousLayers( theGenImpl->GetANewId(),
-                                               theStudyId,
                                                theGenImpl );
 }
 
index fe6bef741f341fdda77c6cc919a61ef6f12df9c0..19f5835b0232abdc8d10e1b3000dcef6f6d2db0f 100644 (file)
@@ -43,7 +43,6 @@ class STDMESHERS_I_EXPORT StdMeshers_ViscousLayers_i:
  public:
   // Constructor
   StdMeshers_ViscousLayers_i( PortableServer::POA_ptr thePOA,
-                              int                     theStudyId,
                               ::SMESH_Gen*            theGenImpl );
   // Destructor
   virtual ~StdMeshers_ViscousLayers_i();
index 97b28afcfc23d2f14d26aa19f5f07ab741628ef5..34c5db54123f9fc00aad9fafbccd049d4e794cbc 100644 (file)
@@ -113,11 +113,10 @@ class QuadrangleParamsCreator : public StdHypothesisCreator_i<StdMeshers_Quadran
 {
 public:
   virtual SMESH_Hypothesis_i* Create (PortableServer::POA_ptr thePOA,
-                                      int                     theStudyId,
                                       ::SMESH_Gen*            theGenImpl)
   {
     StdMeshers_QuadrangleParams_i* h =
-      new StdMeshers_QuadrangleParams_i( thePOA, theStudyId, theGenImpl);
+      new StdMeshers_QuadrangleParams_i( thePOA, theGenImpl);
     h->SetQuadType( TYPE );
     return h;
   }
index e7a1d5ddd3d178f0ab283397ed94b348ae928c00..5bcb15973aa114edd49d4ba192061fedf7e54e85 100644 (file)
@@ -157,13 +157,12 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     import SMESH
     from salome.kernel import studyedit
     from salome.smesh import smeshBuilder
-    smesh = smeshBuilder.New(salome.myStudy)
+    smesh = smeshBuilder.New()
     
     if not os.path.isfile(self.fichierOut):
       QMessageBox.warning(self, "Compute", "Result file "+self.fichierOut+" not found")
 
-    maStudy=studyedit.getActiveStudy()
-    smesh.SetCurrentStudy(maStudy)
+    maStudy=salome.myStudy
     (outputMesh, status) = smesh.CreateMeshesFromGMF(self.fichierOut)
     name=str(self.LE_MeshSmesh.text())
     initialMeshFile=None
@@ -205,7 +204,7 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     newLink=monStudyBuilder.NewObject(SOMesh)
     monStudyBuilder.Addreference(newLink, newStudyIter)
 
-    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(False)
+    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser()
     self.num+=1
     return True
 
@@ -250,7 +249,7 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     #myStudy.IsStudyLocked()
     myComponent = myStudy.FindComponent(name)
     if myComponent == None:
-      print "myComponent not found, create"
+      print("myComponent not found, create")
       myComponent = myBuilder.NewComponent(name)
     AName = myBuilder.FindOrCreateAttribute(myComponent, "AttributeName")
     AName.SetValue(name)
@@ -263,9 +262,9 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     ACmt = myBuilder.FindOrCreateAttribute(myObject, "AttributeComment")
     ACmt.SetValue(datai)
 
-    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(False)
+    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser()
     self.num += 1
-    if verbose: print("save %s in Object Browser done: %s\n%s" % (name, myObject.GetID(), datai))
+    if verbose: print(("save %s in Object Browser done: %s\n%s" % (name, myObject.GetID(), datai)))
     return True
 
   def PBSaveHypPressed(self):
@@ -281,10 +280,9 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     QMessageBox.warning(self, "Save", "waiting for fix: Object Browser will not display hypothesis")
     
     if verbose: print("save hypothesis in Object Browser")
-    smesh = smeshBuilder.New(salome.myStudy)
+    smesh = smeshBuilder.New()
 
-    maStudy=studyedit.getActiveStudy()
-    smesh.SetCurrentStudy(maStudy)
+    maStudy=salome.myStudy
 
     self.editor = studyedit.getStudyEditor()
     moduleEntry=self.editor.findOrCreateComponent("SMESH","SMESH")
@@ -307,9 +305,9 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     notebook.set("MGCleaner_%i" % self.num, data)
     """
 
-    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(False)
+    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser()
     self.num += 1
-    if verbose: print("save %s in Object Browser done:\n%s" % (name, data))
+    if verbose: print(("save %s in Object Browser done:\n%s" % (name, data)))
     return True
 
   def SP_toStr(self, widget):
@@ -456,7 +454,7 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     if fd.exec_():
       infile = fd.selectedFiles()[0]
       self.LE_MeshFile.setText(infile)
-      self.fichierIn=unicode(infile).encode("latin-1")
+      self.fichierIn=str(infile).encode("latin-1")
       self.MeshIn=""
       self.LE_MeshSmesh.setText("")
 
@@ -465,7 +463,7 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     if fd.exec_():
       infile = fd.selectedFiles()[0]
       self.LE_ParamsFile.setText(infile)
-      self.paramsFile=unicode(infile).encode("latin-1")
+      self.paramsFile=str(infile).encode("latin-1")
 
   def meshFileNameChanged(self):
     self.fichierIn=str(self.LE_MeshFile.text())
@@ -497,7 +495,7 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     from salome.smesh.smeshstudytools import SMeshStudyTools
     from salome.gui import helper as guihelper
     from salome.smesh import smeshBuilder
-    smesh = smeshBuilder.New(salome.myStudy)
+    smesh = smeshBuilder.New()
 
     mySObject, myEntry = guihelper.getSObjectSelected()
     if CORBA.is_nil(mySObject) or mySObject==None:
@@ -587,7 +585,7 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     if not self.CB_ComputedOverlapDistance.isChecked(): #computed default
       self.commande+=" --overlap_distance " + self.SP_toStr(self.SP_OverlapDistance)
     self.commande+=" --overlap_angle " + str(self.SP_OverlapAngle.value())
-    if verbose: print("INFO: MGCCleaner command:\n  %s" % self.commande)
+    if verbose: print(("INFO: MGCCleaner command:\n  %s" % self.commande))
     return True
 
   def clean(self):
@@ -642,7 +640,7 @@ def TEST_standalone():
   import SMESH
   from salome.kernel import studyedit
   salome.salome_init()
-  maStudy=studyedit.getActiveStudy()
+  maStudy=salome.myStudy
   #etc...a mano...
 
 #
index 01c53069d800ac41fd37ef4e0ba6393f8e8ed5de..99e322d3111813d8c56f8c520653485f48c585e1 100644 (file)
@@ -91,7 +91,7 @@ class MGCleanerMonViewText(Ui_ViewExe, QDialog):
           f.write(cmds)
         self.make_executable(nomFichier)
         
-        if verbose: print("INFO: MGCleaner launch script file: %s" % nomFichier)
+        if verbose: print(("INFO: MGCleaner launch script file: %s" % nomFichier))
         
         self.monExe.start(nomFichier)
         self.monExe.closeWriteChannel()
@@ -108,23 +108,23 @@ class MGCleanerMonViewText(Ui_ViewExe, QDialog):
         savedir=os.environ['HOME']
         fn = QFileDialog.getSaveFileName(None, self.trUtf8("Save File"),savedir)
         if fn.isNull() : return
-        ulfile = os.path.abspath(unicode(fn))
+        ulfile = os.path.abspath(str(fn))
         try:
            f = open(fn, 'wb')
            f.write(str(self.TB_Exe.toPlainText()))
            f.close()
-        except IOError, why:
+        except IOError as why:
            QMessageBox.critical(self, self.trUtf8('Save File'),
                 self.trUtf8('The file <b>%1</b> could not be saved.<br>Reason: %2')
-                    .arg(unicode(fn)).arg(str(why)))
+                    .arg(str(fn)).arg(str(why)))
 
     def readFromStdErr(self):
         a=self.monExe.readAllStandardError()
-        self.TB_Exe.append(unicode(a.data()))
+        self.TB_Exe.append(str(a.data()))
 
     def readFromStdOut(self) :
         a=self.monExe.readAllStandardOutput()
-        aa=unicode(a.data())
+        aa=str(a.data())
         self.TB_Exe.append(aa)
     
     def finished(self):
index 89c194f591ab6edab32c5e1afc260aba6965658c..b48777839125a7cb31b0263ec287812a99ff8aed 100644 (file)
@@ -22,9 +22,8 @@
 # if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
 
 def MGCleanerLct(context):
-  # get context study, studyId, salomeGui
+  # get context study, salomeGui
   study = context.study
-  studyId = context.studyId
   sg = context.sg
   
   import os
index 612f4f76955493718008a8835d14fb2a01f6b8aa..abacc092e65a21b72230610186ce4fc1fd7922a5 100755 (executable)
@@ -107,7 +107,7 @@ SRVMesh = PublishGroups()
 
 RealLocalMeshing = Bloc[0][0].GeoPar[1][0]/Bloc[0][0].DirectionalMeshParams[0]
 ExtrusionAngle = 2. * math.asin(RealLocalMeshing/(2*R))*180./math.pi
-print "\nThe mesh will be revolved with an angle of :",ExtrusionAngle
+print("\nThe mesh will be revolved with an angle of :",ExtrusionAngle)
 
 RevolveMesh(SRVMesh, Center=[R+0.01,0,0], Direction=[0,1,0], AngleDeg=ExtrusionAngle, Scale=0.001)
 
index c9b6cca99580ccaac2896912ded272420e1ad11d..e0d7de6aca458c67489d55e602b2fa600631aeb6 100644 (file)
 #
 
 def Message (code) :
-       import sys
-       MessageString = { 1 : lambda x: "Successfully created \n",
-                          2 : lambda x: "Fatal: Incorrect input \n",
-                          3 : lambda x: "Fatal: Overlapping objects detected \n",
-                          4 : lambda x: "Fatal: Incompatible object type with neighbouring objects" }[code](str(code))
-       print MessageString
-       #if code > 1 : sys.exit()
-       return 1
-
+    import sys
+    MessageString = { 1 : lambda x: "Successfully created \n",
+                      2 : lambda x: "Fatal: Incorrect input \n",
+                      3 : lambda x: "Fatal: Overlapping objects detected \n",
+                      4 : lambda x: "Fatal: Incompatible object type with neighbouring objects" }[code](str(code))
+    print(MessageString)
+    #if code > 1 : sys.exit()
+    return 1
index 4709c34de33c7c8ffb8ea0977fbd9619fd2bc847..cd4041a183dd428e636f56abc1995660038a59d3 100644 (file)
 
 
 
-import sys, math, commands
-CWD = commands.getoutput('pwd')
+import sys, math, subprocess
+CWD = subprocess.getoutput('pwd')
 sys.path.append(CWD)
 
 from MacObject import *
 import Config, GenFunctions
 
-def CentralUnrefine (X0 , Y0 , DX , DY , Orientation, **args ) : 
-
-       DirPar =     {'SN' : lambda : ['NW', 'NE', 'EW', 'NW', 'SN', 'SN', 'NE', 'WE'],
-                     'NS' : lambda : ['SE', 'SW', 'WE', 'SE', 'NS', 'NS', 'SW', 'EW'],
-                     'EW' : lambda : ['NW', 'SW', 'SN', 'NW', 'EW', 'EW', 'SW', 'NS'],
-                     'WE' : lambda : ['SE', 'NE', 'NS', 'SE', 'WE', 'WE', 'NE', 'SN'], }[Orientation]()
-
-       CoefVer =   {'SN' : lambda :  1.,
-                    'NS' : lambda : -1.,
-                    'EW' : lambda :  0.,
-                    'WE' : lambda :  0., }[Orientation]()
-
-       CoefHor =   {'SN' : lambda :  0.,
-                    'NS' : lambda :  0.,
-                    'EW' : lambda : -1.,
-                    'WE' : lambda :  1., }[Orientation]()
-
-
-       MacObject('CompBoxF',[(X0+CoefHor*DX/2,Y0+CoefVer*DY/2),(DX,DY)],['auto'],publish=0)
-       ToLook1 = {'SN' : lambda : 2,
-                  'NS' : lambda : 3,
-                  'EW' : lambda : 1,
-                  'WE' : lambda : 0, }[Orientation]()
-
-       ToLook2 = {'SN' : lambda : 0,
-                  'NS' : lambda : 0,
-                  'EW' : lambda : 2,
-                  'WE' : lambda : 2, }[Orientation]()
-                   
-       ToLook3 = {'SN' : lambda : [0,1,2,3],
-                  'NS' : lambda : [1,0,3,2],
-                  'EW' : lambda : [3,2,1,0],
-                  'WE' : lambda : [2,3,0,1], }[Orientation]() 
-                                     
-        if args.__contains__('groups') :
-                GroupNames = args['groups']
-       else : GroupNames = [None, None, None, None, None, None]
-                
-       ExistingSegments = Config.ListObj[-1].DirectionalMeshParams[ToLook1]
-       ObjIDs = Config.Connections[-1][ToLook1]
-        RemoveLastObj()
-        
-       ExtensionSegments = math.ceil(ExistingSegments/12.)*12.
-       Dmin = 1.E50
-       Dmax = -1.E50
-       for ObjID in ObjIDs : 
-               Boundaries = Config.ListObj[ObjID].Boundaries()
-               if Boundaries[ToLook2] < Dmin : Dmin = Boundaries[ToLook2]
-               if Boundaries[ToLook2+1] > Dmax : Dmax = Boundaries[ToLook2+1]
-        dx = 0                    
-       if ExtensionSegments > ExistingSegments :
-               dn = (ExtensionSegments-ExistingSegments)/2.
-               dx = dn*(Dmax-Dmin)/ExistingSegments
-               #MacObject('CompBoxF',[(X0-CoefHor*dx/2+CoefVer*(-X0+Dmin-dx/2),Y0-CoefVer*dx/2+CoefHor*(-Y0+Dmin-dx/2)),(dx,dx)],[(dn,dn)],publish=0)
-               #MacObject('CompBoxF',[(X0-CoefHor*dx/2+CoefVer*(-X0+Dmax+dx/2),Y0-CoefVer*dx/2+CoefHor*(-Y0+Dmax+dx/2)),(dx,dx)],[(dn,dn)],publish=0)
-        
-        BoxSide = (Dmax-Dmin+2*dx)/2.
-        
-        Obj = []
-        Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(BoxSide/2)+CoefVer*(-BoxSide/2),Y0+CoefVer*(BoxSide/2)+CoefHor*(-BoxSide/2)),(BoxSide,BoxSide)],[int(ExtensionSegments/6),DirPar[0]],groups=GroupArray(ToLook3[0],GroupNames[0])))       
-        Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(BoxSide/2)+CoefVer*(BoxSide/2),Y0+CoefVer*(BoxSide/2)+CoefHor*(BoxSide/2)),(BoxSide,BoxSide)],[int(ExtensionSegments/6),DirPar[1]],groups=GroupArray(ToLook3[0],GroupNames[0])))        
-
-        NLevOpt = 0
-        for NLevels in range (1,100) : 
-                DX1 = abs(CoefVer)*BoxSide*2.**(NLevels+1)+abs(CoefHor)*BoxSide*2.**(NLevels)
-                DY1 = abs(CoefHor)*BoxSide*2.**(NLevels+1)+abs(CoefVer)*BoxSide*2.**(NLevels)
-                if DX1 > DX or DY1 > DY :
-                        NLevOpt = NLevels-1
-                        DXinner = DX1/2.
-                        DYinner = DY1/2.
-                        break
-                        
-        dummyArray = [DXinner,DYinner,DYinner,DXinner]                 
-        D1inner = dummyArray[ToLook2]           # = DXinner for SN and NS orientations
-        D2inner = dummyArray[ToLook2+1]         # = DYinner for SN and NS orientations
-         
-        dummyArray = [DX,DY,DY,DX]                 
-        D1 = dummyArray[ToLook2]                # = DX for SN and NS orientations
-        D2 = dummyArray[ToLook2+1]              # = DY for SN and NS orientations
-                       
-        if D1inner < D1 : 
-                GN0a = GroupArray(ToLook3[0],GroupNames[1])
-                GN0b = GroupArray(ToLook3[0],GroupNames[2])              
-                GN01 = GroupArray(ToLook3[0],GroupNames[1])
-                GN02 = GroupArray(ToLook3[0],GroupNames[2])
-                if D2inner < D2 : 
-                        GN10 = [None,None,None,None]
-                        GN11 = [None,None,None,None]
-                        GN20 = [None,None,None,None]
-                else : 
-                        GN10 = GroupArray(ToLook3[1],GroupNames[3])
-                        GN11 = GroupArray(ToLook3[1],GroupNames[3])
-                        GN20 = GroupArray(ToLook3[1],GroupNames[3]) 
-        else : 
-                GN0a = GroupArray(ToLook3[0],GroupNames[1])
-                GN0b = GroupArray(ToLook3[0],GroupNames[2])
-                GN01 = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]]) 
-                GN02 = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]]) 
-                if D2inner < D2 : 
-                        GN10 = GroupArray(ToLook3[2],GroupNames[4])
-                        GN11 = GroupArray(ToLook3[3],GroupNames[5])
-                        GN20 = [None,None,None,None]
-                else : 
-                        GN10 = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])
-                        GN11 = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])
-                        GN20 = GroupArray(ToLook3[1],GroupNames[3]) 
-                                              
-        for N in range (1,NLevOpt+1):
-               n=N-1
-                D = BoxSide*(2.**n)
-                if N < NLevOpt : 
-                       Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*1/2-CoefVer*3/2)  , Y0+D*(CoefVer*1/2-CoefHor*3/2) )          , (D,D)],['auto',DirPar[2]], groups=GN0a))
-                       Obj.append(MacObject('BoxAng32',[(X0+D*(CoefHor*3/2-CoefVer*3/2)  , Y0+D*(CoefVer*3/2-CoefHor*3/2) )          , (D,D)],['auto',DirPar[3]]))
-                       Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*3/2-CoefVer*1/2)  , Y0+D*(CoefVer*3/2-CoefHor*1/2) )          , (D,D)],['auto',DirPar[4]]))
-                       Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*3/2+CoefVer*1/2)  , Y0+D*(CoefHor*1/2+CoefVer*3/2) )          , (D,D)],['auto',DirPar[5]]))
-                       Obj.append(MacObject('BoxAng32',[(X0+D*(CoefVer*3/2+CoefHor*3/2)  , Y0+D*(CoefVer*3/2+CoefHor*3/2) )          , (D,D)],['auto',DirPar[6]]))
-                       Obj.append(MacObject('Box42'   ,[(X0+D*(CoefVer*3/2+CoefHor*1/2)  , Y0+D*(CoefHor*3/2+CoefVer*1/2) )          , (D,D)],['auto',DirPar[7]], groups=GN0b))
-                else :
-                       Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*1/2-CoefVer*3/2)  , Y0+D*(CoefVer*1/2-CoefHor*3/2) )          , (D,D)],['auto',DirPar[2]], groups=GN01))
-                       Obj.append(MacObject('BoxAng32',[(X0+D*(CoefHor*3/2-CoefVer*3/2)  , Y0+D*(CoefVer*3/2-CoefHor*3/2) )          , (D,D)],['auto',DirPar[3]], groups=GN10))
-                       Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*3/2-CoefVer*1/2)  , Y0+D*(CoefVer*3/2-CoefHor*1/2) )          , (D,D)],['auto',DirPar[4]], groups=GN20))
-                       Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*3/2+CoefVer*1/2)  , Y0+D*(CoefHor*1/2+CoefVer*3/2) )          , (D,D)],['auto',DirPar[5]], groups=GN20))
-                       Obj.append(MacObject('BoxAng32',[(X0+D*(CoefVer*3/2+CoefHor*3/2)  , Y0+D*(CoefVer*3/2+CoefHor*3/2) )          , (D,D)],['auto',DirPar[6]], groups=GN11))
-                       Obj.append(MacObject('Box42'   ,[(X0+D*(CoefVer*3/2+CoefHor*1/2)  , Y0+D*(CoefHor*3/2+CoefVer*1/2) )          , (D,D)],['auto',DirPar[7]], groups=GN02))
-
-        
-       if CoefVer and DX>DXinner : 
-                Obj.append(MacObject('CompBoxF',[(X0-CoefVer*0.25*(DX+DXinner),Y0+CoefVer*DYinner/2),((DX-DXinner)/2,DYinner)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]])))
-                Obj.append(MacObject('CompBoxF',[(X0+CoefVer*0.25*(DX+DXinner),Y0+CoefVer*DYinner/2),((DX-DXinner)/2,DYinner)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]])))
-                if DY>DYinner : 
-                        Obj.append(MacObject('CompBoxF',[(X0-CoefVer*0.25*(DX+DXinner),Y0+CoefVer*(DY+DYinner)/2.),((DX-DXinner)/2,DY-DYinner)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])))
-                        Obj.append(MacObject('CompBoxF',[(X0+CoefVer*0.25*(DX+DXinner),Y0+CoefVer*(DY+DYinner)/2.),((DX-DXinner)/2,DY-DYinner)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])))
-                        Obj.append(MacObject('CompBoxF',[(X0,Y0+CoefVer*(DY+DYinner)/2.),(DXinner,DY-DYinner)],['auto'], groups = GroupArray(ToLook3[1],GroupNames[3])))
-        elif CoefHor and DY>DYinner : 
-                Obj.append(MacObject('CompBoxF',[(X0+CoefHor*DXinner/2,Y0-CoefHor*0.25*(DY+DYinner)),(DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]])))
-                Obj.append(MacObject('CompBoxF',[(X0+CoefHor*DXinner/2,Y0+CoefHor*0.25*(DY+DYinner)),(DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]])))
-                if DX>DXinner : 
-                        Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0-CoefHor*0.25*(DY+DYinner)),(DX-DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])))
-                        Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0+CoefHor*0.25*(DY+DYinner)),(DX-DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])))
-                        Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0),(DX-DXinner,DYinner)],['auto'], groups = GroupArray(ToLook3[1],GroupNames[3])))
-        return Obj
-
-def RemoveLastObj() : 
-        Config.ListObj = Config.ListObj[:-1]
-        Config.Connections = Config.Connections[:-1]
+def CentralUnrefine (X0 , Y0 , DX , DY , Orientation, **args ) :
+
+    DirPar =     {'SN' : lambda : ['NW', 'NE', 'EW', 'NW', 'SN', 'SN', 'NE', 'WE'],
+                  'NS' : lambda : ['SE', 'SW', 'WE', 'SE', 'NS', 'NS', 'SW', 'EW'],
+                  'EW' : lambda : ['NW', 'SW', 'SN', 'NW', 'EW', 'EW', 'SW', 'NS'],
+                  'WE' : lambda : ['SE', 'NE', 'NS', 'SE', 'WE', 'WE', 'NE', 'SN'], }[Orientation]()
+
+    CoefVer =   {'SN' : lambda :  1.,
+                 'NS' : lambda : -1.,
+                 'EW' : lambda :  0.,
+                 'WE' : lambda :  0., }[Orientation]()
+
+    CoefHor =   {'SN' : lambda :  0.,
+                 'NS' : lambda :  0.,
+                 'EW' : lambda : -1.,
+                 'WE' : lambda :  1., }[Orientation]()
+
+
+    MacObject('CompBoxF',[(X0+CoefHor*DX/2,Y0+CoefVer*DY/2),(DX,DY)],['auto'],publish=0)
+    ToLook1 = {'SN' : lambda : 2,
+               'NS' : lambda : 3,
+               'EW' : lambda : 1,
+               'WE' : lambda : 0, }[Orientation]()
+
+    ToLook2 = {'SN' : lambda : 0,
+               'NS' : lambda : 0,
+               'EW' : lambda : 2,
+               'WE' : lambda : 2, }[Orientation]()
+
+    ToLook3 = {'SN' : lambda : [0,1,2,3],
+               'NS' : lambda : [1,0,3,2],
+               'EW' : lambda : [3,2,1,0],
+               'WE' : lambda : [2,3,0,1], }[Orientation]()
+
+    if args.__contains__('groups') :
+        GroupNames = args['groups']
+    else : GroupNames = [None, None, None, None, None, None]
+
+    ExistingSegments = Config.ListObj[-1].DirectionalMeshParams[ToLook1]
+    ObjIDs = Config.Connections[-1][ToLook1]
+    RemoveLastObj()
+
+    ExtensionSegments = math.ceil(ExistingSegments/12.)*12.
+    Dmin = 1.E50
+    Dmax = -1.E50
+    for ObjID in ObjIDs :
+        Boundaries = Config.ListObj[ObjID].Boundaries()
+        if Boundaries[ToLook2] < Dmin : Dmin = Boundaries[ToLook2]
+        if Boundaries[ToLook2+1] > Dmax : Dmax = Boundaries[ToLook2+1]
+    dx = 0
+    if ExtensionSegments > ExistingSegments :
+        dn = (ExtensionSegments-ExistingSegments)/2.
+        dx = dn*(Dmax-Dmin)/ExistingSegments
+        #MacObject('CompBoxF',[(X0-CoefHor*dx/2+CoefVer*(-X0+Dmin-dx/2),Y0-CoefVer*dx/2+CoefHor*(-Y0+Dmin-dx/2)),(dx,dx)],[(dn,dn)],publish=0)
+        #MacObject('CompBoxF',[(X0-CoefHor*dx/2+CoefVer*(-X0+Dmax+dx/2),Y0-CoefVer*dx/2+CoefHor*(-Y0+Dmax+dx/2)),(dx,dx)],[(dn,dn)],publish=0)
+
+    BoxSide = (Dmax-Dmin+2*dx)/2.
+
+    Obj = []
+    Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(BoxSide/2)+CoefVer*(-BoxSide/2),Y0+CoefVer*(BoxSide/2)+CoefHor*(-BoxSide/2)),(BoxSide,BoxSide)],[int(ExtensionSegments/6),DirPar[0]],groups=GroupArray(ToLook3[0],GroupNames[0])))
+    Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(BoxSide/2)+CoefVer*(BoxSide/2),Y0+CoefVer*(BoxSide/2)+CoefHor*(BoxSide/2)),(BoxSide,BoxSide)],[int(ExtensionSegments/6),DirPar[1]],groups=GroupArray(ToLook3[0],GroupNames[0])))
+
+    NLevOpt = 0
+    for NLevels in range (1,100) :
+        DX1 = abs(CoefVer)*BoxSide*2.**(NLevels+1)+abs(CoefHor)*BoxSide*2.**(NLevels)
+        DY1 = abs(CoefHor)*BoxSide*2.**(NLevels+1)+abs(CoefVer)*BoxSide*2.**(NLevels)
+        if DX1 > DX or DY1 > DY :
+            NLevOpt = NLevels-1
+            DXinner = DX1/2.
+            DYinner = DY1/2.
+            break
+
+    dummyArray = [DXinner,DYinner,DYinner,DXinner]
+    D1inner = dummyArray[ToLook2]           # = DXinner for SN and NS orientations
+    D2inner = dummyArray[ToLook2+1]         # = DYinner for SN and NS orientations
+
+    dummyArray = [DX,DY,DY,DX]
+    D1 = dummyArray[ToLook2]                # = DX for SN and NS orientations
+    D2 = dummyArray[ToLook2+1]              # = DY for SN and NS orientations
+
+    if D1inner < D1 :
+        GN0a = GroupArray(ToLook3[0],GroupNames[1])
+        GN0b = GroupArray(ToLook3[0],GroupNames[2])
+        GN01 = GroupArray(ToLook3[0],GroupNames[1])
+        GN02 = GroupArray(ToLook3[0],GroupNames[2])
+        if D2inner < D2 :
+            GN10 = [None,None,None,None]
+            GN11 = [None,None,None,None]
+            GN20 = [None,None,None,None]
+        else :
+            GN10 = GroupArray(ToLook3[1],GroupNames[3])
+            GN11 = GroupArray(ToLook3[1],GroupNames[3])
+            GN20 = GroupArray(ToLook3[1],GroupNames[3])
+    else :
+        GN0a = GroupArray(ToLook3[0],GroupNames[1])
+        GN0b = GroupArray(ToLook3[0],GroupNames[2])
+        GN01 = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]])
+        GN02 = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]])
+        if D2inner < D2 :
+            GN10 = GroupArray(ToLook3[2],GroupNames[4])
+            GN11 = GroupArray(ToLook3[3],GroupNames[5])
+            GN20 = [None,None,None,None]
+        else :
+            GN10 = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])
+            GN11 = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])
+            GN20 = GroupArray(ToLook3[1],GroupNames[3])
+
+    for N in range (1,NLevOpt+1):
+        n=N-1
+        D = BoxSide*(2.**n)
+        if N < NLevOpt :
+            Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*1/2-CoefVer*3/2)  , Y0+D*(CoefVer*1/2-CoefHor*3/2) )          , (D,D)],['auto',DirPar[2]], groups=GN0a))
+            Obj.append(MacObject('BoxAng32',[(X0+D*(CoefHor*3/2-CoefVer*3/2)  , Y0+D*(CoefVer*3/2-CoefHor*3/2) )          , (D,D)],['auto',DirPar[3]]))
+            Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*3/2-CoefVer*1/2)  , Y0+D*(CoefVer*3/2-CoefHor*1/2) )          , (D,D)],['auto',DirPar[4]]))
+            Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*3/2+CoefVer*1/2)  , Y0+D*(CoefHor*1/2+CoefVer*3/2) )          , (D,D)],['auto',DirPar[5]]))
+            Obj.append(MacObject('BoxAng32',[(X0+D*(CoefVer*3/2+CoefHor*3/2)  , Y0+D*(CoefVer*3/2+CoefHor*3/2) )          , (D,D)],['auto',DirPar[6]]))
+            Obj.append(MacObject('Box42'   ,[(X0+D*(CoefVer*3/2+CoefHor*1/2)  , Y0+D*(CoefHor*3/2+CoefVer*1/2) )          , (D,D)],['auto',DirPar[7]], groups=GN0b))
+        else :
+            Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*1/2-CoefVer*3/2)  , Y0+D*(CoefVer*1/2-CoefHor*3/2) )          , (D,D)],['auto',DirPar[2]], groups=GN01))
+            Obj.append(MacObject('BoxAng32',[(X0+D*(CoefHor*3/2-CoefVer*3/2)  , Y0+D*(CoefVer*3/2-CoefHor*3/2) )          , (D,D)],['auto',DirPar[3]], groups=GN10))
+            Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*3/2-CoefVer*1/2)  , Y0+D*(CoefVer*3/2-CoefHor*1/2) )          , (D,D)],['auto',DirPar[4]], groups=GN20))
+            Obj.append(MacObject('Box42'   ,[(X0+D*(CoefHor*3/2+CoefVer*1/2)  , Y0+D*(CoefHor*1/2+CoefVer*3/2) )          , (D,D)],['auto',DirPar[5]], groups=GN20))
+            Obj.append(MacObject('BoxAng32',[(X0+D*(CoefVer*3/2+CoefHor*3/2)  , Y0+D*(CoefVer*3/2+CoefHor*3/2) )          , (D,D)],['auto',DirPar[6]], groups=GN11))
+            Obj.append(MacObject('Box42'   ,[(X0+D*(CoefVer*3/2+CoefHor*1/2)  , Y0+D*(CoefHor*3/2+CoefVer*1/2) )          , (D,D)],['auto',DirPar[7]], groups=GN02))
+
+
+    if CoefVer and DX>DXinner :
+        Obj.append(MacObject('CompBoxF',[(X0-CoefVer*0.25*(DX+DXinner),Y0+CoefVer*DYinner/2),((DX-DXinner)/2,DYinner)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]])))
+        Obj.append(MacObject('CompBoxF',[(X0+CoefVer*0.25*(DX+DXinner),Y0+CoefVer*DYinner/2),((DX-DXinner)/2,DYinner)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]])))
+        if DY>DYinner :
+            Obj.append(MacObject('CompBoxF',[(X0-CoefVer*0.25*(DX+DXinner),Y0+CoefVer*(DY+DYinner)/2.),((DX-DXinner)/2,DY-DYinner)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])))
+            Obj.append(MacObject('CompBoxF',[(X0+CoefVer*0.25*(DX+DXinner),Y0+CoefVer*(DY+DYinner)/2.),((DX-DXinner)/2,DY-DYinner)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])))
+            Obj.append(MacObject('CompBoxF',[(X0,Y0+CoefVer*(DY+DYinner)/2.),(DXinner,DY-DYinner)],['auto'], groups = GroupArray(ToLook3[1],GroupNames[3])))
+    elif CoefHor and DY>DYinner :
+        Obj.append(MacObject('CompBoxF',[(X0+CoefHor*DXinner/2,Y0-CoefHor*0.25*(DY+DYinner)),(DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[2]],[GroupNames[1],GroupNames[4]])))
+        Obj.append(MacObject('CompBoxF',[(X0+CoefHor*DXinner/2,Y0+CoefHor*0.25*(DY+DYinner)),(DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[0],ToLook3[3]],[GroupNames[2],GroupNames[5]])))
+        if DX>DXinner :
+            Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0-CoefHor*0.25*(DY+DYinner)),(DX-DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[2]],[GroupNames[3],GroupNames[4]])))
+            Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0+CoefHor*0.25*(DY+DYinner)),(DX-DXinner,(DY-DYinner)/2)],['auto'], groups = GroupArray([ToLook3[1],ToLook3[3]],[GroupNames[3],GroupNames[5]])))
+            Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX+DXinner)/2.,Y0),(DX-DXinner,DYinner)],['auto'], groups = GroupArray(ToLook3[1],GroupNames[3])))
+    return Obj
+
+def RemoveLastObj() :
+    Config.ListObj = Config.ListObj[:-1]
+    Config.Connections = Config.Connections[:-1]
+
 def GroupArray(indices, GroupNames) :
-        if type(indices) is int : 
-                indices = [indices]
-                GroupNames = [GroupNames]
-        Output = [None,None,None,None]
-        for i, ind in enumerate(indices) : 
-                Output[ind] = GroupNames[i]
-        return Output
+    if isinstance(indices, int) :
+        indices = [indices]
+        GroupNames = [GroupNames]
+    Output = [None,None,None,None]
+    for i, ind in enumerate(indices) :
+        Output[ind] = GroupNames[i]
+    return Output
index ca6c00a09dc688d6c8f52ed1526c016343ad3bd1..48accd5fdc6ac746f7fb215b9549dfcfd21b1d60 100644 (file)
 
 # INTRODUCTION HERE
 
-import sys, math, copy, commands
-CWD = commands.getoutput('pwd')
+import sys, math, copy, subprocess
+CWD = subprocess.getoutput('pwd')
 sys.path.append(CWD)
 
 from MacObject import *
 import Config, GenFunctions
 
-def CompositeBox (X0 , Y0 , DX , DY , **args ) : 
-                                     
-        if args.__contains__('groups') :
-                GroupNames = args['groups']
-       else : GroupNames = [None, None, None, None]
-        # Create a full Box just to inherit, globally, the mesh parameters of bounding objects
-       MacObject('CompBoxF',[(X0,Y0),(DX,DY)],['auto'],publish=0)
-        
-        # Save the existing number of segments on each direction
-       ExistingSegments = Config.ListObj[-1].DirectionalMeshParams
-        
-        # Sort the connection list for the full Box
-        ObjIDLists = SortObjLists(Config.Connections[-1],X0 , Y0 , DX , DY )
-        RemoveLastObj()
-        
-        print "ObjIDLists: ", ObjIDLists
-        
-        RealSegments = []
-        Direction = []
-        flag = 0
-        if not(args.__contains__('recursive')) : Config.Count = 0
-        print "Config.Count : ", Config.Count
-        Config.Criterion = GetCriterion(ObjIDLists)
-        for index, ObjList in enumerate(ObjIDLists) :
-                if not (ObjList[0] == -1 or Config.Count >= Config.Criterion):
-                        if len(ObjList)>1 : flag = 1
-                        else : flag = 0
-                        for ObjID in ObjList:
-                           ToLook0 = [2,2,0,0][index]
-                           ToLook1 = [3,2,1,0][index]
-                           CommonSide =  FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])
-                           ToLook2 = [1,0,3,2][index]
-                           RealSegments.append(Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]*IntLen(CommonSide)/IntLen(Config.ListObj[ObjID].DirBoundaries(ToLook1)))
-                           Direction.append(ToLook0/2)
-                           
-                           if flag and Config.Count < Config.Criterion:
-                                if index < 2 :
-                                        if abs(CommonSide[0] - (Y0-DY/2.))<1e-7 : SouthGR = GroupNames[0]
-                                        else : SouthGR = None
-                                        if abs(CommonSide[1] - (Y0+DY/2.))<1e-7 : NorthGR = GroupNames[1]
-                                        else : NorthGR = None
-                                        CompositeBox (X0, CommonSide[0]+IntLen(CommonSide)/2., DX,IntLen(CommonSide), recursive=1, groups = [SouthGR,NorthGR]+GroupNames[2:4])
-                                else : 
-                                        if abs(CommonSide[0] - (X0-DX/2.))<1e-7 : EastGR = GroupNames[2]
-                                        else : EastGR = None
-                                        if abs(CommonSide[1] - (X0+DX/2.))<1e-7 : WestGR = GroupNames[3]
-                                        else : WestGR = None
-                                        CompositeBox (CommonSide[0]+IntLen(CommonSide)/2., Y0, IntLen(CommonSide),DY, recursive=1, groups = GroupNames[0:2]+[EastGR,WestGR])
-
-                           if Config.Count >= Config.Criterion :
-                                break
-        if flag == 0 and Config.Count < Config.Criterion:
-                #print "Dir : ", Direction
-                #print "RealSegments : ", RealSegments
-                
-                #Xind = Direction.index(0)
-                #Yind = Direction.index(1)
-                #MacObject('CompBoxF',[(X0,Y0),(DX,DY)] ,[(RealSegments[Xind],RealSegments[Yind])], groups = GroupNames)
-                MacObject('CompBoxF',[(X0,Y0),(DX,DY)] ,['auto'], groups = GroupNames)
-                
-                Config.Count += 1
-
-                           
+def CompositeBox (X0 , Y0 , DX , DY , **args ) :
+
+    if args.__contains__('groups') :
+        GroupNames = args['groups']
+    else : GroupNames = [None, None, None, None]
+    # Create a full Box just to inherit, globally, the mesh parameters of bounding objects
+    MacObject('CompBoxF',[(X0,Y0),(DX,DY)],['auto'],publish=0)
+
+    # Save the existing number of segments on each direction
+    ExistingSegments = Config.ListObj[-1].DirectionalMeshParams
+
+    # Sort the connection list for the full Box
+    ObjIDLists = SortObjLists(Config.Connections[-1],X0 , Y0 , DX , DY )
+    RemoveLastObj()
+
+    print("ObjIDLists: ", ObjIDLists)
+
+    RealSegments = []
+    Direction = []
+    flag = 0
+    if not(args.__contains__('recursive')) : Config.Count = 0
+    print("Config.Count : ", Config.Count)
+    Config.Criterion = GetCriterion(ObjIDLists)
+    for index, ObjList in enumerate(ObjIDLists) :
+        if not (ObjList[0] == -1 or Config.Count >= Config.Criterion):
+            if len(ObjList)>1 : flag = 1
+            else : flag = 0
+            for ObjID in ObjList:
+                ToLook0 = [2,2,0,0][index]
+                ToLook1 = [3,2,1,0][index]
+                CommonSide =  FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])
+                ToLook2 = [1,0,3,2][index]
+                RealSegments.append(Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]*IntLen(CommonSide)/IntLen(Config.ListObj[ObjID].DirBoundaries(ToLook1)))
+                Direction.append(ToLook0/2)
+
+                if flag and Config.Count < Config.Criterion:
+                    if index < 2 :
+                        if abs(CommonSide[0] - (Y0-DY/2.))<1e-7 : SouthGR = GroupNames[0]
+                        else : SouthGR = None
+                        if abs(CommonSide[1] - (Y0+DY/2.))<1e-7 : NorthGR = GroupNames[1]
+                        else : NorthGR = None
+                        CompositeBox (X0, CommonSide[0]+IntLen(CommonSide)/2., DX,IntLen(CommonSide), recursive=1, groups = [SouthGR,NorthGR]+GroupNames[2:4])
+                    else :
+                        if abs(CommonSide[0] - (X0-DX/2.))<1e-7 : EastGR = GroupNames[2]
+                        else : EastGR = None
+                        if abs(CommonSide[1] - (X0+DX/2.))<1e-7 : WestGR = GroupNames[3]
+                        else : WestGR = None
+                        CompositeBox (CommonSide[0]+IntLen(CommonSide)/2., Y0, IntLen(CommonSide),DY, recursive=1, groups = GroupNames[0:2]+[EastGR,WestGR])
+
+                if Config.Count >= Config.Criterion :
+                    break
+    if flag == 0 and Config.Count < Config.Criterion:
+        #print "Dir : ", Direction
+        #print "RealSegments : ", RealSegments
+
+        #Xind = Direction.index(0)
+        #Yind = Direction.index(1)
+        #MacObject('CompBoxF',[(X0,Y0),(DX,DY)] ,[(RealSegments[Xind],RealSegments[Yind])], groups = GroupNames)
+        MacObject('CompBoxF',[(X0,Y0),(DX,DY)] ,['auto'], groups = GroupNames)
+
+        Config.Count += 1
+
+
 def FindCommonSide (Int1, Int2) :
-        if abs(min(Int1[1],Int2[1])-max(Int1[0],Int2[0])) < 1e-5: return [0,0]
-        else : return [max(Int1[0],Int2[0]), min(Int1[1],Int2[1])]
-        
+    if abs(min(Int1[1],Int2[1])-max(Int1[0],Int2[0])) < 1e-5: return [0,0]
+    else : return [max(Int1[0],Int2[0]), min(Int1[1],Int2[1])]
+
 def IntLen (Interval) :
-        return abs(Interval[1]-Interval[0])     
-           
-def RemoveLastObj() : 
-        Config.ListObj = Config.ListObj[:-1]
-        Config.Connections = Config.Connections[:-1]
-        
+    return abs(Interval[1]-Interval[0])
+
+def RemoveLastObj() :
+    Config.ListObj = Config.ListObj[:-1]
+    Config.Connections = Config.Connections[:-1]
+
 def GetCriterion (ObjListIDs):
-        return max(Config.Criterion, max(len(ObjListIDs[0]),len(ObjListIDs[1]))*max(len(ObjListIDs[2]),len(ObjListIDs[3])))
+    return max(Config.Criterion, max(len(ObjListIDs[0]),len(ObjListIDs[1]))*max(len(ObjListIDs[2]),len(ObjListIDs[3])))
 
 def SortObjLists (List,X0,Y0,DX,DY) :
-        """ 
-        This function sorts the list of neighbouring objects on each side, according to their intersection
-        with the object being created. From South to North and from East to West
-        """
-        Output = List
-        # First find the directions where no neighbour exists
-        # Important : Here we assume that exactly two directions have no neighbours !!!
-        #             Should we change this to allow a more general case ????
-        dummy = IndexMultiOcc(List,(-1,))
-        
-        # dummy[0] is either 0, meaning there is no neighbour on X- (West)
-        #                 or 1, meaning there is no neighbour on X+ (East)
-        # Similarly dummy[1] can be either 2 or 3 (South and North respectively)
-        # In order to get back to the formalism of groups (SNWE) 
-        #  => we do the following to define Sense of no neighbours and then the Direction list
-        #       is calculated as to include uniquely the directions where we DO have neighbours
-        if len(dummy) == 1 :
-                # This adds a second direction where neighbours are not regarded, it is either 0 or 2
-                dummy.append(2*(dummy[0]+2<4))
-                print("Careful, you have neighbours on 3 or more sides of the box, we will not check if on two parallel sides the boxes are compatible !!!")
-        if len(dummy) == 2 or len(dummy) == 1 :
-                # Sense contains : Vertical then Horizontal
-                Sense = [dummy[1]%2,dummy[0]]
-                DirList = [[1,0][dummy[0]],[3,2][dummy[1]%2]]
-                for index,Direction in enumerate(DirList) :
-                        ObjList = List[Direction]
-                        RankMin = []
-                        ToLook0 = [2,2,0,0][Direction]
-                        ToLook1 = [3,2,1,0][Direction]
-                        for index1,ObjID in enumerate(ObjList) : 
-                                RankMin.append([-1.,1.][Sense[index]] * FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])[Sense[index]])
-                        Output[Direction] = SortList(ObjList,RankMin)
-                        
-        elif len(dummy) == 3 :
-                # We find the direction where we do have neighbours and then we sort the object list along it
-                Sense = dummy[0]%2
-                Direction = [ i not in dummy for i in range(4) ].index(True)
-                ObjList = List[Direction]
-                RankMin = []
-                ToLook0 = [2,2,0,0][Direction]
-                ToLook1 = [3,2,1,0][Direction]
-                for index1,ObjID in enumerate(ObjList) : 
-                        RankMin.append([-1.,1.][Sense] * FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])[Sense])
-                Output[Direction] = SortList(ObjList,RankMin)
-        else :
-                print ("Error : the composite box being created has no neighbours, how on earth do you want us to inherit its mesh parameters!!!")
-                
-        
-        return Output
-        
+    """
+    This function sorts the list of neighbouring objects on each side, according to their intersection
+    with the object being created. From South to North and from East to West
+    """
+    Output = List
+    # First find the directions where no neighbour exists
+    # Important : Here we assume that exactly two directions have no neighbours !!!
+    #             Should we change this to allow a more general case ????
+    dummy = IndexMultiOcc(List,(-1,))
+
+    # dummy[0] is either 0, meaning there is no neighbour on X- (West)
+    #                 or 1, meaning there is no neighbour on X+ (East)
+    # Similarly dummy[1] can be either 2 or 3 (South and North respectively)
+    # In order to get back to the formalism of groups (SNWE)
+    #  => we do the following to define Sense of no neighbours and then the Direction list
+    #       is calculated as to include uniquely the directions where we DO have neighbours
+    if len(dummy) == 1 :
+        # This adds a second direction where neighbours are not regarded, it is either 0 or 2
+        dummy.append(2*(dummy[0]+2<4))
+        print("Careful, you have neighbours on 3 or more sides of the box, we will not check if on two parallel sides the boxes are compatible !!!")
+    if len(dummy) == 2 or len(dummy) == 1 :
+        # Sense contains : Vertical then Horizontal
+        Sense = [dummy[1]%2,dummy[0]]
+        DirList = [[1,0][dummy[0]],[3,2][dummy[1]%2]]
+        for index,Direction in enumerate(DirList) :
+            ObjList = List[Direction]
+            RankMin = []
+            ToLook0 = [2,2,0,0][Direction]
+            ToLook1 = [3,2,1,0][Direction]
+            for index1,ObjID in enumerate(ObjList) :
+                RankMin.append([-1.,1.][Sense[index]] * FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])[Sense[index]])
+            Output[Direction] = SortList(ObjList,RankMin)
+
+    elif len(dummy) == 3 :
+        # We find the direction where we do have neighbours and then we sort the object list along it
+        Sense = dummy[0]%2
+        Direction = [ i not in dummy for i in range(4) ].index(True)
+        ObjList = List[Direction]
+        RankMin = []
+        ToLook0 = [2,2,0,0][Direction]
+        ToLook1 = [3,2,1,0][Direction]
+        for index1,ObjID in enumerate(ObjList) :
+            RankMin.append([-1.,1.][Sense] * FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])[Sense])
+        Output[Direction] = SortList(ObjList,RankMin)
+    else :
+        print ("Error : the composite box being created has no neighbours, how on earth do you want us to inherit its mesh parameters!!!")
+
+
+    return Output
+
 def IndexMultiOcc (Array,Element) :
-        """
-        This functions returns the occurrences indices of Element in Array.
-        As opposed to Array.index(Element) method, this allows determining      
-        multiple entries rather than just the first one!
-        """
-        Output = []
-        try : Array.index(Element)
-        except ValueError : print "No more occurrences"
-        else : Output.append(Array.index(Element))
-                
-        if not(Output == []) and len(Array) > 1 :
-                for index, ArrElem in enumerate(Array[Output[0]+1:]) :
-                        if ArrElem == Element : Output.append(index+Output[0]+1)
-                 
-        return Output
-        
-def SortList (ValList, CritList):
-        Output = []
-        SortedCritList = copy.copy(CritList)
-        SortedCritList.sort()
-        for i in range(0,len(ValList)):
-                index = CritList.index(SortedCritList[i])
-                Output.append(ValList[index])
-        return Output
+    """
+    This functions returns the occurrences indices of Element in Array.
+    As opposed to Array.index(Element) method, this allows determining
+    multiple entries rather than just the first one!
+    """
+    Output = []
+    try : Array.index(Element)
+    except ValueError : print("No more occurrences")
+    else : Output.append(Array.index(Element))
 
+    if not(Output == []) and len(Array) > 1 :
+        for index, ArrElem in enumerate(Array[Output[0]+1:]) :
+            if ArrElem == Element : Output.append(index+Output[0]+1)
 
-            
+    return Output
+
+def SortList (ValList, CritList):
+    Output = []
+    SortedCritList = sorted(copy.copy(CritList))
+    for i in range(0,len(ValList)):
+        index = CritList.index(SortedCritList[i])
+        Output.append(ValList[index])
+    return Output
index dbbe393699b552df8e212a57ba0ae89089ce94c9..3b945bbba5c820de947608733377dfbac85937d1 100644 (file)
 
 # INTRODUCTION HERE
 
-import sys, math, copy, commands
-CWD = commands.getoutput('pwd')
+import sys, math, copy, subprocess
+CWD = subprocess.getoutput('pwd')
 sys.path.append(CWD)
 
 from MacObject import *
 import Config, GenFunctions
 
-def CompositeBoxF (Pt1 , Pt2 , Pt3 , Pt4 , **args ) : 
-        [Pt1 , Pt2 , Pt3 , Pt4] = GenFunctions.SortPoints([Pt1 , Pt2 , Pt3 , Pt4])
-        if args.__contains__('groups') :
-                GroupNames = args['groups']
-       else : GroupNames = [None, None, None, None]
-        # Create a full NonOrtho box just to inherit, globally, the mesh parameters of bounding objects
-       dummy = MacObject('NonOrtho',[Pt1,Pt2,Pt3,Pt4],['auto'],publish=0)
-        # Save the existing number of segments on each direction
-        ExistingSeg0 = Config.ListObj[-1].DirectionalMeshParams
-        Convention = [2,3,0,1]
-        ExistingSegments = [ExistingSeg0[Convention[i]] for i in range(4)]
-        # Save Boundary lengths on each direction
-        BoundaryLengths = [IntLen(dummy.DirBoundaries(i)) for i in range(4) ]
-        # Calculate global mesh element size on each direction
-        GlobalDelta = [1.*BoundaryLengths[i]/ExistingSegments[i] for i in range(4) ]
-        print "GlobalDelta :",GlobalDelta
-        # Sort the connection list for the full Box
-        [(X0,Y0),(DX,DY)] = dummy.GeoPar
-        ObjIDLists = SortObjLists(Config.Connections[-1],X0 , Y0 , DX , DY )
-        [Xmin,Xmax,Ymin,Ymax] = dummy.Boundaries() # Used for groups determination
-        RemoveLastObj()
-               
-        RealSegments = []
-        Direction = []
-        flag = 0
-        if not(args.__contains__('recursive')) : 
-                Config.Count = 0
-
-        Config.Criterion = GetCriterion(ObjIDLists)
-        for index, ObjList in enumerate(ObjIDLists) :
-                if not (ObjList[0] == -1 or Config.Count >= Config.Criterion):
-                        if not(args.__contains__('recursive')) : 
-                                Config.DirIndex = index
-                                if index > 1 : Config.RefPts = [Pt2, Pt3]
-                                elif index == 0 : Config.RefPts = [Pt1, Pt2]
-                                else : Config.RefPts = [Pt4, Pt3]
-                                
-                        if len(ObjList)>1 : flag = 1
-                        else : flag = 0
-                        for ObjID in ObjList:
-                           ToLook0 = [2,3,0,1][index]
-                           ToLook1 = [3,2,1,0][index]
-                           CommonSide =  FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),dummy.DirBoundaries(ToLook0))
-                           ToLook2 = [1,0,3,2][index]
-                           RealSegments = Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]*IntLen(CommonSide)/IntLen(Config.ListObj[ObjID].DirBoundaries(ToLook1))
-                           LocalDelta = 1.*IntLen(CommonSide)/RealSegments
-                           print "Direction:", ["West","East","South","North"][ToLook2]
-                           print "IntLen(CommonSide):",IntLen(CommonSide) 
-                           print "RealSegments:",RealSegments    
-                           print "LocalDelta:",LocalDelta                                                    
-                           if flag and Config.Count < Config.Criterion:
-                                if index ==0 :
-                                        if abs(CommonSide[0] - Ymin)<1e-7 : SouthGR = GroupNames[0]
-                                        else : SouthGR = None
-                                        if abs(CommonSide[1] - Ymax)<1e-7 : NorthGR = GroupNames[1]
-                                        else : NorthGR = None
-                                        
-                                        NDelta = Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]* (LocalDelta-GlobalDelta[Convention[index]])
-                                        [Pt1,Pt2] = Config.RefPts
-                                        Coef = [1.,-1.][index] 
-                                        Vref1 = [Coef*(Pt2[0]-Pt1[0]),Coef*(Pt2[1]-Pt1[1])]
-                                        Vref2 = NormalizeVector([Pt2[0]-Pt3[0],Pt2[1]-Pt3[1]])
-                                        Ptref = Config.ListObj[ObjID].PtCoor[[2,3][index]]
-                                        NewPt = ExtrapPoint (Ptref,Vref1,Vref2,NDelta)
-                                        CompositeBoxF (Pt1, Pt2, NewPt, Ptref, recursive=1, groups = [SouthGR,NorthGR]+GroupNames[2:4])
-                                elif index == 1:
-                                        if abs(CommonSide[0] - Ymin)<1e-7 : SouthGR = GroupNames[0]
-                                        else : SouthGR = None
-                                        if abs(CommonSide[1] - Ymax)<1e-7 : NorthGR = GroupNames[1]
-                                        else : NorthGR = None
-                                        
-                                        NDelta = Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]* (LocalDelta-GlobalDelta[Convention[index]])
-                                        [Pt4,Pt3] = Config.RefPts
-                                        Coef = 1.
-                                        Vref1 = [Coef*(Pt4[0]-Pt3[0]),Coef*(Pt4[1]-Pt3[1])]
-                                        Vref2 = NormalizeVector([Pt1[0]-Pt4[0],Pt1[1]-Pt4[1]])
-                                        Ptref = Config.ListObj[ObjID].PtCoor[0]
-                                        NewPt = ExtrapPoint (Ptref,Vref1,Vref2,NDelta)
-                                        CompositeBoxF (NewPt, Ptref, Pt3, Pt4, recursive=1, groups = [SouthGR,NorthGR]+GroupNames[2:4])                                        
-                                else : 
-                                        if abs(CommonSide[0] - Xmin)<1e-7 : WestGR = GroupNames[2]
-                                        else : WestGR = None
-                                        if abs(CommonSide[1] - Xmax)<1e-7 : EastGR = GroupNames[3]
-                                        else : EastGR = None
-                                        
-                                        NDelta = Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]* (LocalDelta-GlobalDelta[Convention[index]])
-                                        [Pt2,Pt3] = Config.RefPts
-                                        Coef = [1.,-1.][index-2] 
-                                        Vref1 = [Coef*(Pt3[0]-Pt2[0]),Coef*(Pt3[1]-Pt2[1])]
-                                        Vref2 = NormalizeVector([Pt3[0]-Pt4[0],Pt3[1]-Pt4[1]])
-                                        Ptref = Config.ListObj[ObjID].PtCoor[[3,0][index-2]]
-                                        NewPt = ExtrapPoint (Ptref,Vref1,Vref2,NDelta)
-                                        CompositeBoxF (Ptref, Pt2, Pt3, NewPt, recursive=1, groups = GroupNames[0:2] + [WestGR,EastGR])
-
-                           if Config.Count >= Config.Criterion :
-                                break
-        if flag == 0 and Config.Count < Config.Criterion:
-                print "Creating NonOrtho object with the points:", Pt1,Pt2,Pt3,Pt4
-                MacObject('NonOrtho',[Pt1,Pt2,Pt3,Pt4] ,['auto'], groups = GroupNames)
-                
-                Config.Count += 1
-                if Config.DirIndex > 1 : Config.RefPts = [Pt1, Pt4]
-                elif Config.DirIndex==0 : Config.RefPts = [Pt4, Pt3]
-                else : Config.RefPts = [Pt1, Pt2]
-                           
+def CompositeBoxF (Pt1 , Pt2 , Pt3 , Pt4 , **args ) :
+    [Pt1 , Pt2 , Pt3 , Pt4] = GenFunctions.SortPoints([Pt1 , Pt2 , Pt3 , Pt4])
+    if args.__contains__('groups') :
+        GroupNames = args['groups']
+    else : GroupNames = [None, None, None, None]
+    # Create a full NonOrtho box just to inherit, globally, the mesh parameters of bounding objects
+    dummy = MacObject('NonOrtho',[Pt1,Pt2,Pt3,Pt4],['auto'],publish=0)
+    # Save the existing number of segments on each direction
+    ExistingSeg0 = Config.ListObj[-1].DirectionalMeshParams
+    Convention = [2,3,0,1]
+    ExistingSegments = [ExistingSeg0[Convention[i]] for i in range(4)]
+    # Save Boundary lengths on each direction
+    BoundaryLengths = [IntLen(dummy.DirBoundaries(i)) for i in range(4) ]
+    # Calculate global mesh element size on each direction
+    GlobalDelta = [1.*BoundaryLengths[i]/ExistingSegments[i] for i in range(4) ]
+    print("GlobalDelta :",GlobalDelta)
+    # Sort the connection list for the full Box
+    [(X0,Y0),(DX,DY)] = dummy.GeoPar
+    ObjIDLists = SortObjLists(Config.Connections[-1],X0 , Y0 , DX , DY )
+    [Xmin,Xmax,Ymin,Ymax] = dummy.Boundaries() # Used for groups determination
+    RemoveLastObj()
+
+    RealSegments = []
+    Direction = []
+    flag = 0
+    if not(args.__contains__('recursive')) :
+        Config.Count = 0
+
+    Config.Criterion = GetCriterion(ObjIDLists)
+    for index, ObjList in enumerate(ObjIDLists) :
+        if not (ObjList[0] == -1 or Config.Count >= Config.Criterion):
+            if not(args.__contains__('recursive')) :
+                Config.DirIndex = index
+                if index > 1 : Config.RefPts = [Pt2, Pt3]
+                elif index == 0 : Config.RefPts = [Pt1, Pt2]
+                else : Config.RefPts = [Pt4, Pt3]
+
+            if len(ObjList)>1 : flag = 1
+            else : flag = 0
+            for ObjID in ObjList:
+                ToLook0 = [2,3,0,1][index]
+                ToLook1 = [3,2,1,0][index]
+                CommonSide =  FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),dummy.DirBoundaries(ToLook0))
+                ToLook2 = [1,0,3,2][index]
+                RealSegments = Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]*IntLen(CommonSide)/IntLen(Config.ListObj[ObjID].DirBoundaries(ToLook1))
+                LocalDelta = 1.*IntLen(CommonSide)/RealSegments
+                print("Direction:", ["West","East","South","North"][ToLook2])
+                print("IntLen(CommonSide):",IntLen(CommonSide))
+                print("RealSegments:",RealSegments)
+                print("LocalDelta:",LocalDelta)
+                if flag and Config.Count < Config.Criterion:
+                    if index ==0 :
+                        if abs(CommonSide[0] - Ymin)<1e-7 : SouthGR = GroupNames[0]
+                        else : SouthGR = None
+                        if abs(CommonSide[1] - Ymax)<1e-7 : NorthGR = GroupNames[1]
+                        else : NorthGR = None
+
+                        NDelta = Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]* (LocalDelta-GlobalDelta[Convention[index]])
+                        [Pt1,Pt2] = Config.RefPts
+                        Coef = [1.,-1.][index]
+                        Vref1 = [Coef*(Pt2[0]-Pt1[0]),Coef*(Pt2[1]-Pt1[1])]
+                        Vref2 = NormalizeVector([Pt2[0]-Pt3[0],Pt2[1]-Pt3[1]])
+                        Ptref = Config.ListObj[ObjID].PtCoor[[2,3][index]]
+                        NewPt = ExtrapPoint (Ptref,Vref1,Vref2,NDelta)
+                        CompositeBoxF (Pt1, Pt2, NewPt, Ptref, recursive=1, groups = [SouthGR,NorthGR]+GroupNames[2:4])
+                    elif index == 1:
+                        if abs(CommonSide[0] - Ymin)<1e-7 : SouthGR = GroupNames[0]
+                        else : SouthGR = None
+                        if abs(CommonSide[1] - Ymax)<1e-7 : NorthGR = GroupNames[1]
+                        else : NorthGR = None
+
+                        NDelta = Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]* (LocalDelta-GlobalDelta[Convention[index]])
+                        [Pt4,Pt3] = Config.RefPts
+                        Coef = 1.
+                        Vref1 = [Coef*(Pt4[0]-Pt3[0]),Coef*(Pt4[1]-Pt3[1])]
+                        Vref2 = NormalizeVector([Pt1[0]-Pt4[0],Pt1[1]-Pt4[1]])
+                        Ptref = Config.ListObj[ObjID].PtCoor[0]
+                        NewPt = ExtrapPoint (Ptref,Vref1,Vref2,NDelta)
+                        CompositeBoxF (NewPt, Ptref, Pt3, Pt4, recursive=1, groups = [SouthGR,NorthGR]+GroupNames[2:4])
+                    else :
+                        if abs(CommonSide[0] - Xmin)<1e-7 : WestGR = GroupNames[2]
+                        else : WestGR = None
+                        if abs(CommonSide[1] - Xmax)<1e-7 : EastGR = GroupNames[3]
+                        else : EastGR = None
+
+                        NDelta = Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]* (LocalDelta-GlobalDelta[Convention[index]])
+                        [Pt2,Pt3] = Config.RefPts
+                        Coef = [1.,-1.][index-2]
+                        Vref1 = [Coef*(Pt3[0]-Pt2[0]),Coef*(Pt3[1]-Pt2[1])]
+                        Vref2 = NormalizeVector([Pt3[0]-Pt4[0],Pt3[1]-Pt4[1]])
+                        Ptref = Config.ListObj[ObjID].PtCoor[[3,0][index-2]]
+                        NewPt = ExtrapPoint (Ptref,Vref1,Vref2,NDelta)
+                        CompositeBoxF (Ptref, Pt2, Pt3, NewPt, recursive=1, groups = GroupNames[0:2] + [WestGR,EastGR])
+
+                if Config.Count >= Config.Criterion :
+                    break
+    if flag == 0 and Config.Count < Config.Criterion:
+        print("Creating NonOrtho object with the points:", Pt1,Pt2,Pt3,Pt4)
+        MacObject('NonOrtho',[Pt1,Pt2,Pt3,Pt4] ,['auto'], groups = GroupNames)
+
+        Config.Count += 1
+        if Config.DirIndex > 1 : Config.RefPts = [Pt1, Pt4]
+        elif Config.DirIndex==0 : Config.RefPts = [Pt4, Pt3]
+        else : Config.RefPts = [Pt1, Pt2]
+
 def FindCommonSide (Int1, Int2) :
-        if max(Int1[0],Int2[0])<min(Int1[1],Int2[1]): return [max(Int1[0],Int2[0]), min(Int1[1],Int2[1])]
-        else : 
-                print "Can not find interval intersection, returning [0,0]..."
-                return [0,0]
-        
+    if max(Int1[0],Int2[0])<min(Int1[1],Int2[1]): return [max(Int1[0],Int2[0]), min(Int1[1],Int2[1])]
+    else :
+        print("Can not find interval intersection, returning [0,0]...")
+        return [0,0]
+
 def IntLen (Interval) :
-        return float(abs(Interval[1]-Interval[0]))     
-           
-def RemoveLastObj() : 
-        Config.ListObj = Config.ListObj[:-1]
-        Config.Connections = Config.Connections[:-1]
-        
+    return float(abs(Interval[1]-Interval[0]))
+
+def RemoveLastObj() :
+    Config.ListObj = Config.ListObj[:-1]
+    Config.Connections = Config.Connections[:-1]
+
 def NormalizeVector(V):
-        Magnitude = math.sqrt(GenFunctions.DotProd(V,V))
-        return [ V[i]/Magnitude for i in range(len(V))]
-        
+    Magnitude = math.sqrt(GenFunctions.DotProd(V,V))
+    return [ V[i]/Magnitude for i in range(len(V))]
+
 def GetCriterion (ObjListIDs):
-        return max(Config.Criterion, max(len(ObjListIDs[0]),len(ObjListIDs[1]))*max(len(ObjListIDs[2]),len(ObjListIDs[3])))
+    return max(Config.Criterion, max(len(ObjListIDs[0]),len(ObjListIDs[1]))*max(len(ObjListIDs[2]),len(ObjListIDs[3])))
 
 def SortObjLists (List,X0,Y0,DX,DY) :
-        """ 
-        This function sorts the list of neighbouring objects on each side, according to their intersection
-        with the object being created. From South to North and from East to West
-        """
-        Output = List
-        # First find the directions where no neighbour exists
-        # Important : Here we assume that exactly two directions have no neighbours !!!
-        #             Should we change this to allow a more general case ????
-        dummy = IndexMultiOcc(List,(-1,))
-        
-        # dummy[0] is either 0, meaning there is no neighbour on X- (West)
-        #                 or 1, meaning there is no neighbour on X+ (East)
-        # Similarly dummy[1] can be either 2 or 3 (South and North respectively)
-        # In order to get back to the formalism of groups (SNWE) 
-        #  => we do the following to define Sense of no neighbours and then the Direction list
-        #       is calculated as to include uniquely the directions where we DO have neighbours
-        if len(dummy) == 1 :
-                # This adds a second direction where neighbours are not regarded, it is either 0 or 2
-                dummy.append(2*(dummy[0]+2<4))
-                print("Careful, you have neighbours on 3 or more sides of the box, we will not check if on two parallel sides the boxes are compatible !!!")
-        if len(dummy) == 2 or len(dummy) == 1 :
-                # Sense contains : Vertical then Horizontal
-                Sense = [dummy[1]%2,dummy[0]]
-                DirList = [[1,0][dummy[0]],[3,2][dummy[1]%2]]
-                for index,Direction in enumerate(DirList) :
-                        ObjList = List[Direction]
-                        RankMin = []
-                        ToLook0 = [2,2,0,0][Direction]
-                        ToLook1 = [3,2,1,0][Direction]
-                        for index1,ObjID in enumerate(ObjList) : 
-                                RankMin.append([-1.,1.][Sense[index]] * FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])[Sense[index]])
-                        Output[Direction] = SortList(ObjList,RankMin)
-                        
-        elif len(dummy) == 3 :
-                # We find the direction where we do have neighbours and then we sort the object list along it
-                Sense = dummy[0]%2
-                Direction = [ i not in dummy for i in range(4) ].index(True)
-                ObjList = List[Direction]
-                RankMin = []
-                ToLook0 = [2,2,0,0][Direction]
-                ToLook1 = [3,2,1,0][Direction]
-                for index1,ObjID in enumerate(ObjList) : 
-                        RankMin.append([-1.,1.][Sense] * FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])[Sense])
-                Output[Direction] = SortList(ObjList,RankMin)
-        else :
-                print ("Error : the composite box being created has no neighbours, how on earth do you want us to inherit its mesh parameters!!!")
-                
-        
-        return Output
-        
+    """
+    This function sorts the list of neighbouring objects on each side, according to their intersection
+    with the object being created. From South to North and from East to West
+    """
+    Output = List
+    # First find the directions where no neighbour exists
+    # Important : Here we assume that exactly two directions have no neighbours !!!
+    #             Should we change this to allow a more general case ????
+    dummy = IndexMultiOcc(List,(-1,))
+
+    # dummy[0] is either 0, meaning there is no neighbour on X- (West)
+    #                 or 1, meaning there is no neighbour on X+ (East)
+    # Similarly dummy[1] can be either 2 or 3 (South and North respectively)
+    # In order to get back to the formalism of groups (SNWE)
+    #  => we do the following to define Sense of no neighbours and then the Direction list
+    #       is calculated as to include uniquely the directions where we DO have neighbours
+    if len(dummy) == 1 :
+        # This adds a second direction where neighbours are not regarded, it is either 0 or 2
+        dummy.append(2*(dummy[0]+2<4))
+        print("Careful, you have neighbours on 3 or more sides of the box, we will not check if on two parallel sides the boxes are compatible !!!")
+    if len(dummy) == 2 or len(dummy) == 1 :
+        # Sense contains : Vertical then Horizontal
+        Sense = [dummy[1]%2,dummy[0]]
+        DirList = [[1,0][dummy[0]],[3,2][dummy[1]%2]]
+        for index,Direction in enumerate(DirList) :
+            ObjList = List[Direction]
+            RankMin = []
+            ToLook0 = [2,2,0,0][Direction]
+            ToLook1 = [3,2,1,0][Direction]
+            for index1,ObjID in enumerate(ObjList) :
+                RankMin.append([-1.,1.][Sense[index]] * FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])[Sense[index]])
+            Output[Direction] = SortList(ObjList,RankMin)
+
+    elif len(dummy) == 3 :
+        # We find the direction where we do have neighbours and then we sort the object list along it
+        Sense = dummy[0]%2
+        Direction = [ i not in dummy for i in range(4) ].index(True)
+        ObjList = List[Direction]
+        RankMin = []
+        ToLook0 = [2,2,0,0][Direction]
+        ToLook1 = [3,2,1,0][Direction]
+        for index1,ObjID in enumerate(ObjList) :
+            RankMin.append([-1.,1.][Sense] * FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),[X0-DX/2.,X0+DX/2.,Y0-DY/2.,Y0+DY/2.][ToLook0:ToLook0+2])[Sense])
+        Output[Direction] = SortList(ObjList,RankMin)
+    else :
+        print ("Error : the composite box being created has no neighbours, how on earth do you want us to inherit its mesh parameters!!!")
+
+
+    return Output
+
 def IndexMultiOcc (Array,Element) :
-        """
-        This functions returns the occurrences indices of Element in Array.
-        As opposed to Array.index(Element) method, this allows determining      
-        multiple entries rather than just the first one!
-        """
-        Output = []
-        try : Array.index(Element)
-        except ValueError : print "No more occurrences"
-        else : Output.append(Array.index(Element))
-                
-        if not(Output == []) and len(Array) > 1 :
-                for index, ArrElem in enumerate(Array[Output[0]+1:]) :
-                        if ArrElem == Element : Output.append(index+Output[0]+1)
-                 
-        return Output
-        
+    """
+    This functions returns the occurrences indices of Element in Array.
+    As opposed to Array.index(Element) method, this allows determining
+    multiple entries rather than just the first one!
+    """
+    Output = []
+    try : Array.index(Element)
+    except ValueError : print("No more occurrences")
+    else : Output.append(Array.index(Element))
+
+    if not(Output == []) and len(Array) > 1 :
+        for index, ArrElem in enumerate(Array[Output[0]+1:]) :
+            if ArrElem == Element : Output.append(index+Output[0]+1)
+
+    return Output
+
 def SortList (ValList, CritList):
-        Output = []
-        SortedCritList = copy.copy(CritList)
-        SortedCritList.sort()
-        for i in range(0,len(ValList)):
-                index = CritList.index(SortedCritList[i])
-                Output.append(ValList[index])
-        return Output
+    Output = []
+    SortedCritList = sorted(copy.copy(CritList))
+    for i in range(0,len(ValList)):
+        index = CritList.index(SortedCritList[i])
+        Output.append(ValList[index])
+    return Output
 
 def ExtrapPoint (Ptref,Vref1,Vref2,Delta):
-        """
-        This function allows determining the absolute coordinates of an extrapolation point
-        as shown in the following :
-        
-        
-        ExtrapPoint x---Vref2->--------o
-                   /       delta_glob  |Vref1 
-                  /                    |
-           Ptref x---------------------+
-                        delta_loc * Nseg
-                        
-             Delta = (delta_loc - delta_glob) * Nseg    
-        """
-        
-        X = Ptref[0] + Vref1[0] + Delta*Vref2[0]
-        Y = Ptref[1] + Vref1[1] + Delta*Vref2[1]
-        return (X,Y,)
-        
+    """
+    This function allows determining the absolute coordinates of an extrapolation point
+    as shown in the following :
+
+
+    ExtrapPoint x---Vref2->--------o
+               /       delta_glob  |Vref1
+              /                    |
+       Ptref x---------------------+
+                    delta_loc * Nseg
+
+         Delta = (delta_loc - delta_glob) * Nseg
+    """
+
+    X = Ptref[0] + Vref1[0] + Delta*Vref2[0]
+    Y = Ptref[1] + Vref1[1] + Delta*Vref2[1]
+    return (X,Y,)
index f7f250637015aa9c43c99583185bd1d73b0495bb..18885c836bb239d13d8e8547551837ffb6d47f96 100644 (file)
 import math, Config
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New( Config.theStudy )
+geompy = geomBuilder.New()
 
 def Go(GeoObj, CutPlnLst, OutLvlLst, PrefixLst, Publish):
 
-       """
-       This function cuts any geometry (with infinite trim !) into several subgeometries that are cleanly saved inside the navigation tree. (Check GoTrim for the same functionality with custom trim size)
-         - GeoObj is the geometrical object to be cut and grouped
-         - CutPlnLst is a list of plane definitions. Each plane is a 6-tuple (contains 6 values). The first three represent the coordinates of the origin point and the second three represent the coordinates of the normal vector to the plane
-               Example 1: [(0,0,0,1,0,0)]: cut along a plane passing through the origin and normal to the x-axis
-               Example 2: [(0,0,0,1,0,0),(50,0,0,0,1,0)]: in addition to the first plane cut, cut through a plane passing by (50,0,0) and normal to the y axis.
-               Note that the plane size us determined automatically from the size of the geometry in question (using a very big trim size = 100 x length of geometry!)
-         - OutLvlLst is a list containing integers that represent the inner sectioning level with respect to the original geometry type
-               A value of 1 means that the section will provide elements of one level lower than the original type. For example a solid sectioned at level 1 will produce faces. A Face sectioned at level 1 will produce edges.
-               A value of 2 means that a deeper sectioning will be applied. A solid sectioned with level 2 will give faces and edges. A face will give edges and vertices. An edge will give only vertices
-               The number of elements in this list should be (this is verified in the code) equal to the number of elements in the plane cut list. This is logical.
-               Example 1: [1]
-               Example 2: [1, 2], This means that the cut over the second plane will produce two types of elements unlike the first cut which will only output the first level objects.
-         - PrefixLst is a list of strings that contains the naming Prefixes that are used by the script to generate the subshape names. This is very useful for relating the results to the sectioning requested.
-               Example 1: ['Entry']
-               Example 2: ['Entry','Exit']     The resulting groups from the sectioning with plane no.1 will then be saved as "Entry_FACE" and/or "Entry_EDGE" according to the original geometry object type and the cutting level
-       
-       Imagine that we have a solid called ExampleSolid, an example command will be:
-       CutnGroup.Go(ExampleSolid,[(0,0,0,1,0,0),(50,0,0,0,1,0)],[1, 2],['Entry','Exit'])
-       """
-
-       NumCuts = CheckInput(CutPlnLst, OutLvlLst, PrefixLst, 1)
-       OrigType = FindStandType(GeoObj,0)
-       InvDictionary = dict((v,k) for k, v in geompy.ShapeType.iteritems())    # Give geometry type name as a function of standard type numbering, ex: 4=FACE, 6=EDGE, 7=VERTEX
-       TrimSize = geompy.BasicProperties(GeoObj)[0]*100
-       CutPlane = [] ; Sections = [] ; Parts = []
-       
-       if NumCuts:
-               for i in range(0, NumCuts):             # Loop over the cutting planes to create them one by one
-                       CutPlane.append(CreatePlane(CutPlnLst[i],TrimSize))
-               OutFather = geompy.MakePartition([GeoObj],CutPlane, [], [],FindStandType(GeoObj,1), 0, [], 0)   #Creating the partition object
-               if Publish: geompy.addToStudy(OutFather,'SectionedObject')
-               for i in range(0, NumCuts):
-                       for j in range(OrigType+1+2, OrigType+1+2*(OutLvlLst[i]+1),2):
-                               if j == 8 : j = 7;      # Exception for the vertex case (=7)
-                               PossSubShapesID = geompy.SubShapeAllIDs(OutFather,j)    # List of subshape IDs than correspond to the required cutting level (section type : face/wire/vertex)
-                               PossSubShapes = geompy.ExtractShapes(OutFather,j)               # and the corresponding objects
-                               Accepted = []
-                               for k in range(0,len(PossSubShapesID)):         # Loop over all the subshapes checking if they belong to the cutting plane! if yes add them to current list
-                                       if  IsOnPlane(PossSubShapes[k], CutPlnLst[i], 1e-7):                    
-                                               Accepted.append(PossSubShapesID[k])
-                               if Accepted :                                   # If some element is found, save it as a group with the prescribed Prefix
-                                       dummyObj = geompy.CreateGroup(OutFather, j)
-                                       geompy.UnionIDs(dummyObj, Accepted)
-                                       Sections.append(dummyObj)
-                                       if Publish:geompy.addToStudyInFather(OutFather, dummyObj, PrefixLst[i]+"_"+InvDictionary[j][0:2])
-                               else :
-                                       print "Warning: For the section no.", i, ", No intersection of type " + InvDictionary[j] + " was found. Hence, no corresponding groups were created"
-               
-               SubShapesID = geompy.SubShapeAllIDs(OutFather,OrigType+1)               # Saving also the groups corresponding to the sectioned item of the same type: ex. A solid into n sub-solids due to the sections
-               for i in range(0,len(SubShapesID)):
-                       dummyObj = geompy.CreateGroup(OutFather, OrigType+1)
-                       geompy.UnionIDs(dummyObj, [SubShapesID[i]])
-                       Parts.append(dummyObj)
-                       if Publish: geompy.addToStudyInFather(OutFather, dummyObj, "SB"+"_"+InvDictionary[OrigType+1][0:3]+"_"+str(i+1))
-
-               return OutFather, Sections, Parts
-       else:
-               print("Fatal error, the routine cannot continue any further, check your input variables")
-               return -1
+    """
+    This function cuts any geometry (with infinite trim !) into several subgeometries that are cleanly saved inside the navigation tree. (Check GoTrim for the same functionality with custom trim size)
+      - GeoObj is the geometrical object to be cut and grouped
+      - CutPlnLst is a list of plane definitions. Each plane is a 6-tuple (contains 6 values). The first three represent the coordinates of the origin point and the second three represent the coordinates of the normal vector to the plane
+            Example 1: [(0,0,0,1,0,0)]: cut along a plane passing through the origin and normal to the x-axis
+            Example 2: [(0,0,0,1,0,0),(50,0,0,0,1,0)]: in addition to the first plane cut, cut through a plane passing by (50,0,0) and normal to the y axis.
+            Note that the plane size us determined automatically from the size of the geometry in question (using a very big trim size = 100 x length of geometry!)
+      - OutLvlLst is a list containing integers that represent the inner sectioning level with respect to the original geometry type
+            A value of 1 means that the section will provide elements of one level lower than the original type. For example a solid sectioned at level 1 will produce faces. A Face sectioned at level 1 will produce edges.
+            A value of 2 means that a deeper sectioning will be applied. A solid sectioned with level 2 will give faces and edges. A face will give edges and vertices. An edge will give only vertices
+            The number of elements in this list should be (this is verified in the code) equal to the number of elements in the plane cut list. This is logical.
+            Example 1: [1]
+            Example 2: [1, 2], This means that the cut over the second plane will produce two types of elements unlike the first cut which will only output the first level objects.
+      - PrefixLst is a list of strings that contains the naming Prefixes that are used by the script to generate the subshape names. This is very useful for relating the results to the sectioning requested.
+            Example 1: ['Entry']
+            Example 2: ['Entry','Exit']     The resulting groups from the sectioning with plane no.1 will then be saved as "Entry_FACE" and/or "Entry_EDGE" according to the original geometry object type and the cutting level
+
+    Imagine that we have a solid called ExampleSolid, an example command will be:
+    CutnGroup.Go(ExampleSolid,[(0,0,0,1,0,0),(50,0,0,0,1,0)],[1, 2],['Entry','Exit'])
+    """
+
+    NumCuts = CheckInput(CutPlnLst, OutLvlLst, PrefixLst, 1)
+    OrigType = FindStandType(GeoObj,0)
+    InvDictionary = {v: k for k, v in geompy.ShapeType.items()}  # Give geometry type name as a function of standard type numbering, ex: 4=FACE, 6=EDGE, 7=VERTEX
+    TrimSize = geompy.BasicProperties(GeoObj)[0]*100
+    CutPlane = [] ; Sections = [] ; Parts = []
+
+    if NumCuts:
+        for i in range(0, NumCuts):             # Loop over the cutting planes to create them one by one
+            CutPlane.append(CreatePlane(CutPlnLst[i],TrimSize))
+        OutFather = geompy.MakePartition([GeoObj],CutPlane, [], [],FindStandType(GeoObj,1), 0, [], 0)   #Creating the partition object
+        if Publish: geompy.addToStudy(OutFather,'SectionedObject')
+        for i in range(0, NumCuts):
+            for j in range(OrigType+1+2, OrigType+1+2*(OutLvlLst[i]+1),2):
+                if j == 8 : j = 7;      # Exception for the vertex case (=7)
+                PossSubShapesID = geompy.SubShapeAllIDs(OutFather,j)    # List of subshape IDs than correspond to the required cutting level (section type : face/wire/vertex)
+                PossSubShapes = geompy.ExtractShapes(OutFather,j)               # and the corresponding objects
+                Accepted = []
+                for k in range(0,len(PossSubShapesID)):         # Loop over all the subshapes checking if they belong to the cutting plane! if yes add them to current list
+                    if  IsOnPlane(PossSubShapes[k], CutPlnLst[i], 1e-7):
+                        Accepted.append(PossSubShapesID[k])
+                if Accepted :                                   # If some element is found, save it as a group with the prescribed Prefix
+                    dummyObj = geompy.CreateGroup(OutFather, j)
+                    geompy.UnionIDs(dummyObj, Accepted)
+                    Sections.append(dummyObj)
+                    if Publish:geompy.addToStudyInFather(OutFather, dummyObj, PrefixLst[i]+"_"+InvDictionary[j][0:2])
+                else :
+                    print("Warning: For the section no.", i, ", No intersection of type " + InvDictionary[j] + " was found. Hence, no corresponding groups were created")
+
+        SubShapesID = geompy.SubShapeAllIDs(OutFather,OrigType+1)               # Saving also the groups corresponding to the sectioned item of the same type: ex. A solid into n sub-solids due to the sections
+        for i in range(0,len(SubShapesID)):
+            dummyObj = geompy.CreateGroup(OutFather, OrigType+1)
+            geompy.UnionIDs(dummyObj, [SubShapesID[i]])
+            Parts.append(dummyObj)
+            if Publish: geompy.addToStudyInFather(OutFather, dummyObj, "SB"+"_"+InvDictionary[OrigType+1][0:3]+"_"+str(i+1))
+
+        return OutFather, Sections, Parts
+    else:
+        print("Fatal error, the routine cannot continue any further, check your input variables")
+        return -1
 
 def GoTrim(GeoObj, CutPlnLst, OutLvlLst, PrefixLst, Publish):
 
-       """
-       This function cuts any geometry into several subgeometries that are cleanly saved inside the navigation tree with a fully customizable trim size.
-         - GeoObj is the geometrical object to be cut and grouped
-         - CutPlnLst is a list of plane definitions. Each plane is a 7-tuple (contains 7 values). The first three represent the coordinates of the origin point and the second three represent the coordinates of the normal vector to the plane, the last value corresponds to the trim size of the planes
-               Example 1: [(0,0,0,1,0,0,5)]: cut along a plane passing through the origin and normal to the x-axis with a trim size of 5
-               Example 2: [(0,0,0,1,0,0,5),(50,0,0,0,1,0,10)]: in addition to the first plane cut, cut through a plane passing by (50,0,0) and normal to the y axis with a trim size of 10
-         - OutLvlLst is a list containing integers that represent the inner sectioning level with respect to the original geometry type
-               A value of 1 means that the section will provide elements of one level lower than the original type. For example a solid sectioned at level 1 will produce faces. A Face sectioned at level 1 will produce edges.
-               A value of 2 means that a deeper sectioning will be applied. A solid sectioned with level 2 will give faces and edges. A face will give edges and vertices. An edge will give only vertices
-               The number of elements in this list should be (this is verified in the code) equal to the number of elements in the plane cut list. This is logical.
-               Example 1: [1]
-               Example 2: [1, 2], This means that the cut over the second plane will produce two types of elements unlike the first cut which will only output the first level objects.
-         - PrefixLst is a list of strings that contains the naming Prefixes that are used by the script to generate the subshape names. This is very useful for relating the results to the sectioning requested.
-               Example 1: ['Entry']
-               Example 2: ['Entry','Exit']     The resulting groups from the sectioning with plane no.1 will then be saved as "Entry_FACE" and/or "Entry_EDGE" according to the original geometry object type and the cutting level
-       
-       Imagine that we have a solid called ExampleSolid, an example command will be:
-       CutnGroup.Go(ExampleSolid,[(0,0,0,1,0,0,5),(50,0,0,0,1,0,10)],[1, 2],['Entry','Exit'])
-       """
-
-       NumCuts = CheckInput(CutPlnLst, OutLvlLst, PrefixLst, 0)
-       OrigType = FindStandType(GeoObj,0)
-       InvDictionary = dict((v,k) for k, v in geompy.ShapeType.iteritems())    # Give geometry type name as a function of standard type numbering, ex: 4=FACE, 6=EDGE, 7=VERTEX
-       CutPlane = [] ; Sections = [] ; Parts = []
-       if NumCuts:
-               for i in range(0, NumCuts):             # Loop over the cutting planes to create them one by one
-                       CutPlane.append(CreatePlane(CutPlnLst[i][0:6],CutPlnLst[i][6]))
-               OutFather = geompy.MakePartition([GeoObj],CutPlane, [], [],FindStandType(GeoObj,1), 0, [], 0)   #Creating the partition object
-               if Publish: geompy.addToStudy(OutFather,'SectionedObject')
-               for i in range(0, NumCuts):
-                       for j in range(OrigType+1+2, OrigType+1+2*(OutLvlLst[i]+1),2):
-                               if j == 8 : j = 7;      # Exception for the vertex case (=7)
-                               PossSubShapesID = geompy.SubShapeAllIDs(OutFather,j)    # List of subshape IDs than correspond to the required cutting level (section type : face/wire/vertex)
-                               PossSubShapes = geompy.ExtractShapes(OutFather,j)               # and the corresponding objects
-                               Accepted = []
-                               for k in range(0,len(PossSubShapesID)):         # Loop over all the subshapes checking if they belong to the cutting plane WITH THE TRIM SIZE CONDITION! if yes add them to current list
-                                       if  IsOnPlane(PossSubShapes[k], CutPlnLst[i], 1e-7) and Distance2Pt(geompy.PointCoordinates(geompy.MakeCDG(PossSubShapes[k])),CutPlnLst[i][0:3])<=CutPlnLst[i][-1]:                     
-                                               Accepted.append(PossSubShapesID[k])
-                               if Accepted :                                   # If some element is found, save it as a group with the prescribed Prefix
-                                       dummyObj = geompy.CreateGroup(OutFather, j)
-                                       geompy.UnionIDs(dummyObj, Accepted)
-                                       Sections.append(dummyObj)
-                                       if Publish: geompy.addToStudyInFather(OutFather, dummyObj, PrefixLst[i]+"_"+InvDictionary[j][0:2])
-                               else :
-                                       print "Warning: For the section no.", i, ", No intersection of type " + InvDictionary[j] + " was found. Hence, no corresponding groups were created"
-               
-               SubShapesID = geompy.SubShapeAllIDs(OutFather,OrigType+1)               # Saving also the groups corresponding to the sectioned item of the same type: ex. A solid into n sub-solids due to the sections
-               for i in range(0,len(SubShapesID)):
-                       dummyObj = geompy.CreateGroup(OutFather, OrigType+1)
-                       geompy.UnionIDs(dummyObj, [SubShapesID[i]])
-                       Parts.append(dummyObj)
-                       if Publish: geompy.addToStudyInFather(OutFather, dummyObj, "SB"+"_"+InvDictionary[OrigType+1][0:3]+"_"+str(i+1))
-
-               return OutFather, Sections, Parts
-       else:
-               print("Fatal error, the routine cannot continue any further, check your input variables")
-               return -1
+    """
+    This function cuts any geometry into several subgeometries that are cleanly saved inside the navigation tree with a fully customizable trim size.
+      - GeoObj is the geometrical object to be cut and grouped
+      - CutPlnLst is a list of plane definitions. Each plane is a 7-tuple (contains 7 values). The first three represent the coordinates of the origin point and the second three represent the coordinates of the normal vector to the plane, the last value corresponds to the trim size of the planes
+            Example 1: [(0,0,0,1,0,0,5)]: cut along a plane passing through the origin and normal to the x-axis with a trim size of 5
+            Example 2: [(0,0,0,1,0,0,5),(50,0,0,0,1,0,10)]: in addition to the first plane cut, cut through a plane passing by (50,0,0) and normal to the y axis with a trim size of 10
+      - OutLvlLst is a list containing integers that represent the inner sectioning level with respect to the original geometry type
+            A value of 1 means that the section will provide elements of one level lower than the original type. For example a solid sectioned at level 1 will produce faces. A Face sectioned at level 1 will produce edges.
+            A value of 2 means that a deeper sectioning will be applied. A solid sectioned with level 2 will give faces and edges. A face will give edges and vertices. An edge will give only vertices
+            The number of elements in this list should be (this is verified in the code) equal to the number of elements in the plane cut list. This is logical.
+            Example 1: [1]
+            Example 2: [1, 2], This means that the cut over the second plane will produce two types of elements unlike the first cut which will only output the first level objects.
+      - PrefixLst is a list of strings that contains the naming Prefixes that are used by the script to generate the subshape names. This is very useful for relating the results to the sectioning requested.
+            Example 1: ['Entry']
+            Example 2: ['Entry','Exit']     The resulting groups from the sectioning with plane no.1 will then be saved as "Entry_FACE" and/or "Entry_EDGE" according to the original geometry object type and the cutting level
+
+    Imagine that we have a solid called ExampleSolid, an example command will be:
+    CutnGroup.Go(ExampleSolid,[(0,0,0,1,0,0,5),(50,0,0,0,1,0,10)],[1, 2],['Entry','Exit'])
+    """
+
+    NumCuts = CheckInput(CutPlnLst, OutLvlLst, PrefixLst, 0)
+    OrigType = FindStandType(GeoObj,0)
+    InvDictionary = {v: k for k, v in geompy.ShapeType.items()}  # Give geometry type name as a function of standard type numbering, ex: 4=FACE, 6=EDGE, 7=VERTEX
+    CutPlane = [] ; Sections = [] ; Parts = []
+    if NumCuts:
+        for i in range(0, NumCuts):             # Loop over the cutting planes to create them one by one
+            CutPlane.append(CreatePlane(CutPlnLst[i][0:6],CutPlnLst[i][6]))
+        OutFather = geompy.MakePartition([GeoObj],CutPlane, [], [],FindStandType(GeoObj,1), 0, [], 0)   #Creating the partition object
+        if Publish: geompy.addToStudy(OutFather,'SectionedObject')
+        for i in range(0, NumCuts):
+            for j in range(OrigType+1+2, OrigType+1+2*(OutLvlLst[i]+1),2):
+                if j == 8 : j = 7;      # Exception for the vertex case (=7)
+                PossSubShapesID = geompy.SubShapeAllIDs(OutFather,j)    # List of subshape IDs than correspond to the required cutting level (section type : face/wire/vertex)
+                PossSubShapes = geompy.ExtractShapes(OutFather,j)               # and the corresponding objects
+                Accepted = []
+                for k in range(0,len(PossSubShapesID)):         # Loop over all the subshapes checking if they belong to the cutting plane WITH THE TRIM SIZE CONDITION! if yes add them to current list
+                    if  IsOnPlane(PossSubShapes[k], CutPlnLst[i], 1e-7) and Distance2Pt(geompy.PointCoordinates(geompy.MakeCDG(PossSubShapes[k])),CutPlnLst[i][0:3])<=CutPlnLst[i][-1]:
+                        Accepted.append(PossSubShapesID[k])
+                if Accepted :                                   # If some element is found, save it as a group with the prescribed Prefix
+                    dummyObj = geompy.CreateGroup(OutFather, j)
+                    geompy.UnionIDs(dummyObj, Accepted)
+                    Sections.append(dummyObj)
+                    if Publish: geompy.addToStudyInFather(OutFather, dummyObj, PrefixLst[i]+"_"+InvDictionary[j][0:2])
+                else :
+                    print("Warning: For the section no.", i, ", No intersection of type " + InvDictionary[j] + " was found. Hence, no corresponding groups were created")
+
+        SubShapesID = geompy.SubShapeAllIDs(OutFather,OrigType+1)               # Saving also the groups corresponding to the sectioned item of the same type: ex. A solid into n sub-solids due to the sections
+        for i in range(0,len(SubShapesID)):
+            dummyObj = geompy.CreateGroup(OutFather, OrigType+1)
+            geompy.UnionIDs(dummyObj, [SubShapesID[i]])
+            Parts.append(dummyObj)
+            if Publish: geompy.addToStudyInFather(OutFather, dummyObj, "SB"+"_"+InvDictionary[OrigType+1][0:3]+"_"+str(i+1))
+
+        return OutFather, Sections, Parts
+    else:
+        print("Fatal error, the routine cannot continue any further, check your input variables")
+        return -1
 def FindStandType(GeoObj, method):
-       """
-       Find the standard index for the Geometrical object/compound type input, see dictionary in geompy.ShapeType
-       """
-       TopType = GeoObj.GetMaxShapeType().__str__()
-       UnModType = geompy.ShapeType[TopType]
-       if method == 0 :
-               StandType = UnModType-int(not(UnModType%2))             # So that wires and edges and considered the same, faces and shells, and so on
-       else :
-               StandType = UnModType
-
-       return(StandType)
+    """
+    Find the standard index for the Geometrical object/compound type input, see dictionary in geompy.ShapeType
+    """
+    TopType = GeoObj.GetMaxShapeType().__str__()
+    UnModType = geompy.ShapeType[TopType]
+    if method == 0 :
+        StandType = UnModType-int(not(UnModType%2))             # So that wires and edges and considered the same, faces and shells, and so on
+    else :
+        StandType = UnModType
+
+    return(StandType)
 
 def CreatePlane(CutPlnVar,Trim):
-       """
-       Creates a temporary point and vector in salome in order to build the sectioning planes needed
-       """
-       Temp_Vtx = geompy.MakeVertex(CutPlnVar[0], CutPlnVar[1], CutPlnVar[2])
-       Temp_Vec = geompy.MakeVectorDXDYDZ(CutPlnVar[3], CutPlnVar[4], CutPlnVar[5])
-       CutPlane = geompy.MakePlane(Temp_Vtx, Temp_Vec, Trim)
-       return(CutPlane)
+    """
+    Creates a temporary point and vector in salome in order to build the sectioning planes needed
+    """
+    Temp_Vtx = geompy.MakeVertex(CutPlnVar[0], CutPlnVar[1], CutPlnVar[2])
+    Temp_Vec = geompy.MakeVectorDXDYDZ(CutPlnVar[3], CutPlnVar[4], CutPlnVar[5])
+    CutPlane = geompy.MakePlane(Temp_Vtx, Temp_Vec, Trim)
+    return(CutPlane)
 
 def CheckInput(CutPlnLst, OutLvlLst, PrefixLst, AutoTrim):
-       """
-       Checks the user input specifically if all needed parameters are provided
-       """
-       if not ((len(CutPlnLst) == len(OutLvlLst)) and (len(CutPlnLst) == len(PrefixLst))):
-               print("Missing information about one or more of the cut planes") 
-               return 0
-       elif not ((len(CutPlnLst[0]) == 6+int(not AutoTrim))):
-               print("For each cutting plane you need to specify 6 parameters = 2 x 3 coordinates") 
-               return 0
-       else:
-               return len(CutPlnLst)
+    """
+    Checks the user input specifically if all needed parameters are provided
+    """
+    if not ((len(CutPlnLst) == len(OutLvlLst)) and (len(CutPlnLst) == len(PrefixLst))):
+        print("Missing information about one or more of the cut planes")
+        return 0
+    elif not ((len(CutPlnLst[0]) == 6+int(not AutoTrim))):
+        print("For each cutting plane you need to specify 6 parameters = 2 x 3 coordinates")
+        return 0
+    else:
+        return len(CutPlnLst)
 
 def IsOnPlane(GeoSubObj, CutPlnVar, tolerance):
-       """
-       Checks whether a geometry (vertex, segment, or face) belongs *completely* to the plane defined as a point and a normal vector
-       """
-       # lambda function that represents the plane equation, function = 0 <=> Pt defined with Coor belongs to plane
-       PlaneEq = lambda Coor: CutPlnVar[3]*(Coor[0]-CutPlnVar[0])+CutPlnVar[4]*(Coor[1]-CutPlnVar[1])+CutPlnVar[5]*(Coor[2]-CutPlnVar[2])
-       OrigType = FindStandType(GeoSubObj,0)
-       if (OrigType >= 7):             # Vertex
-               NonTrimDecision = abs(PlaneEq(geompy.PointCoordinates(GeoSubObj))) < tolerance
-                if len(CutPlnVar) == 6 : return NonTrimDecision # No trim condition used
-                else : return (NonTrimDecision and Distance2Pt(CutPlnVar[0:3],geompy.PointCoordinates(GeoSubObj))<=CutPlnVar[6]/2)
-       elif (OrigType >= 5):           # Line, decompose into two points then call recursively IsOnPlane function!
-               Verdict = True
-               for i in range(0,2):
-                       Verdict = Verdict and IsOnPlane(geompy.GetVertexByIndex(GeoSubObj,i), CutPlnVar, tolerance)
-               return Verdict
-       elif (OrigType >= 3):           # Face, decompose into three points then call recursively IsOnPlane function!
-               if IsOnPlane(geompy.MakeCDG(GeoSubObj),CutPlnVar, tolerance) : # Center of gravity belongs to plane, check if normal is parallel to plane
-                       NormalP1Coor = geompy.PointCoordinates(geompy.GetVertexByIndex(geompy.GetNormal(GeoSubObj),0))
-                       NormalP2Coor = geompy.PointCoordinates(geompy.GetVertexByIndex(geompy.GetNormal(GeoSubObj),1))
-                       Normal = [NormalP1Coor[0]-NormalP2Coor[0], NormalP1Coor[1]-NormalP2Coor[1], NormalP1Coor[2]-NormalP2Coor[2]]
-                       CrossP = CrossProd(CutPlnVar[3:6],Normal)               # Checks whether normals (of section plane and of face) are parallel or not
-                       if (abs(CrossP[0])<tolerance and abs(CrossP[1])<tolerance and abs(CrossP[2])<tolerance):        # meaning zero cross product => parallel
-                               return True
-                       else :
-                               return False
-               else :
-                       return False
+    """
+    Checks whether a geometry (vertex, segment, or face) belongs *completely* to the plane defined as a point and a normal vector
+    """
+    # lambda function that represents the plane equation, function = 0 <=> Pt defined with Coor belongs to plane
+    PlaneEq = lambda Coor: CutPlnVar[3]*(Coor[0]-CutPlnVar[0])+CutPlnVar[4]*(Coor[1]-CutPlnVar[1])+CutPlnVar[5]*(Coor[2]-CutPlnVar[2])
+    OrigType = FindStandType(GeoSubObj,0)
+    if (OrigType >= 7):             # Vertex
+        NonTrimDecision = abs(PlaneEq(geompy.PointCoordinates(GeoSubObj))) < tolerance
+        if len(CutPlnVar) == 6 : return NonTrimDecision # No trim condition used
+        else : return (NonTrimDecision and Distance2Pt(CutPlnVar[0:3],geompy.PointCoordinates(GeoSubObj))<=CutPlnVar[6]/2)
+    elif (OrigType >= 5):           # Line, decompose into two points then call recursively IsOnPlane function!
+        Verdict = True
+        for i in range(0,2):
+            Verdict = Verdict and IsOnPlane(geompy.GetVertexByIndex(GeoSubObj,i), CutPlnVar, tolerance)
+        return Verdict
+    elif (OrigType >= 3):           # Face, decompose into three points then call recursively IsOnPlane function!
+        if IsOnPlane(geompy.MakeCDG(GeoSubObj),CutPlnVar, tolerance) : # Center of gravity belongs to plane, check if normal is parallel to plane
+            NormalP1Coor = geompy.PointCoordinates(geompy.GetVertexByIndex(geompy.GetNormal(GeoSubObj),0))
+            NormalP2Coor = geompy.PointCoordinates(geompy.GetVertexByIndex(geompy.GetNormal(GeoSubObj),1))
+            Normal = [NormalP1Coor[0]-NormalP2Coor[0], NormalP1Coor[1]-NormalP2Coor[1], NormalP1Coor[2]-NormalP2Coor[2]]
+            CrossP = CrossProd(CutPlnVar[3:6],Normal)               # Checks whether normals (of section plane and of face) are parallel or not
+            if (abs(CrossP[0])<tolerance and abs(CrossP[1])<tolerance and abs(CrossP[2])<tolerance):        # meaning zero cross product => parallel
+                return True
+            else :
+                return False
+        else :
+            return False
 
 
 def CrossProd(V1,V2):
-       """
-       Determines the cross product of two 3D vectors
-       """
-       return ([V1[1]*V2[2]-V1[2]*V2[1], V1[2]*V2[0]-V1[0]*V2[2], V1[0]*V2[1]-V1[1]*V2[0]])
+    """
+    Determines the cross product of two 3D vectors
+    """
+    return ([V1[1]*V2[2]-V1[2]*V2[1], V1[2]*V2[0]-V1[0]*V2[2], V1[0]*V2[1]-V1[1]*V2[0]])
 
 def Distance2Pt(P1,P2):
-       """
-       Returns the distance between two points
-       """
-       return (math.sqrt((P1[0]-P2[0])**2+(P1[1]-P2[1])**2+(P1[2]-P2[2])**2))
+    """
+    Returns the distance between two points
+    """
+    return (math.sqrt((P1[0]-P2[0])**2+(P1[1]-P2[1])**2+(P1[2]-P2[2])**2))
index 07183ff5aee2380b0215c390271512820f1e5b9d..2ddb72c24fa1395d6825cd0964d198783e60c1a3 100644 (file)
 
 
 
-# This is an automation of the cylinder-box object, defined with the coordinates of its center, its radius, and the box's 
+# This is an automation of the cylinder-box object, defined with the coordinates of its center, its radius, and the box's
 # boundary size.
 # The pitch ratio is calculated automatically from the minimum of the box dimensions on x and y.
 # This functions can take a groups input containing the group names of 4 sides in addition to the internal circular boundary
 # in the following order : [South,North,West,East,Internal].
 
-import sys, math, commands
-CWD = commands.getoutput('pwd')
+import sys, math, subprocess
+CWD = subprocess.getoutput('pwd')
 sys.path.append(CWD)
 
 
 from MacObject import *
 import Config, GenFunctions
 
-def Cylinder (X0 , Y0 , D , DX , DY , LocalMeshing , **args) : 
-       if args.__contains__('DLocal') : DLocal = float(args['DLocal']) 
-       else : DLocal = float(min(DX,DY))
-
-        # K is the pitch ratio
-        K = float(D)/(DLocal-D)
-        print "A local pitch ratio of K =", K ," will be used.  "
-        NumCuts =  2*GenFunctions.QuarCylParam(K)
-        InternalMeshing = int(math.ceil(math.pi*D/(4*NumCuts*LocalMeshing)))
-       if InternalMeshing == 0 : InternalMeshing = 1           # This sets a minimum meshing condition in order to avoid an error. The user is notified of the value considered for the local meshing
-        print "Possible Local meshing is :", math.pi*D/(4*NumCuts*InternalMeshing), "\nThis value is returned by this function for your convenience.\n"
-        if args.__contains__('groups') :
-                GroupNames = args['groups']
-       else : GroupNames = [None, None, None, None, None]
-        
-        if DY == DLocal :
-                if DX == DLocal:
-                        GN1 = [None,GroupNames[1],None,GroupNames[3],GroupNames[4]]
-                        GN2 = [None,GroupNames[1],GroupNames[2],None,GroupNames[4]]
-                        GN3 = [GroupNames[0],None,GroupNames[2],None,GroupNames[4]]
-                        GN4 = [GroupNames[0],None,None,GroupNames[3],GroupNames[4]]
-                else :
-                        GN1 = [None,GroupNames[1],None,None,GroupNames[4]]
-                        GN2 = [None,GroupNames[1],None,None,GroupNames[4]]
-                        GN3 = [GroupNames[0],None,None,None,GroupNames[4]]
-                        GN4 = [GroupNames[0],None,None,None,GroupNames[4]]
-                        
-                        GN5 = [GroupNames[0],GroupNames[1],None,GroupNames[3]]
-                        GN6 = [GroupNames[0],GroupNames[1],GroupNames[2],None]
+def Cylinder (X0 , Y0 , D , DX , DY , LocalMeshing , **args) :
+    if args.__contains__('DLocal') : DLocal = float(args['DLocal'])
+    else : DLocal = float(min(DX,DY))
+
+    # K is the pitch ratio
+    K = float(D)/(DLocal-D)
+    print("A local pitch ratio of K =", K ," will be used.  ")
+    NumCuts =  2*GenFunctions.QuarCylParam(K)
+    InternalMeshing = int(math.ceil(math.pi*D/(4*NumCuts*LocalMeshing)))
+    if InternalMeshing == 0 : InternalMeshing = 1           # This sets a minimum meshing condition in order to avoid an error. The user is notified of the value considered for the local meshing
+    print("Possible Local meshing is :", math.pi*D/(4*NumCuts*InternalMeshing), "\nThis value is returned by this function for your convenience.\n")
+    if args.__contains__('groups') :
+        GroupNames = args['groups']
+    else : GroupNames = [None, None, None, None, None]
+
+    if DY == DLocal :
+        if DX == DLocal:
+            GN1 = [None,GroupNames[1],None,GroupNames[3],GroupNames[4]]
+            GN2 = [None,GroupNames[1],GroupNames[2],None,GroupNames[4]]
+            GN3 = [GroupNames[0],None,GroupNames[2],None,GroupNames[4]]
+            GN4 = [GroupNames[0],None,None,GroupNames[3],GroupNames[4]]
+        else :
+            GN1 = [None,GroupNames[1],None,None,GroupNames[4]]
+            GN2 = [None,GroupNames[1],None,None,GroupNames[4]]
+            GN3 = [GroupNames[0],None,None,None,GroupNames[4]]
+            GN4 = [GroupNames[0],None,None,None,GroupNames[4]]
+
+            GN5 = [GroupNames[0],GroupNames[1],None,GroupNames[3]]
+            GN6 = [GroupNames[0],GroupNames[1],GroupNames[2],None]
+    else :
+        if DX == DLocal:
+            GN1 = [None,None,None,GroupNames[3],GroupNames[4]]
+            GN2 = [None,None,GroupNames[2],None,GroupNames[4]]
+            GN3 = [None,None,GroupNames[2],None,GroupNames[4]]
+            GN4 = [None,None,None,GroupNames[3],GroupNames[4]]
+            GN7 = [GroupNames[0],None,GroupNames[2],GroupNames[3]]
+            GN8 = [None,GroupNames[1],GroupNames[2],GroupNames[3]]
         else :
-                if DX == DLocal:
-                        GN1 = [None,None,None,GroupNames[3],GroupNames[4]]
-                        GN2 = [None,None,GroupNames[2],None,GroupNames[4]]
-                        GN3 = [None,None,GroupNames[2],None,GroupNames[4]]
-                        GN4 = [None,None,None,GroupNames[3],GroupNames[4]]
-                        GN7 = [GroupNames[0],None,GroupNames[2],GroupNames[3]]
-                        GN8 = [None,GroupNames[1],GroupNames[2],GroupNames[3]]
-                else :
-                        GN1 = [None,None,None,None,GroupNames[4]]
-                        GN2 = [None,None,None,None,GroupNames[4]]
-                        GN3 = [None,None,None,None,GroupNames[4]]
-                        GN4 = [None,None,None,None,GroupNames[4]]
-                        
-                        GN5 = [None,None,None,GroupNames[3]]
-                        GN6 = [None,None,GroupNames[2],None]
-                        
-                        GN9  = [GroupNames[0],None,None,GroupNames[3]]
-                        GN10 = [GroupNames[0],None,None,None]
-                        GN11 = [GroupNames[0],None,GroupNames[2],None]
-                        
-                        GN12 = [None,GroupNames[1],None,GroupNames[3]]
-                        GN13 = [None,GroupNames[1],None,None]
-                        GN14 = [None,GroupNames[1],GroupNames[2],None]
-                        
-       Obj = []
-
-       Obj.append(MacObject('QuartCyl',[(X0+DLocal/4.,Y0+DLocal/4.),(DLocal/2.,DLocal/2.)],[InternalMeshing,'NE',K], groups = GN1))
-       Obj.append(MacObject('QuartCyl',[(X0-DLocal/4.,Y0+DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','NW',K], groups = GN2))
-       Obj.append(MacObject('QuartCyl',[(X0-DLocal/4.,Y0-DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','SW',K], groups = GN3))
-       Obj.append(MacObject('QuartCyl',[(X0+DLocal/4.,Y0-DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','SE',K], groups = GN4))
-
-       if DX > DLocal :
-               dX = (DX - DLocal)/2.
-               Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0),(dX,DLocal)],['auto'], groups = GN5))
-               Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0),(dX,DLocal)],['auto'], groups = GN6))
-
-       if DY > DLocal :
-               dY = (DY - DLocal)/2.
-               if DX > DLocal : 
-                       Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0-DLocal/2.-dY/2.),(dX,dY)],['auto'], groups = GN9))
-                       Obj.append(MacObject('CompBoxF',[(X0,Y0-DLocal/2.-dY/2.),(DLocal,dY)],['auto'], groups = GN10))
-                       Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0-DLocal/2.-dY/2.),(dX,dY)],['auto'], groups = GN11))
-                       Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0+DLocal/2.+dY/2.),(dX,dY)],['auto'], groups = GN12))
-                       Obj.append(MacObject('CompBoxF',[(X0,Y0+DLocal/2.+dY/2.),(DLocal,dY)],['auto'], groups = GN13))
-                       Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0+DLocal/2.+dY/2.),(dX,dY)],['auto'], groups = GN14))
-                else:
-                       Obj.append(MacObject('CompBoxF',[(X0,Y0-DLocal/2.-dY/2.),(DLocal,dY)],['auto'], groups = GN7))
-                       Obj.append(MacObject('CompBoxF',[(X0,Y0+DLocal/2.+dY/2.),(DLocal,dY)],['auto'], groups = GN8))
-                                       
-       return Obj
+            GN1 = [None,None,None,None,GroupNames[4]]
+            GN2 = [None,None,None,None,GroupNames[4]]
+            GN3 = [None,None,None,None,GroupNames[4]]
+            GN4 = [None,None,None,None,GroupNames[4]]
+
+            GN5 = [None,None,None,GroupNames[3]]
+            GN6 = [None,None,GroupNames[2],None]
+
+            GN9  = [GroupNames[0],None,None,GroupNames[3]]
+            GN10 = [GroupNames[0],None,None,None]
+            GN11 = [GroupNames[0],None,GroupNames[2],None]
+
+            GN12 = [None,GroupNames[1],None,GroupNames[3]]
+            GN13 = [None,GroupNames[1],None,None]
+            GN14 = [None,GroupNames[1],GroupNames[2],None]
+
+    Obj = []
+
+    Obj.append(MacObject('QuartCyl',[(X0+DLocal/4.,Y0+DLocal/4.),(DLocal/2.,DLocal/2.)],[InternalMeshing,'NE',K], groups = GN1))
+    Obj.append(MacObject('QuartCyl',[(X0-DLocal/4.,Y0+DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','NW',K], groups = GN2))
+    Obj.append(MacObject('QuartCyl',[(X0-DLocal/4.,Y0-DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','SW',K], groups = GN3))
+    Obj.append(MacObject('QuartCyl',[(X0+DLocal/4.,Y0-DLocal/4.),(DLocal/2.,DLocal/2.)],['auto','SE',K], groups = GN4))
+
+    if DX > DLocal :
+        dX = (DX - DLocal)/2.
+        Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0),(dX,DLocal)],['auto'], groups = GN5))
+        Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0),(dX,DLocal)],['auto'], groups = GN6))
+
+    if DY > DLocal :
+        dY = (DY - DLocal)/2.
+        if DX > DLocal :
+            Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0-DLocal/2.-dY/2.),(dX,dY)],['auto'], groups = GN9))
+            Obj.append(MacObject('CompBoxF',[(X0,Y0-DLocal/2.-dY/2.),(DLocal,dY)],['auto'], groups = GN10))
+            Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0-DLocal/2.-dY/2.),(dX,dY)],['auto'], groups = GN11))
+            Obj.append(MacObject('CompBoxF',[(X0+DLocal/2.+dX/2.,Y0+DLocal/2.+dY/2.),(dX,dY)],['auto'], groups = GN12))
+            Obj.append(MacObject('CompBoxF',[(X0,Y0+DLocal/2.+dY/2.),(DLocal,dY)],['auto'], groups = GN13))
+            Obj.append(MacObject('CompBoxF',[(X0-DLocal/2.-dX/2.,Y0+DLocal/2.+dY/2.),(dX,dY)],['auto'], groups = GN14))
+        else:
+            Obj.append(MacObject('CompBoxF',[(X0,Y0-DLocal/2.-dY/2.),(DLocal,dY)],['auto'], groups = GN7))
+            Obj.append(MacObject('CompBoxF',[(X0,Y0+DLocal/2.+dY/2.),(DLocal,dY)],['auto'], groups = GN8))
+
+    return Obj
index 71ac373e9ab98c42285bf1290c495783486266ee..56d1e083c765a516161625075252992ec41e6b6c 100644 (file)
@@ -27,845 +27,843 @@ import CutnGroup
 import CompositeBox
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New( Config.theStudy )
+geompy = geomBuilder.New()
 
 from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New( Config.theStudy )
+smesh = smeshBuilder.New()
 
 ##########################################################################################################
 
 def Box11 (MacObject):
-       if Config.debug : print "Generating regular box"
+    if Config.debug : print("Generating regular box")
 
-       dummy1 = geompy.MakeScaleAlongAxes( ElemBox11 (), None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
-       RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
+    dummy1 = geompy.MakeScaleAlongAxes( ElemBox11 (), None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
+    RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
 
-       MacObject.GeoChildren.append(RectFace)
-       MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
-        
-       if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
+    MacObject.GeoChildren.append(RectFace)
+    MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
 
-        if Config.publish :
-               MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
-               Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
+    if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
 
-               EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)  # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
-               Reg1D = MacObject.Mesh[0].Segment()
-               Reg1D.NumberOfSegments(MacObject.MeshPar[0])
+    if Config.publish :
+        MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
+        Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
 
-               MacObject.Mesh[0].Compute()                     # Generates the mesh
-                
-       MacObject.DirectionalMeshParams = [MacObject.MeshPar[0],MacObject.MeshPar[0],MacObject.MeshPar[0],MacObject.MeshPar[0]]
+        EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)  # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
+        Reg1D = MacObject.Mesh[0].Segment()
+        Reg1D.NumberOfSegments(MacObject.MeshPar[0])
 
-       MacObject.status = 1
-        Config.ListObj.append(MacObject)
-       return MacObject
+        MacObject.Mesh[0].Compute()                     # Generates the mesh
+
+    MacObject.DirectionalMeshParams = [MacObject.MeshPar[0],MacObject.MeshPar[0],MacObject.MeshPar[0],MacObject.MeshPar[0]]
+
+    MacObject.status = 1
+    Config.ListObj.append(MacObject)
+    return MacObject
 
 ##########################################################################################################
 
 def Box42 (MacObject):
-       if Config.debug : print "Generating box 4-2 reducer"
+    if Config.debug : print("Generating box 4-2 reducer")
+
+    Z_Axis = geompy.MakeVectorDXDYDZ(0., 0., 1.)
+    RotAngle = {'SN' : lambda : 0,
+                'NS' : lambda : math.pi,
+                'EW' : lambda : math.pi/2,
+                'WE' : lambda : -math.pi/2, }[MacObject.MeshPar[1]]()
+    dummy0 = geompy.MakeRotation( ElemBox42 () , Z_Axis, RotAngle )
+    dummy1 = geompy.MakeScaleAlongAxes( dummy0, None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
+    RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
 
-       Z_Axis = geompy.MakeVectorDXDYDZ(0., 0., 1.) 
-       RotAngle = {'SN' : lambda : 0,
-                   'NS' : lambda : math.pi,
-                   'EW' : lambda : math.pi/2,
-                   'WE' : lambda : -math.pi/2, }[MacObject.MeshPar[1]]()
-       dummy0 = geompy.MakeRotation( ElemBox42 () , Z_Axis, RotAngle )
-       dummy1 = geompy.MakeScaleAlongAxes( dummy0, None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
-       RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
+    MacObject.GeoChildren.append(RectFace)
+    MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
 
-       MacObject.GeoChildren.append(RectFace)
-       MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
-        
-       if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
+    if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
 
-        if Config.publish :
-               MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
-               Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
+    if Config.publish :
+        MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
+        Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
 
-               EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)  # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
-               Reg1D = MacObject.Mesh[0].Segment()
-               Reg1D.NumberOfSegments(MacObject.MeshPar[0])
+        EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)  # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
+        Reg1D = MacObject.Mesh[0].Segment()
+        Reg1D.NumberOfSegments(MacObject.MeshPar[0])
 
-               MacObject.Mesh[0].Compute()                     # Generates the mesh
+        MacObject.Mesh[0].Compute()                     # Generates the mesh
 
-       MacObject.status = 1
+    MacObject.status = 1
 
-       x = MacObject.MeshPar[0]
-       MacObject.DirectionalMeshParams = {'SN' : lambda : [3*x, 3*x, 4*x, 2*x],
-                                          'NS' : lambda : [3*x, 3*x, 2*x, 4*x],
-                                          'EW' : lambda : [2*x, 4*x, 3*x, 3*x],
-                                          'WE' : lambda : [4*x, 2*x, 3*x, 3*x], }[MacObject.MeshPar[1]]()
+    x = MacObject.MeshPar[0]
+    MacObject.DirectionalMeshParams = {'SN' : lambda : [3*x, 3*x, 4*x, 2*x],
+                                       'NS' : lambda : [3*x, 3*x, 2*x, 4*x],
+                                       'EW' : lambda : [2*x, 4*x, 3*x, 3*x],
+                                       'WE' : lambda : [4*x, 2*x, 3*x, 3*x], }[MacObject.MeshPar[1]]()
+
+    Config.ListObj.append(MacObject)
+    return MacObject
 
-        Config.ListObj.append(MacObject)
-       return MacObject
 
-       
 ##########################################################################################################
 
 def BoxAng32 (MacObject):
-       if Config.debug : print "Generating sharp angle"
-       Z_Axis = geompy.MakeVectorDXDYDZ(0., 0., 1.) 
-       RotAngle = {'NE' : lambda : 0,
-                   'NW' : lambda : math.pi/2,
-                   'SW' : lambda : math.pi,
-                   'SE' : lambda : -math.pi/2, }[MacObject.MeshPar[1]]()
-       dummy0 = geompy.MakeRotation( ElemEdge32 () , Z_Axis, RotAngle )
-       dummy1 = geompy.MakeScaleAlongAxes( dummy0, None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
-       RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
-
-       MacObject.GeoChildren.append(RectFace)
-       MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
-        
-       if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
-        
-        if Config.publish : 
-               MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
-               Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
-
-               EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
-               Reg1D = MacObject.Mesh[0].Segment()
-               Reg1D.NumberOfSegments(MacObject.MeshPar[0])
-
-               MacObject.Mesh[0].Compute()                     # Generates the mesh
-
-       MacObject.status = 1
-
-       x = MacObject.MeshPar[0]
-       MacObject.DirectionalMeshParams = {'NE' : lambda : [3*x, 2*x, 3*x, 2*x],
-                                          'NW' : lambda : [2*x, 3*x, 3*x, 2*x],
-                                          'SW' : lambda : [2*x, 3*x, 2*x, 3*x],
-                                          'SE' : lambda : [3*x, 2*x, 2*x, 3*x], }[MacObject.MeshPar[1]]()
-
-        Config.ListObj.append(MacObject)
-       return MacObject
+    if Config.debug : print("Generating sharp angle")
+    Z_Axis = geompy.MakeVectorDXDYDZ(0., 0., 1.)
+    RotAngle = {'NE' : lambda : 0,
+                'NW' : lambda : math.pi/2,
+                'SW' : lambda : math.pi,
+                'SE' : lambda : -math.pi/2, }[MacObject.MeshPar[1]]()
+    dummy0 = geompy.MakeRotation( ElemEdge32 () , Z_Axis, RotAngle )
+    dummy1 = geompy.MakeScaleAlongAxes( dummy0, None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
+    RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
+
+    MacObject.GeoChildren.append(RectFace)
+    MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
+
+    if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
+
+    if Config.publish :
+        MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
+        Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
+
+        EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
+        Reg1D = MacObject.Mesh[0].Segment()
+        Reg1D.NumberOfSegments(MacObject.MeshPar[0])
+
+        MacObject.Mesh[0].Compute()                     # Generates the mesh
+
+    MacObject.status = 1
+
+    x = MacObject.MeshPar[0]
+    MacObject.DirectionalMeshParams = {'NE' : lambda : [3*x, 2*x, 3*x, 2*x],
+                                       'NW' : lambda : [2*x, 3*x, 3*x, 2*x],
+                                       'SW' : lambda : [2*x, 3*x, 2*x, 3*x],
+                                       'SE' : lambda : [3*x, 2*x, 2*x, 3*x], }[MacObject.MeshPar[1]]()
+
+    Config.ListObj.append(MacObject)
+    return MacObject
 ##########################################################################################################
 def CompBox (MacObject):
-       if Config.debug : print "Generating composite box"
+    if Config.debug : print("Generating composite box")
+
+    dummy1 = geompy.MakeScaleAlongAxes( ElemBox11 (), None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
+    RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
 
-       dummy1 = geompy.MakeScaleAlongAxes( ElemBox11 (), None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
-       RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
+    MacObject.GeoChildren.append(RectFace)
+    MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
 
-       MacObject.GeoChildren.append(RectFace)
-       MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
-        
-        if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
+    if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
 
-        if Config.publish : 
-              MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
-              Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
+    if Config.publish :
+        MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
+        Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
 
-              EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
+        EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
 
-              ReducedRatio = ReduceRatio(MacObject.GeoPar[1][0],MacObject.GeoPar[1][1])
+        ReducedRatio = ReduceRatio(MacObject.GeoPar[1][0],MacObject.GeoPar[1][1])
 
-              Reference = [0,0,0]
-              Vec = [(1,0,0),(0,1,0)]
-              for Edge in EdgeIDs:
-                              for i in range(0,2):
-                                      if IsParallel(Edge,Vec[i]):
-                                              if not Reference[i]:    # If this is the first found edge to be parallel to this direction, apply user preferences for meshing
-                                                      Reference[i] = Edge
-                                                      ApplyConstant1DMesh(MacObject.Mesh[0],Edge,int(round(ReducedRatio[i]*MacObject.MeshPar[0])))
-                                                      break
-                                              else:                   # If there already exists an edge parallel to this direction, then use a 1D projection
-                                                      Apply1DProjMesh(MacObject.Mesh[0],Edge,Reference[i])
-                                                      break
+        Reference = [0,0,0]
+        Vec = [(1,0,0),(0,1,0)]
+        for Edge in EdgeIDs:
+            for i in range(0,2):
+                if IsParallel(Edge,Vec[i]):
+                    if not Reference[i]:    # If this is the first found edge to be parallel to this direction, apply user preferences for meshing
+                        Reference[i] = Edge
+                        ApplyConstant1DMesh(MacObject.Mesh[0],Edge,int(round(ReducedRatio[i]*MacObject.MeshPar[0])))
+                        break
+                    else:                   # If there already exists an edge parallel to this direction, then use a 1D projection
+                        Apply1DProjMesh(MacObject.Mesh[0],Edge,Reference[i])
+                        break
 
-              MacObject.Mesh[0].Compute()                     # Generates the mesh
-       
-        MacObject.DirectionalMeshParams = [MacObject.MeshPar[0]*ReducedRatio[1],MacObject.MeshPar[0]*ReducedRatio[1],MacObject.MeshPar[0]*ReducedRatio[0],MacObject.MeshPar[0]*ReducedRatio[0]]
+        MacObject.Mesh[0].Compute()                     # Generates the mesh
 
-       MacObject.status = 1
-        Config.ListObj.append(MacObject)
-       return MacObject
+    MacObject.DirectionalMeshParams = [MacObject.MeshPar[0]*ReducedRatio[1],MacObject.MeshPar[0]*ReducedRatio[1],MacObject.MeshPar[0]*ReducedRatio[0],MacObject.MeshPar[0]*ReducedRatio[0]]
+
+    MacObject.status = 1
+    Config.ListObj.append(MacObject)
+    return MacObject
 
 ##########################################################################################################
 
 def CompBoxF (MacObject):
-       if Config.debug : print "Generating composite box"
-
-       dummy1 = geompy.MakeScaleAlongAxes( ElemBox11 (), None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
-       RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
-
-       MacObject.GeoChildren.append(RectFace)
-       MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
-        
-       if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
-        
-        if Config.publish : 
-               MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
-               Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
-
-               EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
-
-               #ReducedRatio = ReduceRatio(MacObject.GeoPar[1][0],MacObject.GeoPar[1][1])
-
-               Reference = [0,0,0]
-               Vec = [(1,0,0),(0,1,0)]
-               for Edge in EdgeIDs:
-                               for i in range(0,2):
-                                       if IsParallel(Edge,Vec[i]):
-                                               if not Reference[i]:    # If this is the first found edge to be parallel to this direction, apply user preferences for meshing
-                                                       Reference[i] = Edge
-                                                       ApplyConstant1DMesh(MacObject.Mesh[0],Edge,int(round(MacObject.MeshPar[0][i])))
-                                                       break
-                                               else:                   # If there already exists an edge parallel to this direction, then use a 1D projection
-                                                       Apply1DProjMesh(MacObject.Mesh[0],Edge,Reference[i])
-                                                       break
-
-               MacObject.Mesh[0].Compute()                 # Generates the mesh
-       
-        MacObject.DirectionalMeshParams = [MacObject.MeshPar[0][1],MacObject.MeshPar[0][1],MacObject.MeshPar[0][0],MacObject.MeshPar[0][0]]
-
-       MacObject.status = 1
-        Config.ListObj.append(MacObject)
-       return MacObject
+    if Config.debug : print("Generating composite box")
+
+    dummy1 = geompy.MakeScaleAlongAxes( ElemBox11 (), None , MacObject.GeoPar[1][0], MacObject.GeoPar[1][1], 1)
+    RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
+
+    MacObject.GeoChildren.append(RectFace)
+    MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
+
+    if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
+
+    if Config.publish :
+        MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
+        Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
+
+        EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
+
+        #ReducedRatio = ReduceRatio(MacObject.GeoPar[1][0],MacObject.GeoPar[1][1])
+
+        Reference = [0,0,0]
+        Vec = [(1,0,0),(0,1,0)]
+        for Edge in EdgeIDs:
+            for i in range(0,2):
+                if IsParallel(Edge,Vec[i]):
+                    if not Reference[i]:    # If this is the first found edge to be parallel to this direction, apply user preferences for meshing
+                        Reference[i] = Edge
+                        ApplyConstant1DMesh(MacObject.Mesh[0],Edge,int(round(MacObject.MeshPar[0][i])))
+                        break
+                    else:                   # If there already exists an edge parallel to this direction, then use a 1D projection
+                        Apply1DProjMesh(MacObject.Mesh[0],Edge,Reference[i])
+                        break
+
+        MacObject.Mesh[0].Compute()                 # Generates the mesh
+
+    MacObject.DirectionalMeshParams = [MacObject.MeshPar[0][1],MacObject.MeshPar[0][1],MacObject.MeshPar[0][0],MacObject.MeshPar[0][0]]
+
+    MacObject.status = 1
+    Config.ListObj.append(MacObject)
+    return MacObject
 ##########################################################################################################
 
 def NonOrtho (MacObject):
-       if Config.debug : print "Generating Non-orthogonal quadrangle"
-
-       RectFace = Quadrangler (MacObject.PtCoor)
-
-       MacObject.GeoChildren.append(RectFace)
-       MacObject.GeoChildrenNames.append("Quad_"+ str(len(Config.ListObj)+1))
-        
-        
-       if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
-        
-        if Config.publish : 
-               MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
-               Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
-
-               EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
-
-               #ReducedRatio = ReduceRatio(MacObject.GeoPar[1][0],MacObject.GeoPar[1][1])
-
-               Vec = [MacObject.DirVectors(i) for i in range(4)]
-               for Edge in EdgeIDs:
-                        Dir = [IsParallel(Edge,Vec[j]) for j in range(4)].index(True)
-                        DirConv = [0,0,1,1][Dir]
-                        ApplyConstant1DMesh(MacObject.Mesh[0],Edge,int(round(MacObject.MeshPar[0][DirConv])))
-
-               MacObject.Mesh[0].Compute()                 # Generates the mesh
-       
-        MacObject.DirectionalMeshParams = [MacObject.MeshPar[0][1],MacObject.MeshPar[0][1],MacObject.MeshPar[0][0],MacObject.MeshPar[0][0]]       
-        
-        MacObject.status = 1
-       Config.ListObj.append(MacObject)
-        return MacObject
+    if Config.debug : print("Generating Non-orthogonal quadrangle")
+
+    RectFace = Quadrangler (MacObject.PtCoor)
+
+    MacObject.GeoChildren.append(RectFace)
+    MacObject.GeoChildrenNames.append("Quad_"+ str(len(Config.ListObj)+1))
+
+
+    if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
+
+    if Config.publish :
+        MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
+        Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
+
+        EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
+
+        #ReducedRatio = ReduceRatio(MacObject.GeoPar[1][0],MacObject.GeoPar[1][1])
+
+        Vec = [MacObject.DirVectors(i) for i in range(4)]
+        for Edge in EdgeIDs:
+            Dir = [IsParallel(Edge,Vec[j]) for j in range(4)].index(True)
+            DirConv = [0,0,1,1][Dir]
+            ApplyConstant1DMesh(MacObject.Mesh[0],Edge,int(round(MacObject.MeshPar[0][DirConv])))
+
+        MacObject.Mesh[0].Compute()                 # Generates the mesh
+
+    MacObject.DirectionalMeshParams = [MacObject.MeshPar[0][1],MacObject.MeshPar[0][1],MacObject.MeshPar[0][0],MacObject.MeshPar[0][0]]
+
+    MacObject.status = 1
+    Config.ListObj.append(MacObject)
+    return MacObject
 
 ##########################################################################################################
 
 def QuartCyl (MacObject):
-       if Config.debug : print "Generating quarter cylinder"
-       Z_Axis = geompy.MakeVectorDXDYDZ(0., 0., 1.) 
-       RotAngle = {'NE' : lambda : 0,
-                   'NW' : lambda : math.pi/2,
-                   'SW' : lambda : math.pi,
-                   'SE' : lambda : -math.pi/2, }[MacObject.MeshPar[1]]()
-       dummy0 = geompy.MakeRotation( ElemQuartCyl(MacObject.MeshPar[2]) , Z_Axis, RotAngle )
-       dummy1 = geompy.MakeScaleAlongAxes( dummy0, None , MacObject.GeoPar[1][0]/10., MacObject.GeoPar[1][1]/10., 1)
-       RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
-
-       MacObject.GeoChildren.append(RectFace)
-       MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
-        
-       if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
-        
-        if Config.publish : 
-               MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
-               Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
-
-               EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
-               Reg1D = MacObject.Mesh[0].Segment()
-                            
-               #if MacObject.MeshPar[0] == 2 and MacObject.MeshPar[2] <= 2.:
-               #         print("Due to a bug in Salome 6.3, we are forced to either increase or decrease the local refinement by 50%, we choose in this case to increase the model's refinement.")
-               #         MacObject.MeshPar[0] = 3
-
-               Reg1D.NumberOfSegments(MacObject.MeshPar[0])
-
-               MacObject.Mesh[0].Compute()                     # Generates the mesh
-
-       MacObject.status = 1
-
-       x = MacObject.MeshPar[0]
-        N = QuarCylParam(MacObject.MeshPar[2])+1
-        
-       MacObject.DirectionalMeshParams = {'NE' : lambda : [2*x, N*x, 2*x, N*x],
-                                          'NW' : lambda : [N*x, 2*x, 2*x, N*x],
-                                          'SW' : lambda : [N*x, 2*x, N*x, 2*x],
-                                          'SE' : lambda : [2*x, N*x, N*x, 2*x], }[MacObject.MeshPar[1]]()
-
-        Config.ListObj.append(MacObject)
-       return MacObject
-        
+    if Config.debug : print("Generating quarter cylinder")
+    Z_Axis = geompy.MakeVectorDXDYDZ(0., 0., 1.)
+    RotAngle = {'NE' : lambda : 0,
+                'NW' : lambda : math.pi/2,
+                'SW' : lambda : math.pi,
+                'SE' : lambda : -math.pi/2, }[MacObject.MeshPar[1]]()
+    dummy0 = geompy.MakeRotation( ElemQuartCyl(MacObject.MeshPar[2]) , Z_Axis, RotAngle )
+    dummy1 = geompy.MakeScaleAlongAxes( dummy0, None , MacObject.GeoPar[1][0]/10., MacObject.GeoPar[1][1]/10., 1)
+    RectFace = geompy.MakeTranslation(dummy1, MacObject.GeoPar[0][0], MacObject.GeoPar[0][1], 0)
+
+    MacObject.GeoChildren.append(RectFace)
+    MacObject.GeoChildrenNames.append("Box_"+ str(len(Config.ListObj)+1))
+
+    if Config.debug : Publish (MacObject.GeoChildren,MacObject.GeoChildrenNames)
+
+    if Config.publish :
+        MacObject.Mesh.append(smesh.Mesh(RectFace))                     # Creation of a new mesh
+        Quad2D = MacObject.Mesh[0].Quadrangle()                 # Applying a quadrangle hypothesis
+
+        EdgeIDs = geompy.SubShapeAllSorted(RectFace,6)      # List of Edge IDs belonging to RectFace, 6 = Edge in salome dictionary
+        Reg1D = MacObject.Mesh[0].Segment()
+
+        #if MacObject.MeshPar[0] == 2 and MacObject.MeshPar[2] <= 2.:
+        #         print("Due to a bug in Salome 6.3, we are forced to either increase or decrease the local refinement by 50%, we choose in this case to increase the model's refinement.")
+        #         MacObject.MeshPar[0] = 3
+
+        Reg1D.NumberOfSegments(MacObject.MeshPar[0])
+
+        MacObject.Mesh[0].Compute()                     # Generates the mesh
+
+    MacObject.status = 1
+
+    x = MacObject.MeshPar[0]
+    N = QuarCylParam(MacObject.MeshPar[2])+1
+
+    MacObject.DirectionalMeshParams = {'NE' : lambda : [2*x, N*x, 2*x, N*x],
+                                       'NW' : lambda : [N*x, 2*x, 2*x, N*x],
+                                       'SW' : lambda : [N*x, 2*x, N*x, 2*x],
+                                       'SE' : lambda : [2*x, N*x, N*x, 2*x], }[MacObject.MeshPar[1]]()
+
+    Config.ListObj.append(MacObject)
+    return MacObject
+
 ##########################################################################################################
-# Below this are the elementary calculation/visualization functions 
+# Below this are the elementary calculation/visualization functions
 ##########################################################################################################
 
 def Publish (ObjToPublish,NamesToPublish):
-       i = 0
-       for GeoObj in ObjToPublish :
-               geompy.addToStudy(GeoObj,NamesToPublish[i])
-               i = i+1
+    i = 0
+    for GeoObj in ObjToPublish :
+        geompy.addToStudy(GeoObj,NamesToPublish[i])
+        i = i+1
 
 def IsParallel (Edge, Vector):
-        """
-        Function checks whether a given edge object is parallel to a reference vector. 
-        Output can be 0 (not parallel) or 1 (parallel and same sense) or 2 (parallel and opposite sense).
-        If the reference vector is null, the function returns 0
-        """
-        if Vector == (0,0,0) : return 0
-       else :
-                P1 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,0))
-               P2 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,1))
-               V0 = [ P1[0] - P2[0], P1[1] - P2[1], P1[2] - P2[2] ]
-               if Distance2Pt((0,0,0),CrossProd(V0,Vector))<1e-7 and DotProd(V0,Vector) > 0 : return 1
-               elif Distance2Pt((0,0,0),CrossProd(V0,Vector))<1e-7 and DotProd(V0,Vector) < 0 : return 2
-               else : return 0
+    """
+    Function checks whether a given edge object is parallel to a reference vector.
+    Output can be 0 (not parallel) or 1 (parallel and same sense) or 2 (parallel and opposite sense).
+    If the reference vector is null, the function returns 0
+    """
+    if Vector == (0,0,0) : return 0
+    else :
+        P1 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,0))
+        P2 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,1))
+        V0 = [ P1[0] - P2[0], P1[1] - P2[1], P1[2] - P2[2] ]
+        if Distance2Pt((0,0,0),CrossProd(V0,Vector))<1e-7 and DotProd(V0,Vector) > 0 : return 1
+        elif Distance2Pt((0,0,0),CrossProd(V0,Vector))<1e-7 and DotProd(V0,Vector) < 0 : return 2
+        else : return 0
 
 def IsOnCircle (Edge, Center, Radius):
-        """
-        Function checks whether a given edge object belong to the periphery of a circle defined by its 
-        center and radius. 
-        Output can be 0 (does not belong) or 1 (belongs).
-        If the reference Radius is null, the function returns 0
-        Note that this function is basic in the sense that it only checks if the two border points of a 
-        given edge belong to the arc of reference.
-        """
-        if Radius == 0 : return 0
-       else :
-                P1 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,0))
-               P2 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,1))
-               if abs(Distance2Pt(Center,P1)-Radius) < 1e-6 and abs(Distance2Pt(Center,P2)-Radius) < 1e-6:
-                        return 1
-                else :
-                       return 0
-                
+    """
+    Function checks whether a given edge object belong to the periphery of a circle defined by its
+    center and radius.
+    Output can be 0 (does not belong) or 1 (belongs).
+    If the reference Radius is null, the function returns 0
+    Note that this function is basic in the sense that it only checks if the two border points of a
+    given edge belong to the arc of reference.
+    """
+    if Radius == 0 : return 0
+    else :
+        P1 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,0))
+        P2 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,1))
+        if abs(Distance2Pt(Center,P1)-Radius) < 1e-6 and abs(Distance2Pt(Center,P2)-Radius) < 1e-6:
+            return 1
+        else :
+            return 0
+
 def CrossProd(V1,V2):
-       """
-       Determines the cross product of two 3D vectors
-       """
-       return ([V1[1]*V2[2]-V1[2]*V2[1], V1[2]*V2[0]-V1[0]*V2[2], V1[0]*V2[1]-V1[1]*V2[0]])
+    """
+    Determines the cross product of two 3D vectors
+    """
+    return ([V1[1]*V2[2]-V1[2]*V2[1], V1[2]*V2[0]-V1[0]*V2[2], V1[0]*V2[1]-V1[1]*V2[0]])
 
 def QuarCylParam(PitchRatio):
-        R = float(PitchRatio)/(PitchRatio+1)
-        Eps = 1. - R
-        X = (R+Eps/2.)*math.sin(math.pi/4)+Eps/2.
-        N = int(math.floor((math.pi*R/4.)/(Eps/2.)))
-        return N
+    R = float(PitchRatio)/(PitchRatio+1)
+    Eps = 1. - R
+    X = (R+Eps/2.)*math.sin(math.pi/4)+Eps/2.
+    N = int(math.floor((math.pi*R/4.)/(Eps/2.)))
+    return N
 
 def DotProd(V1,V2):
-       """
-       Determines the dot product of two 3D vectors
-       """
-        if len(V1)==2 : V1.append(0)
-        if len(V2)==2 : V2.append(0)
-        
-       return (V1[0]*V2[0]+V1[1]*V2[1]+V1[2]*V2[2])
+    """
+    Determines the dot product of two 3D vectors
+    """
+    if len(V1)==2 : V1.append(0)
+    if len(V2)==2 : V2.append(0)
+
+    return (V1[0]*V2[0]+V1[1]*V2[1]+V1[2]*V2[2])
 
 def Distance2Pt(P1,P2):
-       """
-       Returns the distance between two points
-       """
-       return (math.sqrt((P1[0]-P2[0])**2+(P1[1]-P2[1])**2+(P1[2]-P2[2])**2))
+    """
+    Returns the distance between two points
+    """
+    return (math.sqrt((P1[0]-P2[0])**2+(P1[1]-P2[1])**2+(P1[2]-P2[2])**2))
 
 def ApplyConstant1DMesh (ParentMsh, Edge, Nseg):
-       Reg1D = ParentMsh.Segment(geom=Edge)
-       Len = Reg1D.NumberOfSegments(Nseg)
+    Reg1D = ParentMsh.Segment(geom=Edge)
+    Len = Reg1D.NumberOfSegments(Nseg)
 
 def Apply1DProjMesh (ParentMsh, Edge, Ref):
-       Proj1D = ParentMsh.Projection1D(geom=Edge)
-       SrcEdge = Proj1D.SourceEdge(Ref,None,None,None)
+    Proj1D = ParentMsh.Projection1D(geom=Edge)
+    SrcEdge = Proj1D.SourceEdge(Ref,None,None,None)
 
 def EdgeLength (Edge):
-        """
-        This function returns the edge object length.
-        """
-       P1 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,0))
-       P2 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,1))
-       return Distance2Pt(P1,P2)
+    """
+    This function returns the edge object length.
+    """
+    P1 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,0))
+    P2 = geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,1))
+    return Distance2Pt(P1,P2)
 
 
 def D2R (Angle):
-       return Angle*math.pi/180
+    return Angle*math.pi/180
 
 def R2D (Angle):
-       return Angle*180/math.pi
+    return Angle*180/math.pi
 
 def F2D (FloatNumber):
-       return round(FloatNumber*100.)/100.
+    return round(FloatNumber*100.)/100.
 
 def BezierGen (PointA, PointB, AngleA, AngleB):
 
-       if AngleA == 0 and AngleB == 0 : return (geompy.MakeEdge(PointA, PointB))
-       else : 
-               A = geompy.PointCoordinates(PointA)
-               B = geompy.PointCoordinates(PointB)
-               dAB = Distance2Pt(A,B)
-               dAC = dAB * (math.tan(AngleA)*math.tan(AngleB)) / (math.sin(AngleA) * ( math.tan(AngleA)+math.tan(AngleB) ) )
-               AngleOX_AB = math.acos((B[0]-A[0])/dAB)
-               PointC = geompy.MakeVertex(A[0]+math.cos(AngleA+AngleOX_AB)*dAC,A[1]+math.sin(AngleA+AngleOX_AB)*dAC,0)
-               CurveACB = geompy.MakeBezier([PointA,PointC,PointB])
-               return CurveACB
+    if AngleA == 0 and AngleB == 0 : return (geompy.MakeEdge(PointA, PointB))
+    else :
+        A = geompy.PointCoordinates(PointA)
+        B = geompy.PointCoordinates(PointB)
+        dAB = Distance2Pt(A,B)
+        dAC = dAB * (math.tan(AngleA)*math.tan(AngleB)) / (math.sin(AngleA) * ( math.tan(AngleA)+math.tan(AngleB) ) )
+        AngleOX_AB = math.acos((B[0]-A[0])/dAB)
+        PointC = geompy.MakeVertex(A[0]+math.cos(AngleA+AngleOX_AB)*dAC,A[1]+math.sin(AngleA+AngleOX_AB)*dAC,0)
+        CurveACB = geompy.MakeBezier([PointA,PointC,PointB])
+        return CurveACB
 
 def GetSideAngleForBezier (PointA , PointB):
-       """
-       This function takes for input two points A and B where the bezier line is needed. It calculates the incident 
-       angle needed at point A so that the final curve is either at 0 or 90 degrees from the x'Ox axis
-       """
-       A = geompy.PointCoordinates(PointA)
-       B = geompy.PointCoordinates(PointB)
-       ABx = B[0]-A[0]
-       dAB = Distance2Pt(A,B)
-       Alpha = math.acos(ABx/dAB)
-       #print "New angle request"
-       #print ABx, dAB, R2D(Alpha)
-       if Alpha < math.pi/4 :
-               #print "returning", R2D(-Alpha)
-               return -Alpha
-       elif Alpha < 3*math.pi/4 :
-               #print "returning", R2D(-(Alpha-math.pi/2))
-               return -(Alpha-math.pi/2)
-       else : 
-               #print "returning", R2D(-(Alpha-math.pi))
-               return -(Alpha-math.pi)
+    """
+    This function takes for input two points A and B where the bezier line is needed. It calculates the incident
+    angle needed at point A so that the final curve is either at 0 or 90 degrees from the x'Ox axis
+    """
+    A = geompy.PointCoordinates(PointA)
+    B = geompy.PointCoordinates(PointB)
+    ABx = B[0]-A[0]
+    dAB = Distance2Pt(A,B)
+    Alpha = math.acos(ABx/dAB)
+    #print "New angle request"
+    #print ABx, dAB, R2D(Alpha)
+    if Alpha < math.pi/4 :
+        #print "returning", R2D(-Alpha)
+        return -Alpha
+    elif Alpha < 3*math.pi/4 :
+        #print "returning", R2D(-(Alpha-math.pi/2))
+        return -(Alpha-math.pi/2)
+    else :
+        #print "returning", R2D(-(Alpha-math.pi))
+        return -(Alpha-math.pi)
 
 def VecDivRatio (Vec1, Vec2):
-       """
-       This function tries to find the ratio of Vec1 on Vec2 while neglecting any zero term in Vec1. This is used afterwards
-       for determining the global mesh parameter from automatically detected directional mesh params. If no compatibility is
-       possible, the function returns -1
-       """
-       Vec3 = []
-       for i in range(len(Vec1)) :
-               Vec3.append(float(Vec1[i])/Vec2[i])
-       Ratio=[]
-       for i in Vec3 : 
-               if not (abs(i)<1e-7) : Ratio.append(i)
-       if Ratio :
-               if min(Ratio) == max(Ratio) and min(Ratio)==int(min(Ratio)) : return(min(Ratio))
-               else : return -1                
-       else :
-               return -2
-                       
-                       
+    """
+    This function tries to find the ratio of Vec1 on Vec2 while neglecting any zero term in Vec1. This is used afterwards
+    for determining the global mesh parameter from automatically detected directional mesh params. If no compatibility is
+    possible, the function returns -1
+    """
+    Vec3 = []
+    for i in range(len(Vec1)) :
+        Vec3.append(float(Vec1[i])/Vec2[i])
+    Ratio=[]
+    for i in Vec3 :
+        if not (abs(i)<1e-7) : Ratio.append(i)
+    if Ratio :
+        if min(Ratio) == max(Ratio) and min(Ratio)==int(min(Ratio)) : return(min(Ratio))
+        else : return -1
+    else :
+        return -2
+
+
 def ReduceRatio (dx, dy):
-       """
-       This function transforms a decimal ratio into a scale between two integers, for example : [0.2,0.05] --> [4,1] ; 
-       """
-       Output = [0,0]
-       ratio = float(dy)/dx
-       if isinteger(ratio) : return [1,ratio]
-       elif dx == 1 :                  # when this function is called recursively! 
-               for i in range(1,20) :  # searches over 20 decimals
-                       if isinteger(ratio * (10**i) ) :
-                               Output = GetScale((10**i),int(round(ratio * (10**i) ) ) )
-                               break
-                       else :
-                               for n in range(0,i) :
-                                       if isinteger(ratio * ( 10**(i)-10**(n) )) :
-                                               Output = GetScale( 10**(i)-10**(n)  ,  int(round(ratio * ( 10**(i)-10**(n) ) ) ) )
-                                               break
-                               if not (Output==[0,0]) : break
-               return Output           
-       else :
-               for i in range(1,10) :  # searches over 10 decimals
-                       if isinteger(ratio * (10**i) ) :
-                               Output = GetScale((10**i),int(round(ratio * (10**i) ) ) )
-                               break
-                       else :
-                               for n in range(0,i) :
-                                       if isinteger(ratio * ( 10**(i)-10**(n) )) :
-                                               Output = GetScale( 10**(i)-10**(n)  ,  int(round(ratio * ( 10**(i)-10**(n) ) ) ) )
-                                               break
-                               if not (Output==[0,0]) : break
-
-               if Output == [0,0] : 
-                       print "We are having some trouble while interpreting the following ratio: ",ratio, "\nWe will try a recursive method which may in some cases take some time..."
-                       if dy > dx :
-                               A = ReduceRatio (dx, dy-dx)
-                               return ([A[0],A[1]+A[0]])
-                       else : 
-                               A = ReduceRatio (dy, dx-dy)
-                               return ([A[1]+A[0],A[0]])
-
-               else : return Output
-               
+    """
+    This function transforms a decimal ratio into a scale between two integers, for example : [0.2,0.05] --> [4,1] ;
+    """
+    Output = [0,0]
+    ratio = float(dy)/dx
+    if isinteger(ratio) : return [1,ratio]
+    elif dx == 1 :                  # when this function is called recursively!
+        for i in range(1,20) :  # searches over 20 decimals
+            if isinteger(ratio * (10**i) ) :
+                Output = GetScale((10**i),int(round(ratio * (10**i) ) ) )
+                break
+            else :
+                for n in range(0,i) :
+                    if isinteger(ratio * ( 10**(i)-10**(n) )) :
+                        Output = GetScale( 10**(i)-10**(n)  ,  int(round(ratio * ( 10**(i)-10**(n) ) ) ) )
+                        break
+                if not (Output==[0,0]) : break
+        return Output
+    else :
+        for i in range(1,10) :  # searches over 10 decimals
+            if isinteger(ratio * (10**i) ) :
+                Output = GetScale((10**i),int(round(ratio * (10**i) ) ) )
+                break
+            else :
+                for n in range(0,i) :
+                    if isinteger(ratio * ( 10**(i)-10**(n) )) :
+                        Output = GetScale( 10**(i)-10**(n)  ,  int(round(ratio * ( 10**(i)-10**(n) ) ) ) )
+                        break
+                if not (Output==[0,0]) : break
+
+        if Output == [0,0] :
+            print("We are having some trouble while interpreting the following ratio: ",ratio, "\nWe will try a recursive method which may in some cases take some time...")
+            if dy > dx :
+                A = ReduceRatio (dx, dy-dx)
+                return ([A[0],A[1]+A[0]])
+            else :
+                A = ReduceRatio (dy, dx-dy)
+                return ([A[1]+A[0],A[0]])
+
+        else : return Output
+
 def GetScale (X,Y):
-       """
-       This function is called within ReduceRatio and aims to reduce down two integers X and Y by dividing them with their common divisors;
-       Example: 25 and 5 ---> 5 and 1 / 63 and 12 ---> 21 and 4
-       """
-       MaxDiv = max(X,Y)
-       Divisor = 2             # Initializing the divisor
-       while MaxDiv >= Divisor :
-               X0 = 0
-               Y0 = 0
-               if not(X%Divisor) : 
-                       X0 = X/Divisor
-                       MaxDiv = max(MaxDiv,X0)
-               if not(Y%Divisor) : 
-                       Y0 = Y/Divisor
-                       MaxDiv = max(MaxDiv,Y0)
-               if (X0*Y0) : 
-                       X = X0
-                       Y = Y0
-               else : 
-                       Divisor = Divisor + 1 
-       return [X,Y]
+    """
+    This function is called within ReduceRatio and aims to reduce down two integers X and Y by dividing them with their common divisors;
+    Example: 25 and 5 ---> 5 and 1 / 63 and 12 ---> 21 and 4
+    """
+    MaxDiv = max(X,Y)
+    Divisor = 2             # Initializing the divisor
+    while MaxDiv >= Divisor :
+        X0 = 0
+        Y0 = 0
+        if not(X%Divisor) :
+            X0 = X/Divisor
+            MaxDiv = max(MaxDiv,X0)
+        if not(Y%Divisor) :
+            Y0 = Y/Divisor
+            MaxDiv = max(MaxDiv,Y0)
+        if (X0*Y0) :
+            X = X0
+            Y = Y0
+        else :
+            Divisor = Divisor + 1
+    return [X,Y]
 
 def isinteger (x) :
-       """
-       This functions applies a simple check if the entered value is an integer
-       """
-       x = float('%.5f' % (x))         #Truncate x to 5 digits after the decimal point
-       if math.ceil(x) == math.floor(x) : return True
-       else : return False             
+    """
+    This functions applies a simple check if the entered value is an integer
+    """
+    x = float('%.5f' % (x))         #Truncate x to 5 digits after the decimal point
+    if math.ceil(x) == math.floor(x) : return True
+    else : return False
 ##########################################################################################
 # Below this are the functions that create the elementary forms for the macro objects
 ##########################################################################################
 
 def ElemBox11 ():
-       """
-       This function returns a simple square face of 1 side length
-       """ 
-       RectFace = geompy.MakeFaceHW(1, 1, 1)
-       return RectFace
+    """
+    This function returns a simple square face of 1 side length
+    """
+    RectFace = geompy.MakeFaceHW(1, 1, 1)
+    return RectFace
 
 def ElemBox42 ():
-       """
-       This function returns a square face of 1 side length, partitioned
-       according to the elementary 4 to 2 reductor method
-       """ 
-       OrigRectFace = geompy.MakeFaceHW(1, 1, 1)
-
-       SouthPt1 = geompy.MakeVertex (-.25, -.5, 0)
-       SouthPt2 = geompy.MakeVertex (0, -.5, 0)
-       SouthPt3 = geompy.MakeVertex (.25, -.5, 0)
-       WestPt1 = geompy.MakeVertex (-.5, -.5+1./3, 0)
-       WestPt2 = geompy.MakeVertex (-.5, -.5+2./3, 0)
-       EastPt1 = geompy.MakeVertex (.5, -.5+1./3, 0)
-       EastPt2 = geompy.MakeVertex (.5, -.5+2./3, 0)
-       NorthPt = geompy.MakeVertex (0, .5, 0)
-       MidPt1 = geompy.MakeVertex (0, .05, 0)
-       MidPt2 = geompy.MakeVertex (.2, -.18, 0)
-       MidPt3 = geompy.MakeVertex (0, -.28, 0)
-       MidPt4 = geompy.MakeVertex (-.2, -.18, 0)
-
-       Cutter = []
-       Cutter.append(geompy.MakeEdge(SouthPt2, MidPt3))
-       Cutter.append(geompy.MakeEdge(MidPt1, NorthPt))
-       Cutter.append(BezierGen(SouthPt1, MidPt4, GetSideAngleForBezier(SouthPt1,MidPt4), D2R(15)))
-       Cutter.append(BezierGen(SouthPt3, MidPt2, GetSideAngleForBezier(SouthPt3,MidPt2), D2R(-15)))
-       Cutter.append(BezierGen(WestPt1, MidPt4, GetSideAngleForBezier(WestPt1,MidPt4), D2R(-10)))
-       Cutter.append(BezierGen(EastPt1, MidPt2, GetSideAngleForBezier(EastPt1,MidPt2), D2R(10)))
-       Cutter.append(BezierGen(WestPt2, MidPt1, GetSideAngleForBezier(WestPt2,MidPt1), D2R(-10)))
-       Cutter.append(BezierGen(EastPt2, MidPt1, GetSideAngleForBezier(EastPt2,MidPt1), D2R(10)))
-       Cutter.append(BezierGen(MidPt2, MidPt1, D2R(-15), D2R(-15)))
-       Cutter.append(BezierGen(MidPt3, MidPt2, D2R(10), D2R(15)))
-       Cutter.append(BezierGen(MidPt3, MidPt4, D2R(-10), D2R(-15)))
-       Cutter.append(BezierGen(MidPt4, MidPt1, D2R(15), D2R(15)))
-
-       RectFace = geompy.MakePartition([OrigRectFace],Cutter, [], [],4, 0, [], 0)      #Creating the partition object
-       #i=1
-       #for SingleCut in Cutter :
-       #       geompy.addToStudy(SingleCut,'Cutter'+str(i))
-       #       i = i+1
-       #geompy.addToStudy(RectFace,'RectFace')
-       return RectFace
+    """
+    This function returns a square face of 1 side length, partitioned
+    according to the elementary 4 to 2 reductor method
+    """
+    OrigRectFace = geompy.MakeFaceHW(1, 1, 1)
+
+    SouthPt1 = geompy.MakeVertex (-.25, -.5, 0)
+    SouthPt2 = geompy.MakeVertex (0, -.5, 0)
+    SouthPt3 = geompy.MakeVertex (.25, -.5, 0)
+    WestPt1 = geompy.MakeVertex (-.5, -.5+1./3, 0)
+    WestPt2 = geompy.MakeVertex (-.5, -.5+2./3, 0)
+    EastPt1 = geompy.MakeVertex (.5, -.5+1./3, 0)
+    EastPt2 = geompy.MakeVertex (.5, -.5+2./3, 0)
+    NorthPt = geompy.MakeVertex (0, .5, 0)
+    MidPt1 = geompy.MakeVertex (0, .05, 0)
+    MidPt2 = geompy.MakeVertex (.2, -.18, 0)
+    MidPt3 = geompy.MakeVertex (0, -.28, 0)
+    MidPt4 = geompy.MakeVertex (-.2, -.18, 0)
+
+    Cutter = []
+    Cutter.append(geompy.MakeEdge(SouthPt2, MidPt3))
+    Cutter.append(geompy.MakeEdge(MidPt1, NorthPt))
+    Cutter.append(BezierGen(SouthPt1, MidPt4, GetSideAngleForBezier(SouthPt1,MidPt4), D2R(15)))
+    Cutter.append(BezierGen(SouthPt3, MidPt2, GetSideAngleForBezier(SouthPt3,MidPt2), D2R(-15)))
+    Cutter.append(BezierGen(WestPt1, MidPt4, GetSideAngleForBezier(WestPt1,MidPt4), D2R(-10)))
+    Cutter.append(BezierGen(EastPt1, MidPt2, GetSideAngleForBezier(EastPt1,MidPt2), D2R(10)))
+    Cutter.append(BezierGen(WestPt2, MidPt1, GetSideAngleForBezier(WestPt2,MidPt1), D2R(-10)))
+    Cutter.append(BezierGen(EastPt2, MidPt1, GetSideAngleForBezier(EastPt2,MidPt1), D2R(10)))
+    Cutter.append(BezierGen(MidPt2, MidPt1, D2R(-15), D2R(-15)))
+    Cutter.append(BezierGen(MidPt3, MidPt2, D2R(10), D2R(15)))
+    Cutter.append(BezierGen(MidPt3, MidPt4, D2R(-10), D2R(-15)))
+    Cutter.append(BezierGen(MidPt4, MidPt1, D2R(15), D2R(15)))
+
+    RectFace = geompy.MakePartition([OrigRectFace],Cutter, [], [],4, 0, [], 0)      #Creating the partition object
+    #i=1
+    #for SingleCut in Cutter :
+    #       geompy.addToStudy(SingleCut,'Cutter'+str(i))
+    #       i = i+1
+    #geompy.addToStudy(RectFace,'RectFace')
+    return RectFace
 
 def ElemEdge32 ():
-       """
-       This function returns a square face of 1 side length, partitioned
-       according to the elementary edge with 3 to 2 reductor
-       """ 
-       OrigRectFace = geompy.MakeFaceHW(1., 1., 1)
-
-       SouthPt1 = geompy.MakeVertex (-1./6, -0.5, 0.)
-       SouthPt2 = geompy.MakeVertex ( 1./6, -0.5, 0.)
-       WestPt1 = geompy.MakeVertex  (-0.5, -1./6, 0.)
-       WestPt2 = geompy.MakeVertex  (-0.5,  1./6, 0.)
-       EastPt = geompy.MakeVertex   ( 0.5, 0., 0.)
-       NorthPt = geompy.MakeVertex  (0., 0.5, 0.)
-
-       MidPt1 = geompy.MakeVertex (-0.2, -0.2, 0.)
-       MidPt2 = geompy.MakeVertex ( -0.02,  -0.02, 0.)
-
-       Cutter = []
-       Cutter.append(BezierGen(SouthPt1,  MidPt1,  GetSideAngleForBezier(SouthPt1,MidPt1) , D2R(-5)))
-       Cutter.append(BezierGen( WestPt1,  MidPt1,  GetSideAngleForBezier(WestPt1 ,MidPt1) , D2R(-5)))
-       Cutter.append(BezierGen(SouthPt2,  MidPt2,  GetSideAngleForBezier(SouthPt2,MidPt2) , D2R(-10)))
-       Cutter.append(BezierGen(  EastPt,  MidPt2,  GetSideAngleForBezier(EastPt  ,MidPt2) , D2R(5)))
-       Cutter.append(BezierGen( WestPt2,  MidPt2,  GetSideAngleForBezier(WestPt2 ,MidPt2) , D2R(-10)))
-       Cutter.append(BezierGen(  MidPt2, NorthPt,  GetSideAngleForBezier(NorthPt ,MidPt2) , D2R(-5)))
-
-       Cutter.append(geompy.MakeEdge(MidPt1, MidPt2))
-
-       RectFace = geompy.MakePartition([OrigRectFace],Cutter, [], [],4, 0, [], 0)      #Creating the partition object
-       #i=1
-       #for SingleCut in Cutter :
-       #       geompy.addToStudy(SingleCut,'Cutter'+str(i))
-       #       i = i+1
-       #geompy.addToStudy(RectFace,'RectFace')
-       return RectFace
+    """
+    This function returns a square face of 1 side length, partitioned
+    according to the elementary edge with 3 to 2 reductor
+    """
+    OrigRectFace = geompy.MakeFaceHW(1., 1., 1)
+
+    SouthPt1 = geompy.MakeVertex (-1./6, -0.5, 0.)
+    SouthPt2 = geompy.MakeVertex ( 1./6, -0.5, 0.)
+    WestPt1 = geompy.MakeVertex  (-0.5, -1./6, 0.)
+    WestPt2 = geompy.MakeVertex  (-0.5,  1./6, 0.)
+    EastPt = geompy.MakeVertex   ( 0.5, 0., 0.)
+    NorthPt = geompy.MakeVertex  (0., 0.5, 0.)
+
+    MidPt1 = geompy.MakeVertex (-0.2, -0.2, 0.)
+    MidPt2 = geompy.MakeVertex ( -0.02,  -0.02, 0.)
+
+    Cutter = []
+    Cutter.append(BezierGen(SouthPt1,  MidPt1,  GetSideAngleForBezier(SouthPt1,MidPt1) , D2R(-5)))
+    Cutter.append(BezierGen( WestPt1,  MidPt1,  GetSideAngleForBezier(WestPt1 ,MidPt1) , D2R(-5)))
+    Cutter.append(BezierGen(SouthPt2,  MidPt2,  GetSideAngleForBezier(SouthPt2,MidPt2) , D2R(-10)))
+    Cutter.append(BezierGen(  EastPt,  MidPt2,  GetSideAngleForBezier(EastPt  ,MidPt2) , D2R(5)))
+    Cutter.append(BezierGen( WestPt2,  MidPt2,  GetSideAngleForBezier(WestPt2 ,MidPt2) , D2R(-10)))
+    Cutter.append(BezierGen(  MidPt2, NorthPt,  GetSideAngleForBezier(NorthPt ,MidPt2) , D2R(-5)))
+
+    Cutter.append(geompy.MakeEdge(MidPt1, MidPt2))
+
+    RectFace = geompy.MakePartition([OrigRectFace],Cutter, [], [],4, 0, [], 0)      #Creating the partition object
+    #i=1
+    #for SingleCut in Cutter :
+    #       geompy.addToStudy(SingleCut,'Cutter'+str(i))
+    #       i = i+1
+    #geompy.addToStudy(RectFace,'RectFace')
+    return RectFace
 
 def Quadrangler (Points):
-       """
-       This function returns a quadranglar face based on four points, non of which 3 are non-colinear.  
-        The points are defined by their 2D [(x1,y1),(x2,y2)..] coordinates.
-        Note that the list of points is already arranged upon the creation in MacObject
-       """ 
-        Pt = []
-        for Point in Points: Pt.append(geompy.MakeVertex(Point[0], Point[1], 0))
-        # The first point is added at the end of the list in order to facilitate the line creation
-        Pt.append(Pt[0])
-        #Draw the lines in order to form the 4 side polygon
-        Ln=[]
-        for i in range(4) : Ln.append(geompy.MakeLineTwoPnt(Pt[i],Pt[i+1]))    
-       RectFace = geompy.MakeQuad (Ln[0],Ln[1],Ln[2],Ln[3])    
-       return RectFace
+    """
+    This function returns a quadranglar face based on four points, non of which 3 are non-colinear.
+    The points are defined by their 2D [(x1,y1),(x2,y2)..] coordinates.
+    Note that the list of points is already arranged upon the creation in MacObject
+    """
+    Pt = []
+    for Point in Points: Pt.append(geompy.MakeVertex(Point[0], Point[1], 0))
+    # The first point is added at the end of the list in order to facilitate the line creation
+    Pt.append(Pt[0])
+    #Draw the lines in order to form the 4 side polygon
+    Ln=[]
+    for i in range(4) : Ln.append(geompy.MakeLineTwoPnt(Pt[i],Pt[i+1]))
+    RectFace = geompy.MakeQuad (Ln[0],Ln[1],Ln[2],Ln[3])
+    return RectFace
 
 def ElemQuartCyl(K):
-       """
-       This function returns a quarter cylinder to box relay of 1 side length, partitioned
-       with a pitch ratio of K, In other words the side of the box is R*(1+(1/K))
-       """ 
-        R = 10.*float(K)/(K+1)
-        Eps = 10.- R
-        
-        Config.theStudy.SetReal("R"  , R)
-        Config.theStudy.SetReal("minusR"  , -R)                                
-       Config.theStudy.SetReal("Eps", Eps)
-        
-       CylWire = geompy.MakeSketcher("Sketcher:F 'R' 0:R 0:L 'Eps':TT 10. 10.0:R 90:L 10.0:R 90:L 'Eps':R 90:C 'minusR' 90.0:WW", [0, 0, 0, 0, 0, 1, 1, 0, -0])        
-       CylFace = geompy.MakeFace(CylWire, 1)
-
-       SouthPt = geompy.MakeVertex (R+Eps/2., 0., 0)
-       SouthWestPt = geompy.MakeVertex ( 0.,0., 0)   #The origin can be used for practical partionning objectifs
-       WestPt = geompy.MakeVertex  (0., R+Eps/2., 0)
-        
-        N = int(math.floor((math.pi*R/4.)/(Eps/2.)))
-        X = 10.*(1.-1./(N+1))
-      
-         
-       EastPt = geompy.MakeVertex  (10.0,  X, 0.)
-       NorthPt = geompy.MakeVertex   ( X, 10.0, 0.)
-
-        DivFactor = 8./(F2D(math.log(K))-0.223)
-        #MidPt = geompy.MakeVertex ((R+Eps)*math.cos(math.pi/4), (R+Eps)*math.sin(math.pi/4), 0.)
-       MidPt = geompy.MakeVertex (X-Eps/DivFactor, X-Eps/DivFactor, 0.)
-
-       Cutter = []
-       Cutter.append(BezierGen(SouthWestPt,  MidPt,  GetSideAngleForBezier(SouthWestPt,MidPt) , D2R(-5)))
-       Cutter.append(BezierGen( EastPt, MidPt,  GetSideAngleForBezier(EastPt,MidPt) , D2R(5)))
-       Cutter.append(BezierGen( MidPt, NorthPt, (-1)**((K<1.25)*1)*D2R(-5), GetSideAngleForBezier(NorthPt,MidPt)))      
-       SMBezier = BezierGen( SouthPt,  MidPt,  GetSideAngleForBezier(SouthPt ,MidPt) , D2R((K<1.25)*180-5))
-        WMBezier = BezierGen( WestPt,  MidPt,  GetSideAngleForBezier(WestPt, MidPt) , D2R(-5))
-       Cutter.append(WMBezier)
-        Cutter.append(SMBezier)
-        
-        for i in range(1,N) :
-                # Determining intermediate points on the bezier lines and then performing additional cuts
-                
-                TempAnglePlus = (math.pi/4)*(1+float(i)/N)
-                SectionResult = CutnGroup.Go(WMBezier, [(0,0,0,math.sin(TempAnglePlus),-math.cos(TempAnglePlus),0)], [1], ['Dummy'], 0)
-                TempPt1 = SectionResult[1][0]
-                TempPt11 = geompy.MakeVertex  ((N-i)*X/N, 10., 0)
-                
-                TempAngleMinus = (math.pi/4)*(1-float(i)/N)
-                SectionResult = CutnGroup.Go(SMBezier, [(0,0,0,math.sin(TempAngleMinus),-math.cos(TempAngleMinus),0)], [1], ['Dummy'], 0)
-                TempPt2 = SectionResult[1][0]
-                TempPt21 = geompy.MakeVertex  (10.,  (N-i)*X/N, 0)
-                
-                Cutter.append(geompy.MakeEdge(SouthWestPt, TempPt1))
-                Cutter.append(geompy.MakeEdge(SouthWestPt, TempPt2))
-                Cutter.append(geompy.MakeEdge(TempPt1, TempPt11))
-                Cutter.append(geompy.MakeEdge(TempPt2, TempPt21))                
-
-       CylFace = geompy.MakePartition([CylFace],Cutter, [], [],4, 0, [], 0)    #Creating the partition object
-       CylFace = geompy.MakeTranslation(CylFace, -5., -5., 0.0)
-
-       return CylFace
-        
+    """
+    This function returns a quarter cylinder to box relay of 1 side length, partitioned
+    with a pitch ratio of K, In other words the side of the box is R*(1+(1/K))
+    """
+    R = 10.*float(K)/(K+1)
+    Eps = 10.- R
+
+    Config.theStudy.SetReal("R"  , R)
+    Config.theStudy.SetReal("minusR"  , -R)
+    Config.theStudy.SetReal("Eps", Eps)
+
+    CylWire = geompy.MakeSketcher("Sketcher:F 'R' 0:R 0:L 'Eps':TT 10. 10.0:R 90:L 10.0:R 90:L 'Eps':R 90:C 'minusR' 90.0:WW", [0, 0, 0, 0, 0, 1, 1, 0, -0])
+    CylFace = geompy.MakeFace(CylWire, 1)
+
+    SouthPt = geompy.MakeVertex (R+Eps/2., 0., 0)
+    SouthWestPt = geompy.MakeVertex ( 0.,0., 0)   #The origin can be used for practical partionning objectifs
+    WestPt = geompy.MakeVertex  (0., R+Eps/2., 0)
+
+    N = int(math.floor((math.pi*R/4.)/(Eps/2.)))
+    X = 10.*(1.-1./(N+1))
+
+
+    EastPt = geompy.MakeVertex  (10.0,  X, 0.)
+    NorthPt = geompy.MakeVertex   ( X, 10.0, 0.)
+
+    DivFactor = 8./(F2D(math.log(K))-0.223)
+    #MidPt = geompy.MakeVertex ((R+Eps)*math.cos(math.pi/4), (R+Eps)*math.sin(math.pi/4), 0.)
+    MidPt = geompy.MakeVertex (X-Eps/DivFactor, X-Eps/DivFactor, 0.)
+
+    Cutter = []
+    Cutter.append(BezierGen(SouthWestPt,  MidPt,  GetSideAngleForBezier(SouthWestPt,MidPt) , D2R(-5)))
+    Cutter.append(BezierGen( EastPt, MidPt,  GetSideAngleForBezier(EastPt,MidPt) , D2R(5)))
+    Cutter.append(BezierGen( MidPt, NorthPt, (-1)**((K<1.25)*1)*D2R(-5), GetSideAngleForBezier(NorthPt,MidPt)))
+    SMBezier = BezierGen( SouthPt,  MidPt,  GetSideAngleForBezier(SouthPt ,MidPt) , D2R((K<1.25)*180-5))
+    WMBezier = BezierGen( WestPt,  MidPt,  GetSideAngleForBezier(WestPt, MidPt) , D2R(-5))
+    Cutter.append(WMBezier)
+    Cutter.append(SMBezier)
+
+    for i in range(1,N) :
+        # Determining intermediate points on the bezier lines and then performing additional cuts
+
+        TempAnglePlus = (math.pi/4)*(1+float(i)/N)
+        SectionResult = CutnGroup.Go(WMBezier, [(0,0,0,math.sin(TempAnglePlus),-math.cos(TempAnglePlus),0)], [1], ['Dummy'], 0)
+        TempPt1 = SectionResult[1][0]
+        TempPt11 = geompy.MakeVertex  ((N-i)*X/N, 10., 0)
+
+        TempAngleMinus = (math.pi/4)*(1-float(i)/N)
+        SectionResult = CutnGroup.Go(SMBezier, [(0,0,0,math.sin(TempAngleMinus),-math.cos(TempAngleMinus),0)], [1], ['Dummy'], 0)
+        TempPt2 = SectionResult[1][0]
+        TempPt21 = geompy.MakeVertex  (10.,  (N-i)*X/N, 0)
+
+        Cutter.append(geompy.MakeEdge(SouthWestPt, TempPt1))
+        Cutter.append(geompy.MakeEdge(SouthWestPt, TempPt2))
+        Cutter.append(geompy.MakeEdge(TempPt1, TempPt11))
+        Cutter.append(geompy.MakeEdge(TempPt2, TempPt21))
+
+    CylFace = geompy.MakePartition([CylFace],Cutter, [], [],4, 0, [], 0)    #Creating the partition object
+    CylFace = geompy.MakeTranslation(CylFace, -5., -5., 0.0)
+
+    return CylFace
+
 def CompatibilityTest(MacObject):
-       Type = MacObject.Type
-       if Type == 'Box11' :
-               BaseDirPar = [1,1,1,1]
-               return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
-       elif Type == 'Box42' :
-               BaseDirPar = {'SN' : lambda : [3, 3, 4, 2],
-                             'NS' : lambda : [3, 3, 2, 4],
-                             'EW' : lambda : [2, 4, 3, 3],
-                             'WE' : lambda : [4, 2, 3, 3], }[MacObject.MeshPar[1]]()
-               return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
-       elif Type == 'BoxAng32' :
-               BaseDirPar = {'NE' : lambda : [3, 2, 3, 2],
-                             'NW' : lambda : [2, 3, 3, 2],
-                             'SW' : lambda : [2, 3, 2, 3],
-                             'SE' : lambda : [3, 2, 2, 3], }[MacObject.MeshPar[1]]()
-               return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
-       elif Type == 'CompBox' :
-               #print "dx is: ", MacObject.GeoPar[1][1], ". dy is: ",MacObject.GeoPar[1][0]
-               ReducedRatio = ReduceRatio(MacObject.GeoPar[1][0], MacObject.GeoPar[1][1])
-               #print ReducedRatio
-               BaseDirPar = [ReducedRatio[1], ReducedRatio[1], ReducedRatio[0], ReducedRatio[0]]
-               return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
-                
-       elif Type == 'QuartCyl' :
-                N = QuarCylParam(MacObject.MeshPar[2])+1
-               BaseDirPar = {'NE' : lambda : [2, N, 2, N],
-                             'NW' : lambda : [N, 2, 2, N],
-                             'SW' : lambda : [N, 2, N, 2],
-                             'SE' : lambda : [2, N, N, 2], }[MacObject.MeshPar[1]]()
-               return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
-       elif Type == 'CompBoxF' : 
-               RealRatio = MacObject.GeoPar[1][1]/MacObject.GeoPar[1][0]
-               Xd = 0
-               Yd = 0
-               if MacObject.DirectionalMeshParams[2]+MacObject.DirectionalMeshParams[3] :
-                       A = int(max(MacObject.DirectionalMeshParams[2:4]))                       
-                       Xd = int(VecDivRatio([A,0,0,0], [1,1,1,1]))                       
-               if MacObject.DirectionalMeshParams[0]+MacObject.DirectionalMeshParams[1] :
-                       A = int(max(MacObject.DirectionalMeshParams[0:2]))                       
-                       Yd = int(VecDivRatio([0,0,A,0], [1,1,1,1]))
-                        
-               if Xd == 0 and Yd : Xd = int(round(Yd/RealRatio))
-               elif Yd == 0 : Yd = int(round(RealRatio*Xd))
-               
-               return [Xd,Yd]
-       elif Type == 'NonOrtho' :
-                MeanDX = 0.5*(IntLen(MacObject.DirBoundaries(0))+IntLen(MacObject.DirBoundaries(1)))
-                MeanDY = 0.5*(IntLen(MacObject.DirBoundaries(2))+IntLen(MacObject.DirBoundaries(3)))
-               RealRatio = MeanDY/MeanDX
-               Xd = 0
-               Yd = 0
-               if MacObject.DirectionalMeshParams[2]+MacObject.DirectionalMeshParams[3] :
-                       A = int(max(MacObject.DirectionalMeshParams[2:4]))                       
-                       Xd = int(VecDivRatio([A,0,0,0], [1,1,1,1]))                       
-               if MacObject.DirectionalMeshParams[0]+MacObject.DirectionalMeshParams[1] :
-                       A = int(max(MacObject.DirectionalMeshParams[0:2]))                       
-                       Yd = int(VecDivRatio([0,0,A,0], [1,1,1,1]))
-                        
-               if Xd == 0 and Yd : Xd = int(round(Yd/RealRatio))
-               elif Yd == 0 : Yd = int(round(RealRatio*Xd))
-               
-               return [Xd,Yd]
+    Type = MacObject.Type
+    if Type == 'Box11' :
+        BaseDirPar = [1,1,1,1]
+        return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
+    elif Type == 'Box42' :
+        BaseDirPar = {'SN' : lambda : [3, 3, 4, 2],
+                      'NS' : lambda : [3, 3, 2, 4],
+                      'EW' : lambda : [2, 4, 3, 3],
+                      'WE' : lambda : [4, 2, 3, 3], }[MacObject.MeshPar[1]]()
+        return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
+    elif Type == 'BoxAng32' :
+        BaseDirPar = {'NE' : lambda : [3, 2, 3, 2],
+                      'NW' : lambda : [2, 3, 3, 2],
+                      'SW' : lambda : [2, 3, 2, 3],
+                      'SE' : lambda : [3, 2, 2, 3], }[MacObject.MeshPar[1]]()
+        return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
+    elif Type == 'CompBox' :
+        #print "dx is: ", MacObject.GeoPar[1][1], ". dy is: ",MacObject.GeoPar[1][0]
+        ReducedRatio = ReduceRatio(MacObject.GeoPar[1][0], MacObject.GeoPar[1][1])
+        #print ReducedRatio
+        BaseDirPar = [ReducedRatio[1], ReducedRatio[1], ReducedRatio[0], ReducedRatio[0]]
+        return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
+
+    elif Type == 'QuartCyl' :
+        N = QuarCylParam(MacObject.MeshPar[2])+1
+        BaseDirPar = {'NE' : lambda : [2, N, 2, N],
+                      'NW' : lambda : [N, 2, 2, N],
+                      'SW' : lambda : [N, 2, N, 2],
+                      'SE' : lambda : [2, N, N, 2], }[MacObject.MeshPar[1]]()
+        return int(VecDivRatio(MacObject.DirectionalMeshParams, BaseDirPar))
+    elif Type == 'CompBoxF' :
+        RealRatio = MacObject.GeoPar[1][1]/MacObject.GeoPar[1][0]
+        Xd = 0
+        Yd = 0
+        if MacObject.DirectionalMeshParams[2]+MacObject.DirectionalMeshParams[3] :
+            A = int(max(MacObject.DirectionalMeshParams[2:4]))
+            Xd = int(VecDivRatio([A,0,0,0], [1,1,1,1]))
+        if MacObject.DirectionalMeshParams[0]+MacObject.DirectionalMeshParams[1] :
+            A = int(max(MacObject.DirectionalMeshParams[0:2]))
+            Yd = int(VecDivRatio([0,0,A,0], [1,1,1,1]))
+
+        if Xd == 0 and Yd : Xd = int(round(Yd/RealRatio))
+        elif Yd == 0 : Yd = int(round(RealRatio*Xd))
+
+        return [Xd,Yd]
+    elif Type == 'NonOrtho' :
+        MeanDX = 0.5*(IntLen(MacObject.DirBoundaries(0))+IntLen(MacObject.DirBoundaries(1)))
+        MeanDY = 0.5*(IntLen(MacObject.DirBoundaries(2))+IntLen(MacObject.DirBoundaries(3)))
+        RealRatio = MeanDY/MeanDX
+        Xd = 0
+        Yd = 0
+        if MacObject.DirectionalMeshParams[2]+MacObject.DirectionalMeshParams[3] :
+            A = int(max(MacObject.DirectionalMeshParams[2:4]))
+            Xd = int(VecDivRatio([A,0,0,0], [1,1,1,1]))
+        if MacObject.DirectionalMeshParams[0]+MacObject.DirectionalMeshParams[1] :
+            A = int(max(MacObject.DirectionalMeshParams[0:2]))
+            Yd = int(VecDivRatio([0,0,A,0], [1,1,1,1]))
+
+        if Xd == 0 and Yd : Xd = int(round(Yd/RealRatio))
+        elif Yd == 0 : Yd = int(round(RealRatio*Xd))
+
+        return [Xd,Yd]
 
 def IntLen (Interval) :
-        """
-        This function returns the length of a given interval even if the latter is not sorted correctly.
-        """
-        return abs(Interval[1]-Interval[0])
-                        
+    """
+    This function returns the length of a given interval even if the latter is not sorted correctly.
+    """
+    return abs(Interval[1]-Interval[0])
+
 def NextTo (RefBox, Direction, Extension):
-        """
-        This functions returns geometrical parameters for easy positioning of neighbouring objects.
-        The input (RefBox) and output are in the form :  [(X0,Y0),(DX,DY)]        
-        """
-        X0_0 = RefBox[0][0]
-        Y0_0 = RefBox[0][1]
-        DX_0 = RefBox[1][0]
-        DY_0 = RefBox[1][1]
-        
-        DirectionalCoef = {'Above' : lambda : [ 0, 1],
-                          'Below' : lambda : [ 0,-1],
-                          'Right' : lambda : [ 1, 0],
-                          'Left ' : lambda : [-1, 0], }[Direction]()
-        
-        X0_1 = X0_0+ DirectionalCoef[0] * (DX_0/2.+Extension/2.)
-        DX_1 = abs(DirectionalCoef[0]) * (Extension) + abs(DirectionalCoef[1])*DX_0
-        Y0_1 = Y0_0+ DirectionalCoef[1] * (DY_0/2.+Extension/2.)
-        DY_1 = abs(DirectionalCoef[1]) * (Extension) + abs(DirectionalCoef[0])*DY_0
-        
-        return [(X0_1,Y0_1),(DX_1,DY_1)]
-        
+    """
+    This functions returns geometrical parameters for easy positioning of neighbouring objects.
+    The input (RefBox) and output are in the form :  [(X0,Y0),(DX,DY)]
+    """
+    X0_0 = RefBox[0][0]
+    Y0_0 = RefBox[0][1]
+    DX_0 = RefBox[1][0]
+    DY_0 = RefBox[1][1]
+
+    DirectionalCoef = {'Above' : lambda : [ 0, 1],
+                       'Below' : lambda : [ 0,-1],
+                       'Right' : lambda : [ 1, 0],
+                       'Left ' : lambda : [-1, 0], }[Direction]()
+
+    X0_1 = X0_0+ DirectionalCoef[0] * (DX_0/2.+Extension/2.)
+    DX_1 = abs(DirectionalCoef[0]) * (Extension) + abs(DirectionalCoef[1])*DX_0
+    Y0_1 = Y0_0+ DirectionalCoef[1] * (DY_0/2.+Extension/2.)
+    DY_1 = abs(DirectionalCoef[1]) * (Extension) + abs(DirectionalCoef[0])*DY_0
+
+    return [(X0_1,Y0_1),(DX_1,DY_1)]
+
 def GeomMinMax (PtA, PtB):
-        """
-        This function returns geometrical parameters in the format  [(X0,Y0),(DX,DY)]. The input being 
-        the coordinates of two points (Xa,Ya), (Xb,Yb).
-        """
-        # First test that the vector relying the two points is oblique
-        AB = [PtB[0]- PtA[0],PtB[1]- PtA[1]]
-        if 0 in AB :
-                print ("Error: the two points are not correctly defined. In the orthonormal system XOY, it is impossible to define a rectangle with these two points")
-                return -1
-        else:
-                X0 = 0.5*(PtA[0]+PtB[0])
-                Y0 = 0.5*(PtA[1]+PtB[1])
-                DX = abs(AB[0])
-                DY = abs(AB[1])
-                return [(X0,Y0),(DX,DY)]
+    """
+    This function returns geometrical parameters in the format  [(X0,Y0),(DX,DY)]. The input being
+    the coordinates of two points (Xa,Ya), (Xb,Yb).
+    """
+    # First test that the vector relying the two points is oblique
+    AB = [PtB[0]- PtA[0],PtB[1]- PtA[1]]
+    if 0 in AB :
+        print ("Error: the two points are not correctly defined. In the orthonormal system XOY, it is impossible to define a rectangle with these two points")
+        return -1
+    else:
+        X0 = 0.5*(PtA[0]+PtB[0])
+        Y0 = 0.5*(PtA[1]+PtB[1])
+        DX = abs(AB[0])
+        DY = abs(AB[1])
+        return [(X0,Y0),(DX,DY)]
 
 def AddIfDifferent (List, Element):
-        if not(Element in List):
-                List = List+(Element,)
-        return List
+    if not(Element in List):
+        List = List+(Element,)
+    return List
 
 def IndexMultiOcc (Array,Element) :
-        """
-        This functions returns the occurrences indices of Element in Array.
-        As opposed to Array.index(Element) method, this allows determining      
-        multiple entries rather than just the first one!
-        """
-        Output = []
-        try : Array.index(Element)
-        except ValueError : print "No more occurrences"
-        else : Output.append(Array.index(Element))
-                
-        if not(Output == []) and len(Array) > 1 :
-                for index, ArrElem in enumerate(Array[Output[0]+1:]) :
-                        if ArrElem == Element : Output.append(index+Output[0]+1)
-                 
-        return Output
-        
+    """
+    This functions returns the occurrences indices of Element in Array.
+    As opposed to Array.index(Element) method, this allows determining
+    multiple entries rather than just the first one!
+    """
+    Output = []
+    try : Array.index(Element)
+    except ValueError : print("No more occurrences")
+    else : Output.append(Array.index(Element))
+
+    if not(Output == []) and len(Array) > 1 :
+        for index, ArrElem in enumerate(Array[Output[0]+1:]) :
+            if ArrElem == Element : Output.append(index+Output[0]+1)
+
+    return Output
+
 def SortList (ValList, CritList):
-        Output = []
-        SortedCritList = copy.copy(CritList)
-        SortedCritList.sort()
-        for i in range(0,len(ValList)):
-                if i > 0 :
-                        if not(SortedCritList[i]==SortedCritList[i-1]):
-                                index = IndexMultiOcc(CritList,SortedCritList[i])
-                                Output= Output + [ValList[j] for j in index]
-                else :  
-                        index = IndexMultiOcc(CritList,SortedCritList[i])
-                        Output= Output + [ValList[j] for j in index]
-                        
-        return Output
+    Output = []
+    SortedCritList = sorted(copy.copy(CritList))
+    for i in range(0,len(ValList)):
+        if i > 0 :
+            if not(SortedCritList[i]==SortedCritList[i-1]):
+                index = IndexMultiOcc(CritList,SortedCritList[i])
+                Output= Output + [ValList[j] for j in index]
+        else :
+            index = IndexMultiOcc(CritList,SortedCritList[i])
+            Output= Output + [ValList[j] for j in index]
+
+    return Output
 
 def SortPoints(Points):
-        """
-        This function sorts a list of the coordinates of N points as to start at 
-        an origin that represents Xmin and Xmax and then proceed in a counter
-        clock-wise sense
-        """
-        NbPts = len(Points)
-        Xmin = min([Points[i][0] for i in range(NbPts)])
-        Ymin = min([Points[i][1] for i in range(NbPts)])
-        Xmax = max([Points[i][0] for i in range(NbPts)])
-        Ymax = max([Points[i][1] for i in range(NbPts)])        
-        Crit = [(abs(Point[0]-Xmin)+0.1*(Xmax-Xmin))*(abs(Point[1]-Ymin)+0.1*(Ymax-Ymin)) for Point in Points]
-        #print "Input Points      : ", Points
-        #print "Sorting Criterion : ", Crit
-        Order = SortList (range(NbPts), Crit)
-        #print "Sorted Results    : ", Order
-        Output = []
-        Output.append(Points[Order[0]])
-        
-        Point0 = Points[Order[0]]
-        #print "Reference point :", Point0
-        
-        V = [[Point1[0]-Point0[0],Point1[1]-Point0[1]] for Point1 in Points]
-        Cosines = [-(vec[0]-1E-10)/(math.sqrt(DotProd(vec,vec)+1e-25)) for vec in V]
-        #print "Cosines criterion :", Cosines
-        Order = SortList(range(NbPts),Cosines)
-        #print "Ordered points:", Order
-        for PtIndex in Order[:-1]: Output.append(Points[PtIndex])
-        
-        return Output
-
+    """
+    This function sorts a list of the coordinates of N points as to start at
+    an origin that represents Xmin and Xmax and then proceed in a counter
+    clock-wise sense
+    """
+    NbPts = len(Points)
+    Xmin = min([Points[i][0] for i in range(NbPts)])
+    Ymin = min([Points[i][1] for i in range(NbPts)])
+    Xmax = max([Points[i][0] for i in range(NbPts)])
+    Ymax = max([Points[i][1] for i in range(NbPts)])
+    Crit = [(abs(Point[0]-Xmin)+0.1*(Xmax-Xmin))*(abs(Point[1]-Ymin)+0.1*(Ymax-Ymin)) for Point in Points]
+    #print "Input Points      : ", Points
+    #print "Sorting Criterion : ", Crit
+    Order = SortList (list(range(NbPts)), Crit)
+    #print "Sorted Results    : ", Order
+    Output = []
+    Output.append(Points[Order[0]])
+
+    Point0 = Points[Order[0]]
+    #print "Reference point :", Point0
+
+    V = [[Point1[0]-Point0[0],Point1[1]-Point0[1]] for Point1 in Points]
+    Cosines = [-(vec[0]-1E-10)/(math.sqrt(DotProd(vec,vec)+1e-25)) for vec in V]
+    #print "Cosines criterion :", Cosines
+    Order = SortList(list(range(NbPts)),Cosines)
+    #print "Ordered points:", Order
+    for PtIndex in Order[:-1]: Output.append(Points[PtIndex])
+
+    return Output
index 6589ac8b01e85d0849796f74804ce5b95717df92..c541fd949cd8de0524db6c38583968f057e23e13 100644 (file)
 
 
 class MacObject:
-       """ 
-       This represents a python class definition which contains 
-       all necessary information about the macro object being created
-       in Salome 
-       """
+    """
+    This represents a python class definition which contains
+    all necessary information about the macro object being created
+    in Salome
+    """
 
-       def __init__( self, ObjectType, GeoParameters, MeshParameters, **args ):
-               """
-               Initializes the macro object to be created, saves parameters inside of it, checks for neighboring objects,
-               determines meshing parameters if necessary and finally launches the generation process.
-               """
-               import Config,GenFunctions
-               if Config.debug : print "Initializing object No. " + str(len(Config.ListObj)+1)
+    def __init__( self, ObjectType, GeoParameters, MeshParameters, **args ):
+        """
+        Initializes the macro object to be created, saves parameters inside of it, checks for neighboring objects,
+        determines meshing parameters if necessary and finally launches the generation process.
+        """
+        import Config,GenFunctions
+        if Config.debug : print("Initializing object No. " + str(len(Config.ListObj)+1))
 
-                if 'publish' in args :
-                       if args['publish']==0 : Config.publish = 0
-                       else : Config.publish = 1
-               else : Config.publish = 1
-                
-                if 'groups' in args :
-                       self.GroupNames = args['groups']
-                        for group in args['groups'] :
-                                if not(group in Config.Groups) and group : Config.Groups.append(group)
-               else : self.GroupNames = [None, None, None, None]
-                
-                if ObjectType == 'NonOrtho':
-                        if not(len(GeoParameters)==4): print "Error: trying to construct a non-ortho object but the 4 constitutive vertices are not given!"
-                        else :
-                                Xmin = min([GeoParameters[i][0] for i in range(4)])
-                                Xmax = max([GeoParameters[i][0] for i in range(4)])
-                                Ymin = min([GeoParameters[i][1] for i in range(4)])
-                                Ymax = max([GeoParameters[i][1] for i in range(4)])                        
-                                self.GeoPar = [(0.5*(Xmin+Xmax),0.5*(Ymin+Ymax)),(Xmax-Xmin,Ymax-Ymin)]
-                                self.PtCoor = GenFunctions.SortPoints(GeoParameters)
-                else:
-                        self.GeoPar = GeoParameters
-                        [Xmin,Ymin,Xmax,Ymax] = [ self.GeoPar[0][0]-0.5*self.GeoPar[1][0], self.GeoPar[0][1]-0.5*self.GeoPar[1][1] ] + [ self.GeoPar[0][0]+0.5*self.GeoPar[1][0], self.GeoPar[0][1]+0.5*self.GeoPar[1][1] ]
-                        self.PtCoor = [(Xmin,Ymin),(Xmax,Ymin),(Xmax,Ymax),(Xmin,Ymax)]      
-                
-               self.Type = ObjectType
-               self.LowBound = [ self.GeoPar[0][0]-0.5*self.GeoPar[1][0], self.GeoPar[0][1]-0.5*self.GeoPar[1][1] ]
-               self.UpperBound = [ self.GeoPar[0][0]+0.5*self.GeoPar[1][0], self.GeoPar[0][1]+0.5*self.GeoPar[1][1] ]
-               self.MeshPar = MeshParameters
-               self.GeoChildren = []
-               self.GeoChildrenNames = []
-               self.Mesh = []
-               self.MeshGroups = []
-               self.CheckInterfaces()
-               if 'auto' in MeshParameters : self.AutoParam()
-               if not(self.MeshPar[0]<0): self.Generate()
-               else : 
-                       Config.ListObj.append(self)
-                       print("Aborting object creation\n ")
+        if 'publish' in args :
+            if args['publish']==0 : Config.publish = 0
+            else : Config.publish = 1
+        else : Config.publish = 1
 
-       def Generate(self) :
-               """
-               This method generates the geometrical object with the corresponding mesh once all verifications (CheckInterfaces and AutoParam) 
-               have been accomplished
-               """
-               import GenFunctions, Alarms, Config
-               self = {'Box11'    : lambda : GenFunctions.Box11(self),
-                       'Box42'    : lambda : GenFunctions.Box42(self),
-                       'BoxAng32' : lambda : GenFunctions.BoxAng32(self),
-                       'CompBox'  : lambda : GenFunctions.CompBox(self),
-                       'CompBoxF' : lambda : GenFunctions.CompBoxF(self),
-                       'NonOrtho' : lambda : GenFunctions.NonOrtho(self),
-                       'QuartCyl' : lambda : GenFunctions.QuartCyl(self) }[self.Type]()
+        if 'groups' in args :
+            self.GroupNames = args['groups']
+            for group in args['groups'] :
+                if not(group in Config.Groups) and group : Config.Groups.append(group)
+        else : self.GroupNames = [None, None, None, None]
 
-               if Config.debug : Alarms.Message(self.status)   # notification on the result of the generation algorithm
-                
+        if ObjectType == 'NonOrtho':
+            if not(len(GeoParameters)==4): print("Error: trying to construct a non-ortho object but the 4 constitutive vertices are not given!")
+            else :
+                Xmin = min([GeoParameters[i][0] for i in range(4)])
+                Xmax = max([GeoParameters[i][0] for i in range(4)])
+                Ymin = min([GeoParameters[i][1] for i in range(4)])
+                Ymax = max([GeoParameters[i][1] for i in range(4)])
+                self.GeoPar = [(0.5*(Xmin+Xmax),0.5*(Ymin+Ymax)),(Xmax-Xmin,Ymax-Ymin)]
+                self.PtCoor = GenFunctions.SortPoints(GeoParameters)
+        else:
+            self.GeoPar = GeoParameters
+            [Xmin,Ymin,Xmax,Ymax] = [ self.GeoPar[0][0]-0.5*self.GeoPar[1][0], self.GeoPar[0][1]-0.5*self.GeoPar[1][1] ] + [ self.GeoPar[0][0]+0.5*self.GeoPar[1][0], self.GeoPar[0][1]+0.5*self.GeoPar[1][1] ]
+            self.PtCoor = [(Xmin,Ymin),(Xmax,Ymin),(Xmax,Ymax),(Xmin,Ymax)]
 
-       def CheckInterfaces(self):
-               """
-               This method searches for neighbours for the object being created and saves them inside the Config.Connections
-               array. This array contains 4 entries per object corresponding to West, East, South, and North neighbours.
-               Note that an object may have more than one neighbour for a given direction. 
-               """
-               import Alarms, Config
-                from GenFunctions import AddIfDifferent
-                from CompositeBox import FindCommonSide
-                
-               Config.Connections.append([(-1,),(-1,),(-1,),(-1,)])
-               itemID = len(Config.ListObj)
-                # In all cases except non ortho, PrincipleBoxes is unitary and contains the box in question
-                # In the non-ortho case it contains all possible combinations of boxes with 3 vertices 
-                PrincipleBoxes = self.PrincipleBoxes()
-               for i, TestObj in enumerate(Config.ListObj): 
-                        SecondaryBoxes = TestObj.PrincipleBoxes()                               
-                       ConnX = 0
-                       ConnY = 0
-                        for Box0 in PrincipleBoxes:
-                                for Box1 in SecondaryBoxes:
-                                       # Along X
-                                       CenterDis = abs(Box1[0][0]-Box0[0][0])
-                                       Extension = 0.5*(Box1[1][0]+Box0[1][0])
-                                       if CenterDis - Extension < -1e-7 : 
-                                               ConnX = -1
-                                       elif CenterDis - Extension < 1e-7 :
-                                                if not(FindCommonSide(self.DirBoundaries(2),TestObj.DirBoundaries(3))==[0,0]) and Box1[0][0] < Box0[0][0] : ConnX = 1
-                                               elif not(FindCommonSide(self.DirBoundaries(3),TestObj.DirBoundaries(2))==[0,0]) and Box1[0][0] >= Box0[0][0]: ConnX = 2
-                                                else : ConnX = 0
-                                                
-                                       # Along Y
-                                       CenterDis = abs(Box1[0][1]-Box0[0][1])
-                                       Extension = 0.5*(Box1[1][1]+Box0[1][1])
-                                       if CenterDis - Extension < -1e-7 : 
-                                               ConnY = -1
-                                       elif CenterDis - Extension < 1e-7 :
-                                               if not(FindCommonSide(self.DirBoundaries(0),TestObj.DirBoundaries(1))==[0,0]) and Box1[0][1] < Box0[0][1] : ConnY = 1
-                                               elif not(FindCommonSide(self.DirBoundaries(1),TestObj.DirBoundaries(0))==[0,0]) and Box1[0][1] >= Box0[0][1]: ConnY = 2
-                                                else : ConnY = 0
+        self.Type = ObjectType
+        self.LowBound = [ self.GeoPar[0][0]-0.5*self.GeoPar[1][0], self.GeoPar[0][1]-0.5*self.GeoPar[1][1] ]
+        self.UpperBound = [ self.GeoPar[0][0]+0.5*self.GeoPar[1][0], self.GeoPar[0][1]+0.5*self.GeoPar[1][1] ]
+        self.MeshPar = MeshParameters
+        self.GeoChildren = []
+        self.GeoChildrenNames = []
+        self.Mesh = []
+        self.MeshGroups = []
+        self.CheckInterfaces()
+        if 'auto' in MeshParameters : self.AutoParam()
+        if not(self.MeshPar[0]<0): self.Generate()
+        else :
+            Config.ListObj.append(self)
+            print("Aborting object creation\n ")
 
-                                       if not (ConnX*ConnY == 0) :
-                                               if max(ConnX,ConnY) == -1 and not('NonOrtho' in [self.Type,TestObj.Type]) : Alarms.Message(3)
-                                               else:
-                                                       if ConnX == 1 and ConnY == -1:
-                                                               if Config.Connections[i][1] == (-1,) : Config.Connections[i][1] = (itemID,)
-                                                               else : Config.Connections[i][1] = AddIfDifferent(Config.Connections[i][1],itemID)
-                                                               if Config.Connections[itemID][0] == (-1,) : Config.Connections[itemID][0] = (i,)
-                                                               else : Config.Connections[itemID][0] = AddIfDifferent(Config.Connections[itemID][0],i)
-                                                       elif ConnX == 2 and ConnY == -1:
-                                                               if Config.Connections[i][0] == (-1,) : Config.Connections[i][0] = (itemID,)
-                                                               else : Config.Connections[i][0] = AddIfDifferent(Config.Connections[i][0],itemID)
-                                                               if Config.Connections[itemID][1] == (-1,) : Config.Connections[itemID][1] = (i,)
-                                                               else : Config.Connections[itemID][1] = AddIfDifferent(Config.Connections[itemID][1],i)
-                                                       elif ConnY == 1 and ConnX == -1:
-                                                               if Config.Connections[i][3] == (-1,) : Config.Connections[i][3] = (itemID,)
-                                                               else : Config.Connections[i][3] = AddIfDifferent(Config.Connections[i][3],itemID)
-                                                               if Config.Connections[itemID][2] == (-1,) : Config.Connections[itemID][2] = (i,)
-                                                               else : Config.Connections[itemID][2] = AddIfDifferent(Config.Connections[itemID][2],i)
-                                                       elif ConnY ==2 and ConnX == -1:
-                                                               if Config.Connections[i][2] == (-1,) : Config.Connections[i][2] = (itemID,)
-                                                               else : Config.Connections[i][2] = AddIfDifferent(Config.Connections[i][2],itemID)
-                                                               if Config.Connections[itemID][3] == (-1,) : Config.Connections[itemID][3] = (i,)
-                                                               else : Config.Connections[itemID][3] = AddIfDifferent(Config.Connections[itemID][3],i)
+    def Generate(self) :
+        """
+        This method generates the geometrical object with the corresponding mesh once all verifications (CheckInterfaces and AutoParam)
+        have been accomplished
+        """
+        import GenFunctions, Alarms, Config
+        self = {'Box11'    : lambda : GenFunctions.Box11(self),
+                'Box42'    : lambda : GenFunctions.Box42(self),
+                'BoxAng32' : lambda : GenFunctions.BoxAng32(self),
+                'CompBox'  : lambda : GenFunctions.CompBox(self),
+                'CompBoxF' : lambda : GenFunctions.CompBoxF(self),
+                'NonOrtho' : lambda : GenFunctions.NonOrtho(self),
+                'QuartCyl' : lambda : GenFunctions.QuartCyl(self) }[self.Type]()
 
-       def AutoParam (self):
-               """
-               This method is called only if the 'auto' keyword is used inside the meshing algorithm. It is based on the 
-               connection results per object and tries to find the correct parameters for obtaining a final compatible mesh
-               between the objects already present and the one being created. If this is not possible, the method gives an error
-               message.
-               """
-               import Alarms, Config, GenFunctions, CompositeBox
-               MeshPar = [0,0,0,0]     # initialize the mesh parameter value to be used to -1
-                [(X0,Y0),(DX,DY)] = self.GeoPar
-               ObjectsInvolved = []
-               for i, Conn in enumerate(Config.Connections[-1]):
-                       if not ( Conn == (-1,) ):   # Meaning that there is one or more neighbors on this direction
-                               for ObjID in Conn : 
-                                        ToLook0 = [2,3,0,1][i]
-                                        ToLook1 = [3,2,1,0][i]
-                                        CommonSide =  CompositeBox.FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),self.DirBoundaries(ToLook0))
-                                        #print "Common Side is:", CommonSide
-                                        ToLook2 = [1,0,3,2][i]
-                                        #print "Full Side is:", CompositeBox.IntLen(Config.ListObj[ObjID].DirBoundaries(ToLook1))
-                                        #print "Full Segments on this direction are:", Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]
-                                        RealSegments = round(Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]*CompositeBox.IntLen(CommonSide)/CompositeBox.IntLen(Config.ListObj[ObjID].DirBoundaries(ToLook1)))
-                                        #print "RealSegments :", RealSegments
-                                        
-                                       MeshPar[i] = MeshPar[i] + RealSegments
-                                       ObjectsInvolved.append(ObjID+1)
-               self.DirectionalMeshParams =  MeshPar
-               self.MeshPar[0] = GenFunctions.CompatibilityTest(self)
+        if Config.debug : Alarms.Message(self.status)   # notification on the result of the generation algorithm
 
-               if self.MeshPar[0] < 0 : 
-                       Alarms.Message(4)
-                       if self.MeshPar[0] == -1 : print ("Problem encountered with object(s) no. "+str(ObjectsInvolved))
-                       elif self.MeshPar[0] == -2 : print ("This object has no neighbours !!!")
 
-       def Boundaries (self):
-                """
-                This method returns the global boundaries of the MacObject. [Xmin,Xmax,Ymin,Ymax]
-                """
-                Xmin = min([self.DirBoundaries(i)[0] for i in [0,1]])
-                Xmax = max([self.DirBoundaries(i)[1] for i in [0,1]])
-                Ymin = min([self.DirBoundaries(i)[0] for i in [2,3]])
-                Ymax = max([self.DirBoundaries(i)[1] for i in [2,3]])
-                
-                return [Xmin,Xmax,Ymin,Ymax]
-                
-       def DirBoundaries (self, Direction):
-                """
-                This method returns a single interval giving [Xmin,Xmax] or [Ymin,Ymax] according to the required direction.
-                This works particularly well for nonorthogonal objects.
-                Direction : [0,1,2,3] <=> [South, North, West, East]
-                """
-                PtCoor = self.PtCoor
-                PtCoor.append(self.PtCoor[0])
-                if type(Direction) is str :
-                        Dir = { 'South'  : lambda : 0,
-                               'North'  : lambda : 1,
-                               'West'   : lambda : 2,
-                                'East'   : lambda : 3,}[Direction]()
-                else : Dir = int(Direction)
-                         
-                PtIndex  = [0,2,3,1][Dir]
-                DirIndex = [0,0,1,1][Dir]
-                             
-               return sorted([PtCoor[PtIndex][DirIndex],PtCoor[PtIndex+1][DirIndex]])
-        def DirVectors (self, Direction):
-                """
-                This method returns for a given object, the real vectors which define a given direction
-                The interest in using this method is for non-orthogonal objects where the sides can be 
-                deviated from the orthogonal basis vectors
-                """
-                if type(Direction) is str :
-                        Dir = { 'South'  : lambda : 0,
-                               'North'  : lambda : 1,
-                               'West'   : lambda : 2,
-                                'East'   : lambda : 3,}[Direction]()
-                else : Dir = int(Direction)
-                PtCoor = self.PtCoor
-                PtCoor.append(self.PtCoor[0])
-                PtIndex  = [0,2,3,1][Dir]
-                return [PtCoor[PtIndex+1][0]-PtCoor[PtIndex][0],PtCoor[PtIndex+1][1]-PtCoor[PtIndex][1],0.]
-                                
-        def GetBorder (self, Criterion):
-                import GenFunctions, Config
+    def CheckInterfaces(self):
+        """
+        This method searches for neighbours for the object being created and saves them inside the Config.Connections
+        array. This array contains 4 entries per object corresponding to West, East, South, and North neighbours.
+        Note that an object may have more than one neighbour for a given direction.
+        """
+        import Alarms, Config
+        from GenFunctions import AddIfDifferent
+        from CompositeBox import FindCommonSide
 
-                from salome.geom import geomBuilder
-                geompy = geomBuilder.New( Config.theStudy )
-                
-                if type(Criterion) is str :
-                        Crit = {'South'  : lambda : 0,
-                               'North'  : lambda : 1,
-                               'West'   : lambda : 2,
-                                'East'   : lambda : 3,}[Criterion]()
-                else : Crit = int(Criterion)
-                
-                AcceptedObj = []
-                if Crit < 4 :
-                        Boundaries = self.Boundaries()
-                        Research = {0 : lambda : [self.DirVectors(0),1,Boundaries[2]],
-                                   1 : lambda : [self.DirVectors(1),1,Boundaries[3]],
-                                   2 : lambda : [self.DirVectors(2),0,Boundaries[0]],
-                                   3 : lambda : [self.DirVectors(3),0,Boundaries[1]], }[Crit]()
-                                                            
-                        for i,ElemObj in enumerate(self.GeoChildren):
-                               EdgeIDs = geompy.ExtractShapes(ElemObj,6)# List of Edge IDs belonging to ElemObj
-                                for Edge in EdgeIDs:
-                                        if GenFunctions.IsParallel(Edge,Research[0]):
-                                                if abs( geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,0))[Research[1]] - Research[2] )< 1e-6 or abs( geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,1))[Research[1]] - Research[2] )< 1e-6 :
-                                                        AcceptedObj.append(Edge)
-                else :
-                       CenterSrchPar = {'NE' : lambda : [-1., -1.],
-                                        'NW' : lambda : [ 1., -1.],
-                                        'SW' : lambda : [ 1.,  1.],
-                                        'SE' : lambda : [-1.,  1.], }[self.MeshPar[1]]()
-                        Radius = self.GeoPar[1][1]*float(self.MeshPar[2])/(self.MeshPar[2]+1)
-                        Center = (self.GeoPar[0][0]+CenterSrchPar[0]*self.GeoPar[1][0]/2.,self.GeoPar[0][1]+CenterSrchPar[1]*self.GeoPar[1][1]/2.,0.)
-                        for i,ElemObj in enumerate(self.GeoChildren):
-                               EdgeIDs = geompy.ExtractShapes(ElemObj,6)# List of Edge IDs belonging to ElemObj
-                                for Edge in EdgeIDs:
-                                        if GenFunctions.IsOnCircle(Edge,Center,Radius):
-                                                AcceptedObj.append(Edge)
-                return AcceptedObj
+        Config.Connections.append([(-1,),(-1,),(-1,),(-1,)])
+        itemID = len(Config.ListObj)
+        # In all cases except non ortho, PrincipleBoxes is unitary and contains the box in question
+        # In the non-ortho case it contains all possible combinations of boxes with 3 vertices
+        PrincipleBoxes = self.PrincipleBoxes()
+        for i, TestObj in enumerate(Config.ListObj):
+            SecondaryBoxes = TestObj.PrincipleBoxes()
+            ConnX = 0
+            ConnY = 0
+            for Box0 in PrincipleBoxes:
+                for Box1 in SecondaryBoxes:
+                    # Along X
+                    CenterDis = abs(Box1[0][0]-Box0[0][0])
+                    Extension = 0.5*(Box1[1][0]+Box0[1][0])
+                    if CenterDis - Extension < -1e-7 :
+                        ConnX = -1
+                    elif CenterDis - Extension < 1e-7 :
+                        if not(FindCommonSide(self.DirBoundaries(2),TestObj.DirBoundaries(3))==[0,0]) and Box1[0][0] < Box0[0][0] : ConnX = 1
+                        elif not(FindCommonSide(self.DirBoundaries(3),TestObj.DirBoundaries(2))==[0,0]) and Box1[0][0] >= Box0[0][0]: ConnX = 2
+                        else : ConnX = 0
 
-        def PrincipleBoxes (self):
-                """
-                This function returns all possible combination rectangular shape objects that can contain at least 3 of the principle vertices
-                constituting the MacObject. This is indispensable for the Non-ortho types and shall return a number of 24 possible combinations
-                """
-                from itertools import combinations
-                Boxes = []
-                if self.Type == 'NonOrtho':
-                        for combi in combinations(range(4),3):
-                                Xmin = min([self.PtCoor[i][0] for i in combi])
-                                Xmax = max([self.PtCoor[i][0] for i in combi])
-                                Ymin = min([self.PtCoor[i][1] for i in combi])
-                                Ymax = max([self.PtCoor[i][1] for i in combi])                        
-                                Boxes.append([(0.5*(Xmin+Xmax),0.5*(Ymin+Ymax)),(Xmax-Xmin,Ymax-Ymin)])
-                else :
-                        Boxes = [self.GeoPar]
-                
-                return Boxes     
-                        
-        
+                    # Along Y
+                    CenterDis = abs(Box1[0][1]-Box0[0][1])
+                    Extension = 0.5*(Box1[1][1]+Box0[1][1])
+                    if CenterDis - Extension < -1e-7 :
+                        ConnY = -1
+                    elif CenterDis - Extension < 1e-7 :
+                        if not(FindCommonSide(self.DirBoundaries(0),TestObj.DirBoundaries(1))==[0,0]) and Box1[0][1] < Box0[0][1] : ConnY = 1
+                        elif not(FindCommonSide(self.DirBoundaries(1),TestObj.DirBoundaries(0))==[0,0]) and Box1[0][1] >= Box0[0][1]: ConnY = 2
+                        else : ConnY = 0
+
+                    if not (ConnX*ConnY == 0) :
+                        if max(ConnX,ConnY) == -1 and not('NonOrtho' in [self.Type,TestObj.Type]) : Alarms.Message(3)
+                        else:
+                            if ConnX == 1 and ConnY == -1:
+                                if Config.Connections[i][1] == (-1,) : Config.Connections[i][1] = (itemID,)
+                                else : Config.Connections[i][1] = AddIfDifferent(Config.Connections[i][1],itemID)
+                                if Config.Connections[itemID][0] == (-1,) : Config.Connections[itemID][0] = (i,)
+                                else : Config.Connections[itemID][0] = AddIfDifferent(Config.Connections[itemID][0],i)
+                            elif ConnX == 2 and ConnY == -1:
+                                if Config.Connections[i][0] == (-1,) : Config.Connections[i][0] = (itemID,)
+                                else : Config.Connections[i][0] = AddIfDifferent(Config.Connections[i][0],itemID)
+                                if Config.Connections[itemID][1] == (-1,) : Config.Connections[itemID][1] = (i,)
+                                else : Config.Connections[itemID][1] = AddIfDifferent(Config.Connections[itemID][1],i)
+                            elif ConnY == 1 and ConnX == -1:
+                                if Config.Connections[i][3] == (-1,) : Config.Connections[i][3] = (itemID,)
+                                else : Config.Connections[i][3] = AddIfDifferent(Config.Connections[i][3],itemID)
+                                if Config.Connections[itemID][2] == (-1,) : Config.Connections[itemID][2] = (i,)
+                                else : Config.Connections[itemID][2] = AddIfDifferent(Config.Connections[itemID][2],i)
+                            elif ConnY ==2 and ConnX == -1:
+                                if Config.Connections[i][2] == (-1,) : Config.Connections[i][2] = (itemID,)
+                                else : Config.Connections[i][2] = AddIfDifferent(Config.Connections[i][2],itemID)
+                                if Config.Connections[itemID][3] == (-1,) : Config.Connections[itemID][3] = (i,)
+                                else : Config.Connections[itemID][3] = AddIfDifferent(Config.Connections[itemID][3],i)
+
+    def AutoParam (self):
+        """
+        This method is called only if the 'auto' keyword is used inside the meshing algorithm. It is based on the
+        connection results per object and tries to find the correct parameters for obtaining a final compatible mesh
+        between the objects already present and the one being created. If this is not possible, the method gives an error
+        message.
+        """
+        import Alarms, Config, GenFunctions, CompositeBox
+        MeshPar = [0,0,0,0]     # initialize the mesh parameter value to be used to -1
+        [(X0,Y0),(DX,DY)] = self.GeoPar
+        ObjectsInvolved = []
+        for i, Conn in enumerate(Config.Connections[-1]):
+            if not ( Conn == (-1,) ):   # Meaning that there is one or more neighbors on this direction
+                for ObjID in Conn :
+                    ToLook0 = [2,3,0,1][i]
+                    ToLook1 = [3,2,1,0][i]
+                    CommonSide =  CompositeBox.FindCommonSide(Config.ListObj[ObjID].DirBoundaries(ToLook1),self.DirBoundaries(ToLook0))
+                    #print "Common Side is:", CommonSide
+                    ToLook2 = [1,0,3,2][i]
+                    #print "Full Side is:", CompositeBox.IntLen(Config.ListObj[ObjID].DirBoundaries(ToLook1))
+                    #print "Full Segments on this direction are:", Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]
+                    RealSegments = round(Config.ListObj[ObjID].DirectionalMeshParams[ToLook2]*CompositeBox.IntLen(CommonSide)/CompositeBox.IntLen(Config.ListObj[ObjID].DirBoundaries(ToLook1)))
+                    #print "RealSegments :", RealSegments
+
+                    MeshPar[i] = MeshPar[i] + RealSegments
+                    ObjectsInvolved.append(ObjID+1)
+        self.DirectionalMeshParams =  MeshPar
+        self.MeshPar[0] = GenFunctions.CompatibilityTest(self)
+
+        if self.MeshPar[0] < 0 :
+            Alarms.Message(4)
+            if self.MeshPar[0] == -1 : print(("Problem encountered with object(s) no. "+str(ObjectsInvolved)))
+            elif self.MeshPar[0] == -2 : print ("This object has no neighbours !!!")
+
+    def Boundaries (self):
+        """
+        This method returns the global boundaries of the MacObject. [Xmin,Xmax,Ymin,Ymax]
+        """
+        Xmin = min([self.DirBoundaries(i)[0] for i in [0,1]])
+        Xmax = max([self.DirBoundaries(i)[1] for i in [0,1]])
+        Ymin = min([self.DirBoundaries(i)[0] for i in [2,3]])
+        Ymax = max([self.DirBoundaries(i)[1] for i in [2,3]])
+
+        return [Xmin,Xmax,Ymin,Ymax]
+
+    def DirBoundaries (self, Direction):
+        """
+        This method returns a single interval giving [Xmin,Xmax] or [Ymin,Ymax] according to the required direction.
+        This works particularly well for nonorthogonal objects.
+        Direction : [0,1,2,3] <=> [South, North, West, East]
+        """
+        PtCoor = self.PtCoor
+        PtCoor.append(self.PtCoor[0])
+        if isinstance(Direction, str) :
+            Dir = { 'South'  : lambda : 0,
+                    'North'  : lambda : 1,
+                    'West'   : lambda : 2,
+                    'East'   : lambda : 3,}[Direction]()
+        else : Dir = int(Direction)
+
+        PtIndex  = [0,2,3,1][Dir]
+        DirIndex = [0,0,1,1][Dir]
+
+        return sorted([PtCoor[PtIndex][DirIndex],PtCoor[PtIndex+1][DirIndex]])
+    def DirVectors (self, Direction):
+        """
+        This method returns for a given object, the real vectors which define a given direction
+        The interest in using this method is for non-orthogonal objects where the sides can be
+        deviated from the orthogonal basis vectors
+        """
+        if isinstance(Direction, str) :
+            Dir = { 'South'  : lambda : 0,
+                    'North'  : lambda : 1,
+                    'West'   : lambda : 2,
+                    'East'   : lambda : 3,}[Direction]()
+        else : Dir = int(Direction)
+        PtCoor = self.PtCoor
+        PtCoor.append(self.PtCoor[0])
+        PtIndex  = [0,2,3,1][Dir]
+        return [PtCoor[PtIndex+1][0]-PtCoor[PtIndex][0],PtCoor[PtIndex+1][1]-PtCoor[PtIndex][1],0.]
+
+    def GetBorder (self, Criterion):
+        import GenFunctions, Config
+
+        from salome.geom import geomBuilder
+        geompy = geomBuilder.New()
+
+        if isinstance(Criterion, str) :
+            Crit = {'South'  : lambda : 0,
+                    'North'  : lambda : 1,
+                    'West'   : lambda : 2,
+                    'East'   : lambda : 3,}[Criterion]()
+        else : Crit = int(Criterion)
+
+        AcceptedObj = []
+        if Crit < 4 :
+            Boundaries = self.Boundaries()
+            Research = {0 : lambda : [self.DirVectors(0),1,Boundaries[2]],
+                        1 : lambda : [self.DirVectors(1),1,Boundaries[3]],
+                        2 : lambda : [self.DirVectors(2),0,Boundaries[0]],
+                        3 : lambda : [self.DirVectors(3),0,Boundaries[1]], }[Crit]()
+
+            for i,ElemObj in enumerate(self.GeoChildren):
+                EdgeIDs = geompy.ExtractShapes(ElemObj,6)# List of Edge IDs belonging to ElemObj
+                for Edge in EdgeIDs:
+                    if GenFunctions.IsParallel(Edge,Research[0]):
+                        if abs( geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,0))[Research[1]] - Research[2] )< 1e-6 or abs( geompy.PointCoordinates(geompy.GetVertexByIndex(Edge,1))[Research[1]] - Research[2] )< 1e-6 :
+                            AcceptedObj.append(Edge)
+        else :
+            CenterSrchPar = {'NE' : lambda : [-1., -1.],
+                             'NW' : lambda : [ 1., -1.],
+                             'SW' : lambda : [ 1.,  1.],
+                             'SE' : lambda : [-1.,  1.], }[self.MeshPar[1]]()
+            Radius = self.GeoPar[1][1]*float(self.MeshPar[2])/(self.MeshPar[2]+1)
+            Center = (self.GeoPar[0][0]+CenterSrchPar[0]*self.GeoPar[1][0]/2.,self.GeoPar[0][1]+CenterSrchPar[1]*self.GeoPar[1][1]/2.,0.)
+            for i,ElemObj in enumerate(self.GeoChildren):
+                EdgeIDs = geompy.ExtractShapes(ElemObj,6)# List of Edge IDs belonging to ElemObj
+                for Edge in EdgeIDs:
+                    if GenFunctions.IsOnCircle(Edge,Center,Radius):
+                        AcceptedObj.append(Edge)
+        return AcceptedObj
+
+    def PrincipleBoxes (self):
+        """
+        This function returns all possible combination rectangular shape objects that can contain at least 3 of the principle vertices
+        constituting the MacObject. This is indispensable for the Non-ortho types and shall return a number of 24 possible combinations
+        """
+        from itertools import combinations
+        Boxes = []
+        if self.Type == 'NonOrtho':
+            for combi in combinations(list(range(4)),3):
+                Xmin = min([self.PtCoor[i][0] for i in combi])
+                Xmax = max([self.PtCoor[i][0] for i in combi])
+                Ymin = min([self.PtCoor[i][1] for i in combi])
+                Ymax = max([self.PtCoor[i][1] for i in combi])
+                Boxes.append([(0.5*(Xmin+Xmax),0.5*(Ymin+Ymax)),(Xmax-Xmin,Ymax-Ymin)])
+        else :
+            Boxes = [self.GeoPar]
+
+        return Boxes
index a5d363c14bbf50945179a5867c795350b75a22fb..7b768d84f78b32a0a72669cf0bc2647e140ddcf8 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-# 
+#
 import SMESH
 import math
 import Config
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New( Config.theStudy )
+geompy = geomBuilder.New()
 
 from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New( Config.theStudy )
+smesh = smeshBuilder.New()
 
 ##########################################################################################################
 
 def PublishGroups ():
-        aFilterManager = smesh.CreateFilterManager()
+    aFilterManager = smesh.CreateFilterManager()
 
-        # Building geometric and mesh compounds and  groups ##############################################
-        if Config.debug : print "Searching for geometric groups and publishing final compound"
-        
+    # Building geometric and mesh compounds and  groups ##############################################
+    if Config.debug : print("Searching for geometric groups and publishing final compound")
+
+    TempGEOList = []
+    TempMESHList = []
+
+    for MacroObj in Config.ListObj :
+        TempGEOList += MacroObj.GeoChildren
+        TempMESHList += MacroObj.Mesh
+
+    FinalCompound = geompy.MakeCompound(TempGEOList)
+    geompy.addToStudy (FinalCompound,Config.StudyName)
+    MeshCompound = smesh.Concatenate(TempMESHList, 1, 1, 1e-5)
+    MeshCompound.SetName(Config.StudyName)
+
+    GroupGEO = []
+    for group in Config.Groups :
+
+        # Geometric groups definition
         TempGEOList = []
-        TempMESHList = []
-        
-        for MacroObj in Config.ListObj : 
-                TempGEOList += MacroObj.GeoChildren
-                TempMESHList += MacroObj.Mesh
-                
-        FinalCompound = geompy.MakeCompound(TempGEOList)
-        geompy.addToStudy (FinalCompound,Config.StudyName)
-        MeshCompound = smesh.Concatenate(TempMESHList, 1, 1, 1e-5)
-        MeshCompound.SetName(Config.StudyName)
-        
-        GroupGEO = []
-        for group in Config.Groups :
-        
-                # Geometric groups definition
-                TempGEOList = []
-                TempNames = []
-                for MacroObj in Config.ListObj :
-                        if group in MacroObj.GroupNames :
-                                Occurences = IndexMultiOcc(MacroObj.GroupNames, group)
-                                for Occ in Occurences :
-                                        TempGEOList += MacroObj.GetBorder(Occ)
-                GroupGEO.append(geompy.MakeCompound(TempGEOList))
-                geompy.addToStudyInFather(FinalCompound,GroupGEO[-1],'GR_'+group)
-                
-                # Mesh groups definition
-                Criterion = smesh.GetCriterion(SMESH.EDGE, SMESH.FT_BelongToGeom,'=',GroupGEO[-1],Tolerance=1e-06)
-                #Criterion = smesh.Filter.Criterion(18,39,0,'GR_'+group,'GR_'+group,39,39,1e-06,smesh.EDGE,7)
-                MeshCompound.MakeGroupByCriterion(group,Criterion)
-        
-        StudyBuilder = Config.theStudy.NewBuilder()
-        for MeshObj in TempMESHList:
-                SO = Config.theStudy.FindObjectIOR(Config.theStudy.ConvertObjectToIOR(MeshObj))
-                if SO is not None: StudyBuilder.RemoveObjectWithChildren(SO)
-        
-        return MeshCompound        
-                
+        TempNames = []
+        for MacroObj in Config.ListObj :
+            if group in MacroObj.GroupNames :
+                Occurences = IndexMultiOcc(MacroObj.GroupNames, group)
+                for Occ in Occurences :
+                    TempGEOList += MacroObj.GetBorder(Occ)
+        GroupGEO.append(geompy.MakeCompound(TempGEOList))
+        geompy.addToStudyInFather(FinalCompound,GroupGEO[-1],'GR_'+group)
+
+        # Mesh groups definition
+        Criterion = smesh.GetCriterion(SMESH.EDGE, SMESH.FT_BelongToGeom,'=',GroupGEO[-1],Tolerance=1e-06)
+        #Criterion = smesh.Filter.Criterion(18,39,0,'GR_'+group,'GR_'+group,39,39,1e-06,smesh.EDGE,7)
+        MeshCompound.MakeGroupByCriterion(group,Criterion)
+
+    StudyBuilder = Config.theStudy.NewBuilder()
+    for MeshObj in TempMESHList:
+        SO = Config.theStudy.FindObjectIOR(Config.theStudy.ConvertObjectToIOR(MeshObj))
+        if SO is not None: StudyBuilder.RemoveObjectWithChildren(SO)
+
+    return MeshCompound
+
 
 def IndexMultiOcc (Array,Element) :
-        """
-        This function returns the occurrences indices of Element in Array.
-        As opposed to Array.index(Element) method, this allows determining      
-        multiple entries rather than just the first one!
-        """
-        Output = []
-        try : Array.index(Element)
-        except ValueError : print "No more occurrences"
-        else : Output.append(Array.index(Element))
-                
-        if not(Output == [-1]) and len(Array) > 1 :
-                for index, ArrElem in enumerate(Array[Output[0]+1:]) :
-                        if ArrElem is Element : Output.append(index+Output[0]+1)
-                 
-        return Output
-            
+    """
+    This function returns the occurrences indices of Element in Array.
+    As opposed to Array.index(Element) method, this allows determining
+    multiple entries rather than just the first one!
+    """
+    Output = []
+    try : Array.index(Element)
+    except ValueError : print("No more occurrences")
+    else : Output.append(Array.index(Element))
+
+    if not(Output == [-1]) and len(Array) > 1 :
+        for index, ArrElem in enumerate(Array[Output[0]+1:]) :
+            if ArrElem is Element : Output.append(index+Output[0]+1)
+
+    return Output
+
 def Publish (ObjToPublish):
-       for i,GeoObj in enumerate(ObjToPublish) : geompy.addToStudy(GeoObj,"Sub_"+str(i))
-        
+    for i,GeoObj in enumerate(ObjToPublish) : geompy.addToStudy(GeoObj,"Sub_"+str(i))
+
 def RevolveMesh(MainMesh,**args):
         """
         This function permits to revolute and scale a 2D mesh while transforming the edge
@@ -111,18 +111,18 @@ def RevolveMesh(MainMesh,**args):
         ################################################################################       
         if 'Center' in args : CenterCoor = [float(Coor) for Coor in args['Center']]
         else : 
-                print "\nThe coordinates of the center of revolution were not given\nThe origin is used by default."
+                print("\nThe coordinates of the center of revolution were not given\nThe origin is used by default.")
                 CenterCoor = [0.,0.,0.]
         
         if 'Direction' in args : Direction = [float(Dir) for Dir in args['Direction']]
         else :
-                print "\nThe axis vector of revolution was not given\nThe x-axis is used by default."
+                print("\nThe axis vector of revolution was not given\nThe x-axis is used by default.")
                 Direction = [1.,0.,0.]
         
         if 'AngleDeg' in args : Angle = float(args['AngleDeg'])*math.pi/180.
         elif 'AngleRad' in args : Angle = float(args['AngleRad'])
         else :
-                print "\nThe revolution angle was not given\nAn angle of 10 degrees is used by default."
+                print("\nThe revolution angle was not given\nAn angle of 10 degrees is used by default.")
                 Angle = 10.*math.pi/180.
                 
         if 'Scale' in args : Scale = float(args['Scale'])
@@ -185,12 +185,12 @@ def ExtrudeMesh(MainMesh,**args):
         ################################################################################              
         if 'Distance' in args : Distance = float(args['Distance'])
         else :
-                print "\nThe extrusion distance was not given\nA default value of 1 is used."
+                print("\nThe extrusion distance was not given\nA default value of 1 is used.")
                 Distance = 1.
                 
         if 'Direction' in args : Direction = NormalizeVector([float(Dir) for Dir in args['Direction']],Distance)
         else :
-                print "\nThe extrusion vector of revolution was not given\nThe z-axis is used by default."
+                print("\nThe extrusion vector of revolution was not given\nThe z-axis is used by default.")
                 Direction = NormalizeVector([0.,0.,1.],Distance)
                                 
         if 'Scale' in args : Scale = float(args['Scale'])
@@ -237,11 +237,10 @@ def ExtrudeMesh(MainMesh,**args):
      
                
 def NormalizeVector (V,Norm):
-        """
-        This function returns a normalized vector (magnitude = Norm), parallel to the entered one
-        """
-        V = [float(Coor) for Coor in V]
-        Norm = float(Norm)
-        MagV = math.sqrt(V[0]*V[0]+V[1]*V[1]+V[2]*V[2])
-        return [Coor*Norm/MagV for Coor in V]
-  
+    """
+    This function returns a normalized vector (magnitude = Norm), parallel to the entered one
+    """
+    V = [float(Coor) for Coor in V]
+    Norm = float(Norm)
+    MagV = math.sqrt(V[0]*V[0]+V[1]*V[1]+V[2]*V[2])
+    return [Coor*Norm/MagV for Coor in V]
index 004ff39a4b7dd03847cb2ce29cee0a9544972cd0..25a76b3f73e832c118c922c6000761e4520284f7 100644 (file)
 
 # This is an automation of the sharp angle object, with a corner at (X0,Y0), side length : Extension and a fine local meshing : LocalMeshing
 # The corner orientation is defined as NE (North-East) , NW (North-West), SE, or SW. The object's "arm" is 8/14 of Extension
-#                      |      |     8      6
-#               -------        ---------
-#      ---->   |                        |   <----
-#              |   NW             NE    |  oo
-#         _____|                        |_____
-
-import sys, math, commands
-CWD = commands.getoutput('pwd')
+#                       |      |     8      6
+#                -------        ---------
+#       ---->   |                        |   <----
+#               |   NW             NE    |  oo
+#          _____|                        |_____
+
+import sys, math, subprocess
+CWD = subprocess.getoutput('pwd')
 sys.path.append(CWD)
 
 from MacObject import *
 from CompositeBox import *
 import Config, GenFunctions
 
-def SharpAngleOut (X0 , Y0 , DX , DY , DLocal, LocalMeshing , CornerOrientation , NLevels, **args) : 
-       if DLocal == 'auto' : DLocal = float(min(DX,DY))
-
-       BoxSide = DLocal/(2.**(NLevels+1))
-       InternalMeshing = int(math.ceil(BoxSide/(3*LocalMeshing)))
-       InternalMeshing = InternalMeshing+InternalMeshing%2     # An even number is needed, otherwise the objects would not be compatible once created
-       if InternalMeshing == 0 : InternalMeshing = 2           # This sets a minimum meshing condition in order to avoid an error. The user is notified of the value considered for the local meshing
-       print "Possible Local meshing is :", BoxSide/(3*InternalMeshing), "\nThis value is returned by this function for your convenience"
-
-       DirPar =     {'NE' : lambda : ['NE', 'NW', 'SE', 'EW', 'NW', 'SN', 'SN', 'NE', 'WE', 'WE', 'SE', 'NS'],
-                     'NW' : lambda : ['NW', 'NE', 'SW', 'WE', 'NE', 'SN', 'SN', 'NW', 'EW', 'EW', 'SW', 'NS'],
-                     'SE' : lambda : ['SE', 'SW', 'NE', 'EW', 'SW', 'NS', 'NS', 'SE', 'WE', 'WE', 'NE', 'SN'],
-                     'SW' : lambda : ['SW', 'SE', 'NW', 'WE', 'SE', 'NS', 'NS', 'SW', 'EW', 'EW', 'NW', 'SN'], }[CornerOrientation]()
-
-       CoefVer =   {'NE' : lambda :  1,
-                    'NW' : lambda :  1,
-                    'SE' : lambda : -1,
-                    'SW' : lambda : -1, }[CornerOrientation]()
-
-       CoefHor =   {'NE' : lambda :  1,
-                    'NW' : lambda : -1,
-                    'SE' : lambda :  1,
-                    'SW' : lambda : -1, }[CornerOrientation]()
-                     
-       ToLook  = {'NE' : lambda : [0,2,1,3],
-                  'NW' : lambda : [0,3,1,2],
-                  'SE' : lambda : [1,2,0,3],
-                  'SW' : lambda : [1,3,0,2], }[CornerOrientation]()        
-       
-        if args.__contains__('groups') :
-                GroupNames = args['groups']
-       else : GroupNames = [None, None, None, None, None, None]
-        
-        GN00 = GroupArray(ToLook[0],GroupNames[0])
-        GN01 = GroupArray(ToLook[1],GroupNames[1])
-        
-        GN1 = GroupArray([ToLook[0],ToLook[1]],[GroupNames[0],GroupNames[5]])
-        GN7 = GroupArray([ToLook[0],ToLook[1]],[GroupNames[4],GroupNames[1]])
-        
-        if DY == DLocal :
-                GN2 = GroupArray([ToLook[1],ToLook[2]],[GroupNames[5],GroupNames[2]])
-                GN3 = GroupArray(ToLook[2],GroupNames[2])
-                if DX == DLocal:
-                        GN4 = GroupArray([ToLook[2],ToLook[3]],[GroupNames[2],GroupNames[3]])
-                        GN5 = GroupArray(ToLook[3],GroupNames[3])
-                        GN6 = GroupArray([ToLook[3],ToLook[0]],[GroupNames[3],GroupNames[4]])
-                else :
-                        GN4 = GroupArray(ToLook[2],GroupNames[2])
-                        GN5 = [None,None,None,None]
-                        GN6 = GroupArray(ToLook[0],GroupNames[4])
-                        GN21 = GroupArray([ToLook[3],ToLook[0],ToLook[2]],[GroupNames[3],GroupNames[4],GroupNames[2]])
+def SharpAngleOut (X0 , Y0 , DX , DY , DLocal, LocalMeshing , CornerOrientation , NLevels, **args) :
+    if DLocal == 'auto' : DLocal = float(min(DX,DY))
+
+    BoxSide = DLocal/(2.**(NLevels+1))
+    InternalMeshing = int(math.ceil(BoxSide/(3*LocalMeshing)))
+    InternalMeshing = InternalMeshing+InternalMeshing%2     # An even number is needed, otherwise the objects would not be compatible once created
+    if InternalMeshing == 0 : InternalMeshing = 2           # This sets a minimum meshing condition in order to avoid an error. The user is notified of the value considered for the local meshing
+    print("Possible Local meshing is :", BoxSide/(3*InternalMeshing), "\nThis value is returned by this function for your convenience")
+
+    DirPar =     {'NE' : lambda : ['NE', 'NW', 'SE', 'EW', 'NW', 'SN', 'SN', 'NE', 'WE', 'WE', 'SE', 'NS'],
+                  'NW' : lambda : ['NW', 'NE', 'SW', 'WE', 'NE', 'SN', 'SN', 'NW', 'EW', 'EW', 'SW', 'NS'],
+                  'SE' : lambda : ['SE', 'SW', 'NE', 'EW', 'SW', 'NS', 'NS', 'SE', 'WE', 'WE', 'NE', 'SN'],
+                  'SW' : lambda : ['SW', 'SE', 'NW', 'WE', 'SE', 'NS', 'NS', 'SW', 'EW', 'EW', 'NW', 'SN'], }[CornerOrientation]()
+
+    CoefVer =   {'NE' : lambda :  1,
+                 'NW' : lambda :  1,
+                 'SE' : lambda : -1,
+                 'SW' : lambda : -1, }[CornerOrientation]()
+
+    CoefHor =   {'NE' : lambda :  1,
+                 'NW' : lambda : -1,
+                 'SE' : lambda :  1,
+                 'SW' : lambda : -1, }[CornerOrientation]()
+
+    ToLook  = {'NE' : lambda : [0,2,1,3],
+               'NW' : lambda : [0,3,1,2],
+               'SE' : lambda : [1,2,0,3],
+               'SW' : lambda : [1,3,0,2], }[CornerOrientation]()
+
+    if args.__contains__('groups') :
+        GroupNames = args['groups']
+    else : GroupNames = [None, None, None, None, None, None]
+
+    GN00 = GroupArray(ToLook[0],GroupNames[0])
+    GN01 = GroupArray(ToLook[1],GroupNames[1])
+
+    GN1 = GroupArray([ToLook[0],ToLook[1]],[GroupNames[0],GroupNames[5]])
+    GN7 = GroupArray([ToLook[0],ToLook[1]],[GroupNames[4],GroupNames[1]])
+
+    if DY == DLocal :
+        GN2 = GroupArray([ToLook[1],ToLook[2]],[GroupNames[5],GroupNames[2]])
+        GN3 = GroupArray(ToLook[2],GroupNames[2])
+        if DX == DLocal:
+            GN4 = GroupArray([ToLook[2],ToLook[3]],[GroupNames[2],GroupNames[3]])
+            GN5 = GroupArray(ToLook[3],GroupNames[3])
+            GN6 = GroupArray([ToLook[3],ToLook[0]],[GroupNames[3],GroupNames[4]])
         else :
-                GN2 = GroupArray(ToLook[1],GroupNames[5])
-                GN3 = [None,None,None,None]
-                if DX == DLocal:
-                        GN4 = GroupArray(ToLook[3],GroupNames[3])
-                        GN5 = GroupArray(ToLook[3],GroupNames[3])
-                        GN6 = GroupArray([ToLook[3],ToLook[0]],[GroupNames[3],GroupNames[4]])
-                        GN22 = GroupArray([ToLook[1],ToLook[2],ToLook[3]],[GroupNames[5],GroupNames[2],GroupNames[3]])
-                else :
-                        GN4 = [None,None,None,None]
-                        GN5 = [None,None,None,None]
-                        GN6 = GroupArray(ToLook[0],GroupNames[4])
-                        GN21 = GroupArray([ToLook[3],ToLook[0]],[GroupNames[3],GroupNames[4]])
-                        GN22 = GroupArray([ToLook[1],ToLook[2]],[GroupNames[5],GroupNames[2]])
-                        GN23 = GroupArray([ToLook[2],ToLook[3]],[GroupNames[2],GroupNames[3]])
-                        
-       Obj = []
-
-       Obj.append(MacObject('BoxAng32',[(X0+CoefHor*BoxSide/2,Y0+CoefVer*BoxSide/2),(BoxSide,BoxSide)],[InternalMeshing,DirPar[0]]))
-       Obj.append(MacObject('BoxAng32',[(X0-CoefHor*BoxSide/2,Y0+CoefVer*BoxSide/2),(BoxSide,BoxSide)],['auto',DirPar[1]], groups = GroupArray(ToLook[0],GroupNames[0])))
-       Obj.append(MacObject('BoxAng32',[(X0+CoefHor*BoxSide/2,Y0-CoefVer*BoxSide/2),(BoxSide,BoxSide)],['auto',DirPar[2]], groups = GroupArray(ToLook[1],GroupNames[1])))
-       
-       for N in range (1,NLevels+1):
-               n = N-1
-                if N < NLevels : 
-                      Obj.append(MacObject('Box42',[(X0-CoefHor*BoxSide*(2**n)*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[3]]      , groups = GN00))
-                      Obj.append(MacObject('BoxAng32',[(X0-CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[4]]               ))
-                      Obj.append(MacObject('Box42',[(X0-CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[5]]                    ))
-                      Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[6]]                    ))
-                      Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[7]]               ))
-                      Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[8]]                    ))
-                      Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0-CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[9]]                    ))
-                      Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0-CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[10]]              ))
-                      Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0-CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[11]]     , groups = GN01))
-                else :
-                      Obj.append(MacObject('Box42',[(X0-CoefHor*BoxSide*(2**n)*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[3]]      , groups = GN1))
-                      Obj.append(MacObject('BoxAng32',[(X0-CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[4]] , groups = GN2))
-                      Obj.append(MacObject('Box42',[(X0-CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[5]]      , groups = GN3))
-                      Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[6]]      , groups = GN3))
-                      Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[7]] , groups = GN4))
-                      Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[8]]      , groups = GN5))
-                      Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0-CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[9]]      , groups = GN5))
-                      Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0-CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[10]], groups = GN6))
-                      Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0-CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[11]]     , groups = GN7))
-                       
-       OuterMeshing = (3/2)*InternalMeshing*2**(NLevels-1)
-       OuterSegLength = (DLocal/OuterMeshing)
-
-       if DX > DLocal :
-               dX = DX - DLocal
-               Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX)/2.,Y0),(dX,DLocal)],['auto'], groups = GN21))
-       if DY > DLocal :
-               dY = DY - DLocal
-               if DX > DLocal : 
-                       Obj.append(MacObject('CompBoxF',[(X0+CoefHor*DX/2.,Y0+CoefVer*(DY)/2.),(DX-DLocal,dY)],['auto'], groups = GN23))
-
-               Obj.append(MacObject('CompBoxF',[(X0,Y0+CoefVer*(DY)/2.),(DLocal,dY)],['auto'], groups = GN22))
-               
-       return Obj
-
-def SharpAngleIn (X0 , Y0 , DX , DY , DLocal, LocalMeshing , CornerOrientation , NLevels, **args) : 
-       if DLocal == 'auto' : DLocal = float(min(DX,DY))
-
-       BoxSide = DLocal/(2.**(NLevels))
-       InternalMeshing = int(math.ceil(BoxSide/(3*LocalMeshing)))
-       InternalMeshing = InternalMeshing+InternalMeshing%2     # An even number is needed, otherwise the objects would not be compatible once created
-       if InternalMeshing == 0 : InternalMeshing = 2           # This sets a minimum meshing condition in order to avoid an error. The user is notified of the value considered for the local meshing
-       print "Possible Local meshing is :", BoxSide/(3*InternalMeshing), "\nThis value is returned by this function for your convenience..."
-
-       DirPar =     {'NE' : lambda : ['NE', 'SN', 'NE', 'WE'],
-                     'NW' : lambda : ['NW', 'SN', 'NW', 'EW'],
-                     'SE' : lambda : ['SE', 'NS', 'SE', 'WE'],
-                     'SW' : lambda : ['SW', 'NS', 'SW', 'EW'], }[CornerOrientation]()
-
-       CoefVer =   {'NE' : lambda :  1,
-                    'NW' : lambda :  1,
-                    'SE' : lambda : -1,
-                    'SW' : lambda : -1, }[CornerOrientation]()
-
-       CoefHor =   {'NE' : lambda :  1,
-                    'NW' : lambda : -1,
-                    'SE' : lambda :  1,
-                    'SW' : lambda : -1, }[CornerOrientation]()
-                     
-       ToLook  = {'NE' : lambda : [0,2,1,3],
-                  'NW' : lambda : [0,3,1,2],
-                  'SE' : lambda : [1,2,0,3],
-                  'SW' : lambda : [1,3,0,2], }[CornerOrientation]()
-                                               
-        if args.__contains__('groups') :
-                GroupNames = args['groups']
-       else : GroupNames = [None, None, None, None]
-        
-        GN01 = GroupArray([ToLook[0],ToLook[1]],[GroupNames[ToLook[0]],GroupNames[ToLook[1]]])
-        GN02 = GroupArray(ToLook[1],GroupNames[ToLook[1]])        
-        GN03 = [None, None, None, None]
-        GN04 = GroupArray(ToLook[0],GroupNames[ToLook[0]])  
-
-        if DY == DLocal :
-                GN05 = GroupArray([ToLook[1],ToLook[2]],[GroupNames[ToLook[1]],GroupNames[ToLook[2]]])
-                GN08 = GroupArray([ToLook[0],ToLook[2],ToLook[3]],[GroupNames[ToLook[0]],GroupNames[ToLook[2]],GroupNames[ToLook[3]]])
-                if DX == DLocal:
-                        GN06 = GroupArray([ToLook[2],ToLook[3]],[GroupNames[ToLook[2]],GroupNames[ToLook[3]]])
-                        GN07 = GroupArray([ToLook[0],ToLook[3]],[GroupNames[ToLook[0]],GroupNames[ToLook[3]]])
-                else :
-                        GN06 = GroupArray(ToLook[2],GroupNames[ToLook[2]])
-                        GN07 = GroupArray(ToLook[0],GroupNames[ToLook[0]])
+            GN4 = GroupArray(ToLook[2],GroupNames[2])
+            GN5 = [None,None,None,None]
+            GN6 = GroupArray(ToLook[0],GroupNames[4])
+            GN21 = GroupArray([ToLook[3],ToLook[0],ToLook[2]],[GroupNames[3],GroupNames[4],GroupNames[2]])
+    else :
+        GN2 = GroupArray(ToLook[1],GroupNames[5])
+        GN3 = [None,None,None,None]
+        if DX == DLocal:
+            GN4 = GroupArray(ToLook[3],GroupNames[3])
+            GN5 = GroupArray(ToLook[3],GroupNames[3])
+            GN6 = GroupArray([ToLook[3],ToLook[0]],[GroupNames[3],GroupNames[4]])
+            GN22 = GroupArray([ToLook[1],ToLook[2],ToLook[3]],[GroupNames[5],GroupNames[2],GroupNames[3]])
         else :
-                GN05 = GroupArray(ToLook[1],GroupNames[ToLook[1]])
-                if DX == DLocal : 
-                        GN06 = GroupArray(ToLook[3],GroupNames[ToLook[3]])
-                        GN07 = GroupArray([ToLook[0],ToLook[3]],[GroupNames[ToLook[0]],GroupNames[ToLook[3]]])
-                        GN10 = GroupArray([ToLook[1],ToLook[2],ToLook[3]],[GroupNames[ToLook[1]],GroupNames[ToLook[2]],GroupNames[ToLook[3]]])
-                else :
-                        GN06 = [None, None, None, None]
-                        GN07 = GroupArray(ToLook[0],GroupNames[ToLook[0]])
-                        GN08 = GroupArray([ToLook[0],ToLook[3]],[GroupNames[ToLook[0]],GroupNames[ToLook[3]]])
-                        GN09 = GroupArray([ToLook[2],ToLook[3]],[GroupNames[ToLook[2]],GroupNames[ToLook[3]]])
-                        GN10 = GroupArray([ToLook[1],ToLook[2]],[GroupNames[ToLook[1]],GroupNames[ToLook[2]]])
-         
-       Obj = []
-
-       Obj.append(MacObject('BoxAng32',[(X0+CoefHor*BoxSide/2,Y0+CoefVer*BoxSide/2),(BoxSide,BoxSide)],[InternalMeshing,DirPar[0]],groups = GN01))
-       
-       for N in range (1,NLevels+1):
-               n = N-1
-                if N < NLevels : 
-                       Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[1]],groups = GN02))
-                       Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[2]],groups = GN03))
-                       Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[3]],groups = GN04))
-                else :
-                       Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[1]],groups = GN05))
-                       Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[2]],groups = GN06))
-                       Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[3]],groups = GN07))
-       OuterMeshing = (3/2)*InternalMeshing*2**(NLevels-1)
-       OuterSegLength = (DLocal/OuterMeshing)
-
-       if DX > DLocal :
-               dX = DX - DLocal
-               Obj = Obj + CompositeBox(X0+CoefHor*(DLocal+dX/2.),Y0+CoefVer*(DLocal)/2.,dX,DLocal, groups = GN08)
-       if DY > DLocal :
-               dY = DY - DLocal
-
-               if DX > DLocal : 
-                       Obj = Obj + CompositeBox(X0+CoefHor*(DLocal+(DX-DLocal)/2.),Y0+CoefVer*(DLocal+dY/2.),DX-DLocal,dY, groups = GN09)
-
-               Obj = Obj + CompositeBox(X0+CoefHor*DLocal/2,Y0+CoefVer*(DLocal+dY/2.),DLocal,dY,groups = GN10)
-
-       return Obj
+            GN4 = [None,None,None,None]
+            GN5 = [None,None,None,None]
+            GN6 = GroupArray(ToLook[0],GroupNames[4])
+            GN21 = GroupArray([ToLook[3],ToLook[0]],[GroupNames[3],GroupNames[4]])
+            GN22 = GroupArray([ToLook[1],ToLook[2]],[GroupNames[5],GroupNames[2]])
+            GN23 = GroupArray([ToLook[2],ToLook[3]],[GroupNames[2],GroupNames[3]])
+
+    Obj = []
+
+    Obj.append(MacObject('BoxAng32',[(X0+CoefHor*BoxSide/2,Y0+CoefVer*BoxSide/2),(BoxSide,BoxSide)],[InternalMeshing,DirPar[0]]))
+    Obj.append(MacObject('BoxAng32',[(X0-CoefHor*BoxSide/2,Y0+CoefVer*BoxSide/2),(BoxSide,BoxSide)],['auto',DirPar[1]], groups = GroupArray(ToLook[0],GroupNames[0])))
+    Obj.append(MacObject('BoxAng32',[(X0+CoefHor*BoxSide/2,Y0-CoefVer*BoxSide/2),(BoxSide,BoxSide)],['auto',DirPar[2]], groups = GroupArray(ToLook[1],GroupNames[1])))
+
+    for N in range (1,NLevels+1):
+        n = N-1
+        if N < NLevels :
+            Obj.append(MacObject('Box42',[(X0-CoefHor*BoxSide*(2**n)*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[3]]      , groups = GN00))
+            Obj.append(MacObject('BoxAng32',[(X0-CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[4]]               ))
+            Obj.append(MacObject('Box42',[(X0-CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[5]]                    ))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[6]]                    ))
+            Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[7]]               ))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[8]]                    ))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0-CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[9]]                    ))
+            Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0-CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[10]]              ))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0-CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[11]]     , groups = GN01))
+        else :
+            Obj.append(MacObject('Box42',[(X0-CoefHor*BoxSide*(2**n)*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[3]]      , groups = GN1))
+            Obj.append(MacObject('BoxAng32',[(X0-CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[4]] , groups = GN2))
+            Obj.append(MacObject('Box42',[(X0-CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[5]]      , groups = GN3))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[6]]      , groups = GN3))
+            Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[7]] , groups = GN4))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[8]]      , groups = GN5))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0-CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[9]]      , groups = GN5))
+            Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0-CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[10]], groups = GN6))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0-CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[11]]     , groups = GN7))
+
+    OuterMeshing = (3/2)*InternalMeshing*2**(NLevels-1)
+    OuterSegLength = (DLocal/OuterMeshing)
+
+    if DX > DLocal :
+        dX = DX - DLocal
+        Obj.append(MacObject('CompBoxF',[(X0+CoefHor*(DX)/2.,Y0),(dX,DLocal)],['auto'], groups = GN21))
+    if DY > DLocal :
+        dY = DY - DLocal
+        if DX > DLocal :
+            Obj.append(MacObject('CompBoxF',[(X0+CoefHor*DX/2.,Y0+CoefVer*(DY)/2.),(DX-DLocal,dY)],['auto'], groups = GN23))
+
+        Obj.append(MacObject('CompBoxF',[(X0,Y0+CoefVer*(DY)/2.),(DLocal,dY)],['auto'], groups = GN22))
+
+    return Obj
+
+def SharpAngleIn (X0 , Y0 , DX , DY , DLocal, LocalMeshing , CornerOrientation , NLevels, **args) :
+    if DLocal == 'auto' : DLocal = float(min(DX,DY))
+
+    BoxSide = DLocal/(2.**(NLevels))
+    InternalMeshing = int(math.ceil(BoxSide/(3*LocalMeshing)))
+    InternalMeshing = InternalMeshing+InternalMeshing%2     # An even number is needed, otherwise the objects would not be compatible once created
+    if InternalMeshing == 0 : InternalMeshing = 2           # This sets a minimum meshing condition in order to avoid an error. The user is notified of the value considered for the local meshing
+    print("Possible Local meshing is :", BoxSide/(3*InternalMeshing), "\nThis value is returned by this function for your convenience...")
+
+    DirPar =     {'NE' : lambda : ['NE', 'SN', 'NE', 'WE'],
+                  'NW' : lambda : ['NW', 'SN', 'NW', 'EW'],
+                  'SE' : lambda : ['SE', 'NS', 'SE', 'WE'],
+                  'SW' : lambda : ['SW', 'NS', 'SW', 'EW'], }[CornerOrientation]()
+
+    CoefVer =   {'NE' : lambda :  1,
+                 'NW' : lambda :  1,
+                 'SE' : lambda : -1,
+                 'SW' : lambda : -1, }[CornerOrientation]()
+
+    CoefHor =   {'NE' : lambda :  1,
+                 'NW' : lambda : -1,
+                 'SE' : lambda :  1,
+                 'SW' : lambda : -1, }[CornerOrientation]()
+
+    ToLook  = {'NE' : lambda : [0,2,1,3],
+               'NW' : lambda : [0,3,1,2],
+               'SE' : lambda : [1,2,0,3],
+               'SW' : lambda : [1,3,0,2], }[CornerOrientation]()
+
+    if args.__contains__('groups') :
+        GroupNames = args['groups']
+    else : GroupNames = [None, None, None, None]
+
+    GN01 = GroupArray([ToLook[0],ToLook[1]],[GroupNames[ToLook[0]],GroupNames[ToLook[1]]])
+    GN02 = GroupArray(ToLook[1],GroupNames[ToLook[1]])
+    GN03 = [None, None, None, None]
+    GN04 = GroupArray(ToLook[0],GroupNames[ToLook[0]])
+
+    if DY == DLocal :
+        GN05 = GroupArray([ToLook[1],ToLook[2]],[GroupNames[ToLook[1]],GroupNames[ToLook[2]]])
+        GN08 = GroupArray([ToLook[0],ToLook[2],ToLook[3]],[GroupNames[ToLook[0]],GroupNames[ToLook[2]],GroupNames[ToLook[3]]])
+        if DX == DLocal:
+            GN06 = GroupArray([ToLook[2],ToLook[3]],[GroupNames[ToLook[2]],GroupNames[ToLook[3]]])
+            GN07 = GroupArray([ToLook[0],ToLook[3]],[GroupNames[ToLook[0]],GroupNames[ToLook[3]]])
+        else :
+            GN06 = GroupArray(ToLook[2],GroupNames[ToLook[2]])
+            GN07 = GroupArray(ToLook[0],GroupNames[ToLook[0]])
+    else :
+        GN05 = GroupArray(ToLook[1],GroupNames[ToLook[1]])
+        if DX == DLocal :
+            GN06 = GroupArray(ToLook[3],GroupNames[ToLook[3]])
+            GN07 = GroupArray([ToLook[0],ToLook[3]],[GroupNames[ToLook[0]],GroupNames[ToLook[3]]])
+            GN10 = GroupArray([ToLook[1],ToLook[2],ToLook[3]],[GroupNames[ToLook[1]],GroupNames[ToLook[2]],GroupNames[ToLook[3]]])
+        else :
+            GN06 = [None, None, None, None]
+            GN07 = GroupArray(ToLook[0],GroupNames[ToLook[0]])
+            GN08 = GroupArray([ToLook[0],ToLook[3]],[GroupNames[ToLook[0]],GroupNames[ToLook[3]]])
+            GN09 = GroupArray([ToLook[2],ToLook[3]],[GroupNames[ToLook[2]],GroupNames[ToLook[3]]])
+            GN10 = GroupArray([ToLook[1],ToLook[2]],[GroupNames[ToLook[1]],GroupNames[ToLook[2]]])
+
+    Obj = []
+
+    Obj.append(MacObject('BoxAng32',[(X0+CoefHor*BoxSide/2,Y0+CoefVer*BoxSide/2),(BoxSide,BoxSide)],[InternalMeshing,DirPar[0]],groups = GN01))
+
+    for N in range (1,NLevels+1):
+        n = N-1
+        if N < NLevels :
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[1]],groups = GN02))
+            Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[2]],groups = GN03))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[3]],groups = GN04))
+        else :
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[1]],groups = GN05))
+            Obj.append(MacObject('BoxAng32',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide*3/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[2]],groups = GN06))
+            Obj.append(MacObject('Box42',[(X0+CoefHor*(2**n)*BoxSide*3/2,Y0+CoefVer*(2**n)*BoxSide/2),((2**n)*BoxSide,(2**n)*BoxSide)],['auto',DirPar[3]],groups = GN07))
+
+    OuterMeshing = (3/2)*InternalMeshing*2**(NLevels-1)
+    OuterSegLength = (DLocal/OuterMeshing)
+
+    if DX > DLocal :
+        dX = DX - DLocal
+        Obj = Obj + CompositeBox(X0+CoefHor*(DLocal+dX/2.),Y0+CoefVer*(DLocal)/2.,dX,DLocal, groups = GN08)
+    if DY > DLocal :
+        dY = DY - DLocal
+
+        if DX > DLocal :
+            Obj = Obj + CompositeBox(X0+CoefHor*(DLocal+(DX-DLocal)/2.),Y0+CoefVer*(DLocal+dY/2.),DX-DLocal,dY, groups = GN09)
+
+        Obj = Obj + CompositeBox(X0+CoefHor*DLocal/2,Y0+CoefVer*(DLocal+dY/2.),DLocal,dY,groups = GN10)
+
+    return Obj
 
 def GroupArray(indices, GroupNames) :
-        if type(indices) is int : 
-                indices = [indices]
-                GroupNames = [GroupNames]
-        Output = [None,None,None,None]
-        for i, ind in enumerate(indices) : 
-                Output[ind] = GroupNames[i]
-        return Output
+    if isinstance(indices, int) :
+        indices = [indices]
+        GroupNames = [GroupNames]
+    Output = [None,None,None,None]
+    for i, ind in enumerate(indices) :
+        Output[ind] = GroupNames[i]
+    return Output
index c5abe768acb477e58d2a1bd835d11b71f7347623..9af5a33778090bf1a235a2b3cf82610fdb0a8b26 100644 (file)
@@ -21,9 +21,8 @@
 # if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
 
 def MeshCut(context):
-  # get context study, studyId, salomeGui
+  # get context study, salomeGui
   study = context.study
-  studyId = context.studyId
   sg = context.sg
   
   import os
@@ -50,7 +49,7 @@ def MeshCut(context):
       if fd.exec_():
         infile = fd.selectedFiles()[0]
         self.ui.le_origMeshFile.setText(infile)
-        insplit = os.path.splitext(unicode(infile).encode())
+        insplit = os.path.splitext(str(infile).encode())
         outfile = insplit[0] + '_cut' + insplit[1]
         self.ui.le_cutMeshFile.setText(outfile)
       pass
@@ -97,11 +96,11 @@ and T the tolerance.
     if result:
       # dialog accepted
       args = ['MeshCut']
-      args += [unicode(window.ui.le_origMeshFile.text()).encode()]
-      args += [unicode(window.ui.le_cutMeshFile.text()).encode()]
-      args += [unicode(window.ui.le_outMeshName.text()).encode()]
-      args += [unicode(window.ui.le_groupAbove.text()).encode()]
-      args += [unicode(window.ui.le_groupBelow.text()).encode()]
+      args += [str(window.ui.le_origMeshFile.text()).encode()]
+      args += [str(window.ui.le_cutMeshFile.text()).encode()]
+      args += [str(window.ui.le_outMeshName.text()).encode()]
+      args += [str(window.ui.le_groupAbove.text()).encode()]
+      args += [str(window.ui.le_groupBelow.text()).encode()]
       args += [str(window.ui.dsb_normX.value())]
       args += [str(window.ui.dsb_normY.value())]
       args += [str(window.ui.dsb_normZ.value())]
index 8940e06f14131ff5479d3760d3402e59188c3a5d..a67caf4b32666e2683e454ad5df567b7fcd0d4f7 100644 (file)
@@ -1,22 +1,20 @@
-# -*- coding: utf-8 -*-
-
 import os
 import datetime
 import sys
 
-from qtsalome import QSqlQuery
-from tableMaillages  import TableMaillages
-from tableMailleurs  import TableMailleurs
-from tableMachines   import TableMachines
-from tableVersions   import TableVersions
-from tableGroupesRef import TableGroupesRef
-from tableGroupes    import TableGroupes
-from tableMailles    import TableMailles
-from tableTailles    import TableTailles
-from tableRatios     import TableRatios
-from tableGroupeRatios     import TableGroupeRatios
-from tableGroupeTailles    import TableGroupeTailles
-from tablePerfs      import TablePerfs
+from qtsalome import QSqlQuery, QSqlDatabase
+from Base.tableMaillages  import TableMaillages
+from Base.tableMailleurs  import TableMailleurs
+from Base.tableMachines   import TableMachines
+from Base.tableVersions   import TableVersions
+from Base.tableGroupesRef import TableGroupesRef
+from Base.tableGroupes    import TableGroupes
+from Base.tableMailles    import TableMailles
+from Base.tableTailles    import TableTailles
+from Base.tableRatios     import TableRatios
+from Base.tableGroupeRatios     import TableGroupeRatios
+from Base.tableGroupeTailles    import TableGroupeTailles
+from Base.tablePerfs      import TablePerfs
 from Stats.job       import Job
 from CreeDocuments.jobHtml       import Document
 
@@ -29,9 +27,9 @@ class Base:
        self.db.setUserName("");
        self.db.setPassword("")
        if not self.db.open():
-         print(self.db.lastError().text())
+         print((self.db.lastError().text()))
        else:
-         print "dataBase Open"
+         print("dataBase Open")
        self.file=file
         
   def create(self):
@@ -135,28 +133,28 @@ class Base:
       bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
       if bOk==False:
          self.maTableVersions.creeVersion(version)
-         print "nouvelle Version enregistree dans la base"
+         print("nouvelle Version enregistree dans la base")
          bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
          if bOk==False:
-            print "Impossible de creer la version"
+            print("Impossible de creer la version")
             return
 
       bOk,nomMachine = self.maTableMachines.chercheMachine()
       if bOk==False:
          self.maTableMachines.creeMachine()
-         print "enregistrement de la machine dans la table des machines"
+         print("enregistrement de la machine dans la table des machines")
          bOk,nomMachine = self.maTableMachines.chercheMachine()
          if bOk==False:
-            print "Impossible de creer la version"
+            print("Impossible de creer la version")
             return
 
 
       for params in paramMaillage:
         
-         print "___________________________________________"
-         print ""
-         print " Job : ", params[1]
-         print " Version de salome : ", versionName 
+         print("___________________________________________")
+         print("")
+         print(" Job : ", params[1])
+         print(" Version de salome : ", versionName) 
 
 
          idJob=params[0]
@@ -166,8 +164,8 @@ class Base:
          if mesGroupesRef != [] :
            writeFile(fichierGroupesRef,",".join(mesGroupesRef))
          monjob=Job(params,salomePath,versionId,mesGroupesRef)
-         print ""
-         print "  Debut d execution"
+         print("")
+         print("  Debut d execution")
          monjob.execute()
       
          # remplit Perfs
@@ -217,14 +215,14 @@ class Base:
 
   
   def compare(self,version,ListeVersionRefString,fichier):    
-      print "_________________________________________________________________"
-      print "Generation du rapport de comparaison" 
-      print version
+      print("_________________________________________________________________")
+      print("Generation du rapport de comparaison") 
+      print(version)
       bOk,versionId,versionName = self.maTableVersions.chercheVersion(version)
       if bOk==False :
-         print "version ", version , " inconnue dans la base"
+         print("version ", version , " inconnue dans la base")
          exit()
-      print "Version a comparer : ", versionName
+      print("Version a comparer : ", versionName)
       versionCompName=versionName
       versionCompId=versionId
 
@@ -234,7 +232,7 @@ class Base:
       for id in ListeVersionRef:
           bOk,versionId,versionName = self.maTableVersions.chercheVersion(id)
           if bOk==False :
-             print "version ", id , " inconnue dans la base"
+             print("version ", id , " inconnue dans la base")
              exit()
           listeVersionRefId.append(versionId)
           listeVersionRefName.append(versionName)
@@ -245,7 +243,7 @@ class Base:
 
       maillagesIdListe, maillagesNameListe=self.maTableMaillages.getTous()
       if len(maillagesIdListe) != len (listeVersionRefId):
-         print "Pas assez de version de reference"
+         print("Pas assez de version de reference")
          exit()
       
       allEntitySurMaille=self.maTableMailles.getAllEntity()
@@ -253,7 +251,7 @@ class Base:
 
       # Boucle sur les maillages
       for idMaillage in maillagesIdListe :
-          print idMaillage
+          print(idMaillage)
           versionRefId=listeVersionRefId[idMaillage - 1]
           versionRefName=listeVersionRefName[idMaillage - 1]
           mailleurId=self.maTableMaillages.getMailleurId(idMaillage)
index 783e7ac7481c2ce301bac63870577df18aa78957..b304aeecf6fa3c53fc322068264f1082551658bb 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 import sys,os
 
@@ -6,17 +6,17 @@ pathRacine=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__
 if os.path.dirname(pathRacine) not in sys.path :
    sys.path.insert(0,pathRacine)
 
-from dataBase import Base
+from .dataBase import Base
 
 if __name__ == "__main__":
-      from optparse import OptionParser
-      p=OptionParser()
-      p.add_option('-p',dest='partiel',action="store_true", default=False,help='export de machine, groupe, ratio Maille et Perf uniquement')
-      p.add_option('-d',dest='database',default="../myMesh.db",help='nom de la database')
-      options, args = p.parse_args()
+      from argparse import ArgumentParser
+      p=ArgumentParser()
+      p.add_argument('-p',dest='partiel',action="store_true", default=False,help='export de machine, groupe, ratio Maille et Perf uniquement')
+      p.add_argument('-d',dest='database',default="../myMesh.db",help='nom de la database')
+      args = p.parse_args()
 
-      maBase=Base(options.database)
+      maBase=Base(args.database)
       maBase.initialise()
-      maBase.exportToCSV(options.partiel)
+      maBase.exportToCSV(args.partiel)
       maBase.close()
 
index afc3503fa7ca995448f3c64544e3e38ab06e0c83..099689c8ff094abdc6a80595a84f76cf36a146e8 100755 (executable)
@@ -1,31 +1,24 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
+#!/usr/bin/env python3
 
-import sys
 import os
 from dataBase import Base
 
 
-
 if __name__ == "__main__":
-      from optparse import OptionParser
-      p=OptionParser()
-      p.add_option('-p',dest='partiel',action="store_true", default=False,help='import de machine, groupe, ratio Maille et Perf uniquement')
-      p.add_option('-f',dest='force',action="store_true", default=False,help='ecrasement des valeurs dans la base par les valeurs dans les fichiers en cas de meme clef primaire')
-      p.add_option('-d',dest='database',default="myMesh.db",help='nom de la database')
-      options, args = p.parse_args()
-      if len(args) != 1 : 
-        print "entrer SVP le nom de la directory ou sont rangees les fichiers a charger"
-         exit()
-      folder=args[0]
-
-      if not(os.path.isdir(folder)):
-         print folder , " n existe pas"
-         exit()
+    from argparse import ArgumentParser
+    p=ArgumentParser()
+    p.add_argument('-p',dest='partiel',action="store_true", default=False,help='import de machine, groupe, ratio Maille et Perf uniquement')
+    p.add_argument('-f',dest='force',action="store_true", default=False,help='ecrasement des valeurs dans la base par les valeurs dans les fichiers en cas de meme clef primaire')
+    p.add_argument('-d',dest='database',default="myMesh.db",help='nom de la database')
+    p.add_argument('folder', help='Repertoire ou sont ranges les fichiers a charger')
+    args = p.parse_args()
 
-      maBase=Base(options.database)
-      maBase.create()
-      maBase.initialise()
-      maBase.importFromCSV(folder,options.partiel,options.force)
-      maBase.close()
+    if not(os.path.isdir(args.folder)):
+        print(args.folder , " n existe pas")
+        exit()
 
+    maBase=Base(args.database)
+    maBase.create()
+    maBase.initialise()
+    maBase.importFromCSV(args.folder,args.partiel,args.force)
+    maBase.close()
index 9b4b1b7e2ab2862d9f3dc8ae90add4ea21b90864..277ac2a40ac335af5b5160d00dd429b6c0bbced0 100644 (file)
@@ -2,114 +2,112 @@ from qtsalome import QSqlQuery
 import datetime
 
 class TableDeBase :
-       def __init__(self,nom):
-         self.nom=nom
-
-        def setField(self,FieldStringList):
-          self.FieldStringList=FieldStringList
-          self.idName=FieldStringList[0]
-       
-        def setTypeField(self,FieldTypeListe,clef):
-          self.FieldTypeListe = FieldTypeListe
-          self.clef=clef
-
-        def getFields(self):
-          return self.FieldStringList
-    
-        def insereLigne(self,valeurs,debug=False):
-          if self.verifieExitenceId(valeurs[0])!=0 :
-            print "impossible d inserer " , valeurs, "dans ", self.nom
-            print "l id est deja existant"
-             return False
-          texteQuery='insert into ' + self.nom + " values "+ str(valeurs)+ ';'
-          maQuery=QSqlQuery()
-          if debug : print texteQuery, " " , maQuery.exec_(texteQuery)
-          else     : maQuery.exec_(texteQuery)
-
-        def insereLigneAutoId(self,valeurs,debug=False):
-          texteQuery='insert into ' + self.nom + self.cols+ " values "+ str(valeurs)+ ';'
-          maQuery=QSqlQuery()
-          if debug : print texteQuery, " " , maQuery.exec_(texteQuery)
-          else     : maQuery.exec_(texteQuery)
-
-        def insereOuRemplaceLigne(self,valeurs,debug=False):
-          texteQuery='insert or replace into ' + self.nom + " values "+ str(valeurs)+ ';'
-          maQuery=QSqlQuery()
-          if debug : print texteQuery, " " , maQuery.exec_(texteQuery)
-          else     : maQuery.exec_(texteQuery)
-
-
-        def verifieExitenceId(self,valeur):
+    def __init__(self,nom):
+        self.nom=nom
+
+    def setField(self,FieldStringList):
+        self.FieldStringList=FieldStringList
+        self.idName=FieldStringList[0]
+
+    def setTypeField(self,FieldTypeListe,clef):
+        self.FieldTypeListe = FieldTypeListe
+        self.clef=clef
+
+    def getFields(self):
+        return self.FieldStringList
+
+    def insereLigne(self,valeurs,debug=False):
+        if self.verifieExitenceId(valeurs[0])!=0 :
+            print("impossible d inserer " , valeurs, "dans ", self.nom)
+            print("l id est deja existant")
+            return False
+        texteQuery='insert into ' + self.nom + " values "+ str(valeurs)+ ';'
+        maQuery=QSqlQuery()
+        if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
+        else     : maQuery.exec_(texteQuery)
+
+    def insereLigneAutoId(self,valeurs,debug=False):
+        texteQuery='insert into ' + self.nom + self.cols+ " values "+ str(valeurs)+ ';'
+        maQuery=QSqlQuery()
+        if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
+        else     : maQuery.exec_(texteQuery)
+
+    def insereOuRemplaceLigne(self,valeurs,debug=False):
+        texteQuery='insert or replace into ' + self.nom + " values "+ str(valeurs)+ ';'
+        maQuery=QSqlQuery()
+        if debug : print(texteQuery, " " , maQuery.exec_(texteQuery))
+        else     : maQuery.exec_(texteQuery)
+
+
+    def verifieExitenceId(self,valeur):
 # ne fonctionne pas correctement, il faudrait se servir de la clef
-           texteQuery= "select * from " + self.nom + " where "+ self.idName+'='+str(valeur) +';'
-           maQuery=QSqlQuery()
-           maQuery.exec_(texteQuery)
-           nb=0
-           while(maQuery.next()): nb=nb+1
-           return nb
+        texteQuery= "select * from " + self.nom + " where "+ self.idName+'='+str(valeur) +';'
+        maQuery=QSqlQuery()
+        maQuery.exec_(texteQuery)
+        nb=0
+        while(maQuery.next()): nb=nb+1
+        return nb
 
 
-        def remplit(self):
-            print "Pas de remplissage sauf si cette methode est surchargee"
+    def remplit(self):
+        print("Pas de remplissage sauf si cette methode est surchargee")
 
-        def createSqlTable(self):
-            print "Pas de creation par defaut : cette methode doit etre surchargee"
+    def createSqlTable(self):
+        print("Pas de creation par defaut : cette methode doit etre surchargee")
 
 # On ne se sert pas du csv python entre autre parcequ'il ne gere pas les entetes
-        def exportToCSV(self):
-           aujourdhui=datetime.date.today()
-           monFolder="ExportDB"+str(aujourdhui)
-           monFichier=monFolder+"/Sauve_"+str(self.nom)+'.csv'
-           texteQuery= "select * from " + self.nom +';'
-           texteSauve=""
-           for col in self.FieldStringList:
-               texteSauve+=col+";"
-           texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
-           texteSauve+="\n"
-         
-           maQuery=QSqlQuery()
-           maQuery.exec_(texteQuery)
-           asauver=0
-           while(maQuery.next()):
-              asauver=1
-              for i in range(len(self.FieldStringList)):
-                  texteSauve+=str(maQuery.value(i).toString())+";"
-              texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
-              texteSauve+="\n"
-           
-           if asauver == 0 :
-              print "pas de sauvegarde de : " , self.nom , " table vide"
-              return
-
-           from Stats.utiles import writeFile
-           Bok=writeFile(monFichier,texteSauve)
-           if Bok :
-              print "sauvegarde de : " , self.nom , " effectuee "
-           else :
-              print "pas de sauvegarde de : " , self.nom , " IOerror"
-
-        def importFromCSV(self,folder,force):
-           monFichier=folder+"/Sauve_"+str(self.nom)+'.csv'
-           try :
-             f=open(monFichier,'r')
-           except:
-             print "Pas de chargement de la table ", self.nom
-             print "Impossible d'ouvrir le fichier ", monFichier
-             return 0
-           lignes=f.readlines()
-           enTete=tuple(lignes[0][0:-1].split(";"))
-           if enTete!=self.FieldStringList:
-             print "Pas de chargement de la table ", self.nom
-             print "les entetes ne correspondent pas"
-             return 0
-           for StrVal in lignes[1:]:
-               listeVal=tuple(StrVal[0:-1].split(";"))
-               listeValTypee=[]
-               for i in range(len(listeVal)):
-                   if self.FieldTypeListe[i]=='int'  : listeValTypee.append(int(listeVal[i]))
-                   if self.FieldTypeListe[i]=='float': listeValTypee.append(float(listeVal[i]))
-                   if self.FieldTypeListe[i]=='str'  : listeValTypee.append(listeVal[i])
-               if force==1 : self.insereOuRemplaceLigne(tuple(listeValTypee))
-               if force==0 : self.insereLigne(tuple(listeValTypee))
-
-          
+    def exportToCSV(self):
+        aujourdhui=datetime.date.today()
+        monFolder="ExportDB"+str(aujourdhui)
+        monFichier=monFolder+"/Sauve_"+str(self.nom)+'.csv'
+        texteQuery= "select * from " + self.nom +';'
+        texteSauve=""
+        for col in self.FieldStringList:
+            texteSauve+=col+";"
+        texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
+        texteSauve+="\n"
+
+        maQuery=QSqlQuery()
+        maQuery.exec_(texteQuery)
+        asauver=0
+        while(maQuery.next()):
+            asauver=1
+            for i in range(len(self.FieldStringList)):
+                texteSauve+=str(maQuery.value(i).toString())+";"
+            texteSauve=texteSauve[0:-1] # on enleve le dernier ";"
+            texteSauve+="\n"
+
+        if asauver == 0 :
+            print("pas de sauvegarde de : " , self.nom , " table vide")
+            return
+
+        from Stats.utiles import writeFile
+        Bok=writeFile(monFichier,texteSauve)
+        if Bok :
+            print("sauvegarde de : " , self.nom , " effectuee ")
+        else :
+            print("pas de sauvegarde de : " , self.nom , " IOerror")
+
+    def importFromCSV(self,folder,force):
+        monFichier=folder+"/Sauve_"+str(self.nom)+'.csv'
+        try :
+            f=open(monFichier,'r')
+        except:
+            print("Pas de chargement de la table ", self.nom)
+            print("Impossible d'ouvrir le fichier ", monFichier)
+            return 0
+        lignes=f.readlines()
+        enTete=tuple(lignes[0][0:-1].split(";"))
+        if enTete!=self.FieldStringList:
+            print("Pas de chargement de la table ", self.nom)
+            print("les entetes ne correspondent pas")
+            return 0
+        for StrVal in lignes[1:]:
+            listeVal=tuple(StrVal[0:-1].split(";"))
+            listeValTypee=[]
+            for i in range(len(listeVal)):
+                if self.FieldTypeListe[i]=='int'  : listeValTypee.append(int(listeVal[i]))
+                if self.FieldTypeListe[i]=='float': listeValTypee.append(float(listeVal[i]))
+                if self.FieldTypeListe[i]=='str'  : listeValTypee.append(listeVal[i])
+            if force==1 : self.insereOuRemplaceLigne(tuple(listeValTypee))
+            if force==0 : self.insereLigne(tuple(listeValTypee))
index 707fff8ae439be54749e95ead7b2dce82b19adb0..17bbefa1117a97af2e09c4bbf4bbbc693df57a4a 100644 (file)
@@ -1,5 +1,5 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableGroupeRatios (TableDeBase):
       def __init__(self):
@@ -20,7 +20,7 @@ class TableGroupeRatios (TableDeBase):
           texteQuery+="foreign key (idVersion) references Versions(id)," 
           texteQuery+="foreign key (Groupe) references GroupesRef(nomGroupe)," 
           texteQuery+="primary key (idMaillage,idVersion,Groupe));"
-          print "Creation de TableGroupeRatios : " , query.exec_(texteQuery)
+          print("Creation de TableGroupeRatios : " , query.exec_(texteQuery))
 
       def getVal(self,idMaillage, idVersion, Groupe, Entite):
           query=QSqlQuery()
@@ -33,6 +33,6 @@ class TableGroupeRatios (TableDeBase):
           while (query.next()) :
               val=query.value(0).toFloat()[0]
               nb=nb+1
-          if nb > 1 : print "Double valeur de Reference dans la table des mailles"
+          if nb > 1 : print("Double valeur de Reference dans la table des mailles")
           return val
 
index 6f37bd70d51475081b8836f9dac75a080979e50a..d88bf25587b147d8b23dd745bfa521c27e7d3c0e 100644 (file)
@@ -1,5 +1,5 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableGroupeTailles (TableDeBase):
       def __init__(self):
@@ -21,7 +21,7 @@ class TableGroupeTailles (TableDeBase):
           texteQuery+="foreign key (Groupe) references GroupesRef(nomGroupe),"
           texteQuery+="primary key (idMaillage,idVersion,Groupe));"
 
-          print "Creation de TableGroupeTailles : " , query.exec_(texteQuery)
+          print("Creation de TableGroupeTailles : " , query.exec_(texteQuery))
 
       def getVal(self,idMaillage, idVersion, Groupe,  Entite):
           query=QSqlQuery()
@@ -34,6 +34,6 @@ class TableGroupeTailles (TableDeBase):
           while (query.next()) :
               val=query.value(0).toFloat()[0]
               nb=nb+1
-          if nb > 1 : print "Double valeur de Reference dans la table des tailles"
+          if nb > 1 : print("Double valeur de Reference dans la table des tailles")
           return val
 
index a217909a944d33ad1fac8e8a9d0df2bdd63a6a27..111a2ed55dadb3d37a1a23169ec0114f9bae90bb 100644 (file)
@@ -1,5 +1,5 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableGroupes (TableDeBase):
       def __init__(self):
@@ -18,7 +18,7 @@ class TableGroupes (TableDeBase):
           texteQuery+="foreign key (idVersion) references Versions(id)," 
           texteQuery+="primary key (nomGroupe,idMaillage,idVersion,Entite));"
 
-          print "Creation de TableGroupes : ", query.exec_(texteQuery)
+          print("Creation de TableGroupes : ", query.exec_(texteQuery))
 
 
       def getVal(self,nomGroupe,idMaillage,idVersion,typeMaille):
@@ -32,7 +32,7 @@ class TableGroupes (TableDeBase):
           while (query.next()) :
               val=query.value(0).toInt()[0]
           while (query.next()) :
-              print "plusieurs enregistrements dans groupe pour ", nomGroupe," ",str(idMaillage)," ",str(idVersion),"\n"
+              print("plusieurs enregistrements dans groupe pour ", nomGroupe," ",str(idMaillage)," ",str(idVersion),"\n")
           return val
 
 
index 3a0bfedfffd9e74d87e416a7ec2f8202dce708ff..6c97a8a3b22f689f44903a08324b4d5669af3590 100644 (file)
@@ -1,31 +1,31 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableGroupesRef (TableDeBase):
-       def __init__(self):
-            TableDeBase.__init__(self,"GroupesRef")
-            self.setField(("nomGroupe","idMaillage"))
-            self.setTypeField(('str','int'),('nomGroupe'))
+    def __init__(self):
+        TableDeBase.__init__(self,"GroupesRef")
+        self.setField(("nomGroupe","idMaillage"))
+        self.setTypeField(('str','int'),('nomGroupe'))
 
-        def createSqlTable(self):
-            query=QSqlQuery()
-            texteQuery ="create table GroupesRef(nomGroupe varchar(40), idMaillage int,"
-            texteQuery+="foreign key (idMaillage) references Maillages(idMaillage),"
-            texteQuery+="primary key (nomGroupe,idMaillage));"
-            print "Creation de TableGroupesRef : " , query.exec_(texteQuery)
+    def createSqlTable(self):
+        query=QSqlQuery()
+        texteQuery ="create table GroupesRef(nomGroupe varchar(40), idMaillage int,"
+        texteQuery+="foreign key (idMaillage) references Maillages(idMaillage),"
+        texteQuery+="primary key (nomGroupe,idMaillage));"
+        print("Creation de TableGroupesRef : " , query.exec_(texteQuery))
 
-        def getVals(self,idMaillage):
-            query=QSqlQuery()
-            texteQuery ='select NomGroupe from GroupesRef where idMaillage='+str(idMaillage) +";"
-            listeGroupes=[]
-            query.exec_(texteQuery)
-            while (query.next()) :
-               listeGroupes.append(str(query.value(0).toString()))
-            return listeGroupes
+    def getVals(self,idMaillage):
+        query=QSqlQuery()
+        texteQuery ='select NomGroupe from GroupesRef where idMaillage='+str(idMaillage) +";"
+        listeGroupes=[]
+        query.exec_(texteQuery)
+        while (query.next()) :
+            listeGroupes.append(str(query.value(0).toString()))
+        return listeGroupes
 
 
 #        def remplit(self):
-            
+
 # Groupe pour le script du tunnel (fiche 7566)
 #            self.insereLigne(('FRONT_07',1))
 #            self.insereLigne(('FOND_07',1))
index f68927eac77bea157ee71e39c765bdc20d830e8e..45a86a2f178aa9c16ad09b577b477c34919ae0fc 100644 (file)
@@ -1,31 +1,30 @@
-from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
 import os
+from qtsalome import QSqlQuery
+from Base.tableDeBase import TableDeBase
 
 class TableMachines (TableDeBase):
-       def __init__(self):
-            TableDeBase.__init__(self,"Machines")
-            self.setField(("nomMachine","Os"))
-            self.setTypeField(('str','str'),('nomMachine'))
-
-        def createSqlTable(self):
-            query=QSqlQuery()
-            print "creation de TableMachine : ", query.exec_("create table Machines(  nomMachine varchar(10) primary key, os varchar(10));")
+    def __init__(self):
+        TableDeBase.__init__(self,"Machines")
+        self.setField(("nomMachine","Os"))
+        self.setTypeField(('str','str'),('nomMachine'))
 
-        def creeMachine(self):
-            nomMachine=os.uname()[1]
-            nomOs=os.uname()[2]
-            self.insereLigne((nomMachine,nomOs))
+    def createSqlTable(self):
+        query=QSqlQuery()
+        print("creation de TableMachine : ", query.exec_("create table Machines(  nomMachine varchar(10) primary key, os varchar(10));"))
 
-        def chercheMachine(self):
-            query=QSqlQuery()
-            machine=os.uname()[1]
-            texteQuery ="select nomMachine from Machines where nomMachine ='" + machine +"' ;"
-            query.exec_(texteQuery)
-            nb=0
-            while(query.next()):
-               nb=nb+1
-               nom=str(query.value(0).toString())
-            if nb != 1 : return 0,  ""
-            return  1,  nom
+    def creeMachine(self):
+        nomMachine=os.uname()[1]
+        nomOs=os.uname()[2]
+        self.insereLigne((nomMachine,nomOs))
 
+    def chercheMachine(self):
+        query=QSqlQuery()
+        machine=os.uname()[1]
+        texteQuery ="select nomMachine from Machines where nomMachine ='" + machine +"' ;"
+        query.exec_(texteQuery)
+        nb=0
+        while(query.next()):
+            nb=nb+1
+            nom=str(query.value(0).toString())
+        if nb != 1 : return 0,  ""
+        return  1,  nom
index 8dd5d8705073280e9bff2d541f6a89e0fd0e79d6..fb0146ea741fec41bd1ccdd99835388acdfbba9b 100644 (file)
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableMaillages (TableDeBase):
-       def __init__(self):
-            TableDeBase.__init__(self,"Maillages")
-            self.setField(("id","nomMaillage","Script","fichier","idMailleur","Dimension","Seuil CPU","Seuil Ratio","Seuil Taille","Seuil Nb Maille","Commentaire"))
-            self.cols="(nomMaillage,nomScript,medResultat,idMailleur,dimension,seuilCPU,seuilRatio,seuilTaille,seuilNbMaille,commentaire)"
-            self.setTypeField(('int','str','str','str','int','int','int','int','int','int','str'),('id'))
+    def __init__(self):
+        TableDeBase.__init__(self,"Maillages")
+        self.setField(("id","nomMaillage","Script","fichier","idMailleur","Dimension","Seuil CPU","Seuil Ratio","Seuil Taille","Seuil Nb Maille","Commentaire"))
+        self.cols="(nomMaillage,nomScript,medResultat,idMailleur,dimension,seuilCPU,seuilRatio,seuilTaille,seuilNbMaille,commentaire)"
+        self.setTypeField(('int','str','str','str','int','int','int','int','int','int','str'),('id'))
 
-        def createSqlTable(self):
-            query=QSqlQuery()
-            texteQuery ="create table Maillages(id integer primary key autoincrement, nomMaillage varchar(10), "
-            texteQuery+="nomScript varchar(40), medResultat varchar(15), idMailleur int, dimension int,"
-            texteQuery+="seuilCPU int, seuilRatio int, seuilTaille int, seuilNbMaille int, commentaire varchar(60), "
-            texteQuery+="foreign key (idMailleur) references Mailleur(id));"
-            print "creation de TableMaillages : " , query.exec_(texteQuery)
+    def createSqlTable(self):
+        query=QSqlQuery()
+        texteQuery ="create table Maillages(id integer primary key autoincrement, nomMaillage varchar(10), "
+        texteQuery+="nomScript varchar(40), medResultat varchar(15), idMailleur int, dimension int,"
+        texteQuery+="seuilCPU int, seuilRatio int, seuilTaille int, seuilNbMaille int, commentaire varchar(60), "
+        texteQuery+="foreign key (idMailleur) references Mailleur(id));"
+        print("creation de TableMaillages : " , query.exec_(texteQuery))
 
-        def getVal(self,idMaillage, nomChamp):
-            query=QSqlQuery()
-            valeur=None
-            texteQuery ='select '+ nomChamp + ' from Maillages  where id=' + str(idMaillage) + ";"
-            query.exec_(texteQuery)
-            while (query.next()) :
-              valeur=query.value(0).toInt()[0]
-            while (query.next()) :
-              print "plusieurs enregistrements dans Maillages pour ",str(idMaillage)
-              exit()
-            return valeur
+    def getVal(self,idMaillage, nomChamp):
+        query=QSqlQuery()
+        valeur=None
+        texteQuery ='select '+ nomChamp + ' from Maillages  where id=' + str(idMaillage) + ";"
+        query.exec_(texteQuery)
+        while (query.next()) :
+            valeur=query.value(0).toInt()[0]
+        while (query.next()) :
+            print("plusieurs enregistrements dans Maillages pour ",str(idMaillage))
+            exit()
+        return valeur
 
-        def dejaRemplie(self):
-            texteQuery="select * from  Maillages where medResultat='/tmp/tetra.med';"
-            maQuery=QSqlQuery()
-            maQuery.exec_(texteQuery)
-            nb=0
-            while(maQuery.next()): nb=nb+1
-            return nb
+    def dejaRemplie(self):
+        texteQuery="select * from  Maillages where medResultat='/tmp/tetra.med';"
+        maQuery=QSqlQuery()
+        maQuery.exec_(texteQuery)
+        nb=0
+        while(maQuery.next()): nb=nb+1
+        return nb
 
-        def remplit(self):
-            if self.dejaRemplie():
-               print "table Maillage deja initialisee"
-               return
+    def remplit(self):
+        if self.dejaRemplie():
+            print("table Maillage deja initialisee")
+            return
 #            self.insereLigneAutoId(('Fiche_7566_TUNNEL', '/home/H77945/CAS_TEST/MAILLEUR/FICHE_7566_TUNNEL/Fiche_7566_TUNNEL.py', '/tmp/Fiche_7566_TUNNEL.med', 3,3,10,10,10,10, 'Maillage d un tunnel'))
 #            self.insereLigneAutoId(('Fiche_7957_AILETTE', '/home/H77945/CAS_TEST/MAILLEUR/FICHE_7957_AILETTE/Fiche_7957_AILETTE.py', '/tmp/Fiche_7957_AILETTE.med', 1,2,10,10,10,10, 'Maillage d une attache d aillette'))
-        
-        def construitListeMaillages(self):
-            maQuery=QSqlQuery()
-            texteQuery="select id, nomScript,medResultat from Maillages;"
-            maQuery.exec_(texteQuery)
-            listeMaillages=[]
-            while(maQuery.next()):
-                listeMaillages.append((maQuery.value(0).toInt()[0], maQuery.value(1).toString(), maQuery.value(2).toString()))
-            return listeMaillages
-           
-        def verifieListeMaillages(self,listeMaillage):
-            newListeMaillages=[]
-            maQuery=QSqlQuery()
-            for idM in listeMaillage:
-                texteQuery="select id, nomScript,medResultat from Maillages where id = " + str(idM) +';'
-                maQuery.exec_(texteQuery)
-                maSize=0
-                while(maQuery.next()):
-                    maSize+=1
-                    newListeMaillages.append((maQuery.value(0).toInt()[0], maQuery.value(1).toString(), maQuery.value(2).toString()))
-                if maSize != 1 :
-                   print "impossible de traiter le maillage : ", idM
-            return  newListeMaillages
 
-        def getSeuilsPourMaillage(self,idMaillage):
-            texteQuery="select id,nomMaillage,seuilCPU,seuilRatio,seuilTaille,seuilNbMaille from  Maillages where id = "+ str(idMaillage) +"  ;"
-            maQuery=QSqlQuery()
-            maQuery.exec_(texteQuery)
-            while(maQuery.next()): 
-                 l1 = maQuery.value(0).toInt()[0]
-                 l2 = maQuery.value(1).toString()
-                 l3 = maQuery.value(2).toInt()[0]
-                 l4 = maQuery.value(3).toInt()[0]
-                 l5 = maQuery.value(4).toInt()[0]
-                 l6 = maQuery.value(5).toInt()[0]
-            return l1,l2,l3,l4,l5,l6
+    def construitListeMaillages(self):
+        maQuery=QSqlQuery()
+        texteQuery="select id, nomScript,medResultat from Maillages;"
+        maQuery.exec_(texteQuery)
+        listeMaillages=[]
+        while(maQuery.next()):
+            listeMaillages.append((maQuery.value(0).toInt()[0], maQuery.value(1).toString(), maQuery.value(2).toString()))
+        return listeMaillages
 
-        def getTous(self):
-            maillagesIdListe=[]; maillagesNomListe=[]
-            texteQuery="select id,nomMaillage from  Maillages order by id;"
-            maQuery=QSqlQuery()
+    def verifieListeMaillages(self,listeMaillage):
+        newListeMaillages=[]
+        maQuery=QSqlQuery()
+        for idM in listeMaillage:
+            texteQuery="select id, nomScript,medResultat from Maillages where id = " + str(idM) +';'
             maQuery.exec_(texteQuery)
+            maSize=0
             while(maQuery.next()):
-                 maillagesIdListe.append( maQuery.value(0).toInt()[0])
-                 maillagesNomListe.append( maQuery.value(1).toString())
-            return maillagesIdListe, maillagesNomListe
+                maSize+=1
+                newListeMaillages.append((maQuery.value(0).toInt()[0], maQuery.value(1).toString(), maQuery.value(2).toString()))
+            if maSize != 1 :
+                print("impossible de traiter le maillage : ", idM)
+        return  newListeMaillages
 
-        def getMailleurId(self,idMaillage):
-            texteQuery="select idMailleur from  Maillages where id = "+ str(idMaillage) +"  ;"
-            maQuery=QSqlQuery()
-            print texteQuery
-            print maQuery.exec_(texteQuery)
-            maQuery.exec_(texteQuery)
-            while(maQuery.next()): 
-                 idMailleur = maQuery.value(0).toInt()[0]
-            return idMailleur
+    def getSeuilsPourMaillage(self,idMaillage):
+        texteQuery="select id,nomMaillage,seuilCPU,seuilRatio,seuilTaille,seuilNbMaille from  Maillages where id = "+ str(idMaillage) +"  ;"
+        maQuery=QSqlQuery()
+        maQuery.exec_(texteQuery)
+        while(maQuery.next()):
+            l1 = maQuery.value(0).toInt()[0]
+            l2 = maQuery.value(1).toString()
+            l3 = maQuery.value(2).toInt()[0]
+            l4 = maQuery.value(3).toInt()[0]
+            l5 = maQuery.value(4).toInt()[0]
+            l6 = maQuery.value(5).toInt()[0]
+        return l1,l2,l3,l4,l5,l6
+
+    def getTous(self):
+        maillagesIdListe=[]; maillagesNomListe=[]
+        texteQuery="select id,nomMaillage from  Maillages order by id;"
+        maQuery=QSqlQuery()
+        maQuery.exec_(texteQuery)
+        while(maQuery.next()):
+            maillagesIdListe.append( maQuery.value(0).toInt()[0])
+            maillagesNomListe.append( maQuery.value(1).toString())
+        return maillagesIdListe, maillagesNomListe
+
+    def getMailleurId(self,idMaillage):
+        texteQuery="select idMailleur from  Maillages where id = "+ str(idMaillage) +"  ;"
+        maQuery=QSqlQuery()
+        print(texteQuery)
+        print(maQuery.exec_(texteQuery))
+        maQuery.exec_(texteQuery)
+        while(maQuery.next()):
+            idMailleur = maQuery.value(0).toInt()[0]
+        return idMailleur
index caf72e128b4a75ec410ca3515b513d7e8ac3ae9c..5576574cafb26b38de9d08eb2d1549655d349a89 100644 (file)
@@ -1,5 +1,5 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableMailles (TableDeBase):
       def __init__(self):
@@ -17,7 +17,7 @@ class TableMailles (TableDeBase):
           texteQuery+="foreign key (idVersion) references Versions(id)," 
           texteQuery+="primary key (idMaillage,idVersion,Entite));"
 
-          print "Creation de TableMailles : " , query.exec_(texteQuery)
+          print("Creation de TableMailles : " , query.exec_(texteQuery))
 
  
       def getVal(self,idMaillage, idVersion,  Entite):
@@ -31,7 +31,7 @@ class TableMailles (TableDeBase):
             while (query.next()) :
                val=query.value(0).toInt()[0]
                nb=nb+1
-            if nb > 1 : print "Double valeur de Reference dans la table des mailles"
+            if nb > 1 : print("Double valeur de Reference dans la table des mailles")
             return val
 
 
index b301a245af0d266079ede20e4fc27951c3b4e93f..a05f6a93e22c02a5183ee65744ab837339a8eb35 100644 (file)
@@ -1,59 +1,57 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableMailleurs (TableDeBase):
-       def __init__(self):
-            TableDeBase.__init__(self,"Mailleurs")
-            self.cols=" (nomMailleur) "
-            self.setField(("id","nomMailleur"))
-            self.setTypeField(("int","str"),('id'))
-
-        def createSqlTable(self):
-            query=QSqlQuery()
-            print "Creation de TableMailleurs", query.exec_("create table Mailleurs(id integer primary key autoincrement, nomMailleur varchar(40));")
-
-        def dejaRemplie(self):
-            texteQuery="select * from  Mailleurs where nomMailleur='Blsurf+Ghs3D';"
-            maQuery=QSqlQuery()
-            maQuery.exec_(texteQuery)
-            nb=0
-            while(maQuery.next()): nb=nb+1
-            return nb
-
-        def remplit(self):
-            if self.dejaRemplie() :
-               print "Table Mailleurs deja initialisee"
-               return
-            self.insereLigneAutoId(('BLSURF',))
-            self.insereLigneAutoId(('NETGEN1D2D',))
-            self.insereLigneAutoId(('GHS3D+BLSURF',))
-            self.insereLigneAutoId(('GHS3D+NETGEN1D2D',))
-            self.insereLigneAutoId(('NETGEN1D2D3D',))
-
-        def insereLigneAutoId(self,valeurs,debug=False):
-          # difficulte a construire le texte avec une seule valeur
-          texteQuery='insert into  Mailleurs (nomMailleur) values ("'+ str(valeurs[0])+ '");'
-          maQuery=QSqlQuery()
-          if debug  : print texteQuery, " " , maQuery.exec_(texteQuery)
-          else : maQuery.exec_(texteQuery) 
-
-        def getTous(self):
-            l1=[]
-            l2=[]
-            texteQuery="select * from  Mailleurs;"
-            maQuery=QSqlQuery()
-            maQuery.exec_(texteQuery)
-            while(maQuery.next()): 
-                 l1.append( maQuery.value(0).toInt()[0])
-                 l2.append( maQuery.value(1).toString())
-            return l1,l2
-
-        def getName(self,mailleurId):
-            texteQuery="select  nomMailleur from  Mailleurs where id = " + str(mailleurId) + " ;"
-            maQuery=QSqlQuery()
-            maQuery.exec_(texteQuery)
-            while(maQuery.next()): 
-                 mailleurName=maQuery.value(0).toString()
-            return mailleurName
-
-            
+    def __init__(self):
+        TableDeBase.__init__(self,"Mailleurs")
+        self.cols=" (nomMailleur) "
+        self.setField(("id","nomMailleur"))
+        self.setTypeField(("int","str"),('id'))
+
+    def createSqlTable(self):
+        query=QSqlQuery()
+        print("Creation de TableMailleurs", query.exec_("create table Mailleurs(id integer primary key autoincrement, nomMailleur varchar(40));"))
+
+    def dejaRemplie(self):
+        texteQuery="select * from  Mailleurs where nomMailleur='Blsurf+Ghs3D';"
+        maQuery=QSqlQuery()
+        maQuery.exec_(texteQuery)
+        nb=0
+        while(maQuery.next()): nb=nb+1
+        return nb
+
+    def remplit(self):
+        if self.dejaRemplie() :
+            print("Table Mailleurs deja initialisee")
+            return
+        self.insereLigneAutoId(('BLSURF',))
+        self.insereLigneAutoId(('NETGEN1D2D',))
+        self.insereLigneAutoId(('GHS3D+BLSURF',))
+        self.insereLigneAutoId(('GHS3D+NETGEN1D2D',))
+        self.insereLigneAutoId(('NETGEN1D2D3D',))
+
+    def insereLigneAutoId(self,valeurs,debug=False):
+        # difficulte a construire le texte avec une seule valeur
+        texteQuery='insert into  Mailleurs (nomMailleur) values ("'+ str(valeurs[0])+ '");'
+        maQuery=QSqlQuery()
+        if debug  : print(texteQuery, " " , maQuery.exec_(texteQuery))
+        else : maQuery.exec_(texteQuery)
+
+    def getTous(self):
+        l1=[]
+        l2=[]
+        texteQuery="select * from  Mailleurs;"
+        maQuery=QSqlQuery()
+        maQuery.exec_(texteQuery)
+        while(maQuery.next()):
+            l1.append( maQuery.value(0).toInt()[0])
+            l2.append( maQuery.value(1).toString())
+        return l1,l2
+
+    def getName(self,mailleurId):
+        texteQuery="select  nomMailleur from  Mailleurs where id = " + str(mailleurId) + " ;"
+        maQuery=QSqlQuery()
+        maQuery.exec_(texteQuery)
+        while(maQuery.next()):
+            mailleurName=maQuery.value(0).toString()
+        return mailleurName
index 4955817eb888b29ba23949016cc648b210794931..aa0c331d262137dbf9509725e53fbc56d6b96dd1 100644 (file)
@@ -1,5 +1,5 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TablePerfs (TableDeBase):
       def __init__(self):
@@ -15,7 +15,7 @@ class TablePerfs (TableDeBase):
           texteQuery+="foreign key (Machine) references Machines(nomMachine)," 
           texteQuery+="primary key (idMaillage, idVersion, Machine));"
 
-          print "Creation de TablePerfs : " , query.exec_(texteQuery)
+          print("Creation de TablePerfs : " , query.exec_(texteQuery))
 
       def getVal(self,idMaillage,idVersion,Machine):
           query=QSqlQuery()
@@ -27,7 +27,7 @@ class TablePerfs (TableDeBase):
           while (query.next()) :
               cpu=query.value(0).toInt()[0]
           while (query.next()) :
-              print "plusieurs enregistrements dans perf pour ",str(idMaillage)," ",str(idVersion)," ",Machine
+              print("plusieurs enregistrements dans perf pour ",str(idMaillage)," ",str(idVersion)," ",Machine)
           if cpu==None :
-              print "pas d enregistrement dans perf pour ",str(idMaillage)," ",str(idVersion)," ",Machine
+              print("pas d enregistrement dans perf pour ",str(idMaillage)," ",str(idVersion)," ",Machine)
           return cpu
index 85397abde3ecb28e04526233baf86e9b1536de87..c2e87d76a7de1b3aee33fd7d69deb81fb469ac6b 100644 (file)
@@ -1,5 +1,5 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableRatios (TableDeBase):
       def __init__(self):
@@ -20,7 +20,7 @@ class TableRatios (TableDeBase):
           texteQuery+="foreign key (idVersion) references Versions(id)," 
           texteQuery+="primary key (idMaillage,idVersion));"
 
-          print "Creation de TableRatios : " , query.exec_(texteQuery)
+          print("Creation de TableRatios : " , query.exec_(texteQuery))
 
       def getVal(self,idMaillage, idVersion,  Entite):
           query=QSqlQuery()
@@ -32,6 +32,6 @@ class TableRatios (TableDeBase):
           while (query.next()) :
               val=query.value(0).toFloat()[0]
               nb=nb+1
-          if nb > 1 : print "Double valeur de Reference dans la table des mailles"
+          if nb > 1 : print("Double valeur de Reference dans la table des mailles")
           return val
 
index 6e9637f160aaab916a22c76d21daab42f6054d82..a2e42cb33d703367adb001b4046242e8c7c99077 100644 (file)
@@ -1,5 +1,5 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableTailles (TableDeBase):
       def __init__(self):
@@ -20,7 +20,7 @@ class TableTailles (TableDeBase):
           texteQuery+="foreign key (idVersion) references Versions(id)," 
           texteQuery+="primary key (idMaillage,idVersion));"
 
-          print "Creation de TableTailles : " , query.exec_(texteQuery)
+          print("Creation de TableTailles : " , query.exec_(texteQuery))
 
       def getVal(self,idMaillage, idVersion, Entite):
           query=QSqlQuery()
@@ -32,6 +32,6 @@ class TableTailles (TableDeBase):
           while (query.next()) :
               val=query.value(0).toFloat()[0]
               nb=nb+1
-          if nb > 1 : print "Double valeur de Reference dans la table des mailles"
+          if nb > 1 : print("Double valeur de Reference dans la table des mailles")
           return val
 
index 0a2fbb85c059d935ea49cd62e4b044faf4b7df65..797d147ff95bbfdb0e4994727f04e40e63655e0d 100644 (file)
@@ -1,44 +1,41 @@
 from qtsalome import QSqlQuery
-from tableDeBase import TableDeBase
+from Base.tableDeBase import TableDeBase
 
 class TableVersions (TableDeBase):
-       def __init__(self):
-            TableDeBase.__init__(self,"Versions")
-            self.setField(("id","nomVersion","commentaire"))
-            self.setTypeField(('int','str','str'),('id',))
-            self.cols=" (nomVersion, commentaire) "
-
-        def createSqlTable(self):
-            query=QSqlQuery()
-            texteQuery ="create table Versions(id integer primary key autoincrement, nomVersion varchar(10),"
-            texteQuery+="commentaire varchar(30));"
-            print "Creation de TableVersions : " , query.exec_(texteQuery)
-
-
-        def remplit(self):
-            self.insereLigneAutoId(('Salome7.2.0',''))
-            self.insereLigneAutoId(('Salome7.3.0',''))
-            self.insereLigneAutoId(('Salome7.4.0',''))
-
-        def creeVersion(self,version,commentaire=""):
-            self.insereLigneAutoId((version,commentaire))
-
-        
-        def chercheVersion(self,version):
-            query=QSqlQuery()
-            version=str(version)
-            if bool(version) == True :
-               texteQuery ="select id, nomVersion from Versions where id = " + str(version) +";"
-            else:
-               texteQuery ="select id, nomVersion from Versions where nomVersion ='" + version +"' ;"
-            query.exec_(texteQuery)
-            nb=0
-            while(query.next()):
-               nb=nb+1
-               id=query.value(0).toInt()[0]
-               nom=query.value(1).toString()
-            if nb != 1 : return 0, 0, ""
-            return  1, id, nom
-
-           
-
+    def __init__(self):
+        TableDeBase.__init__(self,"Versions")
+        self.setField(("id","nomVersion","commentaire"))
+        self.setTypeField(('int','str','str'),('id',))
+        self.cols=" (nomVersion, commentaire) "
+
+    def createSqlTable(self):
+        query=QSqlQuery()
+        texteQuery ="create table Versions(id integer primary key autoincrement, nomVersion varchar(10),"
+        texteQuery+="commentaire varchar(30));"
+        print("Creation de TableVersions : " , query.exec_(texteQuery))
+
+
+    def remplit(self):
+        self.insereLigneAutoId(('Salome7.2.0',''))
+        self.insereLigneAutoId(('Salome7.3.0',''))
+        self.insereLigneAutoId(('Salome7.4.0',''))
+
+    def creeVersion(self,version,commentaire=""):
+        self.insereLigneAutoId((version,commentaire))
+
+
+    def chercheVersion(self,version):
+        query=QSqlQuery()
+        version=str(version)
+        if bool(version) == True :
+            texteQuery ="select id, nomVersion from Versions where id = " + str(version) +";"
+        else:
+            texteQuery ="select id, nomVersion from Versions where nomVersion ='" + version +"' ;"
+        query.exec_(texteQuery)
+        nb=0
+        while(query.next()):
+            nb=nb+1
+            id=query.value(0).toInt()[0]
+            nom=query.value(1).toString()
+        if nb != 1 : return 0, 0, ""
+        return  1, id, nom
index b5af3482b2d85fe1911106f35768c317a7af1987..68c7489927f2759ad0ff5a71a5125a8d1c2c2961 100755 (executable)
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
+#!/usr/bin/env python3
 
 import sys
 import os
@@ -8,14 +7,14 @@ import  subprocess
 
 def Chercheversion(salomePath):
     home=os.environ['HOME']
-    commande=os.path.abspath(os.path.join(home,salomePath,'runAppli'))
+    commande=os.path.abspath(os.path.join(home,salomePath,'salome'))
     argus="--version"
     p = subprocess.Popen([commande,argus], stdout=subprocess.PIPE)
     (output, err) = p.communicate()
-    version=' '.join(output.split())
+    version=' '.join(output.decode().split())
     return version
 
 
 if __name__ == "__main__":
-      print Chercheversion("/local00/home/A96028/Appli")
+      print(Chercheversion("/local00/home/A96028/Appli"))
 
index b307fc3d1e4599acf8d635a52dd5d917a3f801a1..b64f63d4dbd8ab092ffec15fe880d716d2c15e06 100755 (executable)
@@ -1,19 +1,18 @@
-#!/usr/bin/env python
-# -*- coding: iso-8859-1 -*-
+#!/usr/bin/env python3
 
 import string
 import os
 
-dir=os.path.dirname(os.path.abspath(__file__))
-FichierEntete=os.path.join(dir,'templatesHtml/entete.html')
-FichierMaillageEntete=os.path.join(dir,'templatesHtml/maillageEntete.html')
-FichierJob=os.path.join(dir,'templatesHtml/job.html')
-FichierTableau=os.path.join(dir,'templatesHtml/tableau.html')
-FichierLigne=os.path.join(dir,'templatesHtml/ligne.html')
-FichierFinTableau=os.path.join(dir,'templatesHtml/tableauFin.html')
-FichierSansGroupe=os.path.join(dir,'templatesHtml/sansGroupe.html')
-FichierGroupeRatio=os.path.join(dir,'templatesHtml/groupeRatio.html')
-FichierGroupeTaille=os.path.join(dir,'templatesHtml/groupeTaille.html')
+adir=os.path.dirname(os.path.abspath(__file__))
+FichierEntete=os.path.join(adir,'templatesHtml/entete.html')
+FichierMaillageEntete=os.path.join(adir,'templatesHtml/maillageEntete.html')
+FichierJob=os.path.join(adir,'templatesHtml/job.html')
+FichierTableau=os.path.join(adir,'templatesHtml/tableau.html')
+FichierLigne=os.path.join(adir,'templatesHtml/ligne.html')
+FichierFinTableau=os.path.join(adir,'templatesHtml/tableauFin.html')
+FichierSansGroupe=os.path.join(adir,'templatesHtml/sansGroupe.html')
+FichierGroupeRatio=os.path.join(adir,'templatesHtml/groupeRatio.html')
+FichierGroupeTaille=os.path.join(adir,'templatesHtml/groupeTaille.html')
 
 
 def compte_all(texte, subString):
@@ -26,15 +25,15 @@ def compte_all(texte, subString):
         start = trouve + len(subString)
 
 def FormateTexte(texte,dico):
-    for clef in dico.keys():
+    for clef in dico:
         texteARemplacer="%"+str(clef)+"%"
         remplacement=dico[clef]
         if texte.find(texteARemplacer) < 0 :
-           print "impossible de remplacer ",texteARemplacer, "Pas d'occurence"
-           print remplacement
+           print("impossible de remplacer ",texteARemplacer, "Pas d'occurence")
+           print(remplacement)
            continue
         if compte_all(texte,texteARemplacer) != 1 :
-           print "impossible de remplacer ",texteARemplacer, "trop d'occurences"
+           print("impossible de remplacer ",texteARemplacer, "trop d'occurences")
            continue
         remplacement=str(remplacement)
         texte=texte.replace(texteARemplacer,remplacement)
@@ -47,33 +46,33 @@ def FormateLigne(texte,nb):
     return texte
 
 def CreeEntete(dico):
-    texteIni=open(FichierEntete).read()
+    texteIni=open(FichierEntete, 'r', encoding='utf8').read()
     texteRetour=FormateTexte(texteIni,dico)
     return texteRetour
 
 def CreeMaillage(dico):
-    texteIni=open(FichierMaillageEntete).read()
+    texteIni=open(FichierMaillageEntete, 'r', encoding='utf8').read()
     texteRetour=FormateTexte(texteIni,dico)
     return texteRetour
 
 def CreeJob(dico):
-    texte=open(FichierJob).read()
+    texte=open(FichierJob, 'r', encoding='utf8').read()
     texteRetour=FormateTexte(texte,dico)
     return texteRetour
 
 def CreeGroupeTaille(dico):
-    texte=open(FichierGroupeTaille).read()
+    texte=open(FichierGroupeTaille, 'r', encoding='utf8').read()
     texteRetour=FormateTexte(texte,dico)
     return texteRetour
 
 def CreeGroupeRatio(dico):
-    texte=open(FichierGroupeRatio).read()
+    texte=open(FichierGroupeRatio, 'r', encoding='utf8').read()
     texteRetour=FormateTexte(texte,dico)
     return texteRetour
 
 
 def CreeMailleOuGroupe(dico,nb):
-    texteIni=open(FichierTableau).read()
+    texteIni=open(FichierTableau, 'r', encoding='utf8').read()
     texteLigneIni=open(FichierLigne).read()
     for i in range (2,nb+1) :
         texteLigne=FormateLigne(texteLigneIni,i)
@@ -81,16 +80,15 @@ def CreeMailleOuGroupe(dico,nb):
 
     texteRetour=FormateTexte(texteIni,dico)
 
-    finTexte=open(FichierFinTableau).read()
+    finTexte=open(FichierFinTableau, 'r', encoding='utf8').read()
     texteFinal=texteRetour+finTexte
 
     return texteFinal
 
 
 def EcritFichier(texte,filename):
-    fp=open(filename,'w')
-    fp.write(texte)
-    fp.close()
+    with open(filename,'w',encoding='utf8') as fp:
+        fp.write(texte)
     
 
 class Document:
index 29376b600829a2253dec2968f6feb23c6af073af..cd8d02a16cf915a5bf1d98270cf14b97454f8725 100644 (file)
@@ -137,7 +137,7 @@ Modifier les scripts pour les intégrer dans le mécanisme de test
             fichierMedResult = 'fichierMed.med'
             getStatsMaillage(monMaillage,fichierMedResult)
             getStatsGroupes(monMaillage,fichierMedResult)
-            getStatsCritere(dimMaillage,monMaillage,fichierMedResult,theStudy)
+            getStatsCritere(dimMaillage,monMaillage,fichierMedResult)
 
 Lancement du script de comparaison
 -----------------------------------
index af7dc911861b0aeed3a9eeef5b7700df41a2f843..33d4fe204f21b433755429d645b72e99fcfc05c6 100644 (file)
 
 # Form implementation generated from reading ui file 'desFenetreChoix.ui'
 #
-# Created: Thu Mar 27 11:25:15 2014
-#      by: PyQt4 UI code generator 4.9.6
+# Created by: PyQt5 UI code generator 5.6
 #
 # WARNING! All changes made in this file will be lost!
 
-from PyQt4 import QtCore, QtGui
-
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    def _fromUtf8(s):
-        return s
-
-try:
-    _encoding = QtGui.QApplication.UnicodeUTF8
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig)
+from PyQt5 import QtCore, QtGui, QtWidgets
 
 class Ui_Choix(object):
     def setupUi(self, Choix):
-        Choix.setObjectName(_fromUtf8("Choix"))
+        Choix.setObjectName("Choix")
         Choix.resize(440, 708)
-        self.gridLayout = QtGui.QGridLayout(Choix)
-        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
-        self.buttonBox = QtGui.QDialogButtonBox(Choix)
+        self.gridLayout = QtWidgets.QGridLayout(Choix)
+        self.gridLayout.setObjectName("gridLayout")
+        self.buttonBox = QtWidgets.QDialogButtonBox(Choix)
         self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
-        self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
+        self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
+        self.buttonBox.setObjectName("buttonBox")
         self.gridLayout.addWidget(self.buttonBox, 2, 0, 1, 1)
-        self.groupBox = QtGui.QGroupBox(Choix)
-        self.groupBox.setObjectName(_fromUtf8("groupBox"))
-        self.layoutWidget = QtGui.QWidget(self.groupBox)
+        self.groupBox = QtWidgets.QGroupBox(Choix)
+        self.groupBox.setObjectName("groupBox")
+        self.layoutWidget = QtWidgets.QWidget(self.groupBox)
         self.layoutWidget.setGeometry(QtCore.QRect(40, 310, 311, 269))
-        self.layoutWidget.setObjectName(_fromUtf8("layoutWidget"))
-        self.gridLayout_2 = QtGui.QGridLayout(self.layoutWidget)
-        self.gridLayout_2.setMargin(0)
-        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
-        self.PBMaille = QtGui.QPushButton(self.layoutWidget)
-        self.PBMaille.setObjectName(_fromUtf8("PBMaille"))
+        self.layoutWidget.setObjectName("layoutWidget")
+        self.gridLayout_2 = QtWidgets.QGridLayout(self.layoutWidget)
+        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.PBMaille = QtWidgets.QPushButton(self.layoutWidget)
+        self.PBMaille.setObjectName("PBMaille")
         self.gridLayout_2.addWidget(self.PBMaille, 1, 0, 1, 1)
-        self.PBRatio = QtGui.QPushButton(self.layoutWidget)
-        self.PBRatio.setObjectName(_fromUtf8("PBRatio"))
+        self.PBRatio = QtWidgets.QPushButton(self.layoutWidget)
+        self.PBRatio.setObjectName("PBRatio")
         self.gridLayout_2.addWidget(self.PBRatio, 3, 0, 1, 1)
-        self.PBPerf = QtGui.QPushButton(self.layoutWidget)
-        self.PBPerf.setObjectName(_fromUtf8("PBPerf"))
+        self.PBPerf = QtWidgets.QPushButton(self.layoutWidget)
+        self.PBPerf.setObjectName("PBPerf")
         self.gridLayout_2.addWidget(self.PBPerf, 7, 0, 1, 1)
-        self.PBGroupeRatio = QtGui.QPushButton(self.layoutWidget)
-        self.PBGroupeRatio.setObjectName(_fromUtf8("PBGroupeRatio"))
+        self.PBGroupeRatio = QtWidgets.QPushButton(self.layoutWidget)
+        self.PBGroupeRatio.setObjectName("PBGroupeRatio")
         self.gridLayout_2.addWidget(self.PBGroupeRatio, 6, 0, 1, 1)
-        self.PBGroupe = QtGui.QPushButton(self.layoutWidget)
-        self.PBGroupe.setObjectName(_fromUtf8("PBGroupe"))
+        self.PBGroupe = QtWidgets.QPushButton(self.layoutWidget)
+        self.PBGroupe.setObjectName("PBGroupe")
         self.gridLayout_2.addWidget(self.PBGroupe, 4, 0, 1, 1)
-        self.PBTaille = QtGui.QPushButton(self.layoutWidget)
-        self.PBTaille.setObjectName(_fromUtf8("PBTaille"))
+        self.PBTaille = QtWidgets.QPushButton(self.layoutWidget)
+        self.PBTaille.setObjectName("PBTaille")
         self.gridLayout_2.addWidget(self.PBTaille, 2, 0, 1, 1)
-        self.PBGroupeTaille = QtGui.QPushButton(self.layoutWidget)
-        self.PBGroupeTaille.setObjectName(_fromUtf8("PBGroupeTaille"))
+        self.PBGroupeTaille = QtWidgets.QPushButton(self.layoutWidget)
+        self.PBGroupeTaille.setObjectName("PBGroupeTaille")
         self.gridLayout_2.addWidget(self.PBGroupeTaille, 5, 0, 1, 1)
-        self.layoutWidget1 = QtGui.QWidget(self.groupBox)
+        self.layoutWidget1 = QtWidgets.QWidget(self.groupBox)
         self.layoutWidget1.setGeometry(QtCore.QRect(40, 50, 301, 211))
-        self.layoutWidget1.setObjectName(_fromUtf8("layoutWidget1"))
-        self.verticalLayout = QtGui.QVBoxLayout(self.layoutWidget1)
-        self.verticalLayout.setMargin(0)
-        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
-        self.PBMailleur = QtGui.QPushButton(self.layoutWidget1)
-        self.PBMailleur.setObjectName(_fromUtf8("PBMailleur"))
+        self.layoutWidget1.setObjectName("layoutWidget1")
+        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget1)
+        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.PBMailleur = QtWidgets.QPushButton(self.layoutWidget1)
+        self.PBMailleur.setObjectName("PBMailleur")
         self.verticalLayout.addWidget(self.PBMailleur)
-        self.PBMaillage = QtGui.QPushButton(self.layoutWidget1)
-        self.PBMaillage.setObjectName(_fromUtf8("PBMaillage"))
+        self.PBMaillage = QtWidgets.QPushButton(self.layoutWidget1)
+        self.PBMaillage.setObjectName("PBMaillage")
         self.verticalLayout.addWidget(self.PBMaillage)
-        self.PBMachine = QtGui.QPushButton(self.layoutWidget1)
-        self.PBMachine.setObjectName(_fromUtf8("PBMachine"))
+        self.PBMachine = QtWidgets.QPushButton(self.layoutWidget1)
+        self.PBMachine.setObjectName("PBMachine")
         self.verticalLayout.addWidget(self.PBMachine)
-        self.PBVersion = QtGui.QPushButton(self.layoutWidget1)
-        self.PBVersion.setObjectName(_fromUtf8("PBVersion"))
+        self.PBVersion = QtWidgets.QPushButton(self.layoutWidget1)
+        self.PBVersion.setObjectName("PBVersion")
         self.verticalLayout.addWidget(self.PBVersion)
-        self.PBGroupesRef = QtGui.QPushButton(self.layoutWidget1)
-        self.PBGroupesRef.setObjectName(_fromUtf8("PBGroupesRef"))
+        self.PBGroupesRef = QtWidgets.QPushButton(self.layoutWidget1)
+        self.PBGroupesRef.setObjectName("PBGroupesRef")
         self.verticalLayout.addWidget(self.PBGroupesRef)
         self.gridLayout.addWidget(self.groupBox, 1, 0, 1, 1)
 
         self.retranslateUi(Choix)
-        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), Choix.accept)
-        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), Choix.reject)
+        self.buttonBox.accepted.connect(Choix.accept)
+        self.buttonBox.rejected.connect(Choix.reject)
         QtCore.QMetaObject.connectSlotsByName(Choix)
 
     def retranslateUi(self, Choix):
-        Choix.setWindowTitle(_translate("Choix", "Verification de Maillage", None))
-        self.groupBox.setTitle(_translate("Choix", "Tables ", None))
-        self.PBMaille.setText(_translate("Choix", "Table Mailles", None))
-        self.PBRatio.setText(_translate("Choix", "Table Ratios", None))
-        self.PBPerf.setText(_translate("Choix", "Table Performances", None))
-        self.PBGroupeRatio.setText(_translate("Choix", "Table Groupe Ratios", None))
-        self.PBGroupe.setText(_translate("Choix", "Table Groupes", None))
-        self.PBTaille.setText(_translate("Choix", "Table Tailles", None))
-        self.PBGroupeTaille.setText(_translate("Choix", "Table Groupe Tailles", None))
-        self.PBMailleur.setText(_translate("Choix", "Table Mailleurs", None))
-        self.PBMaillage.setText(_translate("Choix", "Table Maillages", None))
-        self.PBMachine.setText(_translate("Choix", "Table Machines", None))
-        self.PBVersion.setText(_translate("Choix", "Table Versions", None))
-        self.PBGroupesRef.setText(_translate("Choix", "Table Groupes Référence", None))
+        _translate = QtCore.QCoreApplication.translate
+        Choix.setWindowTitle(_translate("Choix", "Verification de Maillage"))
+        self.groupBox.setTitle(_translate("Choix", "Tables "))
+        self.PBMaille.setText(_translate("Choix", "Table Mailles"))
+        self.PBRatio.setText(_translate("Choix", "Table Ratios"))
+        self.PBPerf.setText(_translate("Choix", "Table Performances"))
+        self.PBGroupeRatio.setText(_translate("Choix", "Table Groupe Ratios"))
+        self.PBGroupe.setText(_translate("Choix", "Table Groupes"))
+        self.PBTaille.setText(_translate("Choix", "Table Tailles"))
+        self.PBGroupeTaille.setText(_translate("Choix", "Table Groupe Tailles"))
+        self.PBMailleur.setText(_translate("Choix", "Table Mailleurs"))
+        self.PBMaillage.setText(_translate("Choix", "Table Maillages"))
+        self.PBMachine.setText(_translate("Choix", "Table Machines"))
+        self.PBVersion.setText(_translate("Choix", "Table Versions"))
+        self.PBGroupesRef.setText(_translate("Choix", "Table Groupes Référence"))
 
 
 if __name__ == "__main__":
     import sys
-    app = QtGui.QApplication(sys.argv)
-    Choix = QtGui.QDialog()
+    app = QtWidgets.QApplication(sys.argv)
+    Choix = QtWidgets.QDialog()
     ui = Ui_Choix()
     ui.setupUi(Choix)
     Choix.show()
index bc9e73e0232d86bfd41fffe667cdc5442556f8f4..27b8e4f24010652f9d3de472b8b6edbbc8d17d37 100644 (file)
@@ -1,6 +1,6 @@
-from desFenetreChoix_ui import Ui_Choix
 from qtsalome import *
-from monEditor import TableEditor
+from .desFenetreChoix import Ui_Choix
+from .monEditor import TableEditor
 
 # Import des panels
 
index ecfd4fe4449d8cf2fbc27cdce08c5acdf77cfb12..cd4fe96c5427eb56c91b0f4aa717818a30cfc072 100644 (file)
@@ -17,7 +17,7 @@ class TableEditor(QDialog):
          quitButton=QPushButton("Quit")
          buttonBox=QDialogButtonBox(Qt.Vertical)
          buttonBox.addButton(quitButton, QDialogButtonBox.RejectRole);
-         quitButton.clicked.connect(self.close())
+         quitButton.clicked.connect(self.close)
 
          mainLayout = QHBoxLayout(self)
          mainLayout.addWidget(self.view)
@@ -31,13 +31,13 @@ class TableEditor(QDialog):
          self.view.adjustSize()
          self.adjustSize()
          self.view.pressed[QModelIndex].connect(self.donneLigne)
-         self.view.itemPressed[QTableWidgetItem].conect(self.donneLigne)
+         self.view.itemPressed[QTableWidgetItem].connect(self.donneLigne)
          self.view.clicked[QModelIndex].connect(self.donneLigne)
          self.view.clicked.connect(self.donneLigne)
          self.view.pressed.connect(self.donneLigne)
 
      def donneLigne(self):
-         print "jjjjjjjjjjjjjjjj"
+         print("jjjjjjjjjjjjjjjj")
 
      def setTitle(self):
          fields=self.table.getFields()
index 1e952520c68d54ad728142cbf9b8ee23853862c0..cfc0ae36b91424a94ed6dbff8d4e08810b99f9ab 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 import sys,os
 rep=os.path.dirname(os.path.abspath(__file__))
@@ -6,19 +6,19 @@ installDir=os.path.join(rep,'..')
 sys.path.insert(0,installDir)
 
 from qtsalome import QApplication
-from Gui.maFenetreChoix_ui import MaFenetreChoix
+from Gui.maFenetreChoix import MaFenetreChoix
 from Base.dataBase import Base
 
 
 
 if __name__ == "__main__":
-      from optparse import OptionParser
-      p=OptionParser()
-      p.add_option('-d',dest='database',default="myMesh.db",help='nom de la database')
-      options, args = p.parse_args()
+      from argparse import ArgumentParser
+      p=ArgumentParser()
+      p.add_argument('-d',dest='database',default="myMesh.db",help='nom de la database')
+      args = p.parse_args()
 
       app = QApplication(sys.argv)
-      maBase=Base(options.database)
+      maBase=Base(args.database)
       maBase.initialise()
       window = MaFenetreChoix(maBase)
       window.show()
index 16239e1701a0e4b17e7ee34ac7da37441a79efcf..7f718755b692bfaecb6520152c0f4d924342774d 100644 (file)
@@ -1,15 +1,14 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
+#!/usr/bin/env python3
 
 import sys,os
 import salome
-from getStats import getGroupesRef
-from Type_Maille import dicoDimENtite
+from .getStats import getGroupesRef
+from .Type_Maille import dicoDimENtite
 
-def getCritere(dim,NomMesh,acritere,theStudy):
+def getCritere(dim,NomMesh,acritere):
   import SMESH
   from salome.smesh import smeshBuilder
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
   import numpy
 #  print dim,NomMesh,acritere
   if dim == 2 :
@@ -36,10 +35,10 @@ def getCritere(dim,NomMesh,acritere,theStudy):
   
   return [max,min,Q1,M,Q3,moyenne]
 
-def getCritereGroupe(NomMesh,NomGr,acritere,theStudy):
+def getCritereGroupe(NomMesh,NomGr,acritere):
   import SMESH
   from salome.smesh import smeshBuilder
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
   import numpy
     
   # on ne traite que les mailles 2D et 3D
@@ -72,7 +71,7 @@ def getCritereGroupe(NomMesh,NomGr,acritere,theStudy):
   
   return [max,min,Q1,M,Q3,moyenne]
 
-def getObjectsGroupe(Mesh,liste,theStudy):
+def getObjectsGroupe(Mesh,liste):
   import SMESH
   from salome.smesh import smeshBuilder
   dico={}
@@ -83,29 +82,29 @@ def getObjectsGroupe(Mesh,liste,theStudy):
           if name == n :  dico[name]=g
   return dico
 
-def getStatsCritere(dim,Mesh,fichierMedResult,theStudy):
+def getStatsCritere(dim,Mesh,fichierMedResult):
   fichierStatRatio=fichierMedResult.replace('.med','.ratio')
-  max,min,Q1,M,Q3,moyenne = getCritere(dim,Mesh,"Ratio",theStudy)
+  max,min,Q1,M,Q3,moyenne = getCritere(dim,Mesh,"Ratio")
   f = open(fichierStatRatio, 'w')
   f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
   f.close()
 
   fichierStatRatio=fichierMedResult.replace('.med','.taille')
-  max,min,Q1,M,Q3,moyenne = getCritere(dim,Mesh,"Length",theStudy)
+  max,min,Q1,M,Q3,moyenne = getCritere(dim,Mesh,"Length")
   f = open(fichierStatRatio, 'w')
   f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
   f.close()
 
   liste=getGroupesRef(fichierMedResult)
-  dicoGroupe=getObjectsGroupe(Mesh,liste,theStudy)
+  dicoGroupe=getObjectsGroupe(Mesh,liste)
   for groupe in liste :
-      max,min,Q1,M,Q3,moyenne=getCritereGroupe(Mesh,dicoGroupe[groupe],"Ratio",theStudy)
+      max,min,Q1,M,Q3,moyenne=getCritereGroupe(Mesh,dicoGroupe[groupe],"Ratio")
       extension="_"+groupe+'_Ratio.res'
       fichier=fichierMedResult.replace('.med',extension)
       f = open(fichier, 'w')
       f.write(str(max)+","+str(min)+","+str(Q1)+","+str(M)+","+str(Q3)+","+str(moyenne))
       f.close()
-      max,min,Q1,M,Q3,moyenne=getCritereGroupe(Mesh,dicoGroupe[groupe],"Length",theStudy)
+      max,min,Q1,M,Q3,moyenne=getCritereGroupe(Mesh,dicoGroupe[groupe],"Length")
       extension="_"+groupe+'_Taille.res'
       fichier=fichierMedResult.replace('.med',extension)
       f = open(fichier, 'w')
index 3f329c71bb103cd364b03ee30b1159c26bab5797..a5d46d082fc5de775954dbc9613fa80249faaa9f 100644 (file)
@@ -30,7 +30,7 @@ def getStatsMaillage(maillage,fichierMed):
     for i in range(len(mesures)):
       txt += str(SMESH.EntityType._item(i))+ " " +str(mesures[SMESH.EntityType._item(i)]) + "\n"
 
-    from utiles import writeFile
+    from .utiles import writeFile
     writeFile(fichier,txt)
 
 
@@ -41,7 +41,7 @@ def getStatsGroupes(maillage,fichierMedResult):
   fichierGroupe=fichierMedResult.replace('.med','_groupesRef.res')
   lGroups=getGroupesRef(fichierGroupe)
   if len(lGroups)==0: 
-    print "pas de Groupe de Reference "
+    print("pas de Groupe de Reference ")
     try :
       os.remove(fichierGroupe)
       return
@@ -62,7 +62,7 @@ def getStatsStatSurGroupes(maillage,groupe,fichierStatGroupe):
   import SMESH
   for i in range(len(mesures)):
       txt += str(SMESH.EntityType._item(i))+ " " +str(mesures[SMESH.EntityType._item(i)]) + "\n"
-  from utiles import writeFile
+  from .utiles import writeFile
   writeFile(fichierStatGroupe,txt)
 
 
index 23e646c594e6ccc667fe50525730571cae24db46..68a8153ab545463590907dd98b151b51a27b0bf1 100644 (file)
@@ -18,7 +18,7 @@ class Job:
       
   def execute(self):
       home=os.environ['HOME']
-      commande=os.path.abspath(os.path.join(home,self.salomePath,"runAppli"))
+      commande=os.path.abspath(os.path.join(home,self.salomePath,"salome"))
       script= os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',self.script)) 
 
       debut=time.time()
@@ -26,7 +26,7 @@ class Job:
       a=os.system(commande+" -t "+script)
       fin=time.time()
       self.CPU=fin-debut
-      print "  Temps d execution : ",  self.CPU
+      print("  Temps d execution : ",  self.CPU)
 
       #stdout, stderr = p.communicate() 
 
@@ -35,7 +35,7 @@ class Job:
       try:
          text=open(self.fichierStatResult).read()
       except:
-         print "Impossible d'ouvrir le fichier: ", str(self.fichierStatResult)
+         print("Impossible d'ouvrir le fichier: ", str(self.fichierStatResult))
          exit(1)
       liste=text.split()
       i=0
@@ -55,7 +55,7 @@ class Job:
       try:
          text=open(fichier).read()
       except:
-         print "Impossible d'ouvrir le fichier: ", str(fichier)
+         print("Impossible d'ouvrir le fichier: ", str(fichier))
          exit(1)
       liste=text.split(",")
       return liste
@@ -67,7 +67,7 @@ class Job:
       try:
          text=open(fichier).read()
       except:
-         print "Impossible d'ouvrir le fichier: ", str(fichier)
+         print("Impossible d'ouvrir le fichier: ", str(fichier))
          exit(1)
       liste=text.split(",")
       return liste
@@ -80,7 +80,7 @@ class Job:
       try:
          text=open(fichier).read()
       except:
-         print "Impossible d'ouvrir le fichier: ", str(fichier)
+         print("Impossible d'ouvrir le fichier: ", str(fichier))
          exit(1)
       liste=text.split()
       i=0
@@ -98,7 +98,7 @@ class Job:
       try:
          text=open(fichier).read()
       except:
-         print "Impossible d'ouvrir le fichier: ", str(fichier)
+         print("Impossible d'ouvrir le fichier: ", str(fichier))
          exit(1)
       liste=text.split(",")
 #      print "taille",liste
@@ -110,7 +110,7 @@ class Job:
       try:
          text=open(fichier).read()
       except:
-         print "Impossible d'ouvrir le fichier: ", str(fichier)
+         print("Impossible d'ouvrir le fichier: ", str(fichier))
          exit(1)
       liste=text.split(",")
       return liste
index fc3a3e2cda4ffce5fb134c815b5ec3a688622045..40b4d86eef1a6519c29bd98dd99300a261e3c221 100644 (file)
@@ -21,10 +21,10 @@ class Ref:
       seuil=self.maBase.maTableMaillages.getVal(self.idMaillage,"seuilCPU")
       seuilHaut=cpuAvant*(100+seuil)/100.
       if NbSec > seuilHaut  :
-         print "Probleme consommation CPU : "
-         print "         cpu reference : ", cpuAvant
-         print "         seuil         : ", seuil
-         print "         CPU           : ", NbSec
+         print("Probleme consommation CPU : ")
+         print("         cpu reference : ", cpuAvant)
+         print("         seuil         : ", seuil)
+         print("         CPU           : ", NbSec)
          return True
       return False
       
@@ -37,10 +37,10 @@ class Ref:
           seuilHaut=valAvant*(100+seuil)/100.
           seuilBas=valAvant*(100-seuil)/100.
           if (valTrouvee < seuilBas) or (valTrouvee > seuilHaut) :
-             print "Probleme sur le nombre de Mailles de type : ", nomColonne
-             print "         nb reference : ", valAvant
-             print "         seuil        : ", seuil
-             print "         nb           : ", valTrouvee
+             print("Probleme sur le nombre de Mailles de type : ", nomColonne)
+             print("         nb reference : ", valAvant)
+             print("         seuil        : ", seuil)
+             print("         nb           : ", valTrouvee)
              return True
           i=i+1
       return False
@@ -54,10 +54,10 @@ class Ref:
           seuilHaut=valAvant*(100+seuil)/100.
           seuilBas=valAvant*(100-seuil)/100.
           if (valTrouvee < seuilBas) or (valTrouvee > seuilHaut) :
-             print "Probleme sur le nombre de Mailles de type : ", nomColonne
-             print "         nb reference : ", valAvant
-             print "         seuil        : ", seuil
-             print "         nb           : ", valTrouvee
+             print("Probleme sur le nombre de Mailles de type : ", nomColonne)
+             print("         nb reference : ", valAvant)
+             print("         seuil        : ", seuil)
+             print("         nb           : ", valTrouvee)
              return True
           i=i+1
       return False
@@ -75,10 +75,10 @@ class Ref:
           seuilHaut=valAvant*(100+seuil)/100.
           seuilBas=valAvant*(100-seuil)/100.
           if (valTrouvee < seuilBas) or (valTrouvee > seuilHaut) :
-             print "Probleme sur le nombre de Mailles de type : ", nomColonne
-             print "         nb reference : ", valAvant
-             print "         seuil        : ", seuil
-             print "         nb           : ", valTrouvee
+             print("Probleme sur le nombre de Mailles de type : ", nomColonne)
+             print("         nb reference : ", valAvant)
+             print("         seuil        : ", seuil)
+             print("         nb           : ", valTrouvee)
              return True
       return False
 
@@ -94,10 +94,10 @@ class Ref:
           seuilHaut=valAvant*(100+seuil)/100
           seuilBas=valAvant*(100-seuil)/100
           if (valTrouvee < seuilBas) or (valTrouvee > seuilHaut) :
-             print "Probleme sur le nombre de Mailles de type : ", nomColonne, "pour le groupe ", nomGroupe
-             print "         nb reference : ", valAvant
-             print "         seuil        : ", seuil
-             print "         nb           : ", valTrouvee
+             print("Probleme sur le nombre de Mailles de type : ", nomColonne, "pour le groupe ", nomGroupe)
+             print("         nb reference : ", valAvant)
+             print("         seuil        : ", seuil)
+             print("         nb           : ", valTrouvee)
              return True
       return False
 
index 08e1a8f259ff614fe20f677f89b08044a24f9a1d..e7d2156c0fd1097fc3a1717634f4d8566bb1b648 100644 (file)
@@ -4,7 +4,7 @@ def writeFile( fn, txt = None):
 
    if txt == None : return
    if fn  == None : return
-   fn = unicode(fn)
+   fn = str(fn)
    try:
       f = open(fn, 'wb')
       f.write(txt)
index 5f227debf30506358083198bb998d3914a859dbe..de84fd7ae15fda6fe949efa342a032127efa01b5 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 import sys, os
 rep=os.path.dirname(os.path.abspath(__file__))
@@ -18,8 +18,8 @@ def completeDatabase(fichier,table,enregistrement):
       nbCols=model.columnCount() -1
       if table == "TableGroupesRef" : nbCols==nbCols+1
       if len(enregistrement) != nbCols  :
-         print "mauvais nb de valeurs"
-         print "Attention, ne pas renter d'Id"
+         print("mauvais nb de valeurs")
+         print("Attention, ne pas renter d'Id")
       if table == "TableGroupesRef" : matable.insereLigne(enregistrement)
       else : matable.insereLigneAutoId(enregistrement)
       maBase.close()
@@ -27,17 +27,18 @@ def completeDatabase(fichier,table,enregistrement):
 
 
 if __name__ == "__main__":
-     from optparse import OptionParser
-     p=OptionParser()
-     p.add_option('-d',dest='database',default="myMesh.db",help='nom de la database')
-     p.add_option('-t',dest='table',help='nom de la table a completer')
-     options, args = p.parse_args()
-     if  options.table==None : 
-         print  "table obligatoire"
+     from argparse import ArgumentParser
+     p=ArgumentParser()
+     p.add_argument('-d',dest='database',default="myMesh.db",help='nom de la database')
+     p.add_argument('table',help='nom de la table a completer')
+     p.add_argument('enregistrement', nargs="+")
+     args = p.parse_args()
+     if args.table is None : 
+         print("table obligatoire")
          exit()
-     if  options.table not in ("TableMaillages","TableMailleurs","TableGroupesRef","TableVersions") : 
-         print  "la table doit etre : TableMaillages ou TableMailleurs ou TableGroupesRef ou TableVersions" 
+     good_tables = ("TableMaillages","TableMailleurs","TableGroupesRef","TableVersions")
+     if args.table not in good_tables:
+         print("la table doit etre : %s" % ' ou '.join(good_tables))
          exit()
-     enregistrement=tuple(args)
-     completeDatabase(options.database,options.table,enregistrement)
+     completeDatabase(args.database,args.table,args.enregistrement)
 
index 64738b3d2f7dca4a39396ac679f2a63fe0b0c6be..29fd6860ca76f1531c27d55bf61559eefa4fbf0f 100755 (executable)
@@ -8,21 +8,21 @@ from Base.versions import  Chercheversion
 
 
 if __name__ == "__main__":
-      from optparse import OptionParser
-      p=OptionParser()
-      p.add_option('-s',dest='salomePath',help='chemin du runAppli de la version a comparer',default="Appli")
-      p.add_option('-v',dest='version',help='id de la version a comparer',default=None)
-      p.add_option('-r',dest='versionRef',help='liste des id des versions de reference',default=None)
-      p.add_option('-d',dest='database',default="myMesh.db",help='nom de la database')
-      p.add_option('-f',dest='fileHtml',default="/tmp/toto.htm",help='nom du fichier produit')
-      options, args = p.parse_args()
+      from argparse import ArgumentParser
+      p=ArgumentParser()
+      p.add_argument('-s',dest='salomePath',help='chemin du lanceur salome de la version a comparer',default="Appli")
+      p.add_argument('-v',dest='version',help='id de la version a comparer',default=None)
+      p.add_argument('-r',dest='versionRef',help='liste des id des versions de reference',default=None)
+      p.add_argument('-d',dest='database',default="myMesh.db",help='nom de la database')
+      p.add_argument('-f',dest='fileHtml',default="/tmp/toto.htm",help='nom du fichier produit')
+      args = p.parse_args()
 
-      if options.version==None : 
-         options.version=Chercheversion(options.salomePath)
+      if args.version is None : 
+         args.version=Chercheversion(args.salomePath)
       exit
 
-      maBase=Base(options.database)
+      maBase=Base(args.database)
       maBase.initialise()
-      maBase.compare(options.version,options.versionRef,options.fileHtml)
+      maBase.compare(args.version,args.versionRef,args.fileHtml)
       maBase.close()
 
index ad375ed5728bb303d074b9a9d75b4920595c0845..d108f7372bc2c078c944f77ef45ac03da2362aa7 100755 (executable)
@@ -13,9 +13,9 @@ def creeDatabase(fichier):
 
 
 if __name__ == "__main__":
-     from optparse import OptionParser
-     p=OptionParser()
-     p.add_option('-d',dest='database',default="myMesh.db",help='nom de la database')
-     options, args = p.parse_args()
-     creeDatabase(options.database )
+     from argparse import ArgumentParser
+     p=ArgumentParser()
+     p.add_argument('-d',dest='database',default="myMesh.db",help='nom de la database')
+     args = p.parse_args()
+     creeDatabase(args.database )
 
index aadb04dfec5b442462057e33f6bf5506f30fad01..14321677aea6814f959a0c40dcca3de74b510769 100755 (executable)
@@ -1,7 +1,7 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 
 from qtsalome import *
-from Gui.myMain_ui import Ui_Gestion
+from .Gui.myMain_ui import Ui_Gestion
 import sys
 
 
@@ -30,19 +30,19 @@ class MonAppli(Ui_Gestion,QWidget):
          pass
 
      def BCreePressed(self):
-         from Gui.monNomBase import DataBaseName
+         from .Gui.monNomBase import DataBaseName
          maW=DataBaseName(self)
          maW.exec_()
-         from createDatabase import creeDatabase
+         from .createDatabase import creeDatabase
          creeDatabase(self.nomBase)
 
      def BVuePressed(self):
          if self.nomBase == "" :
-            from Gui.monNomBase import DataBaseName
+            from .Gui.monNomBase import DataBaseName
             maW=DataBaseName(self)
             maW.exec_()
-         from Gui.maFenetreChoix import MaFenetreChoix
-         from Base.dataBase import Base
+         from .Gui.maFenetreChoix import MaFenetreChoix
+         from .Base.dataBase import Base
          maBase=Base(self.nomBase)
          maBase.initialise()
          window = MaFenetreChoix(maBase)
index 4c19ab467d1bdf3421170bb16e2e3ae8e3104fa7..e437132d61330b20342021ce3ebd04f173fc7c25 100755 (executable)
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
+#!/usr/bin/env python3
 
 import sys
 import os
@@ -8,25 +7,25 @@ from Base.versions import Chercheversion
 
 
 if __name__ == "__main__":
-      from optparse import OptionParser
-      p=OptionParser()
-      p.add_option('-a',dest='all',action="store_true", default=False,help='passe l ensemble des Tests')
-      p.add_option('-s',dest='salomePath',help='chemin du runAppli',default="Appli")
-      p.add_option('-v',dest='version',help='id de la version')
-      p.add_option('-d',dest='database',default="myMesh.db",help='nom de la database')
-      p.add_option('-f',dest='force',default=True,help='force la passage des jobs meme si l execution a deja eu lieu sur cette machine pour cette version de salome')
-      options, args = p.parse_args()
-      if len(args) == 0  and options.all== False: 
-        print "Enter -a ou un numero de job"
-         print 2
-         exit()
-      if options.salomePath==None : 
-         print  "chemin du runAppli obligatoire"
-         exit()
-      if options.version==None : 
-         options.version=Chercheversion(options.salomePath)
-      maBase=Base(options.database)
-      maBase.initialise()
-      maBase.passeJobs(options.all,options.salomePath,options.version,options.force,args)
-      maBase.close()
-
+    from argparse import ArgumentParser
+    p=ArgumentParser()
+    p.add_argument('-a',dest='all_tests',action="store_true", default=False,help='passe l ensemble des Tests')
+    p.add_argument('-s',dest='salomePath',help='chemin du lanceur salome',default="Appli")
+    p.add_argument('-v',dest='version',help='id de la version')
+    p.add_argument('-d',dest='database',default="myMesh.db",help='nom de la database')
+    p.add_argument('-f',dest='force',default=True,help='force la passage des jobs meme si l execution a deja eu lieu sur cette machine pour cette version de salome')
+    p.add_argument('job', nargs='*')
+    args = p.parse_args()
+    if len(args.job) == 0  and args.all_tests == False:
+        print("Enter -a ou un numero de job")
+        print(2)
+        exit()
+    if args.salomePath is None :
+        print("chemin du lanceur salome obligatoire")
+        exit()
+    if args.version is None :
+        args.version=Chercheversion(args.salomePath)
+    maBase=Base(args.database)
+    maBase.initialise()
+    maBase.passeJobs(args.all_tests,args.salomePath,args.version,args.force,args.job)
+    maBase.close()
index c1e90255b6e7a8bd3704d0acc589401956a25875..3109bfe8aad4c8ac3de005f910636ea4d3712bfb 100644 (file)
@@ -35,8 +35,8 @@ verbose = True
 
 force = os.getenv("FORCE_DISTENE_LICENSE_FILE")
 if force != None:
-  os.environ["DISTENE_LICENSE_FILE"] = force
-  os.environ["DLIM8VAR"] = "NOTHING"
+    os.environ["DISTENE_LICENSE_FILE"] = force
+    os.environ["DLIM8VAR"] = "NOTHING"
 
 class MonViewText(Ui_ViewExe, QDialog):
     """
@@ -54,7 +54,7 @@ class MonViewText(Ui_ViewExe, QDialog):
         self.monExe.readyReadStandardOutput.connect( self.readFromStdOut )
         self.monExe.readyReadStandardError.connect( self.readFromStdErr )
         self.monExe.finished.connect( self.finished )
-      
+
         cmds = ''
         ext = ''
         if sys.platform == "win32":
@@ -73,14 +73,14 @@ class MonViewText(Ui_ViewExe, QDialog):
         cmds += 'echo %s\n' % txt #to see what is compute command
         cmds += txt+'\n'
         cmds += 'echo "END_OF_MGSurfOpt"\n'
-        
+
         nomFichier = os.path.splitext(self.parent().fichierOut)[0] + ext
         with open(nomFichier, 'w') as f:
-          f.write(cmds)
+            f.write(cmds)
         self.make_executable(nomFichier)
-        
-        if verbose: print("INFO: MGSurfOpt launch script file: %s" % nomFichier)
-        
+
+        if verbose: print(("INFO: MGSurfOpt launch script file: %s" % nomFichier))
+
         self.monExe.start(nomFichier)
         self.monExe.closeWriteChannel()
         self.enregistreResultatsDone=False
@@ -96,30 +96,30 @@ class MonViewText(Ui_ViewExe, QDialog):
         savedir=os.environ['HOME']
         fn = QFileDialog.getSaveFileName(None,"Save File",savedir)
         if fn.isNull() : return
-        ulfile = os.path.abspath(unicode(fn))
+        ulfile = os.path.abspath(str(fn))
         try:
-           f = open(fn, 'wb')
-           f.write(str(self.TB_Exe.toPlainText()))
-           f.close()
-        except IOError, why:
-           QMessageBox.critical(self, 'Save File',
-               'The file <b>%1</b> could not be saved.<br>Reason: %2'%(unicode(fn), str(why)))
+            f = open(fn, 'wb')
+            f.write(str(self.TB_Exe.toPlainText()))
+            f.close()
+        except IOError as why:
+            QMessageBox.critical(self, 'Save File',
+                 'The file <b>%1</b> could not be saved.<br>Reason: %2'%(str(fn), str(why)))
 
     def readFromStdErr(self):
         a=self.monExe.readAllStandardError()
-        self.TB_Exe.append(unicode(a.data().encode()))
+        self.TB_Exe.append(str(a.data().encode()))
 
     def readFromStdOut(self) :
         a=self.monExe.readAllStandardOutput()
-        aa=unicode(a.data())
-        self.TB_Exe.append(aa)    
-    
+        aa=str(a.data())
+        self.TB_Exe.append(aa)
+
     def finished(self):
         self.parent().enregistreResultat()
         self.enregistreResultatsDone=True
-    
+
     def theClose(self):
-      if not self.enregistreResultatsDone:
-        self.parent().enregistreResultat()
-        self.enregistreResultatsDone=True
-      self.close()
+        if not self.enregistreResultatsDone:
+            self.parent().enregistreResultat()
+            self.enregistreResultatsDone=True
+        self.close()
index efdaa315438bd6a50f7fa7b029933f9ef6cd985f..4aac5cf7c28cfd89d9532fe5d37049272ec55901 100644 (file)
@@ -130,13 +130,13 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     import SMESH
     from salome.kernel import studyedit
     from salome.smesh import smeshBuilder
-    smesh = smeshBuilder.New(salome.myStudy)
+    smesh = smeshBuilder.New()
     
     if not os.path.isfile(self.fichierOut):
       QMessageBox.warning(self, "Compute", "Result file "+self.fichierOut+" not found")
 
-    maStudy=studyedit.getActiveStudy()
-    smesh.SetCurrentStudy(maStudy)
+    maStudy=salome.myStudy
+    smesh.UpdateStudy()
     (outputMesh, status) = smesh.CreateMeshesFromGMF(self.fichierOut)
     name=str(self.LE_MeshSmesh.text())
     initialMeshFile=None
@@ -178,7 +178,7 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     newLink=monStudyBuilder.NewObject(SOMesh)
     monStudyBuilder.Addreference(newLink, newStudyIter)
 
-    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(False)
+    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser()
     self.num+=1
     return True
 
@@ -223,7 +223,7 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     #myStudy.IsStudyLocked()
     myComponent = myStudy.FindComponent(name)
     if myComponent == None:
-      print "myComponent not found, create"
+      print("myComponent not found, create")
       myComponent = myBuilder.NewComponent(name)
     AName = myBuilder.FindOrCreateAttribute(myComponent, "AttributeName")
     AName.SetValue(name)
@@ -236,9 +236,9 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     ACmt = myBuilder.FindOrCreateAttribute(myObject, "AttributeComment")
     ACmt.SetValue(datai)
 
-    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(False)
+    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser()
     self.num += 1
-    if verbose: print("save %s in Object Browser done: %s\n%s" % (name, myObject.GetID(), datai))
+    if verbose: print(("save %s in Object Browser done: %s\n%s" % (name, myObject.GetID(), datai)))
     return True
 
   def PBSaveHypPressed(self):
@@ -254,10 +254,10 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     QMessageBox.warning(self, "Save", "waiting for fix: Object Browser will not display hypothesis")
     
     if verbose: print("save hypothesis in Object Browser")
-    smesh = smeshBuilder.New(salome.myStudy)
+    smesh = smeshBuilder.New()
 
-    maStudy=studyedit.getActiveStudy()
-    smesh.SetCurrentStudy(maStudy)
+    maStudy=salome.myStudy
+    smesh.UpdateStudy()
 
     self.editor = studyedit.getStudyEditor()
     moduleEntry=self.editor.findOrCreateComponent("SMESH","SMESH")
@@ -273,9 +273,9 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     data = self.getResumeData(separator=" ; ")
     self.editor.setAttributeValue(newStudyIter, "AttributeComment", data)
     
-    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser(False)
+    if salome.sg.hasDesktop(): salome.sg.updateObjBrowser()
     self.num += 1
-    if verbose: print("save %s in Object Browser done:\n%s" % (name, data))
+    if verbose: print(("save %s in Object Browser done:\n%s" % (name, data)))
     return True
 
   def SP_toStr(self, widget):
@@ -413,7 +413,7 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     if fd.exec_():
       infile = fd.selectedFiles()[0]
       self.LE_MeshFile.setText(infile)
-      self.fichierIn=unicode(infile).encode("latin-1")
+      self.fichierIn=str(infile).encode("latin-1")
       self.MeshIn=""
       self.LE_MeshSmesh.setText("")
 
@@ -422,7 +422,7 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     if fd.exec_():
       infile = fd.selectedFiles()[0]
       self.LE_ParamsFile.setText(infile)
-      self.paramsFile=unicode(infile).encode("latin-1")
+      self.paramsFile=str(infile).encode("latin-1")
 
   def meshFileNameChanged(self):
     self.fichierIn=str(self.LE_MeshFile.text())
@@ -452,7 +452,7 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     from salome.smesh.smeshstudytools import SMeshStudyTools
     from salome.gui import helper as guihelper
     from salome.smesh import smeshBuilder
-    smesh = smeshBuilder.New(salome.myStudy)
+    smesh = smeshBuilder.New()
 
     mySObject, myEntry = guihelper.getSObjectSelected()
     if CORBA.is_nil(mySObject) or mySObject==None:
@@ -504,7 +504,7 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
       except:
         pass
       
-    style = unicode(self.style).encode("latin-1")
+    style = str(self.style).encode("latin-1")
     # Translation of old Yams options to new MG-SurfOpt options
     if   style == "0" :
       self.commande+= " --optimisation only"
@@ -543,7 +543,7 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
     self.commande+=" --in "  + self.fichierIn
     self.commande+=" --out " + self.fichierOut
     
-    print self.commande
+    print(self.commande)
     return True
 
   def clean(self):
index 20eea53c69511b767ef3f6a63d4e6275f25983fb..afaa40f3a7fbd1ef483d14d0678f0427e572125d 100755 (executable)
@@ -22,9 +22,8 @@
 # if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
 
 def YamsLct(context):
-  # get context study, studyId, salomeGui
+  # get context study, salomeGui
   study = context.study
-  studyId = context.studyId
   sg = context.sg
   
   import os
index 2f87a5cf195fa35526b0c432df3f9e2493c26665..9ab6df413ab178a597490c3dbb12146988e48dbf 100644 (file)
@@ -30,7 +30,6 @@ SET(_plugin_SCRIPTS
   __init__.py
   ellipse.py
   genereCrack.py
-  images_rc.py
   main.py
   output.py
   rectangle.py
@@ -49,8 +48,15 @@ IF(SALOME_BUILD_GUI)
   SET(_pyuic_FILES
     zcracks.ui
   )
+
+# qrc files / to be processed by pyrcc
+SET(_pyqrc_FILES
+  images.qrc
+)
+
   # scripts / pyuic wrappings
-  PYQT_WRAP_UIC(_pyuic_SCRIPTS ${_pyuic_FILES} TARGET_NAME _target_name_pyuic)
+  PYQT_WRAP_UIC(_pyuic_SCRIPTS ${_pyuic_FILES} TARGET_NAME _target_name_pyuic OPTIONS "--import-from=Zcracks" "--resource-suffix=_qrc")
+  PYQT_WRAP_QRC(_pyqrc_SCRIPTS ${_pyqrc_FILES})
 ENDIF(SALOME_BUILD_GUI)
 
 # --- rules ---
@@ -59,6 +65,7 @@ SALOME_INSTALL_SCRIPTS("${_plugin_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/Zcracks)
 SALOME_INSTALL_SCRIPTS("${_command_SCRIPTS}" ${SALOME_INSTALL_BINS})
 IF(SALOME_BUILD_GUI)
   SALOME_INSTALL_SCRIPTS("${_pyuic_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/Zcracks TARGET_NAME _target_name_pyuic_py)
+  SALOME_INSTALL_SCRIPTS("${_pyqrc_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/Zcracks)
   # add dependency of compiled py files on uic files in order
   # to avoid races problems when compiling in parallel
   ADD_DEPENDENCIES(${_target_name_pyuic_py} ${_target_name_pyuic})
index 464619e2b93e5214bd6a7822836a3d66c23fbafe..1f5474f9d4674f8e715f91033bc720abe83a9d53 100644 (file)
@@ -1,7 +1,7 @@
 
 import os, tempfile, shutil
-import utilityFunctions as uF
-from output import message
+from . import utilityFunctions as uF
+from .output import message
 
 def medToGeo(medFile, geoFile, tmpdir, opt=[], verbose=0):
   medLoc=os.path.dirname(medFile)
@@ -74,10 +74,10 @@ def launchZcrack(minS, maxS,
   zfile.write('   convert_surface("%s");\n' %crackN.replace('.geo',''))
   zfile.write('   cracked_name="%s";\n' %crackedN.replace('.geo',''))
 
-  if Gfac!='': zfile.write('   faset_names="%s";\n' %(Gfac[0] if type(Gfac)==list else Gfac))
-  if Gnod!='': zfile.write('   nset_names="%s";\n' %(Gnod[0] if type(Gnod)==list else Gnod))
-  if Gvol!='': zfile.write('   elset_names="%s";\n' %(Gvol[0] if type(Gvol)==list else Gvol))
-  if Gedg!='': zfile.write('   liset_names="%s";\n' %(Gedg[0] if type(Gedg)==list else Gedg))
+  if Gfac!='': zfile.write('   faset_names="%s";\n' %(Gfac[0] if isinstance(Gfac, list) else Gfac))
+  if Gnod!='': zfile.write('   nset_names="%s";\n' %(Gnod[0] if isinstance(Gnod, list) else Gnod))
+  if Gvol!='': zfile.write('   elset_names="%s";\n' %(Gvol[0] if isinstance(Gvol, list) else Gvol))
+  if Gedg!='': zfile.write('   liset_names="%s";\n' %(Gedg[0] if isinstance(Gedg, list) else Gedg))
   if surfOpt!='':
     zfile.write('   yams_options="%s";\n' %surfOpt)
 
@@ -114,18 +114,18 @@ def insertCrack(data, names, tmpdir='./zcracks_temp', verbose=0):
   maxS=data['maxSize'][0]
   extrL=data['extractLength'][0]
 
-  grad = data['gradation'][0] if 'gradation' in data.keys() else 1.3
-  quad = data['quad'] if 'quad' in data.keys() else False
-  cas2D = data['is2D'] if 'is2D' in data.keys() else False
-  refine = data['refine'] if 'refine' in data.keys() else False
-  nbLay = data['layers'][0] if 'layers' in data.keys() else 5
-  nbIter = data['iterations'][0] if 'iterations' in data.keys() else 2
-
-  Gvol = data['grVol'] if 'grVol' in data.keys() else ''
-  Gfac = data['grFace'] if 'grFace' in data.keys() else ''
-  Gedg = data['grEdge'] if 'grEdge' in data.keys() else ''
-  Gnod = data['grNodes'] if 'grNodes' in data.keys() else ''
-  surfOpt = data['surfopt'] if 'surfopt' in data.keys() else ''
+  grad = data['gradation'][0] if 'gradation' in list(data.keys()) else 1.3
+  quad = data['quad'] if 'quad' in list(data.keys()) else False
+  cas2D = data['is2D'] if 'is2D' in list(data.keys()) else False
+  refine = data['refine'] if 'refine' in list(data.keys()) else False
+  nbLay = data['layers'][0] if 'layers' in list(data.keys()) else 5
+  nbIter = data['iterations'][0] if 'iterations' in list(data.keys()) else 2
+
+  Gvol = data['grVol'] if 'grVol' in list(data.keys()) else ''
+  Gfac = data['grFace'] if 'grFace' in list(data.keys()) else ''
+  Gedg = data['grEdge'] if 'grEdge' in list(data.keys()) else ''
+  Gnod = data['grNodes'] if 'grNodes' in list(data.keys()) else ''
+  surfOpt = data['surfopt'] if 'surfopt' in list(data.keys()) else ''
 
 
   if not os.path.isdir(tmpdir): os.mkdir(tmpdir)
index ed56ab165946dcf6ec85c0dfaf6d5b140165b80e..58b226b5657cb7e4ccd13edcbfd1adc85acdc3f0 100644 (file)
@@ -1,6 +1,6 @@
 import sys, os, shutil, pickle, tempfile
-import main, genereCrack, Zset
-import utilityFunctions as uF
+from Zcracks import main, genereCrack, Zset
+from Zcracks import utilityFunctions as uF
 
 os.environ['QT_QPA_PLATFORM_PLUGIN_PATH']=os.path.join(os.environ['QTDIR'],'plugins','platforms')
 
@@ -19,16 +19,16 @@ def IHM():
 
 def SCRIPT(dataFile=None, data=None, dim=3, names=None):
   if dim!=3 and dim!=2:
-    print 'ERROR'
+    print('ERROR')
     return(False)
 
   if dataFile==None and data==None:
-    print 'One of dataFile or data is mandatory'
+    print('One of dataFile or data is mandatory')
     return(False)
 
   if data==None: data=pickle.load(open(dataFile,'r'))
 
-  print data
+  print(data)
 
   tmpdir=tempfile.mkdtemp(prefix='tmpZcracks')
 
@@ -45,7 +45,7 @@ def SCRIPT(dataFile=None, data=None, dim=3, names=None):
   for f in [crackMed, crackedMed, saneGeo, crackGeo, crackedGeo]:
     if os.path.isfile(f): os.remove(f)
 
-  print crackMed
+  print(crackMed)
   genereCrack.main(data, crackMed)
   goOn=os.path.isfile(crackMed)
 
index 2ab20472e82e9454d87007c0451839a8cf33b002..94ff1c0bef52ab0414dd8cab7eff64f7bf4a6bb1 100644 (file)
@@ -7,10 +7,9 @@
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
+notebook = salome_notebook.NoteBook()
 
 ###
 ### GEOM component
@@ -25,7 +24,7 @@ def cube3D(L, N, outFile):
   N=int(N)
   from salome.geom import geomBuilder
 
-  geompy = geomBuilder.New(theStudy)
+  geompy = geomBuilder.New()
 
   eps=L*1.e-6
 
@@ -69,7 +68,7 @@ def cube3D(L, N, outFile):
   from salome.smesh import smeshBuilder
   import SMESH
 
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
   Nb_Segments_1 = smesh.CreateHypothesis('NumberOfSegments')
   Nb_Segments_1.SetNumberOfSegments( N )
   Length_From_Edges_1 = smesh.CreateHypothesis('LengthFromEdges')
@@ -109,10 +108,10 @@ def cube3D(L, N, outFile):
     aFilter_1.SetMesh(Maillage_1.GetMesh())
     FACE_temp = Maillage_1.GroupOnFilter( SMESH.FACE, noms[cont], aFilter_1 )
  
-  Maillage_1.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+  Maillage_1.ExportMED(outFile)
 
   #if salome.sg.hasDesktop():
-    #salome.sg.updateObjBrowser(1)
+    #salome.sg.updateObjBrowser()
 
 
 
@@ -121,7 +120,7 @@ def cube2D(L, N, outFile):
   N=int(N)
   from salome.geom import geomBuilder
 
-  geompy = geomBuilder.New(theStudy)
+  geompy = geomBuilder.New()
 
   eps=L*1.e-6
 
@@ -156,7 +155,7 @@ def cube2D(L, N, outFile):
   from salome.smesh import smeshBuilder
   import SMESH
 
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
   Nb_Segments_1 = smesh.CreateHypothesis('NumberOfSegments')
   Nb_Segments_1.SetNumberOfSegments( N )
   Length_From_Edges_1 = smesh.CreateHypothesis('LengthFromEdges')
@@ -191,7 +190,7 @@ def cube2D(L, N, outFile):
     aFilter_1.SetMesh(Maillage_1.GetMesh())
     EDGE_temp = Maillage_1.GroupOnFilter( SMESH.EDGE, noms[cont], aFilter_1 )
  
-  Maillage_1.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+  Maillage_1.ExportMED(outFile)
 
   #if salome.sg.hasDesktop():
-    #salome.sg.updateObjBrowser(1)
\ No newline at end of file
+    #salome.sg.updateObjBrowser()
index 4672776ec901f77b553ea1717468fb5be5a746fc..592305cce677585d3e9ceb3417ede4d1d66cdb90 100644 (file)
@@ -1,7 +1,7 @@
 
 from Zcracks import genereCrack, Zset
 from Zcracks import utilityFunctions as uF
-import genereCube
+from . import genereCube
 
 from math import sqrt
 
@@ -19,7 +19,7 @@ import string
 #tmpdir = "/local00/home/B27118/projets/Zcracks/Zcracks/casTests/tmpdir"
 #if not os.path.isdir(tmpdir): os.mkdir(tmpdir)
 tmpdir=tempfile.mkdtemp(prefix='tmpZcracks')
-print "tmpdir=", tmpdir
+print("tmpdir=", tmpdir)
 
 #meshgemsdir=os.environ('MESHGEMSHOME')
 #if len(meshgemsdir) > 0:
@@ -27,7 +27,7 @@ print "tmpdir=", tmpdir
   #uF.removeFromSessionPath('LD_LIBRARY_PATH', meshgems)
 
 def LAUNCH(listCas=[]):
-  if type(listCas)!=list: listCas=[listCas]
+  if not isinstance(listCas, list): listCas=[listCas]
 
   N=20
   L=1.
@@ -194,18 +194,18 @@ def LAUNCH(listCas=[]):
 
   OK=[]
   NOOK=[]
-  for s in synthese.keys():
+  for s in synthese:
     if synthese[s]:
       OK.append(s)
     else:
       NOOK.append(s)
 
-  print 'OK:'
-  print OK
-  print ' '
-  print 'NOOK:'
-  print NOOK
-  print ' '
+  print('OK:')
+  print(OK)
+  print(' ')
+  print('NOOK:')
+  print(NOOK)
+  print(' ')
 
   return(synthese)
 
index 1eadd07c6145483a824e0f95dcab2d5d8d2a1f2b..e6f569562b2105dfa642d1ad1c26517a3d6d4361 100644 (file)
@@ -2,7 +2,7 @@
 import os, tempfile
 
 directory=tempfile.mktemp(prefix='tmpZcracks')
-print "directory=", tmpdir
+print("directory=", tmpdir)
 
 # Tous les cas
 listCas=['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21']
@@ -23,5 +23,5 @@ for cas in listCas:
 
   synthese[cas]= os.path.isfile(result)
 
-print synthese
+print(synthese)
 
index 9ffeb8b66ca66bce4ba02b8bd9ad369d93d37d93..4aa93106ec9a8b0ff4c6d3020491952b9988f987 100644 (file)
@@ -9,10 +9,9 @@ import sys, numpy
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
+notebook = salome_notebook.NoteBook()
 
 ###
 ### GEOM component
@@ -22,8 +21,8 @@ import GEOM
 from salome.geom import geomBuilder
 import math
 import SALOMEDS
-import utilityFunctions as uF
-from output import message
+from . import utilityFunctions as uF
+from .output import message
 
 #ellipse.generate(data_demi_grand_axe, data_centre, data_normale,data_direction, data_demi_petit_axe, data_angle, rayon_entaille,extension, outFile)
 #if True:
@@ -45,7 +44,7 @@ def generate(data_demi_grand_axe, data_centre, data_normale,
   Vnormale, Vdirection, Vortho = uF.calcCoordVectors(data_normale, data_direction)
   Vcentre = numpy.array(data_centre)
 
-  geompy = geomBuilder.New(theStudy)
+  geompy = geomBuilder.New()
 
   O = geompy.MakeVertex(0, 0, 0)
   OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -172,7 +171,7 @@ def generate(data_demi_grand_axe, data_centre, data_normale,
 
   import  SMESH, SALOMEDS
   from salome.smesh import smeshBuilder
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
 
   A=numpy.pi/(30.)
   minAxes=numpy.min([data_demi_grand_axe,data_demi_petit_axe])
@@ -189,14 +188,14 @@ def generate(data_demi_grand_axe, data_centre, data_normale,
   Maillage=uF.meshCrack(FACE_FISSURE, minSize, maxSize, chordal, dim)
 
   try:
-    Maillage.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    Maillage.ExportMED(outFile)
     smesh.SetName(Maillage.GetMesh(), 'MAILLAGE_FISSURE')
   except:
-    print 'ExportToMEDX() failed. Invalid file name?'
+    print('ExportMED() failed. Invalid file name?')
 
 
   ## Set names of Mesh objects
 
 
   if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(1)
+    salome.sg.updateObjBrowser()
index 372772b4311ba2f91f62aa4f3e97928c838976c5..ebec86ad4d31c02a889b8438625790bf217cae5b 100644 (file)
@@ -1,7 +1,7 @@
 import os, shutil
-import sphere, ellipse, rectangle
-import utilityFunctions as uF
-from output import message
+from . import sphere, ellipse, rectangle
+from . import utilityFunctions as uF
+from .output import message
 
 def main(data, outFile):
   activeCrack=data['crack']['actif']
@@ -32,7 +32,7 @@ def generateEllipse(crack, outFile):
     res=False
   demiGrandAxe=crack['Rayon'][0]
 
-  if 'Rayon 2' not in crack.keys(): crack['Rayon 2']=[]
+  if 'Rayon 2' not in list(crack.keys()): crack['Rayon 2']=[]
   if len(crack['Rayon 2'])==0:
     demiPetitAxe=demiGrandAxe
   else:
@@ -54,7 +54,7 @@ def generateEllipse(crack, outFile):
     res=False
   normale=crack['Normale']
 
-  if 'Direction' not in crack.keys(): crack['Direction']=[]
+  if 'Direction' not in list(crack.keys()): crack['Direction']=[]
   if len(crack['Direction'])==0:
     if normale==[1.,0.,0.]:
       direction=[0.,1.,0.]
@@ -71,7 +71,7 @@ def generateEllipse(crack, outFile):
       message('E','Normale and Direction are equals',goOn=True)
       res=False
 
-  if 'Angle' not in crack.keys(): crack['Angle']=[]
+  if 'Angle' not in list(crack.keys()): crack['Angle']=[]
   if len(crack['Angle'])==0:
     angle=0.0
   else:
@@ -81,7 +81,7 @@ def generateEllipse(crack, outFile):
       res=False
     angle=crack['Angle'][0]
 
-  if 'Rayon entaille' not in crack.keys(): crack['Rayon entaille']=[]
+  if 'Rayon entaille' not in list(crack.keys()): crack['Rayon entaille']=[]
   if len(crack['Rayon entaille'])==0:
     rayon_entaille=0.0
   else:
@@ -91,7 +91,7 @@ def generateEllipse(crack, outFile):
       res=False
     rayon_entaille=crack['Rayon entaille'][0]
 
-  if 'Extension' not in crack.keys(): crack['Extension']=[]
+  if 'Extension' not in list(crack.keys()): crack['Extension']=[]
   if len(crack['Extension'])==0:
     extension=0.0
   else:
@@ -117,7 +117,7 @@ def generateRectangle(crack, outFile):
     res=False
   longueur=crack['Longueur'][0]
 
-  if 'Largeur' not in crack.keys(): crack['Largeur']=[]
+  if 'Largeur' not in list(crack.keys()): crack['Largeur']=[]
   if len(crack['Largeur'])==0:
     largeur=longueur
   else:
@@ -145,7 +145,7 @@ def generateRectangle(crack, outFile):
     res=False
   direction=crack['Direction']
 
-  if 'Angle' not in crack.keys(): crack['Angle']=[]
+  if 'Angle' not in list(crack.keys()): crack['Angle']=[]
   if len(crack['Angle'])==0:
     angle=0.0
   else:
@@ -155,7 +155,7 @@ def generateRectangle(crack, outFile):
       res=False
     angle=crack['Angle'][0]
 
-  if 'Rayon' not in crack.keys(): crack['Rayon']=[]
+  if 'Rayon' not in list(crack.keys()): crack['Rayon']=[]
   if len(crack['Rayon'])==0:
     rayon=0.0
   else:
@@ -165,7 +165,7 @@ def generateRectangle(crack, outFile):
       res=False
     rayon=crack['Rayon'][0]
 
-  if 'Rayon entaille' not in crack.keys(): crack['Rayon entaille']=[]
+  if 'Rayon entaille' not in list(crack.keys()): crack['Rayon entaille']=[]
   if len(crack['Rayon entaille'])==0:
     rayon_entaille=0.0
   else:
@@ -212,13 +212,12 @@ def generateCustom(crack, outFile):
 
   import salome
   salome.salome_init()
-  theStudy = salome.myStudy
   import salome_notebook
-  notebook = salome_notebook.NoteBook(theStudy)
+  notebook = salome_notebook.NoteBook()
   import  SMESH, SALOMEDS
   from salome.smesh import smeshBuilder
 
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
   ([Maillage_1], status) = smesh.CreateMeshesFromMED(crack['med file'])
   isCrack=False
   for group in Maillage_1.GetGroups():
@@ -228,7 +227,7 @@ def generateCustom(crack, outFile):
   else:
     Group_1 = Maillage_1.CreateEmptyGroup( SMESH.NODE, 'crack' )
     nbAdd = Group_1.AddFrom( Maillage_1.GetMesh() )
-    Maillage_1.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    Maillage_1.ExportMED(outFile)
   return(True)
 
 
diff --git a/src/Tools/ZCracksPlug/images_rc.py b/src/Tools/ZCracksPlug/images_rc.py
deleted file mode 100644 (file)
index c33e734..0000000
+++ /dev/null
@@ -1,7580 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Resource object code
-#
-# Created: mer. oct. 19 07:56:41 2016
-#      by: The Resource Compiler for PyQt (Qt v4.8.4)
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt5 import QtCore
-
-qt_resource_data = "\
-\x00\x00\x5a\xbe\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x00\xed\x00\x00\x00\xed\x08\x06\x00\x00\x00\x53\x4d\xf2\x8f\
-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x12\x74\x00\x00\x12\x74\
-\x01\xde\x66\x1f\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x20\x00\x49\x44\
-\x41\x54\x78\x9c\xec\x9d\x77\x58\x54\x47\xdb\xc6\xef\x39\x65\x97\
-\xbe\x54\x0b\x45\x91\x22\x20\x88\x88\xbd\x60\x37\x1a\xbb\xc6\x68\
-\x8a\xbd\xa4\xf8\xea\x9b\xa8\xd1\xa8\x31\x9a\xbc\x26\x1a\x5b\x8c\
-\x26\x31\xa6\xa8\x31\xc6\x24\x16\xcc\x67\x43\x05\x3b\xb1\x00\x62\
-\x89\x05\x94\x62\xa1\x29\x82\xf4\xb6\xbb\xe7\x9c\xef\x8f\x75\x17\
-\x96\xa5\xb3\xb0\x45\x7e\xd7\xc5\x05\x7b\xce\xcc\x9c\x67\x97\xbd\
-\xcf\xcc\x99\x79\xe6\x79\x88\x20\x08\x68\xc2\x30\x21\x84\x88\x01\
-\x58\xbe\xf8\xb1\x28\xf3\xb7\x23\x00\x4f\x00\x71\x00\x52\x01\xe4\
-\xbd\xf8\xc9\x57\xfe\x2d\x08\x42\x89\x2e\x6c\x6e\xa2\xfe\x30\xba\
-\x36\xa0\x09\x4d\x08\x21\xa6\x50\x88\xce\x1b\x80\x17\x00\x2f\xb1\
-\x58\xec\x0d\xc0\x1a\x80\x05\xc7\x71\xe6\x1c\xc7\x99\x02\xa0\xab\
-\x68\x43\x10\x04\x81\x54\x76\x9e\xa2\x28\x8e\xa6\xe9\x22\x8a\xa2\
-\x0a\x08\x21\xf9\x00\xb2\x4b\x4a\x4a\x62\x01\xdc\x7b\xf1\x13\x0b\
-\x20\x4e\x10\x84\x22\xed\xbd\xb3\x26\xb4\x01\x69\xea\x69\x75\x07\
-\x21\xc4\x19\x2f\x44\x09\xc0\x8b\x61\x18\x3f\x8a\xa2\x7c\xa4\x52\
-\x69\x0b\x00\x84\xa2\x28\xc1\xd1\xd1\x51\xea\xe5\xe5\xc5\xb8\xba\
-\xba\xd2\xe6\xe6\xe6\xb0\xb4\xb4\x84\xb9\xb9\x39\x2c\x2c\x2c\x60\
-\x61\x61\x81\xe4\xe4\x64\x84\x85\x85\x21\x32\x32\x12\x1c\xc7\xa1\
-\x77\xef\xde\x18\x3f\x7e\x3c\x82\x82\x82\x10\x1e\x1e\x8e\xe0\xe0\
-\x60\x84\x87\x87\x83\xa6\x69\x74\xe9\xd2\x05\x03\x07\x0e\x84\x8b\
-\x8b\x0b\xf2\xf3\xf3\x91\x9f\x9f\x8f\x82\x82\x02\xe4\xe5\xe5\x21\
-\x27\x27\x07\x0f\x1e\x3c\xe0\xe2\xe2\xe2\xb8\xf4\xf4\x74\xf6\x85\
-\xe0\x05\x91\x48\xf4\x84\xe7\xf9\x18\xb9\x5c\x7e\x1b\xa5\x82\xbe\
-\x27\x08\x42\xb2\xee\x3e\xb9\x97\x9b\x26\xd1\x36\x22\x84\x10\x4f\
-\x00\xfd\x69\x9a\x1e\x44\x51\xd4\x20\x99\x4c\x66\x03\x00\x16\x16\
-\x16\x72\x77\x77\x77\xde\xcb\xcb\x4b\xe4\xe1\xe1\x01\x77\x77\x77\
-\xb8\xbb\xbb\xc3\xd5\xd5\x15\x0c\x53\x3a\x18\x2a\xfb\xbf\xba\x7d\
-\xfb\x36\xd6\xaf\x5f\x8f\x33\x67\xce\xa0\x53\xa7\x4e\x18\x33\x66\
-\x0c\x46\x8e\x1c\x09\x1b\x1b\x1b\x8d\xeb\x3e\x7f\xfe\x1c\x21\x21\
-\x21\x38\x78\xf0\x20\xa2\xa3\xa3\x11\x14\x14\x84\x45\x8b\x16\xa1\
-\x7d\xfb\xf6\x15\xb6\x5d\x52\x52\x82\x87\x0f\x1f\x22\x31\x31\x51\
-\xf5\x13\x17\x17\x27\x4b\x4c\x4c\x24\x85\x85\x85\x0c\x00\xb0\x2c\
-\x9b\xc5\xf3\xfc\x29\x8e\xe3\x4e\x01\x38\x2b\x08\x42\x9c\xd6\x3f\
-\xb0\x26\x2a\xa4\x49\xb4\x0d\x08\x21\xa4\x35\x80\x01\x14\x45\x0d\
-\x60\x18\xe6\x15\xa9\x54\xda\xcc\xcc\xcc\x4c\xde\xab\x57\x2f\x12\
-\x14\x14\x44\xb7\x6f\xdf\x1e\x1e\x1e\x1e\xb0\xb5\xb5\xd5\xa8\x5b\
-\xd1\xff\x45\x10\x04\xc4\xc7\xc7\x63\xe3\xc6\x8d\x38\x76\xec\x18\
-\x3a\x77\xee\x8c\x8f\x3f\xfe\x18\x5d\xbb\x76\xad\xb6\x9e\x92\x2b\
-\x57\xae\x60\xfd\xfa\xf5\x88\x8e\x8e\xc6\x90\x21\x43\xb0\x60\xc1\
-\x02\xb4\x6d\xdb\xb6\xda\x7a\x4a\x32\x32\x32\x90\x98\x98\x88\x3b\
-\x77\xee\xe0\xd2\xa5\x4b\xdc\x95\x2b\x57\x84\xc2\xc2\x42\x46\x24\
-\x12\xa5\xcb\x64\xb2\x50\x41\x10\xce\x00\x38\x23\x08\xc2\xa3\x1a\
-\x7e\x4c\x4d\xd4\x92\x26\xd1\x6a\x11\x42\x48\x0b\x00\x03\x01\xf4\
-\x17\x89\x44\x43\xa5\x52\xa9\x93\x48\x24\xe2\xba\x76\xed\x2a\xf4\
-\xe9\xd3\x87\xe9\xdd\xbb\x37\xda\xb7\x6f\x0f\x9a\x56\x7f\x14\xad\
-\x89\x60\x72\x72\x72\xf0\xf9\xe7\x9f\x23\x38\x38\x18\x3e\x3e\x3e\
-\x58\xbc\x78\x31\xfa\xf5\xeb\x57\x6d\xbd\xca\x8e\x9d\x3e\x7d\x1a\
-\x1b\x37\x6e\x44\x6c\x6c\x2c\xc6\x8e\x1d\x8b\xe5\xcb\x97\x43\x22\
-\x91\xd4\xba\x2d\x8e\xe3\x70\xfb\xf6\x6d\x5c\xbe\x7c\x19\x17\x2f\
-\x5e\x94\x5f\xbd\x7a\x95\xc8\x64\x32\x5a\x24\x12\xa5\xc8\x64\xb2\
-\x13\x82\x20\x9c\x05\x70\x5a\x10\x84\x27\x1a\x8d\x35\x51\x27\x9a\
-\x44\x5b\x4f\x08\x21\xe6\x00\xc6\x31\x0c\x33\x9d\xe3\xb8\x7e\x14\
-\x45\x09\x1d\x3a\x74\xe0\xfa\xf7\xef\xcf\xf6\xee\xdd\x1b\x9d\x3a\
-\x75\x02\xcb\xb2\xaa\xf2\x35\x15\x55\xd9\x63\xe1\xe1\xe1\x98\x3f\
-\x7f\x3e\x78\x9e\xc7\x67\x9f\x7d\x86\x11\x23\x46\x80\x10\x52\xa7\
-\xb6\xca\x1e\x13\x04\x01\xc7\x8e\x1d\xc3\xaa\x55\xab\x40\x51\x14\
-\xd6\xaf\x5f\x8f\x5e\xbd\x7a\xd5\xcb\x56\x99\x4c\x86\x6b\xd7\xae\
-\xe1\xca\x95\x2b\x08\x0f\x0f\x97\xdd\xbe\x7d\x9b\xe6\x79\x9e\x30\
-\x0c\x73\x5e\x26\x93\xed\x00\x70\x50\x10\x84\x02\x8d\x46\x9a\xa8\
-\x31\x4d\xa2\xad\x03\x84\x10\x0a\x40\x7f\x8a\xa2\xa6\x12\x42\x5e\
-\x07\x20\x1a\x38\x70\xa0\x30\x61\xc2\x04\x7a\xc0\x80\x01\x30\x33\
-\x33\x53\x95\x2d\xff\xf9\xd6\x46\x08\x25\x25\x25\x58\xb3\x66\x0d\
-\xb6\x6f\xdf\x8e\x21\x43\x86\x60\xdd\xba\x75\x6a\xcf\xac\xf5\x15\
-\xad\x92\xac\xac\x2c\x2c\x5b\xb6\x0c\x27\x4f\x9e\xc4\xf4\xe9\xd3\
-\xb1\x68\xd1\x22\x88\xc5\xe2\x3a\xb7\x5f\xf6\x75\x51\x51\x11\x2e\
-\x5c\xb8\x80\xbf\xff\xfe\x9b\x3f\x7f\xfe\x3c\x00\x48\x05\x41\x38\
-\xc0\xf3\xfc\x6f\x50\xf4\xc0\xbc\x46\x83\x4d\x54\x49\x93\x68\x6b\
-\x01\x21\xa4\x1d\x80\x29\x2c\xcb\x4e\x93\xc9\x64\xcd\xfd\xfd\xfd\
-\x65\x6f\xbd\xf5\x16\x3b\x66\xcc\x18\xd8\xd8\xd8\xd4\xfa\x0b\x5d\
-\xd5\xb1\x3b\x77\xee\x60\xee\xdc\xb9\x48\x49\x49\xc1\xe7\x9f\x7f\
-\x8e\x37\xde\x78\xa3\x5e\x37\x80\x9a\xd8\x15\x1c\x1c\x8c\xcf\x3f\
-\xff\x1c\x2d\x5b\xb6\xc4\x37\xdf\x7c\x03\x6f\x6f\xef\x3a\xb7\x55\
-\x51\x99\xec\xec\x6c\x84\x84\x84\x20\x38\x38\x58\x76\xfb\xf6\x6d\
-\x96\x65\xd9\x67\x32\x99\xec\x57\x00\xbf\x09\x82\x70\x5b\xa3\x52\
-\x13\x15\xd2\x24\xda\x6a\x20\x84\xd8\x03\x78\x5b\x24\x12\xcd\x90\
-\x4a\xa5\xfe\x8e\x8e\x8e\xd2\x37\xdf\x7c\x53\x34\x7e\xfc\x78\xb8\
-\xb9\xb9\xa9\x95\xd5\x96\x68\x4f\x9e\x3c\x89\x39\x73\xe6\xc0\xd7\
-\xd7\x17\x5b\xb6\x6c\x41\xeb\xd6\xad\xeb\xdc\x56\x6d\xed\x4a\x4e\
-\x4e\xc6\xc2\x85\x0b\x71\xeb\xd6\x2d\x6c\xde\xbc\x19\x83\x06\x0d\
-\xaa\x73\x5b\x55\x1d\x7b\xf4\xe8\x11\xfe\xef\xff\xfe\x0f\x07\x0f\
-\x1e\x94\x3e\x79\xf2\x44\xc4\xb2\xec\x1d\x99\x4c\xb6\x1d\xc0\x1e\
-\x41\x10\xd2\x35\x1a\x68\x42\x45\x93\x68\x2b\x81\x10\xe2\x4c\x08\
-\x59\x44\x51\xd4\x7b\x26\x26\x26\xd4\xd8\xb1\x63\xe9\x09\x13\x26\
-\x90\x6e\xdd\xba\xd5\xeb\x79\xb2\xba\x32\xbf\xfd\xf6\x1b\x96\x2f\
-\x5f\x8e\xb7\xde\x7a\x0b\x5f\x7c\xf1\x85\xda\xa4\x55\x63\x88\x16\
-\x00\x78\x9e\xc7\x17\x5f\x7c\x81\xdd\xbb\x77\x63\xe5\xca\x95\x78\
-\xfb\xed\xb7\xeb\xdc\x56\x75\xc7\x04\x41\x40\x74\x74\x34\x0e\x1d\
-\x3a\x24\x1c\x3b\x76\x8c\x2b\x2e\x2e\x16\x04\x41\xf8\x49\x10\x84\
-\x75\x82\x20\x3c\xd6\xa8\xd4\x44\x93\x68\xcb\x43\x08\x71\xa3\x28\
-\x6a\x29\x80\x69\xcd\x9a\x35\x13\x16\x2c\x58\xc0\xbe\xf5\xd6\x5b\
-\x10\x89\x44\x6a\xe5\x1a\x42\xb4\x6b\xd7\xae\xc5\x96\x2d\x5b\xb0\
-\x68\xd1\x22\x7c\xf0\xc1\x07\xf5\x6a\x4b\x1b\x76\xfd\xf0\xc3\x0f\
-\xd8\xb0\x61\x03\xe6\xcc\x99\x83\x05\x0b\x16\xd4\xab\xad\x9a\x1c\
-\x2b\x2e\x2e\xc6\xc1\x83\x07\xb1\x6d\xdb\x36\x59\x46\x46\x06\x05\
-\x60\x37\xcf\xf3\xab\x9b\xd6\x80\xd5\x69\x12\xed\x0b\x08\x21\xed\
-\x68\x9a\xfe\x84\xe7\xf9\x37\x5c\x5c\x5c\xb8\x8f\x3e\xfa\x88\x1d\
-\x3f\x7e\xbc\x6a\xe6\x57\x5b\x5f\xcc\x8a\xca\xc8\x64\x32\x2c\x5a\
-\xb4\x08\xc1\xc1\xc1\x58\xbb\x76\x2d\xde\x7c\xf3\xcd\x06\x15\x47\
-\x6d\xda\x0a\x0e\x0e\xc6\xd2\xa5\x4b\x31\x66\xcc\x18\xac\x59\xb3\
-\x06\x14\x45\x35\x98\x5d\xca\xd7\x72\xb9\x1c\x87\x0f\x1f\xc6\xd6\
-\xad\x5b\x65\xa9\xa9\xa9\x0c\x45\x51\xfb\x39\x8e\xfb\x42\x10\x84\
-\x5b\x1a\x8d\xbc\x84\xbc\xf4\xa2\x25\x84\x04\x32\x0c\xb3\x42\x2e\
-\x97\x8f\xf2\xf0\xf0\x90\x2f\x5e\xbc\x98\x1d\x35\x6a\x54\xb5\x6b\
-\xa9\xda\x12\x87\x4c\x26\xc3\x8c\x19\x33\x70\xe9\xd2\x25\xfc\xf8\
-\xe3\x8f\x18\x38\x70\x60\x9d\xdb\xd2\xa6\x5d\x65\x8f\x9d\x3b\x77\
-\x0e\x73\xe7\xce\x45\xf7\xee\xdd\xf1\xc3\x0f\x3f\xa8\x79\x69\x69\
-\xd3\xae\xf2\xaf\x39\x8e\xc3\xf1\xe3\xc7\xb1\x75\xeb\x56\xd9\x83\
-\x07\x0f\x18\x9a\xa6\x43\x38\x8e\xfb\x9f\x20\x08\x91\x1a\x8d\xbd\
-\x44\xbc\xb4\xa2\x25\x84\xf4\x64\x59\xf6\x33\x99\x4c\x36\xd8\xd7\
-\xd7\x57\xbe\x78\xf1\x62\x66\xd8\xb0\x61\x35\x7e\x5e\xd5\xc6\x17\
-\x53\x10\x04\xcc\x9d\x3b\x17\x27\x4f\x9e\xc4\x9f\x7f\xfe\x89\xce\
-\x9d\x3b\xd7\xb9\x2d\x6d\xda\x55\xd1\xb1\xeb\xd7\xaf\x63\xca\x94\
-\x29\x18\x34\x68\x10\x36\x6e\xdc\x08\x42\x48\xa5\x75\xb5\x6d\x83\
-\x20\x08\x38\x7d\xfa\x34\xbe\xff\xfe\x7b\xf9\xbd\x7b\xf7\x18\x86\
-\x61\xce\xca\xe5\xf2\x15\x82\x20\xfc\xa3\x51\xe1\x25\xe0\xa5\x13\
-\x2d\x21\xa4\x25\x4d\xd3\x9b\x38\x8e\x9b\x18\x18\x18\x28\x5f\xbc\
-\x78\x31\xd3\x50\x33\xa4\xd5\xd5\x5b\xb9\x72\x25\x7e\xfd\xf5\x57\
-\xfc\xfa\xeb\xaf\x1a\xde\x4d\xfa\x26\x5a\x00\xb8\x70\xe1\x02\x66\
-\xcf\x9e\x8d\xc9\x93\x27\xe3\x93\x4f\x3e\xd1\xba\x5d\x35\xb5\xe1\
-\xfb\xef\xbf\x97\xdf\xba\x75\x8b\xa1\x69\x7a\x2f\xc7\x71\xf3\x05\
-\x41\x48\xd3\xa8\x68\xc4\xbc\x34\xa2\x25\x84\xd0\x00\xfe\xc3\x30\
-\xcc\x1a\x07\x07\x07\x76\xfd\xfa\xf5\xec\xab\xaf\xbe\xda\xa0\x5f\
-\xb0\xaa\xea\x7d\xf7\xdd\x77\x58\xb3\x66\x0d\xbe\xff\xfe\x7b\x8c\
-\x1e\x3d\xba\x51\x6d\xa8\x4f\x5b\x87\x0f\x1f\xc6\x82\x05\x0b\xb0\
-\x70\xe1\x42\xbc\xf7\xde\x7b\x5a\xb5\xab\x36\xf5\xce\x9c\x39\x83\
-\x55\xab\x56\xc9\x32\x33\x33\x65\x1c\xc7\x7d\x02\xe0\x5b\x41\x10\
-\x38\x8d\xc2\x46\x88\xe6\xac\x82\x11\x42\x08\xe9\xce\xb2\xec\x4d\
-\x86\x61\x36\xcd\x9d\x3b\xd7\x2c\x2a\x2a\x8a\x7d\xf5\xd5\x57\x75\
-\x66\xcf\xde\xbd\x7b\xb1\x7a\xf5\x6a\xac\x5a\xb5\x0a\x63\xc6\x8c\
-\xd1\x99\x1d\x75\x61\xe4\xc8\x91\xf8\xf4\xd3\x4f\xb1\x61\xc3\x06\
-\x1c\x38\x70\x40\x67\x76\x0c\x18\x30\x00\xc7\x8f\x1f\x67\x67\xcc\
-\x98\x61\x46\xd3\xf4\x46\x96\x65\x6f\x11\x42\x7a\xea\xcc\xa0\x46\
-\xc4\xa8\x7b\x5a\x42\x88\x1d\x45\x51\x6b\x79\x9e\x9f\xd1\xab\x57\
-\x2f\xee\xeb\xaf\xbf\x66\x3c\x3c\x3c\xd4\xca\x34\x76\x4f\x7b\xea\
-\xd4\x29\x4c\x9b\x36\x0d\xf3\xe6\xcd\xc3\xe2\xc5\x8b\x75\x62\x83\
-\x36\xda\xda\xb4\x69\x13\xb6\x6d\xdb\x86\x1f\x7f\xfc\x11\x7d\xfb\
-\xf6\xd5\x89\x0d\x4a\x12\x13\x13\xf1\xbf\xff\xfd\x8f\x8b\x8a\x8a\
-\xa2\x28\x8a\xda\xc5\xf3\xfc\x62\x41\x10\x9e\x69\x54\x34\x12\x8c\
-\x52\xb4\x44\x31\x4b\x32\x93\x61\x98\x0d\x12\x89\xc4\xec\xab\xaf\
-\xbe\x62\x5f\x7b\xed\x35\x00\xba\x19\xca\x29\x49\x4a\x4a\xc2\xe0\
-\xc1\x83\x31\x74\xe8\x50\x6c\xda\xb4\x49\x27\x36\x68\xb3\xad\x8f\
-\x3f\xfe\x18\xa7\x4e\x9d\xc2\xa1\x43\x87\xe0\xe4\xe4\xa4\x13\x1b\
-\xca\xbe\x0e\x09\x09\xc1\x9a\x35\x6b\x64\xb9\xb9\xb9\xc5\x1c\xc7\
-\x2d\x02\xf0\xb3\x60\x84\xbe\xcd\x46\x27\x5a\x42\x88\x1f\xcb\xb2\
-\x3b\x38\x8e\xeb\x3c\x7b\xf6\x6c\x2c\x5b\xb6\x8c\x58\x5a\x5a\xaa\
-\xce\xeb\x4a\xb4\x32\x99\x0c\xa3\x47\x8f\x46\x51\x51\x11\x42\x42\
-\x42\x60\x62\x62\xd2\xe8\x36\x68\xbb\xad\xe2\xe2\x62\xbc\xf6\xda\
-\x6b\x10\x8b\xc5\xf8\xeb\xaf\xbf\x2a\x5d\xd3\x6e\x48\x1b\xca\xbf\
-\xce\xcf\xcf\xc7\x77\xdf\x7d\x87\x3f\xfe\xf8\x43\xa0\x28\xea\x86\
-\x5c\x2e\x9f\x26\x08\xc2\xbf\x1a\x8d\x18\x30\x46\xf5\x4c\x4b\x08\
-\x99\x45\xd3\x74\xb4\x9f\x9f\x5f\xc0\xf9\xf3\xe7\xc9\x9a\x35\x6b\
-\xd4\x04\xab\x4b\x56\xad\x5a\x85\x7b\xf7\xee\xe1\xc7\x1f\x7f\x54\
-\x13\xac\x21\x63\x62\x62\x82\x6f\xbf\xfd\x16\xf1\xf1\xf1\x58\xbb\
-\x76\xad\xae\xcd\x01\x00\x58\x58\x58\x60\xc9\x92\x25\xd8\xb7\x6f\
-\x1f\xf1\xf6\xf6\x6e\x4f\xd3\x74\x14\x21\x64\x96\xae\xed\xd2\x26\
-\x46\x21\x5a\x42\x88\x05\xc3\x30\x7f\x12\x42\x7e\x9a\x3f\x7f\xbe\
-\x28\x2c\x2c\x8c\xf5\xf3\xf3\xd3\xb5\x59\x2a\x42\x42\x42\xf0\xf3\
-\xcf\x3f\x63\xcd\x9a\x35\xf0\xf4\xf4\xd4\xb5\x39\x5a\xc5\xcd\xcd\
-\x0d\xab\x56\xad\xc2\xae\x5d\xbb\x10\x1a\x1a\xaa\x6b\x73\x54\x78\
-\x79\x79\x61\xcf\x9e\x3d\xcc\xac\x59\xb3\x44\x84\x90\x9f\x5e\x7c\
-\x3f\x2c\x74\x6d\x97\x36\x30\xf8\xe1\x31\x21\xa4\x03\xcb\xb2\x7f\
-\x5b\x58\x58\x38\x6f\xdf\xbe\x9d\xed\xdf\xbf\xbf\xea\x5c\x63\x0d\
-\xc9\xaa\x3a\xf6\xf0\xe1\x43\xbc\xf2\xca\x2b\x18\x3a\x74\x28\x36\
-\x6f\xde\xac\xf3\x21\x6d\x43\xb5\xb5\x7c\xf9\x72\x84\x84\x84\xe0\
-\xd0\xa1\x43\x70\x76\x76\x6e\x54\x1b\xaa\x2b\x73\xf9\xf2\x65\x2c\
-\x5a\xb4\x48\x5e\x58\x58\x98\x24\x93\xc9\xc6\x0a\x82\x70\x53\xa3\
-\x82\x01\x61\xd0\xa2\x25\x84\xbc\x4b\x51\xd4\xb7\xdd\xba\x75\x23\
-\x3b\x77\xee\x64\x9a\x37\x6f\xae\x76\x5e\xd7\xa2\xe5\x38\x0e\xc3\
-\x87\x0f\x47\x41\x41\x01\x4e\x9e\x3c\x09\x53\x53\x53\xbd\x12\x9a\
-\x36\xdb\x2a\x29\x29\xc1\xf8\xf1\xe3\x21\x12\x89\xb0\x77\xef\xde\
-\x3a\x85\xd4\x69\x48\xdb\x9f\x3d\x7b\x86\x8f\x3e\xfa\x48\x7e\xe3\
-\xc6\x0d\x81\xe7\xf9\x79\x82\x20\xfc\xa8\x51\xc9\x40\x30\xc8\xe1\
-\x31\x21\xc4\x92\x61\x98\xbd\x84\x90\x1f\x16\x2d\x5a\xc4\x1e\x3d\
-\x7a\x54\x43\xb0\xfa\xc0\x8e\x1d\x3b\x70\xe7\xce\x1d\x6c\xdb\xb6\
-\x0d\xa6\xa6\xa6\xba\x36\xa7\x41\x11\x8b\xc5\xd8\xbc\x79\x33\x62\
-\x63\x63\xf1\xfb\xef\xbf\xeb\xda\x1c\x0d\x1c\x1c\x1c\xb0\x63\xc7\
-\x0e\xe6\x9d\x77\xde\x61\x09\x21\x3f\xbc\xf8\xfe\xe8\xc7\x84\x47\
-\x2d\x31\xb8\x9e\x96\x10\xd2\x91\x65\xd9\xbf\x2d\x2d\x2d\x1d\x77\
-\xee\xdc\xc9\x2a\xd7\x08\x75\x39\x63\x59\xd1\xb1\xb4\xb4\x34\x04\
-\x05\x05\x61\xfa\xf4\xe9\x58\xb6\x6c\x59\xbd\xaf\xa7\x4d\xdb\x1b\
-\xb2\xad\x2d\x5b\xb6\x60\xc7\x8e\x1d\x38\x7e\xfc\x38\x5a\xb4\x68\
-\xd1\x28\x36\xd4\xb6\x5e\x44\x44\x04\x3e\xfa\xe8\x23\x59\x61\x61\
-\x61\xea\x8b\xe1\xf2\x75\x8d\xc2\x7a\x8c\x41\x89\x96\x10\x32\x8b\
-\xa2\xa8\xad\x3d\x7b\xf6\x24\xdb\xb7\x6f\x57\xeb\x5d\xf5\x4d\xb4\
-\xd3\xa7\x4f\x47\x4c\x4c\x0c\xce\x9e\x3d\xab\x95\xe5\x1d\x6d\xda\
-\xde\x90\x6d\x49\xa5\x52\x0c\x1f\x3e\x1c\x1e\x1e\x1e\xd8\xba\x75\
-\x6b\xa3\xd8\x50\x97\x7a\x19\x19\x19\x58\xbc\x78\xb1\xfc\xda\xb5\
-\x6b\x06\x37\x5c\x36\x98\xe1\x31\x21\x64\x25\x80\x9f\x17\x2e\x5c\
-\xc8\x1e\x39\x72\x44\x2f\x87\xc3\x4a\x4e\x9e\x3c\x89\xe3\xc7\x8f\
-\x63\xed\xda\xb5\x46\xb3\xbc\x53\x53\x44\x22\x11\xfe\xf7\xbf\xff\
-\xe1\xd4\xa9\x53\x38\x7d\xfa\xb4\xae\xcd\xa9\x14\x7b\x7b\x7b\xfc\
-\xfc\xf3\xcf\xcc\x3b\xef\xbc\xc3\x02\xd8\x46\x08\xf9\x52\xd7\x36\
-\xd5\x14\xbd\xef\x69\x09\x21\x14\x21\xe4\x3b\x42\xc8\x7b\xdf\x7c\
-\xf3\x0d\x99\x3a\x75\x2a\x00\xdd\xde\xa5\xab\x2a\x53\x50\x50\x80\
-\xa0\xa0\x20\xf4\xe8\xd1\x03\xdf\x7f\xff\xbd\x41\xf4\x8e\x0d\xd1\
-\xd6\xe2\xc5\x8b\x11\x11\x11\x81\xe3\xc7\x8f\xc3\xcc\xcc\x4c\xef\
-\x7a\xda\xb2\xaf\x8f\x1c\x39\x82\x15\x2b\x56\xf0\x82\x20\xec\x10\
-\x04\xe1\x3d\x41\xcf\x37\x1e\xe8\x75\x4f\x4b\x08\x11\xd1\x34\xbd\
-\x8f\x61\x98\x77\x76\xef\xde\xad\x12\xac\x3e\xb3\x6e\xdd\x3a\x14\
-\x16\x16\xe2\xf3\xcf\x3f\xd7\xb5\x29\x3a\x65\xc9\x92\x25\x28\x2c\
-\x2c\xc4\xe6\xcd\x9b\x75\x6d\x4a\xb5\x8c\x1c\x39\x12\x5b\xb6\x6c\
-\xa1\x18\x86\x99\x4e\xd3\x74\xf0\x8b\x6c\x84\x7a\x8b\xde\x8a\xf6\
-\xc5\x0c\x71\xa8\x89\x89\xc9\xe8\x43\x87\x0e\xd1\x23\x46\x8c\xd0\
-\xb5\x49\xd5\x12\x17\x17\x87\x5f\x7e\xf9\x05\x9f\x7e\xfa\x29\xec\
-\xed\xed\x75\x6d\x8e\x4e\xb1\xb5\xb5\xc5\xe2\xc5\x8b\xf1\xdb\x6f\
-\xbf\x21\x21\x21\x41\xd7\xe6\x54\x4b\x50\x50\x10\x7e\xf9\xe5\x17\
-\xda\xc4\xc4\x64\x38\xc3\x30\xa7\x08\x21\x56\xba\xb6\xa9\x32\xf4\
-\x72\x78\x4c\x08\x69\xc6\xb2\x6c\x98\x95\x95\x95\xcf\x91\x23\x47\
-\x58\x5f\x5f\x5f\x8d\x32\xfa\x32\xb4\x2a\xcb\xac\x59\xb3\x70\xff\
-\xfe\x7d\x9c\x3d\x7b\x56\x15\x4b\xc9\x90\x86\xb4\xda\x6e\x8b\xe7\
-\x79\x8c\x1c\x39\x12\x1e\x1e\x1e\xf8\xe6\x9b\x6f\x1a\xcc\x06\x6d\
-\xd6\x8b\x8b\x8b\xc3\x3b\xef\xbc\x23\xcb\xcd\xcd\xbd\x27\x97\xcb\
-\x07\x09\x82\xf0\x54\xa3\x90\x8e\xd1\xbb\x9e\x96\x10\xd2\x86\x65\
-\xd9\x48\x47\x47\x47\x9f\xf3\xe7\xcf\xeb\x95\x3b\x62\x55\xdc\xba\
-\x75\x0b\x47\x8f\x1e\xc5\xc7\x1f\x7f\x5c\x61\xf0\xb3\x97\x11\x8a\
-\xa2\xf0\xe1\x87\x1f\xe2\xc4\x89\x13\xb8\x7b\xf7\xae\xae\xcd\xa9\
-\x11\x1e\x1e\x1e\xd8\xb3\x67\x0f\xdb\xbc\x79\x73\x2f\x86\x61\x22\
-\x09\x21\x6e\xd5\xd7\x6a\x5c\xf4\xaa\xa7\x25\x84\x74\x60\x18\xe6\
-\x94\x8f\x8f\x8f\xe4\xd0\xa1\x43\xac\x72\x88\xa9\xcf\x93\x18\x4a\
-\x26\x4d\x9a\x84\x67\xcf\x9e\xe1\xc4\x89\x13\x0d\x72\x3d\x43\x6e\
-\xeb\xb5\xd7\x5e\x83\x9d\x9d\x1d\x7e\xfc\xf1\xc7\x2a\xcb\xe9\xfa\
-\x7f\x58\xf6\x58\x76\x76\x36\xde\x7d\xf7\x5d\x59\x42\x42\x42\xae\
-\x5c\x2e\x1f\x28\xe8\x91\xeb\xa3\xde\x74\x09\x84\x90\x00\x9a\xa6\
-\xff\xe9\xd9\xb3\xa7\x75\x68\x68\x28\x6b\x48\xcf\x84\x51\x51\x51\
-\x08\x0b\x0b\xc3\xd2\xa5\x4b\x75\x6d\x8a\x5e\xb2\x60\xc1\x02\x9c\
-\x3b\x77\x0e\xd7\xaf\x1b\x8e\x0f\x83\xb5\xb5\x35\x76\xee\xdc\xc9\
-\x06\x06\x06\x4a\x68\x9a\xbe\x48\x08\xe9\xa2\x6b\x9b\x94\xe8\x45\
-\x4f\x4b\x08\x69\xc3\x30\x4c\x64\xaf\x5e\xbd\xac\x83\x83\x83\x99\
-\xba\x04\x06\xd7\xe5\x5d\x7a\xdc\xb8\x71\x00\x80\xe0\xe0\xe0\x06\
-\xbb\x9e\xa1\xb7\x35\x79\xf2\x64\x00\x8a\x0c\x0a\xda\xb6\xa1\x21\
-\xeb\xc9\x64\x32\xfc\xe7\x3f\xff\x91\x5f\xbb\x76\x2d\x4f\x2e\x97\
-\x77\x17\x04\xe1\xbe\x46\xa5\x46\x46\xe7\x3d\xed\x8b\x49\xa7\xb3\
-\xbe\xbe\xbe\x92\xbd\x7b\xf7\x6a\x08\x56\xdf\x09\x0f\x0f\xc7\xc5\
-\x8b\x17\xd5\x5c\x15\x9b\xd0\x64\xfe\xfc\xf9\x88\x88\x88\xc0\xe5\
-\xcb\x97\x75\x6d\x4a\xad\x60\x59\x16\x9b\x36\x6d\x62\x3c\x3c\x3c\
-\x2c\x18\x86\x39\x43\x08\x69\xa9\x6b\x9b\x74\xda\xd3\x12\x42\x2c\
-\x58\x96\xfd\xc7\xc9\xc9\xa9\xdd\xd9\xb3\x67\x59\x7b\x7b\x7b\xbd\
-\xbc\xdb\x56\x55\x6f\xd8\xb0\x61\xb0\xb3\xb3\xc3\xee\xdd\xbb\xf5\
-\xa2\x47\xd3\xe7\xb6\xde\x7f\xff\x7d\x3c\x7f\xfe\x1c\x7b\xf7\xee\
-\xd5\xaa\x0d\x8d\x51\x2f\x2b\x2b\x0b\x93\x27\x4f\x96\x3d\x7d\xfa\
-\x34\x4e\x2e\x97\xf7\x14\x04\x21\x47\xa3\x60\x23\xa1\xb3\x9e\x96\
-\x10\x22\x62\x18\xe6\xb0\x44\x22\x69\x77\xec\xd8\x31\x83\x7a\x86\
-\x55\x72\xf5\xea\x55\x44\x47\x47\x63\xee\xdc\xb9\xba\x36\xc5\x20\
-\x98\x35\x6b\x16\x6e\xdc\xb8\x61\x50\xcf\xb6\x4a\x6c\x6c\x6c\xf0\
-\xd3\x4f\x3f\xb1\x56\x56\x56\x9e\x0c\xc3\x84\x10\x42\x74\xe6\x9f\
-\xaa\x13\xd1\x12\x42\x08\x4d\xd3\xbb\x4d\x4c\x4c\x82\x8e\x1e\x3d\
-\xca\xb6\x6a\xd5\x4a\x17\x66\xd4\x9b\x9f\x7e\xfa\x09\xfe\xfe\xfe\
-\xe8\xd6\xad\x9b\xae\x4d\x31\x08\x3a\x75\xea\x04\x5f\x5f\x5f\xb5\
-\xe7\x5a\x43\xc2\xd1\xd1\x11\xdb\xb6\x6d\x63\x45\x22\x51\x57\x9a\
-\xa6\xf7\xbe\x88\xa5\xdd\xe8\xe8\x4a\xb4\x9b\x29\x8a\x7a\x2d\x38\
-\x38\x98\xa9\xc8\x71\xc2\x10\x48\x4b\x4b\xc3\xb1\x63\xc7\x30\x7b\
-\xf6\x6c\x5d\x9b\x62\x50\x4c\x99\x32\x05\x27\x4f\x9e\xc4\xd3\xa7\
-\x7a\xe7\xb3\x50\x23\x3c\x3d\x3d\xf1\xed\xb7\xdf\x32\x84\x90\xe1\
-\x14\x45\xfd\xa0\x0b\x1b\x1a\x5d\xb4\x84\x90\xa5\x84\x90\xb9\xbb\
-\x77\xef\xa6\x7b\xf6\x34\xdc\xd8\xd2\x3b\x77\xee\x84\x8d\x8d\x0d\
-\xc6\x8e\x1d\xab\x6b\x53\x0c\x8a\xe1\xc3\x87\xc3\xc6\xc6\x06\x7f\
-\xfc\xf1\x87\xae\x4d\xa9\x33\x81\x81\x81\x58\xb7\x6e\x1d\x2d\x08\
-\xc2\x2c\x42\x48\xa3\x3b\x99\x37\xaa\x68\x09\x21\x53\x01\xac\xfe\
-\xf6\xdb\x6f\x89\x21\xf8\x12\x57\x46\x49\x49\x09\x76\xef\xde\x8d\
-\xa9\x53\xa7\xaa\xc2\x86\x36\x51\x33\x58\x96\xc5\x9b\x6f\xbe\x89\
-\xbd\x7b\xf7\xa2\xa4\xa4\x44\xd7\xe6\xd4\x99\x7e\xfd\xfa\xe1\xd3\
-\x4f\x3f\x25\x00\x56\x34\x76\xb4\xc7\x46\x13\x2d\x21\xa4\x03\x4d\
-\xd3\x3f\x7f\xfc\xf1\xc7\x30\x84\xdd\x3a\x55\x71\xe0\xc0\x01\xe4\
-\xe5\xe5\x61\xda\xb4\x69\xba\x36\xc5\x20\x79\xe3\x8d\x37\x90\x9f\
-\x9f\x8f\x23\x47\x8e\xe8\xda\x94\x7a\x31\x66\xcc\x18\xcc\x9a\x35\
-\x0b\x14\x45\x6d\x25\x84\x74\x68\xac\xeb\x36\x8a\x68\x09\x21\x16\
-\x22\x91\xe8\xef\x6e\xdd\xba\x51\xc6\xb0\x9e\xf9\xd3\x4f\x3f\x61\
-\xec\xd8\xb1\x70\x70\x70\xd0\xb5\x29\x06\x89\xbd\xbd\x3d\x86\x0f\
-\x1f\x6e\xb0\x13\x52\x65\x79\xef\xbd\xf7\x10\x10\x10\x40\x58\x96\
-\xfd\xbb\xb1\x42\xb4\x36\x8a\x68\x19\x86\xf9\xc5\xcc\xcc\xcc\x65\
-\xd7\xae\x5d\x74\xf9\x28\x7d\x86\x46\x64\x64\x24\x62\x62\x62\x9a\
-\x26\xa0\xea\xc9\xd4\xa9\x53\x71\xff\xfe\x7d\x44\x46\x1a\x76\x7e\
-\x68\x8a\xa2\xf0\xd5\x57\x5f\x31\xa6\xa6\xa6\x2e\x34\x4d\xff\xd2\
-\x28\xd7\x6c\xe8\x0b\x10\x42\x66\x73\x1c\x37\x71\xd7\xae\x5d\x4c\
-\xcb\x96\x3a\x77\x26\xa9\x37\xfb\xf7\xef\x47\xfb\xf6\xed\xe1\xef\
-\xef\xaf\x6b\x53\x0c\x9a\x76\xed\xda\x21\x20\x20\x00\x7f\xff\xfd\
-\xb7\xae\x4d\xa9\x37\xf6\xf6\xf6\xf8\xea\xab\xaf\x18\x9e\xe7\x27\
-\x10\x42\x1a\xfc\x6e\xde\xa0\xa2\x25\x84\xb4\xa7\x69\xfa\xbb\x05\
-\x0b\x16\xa0\x7c\xe2\x66\x43\x44\x2a\x95\xe2\xd0\xa1\x43\x50\x26\
-\xf3\x6a\xa2\x7e\x8c\x1c\x39\x12\x61\x61\x61\x06\x3d\x21\xa5\xa4\
-\x5b\xb7\x6e\x98\x39\x73\x26\xa1\x28\xea\x3b\x42\x48\xfb\x86\xbc\
-\x56\x83\x89\x96\x10\x62\xce\xb2\xec\xff\x75\xea\xd4\x89\x5a\xb1\
-\x62\x45\x43\x5d\xa6\x51\x39\x75\xea\x14\x72\x73\x73\x55\x1b\x04\
-\x9a\xa8\x1f\xc3\x86\x0d\x43\x71\x71\x31\xce\x9c\x39\xa3\x6b\x53\
-\xb4\xc2\xbb\xef\xbe\x0b\x7f\x7f\x7f\x8a\x65\xd9\xff\x6b\xc8\xe7\
-\xdb\x06\x13\x2d\x4d\xd3\x3f\x99\x99\x99\xb5\xda\xbd\x7b\x37\xc3\
-\x30\x4c\x43\x5d\xa6\x51\xd9\xbf\x7f\x3f\x7a\xf7\xee\xad\x16\xcf\
-\xb7\x89\xba\x63\x63\x63\x83\xde\xbd\x7b\x1b\xfc\x2c\xb2\x92\x32\
-\xcf\xb7\xad\x28\x8a\x6a\xb0\x90\xac\x0d\x22\x5a\x42\xc8\x0c\x9e\
-\xe7\xdf\xda\xbe\x7d\x3b\x53\x51\x5e\x17\x43\x24\x3b\x3b\x1b\x61\
-\x61\x61\x18\x3f\x7e\xbc\xae\x4d\x31\x2a\x46\x8e\x1c\x89\x0b\x17\
-\x2e\x20\x3b\x3b\x5b\xd7\xa6\x68\x05\x07\x07\x07\xac\x59\xb3\x86\
-\xe1\x79\xfe\x2d\x42\xc8\x8c\x86\xb8\x86\xd6\x45\x4b\x08\xf1\xa1\
-\x69\xfa\x87\x79\xf3\xe6\xe1\xd5\x57\x5f\xd5\x76\xf3\x3a\xe3\xf0\
-\xe1\xc3\xa0\x28\x0a\x86\xec\x14\xa2\x8f\x0c\x1c\x38\x10\x62\xb1\
-\x58\x23\xe2\x87\x21\xd3\xbd\x7b\x77\xcc\x98\x31\x03\x14\x45\xfd\
-\x40\x08\xf1\xd1\x76\xfb\x5a\x17\x2d\xcb\xb2\x3f\xb7\x6b\xd7\x8e\
-\xfa\xdf\xff\xfe\xa7\xed\xa6\x75\xca\xfe\xfd\xfb\x31\x74\xe8\x50\
-\x58\x58\x18\x45\xb6\x44\xbd\xc1\xc4\xc4\x04\x83\x07\x0f\xc6\xe1\
-\xc3\x87\x75\x6d\x8a\x56\x79\xff\xfd\xf7\xe1\xed\xed\x4d\x18\x86\
-\xf9\x59\xdb\x6d\x6b\x55\xb4\x84\x90\xc9\x72\xb9\xbc\xe7\xd6\xad\
-\x5b\x19\x63\x72\xef\x4b\x4a\x4a\x42\x64\x64\x64\xd3\xac\x71\x03\
-\x31\x6a\xd4\x28\x5c\xbf\x7e\x1d\xc9\xc9\xc9\xba\x36\x45\x6b\x50\
-\x14\x85\xe5\xcb\x97\xb3\x1c\xc7\xf5\x24\x84\x4c\xd6\x6a\xdb\xda\
-\x6a\x88\x10\x62\xcd\xb2\xec\x37\x33\x66\xcc\x40\xa7\x4e\x9d\xb4\
-\xd5\xac\x5e\x70\xfc\xf8\x71\x58\x59\x59\x61\xc0\x80\x01\xba\x36\
-\xc5\x28\xe9\xd6\xad\x1b\xac\xad\xad\x8d\x6a\x88\x0c\x00\x6d\xdb\
-\xb6\xc5\xc4\x89\x13\xc1\x30\xcc\x37\x84\x10\x6b\x6d\xb5\xab\x4d\
-\xd1\x7e\x61\x66\x66\x66\xb5\x6a\xd5\x2a\xa2\xad\x36\xf5\x85\xb0\
-\xb0\x30\xf4\xeb\xd7\xaf\x69\x73\x40\x03\x41\xd3\x34\x7a\xf7\xee\
-\x8d\xf3\xe7\xcf\xeb\xda\x14\xad\xf3\xde\x7b\xef\x11\x73\x73\x73\
-\x4b\x6d\xe6\x0a\xd2\x8a\x68\x09\x21\x9d\x00\xcc\x59\xbb\x76\x2d\
-\x63\x6d\xad\xb5\x1b\x8a\x5e\x50\x50\x50\x80\x4b\x97\x2e\xe1\x95\
-\x57\x5e\xd1\xb5\x29\x46\x4d\xbf\x7e\xfd\x70\xfd\xfa\x75\xe4\xe5\
-\xe5\xe9\xda\x14\xad\x62\x61\x61\x81\x85\x0b\x17\xb2\x00\xde\x7f\
-\xa1\x93\x7a\x53\x6f\xd1\x12\x42\x28\x96\x65\x7f\xee\xdc\xb9\x33\
-\xa7\x8c\xb8\x67\x4c\x9c\x3f\x7f\x1e\x72\xb9\xbc\x69\x68\xdc\xc0\
-\xf4\xee\xdd\x1b\x00\x70\xf1\xe2\x45\x1d\x5b\xa2\x7d\x86\x0d\x1b\
-\x86\xf6\xed\xdb\x73\x0c\xc3\xfc\x4c\x08\xa9\xb7\xe6\xb4\xd1\xd3\
-\xbe\xc3\x71\x5c\xc0\x77\xdf\x7d\xc7\x10\x62\x74\x23\x63\x84\x85\
-\x85\x21\x30\x30\x10\x76\x76\x76\xba\x36\xc5\xa8\x91\x48\x24\xe8\
-\xd0\xa1\x03\x2e\x5c\xb8\xa0\x6b\x53\x1a\x84\x65\xcb\x96\x31\x3c\
-\xcf\x77\x00\xf0\x4e\x7d\xdb\xaa\x97\x68\x09\x21\x0e\x0c\xc3\xac\
-\x7b\xff\xfd\xf7\x49\xfb\xf6\x0d\xea\x6e\xa9\x33\x4e\x9d\x3a\x85\
-\xc1\x83\x07\xeb\xda\x8c\x97\x82\x3e\x7d\xfa\x20\x3c\x3c\xbc\xc2\
-\x88\x88\x86\x8e\x87\x87\x07\xde\x78\xe3\x0d\x8a\xa6\xe9\x75\x84\
-\x90\x7a\xed\xe9\xac\xaf\x68\xd7\x4b\x24\x12\x93\x4f\x3f\xfd\xb4\
-\x3e\xcd\xe8\x2d\xb7\x6e\xdd\xc2\x93\x27\x4f\x9a\x44\xdb\x48\xf4\
-\xed\xdb\x17\x19\x19\x19\x06\x93\xf7\xa7\xb6\xbc\xf7\xde\x7b\xb0\
-\xb2\xb2\x32\xa1\x28\x6a\x43\x7d\xda\xa9\xb3\x68\x09\x21\x5d\x05\
-\x41\x98\xb2\x71\xe3\x46\xd6\xca\x4a\x6f\xb3\x02\xd6\x8b\x53\xa7\
-\x4e\xa1\x45\x8b\x16\x30\xd6\x51\x84\xbe\xe1\xed\xed\x8d\xe6\xcd\
-\x9b\x1b\xed\x10\xd9\xcc\xcc\x0c\x0b\x17\x2e\x64\x79\x9e\x9f\x4c\
-\x08\xe9\x5a\xd7\x76\xea\x2c\x5a\x9a\xa6\x57\xf8\xf9\xf9\xc9\x27\
-\x4e\x9c\x58\xd7\x26\xf4\x9e\xb0\xb0\x30\xa3\xd8\x52\x68\x48\xf4\
-\xe9\xd3\xc7\x28\x97\x7e\x94\x0c\x19\x32\x04\x9e\x9e\x9e\x1c\x4d\
-\xd3\x2b\xeb\xda\x46\x9d\x44\x4b\x08\xf1\xe7\x38\x6e\xd8\xf2\xe5\
-\xcb\x8d\x76\xe1\x32\x3f\x3f\x1f\xd1\xd1\xd1\x18\x38\x70\xa0\xae\
-\x4d\x51\xc1\xf3\x3c\x8a\x8b\x8b\x51\x58\x58\x88\xfc\xfc\x7c\x14\
-\x16\x16\xaa\x9d\x97\xcb\xe5\x48\x4f\x4f\xc7\x93\x27\x4f\x90\x96\
-\x96\x86\xcc\xcc\x4c\xb5\xf3\x1c\xc7\x21\x27\x27\x07\x79\x79\x79\
-\x28\x28\x28\x40\x71\x71\x71\x63\x9a\x5f\x23\x82\x82\x82\x70\xeb\
-\xd6\x2d\x14\x14\x14\xe8\xda\x94\x06\x63\xf6\xec\xd9\x0c\xc7\x71\
-\xaf\x12\x42\xea\x14\x49\xa1\x4e\x7b\xe6\x28\x8a\xfa\xc4\xcd\xcd\
-\x4d\x3e\x6a\xd4\x28\xa3\x15\xed\xd5\xab\x57\xc1\xf3\xbc\xd6\x03\
-\x91\x0b\x82\x80\x92\x92\x12\x14\x15\x15\x41\x10\x04\xd8\xda\xda\
-\xaa\xce\x15\x15\x15\xe1\xee\xdd\xbb\x90\xc9\x64\x90\x4a\xa5\x10\
-\x8b\xc5\xe8\xda\xb5\x74\x14\x95\x9b\x9b\x8b\xf0\xf0\x70\xd5\x6b\
-\x89\x44\x82\xa0\xa0\x20\xd5\xeb\x82\x82\x02\x44\x45\x45\xa9\x9d\
-\x57\x2e\xa5\x00\x8a\x1b\x51\xd9\x25\x15\x89\x44\x82\xb2\x61\x6c\
-\xf3\xf2\xf2\x10\x19\x19\x09\x96\x65\x21\x12\x89\x60\x69\x69\x89\
-\x76\xed\xda\xa9\xce\xcb\x64\x32\x3c\x7b\xf6\x0c\x0c\xc3\x40\x24\
-\x12\xc1\xd4\xd4\x14\xda\xce\xbd\x14\x18\x18\x08\x9e\xe7\x71\xe3\
-\xc6\x0d\xf4\xea\xd5\x4b\xab\x6d\xeb\x0b\xfd\xfa\xf5\x43\xab\x56\
-\xad\xb8\xe4\xe4\xe4\xe5\x00\x26\xd4\xb6\x7e\xad\x45\x4b\x08\x69\
-\x4b\x08\x79\x7d\xd9\xb2\x65\xc4\x18\x97\x78\x94\x44\x46\x46\xa2\
-\x4d\x9b\x36\xb5\x0e\xde\x26\x97\xcb\x51\x58\x58\x88\xa2\xa2\x22\
-\xc8\xe5\x72\x38\x3a\x3a\xaa\xce\xe5\xe7\xe7\xe3\xf4\xe9\xd3\xe0\
-\x79\x1e\x00\x60\x69\x69\xa9\xd1\x93\xcb\x64\x32\x88\x44\x22\x98\
-\x9b\x9b\xc3\xdc\xdc\x5c\xed\x9c\x85\x85\x05\x7a\xf5\xea\x05\x8a\
-\xa2\x40\x51\x14\xca\xc7\xdb\xb2\xb2\xb2\xc2\xd0\xa1\x43\x41\x51\
-\x14\x08\x21\x1a\xb3\xb0\x96\x96\x96\xe8\xd7\xaf\x1f\x78\x9e\x07\
-\xc7\x71\x1a\xc9\xaf\xc5\x62\x31\x3c\x3c\x3c\x20\x93\xc9\x20\x93\
-\xc9\x34\x3c\xc0\x8a\x8a\x8a\x70\xe7\xce\x1d\x95\xfd\x12\x89\x44\
-\xed\xa6\x56\x54\x54\x84\xd4\xd4\x54\x88\xc5\x62\x98\x98\x98\xc0\
-\xcc\xcc\x0c\xa6\xa6\xa6\xb5\xf9\xf8\x60\x67\x67\x87\x56\xad\x5a\
-\x21\x3a\x3a\xda\x68\x45\x4b\x08\xc1\xac\x59\xb3\x98\x95\x2b\x57\
-\x8e\x27\x84\xb4\xad\x6d\x26\xbe\xba\x88\x76\xa9\x93\x93\x93\x7c\
-\xc2\x84\x09\x46\xdb\xcb\x02\x0a\xd1\x56\xd5\xcb\x96\x94\x94\xa0\
-\xa0\xa0\x40\xad\xa7\x2c\x2e\x2e\x46\x48\x48\x88\xea\xb5\xa9\xa9\
-\xa9\x9a\x68\x4d\x4d\x4d\x11\x10\x10\x00\x53\x53\x53\x98\x99\x99\
-\xc1\xc4\x44\x3d\x1d\x8c\xa9\xa9\x29\xba\x77\xef\x0e\xa0\xe2\x44\
-\x50\x0c\xc3\xa8\x5d\xaf\x7c\x19\x42\x88\x9a\x90\xcb\xdf\x54\x29\
-\x8a\x82\x99\x99\x59\xa5\xed\x8b\x44\x22\xb4\x6e\xdd\xba\xd2\xf6\
-\xad\xac\xac\x30\x68\xd0\x20\x70\x1c\x87\x92\x92\x12\x95\x78\x95\
-\x94\x94\x94\xe0\xe9\xd3\xa7\x28\x2e\x2e\x06\xc7\x71\xb0\xb7\xb7\
-\x47\x40\x40\x80\xea\x7c\x51\x51\x11\x32\x33\x33\x61\x61\x61\x01\
-\x73\x73\x73\x54\x16\x1c\x21\x30\x30\xd0\x20\xf3\xfd\xd4\x86\x21\
-\x43\x86\x60\xeb\xd6\xad\xf2\xf4\xf4\xf4\x65\x00\xa6\xd5\xa6\x6e\
-\xad\x44\x4b\x08\x69\x45\x51\xd4\xe4\xa5\x4b\x97\x1a\x7c\x54\xc5\
-\xaa\xe0\x38\x0e\xd1\xd1\xd1\x58\xb5\x6a\x95\xda\x71\x9e\xe7\x71\
-\xe1\xc2\x05\xe4\xe5\xe5\xa1\xa4\xa4\x04\x34\x4d\x63\xf4\xe8\xd1\
-\x2a\x71\x88\xc5\x62\x74\xef\xde\x1d\x66\x66\x66\x30\x33\x33\x83\
-\x48\x24\x52\xfb\xe2\xd3\x34\x0d\x43\xcd\x5b\x54\x16\x9a\xa6\x55\
-\xe2\x2f\x8b\xb5\xb5\x35\x7a\xf6\xec\x09\x41\x10\x20\x97\xcb\xc1\
-\x71\x9c\xda\xf9\x82\x82\x02\x24\x24\x24\x40\x2e\x97\x03\x50\xe4\
-\xc6\xf1\xf6\xf6\x56\x9d\x97\xcb\xe5\x10\x04\x01\x9d\x3a\x75\xc2\
-\xea\xd5\xab\x2b\x1c\x0d\x18\x0b\x14\x45\x61\xe6\xcc\x99\xec\xea\
-\xd5\xab\x27\x11\x42\x56\x08\x82\xf0\xb8\xa6\x75\x6b\xdb\xd3\x2e\
-\x76\x70\x70\xe0\x27\x4d\x9a\x64\xb4\x8a\xcd\xce\xce\xc6\xbf\xff\
-\xfe\x8b\x71\xe3\xc6\x41\x22\x91\x40\x2e\x97\xab\x7a\x04\x8a\xa2\
-\x60\x6b\x6b\x0b\x67\x67\x67\x58\x59\x59\xc1\xd2\xd2\x52\xad\x37\
-\x23\x84\xa8\xf5\xac\x2f\x33\x0c\xc3\x68\xf4\xa4\xf6\xf6\xf6\xe8\
-\xdb\xb7\xaf\x6a\x94\x52\xfe\xc6\x9f\x9a\x9a\x8a\x84\x84\x04\x50\
-\x14\x85\xa2\xa2\x22\x5c\xb9\x72\x05\x86\x9c\x3a\xa6\x3a\x86\x0f\
-\x1f\x8e\x6d\xdb\xb6\xf1\xcf\x9f\x3f\x5f\x0c\xa0\xc6\xa9\x17\x6b\
-\x7c\x1b\x23\x84\x34\xa7\x28\x6a\xf6\xa2\x45\x8b\x58\x43\x4b\xfc\
-\x5c\x19\x45\x45\x45\x1a\xbd\xc1\xe5\xcb\x97\x91\x96\x96\x06\x7b\
-\x7b\x7b\xb8\xb9\xb9\x69\x0c\x01\xfd\xfd\xfd\xe1\xe1\xe1\x01\x07\
-\x07\x07\x8d\xe1\x6d\x13\x35\x43\x2c\x16\xc3\xd6\xd6\x16\xe5\xd7\
-\xf7\x5b\xb6\x6c\x09\x7f\x7f\x7f\x04\x04\x04\xc0\xc2\xc2\x42\x63\
-\x88\x9c\x9d\x9d\x8d\x8c\x8c\x0c\x48\xa5\xd2\xc6\x34\xb7\xc1\x60\
-\x59\x16\xd3\xa6\x4d\x63\x09\x21\xef\x10\x42\x9a\xd7\xb4\x5e\x6d\
-\xc6\x1e\x0b\x25\x12\x09\x99\x39\x73\x66\x1d\xcc\xd3\x1f\x9e\x3c\
-\x79\x82\xa8\xa8\x28\x1c\x39\x72\x04\x87\x0f\x1f\x46\x7a\x7a\xba\
-\xda\xf9\x7e\xfd\xfa\xe1\xcc\x99\x33\xb8\x73\xe7\x0e\x7c\x7d\x7d\
-\xb5\x3e\x3b\xda\x44\xe5\xb0\x2c\x0b\x3b\x3b\x3b\xb8\xb9\xb9\xa1\
-\x4b\x97\x2e\x88\x8b\x8b\x53\x3b\xff\xec\xd9\x33\xdc\xbe\x7d\x1b\
-\x97\x2f\x5f\x46\x44\x44\x84\x51\xc4\x95\x1a\x33\x66\x0c\x2c\x2c\
-\x2c\x08\x80\x85\x35\xad\x53\x23\xd1\x12\x42\x24\x34\x4d\xcf\x5d\
-\xb0\x60\x01\x5b\xdb\xd9\x40\x5d\x22\x08\x02\x64\x32\x99\xda\xb1\
-\xb4\xb4\x34\xe4\xe6\xe6\xc2\xcd\xcd\x0d\x7d\xfb\xf6\xd5\x98\x1d\
-\x36\x35\x35\x45\x44\x44\x84\xda\x52\x4b\x13\x8d\x4f\x60\x60\x20\
-\xae\x5d\xbb\xa6\x76\xcc\xd3\xd3\x13\xbd\x7b\xf7\x86\xbf\xbf\x3f\
-\x5a\xb4\x68\xa1\x31\x33\xfd\xf4\xe9\x53\xe4\xe6\xe6\x1a\x94\xef\
-\xb2\x58\x2c\xc6\xe4\xc9\x93\x19\x9a\xa6\xe7\x12\x42\x6c\x6a\x52\
-\x87\xd4\xe4\x0d\x12\x42\x66\x8a\x44\xa2\x1f\x93\x93\x93\x69\x2b\
-\x2b\x2b\x8d\x0f\xa5\xb2\x94\xf7\xd5\x1d\xab\x6b\xbd\xaa\xda\x2a\
-\x2e\x2e\x46\x4a\x4a\x0a\x9e\x3c\x79\x82\x27\x4f\x9e\xa0\x4d\x9b\
-\x36\xe8\xd8\xb1\x63\x8d\x6d\x48\x4d\x4d\x85\xbf\xbf\x3f\x8e\x1e\
-\x3d\xaa\x36\x7b\xac\xcf\xef\xd9\x58\xda\x2a\xfb\x3a\x3a\x3a\x1a\
-\x93\x26\x4d\xc2\xc9\x93\x27\xe1\xe2\xe2\x52\xa3\x7a\x57\xaf\x5e\
-\x45\x61\x61\x21\x18\x86\x81\x44\x22\x81\x97\x97\x97\xda\x73\xb3\
-\xbe\xbe\xe7\xc2\xc2\x42\x0c\x19\x32\x44\x5e\x52\x52\xf2\xa1\x20\
-\x08\xdf\x6b\x54\x2a\x47\x8d\x7a\x5a\x91\x48\x34\x73\xcc\x98\x31\
-\xc4\x10\x7c\x8c\x9f\x3d\x7b\x86\x6b\xd7\xae\x81\xe3\x38\xf8\xf9\
-\xf9\xc1\xd3\xd3\xb3\x56\xf5\xa3\xa2\xa2\x40\x08\x81\x9f\x9f\x5f\
-\x03\x59\x58\x73\xe4\xbc\x1c\x19\x85\x19\xe0\x05\xbe\xfa\xc2\x46\
-\x86\xaf\xaf\x2f\x28\x8a\xaa\xd5\xe6\x81\xce\x9d\x3b\xa3\x73\xe7\
-\xce\x68\xdd\xba\x75\x85\xeb\xd8\xe5\x47\x5d\xfa\x82\x99\x99\x19\
-\x06\x0f\x1e\x4c\xb3\x2c\x5b\xa3\x90\xab\xd5\xce\x1e\x13\x42\xda\
-\x00\xe8\x3e\x69\xd2\x24\xbd\xf2\xa4\x90\x4a\xa5\x78\xfc\xf8\x31\
-\xb2\xb2\xb2\xd0\xa5\x4b\x17\xd5\x71\x27\x27\x27\xbc\xf6\xda\x6b\
-\xa0\x28\xaa\x4e\xc3\xa4\xd8\xd8\x58\x38\x3b\x3b\x6b\x38\x36\x34\
-\x16\xd9\xc5\xd9\x58\x1f\xb1\x1e\xe1\x49\xe1\x78\x94\xf3\x08\x72\
-\x5e\x0e\x96\x62\xd1\xbe\x59\x7b\xbc\xee\xf5\x3a\x26\xf9\x4d\x6a\
-\xd0\xeb\xa7\xe4\xa7\xe0\xc0\xbd\x03\x00\x80\x80\x66\x01\xe8\xe3\
-\xdc\xa7\x41\xaf\x57\x19\x26\x26\x26\x68\xd5\xaa\x15\xe2\xe2\xe2\
-\x30\x64\xc8\x90\x1a\xd7\x53\x2e\xb7\x95\x9f\xc5\xcf\xce\xce\xc6\
-\xad\x5b\xb7\x60\x6d\x6d\x0d\x7b\x7b\x7b\xd8\xd9\xd9\x55\xba\x4e\
-\xac\x0b\x86\x0d\x1b\x46\x8e\x1e\x3d\x1a\x58\x13\x67\x8b\x9a\x58\
-\x3d\xd9\xce\xce\x4e\x3e\x70\xe0\x40\xbd\x70\xa6\x10\x04\x01\xe7\
-\xcf\x9f\x47\x5a\x5a\x9a\x6a\x89\x85\xe7\x79\xd5\xd2\x4b\x7d\xd7\
-\xf5\x62\x62\x62\xd4\x5c\xf7\x1a\x93\xf0\xa4\x70\xcc\x39\x39\x07\
-\xcf\x8b\x9e\xab\x1d\x97\xf1\x32\x5c\x7b\x72\x0d\x8f\x73\x1e\x37\
-\xb8\x68\x93\xf3\x92\xb1\x39\x7a\x33\x00\x60\x9a\xdf\x34\x9d\x89\
-\x16\x50\x3c\xc3\x96\x9f\x8c\xaa\x2b\x56\x56\x56\xf0\xf1\xf1\xc1\
-\xb3\x67\xcf\x90\x98\x98\x88\xdc\xdc\xdc\x5a\x8f\xc2\x1a\x92\xc0\
-\xc0\x40\xd8\xda\xda\xca\x9e\x3f\x7f\x3e\x19\x40\x95\x7b\x5d\xab\
-\x15\xad\x48\x24\x9a\x39\x69\xd2\x24\x56\x5f\x9c\x29\x08\x21\xb0\
-\xb1\xb1\x41\xeb\xd6\xad\xe1\xe4\xe4\xa4\x72\xb5\xd3\xd6\xe4\x43\
-\x4c\x4c\x0c\x46\x8e\x1c\xa9\x95\xb6\x6a\x43\x56\x71\x16\xe6\x85\
-\xce\x53\x09\x36\xc8\x25\x08\xf3\xbb\xcc\x87\xa7\xad\x27\x52\xf3\
-\x53\xf1\x4f\xd2\x3f\x08\xbe\x17\x5c\x61\xdd\xec\xe2\x6c\x3c\x29\
-\x78\x02\x17\x2b\x17\x98\x31\x9a\x4e\x0f\x15\xf1\x38\xf7\x31\x44\
-\xb4\x08\x2d\xcc\xeb\x9f\xe2\x24\x25\x3f\x05\x00\xe0\x64\xe1\xa4\
-\x76\x3c\xbd\x30\x1d\xb9\xd2\x5c\xb4\xb6\x6a\x0d\x86\xd4\xbe\x57\
-\xf3\xf4\xf4\x54\xf3\x30\xab\x0f\x14\x45\xc1\xce\xce\x0e\x76\x76\
-\x76\xe0\x38\x4e\x63\xa9\x2f\x27\x27\x07\x0c\xc3\x54\xe8\x34\xd2\
-\x18\xbc\x08\x84\xcf\xfe\xf9\xe7\x9f\x33\x5e\x38\x5b\x54\xfa\x85\
-\xae\x72\x22\x8a\x10\xd2\x13\xc0\xc5\xc8\xc8\x48\xb5\xd4\x8e\x8d\
-\x31\x29\xc3\xf3\x3c\x1e\x3d\x7a\x84\xfb\xf7\xef\xa3\x6d\xdb\xb6\
-\x70\x75\x75\xad\x73\x5b\x35\xad\x57\x52\x52\x02\x17\x17\x17\x6c\
-\xdb\xb6\x0d\x63\xc7\x8e\x6d\xf0\xeb\x95\x3d\xb6\xe2\xc2\x0a\x6c\
-\xbf\xb9\x1d\x00\xd0\xb9\x65\x67\xfc\x3d\xee\x6f\x0d\x37\x44\x29\
-\x27\x05\x4b\x95\x0e\x78\x0e\xde\x3b\x88\x75\x57\xd6\xa9\x44\x43\
-\x08\x41\x97\x16\x5d\xb0\xba\xef\x6a\x78\xda\x94\xf6\x22\xdd\x7e\
-\xeb\x86\x27\x05\x4f\xd0\xd2\xa2\x25\x36\x0d\xd8\x84\xf9\x67\xe6\
-\x23\x2d\x3f\x0d\x00\x10\xe4\x1c\x84\xad\xaf\x6c\x85\x39\x63\x8e\
-\xc5\xe7\x17\xab\x86\xc6\xe5\x59\xde\x63\x39\xa6\xfb\x4d\xc7\xe0\
-\xfd\x83\x91\x98\x9d\x08\x2b\x91\x15\x76\x0f\xdf\x8d\x39\x61\x73\
-\x90\x92\x9f\x82\x11\xee\x23\xb0\xa9\xdf\x26\x48\x39\x29\x7e\xfe\
-\xf7\x67\x6c\xbf\xbd\x1d\x79\x52\x45\x90\x36\x9a\xd0\x18\xee\x36\
-\x1c\xcb\xba\x2e\x83\x8d\x49\xe9\x04\x69\x75\x9f\xcd\xc9\x93\x27\
-\xb1\x60\xc1\x02\x44\x47\x47\x43\x2c\x16\xd7\xfa\x33\xad\xee\x58\
-\xd9\xd7\xb1\xb1\xb1\xc8\xcc\xcc\x84\xa5\xa5\x25\x5a\xb4\x68\x01\
-\x7b\x7b\x7b\xd5\xe7\xdf\x58\x93\x6f\x89\x89\x89\x78\xe3\x8d\x37\
-\x00\xa0\xaf\x20\x08\x95\x6e\x2a\xae\x72\x2c\x49\x08\x99\xe6\xed\
-\xed\x2d\x6b\xec\x5c\xac\x29\x29\x29\x38\x78\xf0\x20\x2e\x5f\xbe\
-\x0c\x33\x33\x33\x58\x5a\x5a\x36\xca\x75\xef\xdf\xbf\x0f\x9e\xe7\
-\xe1\xe3\xa3\xf5\x4c\x0e\xd5\x72\xfd\x69\xa9\x23\xc1\x9c\xc0\x39\
-\x1a\x82\x05\xa0\x26\xd8\x1d\xff\xee\xc0\x07\xa7\x3e\x40\x4a\x7e\
-\x0a\x2c\x58\x0b\xf4\x70\xea\x01\x9a\xd0\x88\x4c\x8b\xc4\xe8\xe0\
-\xd1\x48\xcd\x4f\xd5\xa8\x9f\x51\x98\x81\x49\x47\x27\x21\xa3\x30\
-\x43\x75\x2c\x3c\x39\x1c\x3f\xde\xa8\x7d\xae\xa8\x22\x79\x11\xa6\
-\x84\x4c\x51\xdd\x30\x94\x7c\x1c\xfe\x31\xbe\xb9\xf6\x0d\xf2\xa4\
-\x79\x68\x6e\xd6\x1c\x01\xcd\x02\xc0\x09\x1c\x0e\x27\x1c\xc6\xe4\
-\xe3\x93\x21\xe7\xe5\x35\xbe\x86\xa7\xa7\x27\x78\x9e\x47\x62\x62\
-\x62\xad\xed\xab\x2d\xde\xde\xde\x68\xdf\xbe\x3d\xc4\x62\x31\x12\
-\x13\x13\x55\xae\x96\x8d\x89\x9b\x9b\x1b\x3c\x3c\x3c\x64\x84\x90\
-\xa9\x55\x95\xab\x54\xb4\x84\x10\x31\x4d\xd3\x6f\x4e\x9d\x3a\xb5\
-\xd1\x9f\x65\x2d\x2d\x2d\xe1\xe5\xe5\x85\xb1\x63\xc7\x22\x28\x28\
-\xa8\xd1\x82\xaa\xc5\xc4\xc4\x40\x24\x12\xc1\xdd\xdd\xbd\x51\xae\
-\xa7\x44\x10\x04\xdc\xcb\xbc\xa7\x7a\xed\x61\xe3\x51\x65\xf9\x5c\
-\x69\x2e\xbe\xba\xfc\x15\x00\xa0\xb9\x79\x73\x5c\x9b\x7e\x0d\x7b\
-\x47\xef\xc5\xbe\x31\xfb\x00\x00\x05\xb2\x02\xac\x8f\x58\xaf\x51\
-\x4f\xc6\xcb\x30\xd6\x73\x2c\x22\xa7\x44\x22\x78\x4c\xe9\x50\xfb\
-\x62\x8a\x62\xbb\xde\xba\xbe\xeb\xf0\xe7\xc8\x3f\x55\xc7\xa7\xf9\
-\x4d\x43\xc2\xec\x04\x24\xcc\x4e\xc0\x74\xbf\xe9\x1a\x6d\xb5\x30\
-\x6f\x81\xef\x06\x7e\x87\x88\xb7\x23\xf0\x7e\x87\xf7\x11\xf5\x24\
-\x0a\x47\x13\x8e\x02\x00\xfa\x3a\xf7\xc5\x85\x89\x17\xb0\x6f\xc4\
-\x3e\x2c\xe9\xba\x04\x00\x10\x97\x1d\x87\xfd\xf7\xf7\xd7\xf8\x73\
-\x69\xdd\xba\x35\x44\x22\x91\xd6\x9e\x6b\xab\xc3\xca\xca\x0a\x6d\
-\xdb\xb6\x45\xe7\xce\x9d\xd5\x76\x38\x71\x1c\xd7\x68\xa1\x5d\x47\
-\x8c\x18\xc1\x52\x14\x35\x91\x10\x52\xa9\xbb\x5d\x55\x0f\x1a\xa3\
-\x78\x9e\x37\x7f\xd1\x5d\x37\x18\x19\x19\x19\x88\x8d\x8d\x45\x8f\
-\x1e\x3d\x54\x53\xf4\x56\x56\x56\x3a\x09\xf1\x12\x13\x13\x03\x4f\
-\x4f\xcf\x46\x0f\x4a\x4e\x08\x01\x43\x95\xfe\x2b\x64\x7c\xd5\x4b\
-\x13\xb1\x99\xb1\x28\x92\x17\x01\x00\xac\x44\x56\xf8\xfc\xe2\xe7\
-\xaa\x73\x0c\xc5\x40\xce\xcb\x71\x23\xfd\x46\x85\x75\xe7\x06\xce\
-\x85\x8d\x89\x0d\x02\x9b\x07\xc2\x9c\x35\x47\x81\xac\x00\xe9\x05\
-\xe9\x15\x96\xad\x8e\x85\x9d\x17\x62\x40\xab\x01\x8a\x7d\xc1\x26\
-\xb6\xf8\xd5\xde\xc6\x26\x00\x00\x20\x00\x49\x44\x41\x54\xf9\x56\
-\x69\xda\x9a\x12\xae\x04\x2b\x2f\x2b\x82\x33\xe4\x94\xe4\xa8\x8e\
-\xdf\x78\x76\x03\x6f\x7a\xbf\x59\xa3\xf6\x69\x9a\x86\x9b\x9b\x5b\
-\xa3\x89\xb6\xec\x75\xcb\x92\x99\x99\x89\x84\x84\x04\x58\x5b\x5b\
-\xc3\xd9\xd9\xb9\x41\x47\x7e\x43\x86\x0c\xc1\x96\x2d\x5b\xcc\x00\
-\x8c\x06\xb0\xb7\xa2\x32\x95\x8a\x96\x61\x98\xe9\x7d\xfa\xf4\xe1\
-\x5b\xb6\x6c\xd9\x20\x33\x50\x19\x19\x19\xb8\x71\xe3\x06\x52\x53\
-\x53\xd1\xac\x59\x33\x14\x17\x17\xeb\x6c\x99\x45\x49\x4c\x4c\x8c\
-\x4e\x86\xc6\x00\xe0\x63\xef\x83\x2b\x29\x57\x00\x00\x77\x33\xee\
-\xc2\xcb\xd6\xab\xd2\xb2\x4f\x0b\x9e\xaa\xfe\x8e\xcb\x8a\x43\x5c\
-\x96\xe6\x97\xfa\x71\xae\xe6\xa6\x11\x3b\x53\x3b\xb4\x96\x94\x6e\
-\xbd\x63\x69\x16\x90\x01\x9c\xc0\x69\x94\xad\x0e\x96\x62\xd1\xd3\
-\x51\xdd\x99\xbf\xac\xf8\xaf\xa4\x5d\xc1\x95\xb4\x2b\x1a\xf5\x92\
-\xf3\x6a\x97\xaf\x47\x9b\x33\xc8\x75\xa5\x59\xb3\x66\x10\x8b\xc5\
-\x48\x4e\x4e\xc6\xed\xdb\xb7\xe1\xe1\xe1\x01\x7b\x7b\xfb\x06\xb9\
-\x96\x9d\x9d\x1d\x3a\x77\xee\xcc\x5f\xbb\x76\x6d\x1a\x6a\x23\x5a\
-\x42\x88\x2d\x21\xe4\x95\x29\x53\xa6\x34\xd8\x94\xf1\xe3\xc7\x8f\
-\x21\x97\xcb\x31\x68\xd0\x20\xb4\x6c\xd9\xb2\xa1\x2e\x53\x2b\x62\
-\x63\x63\x31\x63\x46\x83\xa4\x14\xad\x96\x9e\x4e\x3d\x55\xa2\xdd\
-\x1c\xb5\x19\x43\xda\x0c\x81\x19\xab\x3e\x93\xf9\xac\xf0\x19\x1c\
-\xcc\x1c\xe0\x2a\x71\x55\x1d\xeb\xd7\xaa\x1f\x56\xf6\x2e\x0d\x37\
-\xa4\x9c\xd8\x20\xd0\x7c\x26\x16\xd1\xea\x7e\xd4\x15\x95\xa1\xca\
-\xc4\xd2\xae\xca\xa9\xc3\x94\x31\x85\x09\xa3\x3e\x82\x6b\x65\x55\
-\xba\xed\xf0\x1d\xff\x77\x30\xce\x73\x9c\x86\x5d\x26\x74\xed\x36\
-\x59\x78\x7a\x7a\xe2\xcf\x3f\xff\xac\xbe\x60\x03\x23\x91\x48\x20\
-\x91\x48\x90\x9b\x9b\xdb\xe0\x33\xcc\xc3\x87\x0f\xa7\xa3\xa2\xa2\
-\x06\x13\x42\x6c\x05\x41\x78\x5e\xfe\x7c\x65\xcf\xb4\x7d\x29\x8a\
-\xa2\xb4\x99\x8b\xb5\xfc\x6e\x99\x8e\x1d\x3b\x62\xc8\x90\x21\x7a\
-\x23\xd8\xc2\xc2\x42\x24\x27\x27\xab\xed\xef\x6c\x4c\xe6\x76\x9e\
-\x0b\x77\x1b\xc5\xb3\x74\x7c\x56\x3c\x86\xee\x1d\x8a\x3d\x77\xf6\
-\xe0\x62\xf2\x45\x1c\xbc\x77\x10\x8b\xce\x2c\xc2\x88\xfd\x8a\xff\
-\x47\x5b\xdb\xb6\x70\xb4\x50\x38\x0f\xfc\x93\xfc\x0f\x12\xb3\x13\
-\xe1\x62\xe9\x82\x36\x92\x36\xa0\x09\x8d\xa3\xf1\x47\x11\x92\x50\
-\xb7\xa5\x92\x66\x66\xcd\x54\x7f\x5f\x4c\xb9\x88\xb0\x47\x61\x88\
-\x48\x8b\x40\xa1\xbc\xb0\x8a\x5a\x0a\x7a\x3a\xf6\x54\x0d\xf3\x8f\
-\x25\x1e\x43\xbe\x34\x1f\x6d\xac\xda\xa0\x95\x65\x2b\x14\xc9\x8b\
-\xb0\xfb\xee\x6e\xdc\x7d\x5e\xbb\xf0\xa8\x1e\x1e\x1e\x48\x4b\x4b\
-\x43\x51\x51\x51\xed\xde\x48\x03\x61\x65\x65\xa5\xe6\x94\x21\x97\
-\xcb\x11\x17\x17\x87\x92\x92\x12\xad\x5d\xa3\x4f\x9f\x3e\x78\x91\
-\x89\xa0\x6f\x45\xe7\x2b\x1b\x1e\x0f\x08\x08\x08\x90\x5b\x5a\x5a\
-\xb2\xf5\x5d\xff\xe4\x79\x1e\xb7\x6f\xdf\xc6\xfd\xfb\xf7\x31\x72\
-\xe4\x48\xd5\xae\x99\x8a\xc2\xa1\xe8\x12\x65\x9a\x45\x5d\x6d\x52\
-\x17\xd3\x62\xfc\xf4\xea\x4f\xf8\xcf\xc9\xff\x20\x36\x33\x16\x89\
-\xd9\x89\xf8\xf8\xec\xc7\x6a\x65\xec\x4d\xed\x55\x65\x37\x0e\xdc\
-\x88\xa9\x47\xa7\x42\xca\x49\x31\x33\x64\x26\x4c\x19\x53\xf0\x02\
-\x8f\x12\x4e\xf1\xe5\x99\xe2\x37\xa5\x4e\x76\x38\x5b\x38\xc3\xcd\
-\xda\x0d\x89\xd9\x89\x48\xc8\x4e\xc0\x7b\xa1\xef\x01\x00\x8e\x8c\
-\x3b\x82\x76\x76\x55\x3b\x9d\xb8\x5b\xbb\x63\x61\xe7\x85\x58\x1b\
-\xb9\x16\x29\xf9\x29\x18\x7f\x64\x3c\x2c\x45\x96\x28\x94\x15\xaa\
-\x86\xe0\x01\xcd\x02\xaa\x6c\x43\xc3\x1e\x67\x67\x00\x0a\x9f\xf0\
-\xc6\x9e\x20\xac\x09\x32\x99\x0c\x85\x85\x85\xf8\xf7\xdf\x7f\xe1\
-\xe4\xe4\x84\x96\x2d\x5b\x56\x38\xf3\x5f\x1b\xcc\xcc\xcc\xe0\xe5\
-\xe5\x25\x8f\x89\x89\x19\x08\xe0\xef\xf2\xe7\x2b\x14\xad\x58\x2c\
-\x1e\xa6\x0d\x0f\xa8\x27\x4f\x9e\xe0\xca\x95\x2b\x28\x28\x28\x80\
-\xbf\xbf\xbf\x5e\xb9\x8d\x95\x27\x29\x29\x09\x00\x34\x9c\xd3\x1b\
-\x13\x6f\x3b\x6f\x9c\x7c\xe3\x24\x76\xdf\xde\x8d\xf0\xa4\x70\x24\
-\x64\x25\xe0\x59\xe1\x33\xb4\x30\x6f\x81\x80\xe6\x01\x98\xe0\x53\
-\x1a\x03\xac\xb7\x73\x6f\x9c\x79\xf3\x0c\xbe\x89\xfa\x06\x77\x32\
-\xee\x20\x25\x2f\x05\x16\x22\x0b\x34\x37\x6f\x8e\x1e\x4e\x3d\x30\
-\xda\x63\xb4\xaa\x6c\x60\xf3\x40\x64\x16\x65\xc2\xde\x4c\xfd\x39\
-\xac\x53\xf3\x4e\xc8\x93\xe6\xc1\xce\xb4\x74\x76\x9e\xa6\x68\xfc\
-\x36\xec\x37\xfc\x7a\xfb\x57\xc4\x67\xc5\xab\x26\xbc\xcc\x59\xc5\
-\x7c\x83\xbf\xbd\x3f\xec\x4d\xec\x61\x21\xaa\x38\xb9\xf6\xac\xf6\
-\xb3\xd0\xb1\x59\x47\xfc\xfc\xef\xcf\x48\xc8\x4e\x40\x66\x71\x26\
-\x1c\x2d\x1c\xe1\x6c\xe1\x8c\x5e\x4e\xbd\x34\x9e\x83\xab\x43\xe9\
-\x8e\x98\x92\x92\xa2\x97\xa2\x35\x35\x35\x85\xbf\xbf\x3f\x52\x53\
-\x53\x91\x92\x92\x02\x86\x61\xd0\xac\x59\xb3\xea\x2b\x56\x43\xd7\
-\xae\x5d\xd9\x84\x84\x84\x57\x2b\x3a\xa7\xe1\x5c\x41\x08\x69\x01\
-\x20\x2d\x24\x24\x04\x03\x07\x0e\xac\xd7\xc2\xf2\xed\xdb\xb7\xf1\
-\xec\xd9\x33\x74\xed\xda\x15\xe6\xe6\xe6\x7a\xbb\xcb\x02\x00\x76\
-\xed\xda\x85\x2f\xbe\xf8\x02\x71\x71\x71\x8d\xb6\x98\xde\xd4\x56\
-\xcd\xea\xf5\xe8\xd1\x03\x1f\x7c\xf0\x81\xd2\xf1\x40\x6f\xff\x17\
-\x52\xa9\x14\x2c\xcb\x6a\xc5\x29\x23\x32\x32\x12\xf3\xe6\xcd\x03\
-\x80\x96\x82\x20\x3c\x29\x7b\xbe\xa2\xae\x6f\x00\xc3\x30\x7c\x8f\
-\x1e\x3d\xea\x1d\x9c\x47\x1f\x76\xca\xd4\x94\xa4\xa4\x24\xd5\x50\
-\xac\x09\xfd\xc2\xd1\xd1\x11\x29\x29\x29\xd5\x17\xd4\x31\xe5\x03\
-\x26\x48\xa5\x52\xe4\xe6\xe6\xd6\x69\xa6\xd9\xdf\xdf\x1f\x34\x4d\
-\xf3\x1c\xc7\x0d\x00\xf0\x47\xd9\x73\x1a\xc2\x24\x84\x0c\xe8\xdc\
-\xb9\x33\x57\xdb\x19\x32\xb9\x5c\xae\x1a\x0a\x1b\x22\x49\x49\x49\
-\x3a\x1d\x1a\x37\x26\x37\xd3\x6f\x62\xc1\x99\x05\x90\x72\x86\x11\
-\xb6\xc5\x50\x44\x5b\x9e\x9c\x9c\x1c\x24\x26\x26\x22\x31\x31\x51\
-\x63\x22\xb6\x3a\x4c\x4c\x4c\xd0\xae\x5d\x3b\x0e\x80\x46\x8e\x55\
-\x0d\xd1\x8a\x44\xa2\xa1\x83\x06\x0d\xaa\xd5\xf3\x6c\x76\x76\x36\
-\x8e\x1e\x3d\x8a\x07\x0f\x1e\x20\x3f\x3f\xbf\x56\xc6\xe9\x0b\xc9\
-\xc9\xc9\x2f\x8d\x68\x4f\x3d\x3a\x85\x6b\xe9\xd7\x34\x96\x80\xf4\
-\x15\x47\x47\x47\xa4\xa6\x6a\xba\x65\xea\x3b\x0e\x0e\x0e\xf0\xf2\
-\xf2\x42\x76\x76\x36\x6e\xdf\xbe\x5d\xeb\xfd\xbc\xdd\xba\x75\x63\
-\x59\x96\x1d\x5a\xfe\xb8\x9a\x68\x09\x21\xae\x25\x25\x25\x4e\x7d\
-\xfb\x56\x38\xd3\x5c\x21\x4a\xc1\x8a\x44\x22\x8c\x1a\x35\x0a\xcd\
-\x9b\xd7\x38\x3e\x95\x5e\xf1\x32\x0d\x8f\xc3\x93\xc2\xd1\xdb\xa9\
-\x77\xf5\x05\xf5\x04\x43\xed\x69\x01\xc5\xfa\xae\x9f\x9f\x1f\x6c\
-\x6d\x6d\x6b\xed\x69\xd7\xa9\x53\x27\xc8\x64\x32\x27\x42\x88\x6b\
-\xd9\xe3\xe5\x7b\xda\x01\x22\x91\x88\xab\x4d\x2a\x0c\x6b\x6b\x6b\
-\x74\xeb\xd6\x0d\x43\x87\x0e\xd5\xb9\x47\x53\x5d\x91\xcb\xe5\x78\
-\xf2\xe4\xc9\x4b\xd1\xd3\xe6\x94\xe4\xe0\x56\xc6\x2d\x04\x39\x07\
-\x55\x5f\x58\x4f\x70\x74\x74\x44\x66\x66\xa6\x56\xd7\x42\x1b\x13\
-\x91\x48\x54\xa7\x0e\xc1\xcf\xcf\x0f\x2c\xcb\x6a\x0c\x91\xd5\x44\
-\x4b\x51\xd4\xa0\x1e\x3d\x7a\x08\x65\xb7\x41\xd5\x04\x4f\x4f\x4f\
-\x83\x0e\x2a\x9d\x9a\x9a\x0a\x9e\xe7\x5f\x0a\xd1\x5e\x4a\xb9\x04\
-\x40\xe1\x81\x65\x28\x28\x97\x7d\x0c\x71\x88\x5c\x11\x82\x20\x20\
-\x39\x39\x59\x63\x4f\x6f\x79\x44\x22\x11\xda\xb7\x6f\x2f\x10\x42\
-\xd4\x52\x37\xaa\x29\x8d\x61\x98\xc1\x03\x07\x0e\xac\x72\x31\xb5\
-\xa4\xa4\x04\x11\x11\x11\xd5\x5e\xd0\x90\x50\x3a\x56\xbc\x0c\xc3\
-\xe3\xf0\xe4\x70\x74\x70\xe8\x00\x4b\x51\xe3\x6c\x77\xd4\x06\x65\
-\xd7\x6a\x8d\x01\xa9\x54\xaa\xda\x28\x53\xdd\x16\xc0\x6e\xdd\xba\
-\x31\x34\x4d\xab\x65\x35\x57\x89\x96\x10\xd2\x4c\x2a\x95\xda\x97\
-\x8d\xb7\x54\x9e\xa2\xa2\x22\x84\x84\x84\xe0\xd1\xa3\x47\x1a\x69\
-\x16\x0d\x99\x47\x8f\x1e\x41\x2c\x16\x37\xda\x16\x40\x5d\x12\x9e\
-\x14\x8e\x20\x17\xc3\x19\x1a\x03\x80\x8d\x8d\x0d\xc4\x62\x31\x9e\
-\x3e\x7d\x5a\x7d\x61\x03\x40\x2c\x16\xc3\xc7\xc7\x07\x72\xb9\x1c\
-\xb1\xb1\xb1\x55\x4e\x50\xf9\xf9\xf9\x41\x2e\x97\xdb\x13\x42\x54\
-\x1e\x1b\x65\x7b\x5a\x2f\x00\x68\xdb\xb6\x6d\x85\x95\x0b\x0a\x0a\
-\x70\xec\xd8\x31\xc8\xe5\x72\x0c\x1b\x36\xac\xd1\x36\xa6\x37\x06\
-\xcf\x9f\x3f\x87\x8d\x4d\x8d\x42\xce\x1a\x34\x0f\x73\x1e\x22\x29\
-\x2f\xc9\xa0\x9e\x67\x95\x48\x24\x12\xe4\xe4\xe4\x54\x5f\xd0\x40\
-\x50\x0a\xd7\xc4\xc4\xa4\x4a\xb7\xc7\x32\x09\xd1\x54\xdb\xbe\xd4\
-\x44\x6b\x62\x62\xc2\x39\x39\xa9\xc7\xf9\x51\xc2\x30\x0c\xec\xec\
-\xec\x30\x7c\xf8\x70\x58\x58\x54\xec\xc2\x66\xa8\x64\x65\x65\xa9\
-\x65\xa3\x33\x56\xfe\x49\xfe\x07\x16\xac\x45\xad\xfd\x7f\xf5\x01\
-\x6b\x6b\x6b\xa3\x12\x2d\xa0\x78\x66\xf5\xf0\xf0\xa8\xd2\xbd\xd7\
-\xc1\xc1\x01\x62\xb1\x98\x43\x65\xa2\x75\x77\x77\xe7\x2a\x53\xbd\
-\x58\x2c\x46\xff\xfe\xfd\x75\x16\xf8\xaa\x21\xc9\xce\xce\x86\xb5\
-\xb5\xb5\xae\xcd\x68\x70\x2e\x24\x5d\x40\x0f\xa7\x1e\x6a\x1b\xee\
-\x0d\x05\x63\xeb\x69\x6b\x83\x8b\x8b\x4b\xc5\xa2\xa5\x69\xda\xc7\
-\xd7\xd7\x57\x2f\xc2\xa4\x36\x36\xd9\xd9\xd9\x46\x3f\x3c\x96\xf3\
-\x72\x5c\x4e\xbd\x8c\x3e\x2e\xba\x0b\x89\x5a\x1f\x24\x12\x89\x51\
-\xe4\xee\xa9\x8a\xf4\xf4\x74\x3c\x78\xf0\x40\xe3\xb8\xbb\xbb\x3b\
-\x4b\xd3\xb4\x2a\x3a\x83\xea\x96\xcb\x30\x8c\x9f\x97\x97\x97\x5a\
-\x37\x1b\x13\x13\x83\xe2\xe2\x62\xb5\xc4\xc0\xc6\x48\x76\x76\xb6\
-\xd1\x2f\xf7\xdc\x4c\xbf\x89\x3c\x69\x9e\x41\x39\x55\x94\xc5\xda\
-\xda\x5a\xb5\x13\x0b\x00\xee\xdf\x17\xe3\xca\x15\x75\xbf\x00\x13\
-\x13\x1e\xcd\x9b\xcb\xe1\xe3\x53\x04\x7b\x7b\xfd\xcc\x26\x50\x15\
-\x62\xb1\x18\x8f\x1f\x3f\x86\xa9\xa9\xa9\x9a\x93\x52\xeb\xd6\xad\
-\x09\x4d\xd3\x2a\x47\x7e\x06\x00\x08\x21\x2c\x21\xc4\xd9\xcb\xab\
-\x34\xc4\x49\x5a\x5a\x1a\xae\x5c\xb9\x82\x4e\x9d\x3a\x35\xa6\xdd\
-\x3a\x21\x2b\x2b\x4b\x27\x31\xa9\x1a\x93\xf0\xe4\x70\x38\x5b\x3a\
-\xa3\x8d\x75\x1b\x5d\x9b\x52\x27\x24\x12\x09\x6e\xdd\xba\xa5\x7a\
-\x7d\xfd\xba\x19\xd6\xae\xad\x38\x66\x33\x4d\x0b\x18\x3b\x36\x0b\
-\x2b\x56\xa4\xa2\x9e\x5b\x5b\x1b\x15\x89\x44\x02\x67\x67\x67\xa4\
-\xa4\xa4\xa8\x45\x21\x6d\xdd\xba\x35\x64\x32\x99\x33\x21\x84\x15\
-\x04\x41\xa6\x1c\x1e\xbb\x09\x82\x40\x2b\x67\x8e\x8b\x8b\x8b\x71\
-\xe6\xcc\x19\xb8\xba\xba\x1a\xfd\x97\x19\x78\x39\x86\xc7\xe1\xc9\
-\xe1\x06\x39\x6b\xac\xa4\xaa\x67\xda\x66\xcd\xe4\xe8\xdc\xb9\x00\
-\x76\x76\x8a\x35\x4f\x8e\x23\x38\x70\xc0\x16\xc7\x8e\x19\xde\x3c\
-\x85\x32\xe6\x72\xd9\x2d\x7b\xad\x5b\xb7\x86\x20\x08\x34\x00\x37\
-\xa0\x74\x78\xec\x45\x08\x51\xa5\x49\xc8\xcb\xcb\x83\x44\x22\x41\
-\x50\x90\xe1\xfe\x93\x6b\x83\xb1\x8b\x36\x4f\x9a\x87\x9b\xe9\x37\
-\x31\xd3\xdf\x70\x73\x0b\x57\x35\x7b\xdc\xaf\x5f\x2e\x56\xac\x50\
-\x04\x5f\x5f\xb4\xc8\x19\xc7\x8f\x4b\x00\x00\x77\xef\x9a\x62\xc4\
-\x08\xc5\x73\x70\x71\x31\x85\x63\xc7\x24\x48\x48\x10\x23\x23\x83\
-\x41\x51\x11\x05\x7b\x7b\x19\x3c\x3c\x4a\x30\x6a\xd4\x73\x98\x9b\
-\xf3\xe0\x79\x60\xfb\xf6\x66\x90\xcb\x29\xd8\xda\xca\x30\x61\x42\
-\xa6\xea\x1a\x3c\x4f\xf0\xcb\x2f\xcd\xc1\xf3\x80\xa3\xa3\x14\x23\
-\x47\x96\x9e\xbb\x78\xd1\x0a\x57\xaf\x5a\x20\x29\x49\x0c\x5b\x5b\
-\x19\xda\xb6\x2d\xc2\xc8\x91\xcf\xa1\xf0\x40\x54\x70\xf5\xaa\x25\
-\xae\x5d\xb3\x84\x20\x08\x18\x3e\x3c\x13\xcf\x9f\x33\x38\x7d\xda\
-\x16\x4f\x9f\xb2\x68\xdf\x3e\x1f\x13\x27\xa6\x83\xa2\x14\x42\x2d\
-\x1f\x3d\xa5\xcc\x6b\x2f\x00\xf7\x94\xa2\xf5\x6e\xd1\xa2\x45\x89\
-\x99\x99\x99\x18\x50\x4c\x33\x2b\xe3\x43\xe9\x53\x48\x98\x86\x80\
-\xe7\x79\xe4\xe6\xe6\x1a\xb5\x68\x2f\xa7\x5e\x06\x2f\xf0\xb5\x8e\
-\x1a\xa1\x4f\x48\x24\x12\x14\x15\x15\xa9\x36\x9a\x57\x86\x87\x47\
-\xa9\x7f\x72\xab\x56\xa5\x7f\x3f\x7b\xc6\xe0\xb3\xcf\x2a\x5e\xce\
-\xdc\xb6\xad\x19\xfe\xfc\x33\x1e\x8e\x8e\x52\xc4\xc7\x9b\xe2\xc4\
-\x09\x6b\x10\x02\xf4\xea\x95\x07\x27\x27\xc5\xf6\xc5\xab\x57\x2d\
-\xf0\xc3\x0f\x8a\xe1\xf8\x7f\xff\xab\xb8\x41\x48\xa5\x14\x16\x2e\
-\x6c\x83\x8b\x17\x35\xb3\x49\xfe\xfa\x6b\x0b\x6c\xd8\x10\x8f\xb6\
-\x6d\x8b\x5e\xd4\xb7\xc4\x2f\xbf\x28\xe2\xa1\x3d\x7a\x64\x82\xd3\
-\xa7\x6d\xc0\x71\x8a\xb1\xfb\xa9\x53\xb6\x88\x8f\x37\xc3\xa7\x9f\
-\x6a\x4e\x42\x01\x8a\x67\x5d\x7b\x7b\xfb\x92\x8c\x8c\x0c\x6f\x00\
-\x87\x95\xc3\x63\x2f\x1f\x1f\x1f\xfd\x48\xd6\xd3\xc8\xe4\xe4\xe4\
-\x40\x10\x04\xa3\x16\xed\x85\xa4\x0b\x68\xef\xd0\x1e\xd6\x26\x86\
-\x37\x5c\x54\x22\x91\x28\x7a\xcf\x8a\x7a\xdb\x67\xcf\x58\x44\x45\
-\x99\x63\xef\x5e\x5b\x04\x07\x2b\xfe\x8f\x16\x16\x3c\xfa\xf7\x2f\
-\x0d\x30\xce\x30\x02\x46\x8d\xca\xc2\x96\x2d\x8f\xf0\xd7\x5f\xf1\
-\xf8\xe5\x97\x44\x4c\x9a\xa4\xc8\xb4\x90\x9d\xcd\x60\xd3\x26\x85\
-\x20\xdf\x7a\x4b\x71\x4c\x10\x80\xbf\xff\x2e\x5d\xbb\x3f\x79\x52\
-\xf1\xd9\x51\x94\x80\x11\x23\x14\x01\x12\xb7\x6d\x6b\xa1\x12\x6c\
-\x9b\x36\xc5\x58\xb2\x24\x09\x7d\xfb\x2a\xec\x4b\x4d\x15\xe1\xb3\
-\xcf\x5c\x55\xc2\x2c\x4b\x68\xa8\x2d\xba\x75\xcb\xc5\xac\x59\x69\
-\x10\x89\x14\xfb\x6c\x8f\x1d\xb3\x47\x56\x96\xe6\xcd\xa8\xb8\xb8\
-\xf8\x45\xfb\x6d\x68\xbc\x58\xf6\xa1\x00\x40\x2c\x16\xfb\xf8\xf8\
-\xf8\x30\xba\x48\x85\xa0\x6b\xb2\xb2\xb2\x00\xc0\xa8\x45\xfb\x4f\
-\xf2\x3f\x06\xfd\x3c\x0b\x40\xb5\x8e\x5e\x91\x68\xcf\x9e\xb5\xc4\
-\xf4\xe9\xae\x58\xb5\xaa\x25\x52\x53\x59\xf8\xf9\x15\xe1\xef\xbf\
-\xe3\xd0\xbc\x79\xe9\x0c\x72\xcb\x96\x32\x7c\xf1\x45\x32\xdc\xdc\
-\x8a\x91\x97\x47\x23\x3b\x9b\x81\xaf\x6f\x21\xcc\xcc\x14\xa2\x89\
-\x8d\x55\x64\x95\xf7\xf7\x2f\x40\xbb\x76\x0a\x17\xdd\x43\x87\x6c\
-\xc1\xf3\x04\x1c\x47\x70\xfa\xb4\xe2\xa6\xd1\xb3\x67\x1e\x1c\x1c\
-\x14\xed\x1e\x3c\x58\x1a\x91\xe2\xfb\xef\xe3\xf0\xfa\xeb\xcf\xf0\
-\xf5\xd7\x09\xf0\xf2\x52\xd4\xbf\x7f\xdf\x0c\xb1\xb1\x9a\x7e\x0d\
-\x83\x07\x3f\xc7\xe6\xcd\x71\x78\xf7\xdd\x14\xbc\xf2\x8a\xe2\x06\
-\xc0\xf3\x40\x4a\x8a\xfa\x46\x9d\xe2\xe2\x62\xdc\xb9\x73\x07\x39\
-\x39\x39\x70\x75\x75\x65\x58\x96\xf5\x01\x4a\x67\x8f\xed\x6d\x6d\
-\x6d\x71\xe8\xd0\x21\xf8\xf8\xf8\xe8\x2c\xd5\xa3\x2e\x50\xa6\x7b\
-\x30\x35\x35\xd5\xb1\x25\x0d\x43\x52\x5e\x12\x1e\xe6\x3c\x34\xd8\
-\xf5\x59\x25\x26\x26\x8a\x78\xc9\xca\x9e\xa7\x2c\x96\x96\x1c\xcc\
-\xcd\x79\x3c\x79\xa2\xe8\xa9\x62\x62\x4c\x70\xe2\x84\x04\xd3\xa6\
-\x95\xe6\x2c\xca\xca\x62\xb0\x60\x81\x0b\xae\x5e\xad\x78\xfb\x68\
-\x46\x46\x69\x2f\xf7\xd6\x5b\x19\x58\xbe\xbc\x15\x9e\x3d\x63\x71\
-\xe1\x82\x25\x44\x22\x1e\x39\x39\x8a\x27\xc9\x31\x63\x14\x22\xcb\
-\xcc\x64\x90\x9b\xab\x18\x9c\xb6\x6a\x55\xa2\x76\x83\x08\x0c\xcc\
-\xc7\xbd\x7b\x0a\xb1\x3e\x78\x60\x02\x5f\x5f\xf5\x68\x2e\xdd\xba\
-\xe5\xaa\xfe\xb6\xb2\x2a\xed\x28\x0b\x0a\xd4\x77\xca\x99\x98\x98\
-\xc0\xc6\xc6\x06\xc9\xc9\xc9\x90\x48\x24\x20\x84\xd8\x03\x2f\x7a\
-\x5a\x41\x10\x2c\xad\xad\xad\x91\x9d\x9d\x8d\x16\x2d\xea\x9f\xfa\
-\xd0\x90\x90\x4a\x15\xcf\x2c\xe5\xe3\xfb\x18\x0b\xe1\x49\xe1\x30\
-\x67\xcd\x11\xd8\x3c\x50\xd7\xa6\xd4\x0b\xe5\xff\xa7\x22\xe7\xfa\
-\x57\x5f\xcd\xc1\xa9\x53\xf7\xb1\x6f\x5f\x22\x4c\x4c\x78\x70\x1c\
-\xc1\xa6\x4d\xcd\x11\x13\x53\x7a\x23\xfe\xea\xab\x96\x2a\xc1\x0e\
-\x1d\x9a\x8d\xd5\xab\x93\xb0\x69\xd3\x43\x48\x24\x8a\xc9\xa2\xb2\
-\x53\x37\x43\x86\x64\xc3\xd6\x56\x21\xa6\x83\x07\xed\x10\x1a\xaa\
-\xe8\xe5\x25\x12\x39\xfa\xf4\x51\xf4\xf4\x26\x26\xa5\x15\x0a\x0a\
-\xd4\x9f\x2c\xcb\xbe\x16\x8b\x35\xc3\xcc\xb4\x68\x51\x1a\xe6\xa7\
-\xba\x0c\xb2\x2d\x5b\xb6\x44\x71\x71\x31\x1c\x1c\x1c\x00\xc0\x12\
-\x78\x21\x5a\x9e\xe7\xcd\x4d\x4d\x4d\x61\x6d\x6d\xfd\x52\xf8\xe0\
-\x96\x45\xf9\x48\x60\xac\xa2\xbd\x90\x74\x01\xdd\x1d\xbb\x1b\xa4\
-\xeb\x62\x59\x94\x93\x4f\x55\xed\x88\x69\xd7\xae\x08\xff\xfd\xaf\
-\x22\x35\x09\xcf\x13\xac\x5f\x5f\xda\x01\xc5\xc6\x2a\x7a\x6a\x8a\
-\x12\xf0\xd9\x67\x29\x18\x31\x22\x1b\xce\xce\x52\xe4\xe4\x68\xaa\
-\x86\x65\x05\xbc\xfe\xba\x62\x76\xf8\x9f\x7f\x2c\x11\x16\xa6\x10\
-\xed\xf0\xe1\x59\x60\x59\x85\x58\xcd\xcd\x39\x34\x6f\xae\x10\x5f\
-\x66\x26\x83\x98\x18\xb3\x17\xf6\x11\x44\x47\x97\x6e\xa6\x71\x77\
-\xaf\x5f\x90\x75\x53\x53\x53\x38\x38\x38\x40\x24\x12\x81\xe7\x79\
-\x73\xe0\x85\x68\x39\x8e\x33\x63\x18\x06\x6d\xda\x18\xe6\xc2\x7b\
-\x7d\x50\x7e\x09\x1a\x3b\xe9\x56\x63\xc0\x0b\x3c\x2e\xa5\x5c\x42\
-\x6f\x67\xc3\xf4\x82\x2a\x4b\x4d\x44\x0b\x00\x13\x27\x66\xa9\xd6\
-\x6b\xa3\xa2\xcc\x55\xbd\xab\x72\x16\x98\xe7\x09\x56\xac\x70\xc6\
-\x0f\x3f\x34\xc3\x7f\xff\x5b\xf9\xf7\xfd\xf5\xd7\x33\xc1\x30\x02\
-\x78\x9e\xa8\x7a\xce\xd1\xa3\xd5\x33\x74\xbc\xff\x7e\x69\x64\xd3\
-\x19\x33\xbc\xb0\x74\x69\x1b\x8c\x1c\xe9\x87\x94\x14\x45\x07\x30\
-\x60\x40\x36\xdc\xdc\x34\x87\xf3\xb5\xa5\x55\xab\x56\x60\x18\x06\
-\x1c\xc7\x99\x01\x00\x45\x08\x31\xe1\x79\x9e\x6e\xd6\xac\x19\x3a\
-\x76\xec\x58\xef\x0b\x18\x1a\xc6\x3c\x3c\xbe\x99\x7e\x13\x39\x25\
-\x39\x06\xff\x3c\x0b\xd4\x5c\xb4\x62\x31\x8f\x69\xd3\x4a\xd7\x50\
-\xb7\x6e\x55\x6c\x43\x9d\x37\xef\x29\x2c\x2d\x15\x43\xe1\xd0\x50\
-\x09\x7e\xf8\xa1\x39\x5e\x7d\x35\x1b\x2e\x2e\x15\x47\xa4\xb4\xb7\
-\x97\x61\xf0\xe0\xd2\x49\x2f\x1f\x9f\x22\xd5\xf2\x8d\x92\x51\xa3\
-\x32\xf1\xdf\xff\xa6\xc2\xd4\x94\x87\x54\x4a\x10\x1a\x6a\x83\x67\
-\xcf\x14\x76\xbe\xf2\x4a\x16\x3e\xf9\xe4\x51\x2d\xdf\x65\xe5\x98\
-\x99\x99\x41\x10\x04\x9a\x10\x62\xc2\xe0\xc5\x38\xd9\xc2\xc2\xa2\
-\xde\xe9\x0c\x0c\x11\xe5\xf0\xd8\x18\x7b\xda\x7f\x92\xff\x81\xa3\
-\x85\x23\xdc\xad\xf5\x2f\x32\x7f\x6d\x29\x2f\xda\xfe\xfd\xf3\xe0\
-\xe6\xa6\x10\x9c\x83\x83\xba\xf0\xde\x7c\xf3\x39\x7c\x7d\x15\x33\
-\xb8\x84\x28\x7a\x57\x1f\x9f\x62\x1c\x39\x72\x1f\x17\x2f\x5a\x42\
-\x2a\x25\xf0\xf5\x2d\x82\x97\x57\x21\x06\x0e\xcc\x41\x71\x31\xa5\
-\x72\x6c\x28\xcb\xf0\xe1\xcf\x71\xfc\xb8\x62\x68\x3c\x6a\x54\xa6\
-\xc6\x79\x00\x98\x36\xed\x29\x46\x8f\xce\xc4\x9d\x3b\xa6\x48\x4a\
-\x12\xc3\xce\x4e\x0e\x4f\xcf\x22\xb8\xba\x16\xab\xf9\x38\x8c\x1a\
-\x95\x81\x2e\x5d\xf2\x20\x08\x02\x3c\x3d\x4b\x03\x48\x8c\x1b\x97\
-\x8e\x9e\x3d\x15\x0e\x20\xe5\x6f\x0a\x65\x29\xb3\xbb\xce\x92\x01\
-\x60\x05\xc0\xa8\x36\xb5\xd7\x06\x65\x4f\x6b\x2c\xa2\xbd\x9b\x79\
-\x17\x91\xa9\x91\x48\xcc\x7e\x80\x73\x8f\xcf\xc2\xcf\xc1\x70\x02\
-\xc6\x57\x85\x72\xcf\xa9\x52\xb4\xcd\x9a\xc9\xd1\xac\x99\xe2\x86\
-\x5b\xde\x01\xc8\xc4\x84\x47\x97\x2e\x9a\xf1\xb7\x6d\x6d\xe5\x18\
-\x39\x32\x4b\xf5\x5a\x10\x00\x3f\x3f\xcd\x08\x2c\x59\x59\x0c\x9e\
-\x3e\x65\xf1\xd7\x5f\x0e\x00\x14\x13\x47\xa3\x46\x69\x24\xaf\x53\
-\x61\x63\x23\x47\xaf\x5e\xb9\x95\x9e\x07\x14\x5e\x54\x8e\x8e\x52\
-\x0d\x5b\x9d\x9c\x4a\xe0\xe4\x54\x82\x1b\x37\x14\x37\x93\xca\x10\
-\x8b\xc5\x98\x30\x61\x02\xf6\xed\xdb\x67\xc5\x00\xb0\x54\xee\xa0\
-\x7f\x19\x91\xcb\xe5\x46\x31\x34\x2e\x96\x17\x63\xf5\xe5\x35\xd8\
-\x75\x7b\x57\x99\x2f\x86\x80\xc7\xb9\x8f\xb1\x3c\xfc\x53\x2c\xeb\
-\xbe\x54\x23\x75\xa6\xa1\xc1\xb2\x6c\xad\x63\x07\xd7\x85\x2f\xbe\
-\x70\x56\xad\xcb\x02\xc0\xf2\xe5\xc9\xaa\xf5\xdc\x86\x22\x2a\xca\
-\x0a\x1f\x7e\xe8\x89\x19\x33\xd2\xf0\xc6\x1b\x69\xaa\x09\x2f\x25\
-\x0c\xc3\xa0\x7b\xf7\xee\xd8\xb7\x6f\x9f\x25\x63\x6b\x6b\x6b\x37\
-\x6f\xde\x3c\x55\x8f\xf3\xb2\x21\x93\xc9\x8c\xa2\x97\x5d\x72\x6e\
-\x29\x0e\xde\x3f\xa8\x71\x5c\x00\xf0\xfb\x9d\xdf\x91\x53\x92\x83\
-\x6f\x07\x6d\x69\x7c\xc3\xb4\x48\x63\x89\xd6\xdb\xbb\x08\xc5\xc5\
-\x14\xdc\xdd\x8b\xd1\xbf\x7f\x0e\x02\x02\x1a\x27\x00\x7f\x61\x21\
-\x8d\xef\xbe\x73\xc6\xff\xfd\x9f\x3d\x3e\xfc\x30\x09\x41\x41\xa5\
-\xa3\x02\x33\x33\x33\x98\x98\x98\xc0\xc5\xc5\xa5\x05\xe3\xe1\xe1\
-\xd1\x06\xc0\x4b\x11\xd4\xac\x22\xa4\x52\xa9\xc1\xf7\xb4\x67\x1f\
-\x9d\xad\x40\xb0\xea\x77\xea\x23\xf1\x47\x30\xae\xed\x58\xf4\x6f\
-\xd5\xbf\xf1\x0c\xd3\x32\x8d\x25\xda\xd9\xb3\xd5\x03\xc8\x35\xb6\
-\xfb\x7d\x72\xb2\x09\x3e\xfa\xc8\x13\xdd\xba\xe5\x60\xfe\xfc\xc7\
-\x68\xd3\xa6\x48\x15\x53\xdc\xd5\xd5\xd5\x95\xb2\xb7\xb7\x6f\x05\
-\xbc\xbc\xa2\x95\xcb\xe5\x06\xdf\xd3\x9e\x7d\x7c\xae\x46\xe5\x4e\
-\x3f\x3a\xd3\xb0\x86\x34\x30\x8d\x25\x5a\x7d\x21\x22\x42\x82\xb7\
-\xdf\xf6\xc3\xd7\x5f\xb7\x06\x21\xb6\xd8\xbe\x7d\xbb\x10\x17\x17\
-\x27\x65\xb2\xb2\xb2\x6c\x62\x62\x62\x04\x53\x53\x53\x8d\xb4\x97\
-\x2f\x03\x62\xb1\x18\xbe\xbe\xbe\xba\x36\xa3\x5e\xc4\x64\xc6\x68\
-\x1e\xbc\xb4\x1c\xb8\xb8\x5c\xed\xd0\x1e\x42\xb0\x8f\x32\xdc\x1b\
-\x94\x4c\xd6\x11\xeb\xd7\xb7\xc2\xd7\x5f\xfb\x54\x5f\xd8\xc0\xa8\
-\x68\x63\x81\xf2\xf8\xde\xbd\xcd\x71\xf2\xa4\x1d\xf2\xf3\x5b\x0a\
-\x72\x79\xb4\x0d\x73\xf9\xf2\x65\xd9\xe5\xcb\x97\xc9\xea\xd5\xab\
-\x0d\x7e\x98\x58\x17\x8a\x8a\x8a\x10\x1b\x1b\xab\x6b\x33\xea\x45\
-\x33\xb3\x0a\x92\x18\xbb\x1f\x03\x2c\xd5\x83\x7b\xfb\xd9\xb7\xc7\
-\xd4\xf6\x8a\x0c\xf1\x35\xc9\x93\x5a\x11\x35\x29\x57\xd3\x1c\xaf\
-\xb5\xad\xb7\x76\xed\x2d\xf4\xea\xd5\x03\xbd\x7b\xa7\xd5\xba\xed\
-\x8a\xca\xd5\xe7\x3d\xd7\xf5\xfd\x54\x56\xe6\xfc\x79\x1b\x9c\x3f\
-\x5f\xf1\x2e\x2c\x4b\x4b\x39\xa6\x4e\x7d\x88\xcd\x9b\x4f\x50\x00\
-\x5a\x31\x00\x92\x00\xe0\xe1\xc3\x87\x95\xc6\x3c\x36\x66\x58\x96\
-\x35\xf8\x49\xb8\x0e\xcd\xfc\x71\x24\xfe\x88\xfa\xc1\xe6\x37\x14\
-\x3f\x65\x18\xd9\x63\x29\xc6\x77\x50\x4c\xaa\x18\x52\x52\x69\x25\
-\x1b\x37\x4a\x11\x18\xc8\x61\xcc\x98\xec\x4a\xcb\x34\x86\x9d\xda\
-\x6c\x4b\xf9\x3a\x2d\x4d\xac\x21\x5a\x8a\x12\x30\x6e\xdc\x33\xbc\
-\xf3\x4e\x32\x32\x33\xef\x63\xf3\x66\x39\x00\x24\x51\x00\x1e\x01\
-\x40\x5c\x5c\x9c\xc6\x05\x5e\x06\x18\x86\x31\x78\xd1\xbe\xed\xfb\
-\x36\x9c\x2d\xab\x4e\x69\xd2\xd2\xbc\x25\xde\x6e\xf7\x76\x23\x59\
-\xd4\x30\x54\xb7\x01\xde\x98\xe8\xd4\x29\x17\xbf\xff\x7e\x07\x8b\
-\x16\x3d\x84\x44\x22\x57\xa5\xae\x01\xf0\x88\x02\x90\x0c\xa0\xc2\
-\xd0\x8d\x2f\x03\x22\x91\xc8\xe0\x45\x6b\xce\x9a\xe3\xdb\xc1\x5b\
-\x60\x67\x5a\xf1\x64\xa2\x8d\x89\x0d\xbe\x19\xb4\x09\xe6\xac\x61\
-\x66\x35\x54\x62\x2c\xcb\x73\x55\xe1\xe8\x58\x82\xaf\xbe\x8a\xc3\
-\xd6\xad\xb1\x70\x77\x2f\x75\xfc\x28\x93\x7c\xec\x11\x03\x20\x17\
-\x50\xe4\xb3\x79\x19\x61\x18\xc6\x28\x66\x24\x3b\xb5\xe8\x84\x53\
-\x6f\x84\x61\x43\xe4\x46\x5c\x4e\xb9\x8c\x87\x39\x0f\xe1\x2a\x71\
-\x45\x0f\xa7\x1e\x58\xd0\x79\x7e\xa5\x82\x36\x24\x8c\x59\xb4\xa6\
-\xa6\x1c\xde\x7f\x3f\x05\x6f\xbf\xfd\x44\x2d\xb6\x94\x92\x32\xa2\
-\xcd\x65\x00\xe4\x01\xc0\xbf\xff\xfe\xdb\x78\x16\xea\x11\x2c\xcb\
-\x82\xe7\x79\x70\x1c\x07\xba\xba\xcd\x8d\x7a\x8e\x9d\xa9\x1d\x56\
-\xf7\xf9\x12\x80\x22\x38\xb9\x72\x3b\x9e\x31\xac\x0a\x70\x1c\x07\
-\x9e\xe7\x8d\x56\xb4\x93\x26\x95\xee\x18\xaa\xe8\xdf\x15\x1f\x1f\
-\xaf\xfc\x33\x8f\xc2\x0b\xd1\x5e\xba\x74\x09\xf9\xf9\x8d\xe3\xf9\
-\xa1\x4f\x54\xb5\xb9\xda\x90\x31\xf4\xfd\xb3\xe5\x31\xe6\x2d\x94\
-\xd5\x51\x54\x54\x54\xb6\x53\xcd\xa5\x00\xe4\x03\x10\x78\x9e\xc7\
-\xb1\x63\xc7\x74\x67\x99\x8e\x50\x3a\xa2\x1b\xfa\x73\xad\xb1\xf3\
-\x32\x8b\x36\x3c\x3c\x1c\x3c\xcf\x03\x0a\x37\xb7\x02\x4a\x10\x04\
-\x9e\xa6\xe9\x62\x5f\x5f\x5f\xec\xdf\xbf\x5f\xc7\xe6\x35\x3e\xc6\
-\xda\xd3\x1a\x1b\x2f\xb3\x68\x4f\x9d\x3a\x05\x57\x57\x57\xd0\x34\
-\x5d\x2c\x08\x02\x4f\x01\x00\xc3\x30\x05\x7e\x7e\x7e\x08\x0d\x0d\
-\x45\x6e\x6e\xd5\x5b\x8c\x8c\x8d\xa6\x9e\xd6\x30\x78\x59\x45\x5b\
-\x50\x50\x80\xcb\x97\x2f\xc3\xdd\xdd\x1d\x14\x45\x15\x00\x2f\xc2\
-\xcd\x10\x42\xf2\x5d\x5d\x5d\x01\x00\xbb\x77\xef\xd6\x9d\x85\x3a\
-\x40\xf9\x25\x68\x12\xad\x7e\xa3\x14\xed\xcb\xe6\xb5\x77\xf4\xe8\
-\x51\x08\x82\x00\x27\x27\x27\x10\x42\xf2\x81\xd2\x54\x97\x79\x32\
-\x99\x0c\x73\xe6\xcc\xc1\x97\x5f\x7e\x69\xf4\x29\x05\xcb\xa2\xdc\
-\x47\xdc\x24\x5a\xfd\xc6\xd8\x82\x15\xd4\x84\xbc\xbc\x3c\x6c\xdf\
-\xbe\x1d\x13\x26\x4c\x00\xc7\x71\xc0\x8b\x49\x63\x0a\x00\xa4\x52\
-\x69\x42\x62\x62\xa2\xb0\x74\xe9\x52\x50\x14\x85\x2f\xbf\xfc\x52\
-\x97\xb6\x36\x2a\xca\xdd\x4d\x2f\x6b\xc2\x62\x43\x41\x19\x9f\xda\
-\xc2\xc2\x42\xc7\x96\x34\x1e\xdb\xb7\x6f\x07\x45\x51\x98\x31\x63\
-\x06\x52\x53\x53\x05\xb9\x5c\x9e\x00\x94\x86\x50\xbd\x7b\xe7\xce\
-\x1d\xa9\x44\x22\xc1\xca\x95\x2b\xf1\xc3\x0f\x3f\x94\x5d\x17\x32\
-\x6a\x94\x91\xeb\x5f\xa6\xd1\x85\x21\xa2\xbc\xa9\x2a\xff\x5f\xc6\
-\x4e\x52\x52\x12\xf6\xef\xdf\x8f\x77\xdf\x7d\x17\x16\x16\x16\x48\
-\x48\x48\x90\xf2\x3c\x7f\x17\x28\x1d\x1e\xdf\x4b\x4c\x4c\x64\x04\
-\x41\xc0\x8c\x19\x33\xe0\xe5\xe5\x85\x25\x4b\x96\xe8\xd0\xe4\xc6\
-\x43\x2c\x16\xc3\xc4\xc4\x44\x95\x1e\xa4\x09\xfd\x24\x27\x27\x07\
-\x34\x4d\xbf\x34\x3d\xed\x96\x2d\x5b\xd0\xba\x75\x6b\x8c\x1e\x3d\
-\x1a\x82\x20\x20\x25\x25\x85\x01\x70\x0f\x28\x23\xda\x92\x92\x12\
-\x3a\x39\x39\x19\x34\x4d\x63\xc3\x86\x0d\x38\x72\xe4\x08\x82\x83\
-\x83\x75\x67\x75\x23\x62\x6d\x6d\x8d\xe7\xcf\x2b\x0f\xdc\xd5\x84\
-\xee\xc9\xce\xce\x56\x25\xe1\x32\x76\x4e\x9f\x3e\x8d\x0b\x17\x2e\
-\x60\xfe\xfc\xf9\xa0\x28\x0a\xe9\xe9\xe9\x90\x4a\xa5\x34\xca\x8b\
-\x16\x00\xee\xdd\xbb\x07\x00\xe8\xdf\xbf\x3f\xfe\xf3\x9f\xff\x60\
-\xf6\xec\xd9\xb8\x73\xe7\x8e\x4e\x0c\x6f\x4c\x6c\x6c\x6c\x9a\x86\
-\xc7\x7a\x4e\x4e\x4e\xce\x4b\x21\xda\x84\x84\x04\xac\x5a\xb5\x0a\
-\x13\x27\x4e\x44\x97\x2e\x5d\x00\xa8\xed\x0b\x28\x15\xad\x20\x08\
-\xd9\x22\x91\x28\xeb\xfe\xfd\xfb\xaa\xca\xeb\xd6\xad\x43\xa7\x4e\
-\x9d\xf0\xfa\xeb\xaf\x1b\xfd\xd0\x51\x22\x91\x18\xfd\x7b\x34\x74\
-\x5e\x06\xd1\xe6\xe5\xe5\x61\xd1\xa2\x45\xf0\xf1\xf1\xc1\x07\x1f\
-\x7c\xa0\x3a\xfe\xe8\xd1\x23\x30\x0c\x93\x25\x08\x42\x36\x50\xda\
-\xd3\x82\x10\x72\x4f\xd9\xd3\x02\x0a\xa7\x83\x3f\xfe\xf8\x03\x32\
-\x99\x0c\x53\xa6\x4c\x51\xba\x51\x19\x25\x36\x36\x36\x4d\xc3\x63\
-\x3d\x27\x3b\x3b\xdb\xa8\x27\xa1\x78\x9e\xc7\x27\x9f\x7c\x02\xb9\
-\x5c\x8e\xd5\xab\x57\xab\x6d\x5e\x79\xf4\xe8\x11\x08\x21\x2a\x71\
-\xaa\x44\x5b\x52\x52\x72\xfb\xee\xdd\xbb\x6a\x09\x6a\x1d\x1c\x1c\
-\xb0\x6f\xdf\x3e\xfc\xf3\xcf\x3f\xf8\xf4\xd3\x4f\x1b\xc5\x78\x5d\
-\xa0\xcc\x18\xd8\x84\xfe\x62\xec\x3d\xed\xf7\xdf\x7f\x8f\xeb\xd7\
-\xaf\x63\xdd\xba\x75\x1a\xb9\x92\x13\x13\x13\xe5\x32\x99\xec\xb6\
-\xf2\x75\xd9\x84\x98\xf7\x62\x62\x62\x34\xba\xd3\x8e\x1d\x3b\x62\
-\xeb\xd6\xad\xf8\xfa\xeb\xaf\xb1\x71\xe3\xc6\x86\xb3\x5a\x87\xd8\
-\xd8\xd8\x34\x0d\x8f\xf5\x1c\x63\x9e\x88\xda\xbd\x7b\x37\x7e\xff\
-\xfd\x77\x7c\xf2\xc9\x27\xf0\xf6\xf6\xd6\x38\xff\xe0\xc1\x03\x1e\
-\x2f\x9e\x67\x81\x17\x49\xa5\x5f\x70\xef\xd9\xb3\x67\xa2\xfc\xfc\
-\x7c\x8d\x69\xf5\x37\xdf\x7c\x13\xb9\xb9\xb9\xf8\xf0\xc3\x0f\x91\
-\x9f\x9f\x8f\x15\x2b\x56\x34\x94\xfd\x3a\xa1\x69\xf6\x58\xff\x31\
-\xd6\x9e\x76\xdb\xb6\x6d\xd8\xb9\x73\x27\x16\x2d\x5a\x84\xa1\x43\
-\x87\x6a\x9c\x2f\x2a\x2a\xc2\xf3\xe7\xcf\x45\xa8\x44\xb4\xb1\x00\
-\x70\xff\xfe\x7d\x04\x06\x6a\x26\x20\x56\x2e\xf2\xbe\xf3\xce\x3b\
-\xc8\xcd\xcd\xc5\xfa\xf5\xeb\x8d\x26\x61\x57\xd3\xf0\x58\xff\x31\
-\xb6\x67\x5a\x41\x10\xf0\xf5\xd7\x5f\x63\xdf\xbe\x7d\x58\xb9\x72\
-\x25\x86\x0d\x1b\x56\x61\xb9\xc7\x8f\x1f\x2b\xff\x54\x85\x0c\x2d\
-\x2b\xda\x07\x14\x45\xc9\xee\xdc\xb9\xc3\x56\x24\x5a\x00\x78\xfb\
-\xed\xb7\x61\x66\x66\x86\xa9\x53\xa7\x22\x3f\x3f\x1f\x5b\xb7\x6e\
-\x05\x45\x51\x15\x96\x35\x24\x9c\x9c\x9c\x90\x9b\x9b\x8b\x92\x92\
-\x12\x88\xc5\x62\x5d\x9b\xd3\x44\x39\x4a\x4a\x4a\x90\x9f\x9f\x6f\
-\x34\x01\xf5\x79\x9e\xc7\x97\x5f\x7e\x89\xe3\xc7\x8f\x63\xf5\xea\
-\xd5\x18\x30\x60\x40\xa5\x65\xe3\xe3\xe3\x41\x51\x94\x8c\xe7\x79\
-\x55\x10\x37\x95\xe2\x04\x41\x90\xd3\x34\x1d\x79\xfe\xfc\xf9\x2a\
-\x63\x93\x8c\x1d\x3b\x16\xfb\xf6\xed\xc3\xbe\x7d\xfb\x30\x65\xca\
-\x14\x14\x17\xd7\x3f\x69\xae\xae\x71\x71\x71\x81\x20\x08\x65\x23\
-\xde\x35\xa1\x47\xa4\xa5\xa5\x41\x10\x04\x38\x3a\x3a\xea\xda\x94\
-\x7a\x23\x95\x4a\xf1\xc9\x27\x9f\xe0\xe4\xc9\x93\xd8\xb0\x61\x43\
-\x95\x82\x05\x80\xe8\xe8\x68\x81\xa2\xa8\x48\x41\x10\x54\x93\xc4\
-\x6a\xdd\xa4\x4c\x26\x0b\x0d\x0b\x0b\xab\x76\x37\xf8\x90\x21\x43\
-\x70\xe8\xd0\x21\x9c\x3d\x7b\x16\x7d\xfb\xf6\x35\xf8\xf0\xab\x2e\
-\x2e\x2e\x00\x14\xfe\x9e\x4d\xe8\x1f\xca\xa0\x66\x86\x2e\xda\xc7\
-\x8f\x1f\x63\xfa\xf4\xe9\x88\x88\x88\xc0\x96\x2d\x5b\xd0\xb3\x67\
-\xcf\x6a\xeb\x5c\xb9\x72\x45\x26\x97\xcb\x43\xcb\x1e\x2b\x3f\xb6\
-\x3d\xf3\xe4\xc9\x13\x51\x4d\xc2\xa9\x06\x05\x05\x21\x22\x22\x02\
-\x66\x66\x66\xe8\xd5\xab\x17\xf6\xee\xdd\x5b\xab\x37\xa0\x4f\x58\
-\x5a\x5a\xc2\xca\xca\xaa\x49\xb4\x7a\x4a\x6a\x6a\x2a\x4c\x4c\x4c\
-\x60\x6b\x6b\xab\x6b\x53\xea\x4c\x68\x68\x28\x26\x4d\x9a\x04\x86\
-\x61\xb0\x67\xcf\x9e\x0a\xe7\x8d\xca\x93\x92\x92\x82\xcc\xcc\x4c\
-\x11\x00\xb5\x24\x4c\xe5\x45\x1b\x41\xd3\x74\xf1\xd9\xb3\x67\x6b\
-\x64\x88\xb3\xb3\x33\xc2\xc2\xc2\x30\x7b\xf6\x6c\xcc\x98\x31\x03\
-\x73\xe6\xcc\x41\x51\x51\xe5\xd9\xac\xf5\x19\x17\x17\x97\xa6\xe1\
-\xb1\x9e\x92\x9a\x9a\x6a\xb0\xbd\xac\x54\x2a\xc5\xea\xd5\xab\xb1\
-\x6c\xd9\x32\x8c\x1e\x3d\x1a\xbf\xfc\xf2\x0b\x5a\xb6\x6c\x59\xa3\
-\xba\x57\xaf\x5e\x05\x4d\xd3\xc5\x00\x22\xca\x1e\x57\x13\xad\x20\
-\x08\x32\x8a\xa2\x2e\x9e\x3b\x77\xae\xc6\x31\x37\x19\x86\xc1\x97\
-\x5f\x7e\x89\xe0\xe0\x60\x1c\x3e\x7c\x18\x41\x41\x41\x06\x99\x1b\
-\xc7\xd9\xd9\xb9\xa9\xa7\xd5\x53\x52\x53\x53\xe1\xe4\xe4\xa4\x6b\
-\x33\x6a\xcd\xe3\xc7\x8f\x31\x6d\xda\x34\x84\x85\x85\x61\xc3\x86\
-\x0d\x58\xb8\x70\x61\xad\x36\xf1\x5f\xbd\x7a\x55\x20\x84\x5c\x14\
-\x04\x41\xed\x91\x55\x63\xea\x57\x26\x93\x85\x9e\x3a\x75\x4a\x5e\
-\xfe\x78\x75\x0c\x1d\x3a\x14\x57\xae\x5c\x81\x95\x95\x15\x7a\xf7\
-\xee\x8d\xf5\xeb\xd7\x1b\x54\x34\x08\x17\x17\x97\x26\xd1\xea\x29\
-\x86\x26\x5a\x99\x4c\x86\x1d\x3b\x76\xe0\xad\xb7\xde\x52\x0d\x87\
-\xfb\xf5\xeb\x57\xeb\x76\x22\x23\x23\xe5\xe5\x9f\x67\x81\x0a\x44\
-\x0b\xe0\x4c\x66\x66\x26\x5b\xd6\x0f\xb9\xa6\x38\x3b\x3b\x23\x34\
-\x34\x14\x4b\x96\x2c\xc1\xba\x75\xeb\xd0\xb5\x6b\x57\xd4\x74\xa8\
-\xad\x6b\x9a\x86\xc7\xfa\x8b\x21\x0d\x8f\x23\x22\x22\x30\x71\xe2\
-\x44\x6c\xdf\xbe\x1d\xb3\x67\xcf\xc6\x8e\x1d\x3b\xea\x64\xfb\xc3\
-\x87\x0f\x91\x9d\x9d\xcd\xa2\xdc\xf3\x2c\x50\xb1\x68\xaf\x31\x0c\
-\x93\x7f\xee\xdc\xb9\xda\x5b\x0c\xc5\x70\xf9\xa3\x8f\x3e\x42\x74\
-\x74\x34\xbc\xbc\xbc\x30\x62\xc4\x08\x4c\x9d\x3a\x15\x69\x69\x69\
-\xd5\x57\xd6\x21\xce\xce\xce\x48\x4b\x4b\x53\xc6\xe2\x69\x42\x4f\
-\xe0\x38\x0e\x4f\x9f\x3e\xd5\xfb\x9e\xf6\xd9\xb3\x67\x58\xba\x74\
-\x29\xe6\xcc\x99\x83\x36\x6d\xda\xe0\xc0\x81\x03\x98\x3a\x75\xaa\
-\x2a\xda\x67\x6d\x89\x8e\x8e\x06\xc3\x30\xf9\x00\xae\x95\x3f\xa7\
-\x21\x5a\x41\x10\x78\x00\xe7\xce\x9e\x3d\x5b\xaf\x6d\x3d\xad\x5a\
-\xb5\xc2\xde\xbd\x7b\xb1\x7f\xff\x7e\x44\x45\x45\x21\x20\x20\x00\
-\xdf\x7e\xfb\x2d\xe4\xf2\x5a\x8f\xbc\x1b\x05\x67\x67\x67\xc8\xe5\
-\x72\xbd\xbf\xb9\xbc\x6c\xa4\xa7\xa7\x83\xe3\x38\xbd\xed\x69\x39\
-\x8e\xc3\xef\xbf\xff\x8e\x71\xe3\xc6\xe1\xf6\xed\xdb\xd8\xb4\x69\
-\x13\x36\x6e\xdc\x58\xe3\xc9\xa6\xca\x88\x8a\x8a\xe2\x05\x41\x38\
-\xf7\x42\x8f\x6a\x54\xe8\xce\x24\x97\xcb\xc3\xce\x9c\x39\xc3\x69\
-\x23\x07\xcc\xb0\x61\xc3\x70\xf5\xea\x55\xbc\xf7\xde\x7b\x58\xb9\
-\x72\x25\xba\x75\xeb\x86\x03\x07\x0e\xe8\xdd\x56\x3f\xe5\x5a\x6d\
-\xd3\x10\x59\xbf\x50\xae\xd1\xea\x5b\x4f\xcb\xf3\x3c\x42\x43\x43\
-\x31\x61\xc2\x04\x7c\xfb\xed\xb7\x98\x38\x71\x22\xf6\xef\xdf\x8f\
-\x3e\x7d\xfa\xd4\xbb\x6d\x41\x10\x10\x15\x15\xc5\x71\x1c\x17\x56\
-\xd1\xf9\xca\x7c\x10\xcf\xe6\xe4\xe4\xb0\xd7\xae\x69\xf4\xcc\x75\
-\xc2\xcc\xcc\x0c\x9f\x7f\xfe\x39\xa2\xa2\xa2\xd0\xb9\x73\x67\xcc\
-\x9c\x39\x13\x5d\xbb\x76\xd5\x2b\xf1\x3a\x38\x38\xc0\xdc\xdc\xdc\
-\xe0\x1d\x45\x8c\x8d\x87\x0f\x1f\xc2\xcc\xcc\x4c\x6f\x5c\x18\x05\
-\x41\x40\x68\x68\x28\x26\x4e\x9c\x88\x65\xcb\x96\xc1\xcf\xcf\x0f\
-\xfb\xf7\xef\xc7\xdc\xb9\x73\x55\xe1\x78\xeb\x4b\x6c\x6c\x2c\xf2\
-\xf3\xf3\x59\x00\x15\x4e\x08\x55\x28\x5a\x41\x10\x6e\x89\x44\xa2\
-\xc7\x7f\xfc\xf1\x87\x56\x8c\x50\xe2\xee\xee\x8e\x1f\x7f\xfc\x11\
-\xd7\xae\x5d\x43\xc7\x8e\x1d\x31\x6b\xd6\x2c\xbd\xe9\x79\x09\x21\
-\xf0\xf6\xf6\x46\x4c\x4c\x8c\x4e\xed\x68\x42\x9d\xfb\xf7\xef\xc3\
-\xc3\xc3\x43\xe7\x9b\x53\x04\x41\x40\x58\x58\x18\x26\x4c\x98\x80\
-\xa5\x4b\x97\xc2\xdb\xdb\x1b\x07\x0f\x1e\xc4\xe7\x9f\x7f\x8e\x56\
-\xad\x5a\x69\xf5\x5a\xc7\x8f\x1f\x07\xcb\xb2\x8f\x05\x41\xb8\x55\
-\xd1\xf9\x4a\xbd\xfd\xa5\x52\xe9\xf6\x3d\x7b\xf6\xc8\x1a\xe2\x19\
-\xd4\xdd\xdd\x1d\x3f\xff\xfc\x33\xa2\xa2\xa2\xe0\xef\xef\x8f\x99\
-\x33\x67\xa2\x5b\xb7\x6e\x08\x0e\x0e\xd6\xa9\x78\x7d\x7c\x7c\x70\
-\xf7\xee\x5d\x9d\x5d\xbf\x09\x4d\xe2\xe2\xe2\xe0\xe9\xe9\xa9\xb3\
-\xeb\xf3\x3c\x8f\x53\xa7\x4e\x61\xc2\x84\x09\x58\xb2\x64\x09\x3c\
-\x3d\x3d\x11\x1c\x1c\x8c\x55\xab\x56\x69\x5d\xac\x80\xe2\x19\xf9\
-\xc4\x89\x13\x32\x99\x4c\xb6\xb3\xb2\x32\x55\x6d\xd1\xd9\x9d\x95\
-\x95\xc5\x84\x86\x6a\x2c\x13\x69\x0d\x4f\x4f\x4f\x6c\xdf\xbe\x1d\
-\x51\x51\x51\xf0\xf3\xf3\xc3\x8c\x19\x33\xd0\xa1\x43\x07\x6c\xda\
-\xb4\x09\x19\x19\x19\x0d\x76\xdd\xca\x68\xea\x69\xf5\x0f\x5d\x89\
-\x36\x2b\x2b\x0b\x3b\x77\xee\xc4\xc8\x91\x23\xf1\xf1\xc7\x1f\xc3\
-\xdd\xdd\x1d\xc1\xc1\xc1\x58\xbd\x7a\x35\x94\x29\x74\x1a\x82\x2b\
-\x57\xae\x20\x27\x27\x87\x05\x50\x69\x7e\x9e\x4a\x45\x2b\x08\xc2\
-\x03\x96\x65\xaf\xec\xde\xbd\xbb\xc1\xbb\xbe\xb6\x6d\xdb\x62\xe7\
-\xce\x9d\xb8\x79\xf3\x26\x46\x8f\x1e\x8d\xcd\x9b\x37\xc3\xc7\xc7\
-\x07\xb3\x66\xcd\x42\x44\x44\x44\xf5\x0d\x68\x09\x1f\x1f\x1f\x64\
-\x66\x66\x22\x3d\x3d\xbd\xd1\xae\xd9\x44\xe5\x3c\x7f\xfe\x1c\x99\
-\x99\x99\x8d\x2a\xda\x9b\x37\x6f\x62\xd9\xb2\x65\x18\x32\x64\x08\
-\x7e\xfd\xf5\x57\x0c\x1a\x34\x08\x87\x0e\x1d\xc2\x57\x5f\x7d\xd5\
-\xa0\x62\x55\x12\x12\x12\xc2\xb3\x2c\x1b\x25\x08\x42\x42\x65\x65\
-\xaa\xdc\x0c\x2b\x93\xc9\x76\x1c\x3d\x7a\x54\x68\xac\x0d\xe2\xae\
-\xae\xae\xf8\xe2\x8b\x2f\x10\x1b\x1b\x8b\xcd\x9b\x37\x23\x3e\x3e\
-\x1e\x83\x07\x0f\x46\xaf\x5e\xbd\xb0\x73\xe7\x4e\x14\x16\x16\x36\
-\xe8\xf5\x7d\x7c\x7c\x00\xa0\x69\x88\xac\x27\x28\x27\x05\x1b\x5a\
-\xb4\x45\x45\x45\x38\x70\xe0\x00\x26\x4c\x98\x80\xa9\x53\xa7\xe2\
-\xd1\xa3\x47\xf8\xf4\xd3\x4f\x11\x1a\x1a\x8a\xf9\xf3\xe7\xc3\xd9\
-\xd9\xb9\x41\xaf\xaf\xa4\xb0\xb0\x10\xe7\xce\x9d\x13\x64\x32\xd9\
-\xf6\xaa\xca\x55\xb7\x83\x7d\x1f\xcf\xf3\xdc\xc1\x83\x07\xb5\x68\
-\x5a\xf5\x98\x98\x98\xe0\xad\xb7\xde\xc2\xb9\x73\xe7\x70\xfe\xfc\
-\x79\x74\xe8\xd0\x01\x4b\x96\x2c\x41\xdb\xb6\x6d\x31\x6f\xde\x3c\
-\x9c\x3d\x7b\xb6\x41\x9c\x20\x9a\x35\x6b\x06\x5b\x5b\xdb\xa6\x21\
-\xb2\x9e\x10\x17\x17\x07\x6b\x6b\x6b\xd8\xdb\xdb\x6b\xbd\x6d\x9e\
-\xe7\x71\xe5\xca\x15\x7c\xf6\xd9\x67\x18\x38\x70\x20\xd6\xad\x5b\
-\x07\x6f\x6f\x6f\xfc\xf1\xc7\x1f\xd8\xb3\x67\x0f\x46\x8e\x1c\xd9\
-\xe8\x01\x11\x4e\x9f\x3e\x0d\x8e\xe3\x78\x00\xfb\xaa\x2a\x57\xa5\
-\xbb\x86\x20\x08\xb9\x0c\xc3\xfc\xdf\xae\x5d\xbb\xc6\xcd\x98\x31\
-\xa3\x6e\xae\x1d\xf5\x44\x19\x58\xee\xcb\x2f\xbf\xc4\x9e\x3d\x7b\
-\x70\xe0\xc0\x01\xfc\xf6\xdb\x6f\xb0\xb7\xb7\xc7\xa8\x51\xa3\x30\
-\x6e\xdc\x38\xf4\xec\xd9\x53\x6b\xb3\x8b\xde\xde\xde\x4d\x3d\xad\
-\x9e\x70\xff\xfe\x7d\xad\xf6\xb2\x82\x20\xe0\xfa\xf5\xeb\x38\x7e\
-\xfc\x38\xc2\xc2\xc2\xf0\xfc\xf9\x73\xf8\xfa\xfa\xe2\xfd\xf7\xdf\
-\xc7\xa8\x51\xa3\x20\x91\x48\xa0\x0d\xdf\x84\xba\x72\xf4\xe8\x51\
-\x39\x21\xe4\xa8\x20\x08\x55\x46\x19\xac\x56\x88\x1c\xc7\xfd\x1a\
-\x11\x11\x31\xe1\xc1\x83\x07\x68\xd3\xa6\x8d\xf6\x2c\xac\x25\x36\
-\x36\x36\x98\x3b\x77\x2e\xe6\xce\x9d\x8b\x07\x0f\x1e\xe0\xe0\xc1\
-\x83\x38\x78\xf0\x20\x76\xec\xd8\x81\x16\x2d\x5a\xa8\x04\xdc\xb5\
-\x6b\xd7\x7a\x09\xd8\xc7\xc7\x07\x57\xaf\x5e\xd5\xa2\xe5\x4d\xd4\
-\x95\xb8\xb8\x38\xb4\x6b\xd7\xae\xde\xed\xdc\xba\x75\x0b\x27\x4e\
-\x9c\xc0\x89\x13\x27\x90\x9e\x9e\x0e\x2f\x2f\x2f\x4c\x9a\x34\x09\
-\xaf\xbc\xf2\x8a\xca\xa9\x46\xd7\x3c\x7d\xfa\x14\xd7\xaf\x5f\x67\
-\x00\xec\xaa\xae\x6c\x4d\x7a\xcf\x50\x96\x65\x33\xf7\xec\xd9\x63\
-\xb7\x7c\xf9\xf2\xfa\x5b\xa7\x05\xda\xb4\x69\x83\x05\x0b\x16\x60\
-\xc1\x82\x05\x88\x8b\x8b\xc3\xdf\x7f\xff\x8d\x83\x07\x0f\xe2\xa7\
-\x9f\x7e\x82\x93\x93\x13\xc6\x8d\x1b\x87\x01\x03\x06\xa0\x7b\xf7\
-\xee\xb5\x1e\xe2\xb4\x6b\xd7\x0e\x7b\xf6\xec\x01\xcf\xf3\x46\x11\
-\xff\xca\x90\x89\x8f\x8f\xc7\x98\x31\x63\x6a\x5d\xaf\xa4\xa4\x04\
-\x91\x91\x91\xb8\x74\xe9\x12\xce\x9c\x39\x83\x94\x94\x14\x78\x78\
-\x78\xe0\xf5\xd7\x5f\xc7\x90\x21\x43\x54\x13\x4a\xba\xec\x55\xcb\
-\x73\xe2\xc4\x09\x30\x0c\x93\x23\x97\xcb\x43\xaa\x2b\x4b\x6a\x62\
-\x38\x21\x64\x83\x8b\x8b\xcb\x7f\xe3\xe2\xe2\x58\x40\xf3\xcd\x56\
-\xd4\x46\x4d\x8e\xd5\xb5\x5e\x65\x6d\xc5\xc6\xc6\x22\x38\x38\x18\
-\x21\x21\x21\xb8\x7b\xf7\x2e\x4c\x4c\x4c\xd0\xab\x57\x2f\x0c\x18\
-\x30\x00\xfd\xfb\xf7\x87\xb7\xb7\x77\xb5\x36\x5c\xbf\x7e\x1d\x83\
-\x07\x0f\x46\x64\x64\xa4\xda\xc8\x42\x5f\xdf\xb3\x31\xb5\x55\xf6\
-\xf5\xe3\xc7\x8f\x31\x64\xc8\x10\xec\xd9\xb3\x07\x1d\x3b\x12\xa7\
-\x2e\x40\x00\x00\x1a\x23\x49\x44\x41\x54\x76\xac\xb6\x5e\x5c\x5c\
-\x1c\x2e\x5e\xbc\x88\x8b\x17\x2f\x22\x3a\x3a\x1a\x52\xa9\x14\x9e\
-\x9e\x9e\x18\x30\x60\x00\x86\x0e\x1d\x0a\x0f\x0f\x0f\xbd\x7e\xcf\
-\xe3\xc7\x8f\x97\x25\x25\x25\xfd\xc4\xf3\xfc\x5c\x8d\x4a\xe5\xa8\
-\xa9\x68\x3b\x00\xb8\x71\xf4\xe8\x51\x0c\x1a\x34\xc8\x20\xbe\xc0\
-\x4f\x9f\x3e\xc5\xe9\xd3\xa7\x71\xf6\xec\x59\x9c\x3b\x77\x0e\x19\
-\x19\x19\x68\xd1\xa2\x05\xfa\xf7\xef\x8f\xfe\xfd\xfb\xa3\x6f\xdf\
-\xbe\xb0\xb7\xb7\xd7\xa8\x27\x97\xcb\xe1\xe6\xe6\x86\x75\xeb\xd6\
-\x61\xe2\xc4\x89\x5a\xb7\x5d\x1f\xbe\x28\xfa\xda\x56\xd9\xd7\x87\
-\x0e\x1d\xc2\x8a\x15\x2b\x10\x19\x19\x09\x91\x48\xa4\x51\x2e\x3b\
-\x3b\x1b\x97\x2e\x5d\xc2\xc5\x8b\x17\x71\xe9\xd2\x25\xa4\xa7\xa7\
-\xc3\xc6\xc6\x06\x3d\x7b\xf6\x44\xcf\x9e\x3d\xd1\xa3\x47\x0f\x38\
-\x38\x38\x34\x88\x9d\xda\x6c\x4b\x10\x04\x44\x44\x44\x60\xde\xbc\
-\x79\x00\xd0\x45\x10\x84\x6a\x9f\xcd\x6a\x24\x5a\x00\x60\x59\xf6\
-\x42\x97\x2e\x5d\x7a\x9c\x3d\x7b\x96\x31\xb4\x2f\xb0\x20\x08\xf8\
-\xf7\xdf\x7f\x71\xe6\xcc\x19\x9c\x39\x73\x06\x51\x51\x51\x90\x4a\
-\xa5\x70\x77\x77\x47\x97\x2e\x5d\xd0\xa5\x4b\x17\x74\xee\xdc\x19\
-\xde\xde\xde\xa0\x69\x1a\x63\xc6\x8c\x81\x9b\x9b\x9b\x5a\x46\x05\
-\x43\x7b\xcf\x86\xd8\x56\xd9\xd7\x2b\x57\xae\x44\x7c\x7c\x3c\x7e\
-\xff\xfd\x77\xf0\x3c\x8f\xf8\xf8\x78\xdc\xb8\x71\x03\x37\x6f\xde\
-\xc4\x8d\x1b\x37\xf0\xf0\xe1\x43\x30\x0c\x83\x80\x80\x00\xf4\xec\
-\xd9\x13\xbd\x7a\xf5\x82\x8f\x8f\x8f\x6a\x3e\xc3\x90\xde\xf3\xec\
-\xd9\xb3\xb9\xbb\x77\xef\x5e\x91\x4a\xa5\xbd\x35\x2a\x54\x40\x8d\
-\x45\x4b\x08\x19\x04\x20\xec\xcc\x99\x33\xe8\xd1\xa3\x87\xd6\x0c\
-\xae\x4b\xbd\xfa\xb6\x55\x50\x50\x80\xf0\xf0\x70\x44\x44\x44\x20\
-\x32\x32\x12\x37\x6f\xde\x44\x51\x51\x11\xcc\xcd\xcd\x11\x18\x18\
-\x08\xa9\x54\x8a\x94\x94\x14\x9c\x3e\x7d\x5a\x15\x4c\xac\x49\xb4\
-\x0d\xdf\x96\xf2\x75\x76\x76\x36\x5e\x7b\xed\x35\x34\x6b\xd6\x0c\
-\x26\x26\x26\xb8\x75\xeb\x16\x0a\x0a\x0a\x60\x62\x62\x02\x5f\x5f\
-\x5f\x04\x04\x04\x20\x30\x30\x10\x5d\xbb\x76\x85\x99\x99\x99\x41\
-\xbf\xe7\x1b\x37\x6e\x60\xf6\xec\xd9\x00\x30\x58\x10\x84\x53\x1a\
-\x15\x2a\xa0\xc6\xa2\x05\x00\x91\x48\x74\xb5\x6f\xdf\xbe\x01\x47\
-\x8e\x1c\xa1\xcb\x1e\x37\xe4\x0f\x4d\x10\x04\xc8\xe5\x72\xdc\xbd\
-\x7b\x17\x57\xaf\x5e\xc5\xd5\xab\x57\x71\xe1\xc2\x05\x3c\x79\xf2\
-\x04\x00\xe0\xe6\xe6\x06\x3f\x3f\x3f\x78\x79\x79\xa9\x7e\xdc\xdc\
-\xdc\x2a\xdc\xdc\x6c\x28\xef\x59\x5f\xda\x92\xc9\x64\x78\xf8\xf0\
-\x21\xe2\xe3\xe3\x55\x3f\x31\x31\x31\xaa\x7c\xac\x0e\x0e\x0e\xe8\
-\xd1\xa3\x07\x3a\x74\xe8\x80\x0e\x1d\x3a\xc0\xcb\xcb\x0b\x34\x4d\
-\x1b\xd5\x0d\x74\xde\xbc\x79\x5c\x74\x74\xf4\x4d\xa9\x54\xda\x49\
-\xa3\x70\x25\xd4\x4a\xb4\x84\x90\x91\x00\x0e\x5f\xbe\x7c\x19\x01\
-\x01\x01\xf5\x36\x58\x1f\x3e\xb4\x8a\xca\xe4\xe4\xe4\xc0\xd3\xd3\
-\x13\x0b\x17\x2e\x04\xcf\xf3\x88\x89\x89\x41\x6c\x6c\x2c\x1e\x3d\
-\x7a\x04\x8e\xe3\xc0\xb2\x2c\x5c\x5d\x5d\xe1\xed\xed\x0d\x2f\x2f\
-\x2f\xb4\x6d\xdb\x16\xde\xde\xde\x68\xd3\xa6\x8d\x46\xe0\x2e\x7d\
-\x7c\xcf\x8d\xdd\x96\x5c\x2e\x47\x62\x62\xa2\x4a\x98\x71\x71\x71\
-\x88\x8f\x8f\xc7\xa3\x47\x8f\x20\x97\xcb\x41\xd3\x34\x9c\x9d\x9d\
-\xe1\xe1\xe1\x81\xb6\x6d\xdb\x82\xa2\x28\x6c\xdd\xba\x15\x97\x2f\
-\x5f\x86\x95\x95\x55\x83\xd9\xae\xeb\xcf\x2f\x36\x36\x16\x93\x27\
-\x4f\x06\x80\x51\x82\x20\x1c\xd1\x28\x5c\x09\xb5\x75\x98\x38\xca\
-\xb2\xec\xdd\xaf\xbe\xfa\xca\xeb\xaf\xbf\xfe\xa2\xab\x2f\x6e\x98\
-\x58\x59\x59\xc1\xcb\xcb\x0b\x52\xa9\x14\xca\x65\x2e\x41\x10\x20\
-\x95\x4a\x11\x1f\x1f\x8f\x7b\xf7\xee\x21\x36\x36\x16\xf7\xef\xdf\
-\xc7\xa1\x43\x87\xf0\xe0\xc1\x03\xd5\x97\xaf\x45\x8b\x16\x70\x76\
-\x76\x86\x93\x93\x53\x85\x3f\x96\x96\x96\x3a\x7e\x77\xda\x27\x3f\
-\x3f\x1f\xa9\xa9\xa9\x48\x4d\x4d\x45\x5a\x5a\x1a\x52\x52\x52\xd4\
-\x5e\x3f\x7d\xfa\x14\x1c\xc7\x81\xa6\x69\xb4\x6e\xdd\x1a\x1e\x1e\
-\x1e\x18\x32\x64\x08\xdc\xdd\xdd\xe1\xe1\xe1\x81\x36\x6d\xda\x40\
-\x24\x12\xa9\xbe\xd0\x5f\x7f\xfd\x35\xdc\xdc\xdc\x74\xee\xec\xd0\
-\xd0\xec\xd8\xb1\x83\x67\x59\xf6\x9e\x4c\x26\x3b\x5a\x9b\x7a\xb5\
-\x12\xad\x20\x08\x02\x21\xe4\x7f\x87\x0f\x1f\xfe\x2b\x36\x36\xb6\
-\xc2\xb4\x7c\xc6\x42\xd7\xae\x5d\x35\x36\x2b\x88\x44\x22\xb4\x6b\
-\xd7\x0e\xed\xda\xb5\x53\xfb\x32\xc9\x64\x32\x24\x24\x24\x20\x2e\
-\x2e\x0e\x8f\x1f\x3f\x46\x6a\x6a\x2a\x52\x52\x52\x70\xee\xdc\x39\
-\xa4\xa4\xa4\xa8\x65\xe4\xb3\xb4\xb4\x54\x09\xd8\xde\xde\x1e\x36\
-\x36\x36\x90\x48\x24\xb0\xb1\xb1\x81\xb5\xb5\xb5\xea\x47\x22\x91\
-\xc0\xda\xda\x5a\x27\x22\xcf\xcf\xcf\x47\x76\x76\xb6\xda\x4f\x4e\
-\x4e\x8e\xea\x77\x4e\x4e\x0e\x32\x32\x32\x54\xc2\xcc\xcb\xcb\x53\
-\xd5\xb5\xb1\xb1\x81\xa3\xa3\x23\x5a\xb6\x6c\x89\x76\xed\xda\x61\
-\xd0\xa0\x41\x70\x72\x72\x82\x9b\x9b\x1b\x5c\x5d\x5d\xd5\x46\x22\
-\x95\x09\xf2\xda\xb5\x6b\x35\x0a\xe6\x6d\xc8\x3c\x78\xf0\x00\x67\
-\xcf\x9e\xa5\x00\x7c\x2e\xd4\xf2\xce\x54\x17\xd7\xc4\xfd\x0c\xc3\
-\xac\x5e\xb7\x6e\x9d\xeb\x8e\x1d\x3b\x8c\xd6\xfb\xa0\x6b\xd7\xae\
-\xf8\xeb\xaf\xbf\x20\x95\x4a\x35\x96\x1c\xca\xc3\xb2\xac\x6a\xa8\
-\x5c\x1e\x41\x10\x50\x5c\x5c\x8c\x94\x94\x14\x24\x27\x27\xab\x04\
-\xad\xfc\x3b\x26\x26\x46\x25\x88\xbc\xbc\x3c\x8d\xfd\xc4\x0c\xc3\
-\x40\x22\x91\x40\x22\x91\x40\x24\x12\x81\x65\x59\xd5\x6f\xe5\x4f\
-\x45\xaf\x19\x86\x01\xc7\x71\x90\x4a\xa5\x90\xc9\x64\x90\x4a\xa5\
-\xaa\xbf\x95\xaf\xcb\xfe\x2d\x95\x4a\x55\x82\x2c\xef\xd7\x4d\x08\
-\x81\xa5\xa5\xa5\xca\x0e\x89\x44\x82\xe6\xcd\x9b\xc3\xcf\xcf\x4f\
-\x25\x50\x47\x47\x47\xb4\x68\xd1\x02\xa6\xa6\xa6\x35\x1e\x2a\x56\
-\x84\x4c\x26\xc3\xed\xdb\xb7\xf1\xfa\xeb\xaf\xd7\xa8\xbc\xa1\xb2\
-\x73\xe7\x4e\x81\x65\xd9\x87\x32\x99\x6c\x7f\x6d\xeb\xd6\xea\x99\
-\x56\x55\x89\x90\x69\x14\x45\x6d\xbf\x73\xe7\x0e\xe5\xea\xea\x6a\
-\xb0\xcf\x14\x55\x95\x79\xf4\xe8\x11\x3a\x77\xee\x8c\x90\x90\x10\
-\x74\xe9\xd2\xa5\x51\x9e\xa3\x78\x9e\x47\x5e\x5e\x5e\x85\xbd\x9b\
-\x32\xab\x5f\x45\xc2\xab\xe8\x98\x5c\x2e\x07\xc3\x30\x55\x8a\xbb\
-\xec\x31\x91\x48\xa4\x26\x4c\x6b\x6b\x6b\x58\x59\x59\xc1\xca\xca\
-\x0a\x96\x96\x96\x2a\xef\xb0\x86\xfe\x5f\xdc\xb8\x71\x03\x6f\xbe\
-\xf9\x26\x42\x43\x43\x55\x89\xd1\x1a\xf2\x7a\x75\xa9\x57\xdf\xb6\
-\x52\x53\x53\x31\x76\xec\x58\x81\xe7\xf9\x19\x82\x20\xfc\xaa\x51\
-\xa8\x1a\xea\xba\x09\xe0\x77\x9a\xa6\xbf\xd8\xb0\x61\x83\xe3\x77\
-\xdf\x7d\x67\x1c\x49\x6a\xcb\xd1\xba\x75\x6b\xb4\x6c\xd9\x12\x17\
-\x2f\x5e\x44\x97\x2e\x5d\x1a\xe5\x9a\x14\x45\xa9\x44\x53\x51\x54\
-\x04\x7d\xf8\xd2\x35\x34\x11\x11\x11\x68\xde\xbc\xb9\xde\xf8\x04\
-\x37\x04\xbb\x76\xed\x02\x4d\xd3\x69\x3c\xcf\xff\x5e\x97\xfa\x75\
-\x1a\xde\x0a\x82\x20\x97\xc9\x64\x5f\xee\xda\xb5\x4b\x50\x4e\xcf\
-\x1b\x23\x83\x06\x0d\x42\x43\x46\xee\x68\x42\x93\x0b\x17\x2e\x20\
-\x28\x28\x48\xd7\x66\x34\x18\x69\x69\x69\x38\x7c\xf8\x30\x2f\x93\
-\xc9\xbe\x10\xca\xa4\xaf\xac\x0d\xf5\x79\x26\xdd\x4e\x08\x79\xf0\
-\xe1\x87\x1f\x1a\x6d\x74\xef\xc1\x83\x07\x23\x3a\x3a\x5a\x6d\x22\
-\xa9\x89\x86\x23\x27\x27\x07\x37\x6f\xde\x44\xdf\xbe\x7d\x75\x6d\
-\x4a\x83\xb1\x7e\xfd\x7a\x9e\x10\xf2\x10\x40\x95\x1b\xdd\xab\xa2\
-\xce\xa2\x15\x04\x41\x2a\x93\xc9\xde\x3b\x71\xe2\x04\x1d\x12\x52\
-\xed\xc6\x04\x83\xa4\x6f\xdf\xbe\x60\x18\x06\xa7\x4f\x9f\xd6\xb5\
-\x29\x2f\x05\xe1\xe1\xe1\x20\x84\x68\x78\xdc\x19\x0b\xe1\xe1\xe1\
-\x08\x0f\x0f\xa7\x64\x32\xd9\xbb\x82\x20\xd4\x39\xd1\x55\xbd\x66\
-\x7f\x05\x41\x38\x45\x51\xd4\xfe\x0f\x3e\xf8\x40\x66\xa8\x29\x2e\
-\xab\x42\x99\x7b\x37\x2c\xac\xc2\x98\xd1\x4d\x68\x99\xf3\xe7\xcf\
-\xa3\x73\xe7\xff\x6f\xef\xdc\xa3\xa2\xba\xee\x3d\xfe\xdd\xf3\x52\
-\x44\x31\x6a\x6d\x6c\x29\x57\xed\x84\x68\xcc\x4d\x72\x9b\xc6\x36\
-\x82\xae\x26\xb6\x68\x8c\x17\x88\x81\x88\x80\x2f\x42\x89\x59\xf5\
-\x8d\x18\x89\x89\xf5\x81\x31\x4e\x30\x5c\x31\x16\x1a\x7c\xa0\x22\
-\x6a\x40\x20\x81\xfa\x26\xbe\x6d\xa0\xda\xd8\xa5\xd1\x00\x01\x41\
-\x03\x6a\x08\xc8\x4b\x06\x98\x7d\xf6\xf9\xdd\x3f\x82\x2e\x15\x63\
-\x78\xcc\xcc\x99\x19\xe7\xb3\x16\x0b\x38\xec\xf3\x3b\x5f\xe0\x7c\
-\xd7\xd9\x7b\x9f\xdf\xde\xbf\xe7\xe0\xea\xea\xaa\xb4\x14\xb3\x63\
-\x32\x99\xb0\x7a\xf5\x6a\xae\x56\xab\xd3\xa9\x9d\xe9\x8a\x3f\x46\
-\x97\x5f\xd9\xc8\xb2\x3c\xef\xfa\xf5\xeb\xdc\x60\x30\x74\x35\x94\
-\x4d\xe2\xe3\xe3\x83\xc3\x87\x0f\xdb\x6c\x39\x13\x47\x41\x08\x81\
-\x93\x27\x4f\x9a\x65\x87\x7e\x5b\x24\x39\x39\x19\x55\x55\x55\x92\
-\x10\x62\x5e\x57\x63\x75\xd9\xb4\x44\x74\x55\x08\xb1\x24\x2e\x2e\
-\x4e\x2e\x2a\x2a\xea\x6a\x38\x9b\xc3\xc7\xc7\x07\x75\x75\x75\x38\
-\x7d\xfa\xb4\xd2\x52\x1c\x9a\x73\xe7\xce\xa1\xb6\xb6\xd6\x21\x4d\
-\xfb\xed\xb7\xdf\x22\x39\x39\x59\x16\x42\xbc\x4b\x44\x57\xbb\x1a\
-\xcf\x5c\xc9\x11\xeb\x18\x63\x45\x73\xe7\xce\x75\xb8\x49\xa9\x41\
-\x83\x06\x41\xaf\xd7\x3b\x67\x91\x2d\xcc\xd1\xa3\x47\xe1\xee\xee\
-\x0e\xbd\x5e\xaf\xb4\x14\xb3\x63\x30\x18\x04\x63\xac\x08\xc0\x3a\
-\x73\xc4\x33\x8b\x69\x5b\x5f\x01\x45\x1c\x3b\x76\x4c\xb5\x7b\xf7\
-\x6e\x73\x84\xb4\x29\x7c\x7c\x7c\x90\x9b\xdb\xa5\x61\x88\x93\x9f\
-\xe0\xd8\xb1\x63\x0e\xf9\x94\x3d\x72\xe4\x08\xf2\xf2\xf2\x54\x9c\
-\xf3\x88\xce\xbe\xe2\xb9\x17\xb3\xa5\x21\x12\xd1\x49\x95\x4a\x95\
-\xb2\x60\xc1\x02\xe9\xce\x5c\x54\x47\xc0\xc7\xc7\x07\x85\x85\x85\
-\xce\xe2\x5c\x16\xa2\xbc\xbc\x1c\x05\x05\x05\x18\x3d\x7a\xb4\xd2\
-\x52\xcc\x4a\x73\x73\x33\x0c\x06\x03\x57\xa9\x54\xdb\x89\xe8\xa4\
-\xb9\xe2\x9a\x35\x77\x58\x96\xe5\x85\x35\x35\x35\xcd\x31\x31\x31\
-\xe6\x0c\xab\x38\xde\xde\xde\xf8\xf9\xcf\x7f\x8e\x8c\x8c\x0c\xa5\
-\xa5\x38\x24\x39\x39\x39\xe8\xd7\xaf\x9f\xc3\xbd\xea\xd9\xb8\x71\
-\x23\x6a\x6a\x6a\x5a\x64\x59\x8e\x32\x67\x5c\xb3\x9a\x96\x88\x2a\
-\x25\x49\x7a\x2b\x21\x21\x81\x4e\x9d\x3a\x65\xce\xd0\x8a\xa2\x56\
-\xab\x31\x61\xc2\x04\xa7\x69\x2d\x44\x76\x76\x36\xc6\x8f\x1f\x0f\
-\xb5\xda\x71\x56\x7b\x7e\xf5\xd5\x57\xd8\xb6\x6d\x9b\x2c\x84\x78\
-\x8b\x88\xcc\x5a\x67\xc6\x12\xab\x74\xfe\xae\x52\xa9\x0e\x4e\x9e\
-\x3c\x59\xaa\xae\xae\xb6\x40\x78\x65\x78\xed\xb5\xd7\x70\xf9\xf2\
-\x65\xe7\x9e\xc8\x66\xe6\xfc\xf9\xf3\x28\x2d\x2d\x85\xaf\xaf\xaf\
-\xd2\x52\xcc\x46\x7d\x7d\x3d\xa2\xa2\xa2\x38\x63\xec\x10\x80\xbf\
-\x9b\x3b\xbe\xd9\x4d\x4b\x44\x24\x49\x52\x68\x4d\x4d\x4d\x75\x78\
-\x78\xb8\x59\xaa\xc9\xdb\x02\x4f\x3f\xfd\x34\x86\x0c\x19\x82\xf4\
-\xf4\x0e\xaf\xa4\x72\xf2\x00\xb2\xb3\xb3\x31\x68\xd0\x20\x3c\xf5\
-\xd4\x53\x4a\x4b\x31\x1b\x4b\x97\x2e\x15\x35\x35\x35\x37\x84\x10\
-\xa1\x1d\x5d\x2b\xdb\x1e\x2c\xb2\x1e\x96\x88\xaa\x39\xe7\x01\xb9\
-\xb9\xb9\x2c\x3e\x3e\xde\x12\x97\x50\x84\xc0\xc0\x40\x7c\xf6\xd9\
-\x67\xce\x44\x0b\x33\x21\x84\xc0\xde\xbd\x7b\x1d\xea\x29\xbb\x63\
-\xc7\x0e\x9c\x38\x71\x82\x49\x92\x14\x40\x44\x16\xe9\x6a\x5a\x6c\
-\x11\x3b\x11\x9d\x22\xa2\x77\x96\x2c\x59\x42\xff\xfa\xd7\xbf\x2c\
-\x75\x19\xab\x12\x10\x10\x80\x9a\x9a\x1a\x1c\x39\x72\x44\x69\x29\
-\x0e\xc1\xa9\x53\xa7\x50\x5d\x5d\xed\x30\xa6\xbd\x70\xe1\x02\xd6\
-\xae\x5d\x2b\x13\xd1\x3b\x44\x64\xb1\x49\x1d\x4b\xef\x3c\x61\x50\
-\xa9\x54\xb9\x21\x21\x21\xdc\x5a\xe5\x32\x2d\xc9\xaf\x7e\xf5\x2b\
-\x8c\x18\x31\x02\x8e\xf8\x2e\x5a\x09\xb2\xb3\xb3\xf1\xcc\x33\xcf\
-\x58\xa4\xa2\xba\xb5\x69\x68\x68\x40\x54\x54\x14\x07\xf0\x39\x00\
-\x8b\xe6\xf4\x5a\xd4\xb4\xad\xe3\xdb\x90\xaa\xaa\xaa\x9a\x88\x88\
-\x08\x87\xc8\x96\x0a\x0c\x0c\xc4\xfe\xfd\xfb\x51\x57\x57\xa7\xb4\
-\x14\xbb\xa6\xb1\xb1\x11\xb9\xb9\xb9\xf0\xf3\xf3\x53\x5a\x8a\x59\
-\x58\xb6\x6c\x99\xb8\x71\xe3\x46\x8d\x10\x22\xc4\x12\xe3\xd8\x3b\
-\xb1\xf8\x1e\x4f\x44\x54\xc5\x39\x7f\x6d\xdf\xbe\x7d\x2c\x21\x21\
-\xc1\xd2\x97\xb3\x38\x7e\x7e\x7e\x50\xa9\x54\x48\x4d\x4d\x55\x5a\
-\x8a\x5d\x93\x99\x99\x09\x95\x4a\xe5\x10\xa6\xdd\xb9\x73\x27\x8e\
-\x1d\x3b\xc6\x24\x49\x7a\x8d\x88\xaa\x2c\x7d\x3d\xab\x6c\xcc\x46\
-\x44\xc7\x89\xe8\xaf\x8b\x17\x2f\x96\xbf\xfc\xf2\x4b\x6b\x5c\xd2\
-\x62\xb8\xb9\xb9\x21\x28\x28\x08\x9b\x36\x6d\xb2\x48\x61\xeb\x87\
-\x01\x59\x96\x91\x92\x92\x82\x09\x13\x26\xd8\xfd\x96\xb2\x17\x2f\
-\x5e\x44\x5c\x5c\x9c\x4c\x44\x7f\x25\xa2\xe3\xd6\xb8\xa6\x35\x77\
-\x53\x5c\x05\xe0\x70\x40\x40\x00\xbf\x72\xe5\x8a\x15\x2f\x6b\x7e\
-\x22\x22\x22\x50\x51\x51\x81\x7d\xfb\xf6\x29\x2d\xc5\x2e\x39\x7a\
-\xf4\x28\xae\x5c\xb9\x72\x6b\xa3\x6e\xbb\xe5\xda\xb5\x6b\x98\x33\
-\x67\x0e\x67\x8c\x1d\xc1\x0f\xf7\xb7\x55\xb0\x9a\x69\x5b\xc7\xb7\
-\x01\xb5\xb5\xb5\x45\xe3\xc7\x8f\xe7\xf6\x9c\x78\xa1\xd7\xeb\x31\
-\x7a\xf4\x68\x6c\xd8\xb0\x41\x69\x29\x76\xc9\x96\x2d\x5b\x30\x6a\
-\xd4\xa8\xdb\x75\x62\xed\x91\xda\xda\x5a\xcc\x98\x31\x83\xd7\xd7\
-\xd7\x5f\x6a\xed\x16\x5b\x2d\x21\xc1\xaa\xfb\x16\x13\x51\x3d\xe7\
-\xfc\x4f\xe5\xe5\xe5\xd7\xfd\xfd\xfd\x25\xa3\xd1\x68\xcd\xcb\x9b\
-\x95\x88\x88\x08\xe4\xe5\xe5\xe1\xfc\xf9\xf3\x4a\x4b\xb1\x2b\x0a\
-\x0b\x0b\x91\x9f\x9f\x8f\x69\xd3\xa6\x29\x2d\xa5\xd3\x34\x35\x35\
-\x61\xe6\xcc\x99\xd2\xf5\xeb\xd7\xbf\x97\x24\xe9\x8f\x44\x54\x63\
-\xcd\xeb\x5b\x7d\xb3\x71\x22\xba\xce\x39\x7f\xf1\xc2\x85\x0b\xf5\
-\x93\x26\x4d\x12\x9c\x73\x6b\x4b\x30\x0b\x2f\xbc\xf0\x02\x3c\x3d\
-\x3d\x9d\x4f\xdb\x0e\xb2\x75\xeb\x56\xfc\xfa\xd7\xbf\x86\xb7\xb7\
-\xb7\xd2\x52\x3a\x85\x24\x49\x88\x8c\x8c\x14\x45\x45\x45\x8d\xad\
-\x86\xad\xb0\xb6\x06\x45\x2a\x04\x10\x51\x09\xe7\xfc\x4f\xc7\x8f\
-\x1f\x6f\x79\xe3\x8d\x37\x64\x7b\x4c\x75\x64\x8c\xe1\xcf\x7f\xfe\
-\x33\xb2\xb2\xb2\x50\x55\x65\xf1\x09\x43\x87\xa0\xba\xba\x1a\x39\
-\x39\x39\x98\x3a\x75\xea\xed\x3a\xb2\xf6\x04\x11\x61\xc9\x92\x25\
-\xf2\xe9\xd3\xa7\xb9\x10\x62\x2c\x11\x15\x28\xa1\x43\xb1\xb2\x1e\
-\x44\x74\x56\x08\xf1\xbf\x99\x99\x99\x22\x3a\x3a\xda\xfe\x5c\x0b\
-\x60\xe2\xc4\x89\x70\x71\x71\x41\x72\x72\xb2\xd2\x52\xec\x82\x1d\
-\x3b\x76\xa0\x7b\xf7\xee\x78\xe5\x95\x57\x94\x96\xd2\x29\x3e\xfc\
-\xf0\x43\x1c\x38\x70\x80\x84\x10\x13\x88\x28\xff\xa7\xcf\xb0\x0c\
-\x8a\xd6\xe2\x21\xa2\x23\xb2\x2c\x87\x24\x26\x26\x22\x2e\x2e\x4e\
-\x49\x29\x9d\xa2\x47\x8f\x1e\x78\xf3\xcd\x37\x91\x94\x94\x04\x47\
-\xc8\xf8\xb2\x24\xf5\xf5\xf5\xd8\xba\x75\x2b\xc2\xc2\xc2\xe0\xe2\
-\xe2\xa2\xb4\x9c\x0e\x93\x9c\x9c\x8c\xd4\xd4\x54\x22\xa2\x69\x44\
-\xb4\x5f\x49\x2d\x8a\x17\xd0\x22\xa2\xdd\x44\x34\x73\xe9\xd2\xa5\
-\x48\x49\x49\x51\x5a\x4e\x87\x99\x31\x63\x06\x34\x1a\x0d\xfe\xf6\
-\xb7\xbf\x29\x2d\xc5\xa6\xd9\xb0\x61\x03\x34\x1a\x0d\xa6\x4f\x9f\
-\xae\xb4\x94\x0e\xf3\xe9\xa7\x9f\x62\xdd\xba\x75\x00\xb0\x80\x88\
-\x14\xcf\xaa\x51\xdc\xb4\x00\x40\x44\x89\x00\x96\xcf\x9a\x35\x8b\
-\xd2\xd2\xd2\x94\x96\xd3\x21\x5c\x5d\x5d\x31\x77\xee\x5c\x6c\xd8\
-\xb0\x01\xdf\x7f\xff\xbd\xd2\x72\x6c\x92\xaa\xaa\x2a\xa4\xa4\xa4\
-\x60\xc6\x8c\x19\xe8\xd1\xa3\x87\xd2\x72\x3a\xc4\xde\xbd\x7b\x11\
-\x13\x13\x43\x8c\x31\x03\x11\xfd\x9f\xd2\x7a\x00\x1b\x31\x2d\x00\
-\x10\xd1\x32\x22\x5a\x1b\x11\x11\x81\xc4\xc4\x44\xa5\xe5\x74\x88\
-\xb0\xb0\x30\x3c\xf2\xc8\x23\x58\xbb\x76\xad\xd2\x52\x6c\x92\xc4\
-\xc4\x44\xb8\xb9\xb9\x21\x24\x24\x44\x69\x29\x1d\x62\xc7\x8e\x1d\
-\x58\xbc\x78\x31\x88\x68\x9d\x2c\xcb\xd1\x4a\xeb\xb9\x85\xcd\x98\
-\x16\x00\x64\x59\x8e\x24\xa2\xe8\x45\x8b\x16\x61\xf9\xf2\xe5\x4a\
-\xcb\x69\x37\xdd\xba\x75\x43\x64\x64\x24\xb6\x6d\xdb\x86\x8a\x0a\
-\xab\xbf\x01\xb0\x69\xae\x5e\xbd\x8a\x5d\xbb\x76\xe1\x2f\x7f\xf9\
-\x0b\xba\x75\xeb\xa6\xb4\x9c\x76\xb3\x7e\xfd\x7a\x7c\xf0\xc1\x07\
-\x00\xf0\xb6\x2c\xcb\x5d\xde\x60\xdc\x9c\xd8\x94\x69\x01\x80\x88\
-\x0c\x00\xc2\xe2\xe2\xe2\xe4\x59\xb3\x66\x91\xbd\xe4\xf7\x06\x07\
-\x07\xc3\xdd\xdd\x1d\x6b\xd6\xac\x51\x5a\x8a\x4d\xb1\x7e\xfd\x7a\
-\xfc\xe2\x17\xbf\x40\x60\x60\xa0\xd2\x52\xda\x85\x2c\xcb\x88\x89\
-\x89\xa1\x4d\x9b\x36\xc9\x00\xc2\x89\x68\xb5\xd2\x9a\xee\xc5\xe6\
-\x4c\x0b\x00\x44\xb4\x85\x88\xfc\x53\x53\x53\x4d\xa1\xa1\xa1\xa2\
-\xb9\xb9\x59\x69\x49\x3f\x89\x56\xab\x45\x54\x54\x14\xd2\xd2\xd2\
-\x9c\x5b\xad\xb6\x52\x52\x52\x82\xac\xac\x2c\xcc\x9e\x3d\x1b\x1a\
-\x4d\x67\x4b\x21\x5b\x0f\x93\xc9\x84\x85\x0b\x17\x8a\xac\xac\x2c\
-\x4e\x44\x13\x88\x68\xb3\xd2\x9a\xee\x47\xa7\x2a\xc1\x5b\x0b\xc6\
-\xd8\x08\x8d\x46\xb3\x7f\xf8\xf0\xe1\x3d\xd2\xd2\xd2\x34\x6e\x6e\
-\x6e\xb7\x7f\xa6\x74\x35\xf0\xfb\xb5\x11\x42\x60\xcc\x98\x31\xe8\
-\xd5\xab\x17\x32\x33\x33\xc1\x18\xb3\x89\x42\xd0\x4a\xc5\x9a\x3c\
-\x79\x32\x1a\x1a\x1a\x90\x95\x95\x75\xdf\x64\x0a\x5b\xfa\x1f\x36\
-\x36\x36\x62\xce\x9c\x39\xd2\xd9\xb3\x67\x9b\x85\x10\xe3\xcc\xb9\
-\x4f\xb1\xb9\xb1\xc9\x27\xed\x2d\x88\xe8\x0b\x49\x92\x46\x9c\x39\
-\x73\xa6\x6a\xec\xd8\xb1\xfc\xbb\xef\xbe\x53\x5a\xd2\x03\x51\xa9\
-\x54\x88\x8d\x8d\x45\x7e\x7e\x3e\x76\xed\xda\xa5\xb4\x1c\x45\xc9\
-\xca\xca\xc2\x99\x33\x67\x10\x13\x13\x03\x95\xca\xa6\x6f\x33\xd4\
-\xd4\xd4\x20\x2c\x2c\x8c\xff\xe7\x3f\xff\xa9\x11\x42\x78\xd9\xb2\
-\x61\x01\x1b\x37\x2d\x00\x10\xd1\x45\xce\xf9\xf0\xe2\xe2\xe2\xb2\
-\xd1\xa3\x47\xf3\xd2\xd2\x52\xa5\x25\x3d\x90\xdf\xfc\xe6\x37\x98\
-\x36\x6d\x1a\x56\xac\x58\x01\x7b\x5e\xc9\xd4\x15\x6a\x6b\x6b\xb1\
-\x7a\xf5\x6a\x04\x07\x07\xe3\xe9\xa7\x9f\x56\x5a\xce\x03\xa9\xa8\
-\xa8\x40\x68\x68\x28\xbf\x74\xe9\x52\xb9\x24\x49\xc3\x89\xc8\xe6\
-\x57\x80\xd8\xbc\x69\x01\x80\x88\xca\x4d\x26\xd3\xf3\x95\x95\x95\
-\xe7\x46\x8e\x1c\x29\xe5\xe4\xe4\x28\x2d\xe9\x81\x2c\x5e\xbc\x18\
-\x3a\x9d\x0e\xcb\x96\x2d\x53\x5a\x8a\x22\x7c\xf0\xc1\x07\xd0\x68\
-\x34\x58\xb0\x60\x81\xd2\x52\x1e\xc8\xe1\xc3\x87\x11\x18\x18\x28\
-\x55\x56\x56\x5e\xe0\x9c\xff\x8e\x88\x2e\x2b\xad\xa9\x3d\xd8\x85\
-\x69\x01\x80\x88\x6e\x98\x4c\xa6\x91\x46\xa3\x31\x79\xf2\xe4\xc9\
-\x88\x8e\x8e\x26\x93\xa9\xd3\xc5\xb4\x2d\x4a\xaf\x5e\xbd\xb0\x72\
-\xe5\x4a\xa4\xa7\xa7\xe3\xe4\x49\x9b\xee\x69\x99\x9d\x33\x67\xce\
-\x20\x23\x23\x03\xef\xbe\xfb\x2e\x7a\xf6\xec\xa9\xb4\x9c\xfb\xc2\
-\x39\x87\xc1\x60\xa0\xf9\xf3\xe7\xa3\xb9\xb9\x39\x99\x73\x3e\xc2\
-\x1a\xdb\xc4\x98\x0b\x9b\x9e\x88\xfa\x31\x18\x63\x93\xd4\x6a\xf5\
-\xa6\x61\xc3\x86\x69\xb7\x6f\xdf\xae\x1d\x38\x70\xa0\x4d\x4c\x44\
-\xdd\x7b\x2c\x34\x34\x14\xa5\xa5\xa5\x38\x72\xe4\x08\x74\x3a\x5d\
-\x97\xae\x67\x4e\xed\x96\x8a\x25\x49\x12\x7c\x7d\x7d\xe1\xee\xee\
-\xde\x66\xc9\xa2\xd2\xff\x8b\x5b\xc7\x2a\x2a\x2a\x30\x7f\xfe\x7c\
-\xe9\x9b\x6f\xbe\xe1\x42\x88\xd7\x89\xc8\xee\x26\x1f\xec\xe6\x49\
-\x7b\x27\x44\xb4\x4b\x08\xf1\x3f\x05\x05\x05\x45\x5e\x5e\x5e\x36\
-\xdb\x5d\x5e\xbd\x7a\x35\xae\x5d\xbb\x86\xf7\xde\x7b\x4f\x69\x29\
-\x56\x21\x3e\x3e\x1e\x15\x15\x15\x36\x3b\x2c\xc8\xcd\xcd\xc5\xab\
-\xaf\xbe\x2a\x95\x94\x94\x14\x0a\x21\x9e\xb1\x47\xc3\x02\x76\x6a\
-\x5a\x00\x20\xa2\x6f\x38\xe7\xbf\x35\x1a\x8d\x1b\xa7\x4c\x99\x82\
-\x45\x8b\x16\xd9\x5c\x77\xd9\xc3\xc3\x03\xab\x56\xad\x42\x52\x52\
-\x12\x0e\x1c\x38\xa0\xb4\x1c\x8b\x72\xec\xd8\x31\x7c\xfc\xf1\xc7\
-\x58\xba\x74\x29\xdc\xdd\xdd\x95\x96\x73\x17\x9c\x73\xbc\xff\xfe\
-\xfb\x14\x19\x19\x89\x96\x96\x96\x8d\x9c\xf3\xdf\x12\x91\xdd\xbe\
-\x4c\xb7\xcb\xee\xf1\xbd\x30\xc6\x26\x6a\x34\x9a\xe4\xa1\x43\x87\
-\x6a\x53\x52\x52\xb4\xb7\xf6\x1e\xb2\x95\x2e\xd9\xdc\xb9\x73\x71\
-\xe0\xc0\x01\xe4\xe6\xe6\xde\xf7\x86\xb6\xf7\xee\xf1\xb5\x6b\xd7\
-\xe0\xeb\xeb\x8b\xd1\xa3\x47\xc3\x60\x30\xd8\xd4\x50\xa5\xbc\xbc\
-\x1c\xf3\xe6\xcd\x93\x8a\x8b\x8b\x4d\x42\x88\x30\x22\xb2\xaf\x15\
-\x29\xf7\xc1\x21\x4c\x0b\x00\x8c\x31\xbd\x56\xab\xcd\xd2\x6a\xb5\
-\x4f\xc4\xc7\xc7\x6b\x02\x03\x03\x6d\xc6\xb4\x4d\x4d\x4d\x18\x37\
-\x6e\x1c\x5c\x5d\x5d\x91\x95\x95\x05\xad\x56\x6b\x75\x0d\x96\x8a\
-\x25\x84\x40\x70\x70\x30\x1a\x1a\x1a\x90\x91\x91\x01\x17\x17\x17\
-\x9b\x31\xed\xde\xbd\x7b\xb1\x6c\xd9\x32\x49\x92\xa4\xaf\x39\xe7\
-\x13\x88\xa8\xa4\x4d\x43\x3b\xc4\x6e\xbb\xc7\xf7\x42\x3f\x6c\x61\
-\x33\xbc\xa9\xa9\x29\xe1\x8d\x37\xde\x20\x3f\x3f\x3f\xa9\xb8\xb8\
-\x58\x69\x59\x00\x00\x17\x17\x17\x6c\xd8\xb0\x01\x05\x05\x05\x0e\
-\x37\xbe\x8d\x8d\x8d\xc5\xd7\x5f\x7f\x8d\x8f\x3e\xfa\xc8\x66\x16\
-\xb7\x97\x95\x95\x21\x3c\x3c\x5c\x8a\x8e\x8e\xa6\x96\x96\x96\xbf\
-\x73\xce\x87\x3b\x8a\x61\x01\x07\x32\x2d\x00\x10\x51\x8b\x2c\xcb\
-\x73\x89\x68\x78\x5e\x5e\xde\x79\x2f\x2f\x2f\xf9\xbd\xf7\xde\x83\
-\x2d\xe4\x2e\x7b\x7a\x7a\xc2\x60\x30\x20\x29\x29\x09\x07\x0f\x1e\
-\x54\x5a\x8e\x59\xf8\xfc\xf3\xcf\xb1\x71\xe3\x46\xac\x58\xb1\x02\
-\x7a\xbd\x5e\x69\x39\x68\x69\x69\xc1\xba\x75\xeb\xe0\xef\xef\x2f\
-\x9f\x3d\x7b\xf6\x6b\x22\x7a\x5e\x08\x31\x9b\x88\x5a\x94\xd6\x66\
-\x4e\x1c\xa6\x7b\x7c\x2f\x8c\x31\x15\x80\x08\x8d\x46\x13\xdb\xbf\
-\x7f\xff\xee\x1f\x7e\xf8\xa1\xf6\xa5\x97\x5e\x52\x3c\xdf\x35\x32\
-\x32\x12\x7b\xf6\xec\x41\x56\x56\x16\x9e\x78\xe2\x09\x45\x34\x98\
-\x23\x56\x61\x61\x21\x82\x83\x83\x31\x76\xec\x58\xac\x5a\xb5\xaa\
-\xdd\xe7\x99\x53\xc3\x9d\xdf\x1f\x3d\x7a\x14\x31\x31\x31\xbc\xba\
-\xba\xba\x45\x92\xa4\x68\x00\x89\x44\x24\xb7\x39\xd9\x01\x70\x58\
-\xd3\xde\x82\x31\xd6\x5f\xad\x56\xaf\x11\x42\x4c\x19\x33\x66\x8c\
-\x6c\x30\x18\xd4\x77\x56\x69\xb3\xf6\x0d\xd6\xd2\xd2\x82\x90\x90\
-\x10\x94\x94\x94\x20\x3b\x3b\x1b\x1e\x1e\x1e\x76\x67\xda\xf2\xf2\
-\x72\x4c\x9c\x38\x11\x83\x07\x0f\x46\x72\x72\xb2\xa2\x63\xf4\x8a\
-\x8a\x0a\xac\x5c\xb9\x52\x1c\x3f\x7e\x5c\xad\x52\xa9\xb6\xcb\xb2\
-\xbc\x80\x88\x2a\xdb\x9c\xe4\x40\x38\xbc\x69\x6f\xc1\x18\x1b\xa9\
-\xd3\xe9\x36\x00\xf0\x7c\xeb\xad\xb7\xd4\x33\x67\xce\x84\x4e\xa7\
-\x53\xe4\xa9\xd0\xd0\xd0\x80\x57\x5f\x7d\x15\x46\xa3\x11\x9f\x7d\
-\xf6\x19\xfa\xf5\xeb\x67\x55\x0d\x5d\x89\x55\x55\x55\x85\xa0\xa0\
-\x20\xb8\xb8\xb8\x60\xe7\xce\x9d\xe8\xd9\xb3\xa7\x22\xbd\x17\xce\
-\x39\x92\x93\x93\x91\x90\x90\x20\x00\x14\x73\xce\x23\x88\xe8\x44\
-\x9b\xc6\x0e\xc8\x43\x63\x5a\x00\x60\x8c\x69\x00\xcc\x51\xab\xd5\
-\x2b\x3d\x3c\x3c\x34\x4b\x96\x2c\xd1\xfa\xfa\xfa\xb6\x59\x85\x62\
-\x8d\x99\xce\xca\xca\x4a\xf8\xfb\xfb\xa3\x77\xef\xde\x48\x4f\x4f\
-\x6f\x93\xf2\x67\x8b\xa6\x6d\x6c\x6c\x44\x48\x48\x08\xea\xea\xea\
-\x90\x96\x96\x86\xfe\xfd\xfb\x9b\x55\x57\x7b\xda\xc8\xb2\x8c\x03\
-\x07\x0e\x60\xed\xda\xb5\xfc\xea\xd5\xab\x92\x10\x62\x09\x80\x78\
-\x22\x92\xda\x9c\xec\xa0\x3c\x54\xa6\xbd\x05\x63\xcc\x5d\xad\x56\
-\x1b\x64\x59\x0e\x1e\x38\x70\xa0\x14\x15\x15\xa5\x0b\x0c\x0c\xbc\
-\xbd\x50\xdb\x5a\xaf\x27\xca\xca\xca\xe0\xe7\xe7\x87\x21\x43\x86\
-\x20\x35\x35\xf5\xae\x6e\xa6\xad\x99\x96\x73\x8e\xb0\xb0\x30\x14\
-\x15\x15\x21\x3d\x3d\x1d\x0f\x1a\x62\x58\x42\x83\x10\x02\x39\x39\
-\x39\x48\x4c\x4c\x34\x95\x97\x97\x6b\x19\x63\xbb\x64\x59\x5e\x48\
-\x0a\xec\xf0\xaf\x34\x0f\xa5\x69\x6f\xc1\x18\xd3\xab\x54\xaa\xb7\
-\x01\x4c\x7f\xf4\xd1\x47\xe5\xc8\xc8\x48\x6d\x68\x68\x68\x9b\x31\
-\x1a\x60\xb9\x1b\xf3\xfc\xf9\xf3\x08\x08\x08\xc0\x73\xcf\x3d\x87\
-\xa4\xa4\x24\xb8\xba\xba\x76\x3a\x96\x39\x75\xdd\x79\xcc\x68\x34\
-\x62\xe6\xcc\x99\xf8\xf7\xbf\xff\x8d\x1d\x3b\x76\xe0\xc9\x27\x9f\
-\xb4\x88\xae\xfb\xb5\x69\x69\x69\x41\x66\x66\x26\x3e\xfe\xf8\x63\
-\x5e\x59\x59\xa9\x62\x8c\x6d\x97\x65\x79\x15\x11\x15\xb5\x69\xfc\
-\x90\xf0\x50\x9b\xf6\x16\x8c\x31\x0f\xc6\xd8\x5b\x8c\xb1\x19\x7d\
-\xfa\xf4\xc1\xdc\xb9\x73\xb5\xd3\xa6\x4d\xbb\x6b\xbb\x4f\x4b\xde\
-\x98\xe7\xce\x9d\xc3\x94\x29\x53\x30\x60\xc0\x00\xa4\xa4\xa4\xa0\
-\x7f\xff\xfe\x36\x63\xda\xea\xea\x6a\x84\x87\x87\xe3\xda\xb5\x6b\
-\xd8\xbc\x79\x33\x86\x0d\x1b\x66\x31\x5d\x77\x7e\xdf\xd4\xd4\x84\
-\x4f\x3e\xf9\x04\x49\x49\x49\xbc\xae\xae\x0e\x44\xb4\x89\x88\x0c\
-\x44\x54\xd6\x26\xd0\x43\x86\xd3\xb4\x77\xc0\x18\x1b\x00\x60\x81\
-\x5a\xad\x9e\xe5\xea\xea\xaa\x99\x39\x73\xa6\x26\x3c\x3c\x1c\xbd\
-\x7b\xf7\xb6\x78\x17\xf0\xf2\xe5\xcb\x08\x0d\x0d\x85\x10\x02\xa9\
-\xa9\xa9\x18\x3c\x78\x70\xa7\x63\x99\x4b\x57\x59\x59\x19\xa6\x4f\
-\x9f\x0e\x95\x4a\x85\x2d\x5b\xb6\xb4\x7b\xa6\xbb\xab\x93\x74\xdb\
-\xb7\x6f\xc7\xe6\xcd\x9b\x25\xa3\xd1\x28\x64\x59\x4e\x04\x10\x4b\
-\x44\x57\xdb\x04\x78\x48\x71\x9a\xf6\x3e\x30\xc6\xfa\x01\x98\xaf\
-\xd1\x68\xe6\xe9\x74\xba\x6e\x93\x27\x4f\xd6\x04\x05\x05\xe1\xa9\
-\xa7\x9e\xba\xdd\xc6\x12\xdd\xd0\xea\xea\x6a\x4c\x9d\x3a\x15\x97\
-\x2f\x5f\xc6\xd6\xad\x5b\xf1\xec\xb3\xcf\x76\x3a\x56\x57\x75\x9d\
-\x3f\x7f\x1e\xaf\xbf\xfe\x3a\xdc\xdd\xdd\xb1\x69\xd3\x26\xf4\xed\
-\xdb\xb7\xd3\xb1\xda\x73\xec\xe2\xc5\x8b\xf8\xf4\xd3\x4f\x91\x9e\
-\x9e\x2e\x99\x4c\x26\x93\x10\xe2\x23\x00\x71\xe4\xe0\xaf\x6f\x3a\
-\x83\xd3\xb4\x0f\x80\x31\xd6\x1b\xc0\x9b\x3a\x9d\x2e\xc2\x64\x32\
-\xe9\xf5\x7a\xbd\x29\x34\x34\x54\x17\x10\x10\x80\x01\x03\x06\xb4\
-\x69\x6f\x8e\x1b\xda\x68\x34\x62\xc6\x8c\x19\xf8\xe7\x3f\xff\x89\
-\xd8\xd8\x58\x4c\x98\x30\xa1\xd3\xb1\x3a\xab\x6b\xcf\x9e\x3d\x58\
-\xb4\x68\x11\x86\x0f\x1f\x8e\xf5\xeb\xd7\x3f\x70\x98\xd0\x15\x5d\
-\xd7\xaf\x5f\x47\x4e\x4e\x0e\x76\xef\xde\x6d\x2a\x2b\x2b\xd3\x69\
-\xb5\xda\x52\xce\xf9\x46\xfc\x90\x18\x61\xd5\x9a\xaf\xf6\x84\xd3\
-\xb4\xed\x84\x31\xf6\x3b\xc6\xd8\x54\xb5\x5a\x3d\x45\x08\xd1\xcb\
-\xdb\xdb\x5b\x04\x07\x07\x6b\x5e\x7e\xf9\xe5\xdb\x37\xb5\xb9\x6e\
-\x68\x49\x92\xb0\x62\xc5\x0a\x6c\xde\xbc\x19\xbe\xbe\xbe\x78\xff\
-\xfd\xf7\xcd\xda\x45\xff\x31\x5d\xf5\xf5\xf5\x58\xba\x74\x29\xb2\
-\xb3\xb3\x31\x7d\xfa\x74\xbc\xfd\xf6\xdb\x50\xab\xd5\x9d\x8a\xf5\
-\x63\x6d\x9a\x9a\x9a\x70\xe8\xd0\x21\x64\x64\x64\x48\xf9\xf9\xf9\
-\x6a\xb5\x5a\x7d\x53\x08\xb1\x9d\x88\xb6\x11\x51\x5e\x9b\x13\x9d\
-\xb4\xc1\x69\xda\x0e\xc2\x18\xd3\x01\x18\xaf\xd1\x68\x5e\x97\x65\
-\x79\x9c\x4e\xa7\x83\xaf\xaf\xaf\x2a\x28\x28\x88\x79\x79\x79\xfd\
-\xe4\x3b\xdf\x8e\x98\xea\xf8\xf1\xe3\x98\x3f\x7f\x3e\x18\x63\x88\
-\x8b\x8b\xc3\xa8\x51\xa3\x3a\x1d\xeb\xa7\x8e\x9d\x3c\x79\x12\x0b\
-\x17\x2e\x04\x11\x21\x36\x36\x16\x23\x47\x8e\x34\x5b\x57\x5b\x96\
-\x65\xe4\xe5\xe5\x21\x2b\x2b\x8b\xf6\xef\xdf\x2f\x73\xce\xc1\x18\
-\xdb\x2f\x84\x48\x06\x90\x43\x44\xb6\xb5\x10\xda\xc6\x71\x9a\xb6\
-\x0b\x30\xc6\x7e\x06\x20\x58\xab\xd5\x86\x73\xce\x9f\xe9\xdf\xbf\
-\x3f\x1f\x3f\x7e\xbc\xd6\xdb\xdb\x1b\x5e\x5e\x5e\xe8\xd7\xaf\x5f\
-\x97\x9f\x8e\xb5\xb5\xb5\x88\x8e\x8e\xc6\x9e\x3d\x7b\x30\x7d\xfa\
-\x74\x2c\x5e\xbc\x18\xdd\xbb\x77\xef\x54\xac\xfb\x1d\x6b\x6e\x6e\
-\x86\xc1\x60\xc0\xd6\xad\x5b\x31\x6e\xdc\x38\xac\x5c\xb9\x12\x8f\
-\x3c\xf2\x48\x97\xe2\x13\x11\x6e\xdc\xb8\x81\xfc\xfc\x7c\xe4\xe7\
-\xe7\xe3\xe0\xc1\x83\xbc\xaa\xaa\x4a\xab\xd5\x6a\xcf\x71\xce\x37\
-\x01\xd8\x49\x44\xce\x6a\x65\x9d\xc4\x69\x5a\x33\xc1\x18\x1b\x06\
-\x20\x48\xa7\xd3\x8d\x93\x24\xe9\x59\x22\x52\xeb\xf5\x7a\xd3\x8b\
-\x2f\xbe\xa8\xf3\xf6\xf6\xc6\x88\x11\x23\xe0\xe6\xe6\xd6\x69\x23\
-\x64\x64\x64\xe0\x9d\x77\xde\x81\xab\xab\x2b\xe6\xcd\x9b\x87\x49\
-\x93\x26\xb5\xe9\xba\xb6\x37\x16\xf0\x43\x17\x3c\x2d\x2d\x0d\xeb\
-\xd6\xad\xc3\xcd\x9b\x37\xb1\x7c\xf9\xf2\xbb\xc6\xcf\x1d\x89\x75\
-\xab\x6b\x7d\xfa\xf4\x69\x7c\xf1\xc5\x17\x38\x71\xe2\x84\xa9\xb4\
-\xb4\x54\xc7\x18\x13\x1a\x8d\xe6\x4b\x93\xc9\xb4\x0f\xc0\x27\x44\
-\x74\xb1\xcd\xc9\x4e\x3a\x8c\xd3\xb4\x16\x80\x31\xe6\x0a\x60\x14\
-\x80\xd1\x3a\x9d\xee\x25\xce\xf9\x7f\x03\xc0\xb0\x61\xc3\xf8\x1f\
-\xfe\xf0\x07\x9d\xb7\xb7\x37\x7e\xff\xfb\xdf\x77\x68\x2c\x0c\x00\
-\xdf\x7d\xf7\x1d\xe2\xe3\xe3\xb1\x73\xe7\x4e\xfc\xf2\x97\xbf\x44\
-\x64\x64\x24\xfc\xfd\xfd\xef\xea\x92\xff\x54\x2c\x22\xc2\x3f\xfe\
-\xf1\x0f\xac\x59\xb3\xe6\x76\xe2\xff\x9c\x39\x73\xf0\xe8\xa3\x8f\
-\xb6\x4b\xc3\x9d\x63\xd3\x5b\x26\x3d\x79\xf2\xa4\xa9\xa0\xa0\x40\
-\x0b\x00\x5a\xad\xf6\x2b\x93\xc9\xb4\x1f\xc0\x61\x00\x27\x88\xa8\
-\xf1\x01\x7f\x2a\x27\x9d\xc0\x69\x5a\x2b\xc0\x18\xeb\x03\xe0\x05\
-\xb4\x9a\xd8\x64\x32\x3d\xa6\x56\xab\xe5\x41\x83\x06\xf1\xa1\x43\
-\x87\x6a\xf5\x7a\xbd\x4a\xaf\xd7\xe3\xb1\xc7\x1e\x83\x5e\xaf\x47\
-\xaf\x5e\xbd\x1e\x68\x98\xf2\xf2\x72\xc4\xc5\xc5\x21\x33\x33\x13\
-\x9e\x9e\x9e\x98\x3d\x7b\x36\xc6\x8c\x19\x83\x6e\xdd\xba\xfd\xe8\
-\x79\x2d\x2d\x2d\x38\x74\xe8\x10\x12\x12\x12\x50\x50\x50\x00\x3f\
-\x3f\x3f\xcc\x9b\x37\x0f\x03\x07\x0e\xbc\x2b\xf6\xbd\xe7\xdd\xbc\
-\x79\x13\x97\x2e\x5d\xba\xfd\x51\x52\x52\x22\x17\x16\x16\xf2\x2b\
-\x57\xae\x68\x85\x10\x2a\x9d\x4e\x57\x7c\x87\x49\x8f\x3a\x67\x7d\
-\x2d\x8f\xd3\xb4\x0a\xd0\x9a\xc4\xf1\x22\x80\x67\x55\x2a\xd5\x50\
-\x8d\x46\xf3\x24\xe7\xfc\xbf\x88\x48\x0d\x00\x7d\xfa\xf4\x31\x79\
-\x7a\x7a\xb2\xc7\x1f\x7f\x5c\x7b\xcb\xcc\x83\x06\x0d\x82\x9b\x9b\
-\x1b\x7a\xf6\xec\x79\x7b\x3b\xd6\xe2\xe2\x62\xac\x59\xb3\x06\xfb\
-\xf7\xef\x47\x8f\x1e\x3d\xf0\xf2\xcb\x2f\xe3\x95\x57\x5e\xc1\xf3\
-\xcf\x3f\x0f\x95\x4a\x75\xe7\x04\x10\xf6\xed\xdb\x07\xa3\xd1\x08\
-\x1f\x1f\x1f\x44\x46\x46\xc2\xd3\xd3\x13\xc0\x0f\x45\xa7\x1a\x1b\
-\x1b\x51\x57\x57\x87\xb2\xb2\x32\x94\x94\x94\xa0\xb4\xb4\x14\x45\
-\x45\x45\xbc\xb8\xb8\x98\x6a\x6a\x6a\x74\xad\x9a\x85\x56\xab\xbd\
-\xc2\x39\xbf\x40\x44\x05\x00\xbe\x04\x70\x84\x88\xae\x2b\xf1\x37\
-\x7c\x98\x71\x9a\xd6\x46\x68\x5d\x81\x34\x18\xc0\x10\x00\x8f\x03\
-\x18\xa2\xd5\x6a\x87\x01\x18\xca\x39\xff\xd9\x9d\x6d\x55\x2a\x15\
-\xb9\xb8\xb8\x08\x57\x57\x57\xd9\xd5\xd5\x95\x5c\x5c\x5c\x54\x4d\
-\x4d\x4d\xea\x1b\x37\x6e\xa8\xea\xea\xea\xd0\xa3\x47\x0f\x78\x78\
-\x78\xe0\xdb\x6f\xbf\x85\xd1\x68\x44\xef\xde\xbd\xd1\xb7\x6f\x5f\
-\xb9\x7b\xf7\xee\xa2\xb9\xb9\x59\xbe\x79\xf3\x26\x33\x1a\x8d\xaa\
-\xa6\xa6\x26\xb5\x2c\xcb\x77\x55\xc6\xd2\x6a\xb5\xd5\x00\x0a\x38\
-\xe7\x17\x00\x14\x02\x28\x6a\xfd\x5c\x4a\x0f\xd1\x4a\x1a\x5b\xc6\
-\x69\x5a\x3b\x80\x31\xd6\x0b\x3f\x18\xb9\x2f\x80\x9e\x00\x7a\xb5\
-\x7e\xb4\xf9\x5a\xad\x56\xbb\x03\x18\x08\x40\x07\xc0\x04\xe0\xb2\
-\x10\xa2\x02\x40\x03\x80\x9b\xad\x9f\xef\xf7\xf5\x0d\x00\x45\x44\
-\xd4\x60\xbd\xdf\xcc\x49\x67\xf8\x7f\x32\x53\x4c\xb2\xc7\x0e\x3f\
-\x78\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\xab\xdc\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x02\x81\x00\x00\x01\x55\x08\x06\x00\x00\x00\x90\x14\x35\x1c\
-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x12\x74\x00\x00\x12\x74\
-\x01\xde\x66\x1f\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x20\x00\x49\x44\
-\x41\x54\x78\x9c\xec\xdd\x77\x78\x94\x65\xf6\xf0\xf1\xef\x99\x92\
-\x02\x84\x40\xe8\xa1\xf7\x26\x10\x42\xc0\x55\x41\x05\x14\x14\x75\
-\x57\x59\xb7\xd8\xbb\x38\xba\x56\x74\x49\x10\x45\x44\x12\xb0\xed\
-\x2a\xea\x58\x5e\x1b\xbb\xab\x2e\xea\xee\xa2\x62\x07\x6c\x3f\xc5\
-\xba\x2a\x2b\x28\x82\x8a\x14\xe9\x25\x94\xb4\xc9\x9c\xf7\x8f\x67\
-\x12\xd2\x08\x81\x64\x32\x99\xc9\xf9\x5c\x57\x2e\xe7\xe9\x67\x02\
-\x32\x67\xee\x72\x6e\x51\x55\x8c\x31\xc6\x34\x2c\x7e\xbf\xbf\x3d\
-\x30\x14\xe8\x00\xa4\x02\xab\x7d\x3e\xdf\xb3\x65\x8e\x9f\x0f\x3c\
-\x5d\xe6\x92\x5d\x3e\x9f\xaf\x45\x99\xe3\x2d\x80\x1d\x0d\xf8\x78\
-\x7b\xe0\x97\x32\xc7\x37\xf9\x7c\xbe\xf6\x31\x74\xbc\x1b\xf0\x63\
-\x99\xe3\x6b\x7c\x3e\x5f\xb7\x03\x1d\xdf\xbe\x7d\x3b\xd3\xa6\x4d\
-\x2b\x3d\xb9\x55\xab\x56\xcc\x9c\x39\x93\xfa\x38\xae\xaa\x6c\xdc\
-\xb8\x31\x38\x67\xce\x9c\x1f\x82\xc1\xe0\xfa\x40\x20\xb0\x36\x39\
-\x39\x79\xdb\x19\x67\x9c\xd1\xb5\xb0\xb0\x70\x6d\x41\x41\xc1\xca\
-\xcd\x9b\x37\x3f\xf7\xde\x7b\xef\x6d\xc5\xc4\x14\x4f\xa4\x03\x30\
-\xc6\x18\x53\xa5\xa3\x80\x7f\x01\x05\x38\xc9\xc6\x7c\xe0\xd9\x32\
-\xc7\x17\x01\x67\x94\xd9\x2e\xaa\x70\xfd\xde\x06\x7e\x7c\x47\x85\
-\xe3\xf9\x31\x76\x7c\x73\x85\xe3\xfb\x2a\x1e\x9f\x3f\x7f\xfe\xa2\
-\x26\x4d\x9a\x8c\x1e\x3b\x76\xac\x2b\x31\x31\x91\x39\x73\xe6\x94\
-\x1e\x14\x11\xf2\xf2\xf2\x4a\xb7\xc3\x7d\x3c\x2e\x2e\xce\x75\xc1\
-\x05\x17\xf4\xda\xb6\x6d\x5b\xaf\xcd\x9b\x37\x17\x17\x15\x15\x15\
-\x0f\x1c\x38\xd0\xdb\xa4\x49\x13\x11\x11\x36\x6c\xd8\x70\xbf\xc7\
-\xe3\x79\xab\xb8\xb8\xf8\x45\xe0\x25\x55\xdd\x88\x89\x7a\x62\x2d\
-\x81\xc6\x18\x13\x19\x7e\xbf\xdf\x03\x1c\x07\x9c\x0e\x74\xf2\xf9\
-\x7c\x67\x94\x39\xe6\x05\x92\x7c\x3e\xdf\xf6\x48\xc5\x67\xc2\x2b\
-\x3e\x3e\xfe\xa7\xf3\xcf\x3f\xbf\xeb\xa5\x97\x5e\x1a\xe9\x50\x0e\
-\x28\x18\x0c\xb2\x79\xf3\x66\x96\x2d\x5b\xc6\xdb\x6f\xbf\x5d\xfc\
-\xd1\x47\x1f\x51\x58\x58\xe8\xea\xdb\xb7\xef\xb7\x23\x46\x8c\x58\
-\xb5\x69\xd3\xa6\x7b\xdf\x78\xe3\x8d\x77\x22\x1d\xa7\x39\x3c\x96\
-\x04\x1a\x63\x4c\x04\xf8\xfd\xfe\x56\xc0\x77\x40\x2b\xe0\x6b\x60\
-\x01\x30\xdd\xe7\xf3\xd9\x3f\xca\x8d\x80\x88\xb4\x05\x36\xcd\x9d\
-\x3b\x97\xe1\xc3\x87\x47\x3a\x9c\x1a\x2b\x2c\x2c\xe4\x93\x4f\x3e\
-\x61\xf5\xea\xd5\xda\xbb\x77\x6f\x49\x48\x48\x60\xdd\xba\x75\x79\
-\x9f\x7e\xfa\xe9\x8c\x37\xdf\x7c\x73\xce\xc1\xef\x60\x1a\x12\x4b\
-\x02\x8d\x31\x26\x42\xfc\x7e\xff\x6f\x80\x2f\x7d\x3e\xdf\x9a\x48\
-\xc7\x62\xea\x97\x88\x4c\x74\xb9\x5c\x2f\x2c\x5a\xb4\x48\x12\x13\
-\x13\x23\x1d\xce\x61\x29\x2e\x2e\xe6\x9b\x6f\xbe\x61\xed\xda\xb5\
-\xfa\xcf\x7f\xfe\x53\x7e\xf8\xe1\x87\xcf\x02\x81\xc0\x0d\xaa\xfa\
-\x7e\xa4\x63\x33\x35\x63\x49\xa0\x31\xc6\x84\x99\xdf\xef\x17\xe0\
-\xf7\x40\x91\xcf\xe7\xfb\x57\xa4\xe3\x31\x91\x27\x22\xf7\xf6\xe9\
-\xd3\xe7\xaa\x79\xf3\xe6\xc5\x45\x3a\x96\xba\xf0\xed\xb7\xdf\x72\
-\xff\xfd\xf7\x07\xbe\xf8\xe2\x0b\x8f\xdb\xed\x7e\xf5\xd8\x63\x8f\
-\xbd\x77\xf1\xe2\xc5\x8b\x22\x1d\x97\xa9\x9e\x2b\xd2\x01\x18\x63\
-\x4c\x2c\xf3\xfb\xfd\x63\x80\x4f\x81\x7f\x00\xe9\x11\x0e\xc7\x34\
-\x10\x71\x71\x71\x27\x0c\x1b\x36\x2c\x26\x12\x40\x80\x7e\xfd\xfa\
-\xf1\xd0\x43\x0f\x79\xee\xbf\xff\x7e\x46\x8f\x1e\x3d\x6e\xe2\xc4\
-\x89\x6f\x5f\x71\xc5\x15\xcb\xc7\x8c\x19\x73\x44\xa4\x63\x33\x07\
-\x66\x49\xa0\x31\xc6\x84\x89\xdf\xef\xef\x00\xbc\x0c\xfc\x0c\x1c\
-\xe1\xf3\xf9\xa6\x1d\xe4\x12\xd3\x08\x88\x48\xd3\xa2\xa2\xa2\x01\
-\x43\x86\x0c\x89\x74\x28\x75\x6e\xc4\x88\x11\xdc\x7e\xfb\xed\x9e\
-\xbc\xbc\x7c\xf6\xed\x3b\xa9\x5f\x7a\xfa\xef\xbf\x1a\x3f\x7e\x7c\
-\xc3\x9d\xf9\xd2\xc8\x59\x77\xb0\x31\xc6\x84\x91\xdf\xef\xef\xec\
-\xf3\xf9\xd6\x46\x3a\x0e\xd3\x70\x88\xc8\x09\xc0\x5b\xaf\xbf\xfe\
-\x3a\x2d\x5a\xb4\x38\xe8\xf9\xd1\x24\x18\x84\xc5\x8b\x5b\xf1\xf8\
-\xe3\x9d\xf8\xf1\xc7\x04\x2e\xbb\xec\x7e\x7d\xf5\xd5\x3b\x75\xfd\
-\xfa\xf5\x7f\x52\x55\x7f\xa4\xe3\x33\xe5\x59\x4b\xa0\x31\xc6\xd4\
-\x21\xbf\xdf\x5f\xae\x8b\xcf\x12\x40\x53\x85\x91\xa9\xa9\xa9\x85\
-\xb1\x94\x00\x06\x83\xc2\x6b\xaf\xb5\xe6\xac\xb3\x86\x30\x6d\x5a\
-\x2f\x7e\xfc\x31\x01\x80\xdf\xfc\x66\x94\x9c\x7a\xea\xa9\x2e\xe0\
-\x21\xb7\xdb\xed\x17\x11\xab\x4f\xdc\x80\x58\x12\x68\x8c\x31\x75\
-\xc4\xef\xf7\x9f\x00\xac\xf2\xfb\xfd\xfd\x23\x1d\x8b\x69\xb8\xbc\
-\x5e\xef\x98\x8c\x8c\x8c\x98\x19\x0f\xf8\xce\x3b\x29\xfc\xee\x77\
-\x83\x99\x31\xa3\x27\x6b\xd6\x24\x94\x3b\xd6\xbc\x79\x80\x8b\x2e\
-\xba\x88\x39\x73\xe6\xe0\xf5\x7a\x2f\x1b\x32\x64\xc8\xe7\xc7\x1c\
-\x73\x4c\xa7\x08\x85\x6a\x2a\xb0\x24\xd0\x18\x63\xea\x80\xdf\xef\
-\xbf\x12\x78\x0d\x78\x8f\xf2\xcb\x85\x19\x53\x4a\x44\x3c\xc5\xc5\
-\xc5\x23\x62\x69\x3c\xe0\xe0\xc1\xbb\xe9\xdd\x3b\xaf\xd2\xfe\xb8\
-\xb8\x20\x71\x71\x41\x00\x8e\x3b\xee\x38\x9e\x78\xe2\x09\xf7\x1f\
-\xff\xf8\xc7\x41\x27\x9c\x70\xc2\xea\x13\x4f\x3c\x71\x4c\x7d\xc7\
-\x69\x2a\xb3\x31\x81\xc6\x18\x53\x4b\x7e\xbf\xff\x28\xe0\x43\x20\
-\xcb\xe7\xf3\xcd\x8e\x74\x3c\xa6\xe1\x12\x91\x11\xc0\xc7\x2f\xbe\
-\xf8\x22\x1d\x3b\x76\x8c\x74\x38\x75\xea\xa9\xa7\x52\x79\xf8\xe1\
-\xce\xa5\xdb\xad\x5b\x17\xf1\xca\x2b\x5f\x94\x3b\x67\xeb\xd6\xad\
-\x7c\xf9\xe5\x97\x1a\x08\x04\x8a\x5f\x7f\xfd\xf5\x81\x1f\x7d\xf4\
-\xd1\xca\xfa\x8e\xd3\xec\x67\x2d\x81\xc6\x18\x53\x4b\x3e\x9f\xef\
-\x23\xe0\x28\x4b\x00\x4d\x0d\x8c\x6c\xd1\xa2\x45\x51\xac\x25\x80\
-\x45\x45\x2e\xde\x7c\xb3\x35\x43\x86\xec\x66\xe4\xc8\x1d\x00\x24\
-\x25\x05\x2a\x9d\xd7\xba\x75\x6b\x86\x0f\x1f\x2e\xf1\xf1\xf1\x6e\
-\xe0\x55\x11\x49\xa8\x74\x92\xa9\x37\x36\x40\xd3\x18\x63\xea\x80\
-\xcf\xe7\x5b\x1a\xe9\x18\x4c\xc3\xe7\xf1\x78\x8e\x1f\x36\x6c\x98\
-\x3b\xd2\x71\xd4\xb5\x47\x1e\xe9\xc4\xa6\x4d\x71\xdc\x7b\xef\xb7\
-\xb4\x6f\x5f\xc8\xab\xaf\xb6\x66\xf1\xe2\x56\x55\x9e\x9b\x9c\x9c\
-\x4c\xaf\x5e\xbd\x64\xd9\xb2\x65\x5d\xdd\x6e\xf7\xe3\xc0\x39\xf5\
-\x1b\xad\x29\x61\x2d\x81\xc6\x18\x73\x18\xfc\x7e\x7f\x13\xbf\xdf\
-\xdf\x3c\xd2\x71\x98\xa8\x73\x6c\x5a\x5a\x5a\x4c\x7d\xf6\x7e\xfd\
-\x75\x12\xcf\x3c\xd3\x81\xeb\xae\x5b\x43\xfb\xf6\x85\x00\x4c\x98\
-\xb0\x95\x9c\x9c\xef\x0f\x78\x4d\xe7\xce\x9d\x99\x3d\x7b\xb6\x47\
-\x55\xff\x28\x22\x53\xea\x2b\x56\x53\x5e\x4c\xfd\x45\x34\xc6\x98\
-\xfa\x10\x5a\x06\xee\x29\x60\x61\x84\x43\x31\x51\x44\x44\xfa\x05\
-\x02\x81\xe4\x58\x9a\x14\x92\x97\xe7\xe2\xf6\xdb\x7b\x70\xf4\xd1\
-\x3b\x39\xed\xb4\x2d\xe5\x8e\x79\xbd\xc1\x6a\xaf\x1d\x3e\x7c\x38\
-\x37\xdc\x70\x83\x2b\x25\x25\x25\x67\xfc\xf8\xf1\xd7\x87\x33\x4e\
-\x53\x35\xeb\x0e\x36\xc6\x98\x43\x37\x0d\x38\x1d\x38\x29\xd2\x81\
-\x98\xa8\x32\x2a\x21\x21\x21\xd0\xab\x57\xaf\x98\xf9\xec\x7d\xe0\
-\x81\x2e\xec\xde\xed\x21\x2b\xeb\x87\xc3\xba\xfe\xcc\x33\xcf\x24\
-\x3e\x3e\x5e\x9a\x37\x6f\x7e\xcf\x98\x31\x63\xbe\xb6\xf5\x86\xeb\
-\x97\xb5\x04\x1a\x63\xcc\x21\xf0\xfb\xfd\xbd\x80\x5b\x81\x1b\x7c\
-\x3e\xdf\xe2\x48\xc7\x63\xa2\x87\x88\x8c\x1a\x32\x64\x88\xb8\x5c\
-\xb1\xf1\xd1\xfb\xe9\xa7\xc9\xfc\xeb\x5f\xed\xb8\xe9\xa6\x9f\x68\
-\xd5\xaa\xe8\xb0\xef\x33\x7e\xfc\x78\x02\x81\x00\x83\x07\x0f\x7e\
-\xa1\x0e\xc3\x33\x35\x10\x1b\x7f\x13\x8d\x31\xa6\xfe\x6c\x06\xa6\
-\x00\x0f\x45\x3a\x10\x13\x5d\xbc\x5e\xef\xd8\xa1\x43\x87\xc6\xc4\
-\xa4\x90\x3d\x7b\xdc\xdc\x71\x47\x0f\xc6\x8e\xdd\xc6\x09\x27\x6c\
-\xab\xd5\xbd\xe2\xe2\xe2\x68\xd7\xae\x9d\xf4\xed\xdb\xb7\xc5\xe8\
-\xd1\xa3\x27\xd7\x51\x88\xa6\x06\xac\x4e\xa0\x31\xc6\x18\x13\x66\
-\x22\x92\x0a\xac\xf7\xfb\xfd\x0c\x1d\x3a\x34\xd2\xe1\xd4\xda\xcc\
-\x99\x3d\x59\xba\x34\x99\x67\x9e\xf9\x9a\xe4\xe4\xca\xa5\x60\x0e\
-\xc7\xdc\xb9\x73\x75\xfe\xfc\xf9\x3f\x16\x15\x15\xf5\x51\xd5\xe2\
-\x3a\xb9\xa9\xa9\x96\xb5\x04\x1a\x63\x8c\x31\xe1\x37\xca\xed\x76\
-\x07\x07\x0e\x1c\x18\xe9\x38\x6a\xed\xfd\xf7\x5b\xb2\x70\x61\x6b\
-\xb2\xb2\x7e\xa8\xb3\x04\x10\x60\xe2\xc4\x89\x12\x0c\x06\xbb\x01\
-\x17\xd7\xd9\x4d\x4d\xb5\x2c\x09\x34\xc6\x98\x1a\xf0\xfb\xfd\x83\
-\xfc\x7e\x7f\xd5\x85\xcf\x8c\x39\xb8\x91\x7d\xfb\xf6\x2d\x8e\x8b\
-\x8b\xee\x25\x83\x77\xee\xf4\x90\x93\xd3\x9d\xd3\x4e\xdb\xc2\xc8\
-\x91\x3b\xeb\xf4\xde\x1d\x3b\x76\x64\xe2\xc4\x89\x2e\x8f\xc7\x33\
-\x4b\x44\x12\xeb\xf4\xe6\xa6\x4a\x96\x04\x1a\x63\xcc\x41\xf8\xfd\
-\x7e\x17\xf0\x0c\xf0\x97\x48\xc7\x62\xa2\x53\x5c\x5c\xdc\x09\xc3\
-\x86\x0d\xf3\x46\x3a\x8e\xda\xba\xf3\xce\xee\xc4\xc5\x29\xd7\x5d\
-\xb7\x26\x2c\xf7\xbf\xe4\x92\x4b\xe8\xd6\xad\x5b\xca\x98\x31\x63\
-\x1e\x08\xcb\x03\x4c\x39\x31\x33\x4d\xdd\x18\x63\xc2\xe8\x7c\xa0\
-\x3f\x70\x66\xa4\x03\x31\xd1\x47\x44\x92\x45\xa4\x6f\xb4\xd7\x07\
-\x7c\xf3\xcd\x56\x2c\x59\x92\xc2\xdc\xb9\x2b\x68\xda\x34\x3c\x43\
-\xf6\x5a\xb4\x68\xc1\xf9\xe7\x9f\xef\xf6\x78\x3c\x17\xf5\xef\xdf\
-\x7f\xea\x8a\x15\x2b\x36\x85\xe5\x41\x06\xb0\x96\x40\x63\x8c\xa9\
-\x89\x4b\x80\xe7\x7d\x3e\xdf\x77\x91\x0e\xc4\x44\xa5\xa3\x55\x55\
-\xa2\x39\x09\xdc\xba\xd5\xcb\xdd\x77\x77\xe3\xcc\x33\x37\x92\x91\
-\x91\x1b\xd6\x67\xfd\xea\x57\xbf\x22\x39\x39\x59\x7a\xf7\xee\x9d\
-\x15\xd6\x07\x19\x4b\x02\x8d\x31\xa6\x06\xe6\x03\x8f\x44\x3a\x08\
-\x13\xb5\x46\x76\xe9\xd2\xa5\x30\x29\x29\x29\xd2\x71\x1c\xb6\xec\
-\xec\x1e\x24\x27\x07\xb8\xea\xaa\xb5\x61\x7f\x56\xf3\xe6\xcd\xd9\
-\xbe\x7d\x3b\xa9\xa9\xa9\x67\x84\xfd\x61\x8d\x9c\x75\x07\x1b\x63\
-\xcc\x41\xf8\x7c\xbe\xb9\x91\x8e\xc1\x44\xaf\xb8\xb8\xb8\xb1\x19\
-\x19\x19\x51\x3b\x23\xe4\xa5\x97\xda\xb2\x74\x69\x32\x8f\x3c\xb2\
-\x9c\x84\x84\xea\x97\x82\xab\x4b\xef\xbf\xff\x7e\xaa\x88\x34\x51\
-\xd5\x7d\xf5\xf6\xd0\x46\xc6\x5a\x02\x8d\x31\xc6\x98\x30\x11\x91\
-\xf8\x40\x20\x90\x1e\xad\x5d\xc1\xbf\xfc\x12\xcf\x5f\xff\xda\x85\
-\x73\xce\xf9\x85\x41\x83\xf6\xd4\xdb\x73\x87\x0f\x1f\xce\x8a\x15\
-\x2b\xdc\xc0\xb8\x7a\x7b\x68\x23\x64\x49\xa0\x31\xc6\x18\x13\x3e\
-\x19\xc1\x60\xd0\x9b\x96\x96\x16\xe9\x38\x0e\x99\x2a\xcc\x9c\xd9\
-\x83\x0e\x1d\x0a\xb8\xfc\xf2\x75\xf5\xfa\xec\x16\x2d\x5a\x30\x68\
-\xd0\xa0\x62\x11\x39\xbd\x5e\x1f\xdc\xc8\x58\x77\xb0\x31\xc6\x1c\
-\x80\xdf\xef\x1f\x8f\x33\x29\xe4\x2c\x9f\xcf\x67\x2b\x18\x98\xc3\
-\x31\xaa\x55\xab\x56\x85\xed\xda\xb5\x8b\xba\xee\xe0\xf9\xf3\xdb\
-\xf3\xf5\xd7\x49\x3c\xf1\xc4\xff\xf0\x7a\xeb\x7f\x75\xb1\x31\x63\
-\xc6\x78\x96\x2f\x5f\x7e\xba\x88\xb8\x6d\x05\x91\xf0\xb0\x24\xd0\
-\x18\x63\x0e\xec\xf7\x40\x67\x4b\x00\xcd\xe1\xf2\x78\x3c\xc7\x67\
-\x64\x64\x44\x5d\x7d\xc0\x35\x6b\x12\x78\xe8\xa1\xce\x5c\x7c\xf1\
-\x7a\xfa\xf4\x89\xcc\x90\xbc\x91\x23\x47\xd2\xac\x59\xb3\xe4\xf7\
-\xde\x7b\xef\xf7\xc0\xb3\x11\x09\x22\xc6\x59\x77\xb0\x31\xc6\x1c\
-\xd8\x38\xe0\xe5\x48\x07\x61\xa2\x93\x88\x08\x70\xcc\x90\x21\x43\
-\x24\xd2\xb1\x1c\x8a\x60\x50\xb8\xfd\xf6\x9e\xf4\xec\x99\xc7\x05\
-\x17\x6c\x88\x58\x1c\x9d\x3a\x75\xa2\x65\xcb\x96\x9a\x9a\x9a\x7a\
-\x7e\xc4\x82\x88\x71\xd6\x12\x68\x8c\x31\x55\xf0\xfb\xfd\x6e\x20\
-\x15\xb0\xda\x80\xe6\x70\x1d\x11\x08\x04\x9a\x45\xdb\x78\xc0\x79\
-\xf3\x3a\xf0\xfd\xf7\x4d\x98\x37\xef\x7f\xb8\xdd\xf5\xdf\x0d\x5c\
-\xd6\xbe\x7d\xfb\x24\x31\x31\xb1\x73\x44\x83\x88\x61\x96\x04\x1a\
-\x63\x4c\xd5\x82\x40\x1a\x10\xfe\xc2\x68\x26\x56\x8d\x6a\xda\xb4\
-\x69\x51\xf7\xee\xdd\xa3\xa6\x3b\x78\xd5\xaa\x26\x3c\xfe\x78\x27\
-\xae\xbc\x72\x2d\xdd\xba\xe5\x45\x3a\x1c\x82\xc1\x20\x89\x89\x89\
-\xad\x23\x1d\x47\xac\xb2\x24\xb0\x91\x91\x2c\x39\x4b\x73\xd4\xc6\
-\x56\x18\x73\x10\x3e\x9f\x4f\x81\x65\x91\x8e\xc3\x44\x2f\x97\xcb\
-\x75\x6c\x5a\x5a\x9a\xcb\xe9\x15\x6e\xf8\x8a\x8a\x84\x19\x33\x7a\
-\x72\xc4\x11\x7b\xf8\xc3\x1f\x7e\x89\x74\x38\x00\x6c\xde\xbc\x99\
-\xe7\x9e\x7b\x2e\xef\xc1\x07\x1f\x8c\x74\x28\x31\xc9\xc6\x04\x36\
-\x22\x32\x55\x06\x00\xf3\x24\x4b\x7e\x17\xe9\x58\x8c\x31\x26\xd6\
-\xb9\xdd\xee\xd1\x43\x87\x0e\x75\x47\x3a\x8e\x9a\x7a\xfc\xf1\x4e\
-\xac\x5b\x17\xcf\x2d\xb7\xac\xc6\xd5\x40\xb2\x83\xe4\xe4\x64\x72\
-\x73\x73\xad\x25\x30\x4c\x1a\xc8\x1f\xb3\xa9\x27\x7f\xc5\x69\xfd\
-\xbd\x53\x66\x48\x42\xa4\x83\x31\xc6\x98\x58\x25\x22\x5d\x8b\x8a\
-\x8a\xda\x46\x4b\x91\xe8\x6f\xbe\x69\xc6\xbc\x79\x1d\xb8\xe6\x9a\
-\x9f\x49\x4d\x2d\x88\x74\x38\xa5\xda\xb4\x69\x43\x20\x10\x68\x26\
-\x22\x89\x91\x8e\x25\x16\x59\x12\xd8\x48\xc8\x54\xf9\x35\xca\x89\
-\xa1\xcd\x6e\xe4\x71\x63\x44\x03\x32\xa6\x81\xf3\xfb\xfd\x37\xfa\
-\xfd\xfe\xe7\x23\x1d\x87\x89\x5a\xa3\xbc\x5e\x6f\x71\xbf\x7e\xfd\
-\x22\x1d\xc7\x41\x15\x14\xb8\xb8\xfd\xf6\x9e\x8c\x18\x91\xcb\x19\
-\x67\x6c\x8e\x74\x38\xe5\xb4\x6e\x5d\xda\x08\x98\x1a\xc9\x38\x62\
-\x95\x25\x81\x8d\x80\xcc\x90\x38\xe0\xde\xf2\x3b\xc9\x94\x69\xd2\
-\x31\x32\x11\x19\x13\x15\xfa\x01\xad\x22\x1d\x84\x89\x4e\x22\x32\
-\x72\xc0\x80\x01\x41\xaf\xb7\xe1\xcf\x09\x79\xe8\xa1\xce\x6c\xdf\
-\xee\xe5\xe6\x9b\x7f\x88\x74\x28\x95\xb4\x68\xd1\x82\x3b\xee\xb8\
-\x83\x63\x8e\x39\x26\x23\xd2\xb1\xc4\x22\x4b\x02\x1b\x83\x7c\xae\
-\x47\xe9\x59\x61\x6f\x53\x8a\x99\x1d\x91\x78\x4c\x83\x26\xc2\x65\
-\x22\x0c\x29\xb3\xfd\x2b\x11\xce\x2b\xb3\xdd\x54\x84\x2b\x44\xe8\
-\x11\x99\x08\xeb\x4d\x7b\xa0\x61\x8c\x8e\x37\x51\xc7\xeb\xf5\x9e\
-\x90\x9e\x9e\x7e\xd8\x19\x60\x6e\xae\x87\x35\x6b\x12\x4b\x7f\xb6\
-\x6e\x8d\x43\xc3\x54\xad\xc5\xe3\x51\x6e\xbc\xf1\x27\xda\xb4\x29\
-\x0c\xcf\x03\x6a\x21\x39\x39\x99\x94\x94\x14\x92\x92\x92\x7a\x47\
-\x3a\x96\x58\x64\xb3\x83\x63\x9c\xdc\x2c\x1d\x80\x69\x07\x38\x7c\
-\x8e\x4c\x95\x07\x34\x5b\x3f\xae\xcf\x98\x0e\x95\x08\x6d\x28\x3f\
-\x4b\xb3\x08\x58\x07\xbc\x07\xdc\xa3\x4a\xc3\xea\xbf\x88\x20\x11\
-\x9a\x01\x7f\x02\x5e\x56\xe5\x9b\xc3\xbc\xcd\x83\xc0\xcd\xc0\x57\
-\xa1\xed\x89\xc0\x39\xc0\xdf\x42\xdb\x2d\x00\x3f\xf0\x3b\xa0\xe1\
-\x35\x1d\xd4\x1d\x0f\xce\xdf\x35\x63\x0e\x89\x88\xb4\x02\x7a\xd4\
-\x66\x3c\xe0\x82\x05\x6d\x79\xf0\xc1\xf2\xe5\xf1\xbc\xde\x20\x27\
-\x9f\xbc\x8d\xab\xaf\xfe\x99\xa4\xa4\x40\x2d\xa3\xdc\xef\xea\xab\
-\x7f\xae\xb3\x7b\xd5\xb5\x92\x99\xd5\x2e\x97\xab\xe1\x37\xa9\x46\
-\x21\x4b\x02\x63\x5d\x90\x1c\xa0\xd9\x01\x8e\x0a\xca\x7d\x22\x72\
-\x94\x6a\xb8\xbe\x63\xd6\x09\x17\xd0\x0e\x58\x08\xbc\x02\x34\x01\
-\xc6\x00\xd7\x01\xa7\x88\x90\xa1\x4a\x7e\x04\xe3\x6b\x48\x9a\x03\
-\x39\xc0\x7a\x38\xec\x24\x70\x32\xf0\x61\x9d\x45\x14\xbd\x2e\x05\
-\x6c\xb9\x38\x73\x38\x8e\x71\xb9\x5c\x0c\x1e\x3c\xb8\xd6\x37\x9a\
-\x3b\x77\x05\x6d\xdb\x16\xb1\x71\x63\x1c\x4b\x96\xa4\xf0\x9f\xff\
-\xb4\xa5\xa0\x40\x98\x31\x63\x75\x1d\x84\x69\x1a\x3b\x4b\x02\x63\
-\x98\x4c\x91\x11\xb8\x38\xd8\x72\x3b\x47\x92\xc5\xb9\xec\x6f\xe5\
-\x69\xc8\x3e\x53\xe5\xe1\xd0\xeb\x7b\x45\x78\x10\xb8\x12\x38\x0e\
-\x78\xa3\xec\x89\x22\x34\x07\x3a\x00\xdb\x55\xd9\x52\xdb\x07\x87\
-\xee\xd7\x06\xf8\x49\xb5\xfa\xc4\x40\x84\x76\x00\xaa\x6c\x3a\xc4\
-\x67\x78\x80\x6e\xc0\x7a\x55\xaa\xad\xd2\x2a\x42\x2b\x20\x5e\x95\
-\x43\x5a\xd3\x49\x04\x17\x4e\x37\x67\x33\xe0\xe7\xaa\x92\x67\x55\
-\xe6\x1e\xca\x3d\xab\x78\x46\x07\x40\x55\xd9\x58\x9b\xfb\x44\x9a\
-\xcf\xe7\x5b\x17\xe9\x18\x4c\xd4\x1a\xd5\xad\x5b\xb7\xa2\x26\x4d\
-\x9a\xc4\xd5\xf6\x46\x9d\x3a\x15\xd0\xa1\x43\x01\x5d\xbb\xe6\x71\
-\xe4\x91\xbb\xf8\xec\xb3\xe6\x7c\xf0\x41\xcb\x4a\xe7\xad\x5e\x9d\
-\xc8\xea\xd5\x4d\xd8\xb7\xcf\x4d\xfb\xf6\x85\x0c\x1d\x9a\x4b\x7c\
-\x7c\xb0\xf4\xf8\xb2\x65\x49\x34\x6f\x5e\x44\xd7\xae\xe5\xff\x97\
-\x57\x85\x2f\xbf\x6c\x4e\xfb\xf6\xce\x73\x4a\xac\x5a\xd5\x84\xef\
-\xbf\x6f\x82\xd7\xab\xf4\xef\xbf\x97\x8e\x1d\xcb\x5f\xb7\x72\x65\
-\x13\xdc\x6e\xe8\xde\x7d\x1f\x2b\x57\x36\x65\xe5\xca\x26\xb4\x6b\
-\x57\xc8\xf0\xe1\xbb\xea\xb4\xbc\x8c\xc7\xe3\xe1\xb6\xdb\x6e\x0b\
-\xe6\xe5\xe5\x7d\x5f\x77\x77\x35\x25\x2c\x09\x8c\x6d\xc9\x08\x37\
-\x94\xd9\x4e\x44\xc9\xc6\x49\x9e\x56\x95\xee\x55\x1a\xde\x40\x90\
-\x9a\x79\x0b\x27\x09\x2c\x9d\x35\x26\xc2\x20\xe0\xef\xc0\xe0\x32\
-\xfb\x56\x02\x17\xa8\xb2\x34\xb4\x7d\x09\xf0\x18\xd0\x5b\x95\x72\
-\x5f\xa7\x45\xf8\x14\xd8\xa5\xca\x09\xa1\xed\xbe\xc0\x53\xc0\xaf\
-\x42\xa7\x14\x88\xf0\x17\xe0\x56\x55\xa7\xab\x50\x84\x0b\x81\x27\
-\x81\x91\xc0\xa3\xc0\x80\xd0\xfe\xf7\x80\x89\xaa\x6c\xab\xee\x4d\
-\x88\xd0\x12\xb8\x1f\xf8\x3d\x10\x07\x04\x45\xf8\x0f\x30\x49\x95\
-\xad\xa1\x73\x4e\x06\x5e\x05\x4e\x02\x66\x02\xc3\x43\xfb\xff\x0b\
-\xfc\x46\x95\xb5\xa1\x31\x7a\x25\xef\x67\x9e\x08\xf3\x42\xaf\x7f\
-\xad\xca\xcb\x22\xdc\x0c\x5c\xcf\xfe\xc9\x0e\x2a\xc2\x53\xc0\xd5\
-\xaa\xec\x2d\x13\x4f\x21\x70\xb3\x2a\x77\x55\x17\x77\x15\xef\xe3\
-\x02\x60\x0e\x4e\xab\x2d\x22\xac\x01\x2e\x53\xe5\xad\x43\xb9\x8f\
-\x31\xd1\x2e\x2e\x2e\x6e\x4c\x46\x46\x46\xad\x13\xc0\xaa\x74\xea\
-\x94\xcf\xd6\xad\x71\x14\x17\x4b\xe9\x92\x6e\xd9\xd9\x3d\x78\xed\
-\xb5\x56\x74\xec\x58\x40\x71\xb1\xb0\x76\x6d\x02\x9d\x3a\xe5\xf3\
-\x97\xbf\x7c\x47\xe7\xce\x4e\xf2\xf6\xdc\x73\xed\xf8\xee\xbb\xa6\
-\x3c\xff\xfc\x57\x94\xad\x5d\xfd\xd9\x67\xc9\x5c\x7d\x75\x3f\xe6\
-\xce\x5d\x41\x87\x0e\x05\x14\x15\x09\xb3\x67\xf7\x60\xe1\xc2\xd6\
-\x74\xea\x94\x4f\x51\x91\x8b\x2d\x5b\xbc\x5c\x74\xd1\x06\x2e\xbb\
-\x6c\xff\xf7\xa2\xbf\xfc\xa5\x2b\x5e\xaf\xd2\xb2\x65\x80\x45\x8b\
-\x52\x68\xde\x3c\xc0\xf6\xed\x5e\x8e\x3e\x7a\x27\xf7\xdc\xf3\x5d\
-\xb9\x67\xd4\x86\x88\xb0\x7d\xfb\x76\x02\x81\x80\x0d\xcd\x08\x03\
-\x4b\x02\xa3\x84\x4c\x95\x36\x94\x7c\x78\xc7\xf3\xb3\x4e\xd7\x7d\
-\x07\xbb\x46\xe7\xe8\x5b\xb0\xff\x03\x58\xb2\xa4\x05\x90\x8d\xf2\
-\x82\xe6\xe8\x3b\x61\x0a\xb5\x3e\x9d\x16\xfa\x6f\xd9\xae\x4b\x17\
-\xf0\x08\x4e\xcb\xe0\x26\xe0\x58\x9c\xf1\x6d\x2f\x8a\xd0\x57\x95\
-\x3d\xc0\xb3\xc0\x3d\xc0\x65\x40\x66\xc9\x85\x22\xa4\x03\x19\x38\
-\xc9\x18\x22\x24\x00\x6f\x03\xb9\x38\x49\xe0\x4a\xe0\x5c\xe0\x2f\
-\x80\x02\x53\x2b\xc4\xf3\x64\xe8\x67\x3e\x30\x01\xb8\x1b\xb8\x0d\
-\xb8\xfa\x40\x6f\x40\x04\x01\x5e\xc7\xf9\xb3\xfd\x13\x4e\x77\xf7\
-\x78\x60\x06\x30\x2f\x74\x9f\xb2\x1e\x05\x9e\xc6\x19\xa3\x77\x6c\
-\xe8\x7d\xdc\x13\x8a\xf9\x67\xe0\x48\xe0\x63\x9c\x2e\xdd\x7f\x85\
-\xae\x29\x69\x91\xdc\x06\x9c\x05\x7c\x09\x24\x00\xbf\xc6\x99\x35\
-\xbe\x09\xc8\x3a\x50\x8c\x35\x21\xc2\x65\xa1\xd8\xee\xc6\x49\xc2\
-\xbd\x38\xbf\x9f\x57\x44\x18\x50\x31\xd9\x36\x26\x56\x89\x48\xa2\
-\x88\x0c\x09\x47\x7d\xc0\x95\x2b\x9b\xf0\xc9\x27\xc9\x1c\x79\xe4\
-\xae\x72\x6b\xfa\x9e\x76\xda\x66\xae\xb9\x66\x0d\xcd\x9a\x39\x9d\
-\x14\x6b\xd6\x24\x72\xd5\x55\xfd\xf8\xeb\x5f\xbb\x72\xcf\x3d\xce\
-\xd2\xd7\xbf\xfd\xed\x66\xae\xbc\xb2\x3f\x9f\x7f\xde\x9c\x8c\x8c\
-\xdc\xd2\x6b\xff\xfd\xef\xb6\x74\xee\x9c\x5f\xba\xef\xdf\xff\x6e\
-\xc7\xab\xaf\xb6\x66\xd6\xac\x55\x8c\x1d\xeb\x7c\x7f\x7d\xfc\xf1\
-\x8e\x3c\xf6\x58\x27\x06\x0e\xdc\xc3\xd1\x47\xef\x2c\xbd\xf6\xd3\
-\x4f\x93\x39\xe3\x8c\xcd\x2c\x58\xf0\x5f\x5a\xb4\x08\xf0\x8f\x7f\
-\x74\xe0\xa1\x87\x3a\xf3\xfe\xfb\x2d\x39\xf6\xd8\x1d\x75\xfe\xfe\
-\x4d\xdd\x8b\xda\x24\x50\xb2\xa4\x07\x90\x5d\xba\x23\xc8\xdd\x3a\
-\x47\x3f\x2b\x73\xfc\x72\x9c\x71\x63\x10\x64\xba\xce\xd1\xe8\x5e\
-\x04\x5e\xb9\x9e\x92\x0f\xea\x42\xc6\x00\x4b\x22\x1a\x4f\x64\x8c\
-\x14\x21\x13\x68\x0a\x8c\x03\x86\x01\xf7\xab\x52\xfa\x67\xab\xca\
-\x57\xec\x9f\xd0\x00\xf0\xaa\x08\xdb\x81\x8f\x80\xb1\xc0\x02\x55\
-\xf6\x85\x5a\xc9\x2e\x14\xe1\x96\x92\x16\x3d\x60\x12\x4e\x42\xf4\
-\x9f\xd0\xf6\xf9\x40\x27\x60\x98\x2a\x5f\x84\xf6\xcd\x0d\xcd\x9c\
-\xbd\x4e\x84\x1c\x55\x76\x97\x79\xd6\x3f\x55\xc9\x29\x73\xde\xc4\
-\x50\x9c\xd5\xf9\x03\x30\x02\xf8\xbd\x2a\x25\x35\xe9\x9e\x0a\x25\
-\xa0\x7e\x11\x06\x56\x98\xe0\xf1\x86\x2a\xb7\x86\x5e\x7f\x2f\xc2\
-\x89\xc0\xc9\xa1\xf7\x1e\x10\xa1\xe4\xab\xfa\x16\x55\x7e\x2a\xfb\
-\xa0\x32\x5d\xe9\x25\x1e\x14\xe1\x57\xc0\x79\xd4\x22\x09\x14\xc1\
-\x8b\x33\x0e\x71\x91\x2a\x37\x95\xd9\x7f\x3e\xce\xef\xf3\x1a\xe0\
-\xda\xc3\xbd\x7f\xa4\xf8\xfd\xfe\xc7\x80\xad\x3e\x9f\xaf\x56\x09\
-\xb2\x69\x74\x8e\x54\x55\x77\x5a\x5a\x5a\x9d\xdc\xec\xf6\xdb\x7b\
-\x12\x1f\x1f\xe4\x97\x5f\xe2\x59\xb3\x26\x81\xe1\xc3\x73\x99\x32\
-\xe5\xa7\x72\xe7\x0c\x1a\xb4\xa7\xf4\x75\x30\x28\x74\xe8\x50\xc0\
-\x69\xa7\x6d\xe1\x99\x67\x3a\xa0\x0a\x22\x90\x9e\x9e\x4b\xb7\x6e\
-\x79\x2c\x58\xd0\xb6\x34\xe1\xdb\xbe\xdd\xcb\x7b\xef\xb5\xe4\x8a\
-\x2b\xd6\x96\xb6\xdc\xbd\xf8\x62\x3b\x8e\x3c\x72\x67\x69\x02\x08\
-\x70\xd1\x45\xeb\x59\xb8\xb0\x0d\xcf\x3f\xdf\xae\x5c\x12\xe8\x72\
-\x29\x93\x26\xad\x25\x39\xd9\x99\xa4\x72\xc6\x19\x9b\x78\xf8\xe1\
-\x4e\x7c\xf7\x5d\x53\x4b\x02\xa3\x44\xd4\x26\x81\x04\x49\xc1\xc5\
-\x1f\x4a\xb7\x5d\xb4\x07\x8e\x2f\xdd\x56\x46\x20\xa1\xe3\x6e\xe6\
-\x02\xd1\x9d\x04\x1a\x80\x23\x80\xd6\x38\x63\xf3\x52\x71\x5a\xbc\
-\x6e\xad\x78\x92\x08\x47\xe3\x24\x70\xdd\x71\x26\x4a\x08\x4e\xcb\
-\x5d\xd7\x32\xa7\xf9\x71\x5a\xe8\x7e\x8d\xd3\x4a\xd8\x0c\x38\x1b\
-\x78\xa0\x4c\x52\x38\x14\xd8\x54\x26\x01\x2c\xf1\x2a\x70\x09\xd0\
-\x1b\xca\x1d\xfb\x77\x85\xf3\xde\xc7\xe9\x7e\xad\xce\x70\x9c\x19\
-\xa8\xed\x44\xb8\xa2\xcc\xfe\x92\x41\x3f\x83\x28\x3f\xc1\xa3\xaa\
-\x67\xfc\x41\x84\x26\xaa\x54\xdb\x3a\x2c\x42\x13\xe0\x02\x9c\x31\
-\x94\xa9\x38\x5d\xcf\x6d\x81\x54\x11\xe2\xf4\xf0\x87\x05\xf4\xc0\
-\x69\xc9\xdc\x58\xe1\x3d\x00\xfc\x18\x7a\x0f\xd1\xa8\x33\x4e\x8b\
-\xa6\x31\x87\x62\x54\xbb\x76\xed\x0a\x5b\xb5\x6a\x55\x27\xdd\xc1\
-\x1d\x3b\xe6\xd3\xb4\x69\x31\x45\x45\xc2\x86\x0d\xf1\xa4\xa4\x14\
-\x91\x92\x52\xbe\x67\x74\xfd\xfa\x04\x1e\x7d\xb4\x13\x9f\x7d\xd6\
-\x9c\xed\xdb\xbd\xe5\x4a\xc9\xec\xda\xe5\xa1\x45\x0b\x27\x49\x9b\
-\x38\x71\x33\x73\xe7\x76\x61\xe7\x4e\x67\xdf\xcb\x2f\xb7\x41\x04\
-\x4e\x3d\x75\x2b\x00\xc5\xc5\xc2\xba\x75\xf1\xe5\x12\x40\x00\x97\
-\x0b\xfa\xf7\xdf\xcb\xca\x95\x4d\xca\xed\x1f\x38\x70\x4f\x69\x02\
-\x08\x90\x94\x54\x4c\x6a\x6a\x01\x3b\x76\xd4\x5d\x6a\x11\x08\x04\
-\x98\x35\x6b\x96\xeb\xed\xb7\xdf\xee\x53\x67\x37\x35\xa5\xa2\x37\
-\x09\xac\xec\x38\xc9\x92\x93\x34\x47\x5f\x8f\x74\x20\x26\x6c\x1e\
-\x56\xe5\x36\x00\x11\x8e\xc4\xe9\xaa\x7d\x01\x4a\x57\x42\x41\x9c\
-\xc4\xff\x39\xe0\x4d\x9c\x04\xed\x5b\xa0\x00\xa7\x8b\xb2\xf4\x5f\
-\x30\x55\x56\x88\xf0\x2e\x70\x39\xf0\x22\x4e\xf7\x6a\x53\x9c\xb1\
-\x82\x25\xda\x01\x55\x7d\x9d\xdd\x1e\xfa\x6f\xc5\xf5\x2c\xd7\x57\
-\xd8\xde\xc7\xc1\xff\x1f\x4b\x05\x0a\x81\x53\xab\x38\xf6\x06\x54\
-\x9a\x20\x52\xd5\x33\x38\xd8\x73\x42\x13\x42\x16\xe2\x24\x64\xaf\
-\x00\x2f\x03\x6b\x71\x5a\xcb\x2f\x03\xe2\x43\x71\x1c\x8e\x92\x31\
-\x99\xbd\xa9\xfc\x3b\x59\x07\xe5\x5b\x24\x8d\x89\x65\x5e\xaf\xf7\
-\xf8\x8c\x8c\x8c\x3a\xfb\xf2\x70\xc9\x25\xeb\x4b\x27\x6c\x7c\xf0\
-\x41\x0b\x6e\xbc\xb1\x2f\x1d\x3a\x14\x70\xc5\x15\x6b\x01\x08\x04\
-\x84\xeb\xae\xeb\x8b\xcb\x05\x57\x5c\xb1\x96\x1e\x3d\xf2\x68\xd7\
-\xae\x80\x25\x4b\x5a\x71\xcf\x3d\x5d\x29\x2e\xde\x3f\x38\xef\xe4\
-\x93\xb7\xf0\xd0\x43\x9d\x79\xf5\xd5\x36\x9c\x75\xd6\x2f\x2c\x58\
-\xd0\x96\xe3\x8f\xdf\x4e\x8b\x16\x4e\x52\x59\x54\x24\x14\x17\x0b\
-\x71\x71\x95\x8b\x45\x78\xbd\x41\x0a\x0b\xcb\xcf\xf8\x68\xd2\xa4\
-\xf2\x1c\x39\xb7\x1b\x9c\xef\xdd\x75\x43\x55\x49\x4a\x4a\xc2\xeb\
-\xf5\xc6\x52\xbe\xd2\x60\xc4\xd6\x2f\x55\xc9\x11\x91\x37\x0e\x56\
-\xee\x44\x32\xe5\x68\x84\x1b\x81\xbe\x40\x32\x4e\x6b\xc5\xdb\x14\
-\x70\xa7\xde\xab\xa5\x1f\xba\x92\x25\x0b\x42\xc7\xd7\x11\xe4\xcf\
-\xb8\xb9\x8b\x20\x47\xe1\xe2\x59\xe2\x99\x45\x3e\xaf\x86\x4e\xfd\
-\x0a\x67\xfc\xd6\x0c\x94\x01\xb8\xf8\x08\xe5\x66\x12\x58\x47\x3e\
-\xb7\xe3\x7c\xc0\xc7\x01\xaf\x90\xc0\x34\x9d\xae\xf9\xa1\xfb\x77\
-\x03\xee\xc0\xf9\x60\x6e\x85\xd3\xea\xb0\x11\xf8\x9a\x20\xd9\x3a\
-\x47\x57\xd4\xe4\x6d\xcb\x14\x39\x11\x17\xd7\x02\xbd\x80\x26\x28\
-\x2b\x81\x27\x74\xb6\x3e\x53\x93\xeb\xa3\x91\x2a\x1f\x8b\x70\x35\
-\xf0\xa4\x08\xe7\xa8\xf2\x8f\xd0\xa1\xab\x81\xff\x01\x27\xa9\xa2\
-\x50\x3a\x5b\xb7\xaa\x45\xdc\xfd\xc0\xb3\x22\x74\xc7\x49\x06\xdf\
-\x52\x2d\x57\xf7\xee\x27\x60\x8c\x08\x52\x72\xaf\x90\x92\xa4\xa7\
-\x2e\x66\x8f\xae\xc6\xf9\x17\xf3\x94\x83\xcd\x3a\xae\xa1\x92\x38\
-\x2b\xfe\x2b\x3c\x08\xa7\xa5\xfc\x4a\x55\xfc\x25\x3b\x45\xe8\x5f\
-\x07\xcf\x2c\x19\xef\xf7\x90\x2a\x4f\xd7\xc1\xfd\x8c\x89\x4a\x22\
-\xe2\x76\xbb\xdd\x47\x0d\x19\x32\xa4\xee\xb2\xa0\x32\x46\x8e\xdc\
-\xc9\xc4\x89\x9b\xf8\xfb\xdf\x3b\x70\xea\xa9\x5b\xe8\xd4\x29\x9f\
-\x1f\x7e\x48\x64\xed\xda\x04\x66\xce\x5c\xc5\x89\x27\xee\x6f\xc1\
-\xdb\xb6\xad\xf2\xc7\x7b\x52\x52\x31\x27\x9e\xb8\x8d\x05\x0b\xda\
-\xd2\xa3\xc7\x3e\x36\x6c\x88\x67\xda\xb4\xfd\xff\xe4\x25\x24\x04\
-\x69\xdd\xba\x90\xb5\x6b\x2b\x2f\x2d\xff\xf3\xcf\x09\xe5\x66\x0f\
-\x9b\xd8\x10\x2b\x2b\x86\x7c\x00\x14\x20\xa4\x31\xa5\x4c\x17\x71\
-\x15\x24\x53\xae\x45\xf8\x00\x38\x03\x67\x16\x67\x47\x9c\x59\x9d\
-\xb7\x11\xcf\x7f\x65\x86\xec\xaf\xa9\x27\x8c\xc4\xe9\x3a\x3b\x11\
-\x17\xef\xa0\x9c\x8d\x93\x30\x24\xb1\x0f\x77\xe8\xd8\x71\x38\x45\
-\x73\x97\x00\xa7\x20\x74\x47\x39\x1b\x78\x85\x3c\x9e\xc7\x19\x6b\
-\x35\x08\x27\xe1\x9c\x4c\xbe\xd3\x92\x05\x80\xd2\x05\xa7\x05\x6a\
-\x30\x4e\xb2\xd9\x2a\xf4\xfa\x5c\x5c\x7c\x21\x53\xa4\xef\xc1\xde\
-\xb8\x64\xc9\xed\xb8\x78\x13\x38\x25\xf4\x8c\xf6\x08\x63\x11\xfe\
-\x21\x59\x52\xab\x52\x1f\x0d\x9d\x2a\x4f\x01\xff\x05\x66\x84\xca\
-\xab\x80\xf3\xc5\xe6\x87\x0a\x49\xdb\x79\x15\xaf\x0d\xf9\x17\xb0\
-\x19\x78\x08\x48\xc7\x99\x50\x52\xd6\xfb\x38\x7f\x2e\x15\x5b\xe9\
-\xce\xc7\x49\xd6\xeb\x62\xb2\xc3\x9b\x38\x2d\x94\x17\x55\x75\x30\
-\x34\x71\xe4\x50\x6c\x03\x82\x38\xa5\x66\xca\x2a\x49\x82\x4b\x63\
-\x0e\xfd\xce\xce\x3a\xc4\xfb\x57\xa2\xca\xcf\xc0\x0a\xe0\x8a\x50\
-\x8b\x63\x39\x87\xf1\x1e\x1a\x8a\x4b\xa9\xe5\x84\x19\xd3\xe8\x0c\
-\x29\x2e\x2e\x4e\xac\xab\xf1\x80\x55\xb9\xe4\x92\xf5\xb8\xdd\xca\
-\x93\x4f\x3a\xab\x7e\xb6\x6e\x5d\x84\xc7\xa3\xe4\xe6\xee\x4f\xfa\
-\x76\xec\xf0\xb2\x60\x41\xdb\x2a\xaf\x9f\x38\x71\x13\x6b\xd6\x24\
-\x70\xf7\xdd\xdd\xe8\xda\x35\x9f\xf4\xf4\xdc\x72\xc7\x47\x8f\xde\
-\xc1\xa2\x45\x29\xfc\xf2\x4b\x7c\xe9\xbe\x4f\x3f\x6d\xce\xf2\xe5\
-\xcd\x38\xfe\xf8\xed\x15\x6f\x67\xa2\x5c\xac\xb4\x04\xfe\x04\x7c\
-\x0e\x5c\x8b\x30\x53\x26\xc9\x8b\x54\x2e\xa3\x84\xfc\x59\x7a\xe2\
-\x66\x36\x4e\x2b\xc9\x0e\x84\x9b\x10\x3e\x27\x48\x36\xce\xe0\xfa\
-\xbe\xe4\x33\x8b\xca\x83\xd8\xdb\xa2\xc4\x21\xdc\x87\xf2\x09\xe5\
-\x27\x03\x00\x74\x40\xf9\x17\xc2\x23\x28\x39\x38\xb3\x4c\x07\x22\
-\xf4\x40\x98\x42\x90\x75\x08\x7f\xc3\x49\xba\xcf\xa3\x64\x46\xaa\
-\xb0\x01\x38\x9b\x04\x5e\xd3\xe9\xba\x53\x6e\x90\x44\xe2\xb8\x10\
-\xe1\x21\x20\x01\x17\x59\xc0\x85\x07\x7a\xd3\xa1\x3a\x80\x37\x87\
-\xee\xf5\x09\x01\xce\x26\xc8\x2e\xbc\x3c\x89\x93\xb8\xfc\x49\xa6\
-\xca\x7c\xcd\xd6\xf7\x6b\xfe\xab\x8c\x3a\x33\x70\x26\x72\x9c\x8b\
-\x53\xca\xe5\x49\x9c\x09\x0f\xb7\xe3\xcc\x1a\x1e\x09\x9c\x0e\x54\
-\x2a\xaf\xaf\x4a\x91\x08\x4f\xe0\x7c\xd0\x6f\x04\x5e\xaa\x70\xca\
-\x7f\x70\xbe\x60\xfc\x4d\x84\xe9\x38\x7f\xcf\x7e\x8f\x33\x7b\xf7\
-\x02\x55\x6a\xfd\xb5\x58\x95\xf7\x44\x78\x2c\x14\xf3\x00\x9c\x55\
-\x50\x04\xe8\x13\x7a\x4f\x63\xa1\xe6\x2b\xa2\xa8\x52\x28\xc2\x47\
-\xc0\x65\x22\x24\xe2\x4c\xcc\x78\x49\x95\x2f\x44\x58\x06\xdc\x15\
-\xaa\xe3\xb7\x1b\xe7\xef\x79\x5d\x95\x5d\xb8\x1c\xa7\x7b\xfe\x5d\
-\x11\xfe\x5f\xe8\xb9\x1d\x71\x7e\x57\x9f\xe3\x94\x8e\x89\x2a\x56\
-\x27\xd0\x1c\x86\x51\x49\x49\x49\x45\x5d\xba\x74\x09\xdb\x58\xd2\
-\x56\xad\x8a\x38\xe3\x8c\xcd\xcc\x9f\xdf\x8e\x8b\x2e\x5a\x4f\xa7\
-\x4e\xf9\x8c\x1c\xb9\x93\x07\x1f\xec\xcc\xb2\x65\xcd\x48\x4e\x0e\
-\xf0\xce\x3b\x29\x0c\x1d\xba\x9b\xc5\x8b\x53\x2a\x5d\xdf\xbf\xff\
-\x5e\xfa\xf7\xdf\xcb\x8a\x15\x4d\xb9\xf6\xda\xca\x2b\x85\x5c\x72\
-\xc9\x7a\x3e\xf9\x24\x99\x8b\x2e\x1a\xc8\x98\x31\x3b\x28\x2c\x14\
-\xde\x7a\xab\x15\x43\x87\xe6\x72\xe6\x99\x87\x54\xfa\xb4\x4e\x78\
-\xbd\x5e\x6e\xbe\xf9\xe6\x60\x41\x41\x81\x8d\xeb\x0f\x83\x58\x49\
-\x02\x41\x98\x85\x72\x31\xd0\x8b\x14\x2e\xa1\xaa\x0e\x61\x0f\x63\
-\x50\x9c\x76\x6e\xe5\x3f\x9a\xa3\x8f\x03\x48\xa6\xdc\x84\x53\x87\
-\x0d\x9c\x92\x1c\x95\x67\x32\xba\x38\x4f\xb3\xf5\x95\xd2\xc7\x4d\
-\x91\xa4\x32\x47\x8b\x49\xe4\x02\x9d\xae\x7b\x64\xaa\x1c\x87\x92\
-\x1e\xda\xff\xb6\x66\xeb\x9d\x00\x92\x25\xd3\x71\x3e\xd8\x3b\xc8\
-\x24\xf1\xea\x23\x5a\xa4\x39\xba\x4a\xa6\xca\x0e\x0a\xf8\xad\x64\
-\x49\x57\x12\x68\x0d\xb8\x50\x82\x38\x09\x63\xf5\x2d\x81\x2e\x4e\
-\xa6\xa4\x35\x57\xf9\x3f\x3c\xa1\x01\xf8\xca\x32\x4a\x5a\xaf\x94\
-\x93\x71\x5a\xb4\xa2\x59\x21\xf0\x2e\x55\x8c\x2d\x53\x65\x81\x08\
-\xcf\xe2\x24\x7b\x4f\xe1\x14\xbd\x1e\x8c\xd3\xb2\x76\x0e\xb0\x14\
-\x27\x91\x9a\x87\x53\x42\xa5\xa2\x7f\xe0\x24\x81\x4f\xa8\x96\x4f\
-\x14\x55\x51\x11\xc6\x01\xb3\x70\x92\x9c\xb6\x38\x13\x8c\x4e\x53\
-\xe5\x95\x32\xa7\x6e\x0c\xc5\x57\x71\x4c\xdd\xcf\x38\x49\x5d\xb5\
-\x54\xb9\x5c\x84\xa5\xc0\xc5\x38\x89\x5f\x30\xf4\x5e\x5f\x00\x76\
-\x85\x4e\xdb\x1e\x7a\xc6\x9e\x0a\x97\x97\x3c\xbb\x6c\xec\x7f\x04\
-\x6e\x04\x86\xe0\xb4\x32\x7e\x82\xb3\xbc\xdb\x65\x38\x25\x5c\xee\
-\x01\xbe\xc7\x19\x3b\xb9\x12\x98\x42\xf9\x95\x31\xde\xa3\xfc\xef\
-\xea\x07\xca\x97\xe1\x29\x08\x3d\xb3\xb4\x08\xb7\x2a\x1f\x84\x66\
-\x4d\xcf\xc2\x59\xa6\xb0\x35\x4e\xf2\xfa\x21\x15\x0a\x79\x1b\x13\
-\xab\xdc\x6e\xf7\xb1\xe9\xe9\xe9\x55\x0d\x3d\x39\x64\x43\x86\xec\
-\xe6\xd2\x4b\xd7\xd3\xac\x59\xe5\xe5\xe1\xce\x3f\x7f\x03\xcd\x9a\
-\x15\xb3\x79\x73\x1c\x9d\x3a\xe5\x33\x6d\xda\x6a\x9e\x7b\xae\x3d\
-\xab\x57\x37\x21\x2e\x4e\x99\x39\x73\x15\xcd\x9a\x05\xe8\xd1\x23\
-\x8f\x26\x4d\x82\x95\xae\x4f\x4f\xcf\x65\xd5\xaa\x44\x26\x4c\xa8\
-\x5c\x47\xbf\x45\x8b\x22\x9e\x7a\x6a\x19\x2f\xbc\xd0\x8e\x55\xab\
-\x9a\xe2\xf1\x04\xb9\xf6\xda\x35\x9c\x7e\xfa\x16\x5c\xae\xfd\x1f\
-\xac\xa7\x9e\xba\x15\x8f\xa7\xf2\x07\xed\x99\x67\x6e\x24\x35\xb5\
-\x6e\xbb\x8d\x73\x73\x73\x29\x2e\x2e\xae\xbb\x75\xf2\x4c\xa9\x98\
-\x49\x02\x35\x5b\xb7\x48\x96\xdc\x0b\x4c\x07\x6e\x45\x78\xa7\xd2\
-\x49\x41\x7a\x95\x76\x4c\x49\x99\x0f\xb5\x39\x2c\x27\x93\xbd\x38\
-\x13\x03\x7a\xc8\xef\xc5\xad\xf3\xb5\xec\x87\xe2\x3e\xf2\x59\x54\
-\xcd\xe3\xff\xa7\xd3\xd5\xf9\x70\x56\xd6\x96\xd9\xff\x51\x99\xd7\
-\x5b\x71\x92\x40\x21\x15\x2f\x50\x24\x59\x72\x12\x4e\x6b\x53\x7c\
-\xe8\xda\x8a\x2a\x7f\x8d\x2b\xaf\x57\x99\xd7\xd7\x87\xca\xc8\x54\
-\x77\x4e\x54\x52\x65\x07\x65\x67\x7e\x57\x3e\x7e\x76\x99\xd7\xfb\
-\x80\xab\x42\x3f\x65\x8d\x3f\xc0\xe5\x27\xe1\xb4\x86\x3d\x7a\x80\
-\x7b\xe7\x41\xb9\x82\xdb\x55\x9d\xf3\x3a\x4e\xad\xbf\x8a\xfb\x9f\
-\x01\x6a\x34\x2e\x53\x95\x27\x80\x27\xaa\x39\xfe\x31\x55\xfc\x0e\
-\x54\x79\x0d\x78\xad\xc2\xbe\x75\x38\x4b\xea\x55\x75\x8f\x51\x55\
-\xdc\xbe\xe2\xf5\x27\x54\xd8\x7e\x18\xf6\x97\x97\x09\x15\xb0\xae\
-\x2a\x96\xef\x80\x33\x0f\xf4\x1e\x8c\x89\x75\x2e\x97\xeb\xf8\xa1\
-\x43\x87\xd6\xc9\x30\xab\xc1\x83\x77\x33\x78\x70\xc5\x4e\x27\x47\
-\x4a\x4a\x11\x97\x5e\xba\xbf\xa1\xba\x59\xb3\x62\x2e\xbd\xb4\xe2\
-\x9c\x31\xe8\xd1\xa3\x72\x63\x76\x5e\x9e\x8b\xd7\x5e\x6b\xcd\x29\
-\xa7\x6c\x2d\x37\xb3\xb7\xac\xc4\xc4\x20\xe7\x9d\xf7\x4b\xb5\xf1\
-\x9d\x72\x4a\xd5\x0b\x31\xfd\xee\x77\xf5\xdf\x5a\x68\x0e\x5f\xcc\
-\x24\x81\x00\x04\xb9\x07\x17\x57\xe2\x2c\x17\x76\x46\xa5\xe3\x2e\
-\x7e\x29\x4d\xb4\xb4\xcc\x80\xf8\x9b\x49\xa5\x98\xa6\xa1\xad\xcd\
-\x15\x12\x40\x80\xf5\x65\x27\x8c\x54\x61\xff\xa0\x0a\xa1\xb8\x4c\
-\x32\xb7\xab\xaa\x93\xcb\xb8\x9b\x92\x04\x10\x2e\xc2\xc5\x1b\x04\
-\x70\xe3\xe2\x27\xaa\x9e\xc8\x50\xd1\xfe\xff\x4b\x05\x3f\xca\xd7\
-\x55\x9c\xf3\x53\x0d\xee\xd3\xe8\x88\x90\x8a\x33\x26\x34\x0b\xb8\
-\x4f\x95\x35\x11\x0e\xa9\x12\x11\x46\x00\x2b\xb4\xf2\xf0\x03\x53\
-\x0f\xac\x4e\xa0\x39\x14\x22\xd2\x0b\x48\x09\x47\x91\xe8\xba\xb0\
-\x7b\xb7\x87\x25\x4b\x52\x58\xb2\xa4\x25\x85\x85\x2e\x26\x4d\xb2\
-\xd1\x0e\x26\x76\x26\x86\x00\xa0\x73\x74\x37\x52\x5a\x40\xba\xf2\
-\xf4\xa6\x20\x9f\x94\xbe\x16\x4e\x93\x2c\xe9\x21\x93\xc4\x4b\x31\
-\x93\xca\x9c\xf5\x49\xa5\xeb\xc2\xa7\x73\xe8\xbf\x3b\xd8\xce\x3f\
-\x74\x96\xfe\x82\x70\x1a\x35\x4b\x00\x9d\x71\x80\x25\x94\x2e\xac\
-\xe6\x31\xcd\xd1\x87\x35\x47\x1f\x66\x3b\x8f\xa3\xe4\xa2\x95\x4a\
-\x8a\x18\xc7\xab\x38\xa5\x52\x3e\x06\x6e\x8f\x70\x2c\x95\x84\x26\
-\x53\x3c\x05\xac\x16\xe1\x6a\x11\xc2\xb2\x04\x95\xa9\x56\x67\x9c\
-\x2f\x94\xc6\xd4\xc4\xa8\xf8\xf8\xf8\xe2\x3e\x7d\x1a\x66\x39\xbb\
-\x1d\x3b\x3c\xbc\xf0\x42\x3b\x9a\x35\x2b\x66\xf6\xec\x95\xb4\x6c\
-\x19\x1d\xab\xb0\x05\x02\x01\xb2\xb3\xb3\x5d\xe3\xc6\x8d\x6b\x98\
-\xbf\xd8\x28\x17\x5b\x2d\x81\x00\x7b\xf0\xd3\x94\xeb\x81\x2e\x15\
-\x0f\xe9\x6c\xfd\x50\xb2\xe4\xef\x38\xe3\xae\x7a\x03\x2b\x49\x61\
-\x1b\xce\x58\x2f\x70\x6a\xae\x4d\xae\xb7\x58\x9d\xf1\x6a\xe3\x80\
-\x96\xa4\xf0\x95\x64\xc9\x4e\x84\xa1\x50\x3a\x26\xb0\x5a\x9a\xad\
-\x2f\xc8\x54\x79\x0b\xe5\x44\xe0\x14\x7a\xb1\x59\x32\xe5\x3d\x84\
-\x96\xa4\x70\x04\xd0\x0a\x65\x02\xb0\x2c\xac\xef\x22\x0a\xa9\x12\
-\xbe\xe9\x7b\x75\x20\x34\x1e\xf1\x68\x9c\xf1\x7a\x73\x70\x56\x28\
-\xb9\x05\x78\xb6\xc2\xcc\x67\x63\x4c\x03\x20\x22\xc7\x1e\x71\xc4\
-\x11\xea\x76\xd7\xc9\x90\xc0\x3a\xd7\xa5\x4b\x3e\xf3\xe6\x45\xdf\
-\x47\x81\xd5\x09\x0c\xaf\x98\x6a\x09\x04\xd0\xfb\xb5\x00\x67\x5c\
-\x60\xd5\xf6\x72\x29\xce\x2a\x13\x7b\x71\x5a\xdc\x4a\x12\xc0\x0f\
-\x71\x71\x94\xe6\xe8\xaa\xb0\x07\x59\xa2\x98\x2b\xa1\xb4\x0b\xb7\
-\x3f\xd0\x1d\x67\x22\x42\xcd\x47\xd5\x16\xf3\x5b\x9c\x25\xbb\xf6\
-\xa1\xa4\x20\x9c\x8e\x53\xb6\x26\x1e\x78\x89\x20\xf5\xf7\x7e\x4c\
-\x9d\x52\x65\xa7\x2a\x59\x38\xe3\x3a\x17\xe1\x4c\x6e\xf9\x42\xe4\
-\x80\xe3\x1b\x8d\x31\x11\xe2\xf5\x7a\xc7\xa4\xa7\xa7\x5b\xa2\x62\
-\xa2\x8a\x1c\xa4\xae\x72\xcc\x12\x11\xe1\x66\x3a\xa1\x24\x53\xc8\
-\x8f\x7a\x97\xee\x8d\x48\x1c\x33\xc4\x45\x3e\xdd\xf0\xa0\x3a\x53\
-\x7f\x3c\xec\xfb\x38\xef\x27\x15\xa5\x0d\xc2\x16\xbc\x6c\xd2\xe9\
-\x5a\x6e\xd4\xaf\x64\x49\x0b\x9c\x15\x30\x46\x6b\x8e\xbe\x53\xcb\
-\xd0\x4d\x3d\x13\xa1\x1f\xce\x7a\xd9\x67\x00\x8b\x81\x29\xaa\x7c\
-\x56\xfd\x55\xe6\x70\xf9\xfd\xfe\x4e\x40\xb1\xcf\xe7\xab\x7e\x84\
-\xbc\x69\xf4\x44\xa4\x1d\xb0\xf1\x81\x07\x1e\x20\x23\x23\x23\xd2\
-\xe1\xc4\x94\xa2\xa2\x22\x96\x2d\x5b\xc6\xc2\x85\x0b\x67\xbc\xf2\
-\xca\x2b\xb7\x45\x3a\x9e\x58\xd3\x68\x93\xc0\xc6\xc8\x92\xc0\xd8\
-\x20\xc2\xaf\x80\x3b\x71\xca\xe2\xbc\x00\xdc\xac\xca\xf7\x91\x8d\
-\xca\x98\xc6\x4b\x44\x7e\xeb\x72\xb9\x9e\x5f\xbc\x78\xb1\x24\x24\
-\x54\x1e\x8e\x6e\x6a\xe7\xe4\x93\x4f\x0e\x16\x14\x14\x9c\xb7\x77\
-\xef\xde\x98\x5d\x05\x2b\x52\x62\xae\x3b\xd8\x98\x58\xa7\xca\x52\
-\x55\x8e\x05\x7e\x8d\x33\x8c\x60\xb9\x08\x7e\x11\xda\x47\x38\x34\
-\x63\x1a\xab\x51\xbd\x7b\xf7\x2e\xb2\x04\x30\x3c\x72\x73\x73\xd9\
-\xb7\x6f\x9f\xd5\x09\x0c\x03\x4b\x02\x8d\x89\x52\xa1\x82\xd5\x43\
-\x70\x96\x37\x9b\x00\xac\x12\xe1\x0e\x11\x9a\x47\x36\x32\x63\x1a\
-\x97\xb8\xb8\xb8\x31\xc3\x86\x0d\xb3\x19\xfc\x26\xea\xd8\x20\xd6\
-\xc6\xe8\x43\x46\x8a\x48\x8b\x48\x87\x61\xea\xcc\x2e\x68\x73\x23\
-\xfc\x7d\x02\x1c\x7f\x2d\xe8\xd5\x22\x8b\x5f\x80\x0b\x5e\x87\x2d\
-\xb5\xa9\x03\xa1\xc0\x4e\x9c\x7a\x94\x6b\x55\xab\xad\x95\x19\x73\
-\xac\x4e\xa0\xa9\x09\x11\x69\x26\x22\x03\x1b\x6a\x7d\xc0\x18\x62\
-\x63\xd7\xc2\xc0\x92\xc0\xc6\xe8\x27\x66\x46\x3a\x04\x53\xd7\xb6\
-\xe0\x2c\x8a\x92\x8c\x53\x55\xe6\xba\x8b\xe1\xd3\x8b\xe1\x16\x9c\
-\x95\xf1\x2a\x2f\x1d\x75\x88\x8a\x44\xe4\x5d\x60\x01\xf0\x9c\xaa\
-\x6e\xad\xed\x0d\xa3\x40\x67\x20\x6c\x6b\xc0\x9a\x98\x71\x94\xaa\
-\xba\x2c\x09\x0c\x8f\x92\x3a\x81\x8b\x16\x2d\xaa\x7e\x19\x55\x73\
-\x58\xac\x3b\xd8\x98\x98\xb2\x0b\x98\x8a\x53\x55\xe6\x4d\xe0\x49\
-\xe0\xbf\x38\xbd\xc5\xb5\xe2\x05\x4e\x00\xe6\x02\xdf\x8a\xc8\x1f\
-\x6a\x7b\x43\x63\x62\xc4\xa8\x8e\x1d\x3b\x16\xb4\x68\x61\x9d\x2b\
-\xe1\x60\x75\x02\xc3\xcb\x7e\xa9\x8d\x51\x67\x66\xf2\x33\xcb\x23\
-\x1d\x86\x09\xa7\x0d\xc0\xe5\xc0\x92\x54\x98\xf9\x47\x58\x38\x1c\
-\x36\xac\x80\x7b\x9f\x85\x7b\x6a\x3a\x93\x58\x80\xd6\x40\x27\x20\
-\x1d\x67\xbd\x60\x0f\xd0\x0a\x78\x4e\x44\x7e\x0b\x5c\xd9\x48\x5a\
-\x05\x8d\xa9\x92\xd7\xeb\x1d\x9d\x91\x91\x11\x7f\xf0\x33\x8d\x69\
-\x78\x2c\x09\x6c\x8c\x46\xb1\x58\x3f\xb0\x12\x31\x8d\xc8\xbd\x4e\
-\x59\x99\xd4\x39\x70\xf7\xed\x70\xf7\xbf\x70\xca\xca\x7c\x7b\x28\
-\x37\x11\x91\xd6\x38\x7d\xcd\x37\x40\x92\x0b\x86\xfc\x0e\x3e\x38\
-\x56\x44\xce\x51\xd5\x45\x61\x89\x3c\xb2\x2e\x05\x2a\xae\x23\x6e\
-\x4c\x29\x11\xf1\xba\x5c\xae\xe1\x69\x69\x0d\x7a\x01\x22\x63\x0e\
-\xc8\x92\x40\x63\x1a\x01\x55\x96\x02\xc7\x89\x70\x0a\xce\x0a\x33\
-\xff\x13\xd2\xb1\x50\x48\x00\x00\x20\x00\x49\x44\x41\x54\xe1\x09\
-\xe0\x36\x55\x36\xd4\xec\x1e\xba\x55\x84\xbb\xe0\x7f\x6d\xa1\xcb\
-\xb9\xf0\xa4\x0b\x3e\x68\x07\x3c\x2f\x22\x83\x54\x35\xa6\xd6\xa9\
-\xf6\xf9\x7c\xeb\x22\x1d\x83\x69\xf0\xd2\x83\xc1\x60\xbc\x8d\x07\
-\x0c\x1f\xaf\xd7\xcb\xd4\xa9\x53\xb5\xb0\xb0\xf0\xbb\x48\xc7\x12\
-\x8b\x6c\x4c\xa0\x31\x8d\x88\x2a\x0b\x81\x34\xe0\x12\x9c\x99\x24\
-\xab\x44\xc8\x11\xa1\xda\x01\x4d\x22\xb8\x45\xb8\x0f\x58\x03\x47\
-\x9c\x0f\xcd\x5d\x90\x58\xb2\x5a\x49\x4b\xe0\xf1\xb0\x06\x6e\x4c\
-\xc3\x34\xaa\x65\xcb\x96\x85\xa9\xa9\xa9\x91\x8e\x23\xa6\x59\x9d\
-\xc0\xf0\xb1\x24\xd0\x98\x46\x46\x95\xa0\x2a\x4f\x03\x7d\x80\x69\
-\x38\x83\x07\x57\x8b\x70\xa3\x08\x55\x56\xbb\x55\xa5\x18\x67\xed\
-\xe2\x2d\xfb\xf7\x5e\xf8\x28\xf0\x79\x68\x63\xbc\x88\x4c\x0a\x67\
-\xdc\xc6\x34\x34\x6e\xb7\xfb\x38\x5b\x2f\xd8\x44\x33\x4b\x02\x8d\
-\x69\xa4\x54\x29\x50\xe5\x5e\xa0\x07\xf0\x08\x30\x03\x58\x29\xc2\
-\x45\x22\x55\xfe\xdb\xf0\x03\xce\xbf\x19\x2b\x9d\xcd\xb8\x5f\x80\
-\x0b\x81\xc2\xd0\xf1\xbb\x45\xa4\x47\x98\xc3\xae\x37\x7e\xbf\xff\
-\x69\xbf\xdf\x7f\x77\xa4\xe3\x30\x0d\x93\x38\x8e\x1d\x3a\x74\xa8\
-\x7d\x8e\x9a\xa8\x65\x7f\x79\x8d\x69\xe4\x54\xd9\xa5\xca\x54\xa0\
-\x37\xf0\x3a\xf0\x18\xf0\xb5\x08\xbf\xae\x70\xea\x23\x40\x11\x30\
-\x1c\x38\x0d\x58\xad\xaa\xff\x03\x6e\x0b\x1d\x6f\x06\x5c\x5f\xd5\
-\x33\x24\x4b\x6e\x91\x4c\x39\x5f\x44\x24\x0c\x6f\x21\x5c\xda\xe1\
-\xcc\x8e\x36\xa6\x2a\xfd\x03\x81\x40\x73\x1b\x0f\x18\x5e\x81\x40\
-\x80\x9c\x9c\x1c\x19\x37\x6e\x9c\xd5\x09\x0c\x03\x4b\x02\x1b\x09\
-\x99\x21\x4d\x80\x89\xce\x06\x27\xcb\x4d\xd2\x36\xb2\x11\x99\x86\
-\x46\x95\x0d\xaa\x5c\x0e\x0c\x04\xbe\x03\x16\x88\xf0\x81\x08\xc7\
-\x88\x70\x01\xf0\x5b\xe0\x7c\x55\x72\x55\x79\x45\x95\x15\xa1\x4b\
-\xef\x04\x4a\x26\x51\x54\x4c\x1c\x1d\x42\x47\x84\xa7\xc9\x62\xa9\
-\x4c\x91\x5f\x85\xf9\xad\x18\x53\x1f\x46\x26\x26\x26\x06\x7a\xf6\
-\xec\x19\xe9\x38\x62\x9a\xd5\x09\x0c\x2f\x4b\x02\x1b\x01\xc9\x94\
-\x41\x14\xf0\x35\x25\x83\xf7\x95\x3f\xe3\x61\xb9\x64\xc9\xb8\xc8\
-\x46\x66\x1a\x22\x55\xbe\x53\xe5\xb7\xc0\x51\x38\x25\x52\xde\x04\
-\x1e\x00\xee\x52\xe5\xfd\xca\xe7\x6b\x31\xf0\xef\xd0\x66\x17\x11\
-\x39\x70\xd3\x88\x32\x02\x17\x1f\x4a\x96\xfc\x5d\xa6\x49\xc7\xba\
-\x8f\xde\x98\xfa\x21\x22\xc7\x0e\x1e\x3c\x18\x97\xcb\x3e\x46\xeb\
-\x83\x88\xd8\xb2\x71\x61\x60\x7f\x7b\x63\x9c\x4c\x12\x2f\xc2\x3f\
-\x50\x2a\x7e\x5d\x6d\x85\xf0\xac\xfc\x59\xda\x47\x24\x30\xd3\xe0\
-\x85\xca\xca\x8c\xc1\x19\x03\xb8\x0a\xb8\xb5\x9a\xd3\xff\xaf\xcc\
-\xeb\xfe\x07\xb9\xb5\x00\xe7\x50\xcc\x77\x92\x25\xb7\xc8\x0c\xa9\
-\x72\x32\x4a\x03\x70\x01\x70\x63\xa4\x83\x30\x0d\x93\xc7\xe3\x19\
-\x6d\x93\x42\x4c\xb4\x13\x55\x4b\xae\x63\x99\x4c\x91\x5f\xe1\xe2\
-\xa3\x6a\x4e\xf9\x0b\xf0\x52\x7d\xc5\x63\xa2\xcc\x53\x9f\x5d\xc0\
-\xa6\xa1\x67\x33\x66\xf2\xe5\x0c\xff\xeb\x9a\x03\x9e\xb7\x84\x23\
-\xf8\x98\xb9\x00\x74\xe2\x21\xce\xe5\xf9\x72\xc7\x85\x1b\x50\x4e\
-\x3b\xc0\xd5\x6b\x80\x9b\x34\x47\x9f\x3f\xc0\x71\x63\x1a\x14\x11\
-\xe9\x04\xac\x7d\xf8\xe1\x87\xb1\x42\xd1\xe1\x77\xd2\x49\x27\x69\
-\x61\x61\xe1\xd9\x7b\xf7\xee\x7d\x2e\xd2\xb1\xc4\x1a\xfb\x16\x13\
-\xeb\x84\x83\xcd\xd6\xbc\x9e\x03\x0c\xe6\x37\x86\x93\x2f\x85\x6d\
-\x03\x60\xc0\x33\x4f\x55\x7b\xde\x10\xe0\xe3\xd0\xeb\xce\x5c\x09\
-\x5c\x59\xee\x78\xf5\xdf\x35\xbb\x02\x73\x65\xaa\xac\xd3\x6c\xad\
-\xee\x0b\x8b\x31\x0d\xc5\x48\x8f\xc7\x13\x1c\x38\x70\xa0\xf5\xa6\
-\xd5\x83\xdc\xdc\x5c\x82\xc1\xa0\xd5\x09\x0c\x03\x4b\x02\x63\xdf\
-\x37\x07\x39\x7e\x2d\xc5\xcc\xaf\x97\x48\xea\x83\x9b\xe9\x28\x67\
-\x03\x47\x13\x64\x5b\xa4\xc3\x89\x7a\xad\xbf\x74\x7e\x0e\xb6\x78\
-\xda\x42\x46\x00\x0b\x00\x58\xc6\x74\x46\xf2\x68\xb9\xe3\x1e\xee\
-\x44\x39\xaf\x8a\x2b\x0b\x51\xee\x27\x91\x99\x3a\x5d\x73\xeb\x24\
-\x66\x63\xc2\x6f\x54\xdf\xbe\x7d\x03\x5e\xaf\x37\x2e\xd2\x81\x18\
-\x53\x1b\x96\x04\xc6\x3a\xa1\x1b\x10\xa0\xaa\x3f\x6b\xe5\x47\x12\
-\x79\x42\xa7\xeb\x9e\xfa\x0e\x2b\x5c\x64\x8a\xfc\x19\x17\xbf\x46\
-\x99\xac\x77\xea\xc5\x91\x8e\xa7\xb1\x90\xbb\xa4\x59\xe9\xc6\x1e\
-\x56\xea\x9d\xba\xb1\xdc\xf1\xa9\xb2\xaf\x8a\xcb\x16\x52\xcc\xf5\
-\x7a\xa7\x7e\x1f\xee\xf8\x0e\x87\xdf\xef\x7f\x1a\xd8\xe2\xf3\xf9\
-\x6c\x5c\xa0\x29\x27\x2e\x2e\x6e\xcc\xb0\x61\xc3\x2c\x01\x34\x51\
-\xcf\x9a\xb2\x63\x94\xfc\x5e\xdc\x92\x29\x73\x80\x7f\xa3\x3c\x0f\
-\xbc\x53\xe1\x94\xe5\xc0\x6f\x62\x29\x01\x04\xd0\x39\xba\x1b\xb8\
-\x11\xe1\x42\x99\x2a\x47\x45\x3a\x9e\x46\xe4\xb8\x32\xaf\x57\x1c\
-\xf0\x2c\xc7\xb7\xc0\xc9\x9a\xa3\xa7\x36\xd4\x04\x30\xc4\xea\x04\
-\x9a\x4a\x44\xa4\x45\x51\x51\x51\x5f\x1b\x0b\x58\x3f\x4a\xea\x04\
-\x8e\x1f\x3f\xde\xea\x04\x86\x81\x25\x81\x31\x48\x6e\x96\x0e\xf4\
-\x64\x31\xc2\xd5\xc0\xc5\x3a\x5b\xcf\x66\x36\x63\x50\xd2\x50\xce\
-\x41\x38\x9a\x04\x86\xea\x6c\x5d\x16\xe9\x58\xc3\x41\x73\xf4\x59\
-\xe0\x5d\x94\x07\xe5\xf7\xe2\x8e\x74\x3c\xb1\x4e\x44\x3c\x50\x3a\
-\xe9\xe3\x67\x55\xfd\xea\x00\xa7\xee\x02\x6e\x60\x3b\x83\x35\x47\
-\x5f\xaf\x9f\xe8\x8c\xa9\x73\x47\x03\x0c\x1a\x34\x28\xd2\x71\x34\
-\x0a\x56\x27\x30\xbc\xec\x97\x1a\x63\x24\x4b\x8e\x07\x9e\x03\x76\
-\xa1\x1c\x59\x92\xe8\xa9\x33\x0d\xfc\xab\xd0\x4f\xec\x13\xae\x42\
-\xf9\x8a\x1e\x5c\x01\x3c\x18\xe9\x70\x62\x5c\x16\xd0\x21\xf4\xba\
-\xea\x99\xe6\x41\x16\xe0\xe2\x16\xcd\xd6\x2d\x55\x1e\x37\x26\x7a\
-\x8c\xea\xda\xb5\x6b\x61\x52\x52\x52\x7c\xa4\x03\x31\xa6\xb6\xac\
-\x25\x30\x46\x88\x88\x48\x96\x64\x01\x6f\x03\xef\x11\x24\x23\x56\
-\x5b\xfa\x6a\x42\xb3\x75\x39\x70\x1f\x70\x87\x4c\x95\x36\x91\x8e\
-\x27\x56\x85\x0a\x43\xdf\x12\xda\xdc\x0d\x54\xb9\xd6\xae\xce\xd6\
-\xd7\xa2\x30\x01\xb4\x3a\x81\xa6\x12\xaf\xd7\x3b\x7a\xd8\xb0\x61\
-\x96\x00\x9a\x98\x60\x2d\x81\x31\x40\xb2\xa4\x25\x99\xfc\x0d\x18\
-\x87\x70\x83\x66\xeb\xfd\x91\x8e\xa9\x41\x08\x32\x03\x17\x67\x11\
-\x64\x0e\x60\x93\x44\xea\x98\x88\x78\x81\xa7\x00\x6f\x68\xd7\x0d\
-\xaa\x7a\xe0\x5a\x82\x51\xc6\xe7\xf3\x6d\x8a\x74\x0c\xa6\x61\x11\
-\x91\x78\x97\xcb\x95\x6e\xe3\x01\xeb\x8f\xd7\xeb\x25\x2b\x2b\x4b\
-\x8b\x8a\x8a\xbe\x8b\x74\x2c\xb1\xc8\x5a\x02\xa3\x9c\x4c\x91\x0c\
-\xe0\x0b\x60\x30\x41\x8e\xb5\x04\x70\x3f\x9b\x24\x12\x3e\x22\x92\
-\x08\xf8\x81\x92\x4f\xc3\xd7\x54\xf5\xff\x45\x30\x24\x63\xea\xc3\
-\x88\x60\x30\xe8\x1d\x32\xe4\xc0\x2b\x23\x9a\xba\x97\x9b\x9b\xcb\
-\xbe\x7d\xfb\x8a\x22\x1d\x47\x2c\xb2\x24\x30\x8a\x49\xa6\xf8\x70\
-\xf1\x01\xf0\x2d\xc2\x50\x9d\xa3\x4b\x23\x1d\x53\x43\xa3\x39\xfa\
-\x2c\xca\x3b\x04\x79\xc8\x26\x89\xd4\x0d\x11\x19\x89\x33\xb6\xf4\
-\x92\xd0\xae\x1d\xc0\xa5\x91\x8b\xc8\x98\x7a\x33\xb2\x4d\x9b\x36\
-\x85\x6d\xdb\xb6\x8d\x74\x1c\xc6\xd4\x09\xeb\x0e\x8e\x42\x72\x93\
-\x34\xc5\xcb\xa3\x08\x7f\x04\x6e\x63\x36\x77\xa8\xad\xff\x77\x60\
-\x2e\xfe\x64\x93\x44\x6a\x4f\x44\xda\x00\xd3\x80\xab\x71\xd6\xff\
-\x05\x58\x0f\x9c\xab\xaa\x1b\x22\x16\x58\x98\x58\x9d\x40\x53\x91\
-\xc7\xe3\x39\x7e\xd8\xb0\x61\xde\x83\x9f\x69\x4c\x74\xb0\x24\x30\
-\xca\xc8\x14\xe9\x8f\x87\x17\x50\x5a\xe3\x62\x9c\xce\xd2\x45\xe4\
-\x1c\xc2\xf5\x22\x7d\x81\xc6\xd7\x35\x7a\x2e\x6f\xd3\x81\x3b\xa5\
-\xbd\xb8\xd9\x84\xad\x4c\x51\x33\x82\x53\x27\xaf\x13\x4e\xb7\xef\
-\x31\x40\xd9\xd6\xd4\xbf\x01\xd7\xa8\xea\xce\x08\xc4\x56\x1f\xda\
-\x71\xb0\x05\xef\x4c\xa3\x21\x22\x2e\xb7\xdb\x7d\x4c\x5a\x5a\x9a\
-\x1c\xfc\x6c\x53\x57\x02\x81\x00\xb3\x67\xcf\x96\xc5\x8b\x17\x5b\
-\x9d\xc0\x30\xb0\x24\x30\x8a\x48\x96\x9c\x85\x8b\xc7\x80\xff\x12\
-\xe4\x44\xcd\x39\xac\xd6\x97\xd1\x38\x63\xb9\x1a\x97\xf9\xc0\xe5\
-\x40\x06\xf7\xb1\x30\xd2\xc1\x44\xbd\x4d\xc0\x24\x55\x5d\x10\xe9\
-\x40\x8c\xa9\x47\x83\x8a\x8b\x8b\x9b\xda\x78\xc0\xfa\x65\x75\x02\
-\xc3\xcb\xc6\x04\x46\x01\x99\x21\x71\x92\x25\x0f\x02\xff\x40\xf1\
-\x93\xc0\x68\x9d\x13\x7b\xdd\x6f\x61\x55\x08\x2c\x02\x06\x01\x1d\
-\x23\x1c\x4b\x74\x2a\x02\xde\x00\x26\x01\xfd\x2c\x01\x34\x8d\xd0\
-\xc8\xa6\x4d\x9b\x16\x75\xeb\xd6\x2d\xd2\x71\x18\x53\x67\x2c\xb3\
-\x6e\xe0\x64\x9a\x74\xa5\x98\xe7\x81\x3e\x08\x13\x35\x47\xff\x53\
-\xcb\x5b\xbe\x0e\x9c\x51\x07\xa1\x45\x9f\x15\xc0\x58\x6e\xe7\x4c\
-\x9a\xf1\x00\x37\x52\x4c\x30\xd2\x21\x35\x70\x41\x9c\x56\xbf\x5f\
-\x80\x8d\xaa\x5a\x18\xe1\x78\xea\xdb\x05\x40\x71\xa4\x83\x30\x0d\
-\x83\xcb\xe5\x3a\x2e\x2d\x2d\xcd\x25\x62\xbd\xc1\x26\x76\x58\x12\
-\xd8\x80\x49\xa6\x9c\x82\x8b\x79\xc0\x1a\x20\x5d\xb3\xf5\x87\xda\
-\xde\x53\x55\x7f\x02\x7e\xaa\xed\x7d\xa2\x95\x4c\x95\x95\x28\x5f\
-\x72\x13\xa9\x9a\xa3\x0f\x44\x3a\x1e\xd3\x70\x59\x9d\x40\x53\x96\
-\xdb\xed\x3e\x3e\x3d\x3d\xdd\x2a\x0c\xd4\xb3\x50\x9d\x40\xac\x4e\
-\x60\x78\x58\x77\x70\x03\x24\xbf\x17\xb7\x4c\x95\x59\x08\x2f\x13\
-\xe4\x45\x12\x38\x5a\x73\x6a\x9f\x00\x9a\xd0\x4a\x22\xca\x7d\x28\
-\x33\xe5\x26\xb1\x3a\x0f\xc6\x98\x83\x12\x91\xee\x45\x45\x45\x6d\
-\x6c\x3c\x60\x64\x84\xea\x04\x06\x22\x1d\x47\x2c\x6a\x34\x49\xa0\
-\x4c\x95\x36\x72\x8d\x44\xc7\x52\x3f\x3d\x49\x47\xf9\x13\xc2\x05\
-\x3a\x5b\x2f\xd7\xe9\x9a\x1f\xe9\x90\x62\x4a\x22\x33\x10\xf6\xe1\
-\x61\x4e\xa4\x43\x31\xc6\x44\x85\x91\x5e\xaf\xb7\xb8\x5f\xbf\x7e\
-\x91\x8e\xc3\x98\x3a\x15\xb3\xdd\xc1\x22\x22\x64\x71\x29\x70\x39\
-\x4a\x5f\x20\x89\xa6\xa8\x64\xc9\xcf\x08\xcf\xa2\xdc\xa9\x39\xba\
-\x23\xac\x31\x64\xca\x55\x40\x12\xb0\x57\x67\xeb\xdc\x9a\x5e\xa7\
-\x39\xfa\xa9\xcc\x90\xae\x3a\x3d\x66\x4b\x6f\x44\x94\x4e\xd7\x3d\
-\x92\x29\x93\x11\x9e\x91\x4c\x79\x4c\x67\xeb\x87\x91\x8e\xc9\x34\
-\x3c\x56\x27\xd0\x94\x31\x6a\xe0\xc0\x81\x41\x8f\xc7\x63\xdd\xc1\
-\x26\xa6\xc4\x64\x4b\x60\x68\x2d\xdd\xf7\x51\x1e\x45\xc9\xc0\x49\
-\xc4\xc0\xa9\x7b\xd6\x15\x25\x13\x61\x40\xf8\x03\x61\x2a\x42\x0e\
-\xc2\x2d\x87\x7a\xa9\x25\x80\xe1\xa5\xb3\xf5\x39\x94\x77\x80\x07\
-\x6d\x25\x11\x73\x00\xed\x70\xea\x24\x9a\x46\x2e\x2e\x2e\x6e\x4c\
-\x7a\x7a\xba\x15\x89\x8e\x80\x50\x9d\x40\x4e\x3a\xe9\xa4\x3e\x91\
-\x8e\x25\x16\xc5\x6a\x4b\xe0\xfd\x38\x85\x6d\x01\x36\xa0\x4c\x46\
-\x58\x8a\xd0\x84\x20\xe9\xb8\xb8\xb6\xaa\x8b\x64\x92\x78\x49\xa1\
-\x2b\x45\xec\xd4\xbb\x75\x6b\x4d\x1e\x24\x53\x24\x09\x17\xad\x98\
-\xcd\x9a\xda\xae\xda\x21\x33\xa4\x09\x05\x74\xd3\x6c\x5d\x5e\xc5\
-\xfe\x4e\x14\xf3\x4b\x68\x3d\x5c\x53\x17\x9c\x95\x44\xbe\xa4\x27\
-\x3e\xc0\x26\x89\x18\x63\x2a\x11\x91\xd6\x40\xcf\xb4\xb4\xb4\x83\
-\x9e\x6b\xea\x9e\xd5\x09\x0c\xaf\x98\xfb\xa5\xca\x54\x39\x06\x38\
-\x37\xb4\x59\x80\x87\x91\x3a\x53\x7f\x2c\x73\xca\x72\xe0\xef\x32\
-\x49\xbc\x65\xae\xe9\x87\x32\x97\x14\x46\x03\x6e\xbc\x20\x59\xb2\
-\x11\xe1\xcf\x9a\xad\x7f\x2b\x3d\x2f\x53\xee\x41\xb8\xc1\xd9\xe0\
-\x37\x28\x57\xe1\xe2\x04\xc0\x45\x26\x6b\x65\xaa\xfc\x4e\xb3\xf5\
-\x63\x99\x22\x27\xe2\xe2\xcd\x32\xcf\x6c\x23\x59\x52\x92\x20\x7e\
-\xaa\x39\x3a\x42\x32\xe5\x56\x84\x19\xa1\x7d\x67\x02\xe7\x01\xa7\
-\x00\x1e\x11\x71\xa9\xaa\xca\xcd\x32\x9a\x20\x7f\xc5\xa9\x6e\x27\
-\xb8\x40\xb2\x64\x39\x8a\x4f\x67\xeb\x7b\x75\xf6\x4b\x6b\xa4\x34\
-\x5b\x97\x4b\xa6\xdc\x07\xcc\x94\x9b\x64\xbe\xde\xa5\x9b\x23\x1d\
-\x93\x31\xa6\xc1\x39\x46\x44\x74\xd0\xa0\x41\x56\x1b\xc6\xc4\x9c\
-\x98\x4b\x02\x29\xbf\x24\xda\xfc\x0a\x09\x60\x29\x7d\x44\x8b\x00\
-\xe4\x16\xe9\x8e\xf2\x29\xd0\x0c\x67\x89\xa8\x8f\x80\xde\x40\x7b\
-\x94\x79\x92\x29\x4d\x74\xb6\x3e\x52\xf9\x06\xfc\x23\x74\x4d\x21\
-\x10\x07\x74\x46\x79\x52\x66\xc8\x11\x87\x11\xf3\x03\x40\xfb\xb2\
-\x3b\x24\x53\xc6\x23\xbc\x1e\xda\x2c\x0c\xc5\x35\x02\x18\x80\xb0\
-\x44\xa6\xc8\x31\x3a\x47\x97\x1e\xc6\xb3\x4c\x59\x89\xcc\x20\x9f\
-\xb3\x43\x93\x44\x2e\xaa\x8b\x5b\xca\x0c\x69\x4e\x01\xa9\x00\xc4\
-\xb3\xb1\xa1\x76\xed\xcb\x54\xe9\x03\xb8\x50\xf2\x35\x47\x7f\x8a\
-\x74\x3c\x0d\x90\xd5\x09\x34\x00\xa3\x7a\xf6\xec\x59\x98\x98\x98\
-\x18\x1d\x13\x0b\x8d\x39\x04\xb1\x97\x04\x2a\x47\x94\x79\xfd\xed\
-\x41\xcf\x2f\xe2\x5e\x84\x66\x00\x08\xa7\x6a\xb6\xbe\x2a\x33\x24\
-\x81\x7c\x56\x02\x9d\x11\xe6\xc8\x0c\xf9\x9b\x4e\xd7\x7d\x15\xae\
-\xdc\x00\x9c\x4b\x02\x2b\xc8\xe7\x13\xa0\x3f\xd0\x9f\x22\x3a\xea\
-\x1c\x7d\x0b\x10\xc9\x92\xf5\x40\x2a\xb0\x45\x73\xb4\xba\x72\x24\
-\xcd\x51\xa6\xe3\xe5\x6f\x14\xd2\x46\x55\x55\xb2\xe4\xd1\xd0\xb1\
-\x42\xdc\xf4\xd1\x3b\x74\x4d\xa8\x70\xf4\x6a\xc0\x8d\x8b\xfb\x71\
-\x92\x42\x53\x0b\x07\x9b\x24\x22\x59\xf2\x07\x4a\x8a\x6b\x0b\x8a\
-\x92\x8f\xb0\x97\x20\xeb\x10\x3e\xd3\x1c\x7d\xbb\xd2\x4d\xf3\x38\
-\x1d\xe1\xe9\xd0\xeb\x2b\x89\xd0\x32\x7d\x72\xa3\xb4\xc6\x4d\x2f\
-\x00\x94\x9f\xf4\x4e\xdd\x58\xee\x04\xe5\x2b\x20\x01\xf8\x0a\x67\
-\x6d\x60\x53\x86\xd5\x09\x34\x00\x5e\xaf\x77\xec\xb0\x61\xc3\x2c\
-\x01\x8c\x10\xaf\xd7\x4b\x66\x66\x26\x81\x40\xc0\xea\x04\x86\x41\
-\xec\x25\x81\xce\xf2\x56\x0e\xe1\xe0\x03\x79\xa5\xb4\xe5\x30\x1f\
-\x65\x9c\x64\xc9\xb8\xd0\xf6\x9e\xd0\x7f\x93\x29\xa4\x1f\xf0\x45\
-\x85\x2b\xe7\x69\x8e\x7e\x0a\x20\x59\xf2\x7f\x38\x49\x20\x04\x49\
-\x05\xd6\x1e\x62\xcc\x2f\xeb\x6c\xbd\x3d\xf4\xfa\x47\xb9\x59\x3a\
-\x00\x5d\x42\xdb\x9b\x28\xe6\x7a\xc9\x2a\xed\x89\xd8\x09\xb4\x02\
-\x86\xca\x24\xf1\x96\xb4\x68\x9a\xc3\xa7\xb3\xf5\x39\xc9\x94\xcb\
-\x71\x26\x89\x64\xe8\x7c\xdd\xdf\xfa\x23\x0c\x46\xf9\x83\x73\x62\
-\xc9\x05\x38\x53\x8c\x00\xc9\x92\xf7\x81\x6b\x35\x47\xff\x5b\x9f\
-\x31\xd7\x48\x1c\xa7\xa0\x3c\x05\x80\x70\x3d\xf0\xd7\x88\xc6\x63\
-\x4c\x94\x11\x91\x26\x22\x32\xc8\xc6\x03\x46\x56\x6e\x6e\x2e\x80\
-\xd5\x09\x0c\x83\xd8\x4b\x02\x85\x65\x65\x3e\xac\x07\x57\x7b\xea\
-\x0c\xf1\x00\x6d\x42\x9b\x09\x50\xf5\x84\x11\x94\x2e\x54\x4c\x02\
-\x5d\xec\x6f\x31\x12\x8a\x4a\x9f\x19\xe4\xd0\x67\x9a\x0a\x0b\xcb\
-\x6d\x07\x43\x5d\x89\x8e\xce\x07\x88\xcb\x43\x1b\x52\x71\x56\x13\
-\x31\xb5\x55\x93\x49\x22\xca\x17\x08\xcb\x71\xfe\x4c\xd2\x71\x66\
-\x9d\x8f\x02\x96\xca\xcd\x32\x4c\x67\xe9\xff\x00\x28\xe6\x45\x3c\
-\xbc\x17\xba\x66\x5b\x3d\x44\x7f\x78\x94\xbe\x08\x2e\x82\x34\xb6\
-\xe5\xe0\x8c\xa9\xa9\x5f\xa9\xaa\xdb\x8a\x44\x9b\x58\x15\x7b\x49\
-\x60\x90\x77\x11\x82\x80\x0b\xe1\x74\xc9\x92\x61\x9a\xa3\x9f\x97\
-\x3d\x45\x6e\x90\x44\xe2\x88\xd3\xd9\xba\x4b\x32\x65\x0d\x42\x77\
-\x60\x2f\x70\x1c\xc2\xde\x4a\xf7\x8c\x67\x5d\xa5\x7d\xc5\x14\x94\
-\xbe\x56\x0e\x34\x2b\xb8\x64\x7f\xf5\xa5\x78\x82\x94\x9f\x89\x9c\
-\xc0\x6a\xf6\x97\x87\x5e\x81\x30\xb1\xca\xeb\xb6\xb0\xa1\xda\xfb\
-\x9a\x1a\x2b\x9d\x24\x22\x4c\x93\x6b\xe4\x31\xbd\x5f\x0b\xaa\x38\
-\xed\x45\xcd\xd1\x6c\x70\x8a\x8f\xa3\x3c\x89\x33\x99\x27\x2e\x34\
-\x1e\xf4\x48\x9d\xae\x41\x3c\x1c\x03\x4c\x05\x40\xf8\x0b\xb0\x00\
-\x40\xb2\xe4\x19\x20\x15\x65\x07\x01\x2e\xc3\xcb\xdd\x38\xb3\xd8\
-\x5f\xd7\x1c\xbd\x1a\x40\x32\x65\x24\xc2\x8d\x40\x1f\x20\x09\xe5\
-\x7b\x84\x67\x34\x47\xff\x5f\xc5\x60\x24\x4b\x4e\x02\xae\x04\x7a\
-\x01\x29\x38\x33\xe1\x97\xe8\x6c\x9d\x2c\x99\xf2\x17\x84\x93\xca\
-\x9c\xfe\x27\xc9\x92\xd3\x9d\x37\xcb\x34\x9d\xad\x1f\x20\x3c\x06\
-\xc4\x23\xac\x02\x2e\x2d\xbd\xef\x14\x49\xc2\x4d\x26\xca\xf1\x40\
-\x37\x60\x3b\xca\xb7\xb8\xc9\xd1\x59\x5a\xfa\x65\x48\x32\xe5\x6c\
-\x84\xcb\x43\xef\xf3\x66\x82\xa4\x23\x9c\x05\x74\x42\xf9\x14\x0f\
-\xd7\xe9\x1d\x7a\xa8\xad\xe2\x0d\x86\xd5\x09\x34\xc0\xc8\xf6\xed\
-\xdb\x17\xa4\xa4\xa4\x58\x77\xb0\x89\x49\x31\x57\x27\x50\x67\xeb\
-\x57\x68\x69\xb7\x97\x0b\x78\x57\xb2\x64\xba\x64\xc9\x18\x99\x2a\
-\x13\x24\x53\xa6\x11\xcf\x0f\xb8\x42\x63\x07\x85\xd7\x42\xe7\x36\
-\x05\xce\xa3\x88\xed\x9a\xad\xdf\x12\xcf\x06\x94\x41\x28\xd9\x3a\
-\x5d\xf7\x54\xf1\xa8\x83\x13\x7e\x09\xbd\x6a\x25\x59\x72\xa5\x64\
-\xc9\xf1\x92\x25\x3d\x0e\xfa\x1e\x9c\x89\x04\x25\x93\x3e\xfa\xa3\
-\x1c\x4f\x3c\xeb\x34\x5b\xbf\x05\xb6\xa1\x8c\x41\xf1\x59\x57\x70\
-\x1d\x4b\x64\x06\xc5\x1c\x73\x80\x04\xb0\x1c\xcd\xd6\x2d\x14\x70\
-\x3e\x90\xeb\xec\x20\x83\x7d\xf4\x0e\xbd\x6e\x0f\x1c\x17\xfa\xd9\
-\xdf\xaa\xab\xfc\x0a\xe7\x8b\xc6\x18\xbc\x2c\xc6\x99\x78\xd0\x0b\
-\x68\x0e\x20\x53\xe5\x46\x84\xf7\x80\xdf\xe0\x0c\x2f\x68\x87\x30\
-\x1a\x78\x4c\xb2\xa4\x74\x96\x7a\xe8\xdc\xfb\x81\xd7\x80\xd3\x4a\
-\xcf\x85\xa1\x08\x97\x38\x27\x90\x06\xec\x5f\xde\x40\xe9\x59\x1a\
-\x93\xab\xb4\xf6\xdd\xb1\xa1\x78\x32\x4a\xef\x7b\x93\xb4\xc5\xc5\
-\x72\x94\xa9\xc0\xd1\xa1\xf8\x8f\x40\x38\x93\x20\x9f\xca\x54\x39\
-\xaf\x4c\x18\x5d\x4a\xef\xa9\x3c\x82\x70\x3f\xce\xc4\xac\xce\x08\
-\x13\x29\xe6\xdf\x07\xfb\x3d\x36\x70\x56\x27\xb0\x91\xf3\x78\x3c\
-\xa3\x33\x32\x32\xe2\x22\x1d\x47\x63\x16\x08\x04\xb8\xe7\x9e\x7b\
-\x38\xf9\xe4\x93\xfb\x47\x3a\x96\x58\x14\x73\x49\x20\x00\x85\x4c\
-\x03\xfe\x1e\xda\x6a\x0a\xdc\x06\x2c\x42\x59\x88\x30\x93\xb2\x33\
-\x71\x83\x64\x02\x2b\x43\x5b\xd7\xe2\x61\xa3\x64\xc9\x56\xf2\xd9\
-\x05\xcc\xc7\xe9\xee\x3b\x5c\xaf\x96\x79\xfd\x20\xb0\x04\xb8\xa2\
-\x46\x57\x0a\x17\x01\xbb\x42\x5b\x7e\xf2\xd9\x26\x59\xb2\x0b\x65\
-\x73\xe8\x5e\xb6\x7e\x51\x1d\xd3\xe9\xba\x47\xef\xd4\xd5\x35\x3e\
-\xff\x5e\xdd\x0e\x7c\x59\xba\xc3\xcd\xa0\x1a\x5e\xda\x1c\xe8\x8e\
-\xe0\x07\xce\x06\x5e\x92\x29\xd2\x1f\x25\x1b\x67\xb4\xe1\x37\x08\
-\xfd\x49\xa0\x2d\xc2\x73\xa1\x6b\xce\x95\xa9\x72\x2a\x80\x64\xc9\
-\x09\x28\x57\x87\xf6\x6f\x41\x98\x4c\x90\xce\xb8\x18\x82\xe2\xcc\
-\x64\x57\xae\x43\x98\x5d\xfa\x44\xe1\x41\x60\x34\x30\x9a\x42\x3e\
-\x38\x60\x64\x1e\xfe\x0a\x74\x0a\x5d\x33\x1f\xe5\x08\x94\x6b\x80\
-\x3c\x9c\x99\xc4\x73\x65\xaa\xb4\xa9\xe2\xca\xee\x38\xff\x9f\x8d\
-\x06\x7e\x0a\xed\x1b\x26\x53\x25\xfc\x45\xd9\x8d\x09\x03\x11\x71\
-\xab\xea\x91\x69\x69\x69\x56\x1a\x26\x82\x54\x95\xc4\xc4\x44\x3c\
-\x1e\x4f\x6c\xe6\x2b\x11\x16\x7b\xdd\xc1\x80\xde\xab\x79\xc0\x79\
-\x92\x25\x8f\x03\x97\x00\x7d\x11\x7a\x12\x64\x17\x2e\x56\xa2\xbc\
-\x40\xbe\x33\xc6\x4f\xe7\xe8\x6e\xb9\x41\xd2\x88\xe7\x06\x9c\xae\
-\xbd\x1e\x38\xc9\xf1\x32\xe0\x73\x84\x97\x4b\x6f\x2c\xac\x06\xde\
-\x0d\x6d\xed\x2a\xb3\xff\x7b\xb4\x8a\xfd\xf1\xcc\xa2\x80\x5d\x04\
-\x39\x06\x21\xc5\x09\x8e\x92\x24\xe3\xa7\xd2\x7b\xb9\xd8\x5e\xe9\
-\x3d\x64\xeb\xb7\x32\x55\x7a\xa3\x4c\x03\x8e\x41\xe8\x8e\x52\x00\
-\x7c\x0f\xfc\x1f\xc2\xfc\xc3\xff\x0d\x99\x3a\x54\xb6\x95\x38\xe9\
-\x80\x67\x55\xa4\x4c\xd2\x1c\x7d\xa6\x64\x53\x32\xe5\x5a\x28\x9d\
-\xc8\xf4\x7f\x40\x3f\x0a\xe8\x87\xf2\xbf\x32\x57\x4d\x00\x5e\xc1\
-\x69\x29\x0c\x5d\xc8\x23\x9a\xad\xf7\x86\xb6\xd6\x01\x5f\x83\xd3\
-\x22\x2e\x53\xa5\xec\x68\xf6\x55\x9a\xa3\xef\xd4\x20\xb2\x09\xa5\
-\x11\x16\x72\x55\xa8\x68\xfa\x37\x92\x25\x27\x03\x27\x03\xc9\x38\
-\x5d\xd8\xff\xa9\x70\xdd\x0b\x9a\xa3\x33\x00\x24\x4b\x5e\x04\x26\
-\x87\xee\xd2\x05\xa7\x36\xa7\x31\xd1\x66\x68\x71\x71\x71\xa2\x8d\
-\x07\x34\xb1\x2c\x26\x93\xc0\x12\xa1\x0f\xbd\x77\x0e\x7a\x9e\x93\
-\x34\xce\x0a\xfd\x54\x77\xbf\x87\x80\x87\x2a\xed\xcf\xd6\xbf\x52\
-\xc5\xcc\x4b\x9d\xae\x85\xc0\xbd\xa1\x9f\xf2\xc7\x66\xeb\x3c\x60\
-\x5e\xb5\xcf\xcb\xd6\x2d\x1c\x68\xb2\x8a\x89\x38\x11\x11\x32\xcb\
-\xb5\xfe\xd5\x34\xd9\x09\x94\x19\x86\x10\xba\x59\xa8\x94\x8b\xe3\
-\x72\x34\x34\xd6\xae\xbc\x92\x73\xf6\xb7\x02\x17\x57\x98\x54\x54\
-\x0b\x72\xa3\xb4\xc6\x4b\x72\x68\xf3\xfb\x0a\xab\xe6\x7c\x82\x93\
-\x04\x96\x8d\xa3\xcc\xc5\x2c\x2e\xb3\xb5\xbf\x9c\x92\x12\xcd\x63\
-\xa9\xac\x4e\x60\xe3\x36\xb2\x79\xf3\xe6\x85\x9d\x3b\x77\xb6\xee\
-\x60\x13\xb3\x62\x3a\x09\x34\x26\xac\xa6\x70\x0d\xce\x4c\x61\x80\
-\x5c\x8a\xca\xb5\xda\x55\x67\xbb\xe6\xe8\x8e\x72\x7b\x94\x5f\xd8\
-\xdf\xe9\xf4\x34\xfb\xc7\x84\x96\x55\x32\x11\x68\xff\x44\x25\x17\
-\x19\x07\x38\xf7\xd0\xfd\xcc\x0e\x7a\x52\x00\xc4\x03\x5d\xe5\x06\
-\x49\x0c\x7d\x41\x02\x67\xa2\xca\xfe\x58\x2b\x0a\xb2\xb3\xdc\x56\
-\x0c\xb0\x3a\x81\x8d\x9b\xcb\xe5\x3a\x2e\x3d\x3d\xdd\xd6\x15\x8f\
-\x30\xaf\xd7\xcb\xe4\xc9\x93\x09\x06\x83\x2b\x22\x1d\x4b\x2c\xb2\
-\x3e\x76\x63\x6a\x4a\xe8\x2d\x99\x72\x8a\x64\xc9\x15\x92\x29\xff\
-\x46\xca\xb4\xfe\x0a\x37\xe8\x5d\x5a\x79\x66\x79\xcd\xef\xfd\x49\
-\x99\xad\x1e\x6c\xe7\x71\xcd\xd1\x87\x35\x47\x1f\x66\x35\x8f\x01\
-\x5b\x28\x66\x63\xe8\xdc\xb2\x05\xad\x2f\x93\x4c\x29\x6d\x8d\x94\
-\x29\x72\x62\xe9\x91\x60\x99\x61\x06\xca\x30\xb9\x49\x9a\x56\x17\
-\x42\xa8\x3e\x62\xc9\xec\xdf\x78\xe2\xb8\x5c\x66\x88\x2b\x34\xae\
-\x6f\x4c\xe9\x5d\x85\xcf\xab\xbe\x83\x31\xb1\xc3\xe5\x72\x1d\x37\
-\x74\xe8\x50\x4b\x02\x1b\x80\xbc\xbc\x3c\x0a\x0a\x0a\xac\x55\x3e\
-\x0c\x2c\x09\x34\xa6\xe6\x2e\x44\x78\x05\xf0\x23\x9c\x1e\xda\x97\
-\x0f\xcc\xd4\x6c\x7d\xbc\x36\x37\xd6\x1c\x7d\x1b\xe5\x85\xd0\xe6\
-\x28\x52\xd8\x22\x59\xb2\x40\x32\x65\x31\x3d\xd9\x00\xbc\x80\x8b\
-\x9e\x00\xac\xe2\x09\xe0\xe3\xd0\xb9\x83\x11\xbe\x96\x2c\xf9\x5e\
-\xb2\x64\x0b\x2e\x9e\xdf\x7f\x53\xfe\xcb\xfe\xe2\xe9\xe7\xe2\x61\
-\x8f\x64\x89\xca\x0c\x69\x71\xc0\x40\x5c\xfc\x89\x92\xa2\xac\xc2\
-\x5f\xc9\x67\x7d\x68\x5c\x62\xbb\xd0\x19\xf7\x85\x66\xa9\x1b\x13\
-\xb3\x44\xa4\x4f\x20\x10\x68\x69\x45\xa2\x4d\xac\xb3\x24\xd0\x98\
-\x9a\x53\x60\x0b\xb0\x0c\xe1\xad\xd0\xec\xde\xfe\x9a\xa3\xb7\xd6\
-\xc9\xdd\x0b\x39\x1f\xb8\x15\xa7\xec\x4c\x32\xf0\xeb\x50\x89\x98\
-\x24\xe0\x35\x5c\x7c\x03\xa5\x2d\x76\x27\x03\xf7\x41\x69\x45\xc9\
-\x5e\x38\xe5\x4c\x4a\x8b\x87\xeb\x1c\x5d\x87\x70\x19\xb0\x0a\x6a\
-\x56\x10\x5a\x67\xe9\x17\x08\x23\xa1\xb4\xb5\xaf\x3d\xce\x8c\xe5\
-\x5c\x84\xc9\xac\xe6\xa6\xda\xbd\xc9\xe8\xe1\xf7\xfb\x9f\xf6\xfb\
-\xfd\x77\x47\x3a\x0e\x13\x11\x23\xe3\xe3\xe3\x03\xbd\x7b\xf7\x8e\
-\x74\x1c\xc6\x84\x95\xa8\x1e\xa8\xce\xb1\x31\x26\x12\x44\x44\x98\
-\x4a\x7b\x9c\x3a\x81\xdb\xd8\xc2\xc6\x03\xd5\x84\x94\x19\xe2\x22\
-\x8f\x4e\xb8\x49\xa1\x90\x0d\x7a\x97\x6e\xae\xb3\x38\xa6\x48\x12\
-\x42\x37\x3c\x6c\x67\x16\x1b\xb4\x91\xfd\x63\xe1\xf7\xfb\x5f\x07\
-\x36\xfa\x7c\xbe\x0b\x23\x1d\x8b\xa9\x5f\x22\xf2\x64\x46\x46\xc6\
-\x39\x0f\x3c\xf0\xc0\xc1\x97\x1e\x35\x61\x15\x08\x04\xf8\xf8\xe3\
-\x8f\x59\xb4\x68\xd1\xcd\x0b\x17\x2e\xcc\x8e\x74\x3c\xb1\xc6\x26\
-\x86\x18\xd3\xc0\x84\x92\xad\x5f\x42\x3f\xd5\x9f\x3b\x5d\x83\xc0\
-\xcf\xa1\x9f\xba\x8d\x63\x8e\xee\xc6\x29\x95\x04\x77\xd4\xf5\xdd\
-\x8d\x69\xb8\xbc\x5e\xef\xd8\xf4\xf4\x74\x4b\x00\x1b\x80\x92\x3a\
-\x81\x6e\xb7\xdb\xc6\x67\x86\x81\x25\x81\xc6\x18\x63\x4c\x88\x88\
-\xb4\x07\x3a\xdb\x78\x40\xd3\x18\x58\x12\x68\x8c\x31\x55\xb3\x3a\
-\x81\x8d\xd3\x28\xb7\xdb\x1d\x1c\x38\x70\xa0\x8d\x99\x6f\x00\x1a\
-\xd9\x28\x94\x7a\x67\x49\xa0\x31\xc6\x54\xc1\xea\x04\x36\x5a\x23\
-\x7b\xf7\xee\x1d\x88\x8f\x8f\xb7\x22\xd1\x0d\x80\xd5\x09\x0c\x2f\
-\x4b\x02\x8d\x31\xc6\x98\x90\xb8\xb8\xb8\xb1\xc3\x86\x0d\xb3\x04\
-\xb0\x01\xc9\xcb\xcb\x83\x92\xd2\x55\xa6\x4e\x59\x12\x68\x8c\x31\
-\xc6\x00\x22\x92\x24\x22\xfd\x6d\x3c\xa0\x69\x2c\x6c\xcc\x83\x31\
-\xc6\x54\xc1\xea\x04\x36\x4a\x47\xab\xaa\x6b\xf0\xe0\xc1\x91\x8e\
-\xc3\x98\x7a\x61\x49\xa0\x31\xc6\x54\xad\x1d\x4e\x01\x6e\xd3\x78\
-\x8c\xec\xd4\xa9\x53\x41\x72\x72\x72\xa4\xe3\x30\x21\x81\x40\x80\
-\x7b\xee\xb9\x87\x09\x13\x26\xf4\x8f\x74\x2c\xb1\xc8\x92\x40\x63\
-\x8c\x31\x06\xf0\x7a\xbd\xa3\x33\x32\x32\xe2\x23\x1d\x87\xd9\xcf\
-\xea\x04\x86\x97\x8d\x09\x34\xc6\x18\xd3\xe8\x89\x48\x9c\xcb\xe5\
-\x1a\x6e\xe3\x01\x4d\x63\x62\x49\xa0\x31\xc6\x54\xcd\xea\x04\x36\
-\x2e\xc3\x82\xc1\x60\xdc\x90\x21\x43\x22\x1d\x87\x29\xc3\xea\x04\
-\x86\x97\xad\x1d\x6c\x8c\x31\xa6\xd1\x13\x91\x9b\x5a\xb6\x6c\x79\
-\xc7\x6b\xaf\xbd\x16\x35\xe5\x61\x76\xef\xf6\xb0\x7d\xbb\x87\xae\
-\x5d\xf3\x23\x1d\x4a\xd8\x04\x83\x41\xc6\x8e\x1d\x4b\x30\x18\x3c\
-\x33\x3f\x3f\xff\xc5\x48\xc7\x13\x6b\x6c\x4c\xa0\x31\xc6\x98\x46\
-\xcf\xed\x76\x1f\x9f\x91\x91\x51\xab\xde\xb1\xc7\x1f\xef\xc8\xb4\
-\x69\xbd\xf8\xf6\xdb\xa6\x75\x15\x56\xb5\x5e\x79\xa5\x0d\x67\x9d\
-\x15\xfb\x2d\x97\x79\x79\x79\x14\x14\x14\x58\xab\x7c\x18\x58\x77\
-\xb0\x31\xc6\x98\x46\x4d\x44\xc4\xe3\xf1\x8c\x4c\x4b\x4b\x3b\xec\
-\x86\x91\x1d\x3b\xbc\x3c\xf1\x44\x47\x8a\x8b\x85\xf8\xf8\x20\xb7\
-\xdc\xf2\x43\x5d\x86\x68\x4c\x58\x58\x4b\xa0\x31\xc6\x54\xc1\xef\
-\xf7\x3f\xe3\xf7\xfb\xef\x8b\x74\x1c\xa6\x5e\x0c\x08\x04\x02\xcd\
-\x6b\x33\x29\xe4\xb5\xd7\x5a\x23\x02\x67\x9e\xb9\x89\xc5\x8b\x5b\
-\x91\x97\x67\x93\x59\x4d\xc3\x67\x2d\x81\xc6\x18\x53\xb5\x14\xa0\
-\x30\xd2\x41\x98\x7a\x31\x2a\x31\x31\x31\xd0\xbd\x7b\xf7\xc3\xfe\
-\x4c\x7c\xe5\x95\x36\x8c\x1c\xb9\x93\xb3\xcf\xfe\x85\x17\x5f\x6c\
-\xc7\xdb\x6f\xa7\x70\xda\x69\x5b\xca\x9d\x93\x9d\xdd\x83\xf6\xed\
-\x0b\x48\x4b\xdb\xcd\xbc\x79\x1d\xf8\xe1\x87\x26\x74\xec\x58\xc0\
-\xd5\x57\xff\xcc\x80\x01\x7b\xca\x9d\xbb\x64\x49\x0a\xcf\x3c\xd3\
-\x9e\x2d\x5b\xe2\xe9\xd7\x6f\x2f\x93\x26\xad\xe5\xe9\xa7\x53\xe9\
-\xd7\x6f\x2f\x7f\xfc\xe3\xc6\x6a\x63\x79\xf3\xcd\x56\xbc\xfc\x72\
-\x1b\xd6\xac\x49\xa4\x75\xeb\x42\x46\x8f\xde\xce\x39\xe7\x6c\xc4\
-\xe5\x8a\xbe\x39\x00\x25\x75\x02\x17\x2f\x5e\xdc\x2f\xd2\xb1\xc4\
-\x22\x6b\x09\x34\xc6\x18\xd3\xa8\x89\xc8\xa8\xb4\xb4\x34\x5c\xae\
-\xc3\xfb\x48\x5c\xbe\xbc\x29\x3f\xfc\x90\xc8\x84\x09\x5b\x48\x4d\
-\x75\x92\xbc\x97\x5f\x6e\x53\xe5\x79\x6f\xbc\xd1\x8a\x19\x33\x7a\
-\xd2\xb3\x67\x1e\x67\x9d\xf5\x0b\x9b\x36\xc5\x71\xcd\x35\xfd\xc8\
-\xcd\xdd\x9f\x7f\xbe\xf3\x4e\x0a\x53\xa7\xf6\xa6\xa0\xc0\xcd\xc5\
-\x17\xaf\x23\x29\x29\xc0\xf5\xd7\xf7\xe3\xa3\x8f\x5a\xf0\xf3\xcf\
-\x09\xd5\xc6\x32\x77\x6e\x17\x66\xce\xec\x41\x52\x52\x31\x57\x5d\
-\xf5\x33\x7d\xfa\xec\xe3\xf1\xc7\x3b\x91\x9d\xdd\xfd\xb0\xde\x5b\
-\xa4\x59\x9d\xc0\xf0\xb2\x96\x40\x63\x8c\x31\x8d\x9a\xc7\xe3\x19\
-\x33\x74\xe8\xd0\x5a\xb4\x02\xb6\xa5\x45\x8b\x22\x8e\x3e\x7a\x27\
-\x00\xa7\x9c\xb2\x85\x3b\xee\xe8\xc1\xcf\x3f\x27\xd0\xa5\x4b\xf9\
-\x99\xbb\x6b\xd6\x24\xf2\xcf\x7f\x7e\x4d\xd7\xae\x79\x00\xf4\xed\
-\xbb\x8f\x2b\xaf\xec\xcf\x7b\xef\xb5\xe4\xd4\x53\x9d\x96\xc3\x07\
-\x1f\xec\x4c\x9f\x3e\x7b\x79\xfa\xe9\xff\x01\xf0\xeb\x5f\x6f\xe1\
-\x83\x0f\x5a\x72\xe3\x8d\x7d\xaa\x8d\xe3\xfb\xef\x9b\xf0\xec\xb3\
-\x1d\xb8\xf8\xe2\xf5\x5c\x7a\xe9\x3a\x00\xc6\x8f\xdf\x46\xb7\x6e\
-\x79\xdc\x77\x5f\x57\xce\x3b\x6f\x43\x4c\xcf\x24\x36\x87\xce\x5a\
-\x02\x8d\x31\xa6\x6a\x67\x01\xd7\x46\x3a\x08\x13\x5e\x22\xd2\xb9\
-\xa8\xa8\xa8\xfd\xe1\x8e\x07\x2c\x2c\x74\xf1\xd6\x5b\xad\x18\x3f\
-\x7e\x1b\x1e\x8f\xd3\xdd\x3a\x66\xcc\x76\x12\x12\x82\xbc\xf2\x4a\
-\xe5\xd6\xc0\xee\xdd\xf3\x4a\x13\x40\x80\x41\x83\x76\x13\x17\x17\
-\x64\xd3\x26\xa7\x32\xcd\xce\x9d\x5e\xd6\xae\x4d\x60\xf8\xf0\xdc\
-\x72\xd7\x1d\x73\xcc\x0e\xe2\xe3\x83\xd5\xc6\xf2\xc9\x27\xc9\xa8\
-\xc2\xd0\xa1\xb9\xac\x59\x93\x58\xfa\xd3\xb7\xef\x5e\x00\x96\x2f\
-\x6f\x76\x58\xef\xd1\xc4\x2e\x6b\x09\x34\xc6\x98\x2a\xf8\x7c\xbe\
-\x1d\x91\x8e\xc1\xd4\x8b\x51\x1e\x8f\x27\xd8\xbf\x7f\xff\xc3\x6a\
-\x14\x59\xb2\xa4\x25\xbb\x77\xbb\x69\xd9\x32\xc0\xbb\xef\xb6\x2c\
-\xdd\xdf\xa3\x47\x1e\xaf\xbe\xda\x9a\x2b\xae\x58\x57\x6e\x2c\x5e\
-\xef\xde\xfb\xca\x5d\xef\xf5\x2a\x4d\x9b\x16\x53\x58\xe8\x3c\x7e\
-\xf3\x66\x2f\x00\xfd\xfb\xef\x2d\x77\x9e\x08\xb4\x6c\x59\x54\x6d\
-\x2c\xeb\xd7\x3b\x2b\xde\x5d\x77\x5d\xdf\x4a\xc7\x3c\x9e\x20\x5b\
-\xb6\x44\x4d\x09\xc4\x52\x5e\xaf\x97\xc9\x93\x27\x13\x0c\x06\x57\
-\x44\x3a\x96\x58\x64\x49\xa0\x31\xc6\x98\xc6\x6c\x64\xbf\x7e\xfd\
-\x02\x5e\xaf\xf7\xb0\x32\xa4\x92\xd6\xbe\x87\x1f\xee\x54\xe5\xf1\
-\xa5\x4b\x93\x4b\xbb\x89\x6b\xa2\x75\x6b\x27\xd1\x5b\xb9\xb2\x09\
-\x63\xc7\x6e\x2b\x77\x6c\xe7\x4e\x6f\xb5\xd7\xa6\xa4\x04\x88\x8b\
-\x0b\xb2\x78\xf1\x67\xb8\xdd\xd1\x37\x09\xe4\x40\xf2\xf2\xf2\xc0\
-\x56\xef\x09\x0b\xeb\x0e\x36\xc6\x18\xd3\x68\xc5\xc5\xc5\x8d\x1d\
-\x36\x6c\x58\xdc\xf6\xed\x5e\x0e\x75\x01\xad\x8d\x1b\xe3\xf9\xec\
-\xb3\x64\x7c\xbe\xb5\x2c\x5d\xfa\x71\xb9\x9f\x0f\x3f\xfc\x84\x94\
-\x94\xa2\x2a\xbb\x84\xab\x93\x92\x52\x44\x6a\x6a\x01\x9f\x7e\x9a\
-\x5c\x6e\xff\xd2\xa5\xc9\xe4\xe7\x57\xff\x91\x3d\x70\xe0\x1e\x0a\
-\x0a\x5c\x7c\xf8\x61\x8b\x43\x7b\x23\xa6\xd1\xb2\x96\x40\x63\x8c\
-\xa9\x82\xdf\xef\x7f\x06\xd8\xe2\xf3\xf9\x6c\x5c\x60\x8c\x12\x91\
-\x96\x40\xef\xb4\xb4\x34\x26\x4f\xee\x4b\x6e\xae\x87\x93\x4e\xda\
-\xca\x84\x09\x5b\xe9\xd8\xf1\xe0\x13\x28\x16\x2e\x6c\x0d\xc0\xb8\
-\x71\xdb\x2a\x1d\x73\xb9\x94\x13\x4f\xdc\xc6\xbf\xfe\xd5\x8e\x5d\
-\xbb\x3c\x24\x27\x07\x6a\x1c\xd7\xa4\x49\xeb\x98\x3e\xbd\x27\x97\
-\x5d\x36\x80\xb3\xce\xda\xc8\x97\x5f\x26\xb1\x64\x49\x0a\x49\x49\
-\xd5\xdf\xe3\xa8\xa3\x76\x32\x62\xc4\x2e\x72\x72\xba\x53\x58\x28\
-\x0c\x1f\x9e\x8b\xcb\xa5\xac\x5b\x97\xc0\x1b\x6f\xb4\xe2\x8f\x7f\
-\xdc\x48\xbb\x76\x56\xf5\xc8\xec\x67\x2d\x81\xc6\x18\x53\xb5\x14\
-\x20\xf9\xa0\x67\x99\x68\x76\x8c\x88\x30\x68\xd0\x20\x6e\xb9\x65\
-\x35\x63\xc6\x6c\xe7\xa5\x97\xda\xf0\xdb\xdf\x0e\xe1\xf2\xcb\x07\
-\xf0\x9f\xff\xb4\x65\xf7\xee\xaa\x2b\x93\xa8\xc2\xc2\x85\x6d\x18\
-\x34\x68\x37\x1d\x3a\x14\x54\x79\xce\xf8\xf1\xdb\x28\x2a\x12\xde\
-\x78\xa3\xf5\x21\x05\x35\x7e\xfc\x56\xa6\x4f\x5f\x4d\x7e\xbe\x9b\
-\xec\xec\x1e\xac\x5e\xdd\x84\x3b\xef\x5c\x49\x62\x62\x90\xe6\xcd\
-\xab\xef\x15\xcd\xc9\xf9\x9e\xe3\x8e\xdb\xc1\x2d\xb7\xf4\x62\xdc\
-\xb8\x61\x9c\x70\x42\x06\x17\x5f\x7c\x04\xdf\x7c\xd3\x8c\xb8\xb8\
-\xe8\xeb\x22\x2e\xa9\x13\x78\xca\x29\xa7\xf4\x8f\x74\x2c\xb1\x48\
-\xf4\x50\xdb\xbf\x8d\x31\xa6\x11\xf0\xfb\xfd\xaf\x03\x1b\x7d\x3e\
-\xdf\x85\x91\x8e\xc5\x84\x87\x88\xcc\xee\xd6\xad\xdb\x75\xcf\x3d\
-\xf7\x5c\x7c\xc9\xbe\x60\x10\x3e\xff\xbc\x39\xaf\xbd\xd6\x86\x25\
-\x4b\x5a\x12\x08\x08\x63\xc7\x6e\x67\xfa\xf4\xd5\x88\x44\x2e\xd6\
-\x9d\x3b\xbd\x4c\x98\x90\xce\x8d\x37\xfe\xc8\xc4\x89\x9b\x0f\x7a\
-\x7e\x51\x91\xb0\x61\x43\x02\xaa\xd0\xa6\x4d\x21\x4d\x9b\x46\xe7\
-\x90\xba\x82\x82\x02\xbe\xf9\xe6\x1b\x5e\x7f\xfd\xf5\x69\x0b\x16\
-\x2c\x98\x15\xe9\x78\x62\x8d\x75\x07\x1b\x63\x8c\x69\x94\xbc\x5e\
-\xef\x98\x8c\x8c\x8c\xf8\xb2\xfb\x5c\x2e\x18\x3e\x3c\x97\xe1\xc3\
-\x73\xb9\xe9\x26\x17\xef\xbe\x9b\xc2\xee\xdd\x9e\x7a\x4d\x00\x77\
-\xee\xf4\xf0\xfd\xf7\x4d\x19\x36\x6c\x17\x2e\x17\xe4\xe6\x7a\xb8\
-\xe3\x8e\xee\x34\x69\x52\xcc\x98\x31\xdb\x6b\x74\x0f\xaf\x57\xcb\
-\x95\xa2\x31\xa6\x2a\x96\x04\x1a\x63\x4c\xd5\xce\x02\xaa\x2f\xcc\
-\x66\xa2\x96\x88\x24\xb8\x5c\xae\xa1\xd5\xd5\x07\x4c\x4c\x0c\x72\
-\xd2\x49\x5b\x4b\xb7\xf3\xf2\xdc\xdc\x74\x53\x1f\x2e\xb8\x60\x7d\
-\xa5\x3a\x7e\x75\x69\xf7\x6e\x0f\xd7\x5e\xdb\x17\xb7\x5b\x49\x4a\
-\x2a\x66\xc7\x0e\x2f\xad\x5a\x15\x71\xc7\x1d\xdf\xd3\xa2\x45\xcd\
-\xc7\x16\xc6\x18\xeb\xb6\x0c\x03\xeb\x0e\x36\xc6\x18\xd3\xe8\x88\
-\xc8\xb1\xc0\xbb\x2f\xbf\xfc\x32\x6d\xda\xd4\x6c\x06\xef\xce\x9d\
-\x5e\x66\xcf\xee\xc6\x3b\xef\xa4\x30\x6e\xdc\x36\xae\xb9\x66\x4d\
-\x69\x49\x97\xba\xb6\x67\x8f\x9b\x55\xab\x9a\x90\x97\xe7\xa6\x4d\
-\x9b\x42\x3a\x77\xce\x3f\x68\xb1\xe8\x58\x54\x5c\x5c\xcc\x09\x27\
-\x9c\x40\x30\x18\x9c\x98\x9f\x9f\xff\xef\x48\xc7\x13\x6b\x6c\x62\
-\x88\x31\xc6\x98\xc6\x68\x54\x9b\x36\x6d\x0a\x6a\x9a\x00\x02\xb4\
-\x68\x51\xc4\xec\xd9\xdf\x73\xf7\xdd\xdf\xf1\xf5\xd7\xcd\xf8\xc3\
-\x1f\x86\xb0\x74\x69\x78\xe6\x0e\x35\x6b\x56\x4c\x5a\xda\x6e\x8e\
-\x3a\x6a\x27\xbd\x7a\xed\x6b\x94\x09\x60\x89\xbc\xbc\x3c\x0a\x0a\
-\x0a\xa2\x73\x50\x63\x03\x67\x49\xa0\x31\xc6\x98\x46\xc7\xed\x76\
-\x1f\x97\x91\x91\x71\x58\x05\xa2\x47\x8e\xdc\xc9\x73\xcf\x7d\xcd\
-\xb1\xc7\xee\xe0\xc6\x1b\xfb\xf2\xd6\x5b\xad\xea\x3a\x3c\x63\xea\
-\x85\x8d\x09\x34\xc6\x98\x2a\x58\x9d\xc0\xd8\x25\x22\x2e\xb7\xdb\
-\x7d\x4c\x5a\x5a\xda\x61\x4f\xf7\x48\x48\x08\x72\xeb\xad\xab\x69\
-\xde\x3c\xc0\xf4\xe9\xbd\xd8\xbb\xd7\xcd\xe9\xa7\x1f\x7c\xd6\xae\
-\x31\x0d\x89\x25\x81\xc6\x18\x53\xb5\x14\xc0\x2a\xeb\xc6\xa6\xc1\
-\xc5\xc5\xc5\x4d\xaa\x9b\x14\x52\x13\x22\x70\xfd\xf5\x6b\x68\xd1\
-\x22\x40\x6a\x6a\xd5\xb5\x02\x4d\xed\x94\xd4\x09\x5c\xbc\x78\xf1\
-\x00\xe0\xa5\x48\xc7\x13\x6b\x2c\x09\x34\xc6\x18\xd3\xd8\x8c\x6a\
-\xd6\xac\x59\x51\xd7\xae\x5d\xab\x5f\x8c\xb7\x86\x2e\xba\x68\x7d\
-\xe9\xeb\xed\xdb\xbd\xb4\x6c\x59\x14\xd1\x9a\x82\xb1\x26\x31\x31\
-\x11\xb7\xdb\x6d\xc3\xd7\xc2\xc0\x92\x40\x63\x8c\x89\x02\x32\x45\
-\x46\xe0\x22\x3d\xb4\x99\xaf\x39\xfa\x54\xb9\xe3\x59\x72\x21\x90\
-\x80\x90\xa7\xd9\xfa\x74\x7d\xc7\x57\xd7\x24\x4b\xde\x07\x7a\x03\
-\xbb\x34\x47\xfb\xd6\xe5\xbd\x5d\x2e\xd7\xa8\xa1\x43\x87\xd6\x79\
-\x52\x11\x0c\x0a\x3e\xdf\x00\x46\x8f\xde\xce\x15\x57\xac\xad\xeb\
-\xdb\x1b\x53\xe7\x2c\x09\x34\xc6\x98\xaa\x35\xac\x3a\x81\x6e\x7e\
-\x83\x32\xb5\x64\x53\x32\x65\x9b\xce\xd6\x97\x4b\x8f\x0b\xf7\xa0\
-\xa4\xa0\x6c\x01\xa2\x3e\x09\x04\xda\x00\xed\x50\xe2\x0f\x7a\xe6\
-\x21\x72\xb9\x5c\xa3\x87\x0e\x1d\x5a\xf5\x7a\x70\xb5\xba\xaf\x72\
-\xde\x79\x1b\x98\x35\xab\x07\xe9\xe9\xb9\x8c\x18\xb1\xab\xae\x1f\
-\xd1\xe8\x58\x19\xbb\xf0\xb2\x24\xd0\x18\x63\xaa\xe0\xf3\xf9\x76\
-\x44\x3a\x86\x6a\x09\xd9\x32\x43\x16\xea\x74\x6d\x38\x89\x6a\x14\
-\x10\x91\x1e\x40\xeb\xda\x8e\x07\x3c\x90\x53\x4f\xdd\xc2\xc7\x1f\
-\x27\x73\xdb\x6d\x3d\xf9\xdb\xdf\x96\xd1\xaa\x55\x78\xea\x08\x36\
-\x16\x1e\x8f\x87\xc9\x93\x27\x13\x0c\x06\x57\x44\x3a\x96\x58\x64\
-\x49\xa0\x31\xc6\x44\xa7\x23\x28\xe0\x1c\xe0\x6f\x07\x3b\x51\x6e\
-\x96\x23\x08\x72\x06\xd0\x13\x28\x02\x56\xe1\xe6\x19\xbd\x43\x4b\
-\xfb\x2c\x65\x9a\x74\xa5\x98\x8b\x42\x9b\x1f\xa0\xac\x04\xce\x46\
-\x48\x23\xc8\x0c\x84\x38\x84\x33\x00\x08\xf2\x3a\x42\x1e\xc2\x59\
-\x40\x53\x94\x57\x74\xb6\xbe\x21\x33\x24\x81\x7c\xce\x07\x8e\x46\
-\xd9\x82\xf0\x88\xe6\xe8\xaa\xd2\x67\x64\xca\x40\x84\x93\x50\xfa\
-\x22\x34\x0f\xc5\xb2\x1e\x17\x6f\xe8\x2c\x5d\x52\xd3\x37\x1e\xea\
-\x1a\x9f\x00\xf4\x40\xd8\x43\x90\x6f\x28\xe4\x09\xbd\x57\x6b\xb2\
-\x4e\xda\x28\xaf\xd7\x5b\xdc\xb7\x6f\xdf\x3a\x6f\x09\x2c\x91\x99\
-\xf9\x23\xe7\x9f\x3f\x88\xdb\x6e\xeb\xc9\x7d\xf7\x7d\x8b\xcb\x46\
-\xb3\xd5\x4a\x5e\x5e\x1e\x80\xd5\x09\x0c\x03\x4b\x02\x8d\x31\x26\
-\xfa\xac\x04\xfa\xa0\xdc\x2e\x33\xe4\x9f\x3a\x5d\x0f\x38\x8b\x59\
-\xa6\xca\x0c\x94\x9b\x81\xf2\x49\x4f\x31\xb7\xc8\x54\xf1\x69\xb6\
-\x3a\x49\x64\x80\xae\x08\xd3\x43\x47\x5f\x44\x38\x12\xe8\x04\x80\
-\x87\x47\x50\xba\xa0\xa1\xe3\x2e\x86\x03\xa3\x81\x44\xe7\x21\xfc\
-\x49\xa6\xca\xe5\xc0\xef\x80\x13\x43\xfb\x00\xae\x90\x69\x32\xa0\
-\x4c\xb2\x79\x29\x70\x1d\x15\x27\x4d\x04\x99\x22\x59\xf2\xa8\xe6\
-\xe8\xa4\x83\xbd\x71\xc9\x92\xfb\x70\x71\x75\xe9\x13\x34\xf4\x2a\
-\x9e\xeb\x64\xaa\x9c\xa2\xd9\xba\xf2\x20\xb7\x18\x79\xc4\x11\x47\
-\x04\xdd\x6e\x77\xd8\x92\xc0\xa6\x4d\x8b\x99\x39\x73\x15\x97\x5f\
-\x3e\x80\x79\xf3\x52\xb9\xf0\xc2\x0d\xe1\x7a\x54\x63\x62\xfd\xc2\
-\x61\x60\xdf\x4f\x8c\x31\xa6\x0a\x7e\xbf\xff\x19\xbf\xdf\x7f\x5f\
-\xa4\xe3\xa8\x92\x70\x37\xb0\x0b\xe8\x46\x1e\x07\x4c\x9c\x24\x53\
-\xc6\xa3\xdc\x8a\x93\x00\x6e\x43\xb9\x05\xb8\x1f\xc8\xc7\x69\xc1\
-\x7b\x44\xb2\xa4\x57\x15\x97\xfe\x16\xe8\x00\xbc\x84\xf0\x1c\x01\
-\xf6\x56\x38\x3e\x01\xe5\x43\x84\x07\x29\x19\x37\xa9\x3c\x8a\x32\
-\x0a\x61\x2e\xf0\x51\xe8\xbc\x66\x04\xb9\xa2\xf4\x2a\x17\x3f\x86\
-\x62\x18\x0f\xa4\xa3\xfc\x01\xf8\x3a\x74\xf4\x72\xc9\x94\xa3\xab\
-\x7d\xdb\x53\xe5\x02\xe0\x1a\x40\x50\x16\xa1\x4c\x40\xb8\x36\xf4\
-\x7e\x7a\xa1\x3c\x21\x52\xfd\xbc\x5c\xaf\xd7\x3b\x36\x3d\x3d\xbd\
-\x4e\x66\x05\x57\x67\xc0\x80\x3d\x4c\x9a\xb4\x8e\xc7\x1e\xeb\xc4\
-\xd7\x5f\x27\x85\xfb\x71\xc6\x1c\x16\x4b\x02\x8d\x31\xa6\x6a\x29\
-\x40\x78\xd6\x04\xab\xbd\x6d\xc0\x5d\x00\x08\xd3\x64\x86\x34\xab\
-\xf2\x2c\xe1\xb2\xd2\xd7\xfa\xff\xd9\x3b\xef\xf0\xa8\xaa\xad\x0f\
-\xbf\x6b\x32\x09\x10\x8a\xa0\x08\x41\x41\x9a\x20\x22\x88\x80\xbd\
-\x62\xd7\x6b\x47\x2c\x28\x28\xea\xb5\x60\xef\x3a\xf6\xca\x60\xef\
-\x46\xc4\x8a\xa0\xa8\x28\x5c\xaf\xd7\x4f\xbd\x82\x08\xe8\x45\x25\
-\x40\xa8\x52\xa5\xd7\x00\xa1\x27\x99\x4c\xd6\xf7\xc7\x3e\x93\x39\
-\x99\xcc\xa4\x31\x93\xba\xdf\xe7\x99\x27\x33\xfb\xec\x36\x69\xb3\
-\xce\xda\x6b\xfd\x16\x77\xeb\x50\x7d\x46\xfd\x7a\x07\xf0\x96\xd3\
-\xda\x00\xb8\x32\xca\xc8\x20\xd0\x59\xfd\x7a\x81\x0e\xd1\xfe\xfa\
-\x9c\xfe\x11\x71\x7d\xaa\x0e\xd5\xd3\x74\x88\xde\x0a\xac\x70\xad\
-\xe7\xd3\x21\x7a\x3b\x05\xdc\x59\xd8\x56\x40\xe7\xc2\x2d\x0c\xd1\
-\xd7\x69\xc0\x50\x60\x23\x42\x2b\x04\x41\x98\xec\x9a\xb7\x77\x89\
-\xef\x5a\x0b\x0d\xde\x7c\xe0\x0e\x1a\xf0\x3f\xea\x31\x02\xf8\xd1\
-\x69\x3f\x8e\x07\xe8\x1a\x6b\xb8\x88\xec\x1b\x08\x04\xda\x27\x2a\
-\x1e\x30\x92\x01\x03\xd6\x70\xee\xb9\x1b\xd9\xb6\xcd\x1e\xba\x55\
-\x94\x90\x4e\xe0\xb9\xe7\x9e\x1b\xf3\xe7\x6a\xa9\x38\xf6\x20\x7b\
-\x4c\x64\x00\x00\x20\x00\x49\x44\x41\x54\x37\xd3\x62\xb1\x58\x6a\
-\x22\xf9\xbc\x8a\x97\xdb\x80\x96\xe4\x70\x57\xb1\x23\x56\xc3\xc1\
-\x85\xcf\xbc\x8c\x2f\x7c\x2e\x4c\x42\xb9\xc7\x79\x1e\xed\xc3\x75\
-\x8a\xfa\x75\x69\xcc\xb5\x95\x29\xae\x57\xcb\x80\x76\x00\x04\x9d\
-\x76\x2f\xcb\x0b\xf3\xaa\x3d\x14\xba\xc1\xc4\x27\x97\x01\xaf\x02\
-\x69\x85\x87\x7b\xee\x43\x3e\x0f\xfb\xc5\x5c\xd3\xf4\x3d\xd8\x79\
-\x9f\x5e\x84\x39\xe4\x44\xe9\x23\x74\x06\xe6\xc6\x98\xe1\x78\x8f\
-\xc7\xa3\xdd\xba\x75\xab\x14\x15\x3f\x11\xf0\xf9\xfe\x2e\xd7\x98\
-\x35\x6b\xea\x11\x08\x18\xff\xcc\x7e\xfb\xe5\x90\x9c\x6c\x4f\x41\
-\x1d\x9d\xc0\x84\x1d\xdf\xd7\x65\xac\x11\x68\xb1\x58\x2c\x35\x10\
-\x7d\x41\x77\xca\x83\xf2\x34\xc2\x9b\xc0\xbd\x28\xd1\x8e\x38\xc3\
-\x89\x12\x05\xec\x05\x84\x54\x8d\xc3\x1e\x4e\x65\x57\xf1\xc9\xf9\
-\xb3\xc4\xc5\x3d\xac\x76\xbd\x0a\x9b\x62\xca\xaa\x58\x43\xe4\x7e\
-\x49\x23\x89\x4f\x80\x64\x60\x1b\xf0\x22\x30\x07\xe1\x48\x94\x07\
-\x9d\xf1\x25\x1b\x67\xc2\x6e\xa0\x29\xa6\x92\xcb\xd8\xa8\x7d\x94\
-\x4d\x25\xcc\x70\x7c\x87\x0e\x1d\xf2\x1a\x34\x68\x10\x77\xd9\x99\
-\xd2\x58\xbb\xb6\x1e\xad\x5a\x95\x5e\x55\xe4\xee\xbb\x0f\x62\xd9\
-\x32\x13\x6a\x39\x7a\xf4\x2c\xda\xb5\x2b\x4b\xae\x8b\xc5\x52\x31\
-\xac\x11\x68\xb1\x58\x2c\xd1\xa9\x5e\x3a\x81\xd1\xd8\xc2\xbb\x34\
-\xe3\x1e\x84\xf6\x31\x7a\xcc\x21\x74\xc4\xaa\x9c\x03\xcc\x73\x9e\
-\x9f\x51\xd8\x43\xa2\x7a\xcd\xe2\xff\xbe\x93\xe8\x0a\x85\x86\xea\
-\x18\xf5\xeb\xd3\x00\xf2\xa0\x9c\x5d\x8a\xe9\x17\x46\x98\x83\xd2\
-\x0a\x48\xc1\xc3\xb0\xc8\x8c\x62\x79\x48\x8e\x51\xbf\xfe\x2f\xc6\
-\x68\x92\x93\x93\x4f\x39\xe2\x88\x23\x2a\xdd\x00\x5c\xbe\xbc\x3e\
-\xfd\xfb\xf7\x60\xd8\xb0\x79\x74\xef\xbe\xbd\xb2\x97\xaf\xd1\x58\
-\x9d\xc0\xc4\x62\x8d\x40\x8b\xc5\x62\x89\x42\xb5\xd7\x09\x04\x74\
-\x98\x06\xc4\x27\x8f\x02\x23\xa3\x76\x10\x86\x3a\xc9\x17\xf5\x81\
-\xe7\xe5\x21\x39\x9d\x02\xf6\x41\x0a\x2b\x8f\xac\xa2\x80\xe1\x95\
-\xb4\xdd\x65\xae\x7d\x5d\x28\x3e\x59\x06\x1c\x8c\xd0\xaf\x1c\x73\
-\x3c\x09\x9c\x0a\x78\x28\x60\xb4\x3c\x24\x63\x51\xe6\x00\xed\x50\
-\x4e\x45\xe8\x42\x28\x63\x39\x02\x11\x69\x28\x22\xdd\x7b\xf4\xe8\
-\x51\xe1\x37\x50\x51\xda\xb6\xcd\xa1\x47\x8f\xed\x7c\xfc\x71\x2b\
-\x5e\x7c\x31\xbe\x46\xe0\xaa\x55\xf5\x59\xb2\xa4\x01\x5b\xb6\x24\
-\x93\x96\x96\x47\xa7\x4e\x3b\x8b\x69\x13\x2e\x5c\xd8\x90\x1d\x3b\
-\xcc\x69\x6a\xaf\x5e\xdb\xd8\xb0\x21\x85\x59\xb3\x1a\xa3\x6a\x5e\
-\x47\xd3\x32\x5c\xba\xb4\x01\xf3\xe7\x37\xa2\x55\xab\x5c\xba\x75\
-\xdb\xc1\xd6\xad\x5e\x56\xae\xac\xef\xbc\x9f\xdd\x85\x63\x66\xcc\
-\x68\x82\x2a\x34\x68\x10\xe4\xe0\x83\xc3\xf9\x43\xa1\xf6\x86\x0d\
-\x83\x1c\x74\x50\xd1\xbc\xa2\xec\xec\x64\x16\x2e\x4c\x65\xed\xda\
-\x7a\x34\x6d\x1a\xa0\x53\xa7\x5d\xc5\x6a\x2f\x2f\x5c\x98\xca\x8e\
-\x1d\x5e\xf2\xf3\x53\x79\xe0\x81\xfb\x51\xcd\x9f\x07\x20\xc2\x61\
-\x18\x6f\x30\xc0\x2f\xaa\xa8\x08\x4d\x81\x50\xa0\xe7\x72\x60\x15\
-\x70\x38\xd0\x03\x18\xa7\xca\xba\xf2\x7e\x5f\xeb\x0a\xd6\x08\xb4\
-\x58\x2c\x96\x9a\x4c\x7d\x3e\x23\x87\xfb\x81\x43\x23\x2f\xe9\x10\
-\xfd\x4b\x1e\x92\x8b\x51\x86\x01\xad\x51\x4e\x77\x79\xdd\x66\x03\
-\x57\xeb\x50\xad\x94\xb2\x16\xea\xd7\xa5\xf2\xa0\xbc\x8c\x70\x37\
-\xca\xde\xc0\x53\x40\x16\xf0\xb4\xf3\xbc\xf4\x39\x86\xe8\xaf\xf2\
-\xa0\x0c\x44\x78\x09\x13\x57\x18\xce\x8c\x36\xef\x2b\x56\x2c\x20\
-\xc0\xd1\xaa\x9a\x54\x15\x46\x20\xc0\xd5\x57\xaf\xe1\xae\xbb\x0e\
-\x62\xc9\x92\x06\x74\xec\xb8\xe7\x47\xbc\xdb\xb7\x27\xf1\xf2\xcb\
-\xed\xf8\xfe\xfb\xe6\xb8\x9d\x65\x29\x29\x05\x5c\x7d\xf5\x1a\xae\
-\xbd\x76\x75\x61\xfd\xe2\xe7\x9f\x6f\xc7\x9c\x39\x26\x77\xe8\xa1\
-\x87\x96\xf2\xfc\xf3\xed\xc9\xcf\x37\x17\x1b\x37\xce\xe7\xb5\xd7\
-\xfe\xa2\x6b\x57\x63\xa8\xa9\xc2\xeb\xaf\xb7\xe5\xb3\xcf\xd2\x0a\
-\xe7\xec\xd0\x61\x37\xc7\x1c\x93\xcd\xa8\x51\xad\x00\x78\xf4\xd1\
-\xa5\x9c\x73\xce\x46\x00\x06\x0f\x36\x61\xa7\x9d\x3a\xed\xe2\x93\
-\x4f\x66\x17\x8e\x09\xb5\x1f\x72\xc8\x0e\xde\x7f\x3f\xfc\x63\xf9\
-\xec\xb3\x34\xde\x7d\xb7\x35\xbb\x77\x87\x43\xfc\x3c\x1e\xa5\x7f\
-\xff\x75\xdc\x72\xcb\x4a\x3c\x1e\xf3\x66\x5e\x79\xa5\x2d\x33\x66\
-\x34\x71\x7a\x24\x01\x3b\x42\x3a\x81\xaf\x02\x27\x39\xcf\xeb\x03\
-\xb9\x40\x4f\x60\x82\xd3\xf6\x3a\xd0\x1d\x23\x61\x04\xc6\xfb\x6d\
-\x8d\xc0\x18\x58\x23\xd0\x62\xb1\x58\x6a\x02\x49\xbc\x47\x3e\xff\
-\x05\x20\x8f\x39\xa1\x66\x7d\x5c\x0b\xe4\x11\x39\x9f\xa0\x73\x24\
-\xac\x14\xd1\x0c\xd4\x21\xfa\x9d\xdc\x27\x5d\xf0\x70\x2c\x1e\x3a\
-\x22\x8e\x58\x74\x3d\x7e\xd5\xc7\x35\xdf\xd5\x35\x93\xd0\x07\xa7\
-\xb8\x32\x7e\x43\x08\xdf\xa3\xce\xf5\x20\x85\x02\xd0\x28\xf7\x23\
-\x3c\x07\x40\x43\x36\xcb\x03\xd2\x9a\x6c\x36\xb3\x77\xe1\x5c\x9b\
-\x0b\xbb\x0e\xd5\x7b\xe4\x21\x19\x43\x01\xbd\x9c\xb8\xc2\x5f\x51\
-\xf2\xa1\x30\x43\x38\xbc\x6e\x01\x57\xe1\x21\x15\x0f\x45\xdc\x54\
-\x3a\x54\x3f\x95\x27\xe5\x1b\x72\x38\x1a\xe8\x80\x92\x8c\xb0\x8e\
-\x20\x33\x49\x62\x9d\xf8\xe4\x38\x8c\x17\xa8\xb7\xf3\x35\x0d\x98\
-\xc9\x25\xd4\x6b\xba\xba\x69\x60\x67\xca\xce\xe4\xa6\x34\x45\xca\
-\x7c\x06\x1d\x1f\x8e\x3e\x3a\x9b\x4e\x9d\x76\x31\x6a\xd4\x7e\x3c\
-\xf6\xd8\x92\x3d\x9e\xef\xc5\x17\xdb\xf3\xc3\x0f\xfb\x00\xd0\xb4\
-\x69\x3e\xbd\x7b\x6f\x65\xd2\xa4\x66\xe4\xe5\x79\x18\x3e\xbc\x35\
-\x7b\xef\x1d\xe0\xa2\x8b\x36\x14\x1b\x37\x64\x48\x07\xda\xb6\xdd\
-\x0d\x08\xcb\x97\xd7\x67\xfb\x76\x2f\xc3\x86\xb5\xe1\xb5\xd7\xfe\
-\x02\x60\xfc\xf8\x7d\x0a\x0d\x40\x11\x38\xe6\x98\x6c\x16\x2c\x68\
-\x58\x68\x00\xee\x09\xdf\x7f\xdf\x9c\xd7\x5e\x6b\x0b\x40\xbb\x76\
-\xbb\x39\xe5\x94\xcd\xcc\x98\xd1\x84\x19\x33\x1a\x33\x6a\x54\x2b\
-\x9a\x35\x0b\x30\x60\xc0\xda\x3d\x5d\xe6\x66\x8c\x6d\x93\x85\xc9\
-\x22\xb7\x94\x80\x35\x02\x2d\x16\x8b\x25\x0a\xe9\xe9\xe9\x9f\x02\
-\x1b\x07\x0f\x1e\x7c\x47\x55\xef\x05\x40\x9f\xd6\xbf\x81\xa8\xa9\
-\xa6\xfa\x8c\x2e\xc7\x1c\x83\x45\x1f\xfb\x82\xee\x04\xfe\xeb\x3c\
-\xa2\xf7\x31\x1e\xc1\x89\x31\xaf\x3f\xab\xeb\x81\xf5\x51\xc6\xcd\
-\x76\xbf\x16\x9f\x8c\x66\x1f\x0e\x46\x19\x87\xf2\x05\x29\x4e\x1c\
-\x62\xa8\xff\x10\xfd\x1f\x61\x1d\xc1\x10\xc5\xd6\x8d\x22\x4b\x13\
-\xbe\xf6\xb8\xee\x00\x7e\x72\xad\x99\x4a\x12\xcf\x01\x83\x89\x14\
-\xc5\x36\x9c\x4c\x47\xc8\xee\x98\x4d\xbf\xff\xf6\xa3\x55\x6a\x2b\
-\x1e\xea\xf9\x10\x47\xec\x7b\x44\xac\x25\x12\xc2\x99\x67\x66\x31\
-\x62\xc4\x7e\xa8\x42\xc9\x6a\x86\x25\xb3\x7c\x79\xfd\x42\x03\xb0\
-\x79\xf3\x00\x5f\x7e\x39\x93\x06\x0d\x0a\x58\xb4\x28\x95\x81\x03\
-\xbb\x03\x30\x6c\x58\xeb\xa8\x46\x60\xff\xfe\x6b\xb9\xed\xb6\x15\
-\xe4\xe7\x7b\x38\xe7\x9c\x5e\x6c\xdf\x9e\xc4\x82\x05\x0d\x0b\xaf\
-\x7f\xfe\x79\xcb\xc2\xe7\x4f\x3d\xb5\x98\xd3\x4f\xdf\x44\x5e\x9e\
-\x87\x81\x03\xbb\xb3\x7c\x79\xfd\x98\x7b\x2a\xcb\xfb\x79\xe7\x1d\
-\xa3\x3d\x5e\xbf\x7e\x01\xef\xbc\x33\x9f\xa6\x4d\x03\x14\x14\xc0\
-\xf9\xe7\xf7\x24\x2b\x2b\x85\xf7\xdf\xdf\x9f\x2b\xae\x58\x1b\xa5\
-\xc2\x4a\xb9\xe2\x02\xbd\xc0\x55\xc0\x68\x55\x02\x22\x51\x13\xa6\
-\x2c\x0e\x56\x27\xd0\x62\xb1\x58\xa2\x53\x9d\x75\x02\xab\x2f\x41\
-\xae\xa1\x80\x97\x80\xde\x08\xdf\x93\xcb\x7a\x79\x50\xde\x93\x07\
-\xe5\x4c\x79\x52\xe2\xee\x78\x10\x9f\x1c\x8b\xf1\x62\xde\x4a\x71\
-\x03\x70\x05\x30\x15\x8a\x8a\x5d\xaf\xdd\xb5\x96\xdb\x7f\xbd\x9d\
-\x17\x67\xbd\x48\x4e\x30\x9a\xce\x4c\x62\x38\xfc\xf0\x6d\x6c\xdd\
-\xea\x65\xc9\x92\xd4\x3d\x9a\xc7\x3d\xfe\xf0\xc3\xb7\xd2\xa0\x81\
-\xc9\xe3\xe9\xd4\x69\x17\xcd\x9b\x1b\x47\x70\x76\x76\x32\x9b\x37\
-\x17\xb7\x7f\xce\x3e\x3b\x0b\x8f\xc7\x1c\x1b\xb7\x68\x11\xea\x1b\
-\xfe\xb1\xac\x58\x61\x42\x2a\x3d\x1e\xe5\x98\x63\xb2\x01\xd3\xf7\
-\xc8\x23\xb3\x4b\xdc\x93\xd7\x5b\xb2\xa1\xb6\x73\x67\x12\xeb\xd6\
-\x99\x9c\x1c\x11\xb8\xed\xb6\x2e\x0c\x1c\xd8\x9d\xab\xaf\xee\x5e\
-\x78\x34\xbc\x7b\x77\x12\xeb\xd7\x17\xcd\xdb\x69\xd2\x64\x37\xaf\
-\xbf\xfe\x0c\xe7\x9d\x77\xde\x21\x25\x2e\x10\x66\x96\x2a\x9f\xa8\
-\x1a\x0f\x72\xe8\xab\x25\x3a\xd6\x13\x68\xb1\x58\x2c\x96\xb8\xa1\
-\xcf\xeb\x22\x60\x08\x30\x44\xee\x97\x4e\x78\xb8\x04\xe1\x52\xe0\
-\x3a\x72\xd9\x2c\x0f\xca\x58\x84\x2f\xa8\xcf\x84\x88\xe3\xe8\x72\
-\x21\x3e\xa9\x87\x89\x25\xbc\x97\xb0\x43\x63\x03\x30\x0c\xf8\x03\
-\xf8\x53\xfd\xba\x1e\x40\x92\xe5\x28\x9a\x32\xf5\xb6\x67\x6f\x63\
-\x41\x60\x01\x3f\xae\xfa\x11\x45\x19\xb3\x74\x0c\x53\xd7\x4f\xe5\
-\xb1\x5e\x8f\x71\xe8\x3e\xc5\x42\x2a\xe3\x4e\xa7\x4e\x3b\x69\xdc\
-\x38\x9f\xe9\xd3\x9b\x70\xe0\x81\xc5\x95\x79\xca\x4a\x4e\x4e\xd8\
-\x7f\xd3\xb8\x71\xd1\x92\xba\x8d\x1a\x05\xc9\xca\x2a\xde\x2f\x84\
-\x7b\xdd\xa4\xa4\xe2\x86\x5b\x81\x93\x17\x2e\x02\x6e\x65\x3e\x6f\
-\x29\xd6\x42\xbe\xeb\x27\xb9\x7e\x7d\x4a\x89\x7b\xce\xcf\x97\x22\
-\x06\x6a\xfd\xfa\x05\xd4\xaf\x6f\x16\xde\xb6\xcd\x1b\x21\xa5\xa3\
-\x78\xbd\x5e\x3c\x1e\x4f\xc8\xd7\x78\x40\xc9\x3b\x29\x8c\x0d\xb4\
-\x94\x01\x6b\x04\x5a\x2c\x16\x8b\x25\x21\x94\x68\x10\xe6\xb0\x49\
-\x1e\x94\x71\x7b\x60\x10\x3e\x07\xb8\x8f\xea\x3f\x05\x6e\x57\xbf\
-\x16\xd7\x09\xcc\xe7\xb8\xbd\x02\x7b\xe5\x5d\xd9\xe3\xca\x14\x80\
-\xb3\xda\x9c\xc5\x90\x19\x43\xc8\xca\xc9\x62\xd5\xce\x55\xdc\xfe\
-\xdb\xed\x8c\x3c\x65\x24\xad\x1b\xb6\xae\xd8\x1b\x2d\x23\x1e\x0f\
-\xdc\x71\xc7\x0a\x3a\x74\xd8\xb3\xc4\x10\xb7\x76\x60\x46\x46\x93\
-\xc2\xe7\xd9\xd9\x5e\x96\x2f\x37\x9e\xbc\x7a\xf5\x0a\x48\x4b\x2b\
-\xae\x4b\x58\xfc\xa8\xb5\x28\x07\x1c\x90\xc3\xdc\xb9\x8d\x08\x06\
-\x85\x3f\xff\x6c\xc2\x89\x27\x6e\xa1\xa0\x40\xf8\xe3\x8f\xe8\x4e\
-\xf1\x06\x0d\x82\xec\xde\x9d\x54\xc4\xa8\x8b\xd6\x77\x9f\x7d\x02\
-\x34\x6e\x1c\x64\xfb\xf6\x24\x1a\x34\x08\x32\x66\x4c\x26\x0d\x1a\
-\x14\x35\x60\x73\x72\x3c\x85\xc6\x60\x6a\x6a\x71\x95\x22\x11\x3a\
-\x42\x4c\x39\xa4\x10\x56\x58\xb1\x1c\x58\x23\xd0\x62\xb1\x58\xa2\
-\x53\xfd\x75\x02\x6b\x10\xa5\x1a\x84\x3e\x19\x0b\x7c\x59\x16\x83\
-\x50\x7c\x72\x22\xa6\x86\x30\x98\x04\x80\xeb\xd4\xaf\xdf\xc4\xea\
-\xef\xf1\x78\x4e\xec\xd5\xab\x57\xa1\x5f\xeb\xd8\x96\xc7\xf2\xe9\
-\x29\x9f\xf2\x5c\xe6\x73\x8c\x5f\x3d\x9e\x9c\x60\x0e\x4f\x4d\x7f\
-\x8a\x77\x8e\x7f\x07\x8f\x24\x36\x4a\xea\xdc\x73\x37\x96\xb9\xef\
-\x23\x8f\x1c\x48\xbd\x7a\x45\x7f\x05\x2f\xbf\x7c\x1d\xa7\x9c\xb2\
-\x99\xce\x9d\x77\xb2\x70\x61\x43\x96\x2e\x6d\xc0\x7d\xf7\x75\xe6\
-\xd8\x63\xb3\x19\x3b\xb6\x45\x61\xa6\xf0\xb9\xe7\x6e\x2c\xd5\xe0\
-\x8b\x46\xdf\xbe\xeb\x99\x3b\xd7\x64\x12\xfb\x7c\x9d\x38\xe9\xa4\
-\x2d\xcc\x9f\xdf\x90\xb5\x6b\xa3\xcb\x2b\xb6\x69\x93\xc3\xc2\x85\
-\x0d\xc9\xca\x4a\x61\xc8\x90\xf6\xd4\xaf\x5f\xc0\xbf\xfe\xd5\x22\
-\x6a\xdf\xf3\xcf\xdf\xc0\xa8\x51\xad\xd8\xb6\xcd\xcb\xe3\x8f\x77\
-\xe4\xfc\xf3\x37\x90\x96\x96\xc7\xaa\x55\xf5\x99\x3c\xb9\x19\xcb\
-\x96\xd5\x2f\xcc\x24\x6e\xd3\xa6\xe8\x31\xfd\xaa\x55\xd7\x9f\x42\
-\xf8\x67\x6e\x89\x13\x5e\x11\x39\x09\x77\x69\xa1\xe2\x64\xa8\x6a\
-\xc9\xea\xf1\x35\x08\x11\xb9\x1b\xb8\xdf\x79\x79\xa5\xaa\x8e\x2f\
-\xa9\xbf\xc5\x62\xa9\x9b\xd4\x04\x9d\xc0\x9a\x4a\x09\x06\xe1\x3f\
-\x0b\x0d\xc2\x02\xbe\x20\x95\x9f\x23\x0d\x42\xf1\x49\x43\xe0\x43\
-\x28\x4c\xef\x1d\xa4\x7e\xfd\x4f\x49\xeb\x79\x3c\x9e\x93\x7a\xf6\
-\xec\x59\x24\x5e\xb0\x49\x4a\x13\x9e\x3e\xfc\x69\xb2\x72\xb2\xc8\
-\xdc\x94\xc9\xac\x4d\xb3\xf8\x74\xf1\xa7\x0c\xe8\x34\x20\x7e\x6f\
-\x34\x06\xaa\x90\x9f\xef\x21\x39\xb9\xe4\x7b\x8c\xc5\x8b\x8b\xc7\
-\x0e\x66\x65\x25\x93\x94\xa4\x3c\xf9\xe4\x12\xee\xbd\xf7\x20\x56\
-\xaf\xae\xc7\xe4\xc9\xcd\x98\x3c\xb9\x59\x61\x9f\x5e\xbd\xb6\x71\
-\xeb\xad\xc5\x13\xbc\xcb\xc2\xd9\x67\x67\x31\x63\x46\x13\xbe\xfd\
-\x76\x5f\x82\x41\x61\xc2\x84\xbd\x49\x4b\xcb\xe3\xdc\x73\x37\xf2\
-\xed\xb7\xfb\x02\x14\xca\xb8\x00\xf4\xef\xbf\x8e\x27\x9f\xec\x08\
-\xc0\x37\xdf\x18\xe3\xef\xd4\x53\x37\x33\x7e\xfc\xde\xc5\xe6\xbe\
-\xf1\xc6\x55\x2c\x59\xd2\x80\xa9\x53\x9b\x32\x69\x52\x33\x26\x4d\
-\x6a\x56\xe4\x7a\xe7\xce\xe1\xa3\xea\x8b\x2f\x5e\xcf\x57\x5f\xb5\
-\x60\xdb\xb6\x54\xee\xb8\xe3\x06\xf2\xf3\x3d\xa7\x61\x64\x8d\xb2\
-\x81\x2e\x15\x7a\x73\x96\x62\x78\x81\x01\xc0\x3f\x4b\xe8\xf3\x2c\
-\x94\x52\x42\xa8\x66\xd1\x10\x08\xa5\x3f\x55\xba\x72\xbc\xc5\x62\
-\xb1\x58\xc2\xc4\x34\x08\x3d\x31\x0d\xc2\xe7\x80\x0e\xce\xf0\x0f\
-\x4a\x33\x00\x45\xe4\x20\xa0\xe9\x61\x87\x1d\x56\xec\x9a\x47\x3c\
-\x3c\xd6\xeb\x31\x06\x4c\x18\xc0\xee\xe0\x6e\x86\xcd\x1f\xc6\xb1\
-\x69\xc7\xd2\xa1\x71\x87\xe2\x13\xc5\x91\xcb\x2f\xef\x41\xdf\xbe\
-\xeb\xb9\xec\xb2\xe2\xf2\x75\xfd\xfa\xad\x27\x3b\x3b\x76\x42\x6b\
-\xf7\xee\x3b\x00\x68\xdf\x7e\x37\x9f\x7d\x36\x8b\x6f\xbe\xd9\x97\
-\x25\x4b\x52\xd9\xb2\x25\x99\x96\x2d\x73\xe9\xde\x7d\x07\xa7\x9d\
-\x56\xf4\x44\xfc\xfc\xf3\x37\x70\xf4\xd1\xc5\xe5\x20\x2f\xba\x68\
-\x3d\x9b\x36\x15\x8d\xdf\xf3\x78\xe0\x91\x47\x96\x72\xfe\xf9\x1b\
-\x99\x37\xaf\x21\x2d\x5a\xe4\x71\xf8\xe1\xdb\x78\xe4\x91\x03\x0b\
-\xfb\xb4\x6e\x1d\x3e\x66\x3e\xfb\xec\x2c\x1a\x35\x0a\x32\x71\x62\
-\x33\x40\xe8\xd5\x6b\x2b\xff\xf8\x47\x16\xed\xdb\xef\x0f\x48\x61\
-\xf2\x09\x98\x04\x93\x57\x5f\x5d\xc0\xd4\xa9\x4d\xc9\xc8\x68\xc2\
-\xea\xd5\xf5\xf0\x78\x94\xe6\xcd\x03\x74\xeb\xb6\x83\x23\x8f\x0c\
-\xef\xb1\x4d\x9b\x1c\x3e\xfa\x68\x2e\x5f\x7d\xd5\x9c\xaf\xbf\x9e\
-\x0c\x34\xff\x10\x4e\xb9\x03\xb8\x98\x50\xad\xea\xb0\x04\xcc\xdf\
-\x18\x21\x71\x08\xcb\x0d\x59\xca\x80\x00\xc3\x09\x1b\x81\x9b\x80\
-\x1d\x11\x7d\xde\x50\xd5\x97\x2a\x75\x57\x09\x44\x44\x1e\x25\x2c\
-\x4c\x7a\x8e\xaa\x7e\x57\x95\xfb\xb1\x58\x2c\x16\x4b\x71\x22\x3c\
-\x84\x3d\x80\x2c\x94\x1f\x10\xae\xc0\x7c\x76\xad\x00\xba\xab\x5f\
-\xb7\x95\x38\x8f\xc8\x3f\xeb\xd7\xaf\x9f\x3e\x61\xc2\x04\xaf\x27\
-\xc6\xf9\xe8\x57\x7f\x7f\xc5\x0b\x99\x2f\x00\x26\x5e\xf0\x89\xde\
-\x4f\xc4\xf3\xad\x14\xe3\xaa\xab\xba\x71\xe4\x91\x15\xf7\xd6\x25\
-\x9a\x77\xdf\x6d\xcd\x19\x67\x6c\xa2\x6d\xdb\xdd\x64\x67\x27\xf3\
-\xdb\x6f\x4d\x19\x32\xa4\x3d\xc1\xa0\xd0\xa4\x49\x3e\xe3\xc6\xcd\
-\x24\x35\x35\x58\xfa\x44\x65\xe0\xfd\xf7\xf7\xa7\x63\xc7\xdd\xf4\
-\xe9\xb3\x39\xea\xf5\x40\x20\xc0\x09\x27\x9c\x00\x70\x9e\xaa\x7e\
-\x1b\x97\x45\x5d\xc8\x83\x72\x22\xc2\x75\x14\xe0\xd3\xe7\x74\x4d\
-\xbc\xe7\xaf\xee\x44\xc6\x04\x3e\xa8\xaa\xef\x45\xeb\x28\x22\x67\
-\x00\xc7\x3a\x2f\xc7\xa9\xea\x4c\xa7\xbd\x1b\x14\x96\xfd\xf9\xc3\
-\x6d\x54\x39\x63\x4e\xc2\x58\xed\x59\xc0\x74\x60\xa4\xaa\x06\x5d\
-\x7d\x2e\x05\xba\x3a\x2f\x5f\xc3\x88\x95\x9e\x09\xac\x01\x46\xab\
-\xea\x02\x11\x69\x07\x5c\x81\x39\xb6\x9e\x03\xbc\xae\xaa\xbb\x5d\
-\x73\x3c\x04\xa4\x60\x34\xac\x3e\x02\xae\xc3\x08\x85\xae\x01\x46\
-\xa9\x6a\x11\x9d\xaa\x58\x88\xc8\x3e\xc0\xd5\x40\x27\x8c\xc7\x70\
-\x11\xf0\x85\xaa\x2e\x88\xe8\xd7\x0e\x18\x88\xb9\x1b\x6d\x88\x29\
-\x86\xbe\x00\x98\xa0\xaa\x19\xa5\xac\x71\x01\x46\xdd\x1c\xe0\x1d\
-\x55\xb5\x4a\xe6\x16\x4b\x35\xa4\xba\xe9\x04\xd6\x35\x62\x78\x08\
-\xff\x49\xf8\x18\xf8\xb9\x92\x0c\x40\x79\x58\x0e\xa3\x80\x0b\xb9\
-\x84\xfe\x69\x81\x34\xc9\x27\x9f\x14\x8a\x67\xad\x02\xf4\x6d\xdf\
-\x97\x51\x8b\x46\xb1\x66\xd7\x1a\xfe\xca\xfe\x2b\xee\xef\x25\x92\
-\x86\x0d\x0b\xd8\xb5\x2b\x9a\x9c\x61\xf5\xe0\xcb\x2f\xd3\xf8\xe0\
-\x83\xfd\xa9\x57\xaf\x80\xbc\x3c\x4f\x61\x9c\xa1\xc7\xa3\x3c\xfc\
-\xf0\xd2\xb8\x19\x80\x00\x6b\xd6\xd4\x67\xf8\xf0\xd6\xf4\xee\xbd\
-\x8d\xbb\xee\x5a\xbe\x47\x59\xd3\x15\x42\xf0\x00\x57\xe1\xa1\xaf\
-\x3c\x28\x7e\x76\xf1\x92\xbe\xae\xc5\x33\x6a\x6a\x29\xe5\x49\x0c\
-\xc9\x04\x46\x60\x8e\x52\xaf\x14\x91\xc3\x80\x20\xf0\x05\xc6\x38\
-\xcb\x02\xde\x05\x10\x91\x64\xe0\x73\xe0\xa2\x28\xf3\xdc\x22\x22\
-\x67\xab\x16\x66\x70\x5d\x8a\x71\xef\x02\x1c\x02\x45\xea\x48\xde\
-\x2a\x22\xd7\x60\xbc\x95\x69\xae\xf6\x73\x80\x13\x5d\xaf\x1f\x06\
-\x52\x31\x62\xa9\x03\x81\x63\x5c\xd7\x6e\x17\x91\x0b\x54\xb5\xc4\
-\xb4\x71\x11\x39\x1b\xf8\x04\xd8\x27\xe2\xd2\xc3\x22\x72\x6b\xc8\
-\x38\x16\x91\x9e\xc0\x14\x67\xbd\x48\xbe\x01\x2e\x28\x69\x1d\xe0\
-\x42\x60\x90\xf3\x7c\x1c\xb6\x9c\x8d\xc5\x52\x5d\xd9\x1b\x8a\x56\
-\xdf\xb0\x54\x0d\x21\x83\x50\x7c\x52\x1f\x78\xd4\x69\x9e\x16\xab\
-\xbf\xf8\xe4\x2e\xe0\x79\xc0\x4b\x47\x58\xc6\x32\x06\x4e\x18\xc8\
-\x6b\xc7\xbd\x46\x5a\x83\xb4\xe2\xfd\x11\xba\x36\xeb\xca\x9a\x5d\
-\x6b\x58\xb1\x63\x05\xbb\xf3\x77\xd3\xc0\x1b\xb5\x04\x71\x5c\x48\
-\x4d\x0d\xb2\x73\x67\xf5\x95\xe9\xbd\xf8\xe2\x75\x64\x64\xec\xc5\
-\x86\x0d\x29\x04\x83\xd0\xaa\x95\xa9\x49\x7c\xc5\x15\xeb\x68\xdd\
-\x3a\x31\xba\x8a\x19\x19\x4d\xb8\xea\xaa\x6e\x5c\x78\xe1\x46\x6e\
-\xb8\x61\x25\x4d\x9b\x9a\x93\xde\xfc\xfc\x7c\x5e\x7f\xfd\x75\x7e\
-\xfa\xe9\xa7\x6e\x40\xdc\x3d\x81\x2e\x1a\x21\x3c\x4b\x2a\xff\x14\
-\x9f\xdc\xa7\x7e\xfd\x2a\x81\x6b\x55\x1b\x22\x7f\x0b\xd3\x45\x24\
-\x27\xe2\xd1\x0b\x40\x55\xd7\x63\xe2\x07\x0b\x80\x03\x81\x97\x31\
-\xb1\x19\x07\x63\xe4\xbc\xaf\x52\x2d\x74\xa5\x3e\x46\xd8\x00\x1c\
-\x8d\x29\xf8\x1d\x3a\x82\x3d\xc2\x19\x1b\x8d\xf3\x81\x77\x08\xeb\
-\xfc\x34\x07\xfe\x0d\x04\x80\xa1\x40\xa8\x9e\xcc\x09\x22\x72\x54\
-\x94\xf1\x6d\x81\xd6\xc0\x7d\xce\x38\x80\x46\xce\xfb\x8a\x69\xf0\
-\x8a\x48\x1a\x61\x03\x70\x3d\x70\x23\x70\x1e\xc6\xf0\xad\x07\xbc\
-\xe9\xc4\x95\x00\x5c\x83\x31\x00\x77\x61\x8c\xd7\x9e\x18\xa3\x74\
-\x08\xb8\x4a\x29\x59\x2c\x16\x8b\x25\xde\xf4\x76\xbe\xe6\x03\xb3\
-\xa2\x75\x90\x07\xe4\x70\xe0\x05\x22\x9c\x1c\xcb\x77\x2c\xe7\xa9\
-\x8c\xd8\x25\x8a\xbb\x34\x35\xb9\x06\x05\x5a\xc0\x82\xad\x0b\x62\
-\xf6\x8b\x07\x0d\x1b\x06\xd9\xb9\xb3\xfa\x7a\x02\x6f\xba\x69\x15\
-\xc3\x87\xcf\xe5\x5f\xff\x9a\xc1\xb7\xdf\xce\x60\xf8\xf0\xb9\xdc\
-\x7f\xff\xb2\x84\x19\x80\x21\x0a\x0a\x84\xaf\xbf\x6e\xc1\x25\x97\
-\x1c\xc6\xe8\xd1\x69\x85\xf5\x8d\xbd\x5e\x2f\x22\x7b\x52\x63\xa5\
-\x1c\x08\xed\x81\x31\xe2\x93\x9f\xe5\x41\xa9\x9a\x42\xd3\x95\x48\
-\xa4\x61\xe4\x8d\xd2\x56\x68\x28\xaa\xea\x4f\x22\x32\x14\x78\x08\
-\xb8\x81\x70\x2d\x97\x17\x54\xf5\xff\x5c\x63\x42\x45\xbd\x37\x01\
-\x77\x01\x39\x98\xa3\xe0\xbe\x40\x37\x60\xa0\x88\xdc\xe4\x3e\xd2\
-\x75\x78\x42\x55\xfd\x22\xd2\x9d\xa2\x7f\xe0\x7d\x54\x75\xa9\x88\
-\x04\x31\x5e\x3f\x80\xce\xc0\xef\x51\xde\xd3\xf9\xce\x51\xf5\x8b\
-\x22\x32\x0d\xf3\x4f\xa3\x33\xc6\xf8\x8c\x2c\x55\x14\xa2\x1f\x61\
-\x0f\xe0\x1b\x18\xef\x26\xc0\x8b\x18\xe3\xb0\x1e\xa6\x0c\xcd\xc3\
-\xce\x7b\x02\xa3\x4c\xbf\x3f\xc6\xfb\x38\xbe\x1c\xb1\x85\xff\x21\
-\x5c\x7a\xa9\x78\x4d\x1f\x8b\xc5\x62\xb1\xc4\xe2\x70\xe7\xeb\x7c\
-\xf5\x6b\x74\x8b\x44\xb8\x8c\xe8\xa5\xe3\x98\x9e\x35\x9d\x17\xc7\
-\xcd\x21\x95\xe2\x99\xab\xeb\xd8\xb7\xf0\xf9\x7b\x93\x7f\xa7\x2b\
-\xd1\x65\x4e\xe2\xc1\xb2\x0d\x2d\xd9\xb6\xb9\x11\x6f\x8f\xab\x73\
-\x21\x68\xc5\xf8\x6b\x45\xf1\x9a\xc4\xdb\xb7\x27\xf1\xea\xab\x6d\
-\x19\xf5\x65\x23\x2e\xbc\xee\xbf\xf4\x4c\x83\xac\xb4\xac\xae\xf2\
-\x90\x5c\x98\x80\x2d\x74\x8b\xd1\xde\x07\x61\xba\x3c\x24\xc3\x81\
-\x47\x75\x88\x96\x5d\xdb\xa7\x06\x11\x69\xf0\xbd\x85\xab\x1e\xa3\
-\x43\xa4\x77\xeb\x71\xe0\x6c\x8c\x07\x4c\x30\x29\xdb\x21\xc3\x0c\
-\x11\x69\x0e\x85\x7f\x4d\xfb\x10\xf6\xde\xb9\x11\x8c\x37\x71\x76\
-\x44\xfb\x14\xe7\xab\xbb\x3e\xe6\x5a\x55\x5d\xea\x3c\x77\xd7\xc6\
-\x6c\x42\x71\xb2\x30\xde\xbb\x10\x93\x08\xdf\x39\x76\x24\xb6\x11\
-\xe8\x96\xc8\x79\xc6\x79\x44\x12\xf2\x04\x7e\x80\x39\x8e\xa8\x07\
-\xbc\xee\xb4\x05\x44\xe4\x7f\xc0\xc3\xaa\x3a\x25\xca\xd8\x42\x54\
-\x75\x0c\x30\xa6\xa4\x3e\x16\x8b\xa5\x5a\x60\x75\x02\xab\x11\xe2\
-\x93\x06\x84\x3f\x5b\x56\xc5\xec\xe8\xe1\x80\x92\x4a\xcd\x8e\xf9\
-\xa4\x2b\xac\x3e\xa6\xf8\x85\x66\xdd\xe0\xc6\xc7\x01\x98\x36\xad\
-\x09\xd3\x7e\x8a\x16\xcd\x14\x5f\x46\x0c\x4d\xfc\x1a\x35\x99\x8d\
-\xab\xf7\xe1\xf3\x61\xc7\xd1\xf3\xf1\x6f\xd9\xd8\x6a\xe3\x00\x72\
-\x48\xbc\x7e\x4f\x51\x3c\x28\x83\x80\x25\x18\xef\x72\xad\x23\xd2\
-\x08\x9c\xa9\xaa\xe3\x4a\x19\x73\x20\xc6\xb3\x16\xa2\x33\xc6\x92\
-\x9e\xe9\xbc\xde\x8d\xf1\x10\x0a\xb0\x99\xd8\x05\xcb\xa3\xc5\xda\
-\x84\x6e\x8b\xdc\x77\x78\xab\x5d\xcf\x4b\xab\x22\x9d\x0a\x24\xbb\
-\xe6\x76\x1b\x8a\x25\xf9\xb1\xdd\x1e\xc9\x5f\x88\x1e\xa7\x37\x0b\
-\x40\x55\x57\x8a\x48\x0f\xe0\x5a\xe0\x28\xa0\xbb\xb3\xce\x89\xc0\
-\xdb\x40\xe2\x6b\x0f\x59\x2c\x96\x84\x63\x75\x02\xab\x17\xea\xd7\
-\xdd\xe2\x93\xc5\x98\xc4\xbd\xee\x31\x3b\x16\x30\xdb\xc9\x28\x2e\
-\x86\x88\x87\x7f\x7d\xbc\x9d\x54\xef\xaf\xc5\xae\x4d\x59\xff\x0b\
-\x4f\xcc\x30\xcf\xef\x1d\x94\xca\x59\x8f\x14\xef\x13\x2f\x46\x7c\
-\xd4\x86\x9f\x27\xec\xcb\x87\x23\xa6\x27\x6c\x8d\x9a\xc2\xf3\x43\
-\x3b\xf1\xe3\xf7\xc5\xbd\xae\x5e\xaf\xd2\xb7\xdf\x1a\xae\x1c\xb8\
-\x94\x7e\xfd\xee\x40\xeb\xe9\xc5\xdc\x49\xfc\xd5\x3c\x72\x38\x11\
-\xf8\x21\xc6\xd5\xb1\x78\xb9\x47\x9f\xd6\xbf\x63\x5c\xaf\xf1\x44\
-\x1a\x81\xc9\x22\x52\x3f\xa2\x2d\xa8\xaa\x01\x00\xe7\xda\xe7\x98\
-\x8c\xd8\x2c\x4c\x5c\x46\x1a\xf0\xb9\x88\xf4\x56\xd5\x1d\xaa\xba\
-\x53\x44\x96\x63\x32\x82\x9b\x00\x3e\xd5\xf0\x37\x50\x44\x3c\xc0\
-\x11\x91\x19\xb7\x71\x22\x15\x38\x0d\xf8\x4e\x44\x1a\x60\x32\x8d\
-\x43\x2c\x2c\x61\xdc\x1c\xd7\xf3\x45\xaa\x7a\xbd\xfb\xa2\x88\xec\
-\x8f\x73\xbc\x20\x22\x8d\x54\x75\x2e\x70\x8f\xf3\x3a\x09\xe3\x11\
-\xbc\x19\xe8\x2e\x22\x5d\x54\x35\x66\x7a\x99\x88\x3c\x02\x9c\xeb\
-\xbc\xbc\x4a\x55\x4b\xda\x97\xc5\x62\xb1\x58\xc2\x64\x60\x8c\xc0\
-\xd6\xe2\x93\x96\xa1\xda\xc0\x21\xc4\x27\xf5\x91\xd8\xc5\x0f\x2e\
-\xed\x70\x09\x2d\x1a\x45\x2f\x7f\xb6\x6c\xd7\xa2\xc2\xe7\x3d\xf6\
-\xed\x4a\xa3\xfa\x89\x2b\xa8\x75\xd3\x0d\x6b\xb9\xf9\xa6\xb5\xd8\
-\xa2\x5d\x90\x9c\x54\x3c\x41\xe6\xe8\xa3\xb3\xb9\xeb\xae\x15\xb4\
-\x6d\xbb\x9b\xbc\x3c\x0f\x81\xdd\x01\xd8\x4d\xae\x3e\x1e\x23\x04\
-\x60\x0f\x10\x9f\x44\x73\x48\xcd\x01\xee\x50\x7f\xc9\x09\xa5\xb5\
-\x81\xc8\xdf\xc0\xb7\x9d\x87\x9b\xaf\x08\x67\xec\xbe\x42\xd8\xd3\
-\x75\x2d\x90\x0b\x7c\x8f\xf1\x06\xbe\x8d\x89\x9b\x03\x73\x5c\xfa\
-\x89\x33\xff\x04\x11\x19\x0b\x2c\xc3\x1c\xc9\x9e\x8b\x49\xaa\x88\
-\x7d\x27\xb7\x67\xfc\x5b\x44\xbe\xc3\xc4\x00\x86\x44\xa1\x7f\x51\
-\xd5\xa8\x41\xc4\x0e\xa3\x31\x55\x44\x0e\x06\x06\x39\x89\x22\xe3\
-\x81\xbd\x80\xc3\x9c\x3d\x5f\x8a\xd1\xa5\x7a\x48\x44\xce\xc3\x78\
-\x38\x97\x61\x0c\xcf\xb3\x5d\x73\x45\x17\x3b\x0a\xd3\x11\xe3\x41\
-\x84\xe8\x19\xc6\x16\x8b\xc5\x62\x89\xce\x34\xe0\x72\xe7\x79\x6f\
-\x08\x7b\x86\xc4\x27\x07\x62\x42\x6d\xda\xa2\x3c\xe0\xc8\xc9\x74\
-\x0a\x5d\xef\xd7\xa1\x1f\xb7\x1c\x72\x4b\xcc\x89\x43\xd2\x30\x29\
-\x49\x29\x74\x68\x92\x58\xb1\xe8\x8a\x94\x73\xab\x0b\xb4\x69\x93\
-\xc3\x9d\x77\x2e\xe7\xb8\xe3\xb2\xab\x66\x03\xc2\x66\x0a\x78\x8c\
-\xa5\xbc\xa3\x5f\x68\xfc\x74\x70\xaa\x31\x65\xbe\x0d\x11\x91\x4b\
-\x80\x9b\x9c\x97\x6f\xab\xea\xbf\x9d\xf6\x57\x80\xbb\x31\xc9\x1e\
-\x3f\xa9\xea\x08\x55\x1d\xe9\x18\x52\x8f\x61\x3c\x82\x77\x45\x4c\
-\x17\xb3\xc6\xe3\x1e\x32\x1f\x13\x07\x78\xa3\xab\x6d\x21\x25\x57\
-\x44\x41\x55\x73\x44\xe4\x22\x8c\xc4\xcd\x89\x18\xa3\xef\x5c\x57\
-\x97\x6c\xc2\x09\x21\x05\x98\xe3\xef\xc8\x60\xd2\x7c\xe0\x21\x55\
-\xb5\xc9\x1e\x16\x4b\x2d\xc0\xea\x04\x56\x4b\xdc\x3a\xac\x27\xe3\
-\x18\x81\xe2\x93\x8b\x31\xf1\xda\x8b\x81\xde\x3a\x54\x97\xca\x93\
-\xf2\x32\x63\x3e\x79\x82\xdd\x4d\xee\x95\xf5\x17\xa6\xdc\xfc\xcd\
-\xcd\x92\xe2\x89\xae\x13\xb8\x2b\x7f\x17\xf3\xb6\x18\x39\xd9\x4e\
-\x4d\x3a\x91\x24\x89\xcd\xdc\xfd\xfe\xfb\xe6\x74\xed\xba\x83\x03\
-\x0e\x48\x6c\xb6\x6d\x4d\xa1\x61\xc3\x20\xd7\x5e\xbb\x9a\x4b\x2f\
-\x5d\x47\x72\x72\x69\x51\x5f\x09\x21\x88\xf0\x0e\x39\x3c\xa6\x2f\
-\x6b\x69\x8e\x9c\x5a\x85\x17\x13\xec\x38\xaa\x84\x3e\xa1\x8c\x98\
-\xa5\x84\x8f\x57\xa7\xba\xae\xfb\x08\xcb\xb1\xec\x0c\x35\xaa\xea\
-\x8b\x22\xf2\x11\xc6\x23\xd7\x01\xa3\x29\xb8\x0e\xf8\x5d\x55\xdd\
-\xc9\x22\x8f\x03\x6f\x3a\xcf\x43\xf1\x7f\x41\xd7\x5a\x6e\x31\xd0\
-\xff\xb8\xda\xa3\x1d\xa3\xe6\xab\xea\x4d\x22\xf2\x1e\x61\xb1\xe8\
-\x9f\x55\xd5\x5d\x05\x65\x04\xe1\xb2\x32\x85\xde\x41\xe7\x78\xfa\
-\x24\x11\x39\x1c\xe3\xd9\x6c\x81\x39\xf2\x5e\x8a\x11\xc1\x0e\x95\
-\xa7\x79\x14\x18\x89\xf1\x10\x36\xc7\x1c\x13\x6f\x00\x26\x46\xbc\
-\xaf\x58\x0c\x05\x3e\x76\x9e\x5b\x49\x19\x8b\xa5\xfa\x62\x75\x02\
-\xab\x1f\xd3\x30\x37\xe5\x4d\x81\xdb\xc5\x27\x9f\x62\x4e\xa0\xee\
-\x04\x86\x61\x8e\xf0\x72\x01\xf4\x71\xcd\x97\x27\x58\x05\x9a\xab\
-\x68\xbd\x39\x73\xe6\x70\xe4\x91\x47\x46\x9d\xf4\x8d\x39\x6f\xb0\
-\x2d\xcf\x7c\xd4\xf4\x6a\xde\x2b\xa1\x6f\xa0\xa0\x00\x9e\x7d\xb6\
-\x03\x0f\x3c\xf0\xb7\x35\x02\x81\x13\x4e\xd8\xcc\x2d\xb7\xac\x60\
-\xef\xbd\x03\x51\xaf\x47\xe8\x04\x16\x2b\x11\x28\x3e\x69\x4f\xb8\
-\x04\x6c\x10\x73\xd2\xb8\x43\xfd\x5a\xbc\x4e\x5e\x78\xcc\xbd\x84\
-\x32\xcd\x93\x78\x16\xe5\x30\x7d\x56\xe7\xc4\xea\x5f\x15\x88\x4f\
-\x7a\x02\x0f\x38\x2f\xbf\x50\xbf\x7e\x9d\x88\x75\xbc\x4e\x4c\x5a\
-\xa9\x71\x69\xb1\x2a\x61\xa8\x6a\x1e\x30\x31\xc6\xb5\x2c\xe0\xff\
-\xa2\x5d\x73\xf5\x99\x1b\xa5\x4d\xa3\xcd\xe9\x18\x59\xa5\x1a\x5a\
-\xaa\x3a\x8d\x18\x42\xa2\xaa\xba\x9c\xa2\x59\xc6\x65\x1e\xeb\xda\
-\xdb\x5f\xce\xa3\xdc\x38\xc6\x66\x62\x45\xa8\x2c\x16\x8b\xa5\x16\
-\xa2\x7e\xdd\x21\x3e\xb9\x03\x73\x23\x9d\x42\xf8\x86\x7e\xa0\xfa\
-\x75\x64\xf4\x51\xa2\xc9\xc9\xc9\x4b\x33\x33\x33\x3b\x44\x33\x02\
-\xff\xdc\xf8\x27\xe3\x96\x99\x7c\xc8\x56\xa9\xad\xb8\xe6\xa0\x6b\
-\x12\xb1\xf5\x42\xd6\xad\xab\x47\x20\x20\xb4\x6d\x1b\xa9\x90\x56\
-\x37\xe9\xd3\xa7\xf4\xfc\x2b\xaf\xd7\x8b\xc7\xe3\x89\xa5\x13\x18\
-\x0a\x49\x2b\x82\xf8\x64\x23\x26\xe1\xe3\x21\xf5\xeb\xca\x88\xcb\
-\x27\x60\x74\x89\x21\xc8\xed\xea\xaf\x9a\x13\x3c\xf1\xc9\x13\xc0\
-\xd1\xce\xcb\x81\xea\x2f\x22\x43\xb3\x1f\x70\x99\xf3\x7c\x0e\x90\
-\x18\x23\x50\x44\x12\x5f\x23\x27\xf1\x84\x92\x59\x3a\xd7\x92\xf7\
-\x63\xb1\x58\x12\x47\xae\xaa\xd6\x7a\x11\xd8\xda\x8a\xfa\x75\x84\
-\xf8\x64\x30\xe6\xc3\xb3\x21\x90\x1e\xdb\x00\x34\x04\x02\x81\x09\
-\xd3\xa7\x4f\x6f\x83\x51\x8f\x28\x64\x47\x60\x07\xcf\xce\x78\x16\
-\x45\x11\x84\x47\x7b\x3d\x4a\xaa\x37\xb1\xa1\xda\x2b\x57\x9a\x8f\
-\xab\x76\xed\xac\x17\x30\xc1\xec\x8b\x29\x70\xd1\x57\x7c\x72\x97\
-\xfa\xf5\x5d\xd7\xb5\xf1\x40\xc8\xfa\xac\xca\x1f\x44\x2f\x4c\x99\
-\x5c\x08\xdb\x31\x21\x56\x12\x3e\x35\x2c\x29\xa7\x61\x8f\xf0\x62\
-\x6a\xed\xd6\x74\xce\xc6\x1c\xcb\x6e\xc3\xc4\x04\x5a\x2c\x16\x4b\
-\x34\x7a\x63\xaa\x01\x95\x05\xab\x13\x58\xcd\x10\x9f\x78\x30\x21\
-\x44\x47\x62\x8e\xea\x53\x80\xc1\x8e\x86\xe0\x9d\x25\x1c\x01\x4e\
-\x99\x33\x67\xce\x35\xc1\x60\x90\xa4\x24\x13\xef\xf7\xe7\xc6\x3f\
-\x79\x76\xc6\xb3\xac\xdb\x65\x14\xc1\x2e\xe9\x78\x49\xc2\x8f\x82\
-\x01\x56\xac\xa8\x4f\xd3\xa6\x01\x1a\x37\xce\x2f\xbd\xb3\xa5\xbc\
-\x9c\x8a\x39\x2d\xec\x08\x0c\x06\xfe\x81\x49\xc0\x7c\x53\x7c\x32\
-\x55\xfd\x85\x09\xa2\x13\x08\x1b\x56\xbb\x01\xc4\x27\x8d\x08\x8b\
-\x91\xaf\xc6\x84\x82\xf5\x72\x1e\xff\xa7\x7e\x5d\xe1\xf4\x4b\x75\
-\xfa\x75\x74\xc6\xce\x57\xbf\xba\xf5\x89\x0b\x71\xe6\xec\xe5\xf4\
-\x15\x8c\xde\xe0\x54\xcc\xb1\xf5\xf1\x98\x90\xb2\x10\x47\x8b\x4f\
-\x3a\x02\xaa\x7e\xfd\x05\xa3\x85\xf9\x91\x73\xad\x98\x44\x8d\xf8\
-\xa4\x33\xd0\x15\x13\xba\xb6\x1c\x98\x19\x25\x5b\xbe\x17\x46\xa5\
-\x45\xd5\xaf\xbf\x88\x4f\xda\x00\xc7\x61\xe4\xf6\x26\xaa\x5f\xd7\
-\x7b\x55\x75\x68\xb4\xcd\xd7\x30\x6a\xc3\x7b\xb0\x58\x2c\x09\x46\
-\x44\x06\x51\x46\x23\xd0\xea\x04\x56\x2f\xc4\x27\x2d\x30\xf1\xeb\
-\x27\x00\xb7\x62\x62\x03\x47\x61\x3e\x5c\x07\x01\xa7\x8b\x4f\xae\
-\x57\xbf\x46\x0b\x41\x9a\x12\x08\x04\x92\x16\x2c\x58\x40\xbb\xce\
-\xed\x78\x63\xce\x1b\x8c\x5b\x36\x0e\x75\xa4\x67\xdb\x35\x6e\xc7\
-\x2d\x5d\x63\x67\x0e\xc7\x93\x85\x0b\x1b\x5a\x2f\x60\x39\x48\x4a\
-\x4a\xe2\x8e\x3b\xee\x40\xb5\x4c\x31\x7b\xab\xd4\xaf\x0b\x31\x49\
-\xa2\xdf\x8a\x4f\x46\x00\x03\x31\x1e\xe0\xa1\x18\xa3\x10\xe0\x59\
-\x42\xc7\xc1\x46\x45\x64\x03\x26\x93\xfc\x67\xa7\xed\x7d\xa7\x3d\
-\x94\x20\x7a\x01\xb0\x42\x7c\x72\x0e\x90\x0e\xb4\x71\x2f\x2a\x3e\
-\x19\x0b\x5c\xaf\x7e\xdd\xe4\x6a\x1b\x84\x29\xad\x1b\x29\x82\xf8\
-\x01\xa6\xb4\xed\xcf\x11\xed\xa1\x4a\x65\x05\x18\xa7\xd6\x31\x84\
-\x6b\x25\x3f\x8a\x53\xc4\x42\x7c\xb2\x37\xa6\xb2\xd9\x15\x11\xe3\
-\x77\x8b\x4f\x9e\x55\xbf\x3e\xeb\x6a\x1b\x86\x31\x58\x83\xe2\x93\
-\x9b\x31\xf9\x17\x21\x6f\xf8\x66\xf1\xc9\xe9\x56\xa4\xc8\x62\xb1\
-\x58\x2c\xd5\x1a\xf1\xc9\xf1\x18\x8d\xda\x3c\xe0\x38\xf5\x9b\x18\
-\x75\xf1\xc9\x3a\xcc\x87\x6a\x3b\x4c\x19\xcf\xef\xc4\x27\xbf\x63\
-\xe2\xba\x33\x38\x64\x64\x6b\x96\x9d\x2a\xdc\x46\x07\xcf\xaf\x9e\
-\x5d\xfe\xf9\xfe\xd4\x4d\xcb\x37\xb1\x39\x37\x9c\x00\x7a\x7e\xdb\
-\xf3\xb9\xa3\xfb\x1d\xd4\x4b\xaa\x47\xa2\x29\x28\x10\x26\x4f\x6e\
-\xc6\xe5\x97\x47\xab\x47\x60\x89\x45\x20\x10\x80\xd2\x8b\x45\x44\
-\x63\x28\xc6\x08\x84\xb0\x97\xaf\x2c\x5c\x8d\x39\x29\xdd\x4c\xd8\
-\x53\xd8\x0d\x13\x97\x97\x82\x49\x72\x1d\x05\xb4\x06\x2e\x01\x2e\
-\xc2\x78\xf7\x2e\x71\xfa\x9e\x01\x7c\xe8\x9a\x6f\x36\xa6\x22\xda\
-\x61\xce\xeb\x7c\x4c\x61\x8a\x6e\x84\x4b\xd6\x4e\xc5\xc8\xee\x95\
-\x26\x4d\x93\x0e\x85\x62\xe8\x1b\x30\xf9\x13\x17\x02\x0d\x80\x67\
-\xc4\x27\xeb\xd4\xaf\xef\x47\x8c\x49\xc2\x18\x84\xf3\x9d\xf7\xd5\
-\x09\x93\xf8\xf6\x94\x35\x02\x2d\x16\x8b\xc5\x52\x6d\x71\x32\x39\
-\xfd\x98\x24\xc3\xab\xd5\xaf\x85\x1e\x5a\xf5\xeb\xcf\xe2\x93\xee\
-\x98\x3a\xef\x21\x69\xb0\xa3\x08\x69\xb1\x9e\x57\x58\x65\xec\xc7\
-\x82\xe3\x0a\x58\xc4\x22\xf3\x31\x0b\xec\x5b\x7f\x5f\x1e\xee\xf9\
-\x30\x47\xb7\x0c\xc5\xe5\x27\x9e\x8c\x8c\xc6\x64\x67\x7b\x39\xf9\
-\xe4\x4d\xa5\x77\xb6\x44\x52\x11\x23\x70\x11\xe1\x0a\x66\xfb\x8a\
-\x4f\xf6\x56\x7f\x99\x24\x60\xbc\x98\x02\x10\x1f\xa8\x5f\x73\xc5\
-\x27\xc9\x18\xa3\x2f\xa4\x31\x74\x85\xfa\xf5\x67\x28\x3c\x1e\x3e\
-\x0f\xe8\x27\x3e\x39\x44\xfd\x3a\x17\x18\xe2\x9a\xeb\x16\xf5\x6b\
-\xa1\xfe\xb2\xf8\x24\x4d\xfd\xba\x0d\xe8\x23\x3e\xf9\x86\xf0\xc9\
-\xc4\xa5\x51\x12\x58\x8a\xe0\x18\xa2\x21\x03\x70\x25\xd0\x45\xfd\
-\xba\x4b\x7c\x72\x38\xf0\xa7\xd3\xfe\x14\xc6\x93\x19\xc9\xf3\xc0\
-\x83\x18\x63\x71\x1d\xd0\x18\xe8\x6d\x8d\x40\x8b\xc5\x62\x89\x42\
-\x7a\x7a\xfa\x18\x60\xc3\xe0\xc1\x83\x6f\xae\xea\xbd\xd4\x45\xc4\
-\x27\x4d\x31\x31\x51\xe7\x02\x0f\x01\x2f\xa8\x5f\x8b\x19\x02\xea\
-\xd7\x1d\xc0\x4d\xe2\x93\xaf\x9c\x7e\xa1\x38\xa8\xa8\xec\xdf\x70\
-\x7f\x8e\x6e\x71\x34\x37\x75\xbd\x89\xc6\xc9\x8d\x13\xb2\xf7\x58\
-\xb4\x6a\x95\xc7\x6d\xb7\xad\xa0\x6d\x5b\x7b\x1c\x5c\x49\xb4\xc4\
-\x18\x80\x60\x12\x40\xca\xaa\x42\xbd\x5c\xfd\x9a\x1e\x7a\xa1\x7e\
-\x0d\x38\x37\x1b\x60\x8c\xca\x57\xc4\x57\x98\xac\xdc\xd2\x35\xee\
-\x10\xf1\xc9\x02\xc2\x3a\xc2\x39\x98\xc2\x19\x85\xa8\x5f\xf7\xc4\
-\x0d\xec\x2e\xb2\xf1\x93\xfa\x75\x97\x33\xe7\x34\xf1\xc9\x06\xcc\
-\xd1\xf3\x7e\x31\x8c\xdd\x4f\x9c\xbf\x9f\x5d\xe2\x93\x35\xc0\x41\
-\x40\x73\x6b\x04\x5a\x2c\x16\x4b\x74\x1a\x01\x3b\x4a\xed\x65\x89\
-\x3b\x4e\x40\xfb\x97\x18\xaf\xc5\x29\xea\xd7\x52\x13\xfe\xd4\xaf\
-\xff\x05\xfe\x2b\x3e\x11\x8c\x64\x48\x6f\x56\x9e\x78\x2d\x3b\x5a\
-\x9d\xc8\xc1\x9f\x3f\xc2\x5c\xb6\xf3\x5f\xde\x7e\x65\xc4\x2b\x1c\
-\x70\xc0\x01\x89\x7d\x03\x31\x68\xdd\x3a\x87\x2b\xaf\x2c\x8b\x9c\
-\xac\x25\x44\x48\x27\x70\xfc\xf8\xf1\xdd\xa0\xdc\xb5\x83\xfb\xba\
-\x9e\xcf\x57\xbf\x96\x35\xd1\x2b\x5a\xb9\x38\x77\xda\x78\x5a\xc4\
-\xb5\x50\x42\x46\x63\x8c\xb7\x30\xe4\x31\xdc\x81\xd1\x2d\x8c\x17\
-\xee\x3d\x44\x1a\xb4\xdb\x08\xc7\x1f\xa6\x52\xb4\x7a\x59\x50\xfd\
-\x45\x62\x2a\x43\x59\x49\x62\x8d\x40\x8b\xc5\x62\xb1\x54\x1b\xc4\
-\x27\x37\x02\xaf\x01\xbf\x62\x8e\xdd\xd6\x97\x32\xa4\x08\x8e\xb7\
-\x63\x01\xb0\x40\x84\x26\xc0\xe1\x3a\x6e\xf4\xf3\x22\x92\x94\x94\
-\x94\xf4\x52\x66\x66\x66\x83\xaa\x30\x02\x57\xad\xaa\x4f\xf3\xe6\
-\x79\xd4\xaf\x6f\x13\xce\xcb\x8b\xd7\xeb\x45\x44\x62\xe9\x04\x16\
-\xc3\xb9\x11\x18\x80\x49\x00\x09\xf1\x4e\x39\x96\x8c\xe6\xaa\xfd\
-\x0b\x38\x00\xe3\x59\x3c\x5b\xfd\x3a\x23\x62\xcd\x06\x40\x8e\xfa\
-\x55\xc5\x27\x4b\x80\x03\x31\xd9\xbf\x27\x03\x3f\xc5\x58\xc7\xad\
-\x90\xdd\xa0\x0c\xfb\x9a\xef\x7a\x1e\x2a\x9c\x81\xf8\x24\xcd\x59\
-\x0f\x8c\x50\xf6\xaa\x52\xe6\x29\xf4\xa8\x17\x33\x02\x45\xe4\x3c\
-\xbc\xde\x74\x3c\x35\xac\xba\x61\x41\x41\x01\xf9\xf9\xd7\xaa\xea\
-\x8f\x55\xbd\x15\x8b\xc5\x62\xb1\x94\x0f\xf1\x49\x43\xcc\x07\xf5\
-\x95\x98\x98\xaa\xc7\xd5\x1f\xbf\xfa\xad\xaa\x1a\x4c\x4e\x4e\x9e\
-\x9a\x99\x99\xd9\xe7\xbc\xf3\xce\x2b\xb3\x41\x11\x2f\x1e\x7e\xf8\
-\x40\x3a\x77\xde\xc5\xc3\x0f\x2f\xad\xec\xa5\xeb\x12\x5f\x38\x06\
-\x60\x7b\x8c\x57\x2e\xc4\x77\x11\x3a\x81\x15\xe1\x3d\xe0\x0c\xe7\
-\xf9\x70\xf1\xc9\x6b\xc0\x0c\x8c\x61\xd8\x07\xb8\x0e\xe3\x21\x0c\
-\x60\x4a\xd0\x3e\xef\xf4\x1d\xe5\x54\xb6\xf9\x0d\x73\x4c\x5c\x5f\
-\xfd\x1a\xaa\x04\xe2\x2e\x5c\xf1\xae\xf8\x64\x12\xb0\x58\xfd\x3a\
-\x22\xc6\x1e\xfe\xc4\x48\xdb\x1c\x0a\x1c\xe6\x64\x25\xff\x40\xb8\
-\xa4\x2f\x98\x44\xa9\x32\x13\xcd\x13\xd8\x90\xfc\xfc\xfd\x79\xdc\
-\x5f\x9e\x79\xaa\x9e\x27\x7d\x50\xd4\x55\x6a\xb1\x58\x2c\x7b\xc2\
-\xc5\x54\x2c\x18\xdd\x52\x4e\xc4\x27\x07\x03\x63\x30\xf1\x55\xe7\
-\xc4\x90\x79\xd9\x63\xf2\xf3\xf3\x7f\x99\x36\x6d\xda\xb1\x84\xcb\
-\x8c\x55\x0a\xbf\xfe\xda\x94\x05\x0b\x1a\xf2\xc8\x23\xd6\x00\x4c\
-\x30\x91\x22\xf0\x59\xc0\x63\x18\xa3\x6c\x8f\x50\xbf\x7e\x29\x3e\
-\x79\x11\xb8\x1b\xa3\x37\x1a\xcb\x50\x03\x78\x09\x13\x9b\x7a\x39\
-\xe6\x88\xf6\x4e\xe7\x01\x45\x8d\xb4\x8f\x31\x09\x28\xf5\x80\x93\
-\x9c\xc7\x84\x58\x73\x3b\xb1\x89\x03\x80\x6f\x30\x19\xf1\x17\x3a\
-\x8f\x10\x13\x30\xa5\x7c\xcb\x4c\xec\xe3\xe0\xbb\x1e\x2c\xcf\x3c\
-\x55\xcf\x93\xe5\x7a\xdf\x16\x8b\xc5\x52\x22\x83\x07\x0f\xde\x59\
-\x7a\xaf\xea\x89\xf8\xc4\x8b\x91\x9e\xd8\x58\x8e\x38\xa8\xaa\xa4\
-\x3f\xb0\x1d\x73\xcc\xb6\x22\x81\xeb\x4c\x59\xb7\x6e\x5d\xbd\x2d\
-\x5b\xb6\xd0\xac\x59\xb3\x04\x2e\x53\x94\xf7\xdf\xdf\x9f\xe3\x8e\
-\xcb\xa6\x53\xa7\x78\x86\x87\xd5\x0d\xca\xa0\x13\xf8\x06\x61\xd1\
-\xe5\x3c\x4c\xe6\x6b\xe8\xb1\xd0\x49\x1c\x8a\xe4\x33\x8c\x17\x0f\
-\x20\xf4\x77\xbe\x16\x78\xd2\x79\xfe\x67\xb1\x11\x80\xfa\xf5\x3e\
-\xf1\xc9\x48\xcc\x0d\x62\x07\xc2\x99\xb6\xb3\x30\x82\xd2\x01\xa7\
-\x5f\x01\xd0\x5f\x7c\x92\x0e\x9c\x45\x51\xb1\xe8\x31\xae\xf9\x32\
-\x9d\x1b\xa0\x33\x31\xc6\xa2\x07\x23\x52\x0d\xa6\x9c\x6f\x68\x3f\
-\x93\x5c\x63\x66\x8b\x4f\xba\x02\xff\x04\x0e\x21\x2c\x16\xfd\x9b\
-\xfa\xf5\xcb\x88\x2d\xbf\x8b\xa9\xb7\x1c\xf9\x3f\xe0\x6d\xcc\x0d\
-\x57\x81\x68\x44\xb2\x95\x88\x5c\x0e\x7c\x46\x76\x0d\xbb\x01\x6e\
-\x2a\x00\x17\xa9\xea\xb8\xaa\xde\x8a\xc5\x62\xa9\x9e\x38\x62\xd1\
-\xef\xa8\x6a\x64\x89\xa6\x1a\x8f\x93\x4d\xfb\x34\x70\x1a\xe6\x43\
-\x27\x19\x73\x34\x35\x1d\x18\x1e\x45\x3b\x2c\xde\xeb\xb7\xc2\xe8\
-\xab\x01\xcc\x50\xbf\xfe\x50\x8e\xb1\x49\x80\x27\xf4\x21\x1a\xb7\
-\x3d\x09\x37\x01\x43\x55\x69\x6a\x5e\x4b\x43\x11\xd9\xea\xf7\xfb\
-\x93\xfa\xf4\xe9\x13\xcf\xa5\x62\x32\x69\x52\x33\xee\xbf\xbf\x33\
-\xc3\x87\xcf\xa5\x7b\x77\x9b\x67\x54\x5e\x72\x72\x72\x70\x7e\x56\
-\xe7\xa8\x6a\x79\x13\x43\x2c\xa5\x50\xb3\xe2\xfe\x2c\x16\x8b\xc5\
-\x52\x0c\xf1\xc9\x89\x98\xc0\xf5\x5b\x81\x2e\x84\xab\x02\x24\x63\
-\x34\xf3\x86\xc4\x18\x1a\x4f\x0e\xc0\xe8\xf9\xf9\x31\xe2\xb9\x65\
-\x46\xfd\x1a\x8c\xb7\x01\x18\x75\x1d\xd5\x9d\x5e\xaf\x77\x76\x66\
-\x66\xd4\x2a\x5f\x71\x67\xe7\xce\x24\x5e\x78\xa1\x1d\x67\x9e\xb9\
-\xc9\x1a\x80\x96\x6a\x89\xcd\x0e\xb6\x58\x2c\x96\x28\xd4\x14\x9d\
-\x40\xc7\x03\xf8\x29\x61\xbd\xb2\xf1\x18\xc1\xd8\xc5\x18\xc3\xec\
-\x64\x8a\x97\x98\x0a\x8d\x6d\x0c\xb4\xc2\x94\xdb\x2a\xd3\x59\xa5\
-\xf8\x64\x7f\x20\x57\xfd\x9a\xb5\x87\x5b\x0f\x65\x35\x26\x47\x8a\
-\xe4\x8a\x4f\x9a\x03\x4d\x31\x7a\x6d\x71\x35\x0e\x03\x81\xc0\xcf\
-\xd3\xa6\x4d\x3b\x98\x4a\x88\x0b\x7c\xe3\x8d\x03\x08\x06\x85\xbb\
-\xef\x5e\x96\xe8\xa5\x2c\x96\x0a\x61\x8d\x40\x8b\xc5\x62\x89\x4e\
-\x4d\xd1\x09\x7c\x04\x53\x32\x0d\xe0\x7f\xc0\xe9\x2e\x51\xe5\x35\
-\xc0\x54\xf1\xc9\x4b\xee\x01\xe2\x93\x7e\x98\xec\xc5\xf6\x4e\x93\
-\x3a\xe5\xd6\x6e\x50\xbf\xce\x76\xf5\x5b\xea\xf4\xd9\x80\x89\x83\
-\x1a\x09\xb4\x75\xae\xfd\x00\x5c\xae\x7e\xcd\x76\x62\x9f\xdc\x19\
-\x8a\x37\x3a\x52\x2f\x00\x3e\xf5\xeb\x50\xf1\xc9\x0c\x4c\xd9\xac\
-\x5c\x4c\x09\xaf\xb1\x18\x59\x8b\x7f\x01\x17\x3a\x71\x8c\xb7\x63\
-\x04\x9f\x43\xa5\xb4\xf2\x9d\xaa\x0a\xb7\xec\xa1\xc8\xae\x9b\x29\
-\x4b\x96\x2c\xb9\x73\xf7\xee\xdd\x34\x68\x50\x16\x55\x8e\x8a\xb1\
-\x7d\xbb\xd7\x39\x0a\x5e\xc6\x5e\x7b\xe5\x97\x3e\xc0\x12\x95\x3d\
-\xd4\x09\xb4\x94\x82\x3d\x0e\xb6\x58\x2c\xdb\xc8\x62\xca\x00\x00\
-\x20\x00\x49\x44\x41\x54\x96\x9a\xcd\x31\xae\xe7\xcf\xc7\xa8\xaa\
-\x91\x17\x7a\xee\x18\x67\x5f\x62\x8c\xbb\x9d\x98\x1a\xa6\x41\xe0\
-\x68\x8c\xc1\xd8\x2e\xca\x1a\xcd\x30\x1e\xc6\xfd\x5c\x6d\x67\x02\
-\x0f\x44\xe9\x5b\x1a\x5e\x4c\x16\xe3\x81\x11\xed\x6f\x62\xb2\x2a\
-\xf7\xc1\x18\x9d\x53\x9d\xbe\x7d\x81\xc9\x8e\x0e\x5b\x3c\xf8\xb5\
-\xa0\xa0\x40\xe6\xce\x9d\x1b\xa7\xe9\xa2\xd3\xb8\x71\x3e\x63\xc6\
-\x64\xd2\xa7\x4f\x59\xaa\x94\x59\x4a\xc2\xeb\xf5\xe2\xf1\x78\x2a\
-\x5d\xd6\xa7\x2e\x60\x8d\x40\x8b\xc5\x62\xa9\xd9\x74\x73\x3d\x5f\
-\x50\x52\x47\xf1\x49\x13\x4c\x9d\x5d\x80\x8d\xc0\x7e\xea\xd7\x3e\
-\x84\x85\x67\x53\x81\xe7\xa2\x0c\x4d\x06\xbe\x02\x5a\x03\x47\xb8\
-\xda\x4f\x07\x50\xbf\x0e\xc6\x18\x91\x21\x86\xa9\x5f\xc5\x79\x0c\
-\x8d\x98\x2b\x09\xd8\x04\x0c\xc4\x18\x95\x8f\x8a\x4f\x7a\x13\xae\
-\xfd\x3b\xc5\xd9\xd7\x31\x18\xcf\x20\x18\x83\xf1\x8e\x92\xde\x5b\
-\x59\x51\xd5\xf5\xc9\xc9\xc9\xcb\x13\x15\x17\x98\x9b\xeb\x61\xd1\
-\x22\xa3\x56\x96\x9a\x1a\x37\x99\x43\x8b\x25\x21\xd8\xe3\x60\x4b\
-\xa5\xe3\x28\xbf\xf7\xc1\x1c\x09\xed\x53\x72\xef\x2a\x61\x37\x26\
-\xe5\x7f\xbc\xaa\x6e\xab\xea\xcd\x58\xaa\x8c\x9a\xa2\x13\xe8\x8e\
-\x99\x2b\xed\x7f\xfa\x21\x98\x63\x6e\x30\xde\xb6\xa7\x5c\x35\x50\
-\x03\x84\x13\x49\xa2\xf1\x8c\xfa\x75\x03\xb0\x41\x7c\xb2\x19\xd8\
-\x9b\xa2\x9e\xc1\xf2\xf0\xb8\xfa\xf5\x0b\xe7\xf9\x5a\xf1\xc9\x2d\
-\xae\x6b\x01\xe0\x25\x67\x5f\x7b\xb9\xda\x63\xed\xab\xdc\x04\x02\
-\x81\x09\xd3\xa7\x4f\x1f\x70\xdd\x75\xd7\x25\x97\xde\xbb\xec\xa8\
-\xc2\x93\x4f\x76\x64\xee\xdc\x46\x8c\x19\x33\x93\xe4\xe4\x9a\xf0\
-\xeb\x63\xa9\xcb\x58\x23\xd0\x52\xa9\x88\x48\x6b\x92\x93\x3f\x25\
-\x10\x38\x81\x7d\x9a\x07\x68\x7d\x40\xf5\xd3\x30\xcb\xde\x02\x2b\
-\x96\xa5\xe0\xf5\xae\x17\x91\xfe\xaa\x3a\x71\x4f\xa6\x13\xe1\x30\
-\x8a\x7a\x49\xb6\x01\x7f\x03\x7f\xa8\x52\x27\x5c\x05\x22\x34\xc5\
-\xc9\x5e\x55\x0d\xeb\x64\x55\x67\x6a\x90\x4e\xe0\x1c\x8c\xc8\x2c\
-\x18\xb1\xdc\xd9\x25\xf4\x75\x1b\x6d\x87\x38\x8f\x48\x0e\x10\x9f\
-\x48\xc4\xb1\x72\xb6\xfa\x75\x9e\xeb\x75\xc8\xf0\x4c\x2a\xef\x66\
-\x31\x9a\x65\xdf\x47\xb4\xb5\x72\x3d\x3f\x19\x57\x49\x2c\xf7\xbe\
-\x2a\xb0\x56\x2c\xa6\xcc\x99\x33\x67\x60\x41\x41\x41\x5c\x8b\x63\
-\xbd\xfd\x76\x1b\x26\x4f\x6e\xca\x1b\x6f\xfc\x65\x0d\xc0\x38\xe1\
-\xd2\x09\x2c\xe9\xf7\xda\x52\x41\xac\x11\x68\xa9\x34\x44\x24\x89\
-\xe4\xe4\x71\xb4\xda\xbf\x07\x1f\x7e\x0e\xbd\x8f\x8c\xeb\x5d\x78\
-\x5c\xd9\xb0\x1e\x6e\xfb\x67\x0b\x7e\xfa\xbf\xef\x44\xa4\xab\xaa\
-\x2e\xdb\x83\xd9\xce\x04\x86\x62\xd4\xeb\x83\x98\xf8\xaa\x14\x4c\
-\x6d\xd3\xbe\xaa\xcc\x2b\x69\x70\x45\x10\xe1\x11\xe0\x1e\x55\x2a\
-\x4f\x11\xb7\x64\x3c\x98\xec\xd5\xc4\x45\xe2\xd7\x5d\x7e\x26\x6c\
-\x04\x3e\x24\x3e\xf9\x4a\xfd\xba\xdb\xdd\x41\x7c\x92\xe6\x24\x56\
-\x2c\x71\x35\xff\x04\xdc\x16\x6d\xc2\x28\x71\x85\x79\x11\xaf\xa3\
-\xdd\xbc\xb9\xdb\x4a\x32\x0e\x03\xea\x2f\xe6\x61\x77\xef\xeb\x75\
-\x20\x3d\xca\xb8\x68\xf5\x5c\x2b\xca\x94\xdc\xdc\x5c\xef\xa2\x45\
-\x8b\x38\xe8\xa0\x83\xf6\x78\x32\x55\x63\x00\x8e\x1c\xb9\x1f\x4f\
-\x3c\xb1\x98\xc3\x0e\xdb\x1e\x87\x2d\x5a\x42\x04\x02\x46\x83\xb9\
-\xaa\xf7\x51\x1b\xb1\x31\x81\x96\xca\xa4\x3f\xaa\x3d\xf9\xe2\x3f\
-\x5e\x7a\x1f\x59\xd5\x7b\x29\x99\x16\x2d\xe1\x93\xaf\x3c\xb4\xef\
-\x98\x8c\xc7\xf3\x6c\xe9\x03\xca\xc4\x11\xaa\xa4\x61\x8e\xc0\x07\
-\x00\x07\x51\xbe\xa2\xe6\xe5\xc1\x0b\xd4\x3a\x41\x64\x4b\x54\x9e\
-\xc3\x78\x59\x01\x0e\x06\x66\x88\x4f\xfe\x29\x3e\x39\x4e\x7c\x72\
-\xb9\xf8\xe4\x5d\x60\x9a\x73\x7d\x3e\xe1\x7a\xa5\x27\x3b\xfd\xff\
-\x56\xbf\xfe\x85\xc9\x84\xbe\x10\xe8\x57\xc1\x7d\xac\x75\x3d\x3f\
-\x59\x7c\x72\x91\xf8\xa4\x8f\x13\x87\x58\x1a\x13\x09\x1b\x79\x97\
-\x62\x8e\x9a\x17\x3a\x0f\x01\xae\xa7\xa8\x37\x7d\x8f\x50\xd5\x85\
-\x5e\xaf\x77\x4b\x3c\xe2\x02\x03\x01\x0f\x8f\x3d\x76\x20\xa3\x47\
-\xb7\xe2\x89\x27\x96\x70\xe6\x99\x9b\xe2\xb0\x43\x8b\xa5\x72\xb0\
-\x46\xa0\xa5\x32\x39\x96\xee\x87\x05\xe9\xd2\xb5\xaa\xf7\x51\x36\
-\x52\x52\xa0\xdf\x15\x5e\xbc\xc9\x27\x95\xde\xb9\xec\xa8\xb2\x43\
-\x95\x51\x98\x82\xe2\x47\x8a\x14\xf5\x9a\x88\x70\x98\x08\x4f\x88\
-\x30\x52\x84\x67\x44\xa2\x1e\xd9\x21\xc2\xe9\x22\x3c\x27\xc2\x68\
-\x11\xde\x12\xa1\x9f\x08\x22\xc2\x69\x98\x98\x4b\xaf\x33\xcf\x13\
-\x22\xdc\xe3\x8c\xf1\x88\x70\xaa\x08\xcf\x8a\x30\x4a\x84\xe1\x22\
-\xdc\x2a\x42\x4a\xc4\xdc\x47\x3b\xe3\xbc\x22\x0c\x10\xe1\x5d\x11\
-\xde\x14\xe1\xb8\x28\xfb\xf0\x3a\x73\x7c\xe4\xec\xf7\x30\x11\x8e\
-\x17\xe1\xe1\xd2\xbe\x17\x22\xa4\x88\x70\xbd\x08\xef\x38\x6b\x5c\
-\x17\xf9\xfd\xa8\x2a\xd2\xd3\xd3\xc7\xa4\xa7\xa7\xbf\x5d\xd5\xfb\
-\x28\x0d\xf5\x6b\x0e\x70\x09\x26\x8e\x15\xcc\xcd\xc5\x70\x4c\x82\
-\xc5\x67\x18\x03\x2a\xd9\xe9\x9b\x0b\x0c\xc2\xc8\xb4\x24\x01\x5f\
-\x03\x9b\xc5\x27\x3b\x81\x95\x18\xa1\xe7\x36\x15\xdc\xca\x6a\xd7\
-\x1e\x3a\x3a\x73\xff\x0c\x94\xfa\x07\xaf\x7e\xfd\x1b\xb8\x17\xe3\
-\xed\x49\x03\x7e\x05\x36\x63\xe2\x73\xe7\x61\xea\xb5\x36\xad\xe0\
-\xbe\xa2\x52\x50\x50\x30\x69\xc6\x8c\x19\x7b\x14\x8e\xb1\x7d\xbb\
-\x97\xdb\x6f\xef\xc2\xd4\xa9\x4d\x79\xed\xb5\xbf\x38\xf3\xcc\x3d\
-\x96\x4e\xb4\x58\x2a\x15\x6b\x04\x56\x33\x44\x38\x56\xa4\x48\xf6\
-\x5d\xed\x21\x29\xa9\x35\xed\x3b\x56\xdf\x23\xe0\x68\x1c\xd0\x16\
-\xf2\x03\x2d\x12\x34\x7b\x3d\x60\x2b\xae\x63\x34\x11\xee\xc4\xd4\
-\xad\xbc\x1a\xe3\x99\xb9\x0a\xc8\x10\xa1\xaf\x7b\xa0\x08\x6f\x01\
-\x3f\x62\x0a\x99\xaf\xc4\x1c\x31\x0f\xc7\x1c\x33\x37\xc3\x7c\x60\
-\x0a\xa6\xc8\x78\x3b\xc2\x1f\xec\x2d\x31\xfa\x6c\x9d\x31\x1a\x72\
-\xed\x80\x97\x81\xc9\x11\xc6\xd7\x31\xc0\xe3\x98\xda\x93\xaf\x60\
-\xbc\x8a\x97\x01\x13\x45\x38\xd1\xb5\x0f\x0f\xf0\x7f\x98\xfa\x9d\
-\x9d\x80\x43\x31\x75\x2e\xef\x87\x92\x8d\x40\x11\xf6\xc7\x78\xa8\
-\xde\xc2\xc4\xaa\xb5\x74\xd6\x9b\x28\x42\x75\xf8\x3d\x69\x84\xc9\
-\x96\xad\xf6\xa8\x5f\xe7\x60\x7e\x17\x6e\x03\xc6\x61\x3c\x83\xd9\
-\xc0\x5c\xe0\x13\xe0\x4a\x57\xdf\x89\x98\xaa\x22\x1f\x62\x8c\xb6\
-\x3c\x8c\xc1\x35\x15\xe3\x55\x7c\xcb\x35\xf5\xef\x18\x09\x99\x5f\
-\x23\x96\xfc\x5f\x64\xbb\x73\x84\x7c\x0e\xf0\x1a\xe6\x77\xe2\x17\
-\xe7\x11\x3a\xfa\x9d\xe6\xbc\x9e\x44\x14\xd4\xaf\x6f\x61\xbc\x7d\
-\x63\x09\x7b\x36\x57\x63\x0c\xc9\x87\x81\x6f\x4b\xfd\x46\x94\x83\
-\x82\x82\x82\x49\xd3\xa7\x4f\xdf\x23\x23\x70\xf3\x66\x2f\x3b\x77\
-\x26\xf1\xee\xbb\x73\xe9\xd5\xcb\xe6\x90\x25\x82\x90\x4e\xe0\x05\
-\x17\x5c\xd0\xad\xf4\xde\x96\xf2\x62\x63\x02\x01\x11\x5a\x60\x64\
-\x16\x9a\x62\x62\x53\xe6\xab\x16\x8b\x81\xa9\x8c\x7d\x9c\x8d\x29\
-\x2e\x7d\x6a\x65\xaf\x5d\x39\x58\x99\x27\x00\x11\x5a\x01\x97\x63\
-\x3e\xb4\xdf\x57\x35\xb1\x2e\x8e\xc7\xef\x05\x8c\x84\xc7\x43\xaa\
-\xa8\x63\x98\x7d\x09\xbc\x2e\xc2\x77\xaa\xe4\x88\x70\x01\x70\x33\
-\x70\x83\x2a\xc3\x5d\xf3\x36\x00\xf2\x54\xf9\xd2\x99\xeb\x20\x55\
-\x06\x45\x2c\x9f\x05\xa4\xa9\xb2\xcb\x35\xee\x14\x8c\x06\xdc\x15\
-\x18\x83\xc1\x4d\x23\xa0\xb5\x2a\xb9\xce\xfc\x6b\x30\x1e\x9b\xd0\
-\x07\xf9\x95\x98\x5a\xb5\xfd\x55\x19\xed\xcc\xd7\x0d\x63\x3c\x94\
-\xc6\xcb\x98\x60\xff\xd6\xaa\x6c\x70\xc6\x1e\x8e\x31\x82\xaf\xc7\
-\x14\x39\xb7\x94\x11\xf5\x6b\x3e\x46\x6b\xef\xcd\x32\xf4\x5d\x06\
-\x5c\x5b\x86\x7e\xfd\x63\xb4\x5f\x1c\xa3\x7d\x15\x70\x67\x8c\x6b\
-\xd7\x97\x61\xbd\x3f\xa0\xe8\x0d\x4f\x02\x99\xb2\x75\xeb\xd6\x94\
-\xd5\xab\x57\xb3\xff\xfe\xfb\x97\xde\xdb\x21\x37\xd7\xc3\x82\x05\
-\x0d\x39\xf4\xd0\xed\xb4\x6d\x9b\xc3\xc7\x1f\xcf\x46\xec\xbf\xb6\
-\x84\xe2\xe8\x04\x5a\xa7\x55\x02\xa8\xd3\xdf\x54\x11\x3a\x88\xf0\
-\x0b\xb0\x1e\xf3\x21\x38\x1a\x98\x09\xfc\x2d\xc2\x2d\x25\x0e\x8e\
-\xff\x5e\xf6\x07\x3e\x02\x06\xa9\x32\xb5\x32\xd7\xb6\x54\x1a\x0b\
-\x44\xc8\xc1\x78\x37\x5e\xc6\x78\x5d\xdc\x55\x16\xae\xc2\x78\x05\
-\x5f\x0d\x19\x86\x4e\xf6\xf0\x30\x4c\x45\x88\xee\x4e\xbf\xab\x81\
-\x05\x6e\x03\xd0\xe9\xbb\x3b\x34\x2e\x16\xaa\x04\x54\xd9\x25\xc2\
-\xde\x22\x1c\x2e\xc2\x99\x18\xef\x61\x16\xd0\x33\xca\x90\x0f\x55\
-\xc9\x0d\xcd\x8f\x11\xf9\xed\xec\xba\x7e\x21\x46\x70\xf8\x2b\xd7\
-\x1a\x73\x30\x55\x20\x62\x22\x42\x23\x4c\xec\xd7\x07\x21\x03\xd0\
-\x19\x3b\x0d\x63\x04\x9e\x5d\xd2\x78\x8b\x25\x0e\x4c\xf7\x78\x3c\
-\xb9\xe5\x89\x0b\x9c\x3d\xbb\x11\x03\x07\x76\xe7\xe1\x87\x0f\x24\
-\x10\x30\x96\x9f\x35\x00\x2d\x35\x99\x3a\x6b\x04\x3a\x9e\x92\x59\
-\x18\xd5\xfc\x8b\x30\xc1\xfa\xa9\x98\xe3\xac\x8f\x81\xfb\x2a\x79\
-\x4b\x17\x01\x8f\xa9\xf2\x65\x25\xaf\x6b\xa9\x3c\x6e\xc3\x78\x00\
-\x9f\xc0\x48\xc4\x5c\x08\xec\xeb\xba\xde\x09\xf3\x37\x99\x29\xc2\
-\xba\xd0\x03\x18\xe1\x5c\x0f\x55\x58\xe8\x8a\x91\x05\x29\x37\x4e\
-\xfc\xde\x07\x98\x1b\x9f\x3f\x81\x0f\x80\x57\x31\x1e\xbf\x96\x51\
-\x86\xfc\x12\xf1\x7a\x31\xe0\x0e\xf4\x6f\x0f\xfc\x4f\x95\xc8\xfa\
-\xae\x4b\x28\x99\xd0\x7b\xb9\xc6\xfd\x5e\x9d\xf7\xdb\x8d\xe2\xd5\
-\x24\xaa\x82\x8b\x31\x1e\x57\x4b\x2d\x44\x55\xf3\x3d\x1e\xcf\x1f\
-\x33\x67\xce\x2c\x35\xeb\x74\xe1\xc2\x86\xdc\x7f\x7f\x67\xae\xbf\
-\xfe\x10\xf6\xdb\x2f\x97\xf7\xde\x9b\x6b\x25\x60\x2c\xb5\x82\xba\
-\x7c\x1c\xfc\x2a\x46\xae\xe3\x08\x55\xd6\xbb\xda\x67\x03\xb3\x45\
-\x8a\x7a\x59\x44\xe8\x8a\x31\x10\xf7\x02\x56\x00\xbf\xb8\x8f\xd4\
-\x9c\x3e\x27\x62\x32\xef\x36\x60\x54\xf5\x0f\x01\x46\x61\x54\xf6\
-\x1b\x00\xd3\x31\x1f\x70\x87\x03\xd3\x55\xc9\x74\xc6\xb5\xc0\x18\
-\x05\x2d\x45\x38\x1a\xf8\xbd\x34\x8f\x8e\xa5\x46\xf2\xa3\x2a\xcb\
-\x80\x71\x22\x7c\x81\x89\x91\x7a\x13\x63\x6c\x80\xd1\x5e\x5b\x89\
-\x39\x96\x8d\xc6\x62\xe7\xeb\x2e\x2a\x9e\xf9\x7b\x1b\x70\x0d\xa6\
-\x5a\xc3\xbf\x55\xd9\x0a\x20\xc2\x5c\xa2\x9f\xd7\x97\x56\xf4\x74\
-\x1b\xd1\x05\x83\x1b\x96\x32\x2e\x64\x34\x3e\x87\xc9\x0c\x8d\x24\
-\x9e\x72\x20\x15\xa2\x06\xe9\x04\x5a\x2a\x48\x7e\x7e\xfe\xc4\x8c\
-\x8c\x8c\x23\x31\xf1\xb9\xc5\x58\xb8\xb0\x21\xef\xbd\xb7\x3f\x93\
-\x26\x35\xa3\x4b\x97\x9d\xbc\xf0\xc2\x42\x4e\x38\x61\x4b\x25\xef\
-\xb2\x6e\xe3\xf5\x7a\x43\x3a\x81\xb3\x4a\xef\x6d\x29\x2f\x75\xd2\
-\x08\x74\x62\x96\x4e\x03\x9e\x8a\x30\x00\x0b\x51\xe5\x6f\x57\xff\
-\x74\x4c\xfc\xcc\x52\x8c\xa7\xa6\x33\xb0\x54\x84\x73\x54\x0b\x03\
-\x98\xc1\xe8\x6e\xa5\x03\xa7\x00\x1d\x30\x41\xff\x3f\x01\x4f\x3a\
-\xaf\x7f\x07\x06\x63\x0c\xbe\xb7\x30\x1e\x9f\xeb\x31\x81\xf7\xc9\
-\xc0\x2a\xa7\xdf\x4f\x22\x5c\xaa\x8a\xfd\x6f\x53\x4b\x51\xe5\x2f\
-\x11\x1e\x05\x5e\x16\xa1\x8f\x2a\x13\x31\x9e\xe9\xbe\xc0\x52\xf7\
-\x11\x69\x14\x66\x03\xa7\x8b\x50\x2f\x74\x54\x1b\x85\x3c\x4c\x76\
-\x70\x72\x84\x97\xee\x28\x4c\xcc\xeb\xc8\x50\x83\x08\xcd\x30\x9e\
-\xb7\x8a\xe8\x65\xcc\x05\x6e\x16\x21\x4d\x95\x75\xae\xf6\xe3\x4b\
-\x19\xb7\x10\x93\xa1\xda\xd2\x86\x3f\x58\xaa\x90\x29\xab\x57\xaf\
-\x7e\x34\x3b\x3b\x9b\xa6\x4d\x8b\x26\x1f\x4f\x99\xd2\x94\x7b\xef\
-\x3d\x88\xae\x5d\x77\xf0\xd2\x4b\x0b\x38\xee\xb8\xec\x2a\xda\xa2\
-\xc5\xea\x04\x26\x8e\xba\x7a\x1c\xdc\xc5\xf9\xfa\x47\x19\xfb\x7f\
-\x8c\xf9\xb0\x3a\x58\x95\x83\x30\x12\x0c\xc9\x98\x2c\xb8\x48\x6e\
-\xc3\xc8\x32\xb4\x56\x65\x3f\xc2\xc7\x62\x3d\x31\x71\x5d\x5d\x55\
-\xe9\x00\xbc\x2a\xc2\x09\x98\x6c\xc8\xd7\x31\xc1\xfa\x1d\x31\xd2\
-\x1e\x47\x60\x32\x33\x2d\xb5\x9b\x74\x8c\xb6\xda\x13\xce\xeb\x61\
-\x98\x1b\x87\x8f\x44\xd8\x3b\xd4\x49\x84\x7a\x22\xf4\x17\x29\xbc\
-\x69\x7b\x15\x73\x74\xfb\x8a\x5b\xda\x45\x84\x9e\x4e\xb6\x2e\x18\
-\xaf\xa1\x17\x38\x4b\xa4\x88\x87\x6f\x32\x70\xa0\x08\xed\x9c\x31\
-\x29\x98\xcc\xde\x22\x12\x31\xe5\xe0\x55\x8c\xb7\xf0\x13\x47\x56\
-\xa6\x93\x08\x1f\x51\xb4\x9e\x6d\x31\x1c\xc3\xf4\x05\x8c\x01\x79\
-\xae\xfb\x9a\x08\x5d\x9c\xbf\x0d\x8b\x25\xd1\xfc\x4f\x44\x0a\x66\
-\xcd\x9a\xc5\xaf\xbf\x36\xe5\x9a\x6b\xba\xf1\xf7\xdf\x46\xcf\xbc\
-\x77\xef\xed\xa4\xa7\xcf\xe7\x83\x0f\xe6\x5a\x03\xd0\x52\x6b\xa9\
-\xab\x46\x60\x47\xe7\xeb\xca\xb2\x74\x56\x65\xaa\x2a\xd9\x00\x4e\
-\xb6\xe6\x0a\xe0\x7d\xe0\x64\xd7\x87\x6e\x88\xe5\xaa\x0c\x09\x79\
-\xf1\x54\x0b\xe5\x3f\x04\x13\xf3\x37\xdf\x69\x0f\x02\x3e\xcc\xd1\
-\xf1\x93\xae\xfe\xbf\x00\x5f\x60\x82\xff\x2d\x65\x61\xee\x2c\x78\
-\xfe\x69\x18\xff\x03\x04\x6b\x4e\x15\x36\x55\x72\x30\xc7\xa1\x27\
-\x39\xde\xc0\x2c\x8c\x27\xb0\x2b\xb0\x52\x84\xe9\x22\xcc\xc2\x24\
-\x6d\xbc\x8b\xf3\xf7\xaa\xca\x0c\xe0\x46\xcc\x91\xee\x7a\x11\xfe\
-\x10\x61\x19\xe6\x78\x39\x64\x28\xfe\x0b\x13\xf3\xf7\x0d\xb0\x43\
-\xa4\xd0\x63\x3d\x0a\xd8\x02\x2c\x16\xe1\x0f\xcc\xdf\x40\x0e\x61\
-\x31\xe1\xf2\xbe\x87\x45\x98\x04\x8f\x23\x31\xb2\x21\x7f\x61\xe2\
-\x1c\x5f\x83\xa2\xe1\x12\x51\x78\x06\x73\x83\xf5\x8d\x08\xcb\x44\
-\x98\x2a\xc2\x0a\x8c\xa0\xf1\xb1\x15\xd9\x4f\x3c\xa9\x29\x3a\x81\
-\x96\x8a\xa3\xaa\xdb\x93\x93\x93\xe7\x65\x66\x66\x22\x02\x07\x1d\
-\xb4\xb3\x30\xd6\xaf\x41\x83\x20\x3d\x7b\x5a\xd9\x17\x4b\xed\xa6\
-\x4e\x1e\x07\x63\x3e\x54\x81\xb2\x95\xd4\x12\xa1\x3d\xf0\x14\xe6\
-\x08\xb9\x05\x45\x8d\xe7\x96\x14\x55\xca\xff\x31\xc6\x34\xeb\x09\
-\x0b\xa9\x86\xe8\x8a\xf9\x00\xfe\x38\x22\xc3\xac\x2d\xd0\x34\xca\
-\x11\x9b\x25\xc4\x8a\x65\xf0\xe5\xa7\xf0\xd9\x88\x00\x8b\x17\x24\
-\xe3\xf5\x6e\x27\x3f\xbf\x31\x4d\x9b\x05\xb8\xf4\xca\x64\xfa\x5d\
-\x01\x47\x1e\x53\xd5\xbb\x0c\xf1\x29\x26\x14\x20\xda\xcf\xf2\x1d\
-\xcc\x31\xec\x2a\x00\x55\x26\x39\x49\x4b\xc7\x61\x12\x45\x02\x98\
-\xf0\x81\x49\x6e\xd9\x22\x55\xde\x13\xe1\xdf\x18\x5d\xb5\xf6\x98\
-\xdf\xe9\xf1\xa1\x3e\x8e\xa4\xcb\x51\x98\x63\xde\x34\x9c\xd8\x3e\
-\x55\xb2\x45\xe8\x82\xd1\x73\x6b\x00\x64\x00\x33\x30\x9e\x6a\x77\
-\xa9\xb1\x2f\x9d\xf6\xc8\x84\x8f\x61\x18\x1d\xba\x42\x54\x19\x2b\
-\xc2\xb7\x98\xdf\xe7\xd5\xaa\x64\x89\xf0\x21\x45\x6f\xb2\xb6\x61\
-\x2a\x54\xcc\x77\x8d\xcb\x05\x6e\x10\xe1\x55\xe0\x30\xcc\xdf\xd6\
-\x06\x60\xaa\x2a\x4b\xa3\x7c\xaf\x2a\x9b\x46\x18\xad\x46\x4b\x2d\
-\x26\x2f\x2f\x6f\x42\x46\x46\x46\xe7\xdb\x6e\xcb\x4e\x39\xf6\x58\
-\xeb\xf1\xab\x6e\x84\x74\x02\x27\x4c\x98\xd0\x8d\xe2\x35\xa7\x2d\
-\x7b\x48\x5d\x35\x02\x17\x38\x5f\x0f\xa4\x78\xf6\x63\x11\x1c\xcf\
-\xdf\x77\x18\x75\xfd\x47\x30\x59\x99\x2b\x80\x0b\x30\xc7\x79\x91\
-\xdf\xc3\x55\x31\xa6\x5a\x15\x25\xd9\xa3\xb1\xb3\x97\x99\x11\xed\
-\x33\x31\x9e\x9c\x58\xf1\x5e\x75\x93\xac\x8d\x30\xf6\x0b\x18\x3d\
-\x22\x40\xc6\x1f\xc9\x24\x27\x6f\x25\x3f\xff\x53\xe0\x33\xf2\xf3\
-\xa7\x00\x9d\xc8\xde\x72\x05\x1f\x0e\xbb\x8a\x77\xdf\x6c\xcf\x7e\
-\xad\xf3\xe8\x7f\x55\x0a\x97\x5c\x01\x5d\xa2\x16\xdd\xa8\x14\x54\
-\x59\x49\x0c\xaf\xb3\x63\x08\x4d\x8c\x68\xdb\x89\xb9\x99\x88\x75\
-\x43\x11\xea\xb7\x9e\x12\xa4\x58\x9c\xdf\xb7\x45\xce\xc3\xdd\xbe\
-\x05\xc2\x31\x81\x0e\xd3\x23\xfa\xac\x22\xca\xef\xb2\x63\x9c\x15\
-\x31\xd0\x44\x68\xa5\xca\x5a\x28\x4c\x74\x3a\x04\x23\x2c\xfd\x9a\
-\x6b\x5c\x3e\xd1\x13\x40\x70\x6a\x27\xc7\xbd\x7e\xb2\xc5\x52\x46\
-\xa6\x2c\x5a\xb4\xe8\xd6\xdc\xdc\x5c\xea\xd5\x8b\x9a\x1f\x62\xa9\
-\x62\xbc\x5e\x2f\x22\x52\x57\x4f\x2e\x13\x4a\x5d\x35\x02\x67\x60\
-\xbc\x77\xb7\x89\xf0\x41\x29\x99\xb8\x5d\x9c\xc7\xc0\x88\x60\xfa\
-\xb4\x38\xec\x63\x1e\x90\xaf\xca\xd0\x38\xcc\x55\x3b\xd9\xb9\x03\
-\xfe\x3d\x16\x3e\x1f\x19\xe4\x97\xf1\x1e\x44\x72\xd0\x82\xb1\xc0\
-\x28\x02\x81\x1f\x55\xd5\x9d\xbd\xba\x10\x13\x5f\xf7\x84\x88\xf4\
-\x66\xcd\xaa\x2b\x78\xfd\x85\x01\xbc\x34\xa4\x05\x5d\xba\xe6\xd1\
-\xff\xea\x14\x2e\xbe\x1c\x5a\x1f\x50\x25\x6f\xa5\x16\x33\xce\xa9\
-\xf0\xb1\x08\x23\xb8\x7e\x12\xc6\x20\xf4\x57\xe9\xae\x2c\x96\xb2\
-\x31\x25\x18\x0c\x7a\xe6\xcd\x9b\x47\xcf\x9e\xd1\xa4\x32\x2d\x96\
-\xda\x4b\x9d\xb4\xac\x1d\x4f\x8b\x0f\xe8\x01\xbc\x2d\x52\x54\x6e\
-\x43\x84\xae\x22\x85\x7a\x7d\xeb\x31\x99\x96\xfb\xb8\xae\x37\x07\
-\x6e\x88\xc3\x56\x3e\x06\xfa\x44\x06\xc6\x3b\x6b\xb4\x8d\xc3\xfc\
-\x35\x93\xbc\x3c\xf8\xee\x5f\x30\xe8\xd2\x02\xda\xef\x13\xe4\xe6\
-\x41\xf9\x4c\x9e\xf0\x03\x05\xc1\x2b\x08\xe6\x37\xd7\x60\xf0\x4a\
-\x55\xfd\x2e\xc2\x00\x2c\x82\xaa\x66\xa8\xea\x3d\x04\x02\xad\x80\
-\x93\x59\x30\xff\x63\x9e\x7e\x78\x3b\xdd\xdb\xc1\x19\xc7\x06\xf8\
-\xe0\x1d\xd8\x6c\x0b\xbd\xc7\x89\xeb\x31\x5a\x86\x7f\x63\x2a\x89\
-\x0c\x00\x8e\x55\xa5\xa6\x07\x54\x59\x9d\xc0\x3a\x80\xaa\xae\x4d\
-\x4e\x4e\x5e\x55\x1e\xd1\x68\x8b\xa5\xb6\x50\x57\x3d\x81\x60\x3e\
-\xb4\x5a\x60\x62\xfd\x2e\x14\xe1\x4f\x4c\x5c\x55\x0f\x8c\x1e\xe0\
-\x04\x00\x27\xbe\x69\x1c\xf0\x8c\x53\xd3\x77\x23\x26\x78\x7f\x0a\
-\xa6\x68\xfb\x9e\xf0\x3e\x26\x4e\xea\x1b\x27\xa6\x6a\x3e\xc6\x93\
-\xd2\xdb\xb9\x7e\xf8\x1e\xce\x5f\x73\x28\x28\x80\xdf\x26\xc1\x97\
-\x9f\x2a\x5f\x8d\x0e\xb2\x73\x47\x12\xde\xe4\xdf\x08\xe4\x8d\x00\
-\xc6\x68\x30\x58\x21\xb9\x1c\x55\x2d\xc0\x1c\x43\x4e\x14\x91\x5b\
-\x81\xb3\x98\xf6\xfb\x15\x64\xfc\x71\x21\xf7\xdd\x9a\xcc\xc9\xa7\
-\x17\x70\xd9\x40\x2f\xe7\x5c\x00\xa9\xa5\x49\xdb\x59\xa2\xa1\xca\
-\x2c\x8a\xc7\xbb\xd6\x78\xac\x4e\x60\xdd\x21\x3f\x3f\xff\xe7\xe9\
-\xd3\xa7\xf7\x1f\x34\x68\x50\x5d\xfe\x4c\xac\x96\x24\x25\x25\x85\
-\x74\x02\x67\x57\xf5\x5e\x6a\x23\x75\xf6\x17\xde\x39\x02\x7e\x41\
-\x84\xaf\x31\x41\xf2\xa1\xda\xc1\x3f\x00\xf7\x38\xba\x6d\x21\xfe\
-\x89\xa9\x87\xd9\x03\x13\x28\x3f\x00\x63\x30\xce\xc3\x48\x7a\x84\
-\x78\x9a\xe8\x31\x86\x5f\x10\x25\x09\xc5\xd9\xc3\x95\x22\x7c\x86\
-\xa9\x17\xdc\x19\x13\x40\xff\x25\xa6\x88\x7a\xed\x27\x73\xba\x49\
-\xf0\xf8\xfc\x93\x00\x1b\x37\x24\x93\x92\x32\x87\xbc\xbc\x8f\x81\
-\xd1\x9a\x97\xbb\x3a\x9e\x4b\xa9\x6a\x1e\x26\x5b\xf6\x1b\x11\x69\
-\x08\x5c\xc8\xc4\x9f\x06\x30\xe1\xc7\xd3\x49\x4e\x81\xf3\x2e\x12\
-\x2e\xb9\xd2\xc3\x29\x67\x40\x72\x72\x3c\x97\xb6\x58\x2c\xd5\x18\
-\x55\x9d\x3c\x6b\xd6\xac\xfe\x05\x05\x05\xd8\x12\xb5\xd5\x0f\xab\
-\x13\x98\x38\xea\xac\x11\x18\x42\x95\x25\x18\x9d\xbe\x92\xfa\x6c\
-\xc7\x18\x78\x91\x3c\x11\xd1\x2f\x5a\x1f\x4a\x2b\x05\xa7\xca\xb7\
-\xc0\xb7\x25\x6e\xb4\x36\xb1\x74\xb1\x93\xd9\xfb\x71\x1e\xcb\x96\
-\xa6\x90\x92\xb2\x9c\xbc\xbc\x8f\x80\xcf\x34\x37\x77\x41\x69\xc3\
-\xe3\x81\xaa\xee\xc4\xc8\xa5\x8c\x12\x91\x7d\xc8\xcd\xb9\x84\x7f\
-\x7d\x75\x15\x63\x3e\x3b\x9a\x26\x7b\xe5\xd3\xaf\x7f\x32\x97\x5c\
-\x01\x6a\xff\xef\x58\x2c\x75\x80\x29\x39\x39\x39\xde\x25\x4b\x96\
-\xd0\xa9\x53\xa7\xaa\xde\x8b\xc5\x52\x69\xd4\x79\x23\xd0\x52\xc9\
-\xfc\x67\x9c\xf2\xf5\xe7\x42\x72\xca\x46\x02\x79\x23\x81\x4f\x35\
-\x37\xb7\x42\x1a\x75\xf1\x42\x55\x37\x61\xa4\x5a\xde\x11\x91\x36\
-\x6c\xdb\x7a\x39\x23\x3f\xb8\x9a\x0f\xde\x39\x84\x94\x7a\x05\xa5\
-\x8d\xb7\x18\x81\x67\x60\x10\x90\xae\xca\xf2\x2a\xde\x4e\x5c\x48\
-\x4f\x4f\x1f\x03\x6c\x18\x3c\x78\xb0\x8d\x0b\xac\xfd\xfc\xe5\xf5\
-\x7a\xb7\x65\x66\x66\x36\xb1\x46\x60\xb5\xc5\xde\x91\x27\x00\xeb\
-\xf7\xb6\x54\x1e\xc1\xfc\x2d\xe4\xe5\x7d\x08\x9c\x4a\x20\x2f\x4d\
-\x55\xef\x56\xd5\x2a\x35\x00\x23\x51\xd5\x95\xaa\xfa\x82\xe6\xe6\
-\x76\x03\xba\x92\x97\xfb\x2c\xaa\x4b\x4a\x1d\x58\x87\x11\xa1\x01\
-\x30\x06\x48\xad\x2d\x06\xa0\x43\x23\x20\xb5\xaa\x37\x61\x49\x3c\
-\x6a\x98\x34\x73\xe6\x4c\x7b\xd3\x57\xcd\xc8\xcf\xcf\xe7\xed\xb7\
-\xdf\xa6\x6f\xdf\xbe\x87\x56\xf5\x5e\x6a\x23\xd6\x08\xb4\x54\x26\
-\x83\xb4\xa0\xe0\x3a\x55\x9d\xe0\x24\x6c\x54\x6b\x54\x75\xbe\xaa\
-\x3e\x86\x6a\xd7\x3d\x99\x47\x84\x17\x9c\x8a\x1e\xb5\x95\x37\x31\
-\x99\xc1\x77\x55\xf5\x46\x2c\x96\x8a\x12\x0c\x06\x27\x65\x64\x64\
-\xc4\x54\x1c\xb0\x58\x6a\x23\xd6\x08\xb4\x54\x1a\xaa\x35\x33\xc0\
-\x2e\x0e\xfb\xf6\x42\x51\x19\xa2\xda\x82\x08\x4d\x30\x35\xb8\x2f\
-\x77\x4a\x21\x5a\x2c\x35\x95\x29\x5b\xb6\x6c\x49\x59\xb7\xce\x16\
-\x69\xb2\xd4\x1d\x6c\x4c\xa0\xc5\x92\x40\x44\x38\x07\x53\xda\xad\
-\x91\x48\x61\x22\x51\x96\x2a\x6f\x3a\x71\x74\x97\x03\x6f\x00\xc7\
-\x63\xe4\x82\x02\xaa\xdc\xe7\x8c\x3d\x1e\x38\x0f\xd8\x1f\x58\x0c\
-\x8c\x54\x65\xb1\x6b\xee\x03\x31\x99\xea\xe9\x18\x59\xa1\xb3\x30\
-\xa5\xe0\xfe\xa3\x5a\xb4\xb4\x9b\xd3\xff\x22\xa7\xcf\x0e\x4c\x22\
-\xd2\x5a\x67\xfd\x57\x54\xd9\xea\xe8\x65\x3e\x08\x8c\x55\x25\xd3\
-\x35\xae\x39\x70\x2b\xf0\x89\x93\x48\x15\x6a\x6f\x82\x89\x03\xec\
-\x01\x74\x17\x61\x92\x2a\x5f\xec\xc1\xb7\xab\xba\x71\x31\x36\x0e\
-\xa9\x2e\x91\xe1\xf1\x78\xf2\x32\x33\x33\x53\xd2\xd2\xe2\x51\x0b\
-\xc0\x62\xa9\xfe\x58\x4f\xa0\xc5\x92\x58\xf6\x01\x9a\x60\xca\x0e\
-\xb6\x73\x1e\xfb\x3b\xd7\xba\x00\x8f\x03\x2f\x61\x64\x84\xf6\xc3\
-\xf1\x18\x8a\x70\x1f\x46\x78\xf9\x68\x8c\x1c\xd1\x25\xc0\x0c\x11\
-\xce\x72\xcd\x7d\xa0\x33\xde\xef\x8c\xdf\x07\x53\xdf\x7a\xac\x08\
-\xd7\xb9\x37\x21\xc2\x0b\xc0\x57\x4e\x1f\x2f\x30\x1c\x78\xd2\x19\
-\xbf\x97\xd3\xad\x81\xf3\xba\x47\xc4\x7b\xd8\xd7\x69\xef\xe8\x9a\
-\xaf\x1b\x46\x1b\xd0\x8f\x89\x9b\xeb\x0a\x7c\x2e\xc2\xe7\x65\xfe\
-\xce\x54\x73\x06\x0f\x1e\xbc\x73\xf0\xe0\xc1\xbb\xaa\x7a\x1f\x96\
-\xca\x41\x55\xf3\x92\x92\x92\x32\x66\xce\x8c\xac\xe2\x69\xa9\x4a\
-\x92\x92\x92\xb8\xf9\xe6\x9b\xf9\xfa\xeb\xaf\x6b\x9d\x16\x69\x75\
-\xc0\x7a\x02\x2d\x96\x04\xa2\xca\x08\x11\x7a\x02\xfd\x55\x19\x14\
-\xa3\x5b\x37\xe0\x00\xa7\x16\x70\xa8\x5a\xcc\x33\xc0\xdb\xaa\xdc\
-\xea\xb4\xd5\xc7\x88\x5e\xbf\x2d\x42\x17\x55\xf2\x5c\xe3\x0f\x05\
-\xf6\x53\x65\x9b\x53\xeb\xfa\x77\x8c\x47\xef\x7d\x67\x6c\x77\xe0\
-\x1e\xe0\x3e\x55\x5e\x72\xda\x9e\xa6\x82\x02\xcf\x22\x08\xc6\x88\
-\xcc\x03\x5a\xaa\xb2\xc3\x69\xbf\x18\x18\x23\xc2\x08\x55\xfe\x53\
-\x91\xb9\x2d\x96\xaa\x24\x10\x08\xfc\x3c\x6d\xda\xb4\x5e\x80\x2d\
-\x22\x6c\xa9\x13\x58\x4f\xa0\xc5\x52\xf5\x7c\x15\x32\x00\x1d\xce\
-\x03\x52\x80\x21\xa1\x06\x55\x72\x80\x17\x80\xf6\x84\x2b\xca\x84\
-\xf8\x34\x54\xa2\xcd\x89\xcb\xfb\x1e\x68\x2f\x52\x78\x93\xd7\x0f\
-\xc8\x01\xde\x72\xcd\x97\x05\xbc\x57\xc1\xfd\x76\xc5\x78\x28\xdf\
-\x0a\x19\x80\x0e\xe3\x30\x47\xcc\x67\x45\x1d\x65\xb1\x54\x7f\xa6\
-\xac\x5c\xb9\xb2\xde\xf6\xed\xdb\xab\x7a\x1f\x16\x4b\xa5\x60\x8d\
-\x40\x8b\xa5\xea\x99\x10\xf1\xba\x13\xb0\x43\x95\x35\x11\xed\x7f\
-\x39\x5f\xdb\x47\xb4\x47\x56\xa9\x59\x8c\x39\x7e\x0e\xd5\xc1\xeb\
-\x00\xac\x72\x0c\x49\x37\x0b\x2b\xb0\xd7\xd0\xfe\x00\x1e\x15\x61\
-\x5d\xe8\x01\xac\xc6\x1c\x37\xd7\x0a\xa1\xb5\xf4\xf4\xf4\x31\xe9\
-\xe9\xe9\x6f\x57\xf5\x3e\x2c\x95\xca\x6f\x22\xa2\xb6\x8e\xb0\xa5\
-\xae\x60\x8f\x83\x2d\x96\xaa\x27\x3b\xe2\x75\x0e\x90\x2c\x82\x38\
-\xa5\x05\x43\x84\x8e\xa8\x72\x23\xfa\x97\x26\x6b\x91\x83\xf1\x2c\
-\x46\x12\xd9\x16\x5a\x2b\xf2\xe6\xb0\x51\xc4\xeb\xd0\x51\xf4\xbd\
-\x84\x0d\x53\x37\x5b\xa3\xb4\xd5\x44\x1a\x41\x11\x4f\xa7\xa5\x96\
-\xa3\xaa\x5b\xeb\xd5\xab\xf7\x57\x66\x66\xe6\xc1\xc7\x1f\x7f\x7c\
-\x55\x6f\xc7\x42\x58\x27\xf0\xa7\x9f\x7e\x3a\x14\x53\xd6\xd5\x12\
-\x47\xac\x11\x68\xb1\x24\x9e\x3c\x4c\xd2\x45\x59\x59\x80\x31\xf8\
-\x0e\x01\xe6\xb8\xda\x0f\x77\xbe\x96\x57\xbc\x7a\x11\x30\x48\x84\
-\xe6\xce\x31\x70\x88\x5e\x11\xfd\xb6\x62\x0c\xc6\x9e\xc0\x47\xae\
-\xf6\xf3\x22\xfa\x85\x0a\xb9\x37\x55\x65\x6a\x39\xf7\x62\xb1\x54\
-\x6b\xf2\xf2\xf2\x26\x4c\x9f\x3e\xbd\x23\xd1\x6f\x9c\x2c\x96\x5a\
-\x85\x3d\x0e\xb6\x58\x12\xcf\x62\xa0\x89\x08\x27\x95\xb1\xff\x97\
-\xc0\x46\xe0\x45\x11\x53\xb1\xc2\x49\x16\x79\x08\x98\xa2\x4a\x79\
-\xd3\x17\x47\x00\x01\xe0\x39\x11\xf3\x37\x2f\x42\x2f\x28\x9a\xa8\
-\xe2\x78\x1d\xa7\x01\xe7\x38\xeb\xe1\xec\x79\x60\x44\xbf\x95\xc0\
-\x27\xc0\x63\x22\x1c\xed\xbe\x26\x42\x6f\x27\x11\xc6\x62\xa9\xa9\
-\x4c\x59\xb0\x60\x81\x37\x10\x08\x54\xf5\x3e\x2c\x45\xb1\x72\x4d\
-\x09\xc0\x1a\x81\x16\x4b\xe2\x19\x8d\xf1\xe8\x4d\x14\x61\x87\x08\
-\x7f\x94\xd4\x59\x95\xed\x18\xfd\xbf\xc3\x81\xd5\x22\x64\x60\x8e\
-\x5d\x77\x00\xd7\x96\x77\x71\x55\xd6\x01\xd7\x03\x57\x02\xcb\x44\
-\xf8\x1d\xf8\x0e\x78\x35\x4a\xf7\x47\x81\x34\x60\xa9\x08\xab\x9c\
-\x7e\xaf\x44\xe9\x77\x07\x26\x5b\xf9\x37\x11\x16\x89\xf0\xbb\x08\
-\x6b\x80\x3f\x31\xd2\x37\xb5\x81\x8b\x01\x5b\x37\xb8\x9a\x20\xc2\
-\xa1\x22\xcc\x14\xa1\x43\x82\x97\x9a\x92\x9f\x9f\xef\x99\x37\x6f\
-\x5e\x82\x97\xb1\x58\xaa\x1e\x7b\x1c\x6c\xb1\x24\x18\x55\xb6\x8b\
-\xd0\x03\x93\x30\xd1\x82\x70\x4c\xdf\x14\x8c\x40\xf4\x8a\x28\x63\
-\x7e\x14\xe1\x60\x8c\x88\x74\x48\x2c\xfa\x17\x55\x76\xbb\xba\xfd\
-\xe1\x8c\x5f\x1c\x31\xfc\x7b\xa7\xbd\x30\x9e\x4d\x95\x51\x22\xfc\
-\x06\xf4\x71\xda\x27\x01\xc7\x46\x59\x77\xa2\x23\x29\x73\xb2\xb3\
-\xcf\x89\xc0\x16\x8c\x9c\x4c\xa6\xab\xdf\x16\xa0\xaf\x08\xbd\x31\
-\x12\x37\x7b\x01\xeb\x80\xc9\xaa\xac\x2d\xf5\x9b\x52\x03\x18\x3c\
-\x78\xf0\xce\xaa\xde\x83\xa5\x08\xdb\x30\x1a\x96\x09\x2d\xed\xa6\
-\xaa\xab\x52\x52\x52\xd6\x66\x66\x66\xb6\xea\xd1\x23\x52\x32\xd3\
-\x52\xd9\x84\x74\x02\xa9\xa0\xa4\x95\xa5\x64\xac\x11\x68\xb1\x54\
-\x02\xaa\x14\x60\x62\xfd\x16\xb8\xda\xb2\x30\x46\x56\xac\x31\x1b\
-\x81\xb1\x25\x5c\xdf\x1c\x6d\xbc\xe3\xf9\x2b\x56\xfb\x4a\x95\xbf\
-\x31\x35\x7e\x01\x10\x89\x39\x6f\x91\x7e\x0e\x51\xf7\xa9\x4a\x06\
-\x90\x11\x6b\x8f\x16\x4b\xbc\x50\x65\x99\x08\x4b\x80\x1b\x80\x47\
-\x12\xb9\x56\x7e\x7e\xfe\xcf\x33\x66\xcc\xb8\xf4\xaa\xab\xae\xb2\
-\x9f\x91\x96\x5a\x8d\xfd\x05\xb7\x58\x2c\x16\x4b\xb5\xc7\x11\x29\
-\xbf\x03\x78\x57\x84\x7d\x31\x99\xa2\x91\x67\xb6\x3b\x54\x59\xb5\
-\xa7\x6b\xa9\xea\xe4\xcc\xcc\xcc\x4b\x54\x15\x89\x75\xb7\x64\xb1\
-\xd4\x02\x62\x1b\x81\x0f\xde\x59\x89\xdb\xb0\x58\x2c\x55\xc0\x62\
-\xe0\x35\xc0\x2a\xe3\x46\x21\x3d\x3d\x7d\x0c\xb0\x61\xf0\xe0\xc1\
-\x36\x2e\xb0\x7a\x90\x8a\xa9\x79\x0d\xc6\x1b\x78\x43\x94\x3e\xff\
-\x01\xce\x8d\xc3\x5a\x53\x76\xed\xda\x95\xbc\x74\xe9\x52\x3a\x76\
-\xec\x58\x7a\x6f\x8b\xa5\x86\x12\xcd\x08\xdc\x40\x72\xf2\xaf\x7c\
-\x38\xac\x66\x25\x8d\x24\x27\x17\x10\x08\x64\x95\xde\xd1\x62\xb1\
-\x00\xa8\x32\x1b\xb0\x77\x7b\xb1\xb1\x3a\x81\xd5\x8b\x1c\xe0\xa2\
-\x52\xfa\x14\x0b\x83\xa8\x20\x73\xbd\x5e\xef\xf6\xcc\xcc\xcc\xc6\
-\xd6\x08\xac\x5a\x22\x74\x02\x7f\xac\xea\xfd\xd4\x36\x8a\x19\x81\
-\xaa\x3a\x81\xe2\x15\x0c\x2c\x16\x8b\xc5\x62\xa9\x32\x9c\x92\x88\
-\xe3\x2a\x67\x2d\x55\xaf\xd7\xfb\x6b\x66\x66\xe6\x99\x7d\xfb\xf6\
-\xb5\xe7\xc1\x96\x5a\x4b\xcd\xf2\xf6\x59\x2c\x16\x8b\xc5\x52\x09\
-\x04\x83\xc1\x5f\x32\x32\x32\xac\x58\xa0\xa5\x56\x63\x13\x43\x2c\
-\x16\x8b\x25\x3a\x17\x63\x05\x6a\xab\x0d\x8e\x70\x7a\x64\x3d\xed\
-\x48\x7e\x50\xe5\xb2\x38\x2d\x39\x25\x2b\x2b\x2b\x65\xc3\x86\x0d\
-\xb4\x68\xd1\x22\x4e\x53\x5a\x2c\xd5\x0b\x6b\x04\x5a\x2c\x16\x4b\
-\x14\xac\x4e\x60\xb5\x23\x40\x74\x81\xf3\x9e\xc0\x59\x18\x41\xf6\
-\x7f\xc5\x71\xbd\x3f\x3d\x1e\x4f\x20\x33\x33\x33\xf9\xf4\xd3\x4f\
-\x8f\xe3\xb4\x96\xf2\xe0\xd2\x09\xcc\x2c\xad\xaf\xa5\xfc\x58\x23\
-\xd0\x62\xb1\x58\x2c\xd5\x1e\x55\x02\xc0\x13\xd1\xae\x89\xd0\x14\
-\x63\x04\xee\x8e\x76\xbd\x62\xeb\x69\x6e\x4a\x4a\xca\x8c\xcc\xcc\
-\xcc\x23\xad\x11\x68\xa9\xad\xd8\x98\x40\x8b\xc5\x62\xb1\xd4\x68\
-\x54\xc9\x06\x46\x12\xe7\x32\x7f\x81\x40\xe0\xe7\x69\xd3\xa6\xe5\
-\x96\xde\xd3\x62\xa9\x99\x58\x23\xd0\x62\xb1\x58\xa2\x90\x9e\x9e\
-\xfe\x4d\x7a\x7a\xfa\xf0\xaa\xde\x87\xa5\xcc\x04\x81\x03\xe3\x3c\
-\xe7\x94\xe5\xcb\x97\xa7\xec\xd8\x61\x95\x82\x2c\xb5\x13\x6b\x04\
-\x5a\x2c\x16\x4b\x74\x52\x80\xe4\xaa\xde\x84\x25\x8c\x08\xf5\xa3\
-\x3c\xda\x88\x30\x08\xb8\x1e\x98\x1d\xe7\x25\x7f\x55\x55\x66\xcf\
-\x8e\xf7\xb4\x96\xb2\x12\x0c\x06\x79\xfb\xed\xb7\xb9\xf8\xe2\x8b\
-\x6d\x21\xe7\x04\x60\x8d\x40\x8b\xc5\x62\xb1\x54\x7b\x44\x68\x88\
-\x89\xf9\x8b\x7c\xac\x00\x3e\x04\xb6\x10\x67\xf1\x73\x55\xdd\x92\
-\x92\x92\xb2\x28\x33\xd3\xe6\x24\x58\x6a\x27\x36\x31\xc4\x62\xb1\
-\x58\x2c\x35\x81\x5c\x60\x70\x94\xf6\x5d\x98\x12\x88\x53\x55\x29\
-\x88\xf7\xa2\x79\x79\x79\x13\x32\x32\x32\xda\x63\xbd\xc2\x96\x5a\
-\x88\x35\x02\x2d\x16\x8b\x25\x3a\xe7\x55\xf5\x06\x2c\x61\x54\xc9\
-\x07\xde\xa9\x82\xa5\xa7\xcc\x9f\x3f\xff\xfa\x40\x20\x40\x72\xb2\
-\xb5\x03\x2d\xb5\x8b\x62\x46\xa0\x88\xb4\x00\xba\x56\xc1\x5e\xe2\
-\xc1\x1c\x55\xb5\xf5\x83\x2d\x16\xcb\x1e\x33\x78\xf0\x60\x5b\x2d\
-\xa2\x1a\x22\x82\x00\x27\x00\x5d\x80\x0d\xaa\x8c\x13\x21\x09\xe8\
-\x04\xac\x54\x25\xde\xfa\x8e\x53\xf2\xf3\xf3\x93\xfe\xfa\xeb\x2f\
-\xba\x77\xef\x1e\xe7\xa9\x2d\xa5\x61\x75\x02\x13\x4b\x34\x4f\xe0\
-\x29\xc0\x67\x95\xbd\x91\x38\x71\x11\x95\x54\x5b\xd2\x62\xb1\x58\
-\x2c\x95\x8b\x08\xed\x81\x31\x40\x2f\x4c\x35\x97\xaf\x81\x71\xaa\
-\x04\x45\x18\x0b\x8c\x00\xfc\xf1\x5c\x53\x55\x97\xa7\xa4\xa4\x6c\
-\xc8\xcc\xcc\x6c\x61\x8d\x40\x4b\x6d\x23\xf6\x71\xf0\xf2\x2d\x95\
-\xb8\x8d\x38\xd0\xb6\x59\x55\xef\xc0\x62\xb1\x58\x2c\x89\xe5\x33\
-\xa0\x1e\xa6\xa4\x5f\x17\x8c\x31\xe8\xbe\x76\x26\x71\x36\x02\x01\
-\x82\xc1\xe0\xcf\x33\x66\xcc\xe8\x37\x60\xc0\x80\xa4\x78\xcf\x6d\
-\xb1\x54\x25\xb1\x8d\xc0\xbd\x9a\x56\xe2\x36\x2c\x16\x8b\xa5\x7a\
-\x91\x9e\x9e\xfe\x0d\xb0\x7e\xf0\xe0\xc1\xd7\x57\xf5\x5e\x2c\x20\
-\x42\x1b\xe0\x28\xe0\x7c\x55\xfe\x2d\xc2\x3d\x11\x5d\x16\x03\x83\
-\x12\xb1\x76\x41\x41\xc1\xe4\x99\x33\x67\xf6\x55\xd5\x24\x11\x49\
-\xc4\x12\x96\xd2\xb1\x75\xbc\x13\x80\x95\x88\xb1\x58\x2c\x96\xe8\
-\x58\x9d\xc0\xea\x45\x2b\x8c\x21\x30\x39\xc6\x75\x2f\xc4\x3f\x3b\
-\xd8\x61\xca\xce\x9d\x3b\x93\x97\x2f\x5f\x9e\xa0\xe9\x2d\xb1\x08\
-\xe9\x04\xf6\xeb\xd7\xcf\xea\x04\x26\x80\x3a\x67\x04\x8a\xb0\xaf\
-\x08\x5d\x5c\x8f\x56\x4e\xa0\x71\x9d\x41\x84\x16\x22\x8c\x16\xa1\
-\x77\x55\xef\xc5\x62\xb1\x58\xca\xc8\x02\x40\x80\x0b\x63\x5c\x3f\
-\x15\x58\x98\xa0\xb5\x67\x27\x25\x25\xed\xb4\x7a\x81\x96\xda\x46\
-\x9d\x33\x02\x81\xbb\x81\xf9\xae\xc7\x1a\x60\x87\x08\x6f\x3a\x62\
-\xa4\x71\x47\x84\x1b\x45\xf8\x34\x11\x73\x57\x90\x86\xc0\x65\xc0\
-\xfe\x55\xbd\x11\x8b\xc5\x62\x29\x0b\xaa\x6c\x05\xbe\x00\x1e\x17\
-\xe1\x5a\xa0\x01\x80\x08\x7b\x89\xf0\x28\x30\x10\x78\x3b\x31\x6b\
-\x6b\x81\x88\xfc\x6f\xe6\xcc\x99\xf6\x48\xd2\x52\xab\xa8\xcb\x3a\
-\x81\x47\x02\xdb\x81\x0e\x40\x7f\xe0\x16\xa7\xfd\xd6\x04\xac\x75\
-\x30\x70\x72\x02\xe6\xb5\x58\x2c\x89\xc3\xea\x04\x56\x3f\x6e\x02\
-\xc6\x02\xef\x63\x8e\x86\xf3\x30\x95\x42\x82\xc0\x93\xaa\x7c\x9b\
-\xa8\x85\xf3\xf3\xf3\x27\x66\x64\x64\x9c\x80\x49\x4c\xb1\x58\x6a\
-\x05\x75\xd9\x08\x5c\xa4\x4a\x36\xf0\x97\x08\x3f\x02\xa7\x63\xfe\
-\xe9\x17\x31\x02\x45\x68\x8c\x31\x18\xdb\x03\x4b\x80\xdf\x54\xc9\
-\x8d\x9c\x4c\x84\x34\xa0\x37\xd0\x06\xd8\x08\x4c\x54\x65\x93\x08\
-\x9d\x81\xd6\x40\x8a\x08\x7d\x9c\xee\x3b\x55\xf9\xd3\x35\xff\x71\
-\xc0\x01\x18\xa3\x74\xa6\x2a\xf3\x23\xe6\x6e\x07\xb4\x51\x65\xb2\
-\x08\x1d\x81\x63\x81\x1d\xc0\x04\xe7\xee\x38\x72\x2f\xbd\x80\x1e\
-\xc0\xdf\xc0\xef\x98\x58\x9a\x96\xaa\xfc\xaf\xb4\x6f\x8a\x08\x5d\
-\x81\xc3\x30\xff\x54\xff\x50\xe5\xef\xd2\xc6\x58\x2c\xb5\x11\xab\
-\x13\x58\xfd\x50\x65\x0b\xd0\x47\x84\x7f\x60\xfe\xdf\xa6\x61\x12\
-\x42\x7e\x50\x65\x5e\x82\x97\x9f\xb2\x61\xc3\x86\x7a\x59\x59\x59\
-\x34\x6f\xde\x3c\xc1\x4b\x59\x42\x58\x9d\xc0\xc4\x52\x97\x8d\xc0\
-\x42\x54\xc9\x17\x61\x19\xc6\xd0\x2b\x44\x84\x33\x31\x35\x29\xd3\
-\x30\xb1\x26\x07\x01\x73\x44\xb8\x48\x95\xc5\xae\x7e\xff\x04\x5e\
-\xc5\x18\x4e\x0b\x31\x06\x5d\x43\xa0\x11\x70\x35\x70\x06\x90\x0a\
-\x7c\xe4\x0c\x59\x0c\x9c\xe6\x18\x74\xf3\x81\xcd\xc0\x4a\xe0\x10\
-\xa0\x9e\x08\xcf\xa8\xf2\xb8\x6b\x2b\xd7\x00\xf7\x89\x70\x2f\xf0\
-\x26\xb0\x1a\x63\x58\x2e\x15\xe1\x38\x55\xd6\xb9\xf6\xf2\x32\x70\
-\x17\xb0\xd5\xd9\xcf\x4a\xe0\x4f\xe0\x1c\x60\xbf\x58\xdf\x03\x11\
-\x1a\x01\xe9\xc0\x00\x60\x3d\x26\x20\xbe\x89\x08\x8f\xa9\xc6\x5f\
-\x72\xc1\x62\xb1\x58\x2a\x8a\x2a\xdf\x01\xdf\x55\xf2\xb2\x7f\x88\
-\x48\x30\x33\x33\x33\xe9\xd4\x53\x4f\xad\xe4\xa5\xeb\x2e\xaa\xf6\
-\x04\x3e\x91\xd4\xc5\x98\xc0\x62\x88\x70\x02\x46\x7a\x60\xbc\xab\
-\xad\x35\xf0\x15\xf0\x0b\x70\x80\x2a\x5d\x80\x43\x31\x86\xf3\x3b\
-\xae\x7e\xc7\x00\xef\x02\xef\x01\xcd\x55\x39\x42\x95\x96\xc0\x59\
-\x00\xaa\x3c\x0c\x7c\x00\x6c\x54\xa5\x9d\xf3\x38\xcd\x19\xbe\x19\
-\x38\x5e\x95\x34\x55\x8e\x00\x9a\x63\x34\xae\x1e\x15\xe1\xf0\x88\
-\x6d\x36\x00\x2e\x05\x0e\x55\xa5\x0d\xd0\x07\x63\xb4\xde\xef\xda\
-\xcb\x39\x18\x03\xf0\x19\x8c\x21\x7a\x00\x30\x0a\xb8\xae\x0c\xdf\
-\x86\x21\x40\x5f\xe0\x6c\x4c\xac\x60\x6b\xe0\x29\x60\x88\x08\xc7\
-\x96\x61\xbc\xc5\x52\x26\x44\x68\x26\xc2\x4d\xce\xdf\x58\xa8\xed\
-\x1c\x11\xce\x76\xbd\x3e\xc0\xe9\xb3\x57\xd5\xec\xd2\x62\x29\x8a\
-\xaa\xee\xf6\x7a\xbd\x33\x6d\x72\x88\xa5\x36\x51\x97\x8d\xc0\x31\
-\x22\x7c\x2f\xc2\x62\x60\x12\xf0\x6f\x28\xa2\x3b\x75\x07\x50\x1f\
-\x78\x50\x95\x55\x00\xaa\xcc\xc6\x18\x80\xa7\x8a\x14\x26\x55\x3c\
-\x88\x39\x76\xbd\x57\x95\xc2\xe3\x23\x55\xa6\x94\xb6\x01\x55\xb6\
-\xa8\xf2\x87\xab\x29\x88\xf1\x28\xee\xc2\x54\x6e\x89\xe4\x65\x55\
-\xe6\x38\x63\x7f\x01\x66\x42\x91\x0c\xdf\x1b\x9d\xb1\x4f\xa9\xb2\
-\x4d\x95\x9d\xaa\xbc\x00\x45\xd6\x28\x86\x08\xcd\x80\x9b\x81\x51\
-\xaa\x7c\xaf\x4a\x50\x95\xdd\xc0\x50\x20\x0b\xe3\xcd\xb4\xd4\x50\
-\x44\xb8\x4d\x84\x75\x31\x1e\xe5\xfe\x44\x13\xa1\x83\x08\x0f\x8a\
-\xb0\x6f\x05\xb7\xd4\x0a\xe3\x75\x3e\xd8\xd5\x76\x07\x45\x43\x31\
-\xba\x39\x7d\x5a\x54\x70\x8d\x3d\x26\x3d\x3d\xfd\x9b\xf4\xf4\xf4\
-\xe1\x55\xb5\xbe\xa5\x28\x22\xa4\x8a\x90\x5d\xc2\x63\x93\x08\xb3\
-\x45\xf8\x3c\x51\xca\x07\x81\x40\xe0\xe7\x8c\x8c\x8c\x62\xe1\x40\
-\x16\x4b\x4d\xa5\x2e\x1f\x07\x2f\xc2\x04\x15\xa7\x02\x6d\x31\x59\
-\xc2\x1b\x5c\xd7\xbb\x62\xe2\xee\x9e\x8b\xd0\x06\x0d\xa9\x68\x77\
-\xc1\x1c\xcb\x76\x03\xa6\x3a\xc5\xcd\xcb\x8d\x08\x37\x01\x83\x81\
-\x03\x9d\xbd\x84\x68\x13\xd1\x35\x1f\xf8\x31\xa2\x2d\x03\x13\x4f\
-\x18\xa2\x13\x30\xc5\x6d\x8c\x3a\xcc\xc4\x78\x05\x63\xd1\x19\x48\
-\x02\x0e\x16\x61\x74\xc4\xb5\x3c\xcc\x7b\xb5\xd4\x5c\x1a\x01\x2d\
-\x31\x9e\xdd\xc8\x52\x40\x15\xa9\xb3\x7a\x10\xc6\x63\xfd\x1d\x26\
-\xfe\xb5\xbc\xac\xc3\x78\xac\x17\x54\x60\x6c\x65\x62\x75\x02\xab\
-\x17\x01\xe0\x2d\xcc\x0d\xc3\x22\xe0\x57\xcc\xef\x6f\x07\x4c\x3c\
-\xf7\xcf\x4e\xfb\xa9\xc0\x9f\x22\x9c\x94\x80\x3d\x4c\x59\xba\x74\
-\xe9\x3d\xbb\x76\xed\x22\x35\x35\xb5\xf4\xde\x96\x3d\x26\xa4\x13\
-\x38\x61\xc2\x84\x1e\xc0\x4f\x55\xbd\x9f\xda\x46\x5d\x36\x02\x7d\
-\x4e\x62\x08\x22\x5c\x09\x8c\xc4\xc4\xea\xbd\xe8\x5c\x6f\x04\x6c\
-\xc2\x18\x50\x91\x4c\x04\x56\x38\xcf\x53\x81\xdd\x15\xd9\x80\x08\
-\xd7\x60\xbc\x1d\xaf\x00\x0f\x63\xe2\x03\x77\x62\x3c\x77\x91\x3f\
-\x9b\x80\x2a\x39\x11\x6d\x91\xc2\xa8\x02\x51\x8d\xd1\xd2\x82\x2a\
-\x1a\x39\x5f\xe7\x02\xcb\x22\xae\xcd\x84\x70\xcc\xa1\xa5\x46\xf3\
-\xbe\x6a\xe1\xef\x6d\xa9\x38\xde\xee\x1c\x55\x36\x95\x67\x11\x11\
-\xbc\x98\x90\x82\x24\x60\x45\xe4\x0d\x92\x2a\x9b\x31\x1e\xef\x0a\
-\xe1\xe8\x7a\xb6\x05\xb2\x43\x7f\xc3\x96\xda\x8f\x2a\x01\x11\x0e\
-\x02\xc6\xaa\x32\xd0\x7d\x4d\x84\x9e\x98\xd0\x9d\x87\x30\x37\x18\
-\x5f\x63\x6e\x54\x46\xc6\x79\x1b\xbf\xaa\x2a\xb3\x67\xcf\xe6\xa8\
-\xa3\x8e\x8a\xf3\xd4\x16\x4b\xe5\x53\x97\x8d\xc0\x42\x54\x19\xe5\
-\xc4\xd3\x3d\x29\xc2\x28\x55\xd6\x62\x0c\xb2\x83\x80\xe7\x55\x4b\
-\x54\xa1\x9f\x8f\x49\xe8\x28\x89\x02\xa2\x7f\xaf\x2f\x04\xe6\x01\
-\xf7\xa8\x1a\x43\x4d\x84\x54\xcc\x71\x59\x45\x58\x0c\x9c\x24\x82\
-\x37\xe2\x83\xb7\x5b\x29\xe3\x42\xd9\xc8\x99\xaa\xa4\x57\x70\x6d\
-\x4b\x0d\x47\x04\x1f\xf0\x2c\x70\x38\x26\x1e\xb6\x9d\xd3\xfe\x0d\
-\xd0\x5f\x95\x5d\x22\x5c\x84\xf9\x80\x05\xc8\x74\x79\xc9\xdb\xaa\
-\xb2\x42\x84\x11\x98\xba\xae\x21\x37\x49\xae\x08\x43\x54\x79\xca\
-\xb5\x4e\x57\xcc\x0d\xc7\x19\xaa\xfc\xb7\x1c\xfb\xf3\x62\x6e\x96\
-\xee\x01\x1a\x3b\x6d\xd3\x80\x41\xaa\xcc\x2d\xff\x3b\xb6\xd4\x24\
-\x44\xd8\x07\xb8\x08\xe8\x1e\x79\x4d\x95\x19\x22\xfc\x0c\x5c\xea\
-\x3c\x7f\x13\xa3\x29\x18\x57\x54\x35\xab\x5e\xbd\x7a\x7f\x67\x66\
-\x66\x76\xb0\x46\x60\xa5\x63\x33\x44\x12\x40\x5d\x8e\x09\x8c\xe4\
-\x51\xcc\xf1\xcf\x03\xce\xeb\x11\x98\x78\xa4\xfb\x22\x3b\x8a\xd0\
-\xd6\xf5\x72\x14\x70\xb4\x08\x17\x44\xf4\x71\x6b\x49\xad\x04\x9a\
-\x47\x89\xa1\x5a\x01\xec\x85\xf1\x98\x84\x78\x80\x8a\x1b\xe7\xef\
-\x63\xbc\x7a\x0f\x88\x50\x5f\x84\x14\x11\x6e\x05\x8e\x2f\x69\x90\
-\x2a\x6b\x80\xff\x3a\xe3\x8a\x68\x1f\x88\x90\x2c\x52\x61\xa3\xd4\
-\x52\xbd\x68\x23\x42\xbb\x88\x47\xa4\xd6\x85\x60\xb2\xd8\x5f\x05\
-\x3a\x62\x3c\x2b\xe7\x63\xbc\x2b\x00\x3f\x60\xb2\xd5\xc1\x24\x11\
-\xb5\x77\x1e\xab\x9d\xb6\x05\x98\x78\xd6\xa6\x98\x9b\xa3\x57\x30\
-\x37\x57\x97\xc5\x61\xff\xaf\x61\xc4\xde\xfd\x98\x23\xc0\xb3\x31\
-\x71\xb4\xdf\x8b\x18\xe1\xe0\x38\x73\x1e\x60\xeb\x06\x57\x1f\xda\
-\x62\x3e\xb3\x1a\xc7\xb8\xbe\x17\xe1\x30\x9a\x2d\x25\xf4\xdb\x23\
-\x02\x81\xc0\xf8\xe9\xd3\xa7\x5b\xf9\x20\x4b\xad\xc0\x7a\x02\x1d\
-\x54\x59\x22\xc2\x48\xe0\x91\xe8\x35\xb9\x00\x00\x20\x00\x49\x44\
-\x41\x54\x46\x11\x9e\x53\xe5\x37\x11\x1e\xc7\x64\xc7\xfe\x03\x23\
-\xb3\x52\x1f\xf3\xc1\x76\x14\x61\x4f\xc7\x87\xc0\xb9\xc0\xd7\x22\
-\xfc\x1b\xf3\x21\xb8\x1f\x26\x2e\x25\x24\xc9\x32\x0e\x93\x7d\x3b\
-\x47\x84\x3f\x81\x65\xaa\xdc\x8a\xc9\x28\xbe\x15\xf8\x43\x84\xff\
-\x62\xee\x70\x1b\x63\x8c\xc6\x8a\xbc\x87\xb1\x22\xbc\x87\xc9\x0e\
-\xbe\x0d\x73\x34\xbc\x13\x73\x24\x72\x62\x29\xc3\x6f\xc2\x7c\xc0\
-\xff\xe5\x78\x7e\x36\x62\x8e\xf4\x4e\x03\x5e\x02\x5e\xa8\xc8\x9e\
-\x2a\x8a\x88\xa4\x61\xf4\x0a\x6b\x3a\xd9\x18\x63\x7f\xad\x56\xbd\
-\xd6\x41\xb4\x64\xa5\xcf\x80\x2b\x22\xda\x86\xa9\xf2\x96\xf3\xdc\
-\x2f\xc2\x55\x18\x99\xa3\x67\x1d\x6f\xe0\x7a\xe7\xda\x1a\xd5\xa2\
-\xe1\x03\xaa\x3c\xeb\x7a\xb9\x15\xf0\x39\x5e\xf6\xab\x80\xcf\x2b\
-\xba\x71\x11\x0e\xc4\xfc\x8e\xbe\xe2\x92\x2c\xfa\xdb\xd9\xcb\x74\
-\x8c\xe0\xfb\x07\x15\x9d\x3f\x1a\x56\x27\xb0\xda\x31\x17\xf3\xff\
-\xec\x71\x11\x06\x86\xc2\x14\x44\x48\xc2\x78\x08\x4f\x02\x6e\x77\
-\xfa\x1e\x48\xd1\x18\xef\xb8\xa1\xaa\x53\xe6\xcd\x9b\x77\x6d\x30\
-\x18\x24\x29\x29\xa9\xf4\x01\x96\x3d\xc2\xea\x04\x26\x96\xba\x68\
-\x04\xfe\x04\xe4\x42\xb1\xf8\x3a\x80\x27\x80\xe5\x98\x3b\xce\xb5\
-\xaa\x3c\x2d\x46\x48\xba\x2f\xe6\x9f\x4a\x0e\xa6\x78\x79\xa1\x2c\
-\x8b\x73\x54\x7c\x91\x73\x4c\x76\x32\xe6\x08\x79\x03\x26\xdb\x36\
-\xd4\xe7\x6f\x11\xba\x60\x64\x63\x5a\x62\x62\x0d\x51\x25\x53\x84\
-\x33\x30\x1f\x60\xfb\x01\xdf\x63\x0c\xc3\x6b\xa1\x88\x48\xf3\xcf\
-\x98\x04\x8d\x48\xfe\x0d\xcc\x72\x37\xa8\x72\xbd\x08\x1f\x63\x8e\
-\xf4\x96\x61\xe2\x17\x5f\xc7\x24\xbe\x84\xd8\x02\x3c\x89\x2b\x30\
-\x5f\x95\xa5\x22\x1c\x0a\xdc\x80\x31\x46\x3b\x63\xf4\x02\xef\x03\
-\xbe\x89\xb2\x76\x62\x69\xd8\xf0\x35\x76\xee\xbc\xb4\xd2\xd7\x4d\
-\x14\x1e\x4f\x9e\xa4\xa4\x7c\x47\x20\xf0\x2e\xf0\xa3\xaa\x06\xab\
-\x60\x17\xff\x00\xd6\x46\xb4\x45\x26\x8a\x80\xa9\xc8\xe0\x66\x0a\
-\x14\x0a\x9d\x97\x88\xe3\xed\xbe\x11\xe8\x85\xf9\x5d\x4f\xc2\x78\
-\xd4\xf7\xf4\xd4\xa1\x97\x33\x47\xc0\x49\xa6\x72\xb3\x95\x28\x47\
-\x84\x96\xda\x85\x2a\xb9\x22\x0c\x02\x46\x03\x1b\x45\x98\x85\xf1\
-\x40\x1f\x87\xf1\x02\x4e\x22\x2c\xdf\xd5\xd3\xe9\x97\x08\xa6\xe4\
-\xe5\xe5\x25\x2d\x58\xb0\x80\xae\x5d\xbb\x26\x68\x09\x4b\x88\xaa\
-\xbf\x77\xae\xdd\xd4\x39\x23\x50\x95\xf1\xb8\xf4\x00\x23\xae\x2d\
-\xc7\x18\x82\xee\xb6\xdf\x31\x55\x37\x4a\x9b\x77\x2c\xc5\x3f\x3c\
-\x23\xe7\x1e\xf6\xff\xed\x9d\x77\x78\x54\xd5\xd6\x87\xdf\x95\x64\
-\x12\xb8\x58\xb0\x5d\x01\x05\x11\xc5\xde\x0b\xf6\xf2\x89\x8d\xab\
-\xa8\x28\xa0\xd8\x88\xa0\xc2\x5c\xbc\x80\x1d\x90\x8b\xfd\xda\x45\
-\x50\x19\xae\x5e\x51\xb1\x03\xa2\xa2\x62\xa5\x08\xa1\x29\x09\x09\
-\x4d\xc4\x80\x44\xa4\xb7\x00\x81\x90\x99\xc9\xac\xef\x8f\x7d\x02\
-\x93\x61\x52\x49\x72\x32\x33\xfb\x7d\x9e\xf3\x24\xb3\xcf\xde\xfb\
-\xac\x49\x4e\x32\xeb\xec\xbd\xd6\x6f\x45\x69\xff\x01\x76\x8b\x8b\
-\x7a\x2d\xa2\xcf\x64\x8c\x33\x17\x39\x36\x6a\x89\x24\x47\x9e\x26\
-\x03\x40\x84\xfd\x31\x42\xd1\x1f\x85\x9d\xcf\x27\xe2\x7d\x3a\xed\
-\x85\x98\x2d\x37\xf7\xd9\xb6\x6d\x14\x29\x29\x37\xf0\xf5\x4f\xc9\
-\x1c\x13\xa3\xff\x68\xd7\xaf\x85\xcb\xce\x85\x76\xd7\xc0\xe9\x6d\
-\x52\xf9\x6c\x54\x7b\x32\x26\x5f\x4b\x6a\xea\x2a\x11\xb9\x55\x55\
-\x27\xd5\xb1\x45\x0b\x2a\x91\x18\xa2\x4e\x78\x40\x38\xdb\x29\x1d\
-\xb2\x10\x15\x47\x6a\xe8\x17\xcc\x16\xed\x0f\x98\x87\x97\x75\x98\
-\xed\xe3\xd6\x55\x37\xb7\x14\x25\xab\xea\x67\x60\x3e\xe0\xc3\x99\
-\xc9\xee\xce\xad\x25\x0e\x51\x65\x8c\x08\x27\x62\xc2\x02\x8e\xc7\
-\x3c\xb0\x4f\xc5\xec\xb6\xbc\x5b\x12\x0b\xad\x6a\xc2\x7a\xa2\x3c\
-\x30\xd4\x80\x0d\xba\x34\x35\x35\x75\x43\x4e\x4e\xce\x01\xd6\x09\
-\xb4\xc4\x3a\x09\xe7\x04\xc6\x3b\xce\xb6\xf2\x1c\x60\x29\x70\x00\
-\x70\x27\x26\x31\xe5\xe9\xf2\xc6\xd5\x37\x54\xf5\x53\xf1\xa4\xbe\
-\x4b\xaf\x3b\x6e\x66\xda\xdc\x06\xa4\xc5\x60\xb9\xce\x7d\x1b\xc3\
-\xf0\x91\x70\xcb\x75\xd0\xad\x27\x74\xeb\x99\xcc\x5f\x7f\x42\xbf\
-\x3e\x4d\xf9\xfa\x8b\x89\x92\x96\x36\x04\xbf\xff\x7e\x97\x56\x05\
-\x6b\x83\xf6\x98\x0f\xe5\xf3\x54\x99\x5e\xd2\x28\x42\x97\x1a\x98\
-\x7b\xa9\xf3\xf5\x41\xd5\xa8\x19\xfb\x35\x8e\xcf\xe7\x1b\x07\xac\
-\xf1\x7a\xbd\x36\x2e\xb0\x1e\x20\x42\x0b\x8c\xf3\xf7\xa2\xaa\xbb\
-\xb1\x9a\xc5\xc5\xc5\x93\xe7\xcc\x99\x73\x5d\x97\x2e\x5d\xec\x7e\
-\xb0\x25\xa6\xb1\x89\x21\xf1\xc7\x58\x8c\x08\xef\x1d\x98\x38\xc0\
-\xcf\x81\xe3\x9d\x8c\xe7\xd8\x22\x18\xe8\xcd\xf2\xbc\x35\x0c\x7a\
-\x30\x76\x9d\xa4\xcb\xff\x01\xe9\x77\xc3\x5d\xb7\xc0\xb6\x02\x38\
-\xb4\x05\xbc\xff\x99\x30\xec\x6d\x48\x4a\xbe\x87\xd4\xd4\x58\x14\
-\x23\x2e\x89\xb5\x6a\x19\xd1\x9e\x82\x79\xe0\x58\x56\xd2\xe0\x24\
-\x15\x5d\xca\x9e\x33\x03\xd8\x42\x58\x98\x45\x38\x8e\x6c\x4c\x4d\
-\x63\x75\x02\xeb\x17\x8d\x31\x1a\x81\xd1\x42\x79\xea\x94\x50\x28\
-\x34\x65\xce\x9c\x39\xe5\xa9\x46\x58\x6a\x88\x12\x9d\xc0\x8e\x1d\
-\x3b\x9e\xec\xb6\x2d\xf1\x88\x5d\x09\x8c\x33\x1c\x89\x97\xb8\x90\
-\x79\x51\xd5\x6d\x22\xd2\x91\x37\x87\xcd\xe4\xf2\xab\xa0\xed\x15\
-\x6e\x9b\x54\x3d\x9e\x7c\x01\xa6\x4e\x82\x87\xfb\xc0\x6b\x6f\x99\
-\xb6\x2e\x5d\xe1\x80\x83\x92\xb9\xa9\x7d\xba\xa4\xa4\x6c\xd4\x60\
-\xf0\x81\x3a\xb0\xe4\x51\x11\xb6\x46\x69\xef\x17\x45\x83\xb2\x3c\
-\x16\x62\xb6\x79\x9f\x12\xe1\x14\x8c\x73\xf6\x16\x30\x1a\x13\x7f\
-\xfa\x8e\x08\xff\xc5\x24\x4f\x0d\xc0\x24\x3a\xa5\xee\x89\xe1\xaa\
-\xac\x13\x53\x3b\xfb\xbf\x22\xec\x83\x79\xb8\xd9\x8a\x71\x44\xaf\
-\xc7\x64\x21\x47\x0d\x8f\xb0\xc4\x0d\xf3\x31\xf7\x5a\x27\xdc\xff\
-\x1f\x97\xb1\x75\xeb\x56\xcf\x9f\x7f\xfe\x49\x8b\x16\xe5\xe9\xf0\
-\x5b\x2c\xf5\x9b\xb2\x9d\xc0\x66\x7b\x55\xab\x02\x86\x8b\x58\x87\
-\x36\x0e\x51\xd5\xd9\x22\x32\x88\xee\x37\x0f\x22\xf3\xb7\x34\x0e\
-\x88\x54\x34\x89\x01\x1a\x34\x84\xff\x7d\x08\x6d\xcf\x82\x2b\xae\
-\x82\xf6\xd7\x9b\xf6\xcb\xff\x01\xff\x7e\x5a\x78\xf2\x91\x7b\x45\
-\x64\x9a\xaa\x96\x19\x53\xba\x87\xe4\x61\x84\x74\x8f\x28\xe3\x7c\
-\xc9\x96\xd6\x9f\x44\x89\x3d\xc5\xe8\x4f\xce\x2c\x79\xa1\x4a\xa1\
-\x93\xd0\x54\x22\x3f\x94\x0a\x7c\xa8\xca\x5a\x11\xba\x02\x83\x30\
-\x01\xfa\x73\x81\xfe\x18\xd9\x8e\x73\xc2\xe6\xdb\xe6\xd8\x13\x9e\
-\x94\x92\x83\x89\x25\x2c\x61\xa3\xd3\x67\x7b\xd8\x75\xdf\x14\xe1\
-\x77\x8c\x63\xf9\x3c\xd0\x08\x93\x18\x30\x11\x13\x02\x61\x89\x63\
-\x54\x09\x89\x70\x1b\xa6\x8a\x53\x3e\xf0\x83\x2a\xeb\x5d\x32\x27\
-\x27\x39\x39\xb9\x30\x27\x27\xa7\xa1\x75\x02\x2d\xb1\x8c\x44\x66\
-\xde\x88\xc8\xe1\x50\x2b\xe5\x76\xea\x82\x89\xaa\x5a\xe9\x8a\x08\
-\x96\xd8\x40\x44\x92\x48\x4d\x9b\xc6\x45\x97\x9c\xca\xe8\xf1\x31\
-\x18\x1c\xe8\xf0\xda\x4b\xf0\xd2\x7f\x60\xc6\x3c\x68\xd2\x6c\x57\
-\xfb\x3f\xd3\x95\x51\x1f\x6e\x21\x18\x38\x4e\x55\x23\x93\x32\x2c\
-\x35\x88\x88\xa4\x03\xc3\x55\xb5\x41\x45\x7d\x7d\x3e\x9f\x07\xac\
-\x54\x4c\x7d\xc1\x11\xd2\x5f\x0a\xec\x87\x79\xf0\x50\x76\x97\x81\
-\xf9\x21\xbc\x9a\x88\x93\x18\xf2\xac\xea\xce\x72\x9f\x35\x86\xc7\
-\xe3\x99\x78\xe5\x95\x57\x5e\x3c\x70\xe0\xc0\xda\x08\x45\xb0\x38\
-\x6c\xdc\xb8\x91\x65\xcb\x96\x31\x71\xe2\xc4\xfb\x47\x8f\x1e\xfd\
-\xb2\xdb\xf6\xc4\x1b\xbb\x39\x81\x16\x4b\x7d\x44\x44\x0e\x23\xc5\
-\xb3\x80\x17\x5e\x6d\xc4\x1d\x3d\xdc\x36\xa7\x7a\xa8\xc2\x75\x97\
-\x81\x08\x7c\xf6\xbd\xf9\x0a\x26\x56\xf0\xec\x13\x02\xac\x5e\x99\
-\x41\x20\xd0\xb6\x1e\xe8\x09\xc6\x2d\x55\x71\x02\x2d\xf5\x0b\x11\
-\x52\x31\x2b\xc0\xe5\xb1\x40\x95\x9d\x71\xb6\xb5\xe9\x04\x8a\xc8\
-\xa0\x26\x4d\x9a\x0c\xf8\xfc\xf3\xcf\x63\xf7\xc1\x34\x06\xd8\xbc\
-\x79\x33\x57\x5c\x71\x05\xc0\xa5\xaa\x1a\x55\xd9\xc3\x52\x7d\xec\
-\x16\xaa\x25\x26\x50\xd5\x3c\x11\xb9\x8b\x87\x7b\x8f\xe4\xfc\x8b\
-\x53\x68\x7d\xb4\xdb\x26\x55\x1d\x11\xf8\xef\x48\x38\xe7\x44\x18\
-\x36\x18\x7a\xdd\x67\xda\x1b\xed\x05\x23\x3e\xf6\x70\xc5\xf9\x17\
-\x63\x2a\x73\xd8\xa7\x5d\x8b\x25\x02\x55\xfc\x40\x5f\xb7\xed\x08\
-\x23\x63\xf5\xea\xd5\x69\x1b\x37\x6e\x64\xff\xfd\xf7\x77\xdb\x96\
-\xb8\x25\xec\x99\xd8\x3e\x1c\xd7\x02\x36\x3b\xd8\x12\x33\xa8\xea\
-\x47\x84\x42\x63\xb8\xbd\x63\x21\x81\x18\xdd\xa1\x6b\xd2\x0c\x86\
-\xbe\x09\x4f\x0c\x80\xf9\x61\x02\xf8\x67\x9e\x0d\x0f\x0f\x12\x92\
-\x92\x9e\x15\x91\x93\xdc\x33\xd0\x62\xb1\x54\x92\x99\x22\x52\x3c\
-\x77\xee\xdc\x8a\x7b\x5a\x2c\xf5\x14\xeb\x04\x5a\x62\x8b\x60\xb0\
-\x27\x4b\x16\xe7\xf3\xe4\x23\xb1\x2b\x1b\xd3\xfe\x7a\xe8\x7c\x2b\
-\xdc\x79\x0b\xec\x08\x4b\xca\x7d\xe0\x11\x38\xed\x4c\xc1\x93\x3a\
-\x5a\x44\xec\x76\xa5\xcb\xf8\x7c\xbe\x71\x3e\x9f\x2f\x16\x25\x7c\
-\xe2\x1a\x11\x5a\x88\xd0\x4b\x84\x97\x45\x18\x1e\x71\xf4\xaa\x2b\
-\x3b\x54\x75\xbb\xc7\xe3\x99\x9f\x93\x63\xab\x99\xd5\x36\x1e\x8f\
-\x87\x94\x94\x14\x1b\x7b\x59\x0b\x58\x27\xd0\x12\x53\xa8\xea\x66\
-\xfc\xfe\xce\xbc\xf6\x12\x64\x4c\x76\xdb\x9c\xea\xf3\xdc\x10\xf0\
-\x17\xc1\xa0\x07\x77\xb5\x25\x27\xc3\x5b\x1f\xa5\xe0\xf1\xb4\x42\
-\xa4\x4e\x6b\x35\x5b\xa2\x62\x75\x02\xeb\x19\x22\x74\xc4\x94\xbb\
-\x1c\x0c\xf4\x02\xae\x01\xba\x62\x4a\x15\x5e\x4f\x1d\x97\x0f\xf4\
-\xfb\xfd\x13\x33\x33\x33\xa3\x95\xf4\xb4\xd4\x10\xc5\xc5\xc5\x0c\
-\x19\x32\x84\x0e\x1d\x3a\xd8\x1d\x92\x5a\xc0\x3a\x81\x96\x98\x43\
-\x55\x33\x50\x7d\x96\xf4\x1b\x77\xb0\x39\xdf\x6d\x73\xaa\xc7\xdf\
-\x1a\xc1\x9b\x1f\xc0\xdb\xff\x85\x1f\xbe\xd9\xd5\x7e\xd8\xe1\xf0\
-\xb2\x2f\x05\xd5\x7b\x44\xa4\x9d\x7b\x06\x5a\x2c\xf5\x0b\x11\x3c\
-\xc0\x30\x8c\x1e\xe4\x61\xc0\x62\x4c\xad\xf3\x46\xc0\xad\x98\x1a\
-\xd2\xcf\xd6\xb1\x59\x19\xb9\xb9\xb9\x9e\xc2\xc2\xc2\x3a\xbe\xac\
-\xc5\x52\x33\x58\x27\xd0\x12\x9b\xa8\x3e\xc6\x96\xfc\x45\xf4\xea\
-\x56\xe4\xb6\x29\xd5\xe6\xf4\x36\xf0\xf0\xa3\xd0\xeb\x0e\x58\xbf\
-\x6e\x57\xfb\x4d\xb7\xc1\xf5\x37\x86\xf0\x78\xde\x17\x91\x83\x6a\
-\xeb\xf2\x22\x74\x10\xa1\x6d\x0d\xce\x77\xa4\x08\x3d\x45\xb0\x5b\
-\xd9\x96\xda\xe0\x08\xe0\x20\xe0\xf9\xb0\x0a\x48\x8d\x54\x09\xa9\
-\xf2\x01\xf0\x21\xf0\x64\x1d\xdb\x94\x11\x0a\x85\x64\xc1\x82\x05\
-\x75\x7c\x59\x8b\xa5\x66\xb0\x4e\xa0\x25\x26\x51\xd5\x20\x7e\x7f\
-\x67\xbe\x19\xa7\x7c\x3c\xd2\x6d\x73\xaa\xcf\x7d\xfd\xe1\x88\xa3\
-\xe0\x9e\xee\xa5\xdb\x07\x0f\x4f\xe2\x80\x83\xf6\x26\x25\xe5\xdd\
-\x5a\xbc\x7a\x3f\xa0\x7b\x85\xbd\x2a\xcf\x99\x98\x4a\x0e\xfb\x94\
-\x34\x88\x70\xaf\x08\x17\xd6\xe0\x35\xea\x92\xf6\xe0\x6e\x8d\x5a\
-\x4b\x29\xf6\xc3\x94\x25\xcc\x72\x5e\x6f\x04\x8e\x0b\x3b\x3f\x0f\
-\x38\xa3\x2e\x0d\x52\xd5\xb5\xa9\xa9\xa9\x79\xd9\xd9\x75\x52\xce\
-\x3a\x61\x09\x06\x83\x84\x42\x21\x9b\x1d\x5c\x0b\x58\x27\xd0\x12\
-\xb3\xa8\xea\xef\x14\x17\xdf\x43\x9f\x1e\x01\x96\x2d\x75\xdb\x9c\
-\xea\x91\x94\x04\x6f\xbc\x07\xd3\xa7\xc0\x88\xe1\xbb\xda\xf7\x6d\
-\x0c\x6f\x7d\xe8\xa1\xb8\xf8\x4a\x11\xf1\xba\x67\x60\x95\xc8\xc2\
-\x48\xdc\x84\x97\xa6\x7b\x1c\x88\xc9\x7a\x7f\x5e\xaf\x37\x60\x85\
-\xa2\xeb\x15\x7f\x62\x3e\xb3\x9a\x3a\xaf\x7f\x07\xce\x13\xa1\x44\
-\xa7\xaf\x1d\x50\xe7\x95\xae\x02\x81\xc0\xc4\x39\x73\xe6\xc4\x5a\
-\x85\xad\x98\x21\x39\x39\x99\xde\xbd\x7b\xf3\xe9\xa7\x9f\xda\x34\
-\xec\x5a\xc0\x3a\x81\x96\x98\x46\x55\xdf\xa2\x38\xf8\x0d\x5d\x3b\
-\x15\x52\x1c\xa3\x09\xc3\xcd\x0f\x83\x97\x86\xc1\x23\xf7\xc3\xe2\
-\x45\xbb\xda\xcf\xbb\x08\xee\xed\x27\x24\x27\xbf\x22\x22\xc7\xec\
-\xe9\x65\x44\xf0\x88\x70\xb8\x08\x95\xca\xb2\x13\xe1\x60\x11\x9a\
-\x47\xb4\xed\x2b\x42\x2b\x91\x9d\xa5\xe6\x76\xa2\xca\x6f\xaa\xbc\
-\xa2\x4a\x95\x02\xa4\x44\x68\x22\x42\xb3\x8a\x7b\x5a\x12\x19\x55\
-\x56\x00\xbf\x02\xd7\x3a\x4d\x6f\x00\xff\x07\xfc\x21\xc2\x7c\xa0\
-\x1b\x66\x4b\xb8\x8e\xed\xd2\xa9\xf3\xe7\xcf\x97\x50\x28\x54\xd7\
-\x97\xb6\x58\xf6\x18\xeb\x04\x26\x20\x22\x1c\xed\xc4\x6e\xc5\x47\
-\xe6\x63\x30\xd8\x8d\x85\xf3\x0a\x78\xfe\x89\x18\xf5\x02\x81\x4e\
-\x37\x43\xfb\x0e\x70\xd7\x2d\x94\xd2\x40\xec\xff\x38\x1c\x7f\x52\
-\x12\x1e\xcf\x28\x11\x49\xad\xee\xf4\x22\xf4\xc7\x04\xce\x2f\x05\
-\x36\x89\xec\xbe\xcd\xe9\x6c\xdd\xaa\x08\x67\x89\xb0\x04\x58\x0d\
-\x0c\x71\xce\x1d\x2f\xc2\x6c\x20\x1f\x58\x02\x14\x88\xf0\xb8\xc8\
-\x2e\xc1\x79\x11\xba\x38\xe3\xff\xee\xbc\xf6\x03\x7b\x03\x03\x9c\
-\x76\x15\xe1\xc1\x88\xfe\x2b\x80\x55\xc0\x0a\x11\x96\x8b\x70\x55\
-\x75\xdf\xa3\x25\x21\xb8\x14\x18\x0b\xa0\xca\xcf\xc0\x65\x98\x1a\
-\xd3\x39\xce\xb9\xba\x4e\x0c\x01\xc8\x28\x2a\x2a\x4a\x5e\xbc\x78\
-\xb1\x0b\x97\xb6\x58\xf6\x8c\x84\x73\x02\x45\xf8\x4a\x84\xd5\xce\
-\xb1\x4a\x84\x1c\x11\x3e\x14\xa9\xbd\x58\x12\x11\xee\x10\xe1\x9a\
-\xda\x9a\xbf\x1a\x9c\x8b\x89\xdd\x6a\xe8\xb6\x21\x35\x81\xaa\x6e\
-\x20\x10\xb8\x85\x17\x9e\x82\x9f\x67\xb8\x6d\x4e\xf5\x79\xf1\x75\
-\xd8\xb8\x01\x9e\x1a\xb8\xab\xcd\xe3\x81\x11\x1f\xa7\x90\x94\x74\
-\x1c\xf0\x54\x75\xa6\x15\xe1\x0e\xe0\x69\x60\x10\xb0\x3f\xe6\xf7\
-\x7f\x37\xa5\xe3\xa9\xc2\x79\xdf\x39\x8e\x04\xfa\x8b\xb0\x17\x30\
-\x11\x53\x61\xe8\x4c\xe0\x00\x60\xa0\x73\xf4\x2f\xe7\xd2\xad\x81\
-\x02\x4c\x46\xe7\xe1\xce\xf1\x5f\xc7\xa6\x5b\x31\xab\x36\xa3\x81\
-\xd3\x81\x53\x81\xe9\xc0\x17\x22\x1c\x5b\x9d\xf7\x59\xd3\x58\x9d\
-\xc0\xfa\x87\x2a\x2b\xc3\x92\x42\x50\x65\xa2\x2a\x5d\x54\xb9\x05\
-\x73\xff\xfc\xad\xee\x6d\xd2\xdf\x53\x52\x52\x36\x59\xbd\xc0\xda\
-\xc3\xea\x04\xd6\x1e\x09\xe7\x04\x62\x3e\xc0\x02\xc0\x63\xc0\x13\
-\xc0\x6c\xcc\x13\xe4\x74\x11\x4e\xab\xa5\x6b\xf6\x01\xba\xd4\xd2\
-\xdc\x16\x40\x55\x7f\x40\x75\x28\xb7\x77\x2c\xa4\x60\x6b\xc5\x03\
-\xea\x23\xfb\xec\x0b\x6f\xbe\x6f\x4a\xca\x85\x6b\x20\x1e\x79\x14\
-\x3c\x37\x34\x19\x91\x07\x44\xe4\xff\xaa\x31\x73\x7f\xe0\x6b\x55\
-\x5e\x54\x65\x93\x2a\x0b\x31\xda\x6a\x8d\xca\xe8\xff\xb6\x2a\x8f\
-\xaa\xb2\x44\x95\xdf\x30\xc9\x23\x07\x01\x37\xab\x32\x5b\x95\x8d\
-\xaa\xbc\x04\x7c\x0c\x3c\x54\x56\x36\xb0\x2a\x79\x98\x52\x4f\xf9\
-\xaa\x2c\x73\x8e\x2d\xce\x76\xf4\x0b\xc0\x34\x55\xfa\xaa\x92\xa5\
-\x4a\xb6\x63\x53\x01\x26\xae\xb0\x3e\x60\x75\x02\x63\x8b\xa1\xc0\
-\x27\x6e\x5c\x58\x55\xa7\x64\x67\x67\xdb\xfd\xe0\x5a\xc0\xea\x04\
-\xd6\x2e\x89\xe8\x04\x02\x6c\x50\x65\xb8\x2a\x3e\x55\xba\x03\xb7\
-\x60\xfe\xd9\x47\xcd\x04\x74\xe2\xa0\x2a\x8c\xa5\x12\xe1\x20\x67\
-\xab\xb5\xac\x0f\xd7\xb2\xc6\xed\x2f\xc2\x31\x22\x15\x17\x39\x17\
-\x21\x49\x84\x23\x44\xca\x5e\xc5\x13\x21\xcd\x89\xdb\xaa\xf2\x93\
-\x93\x33\x7f\x2b\x11\xf6\xae\xea\x58\xd7\x51\xed\xcf\x86\x75\xcb\
-\xe8\xdb\x23\x76\x65\x63\xce\x3e\x1f\xfa\x3e\x0c\x3d\x6e\x87\xfc\
-\x4d\xbb\xda\xd3\xef\x86\x2b\xaf\x56\x3c\x9e\x8f\x44\x64\xbf\xca\
-\x4e\xe7\xdc\x8b\xad\x81\x1f\xc3\xdb\x1d\x47\x70\x79\x19\xc3\xbe\
-\x8f\x78\x7d\x2a\x90\xe7\x8c\x09\x67\x3c\xb0\x17\x66\x85\xaf\x2a\
-\x34\x07\x9a\x60\xb6\x80\x7b\x96\x1c\x40\x3a\xf0\x07\x75\x2c\xf8\
-\x6b\xb1\xec\x29\xc5\xc5\xc5\x3f\x65\x65\x65\xc5\x6e\x38\x8a\x25\
-\x61\x49\x54\x27\x30\x92\x9f\x00\x3f\x94\x0e\x4e\x17\xe1\x1c\x11\
-\xe6\x61\xe2\xa0\x96\x02\x9b\x45\xe8\x1d\x39\x58\x84\x8e\x22\xac\
-\x04\xd6\x02\x8b\x80\x7c\x11\x5e\x76\xce\x2d\x02\x4e\x06\x6e\x0a\
-\x8b\x8b\xf2\x39\xe7\x2e\x15\x61\x31\xb0\x01\x13\xf0\xbc\x49\x84\
-\x59\x22\x1c\x1d\x31\xff\x4f\x22\x8c\x17\xc1\x8b\x91\x45\xc8\x05\
-\xb6\x8a\xd0\x2f\xa2\x9f\x88\xf0\x34\x26\x3b\x73\x89\x33\xdf\x9d\
-\xce\x9c\xe5\x06\x4c\x8b\xd0\x50\x84\xc1\x98\x95\x98\x25\xce\x7b\
-\x9d\x24\x42\xcb\x0a\x7f\x7a\xf5\x04\x55\x2d\x22\x10\xe8\xc4\xd8\
-\x51\xc2\x67\xa3\xdc\x36\xa7\xfa\x3c\xfc\x28\x34\x69\x0a\xf7\xf6\
-\x2c\xdd\xfe\xda\x88\x24\xf6\x6d\xbc\x3f\xc9\xc9\x55\xd9\xa2\x3c\
-\xd0\xf9\xba\x29\xca\xb9\x68\x6d\x60\xa4\x36\xc2\x39\x18\x73\xdf\
-\x45\x52\xd2\x76\x60\x94\x73\xe5\x51\xf2\x77\xd6\x0a\xb8\x2e\xe2\
-\x58\x83\xf9\x1b\xb2\x58\x62\x89\x8c\xcd\x9b\x37\x7b\x56\xac\x58\
-\xe1\xb6\x1d\x16\x4b\x95\x48\xa9\xb8\x4b\x42\x70\x05\x66\xeb\x67\
-\x7a\x49\x83\x08\x27\x01\x53\x80\x2f\x31\xdb\x53\x4b\x80\x9e\xc0\
-\x10\x11\xd6\xaa\xf2\xb1\xd3\xaf\x03\x26\xae\xe9\x4d\xe0\x45\x60\
-\x25\x70\x12\xec\x8c\x6b\x6a\x0b\xfc\x80\x71\xdc\x4a\x1c\xc8\x2d\
-\xce\x57\xc5\xc4\x79\x4d\xc6\x04\xed\x5f\x86\x11\x3b\xfd\x48\x84\
-\x33\x54\x09\xdf\x5e\x38\x07\xd8\x17\x93\x01\xb7\x18\x13\xdf\xf5\
-\x8c\x08\x3f\xaa\x32\xdb\xe9\xd3\x13\xa3\xfd\xf6\x26\xf0\x32\x70\
-\x0a\x30\x00\x23\xb2\xba\xa4\x82\x9f\xc1\x7b\xc0\x05\x4e\xff\x31\
-\x40\x1b\x8c\xbc\xc7\x97\x22\x9c\xa2\x4a\x9d\x3d\xe5\x8a\xc8\x49\
-\x98\xf7\x59\x3d\x42\xc5\xd3\xe9\x71\xdb\xf9\xb4\x39\x27\x85\x43\
-\x9a\x57\xdc\xbf\xbe\x91\x92\x62\xaa\x89\x5c\x70\x2a\x7c\x3c\x12\
-\x6e\xba\xdd\xb4\x1f\x70\x20\xbc\xf1\xbe\x87\x1b\xae\xbc\x41\x44\
-\xd2\x55\xf5\x9d\x4a\xcc\xb6\x12\x28\x66\x97\xac\x46\x38\x4d\x61\
-\xb7\xd5\x3d\x30\xf7\x65\x38\xcb\x30\xab\x81\x91\x94\x38\x73\x7f\
-\x95\x73\x7d\x85\xdd\x56\xa4\x4b\xee\xc5\xb7\x54\x19\x4e\xfd\xa5\
-\xbd\xdb\x06\x58\x62\x86\x39\xc9\xc9\xc9\x3b\xb2\xb3\xb3\x1b\x1c\
-\x72\xc8\x21\x6e\xdb\x12\x77\x04\x83\x41\x54\xd5\x6e\xb7\xd7\x02\
-\x89\xea\x04\xfe\xdd\x59\x45\x13\xe0\x2c\xe0\x72\x8c\x03\xf8\x5e\
-\x58\x9f\x67\x31\xce\xda\x2d\x61\x92\x17\x0f\x8b\x70\x01\xf0\x20\
-\x26\x1e\x0a\x8c\xe3\x37\x59\x95\xbb\xc3\xc6\x4e\x77\x0e\x54\x59\
-\xe1\x64\x49\x6e\x53\x65\x59\xb8\x11\xaa\x4c\x88\xb0\x6b\x8c\x93\
-\xb1\xfb\x21\x70\x02\x10\xae\x8b\xd4\x18\xb8\x5d\xd5\x7c\x80\x3a\
-\x59\x96\x9d\x30\x8e\x63\x89\x13\xd8\x0f\xc8\x52\xa5\x64\x09\x69\
-\xb1\x93\xd1\xf9\x7b\x79\x3f\x0c\x11\xce\x06\x6e\x00\x1e\x52\xe5\
-\x15\xa7\xf9\x2f\x11\xb6\x03\xdf\x60\x9c\xe4\xf1\xe5\xcd\x51\xc3\
-\xcc\x27\x35\xed\x0c\x84\x73\xe9\xd0\xb9\xea\x7f\xf8\x0a\x64\x67\
-\x26\xd1\xe3\x76\x18\x37\xc1\x68\xf1\xc5\x1a\xad\x8e\x34\xf5\x85\
-\x1f\xb8\x07\xce\xb9\xc0\x94\x93\x03\xb8\xe4\x72\xe8\xd9\x07\xde\
-\x78\x75\x98\x88\x4c\x55\xd5\x72\x9d\x7b\x55\x02\x22\xcc\x02\x3a\
-\x89\xf0\xbc\xaa\x71\xf0\x44\xb8\x0c\x4c\x16\x6f\x25\x98\x0a\xf4\
-\x14\xa1\x6d\xc4\x3d\x7b\x3b\x66\x4b\xf9\xcf\x72\xc6\xae\x83\xd2\
-\xab\xc9\xaa\xac\x13\x61\x0e\x70\xb7\x08\xff\x53\x2d\xad\xed\x26\
-\x82\x94\xd8\xe9\x26\x56\x23\xd0\x52\x59\x54\x35\x98\x9a\x9a\xfa\
-\x4b\x4e\x4e\xce\x05\x57\x5d\x65\x13\xdc\x6b\x92\x12\x9d\x40\x4a\
-\x7f\x1e\x5a\x6a\x88\x44\x75\x02\xf7\x03\x6e\x02\xd2\x80\xa3\x81\
-\xed\x40\x6f\x55\x56\x86\xf5\x39\x13\xb3\xe2\xd6\x55\x4a\xaf\x63\
-\xac\x03\x2e\x17\x21\xc9\x99\xa7\x15\xec\x74\x9c\xaa\x8c\x08\xed\
-\x80\xce\x98\x38\xa9\xbd\xd8\x15\x88\xde\x92\xd2\x37\xfd\xbc\x12\
-\x07\x10\x4c\xd0\xbd\x08\xcb\x71\x56\x63\x44\xd8\x07\x68\xc1\x2e\
-\xe7\xb4\xa4\xdf\x52\xa7\x5f\x79\xb4\x71\xbe\x7a\x9c\xd8\xac\x12\
-\x92\x31\xe2\xab\x27\x51\x87\x4e\xa0\xaa\x86\x44\xa4\x0b\x1e\xcf\
-\x42\xce\x3a\x6f\x2f\xee\xe8\x51\xf5\x49\xd6\xac\x86\xf3\x4e\x82\
-\xa1\x2f\x98\x18\xbb\x58\xe4\xd6\x6e\xf0\xfd\x78\xb8\xfb\x56\x18\
-\x3f\x05\x92\x1d\x69\xbe\xc7\x9e\x85\x89\xdf\xa5\xb0\x34\xf7\x63\
-\x11\x39\x47\x55\x2b\x12\xaa\x1d\x88\x59\x8d\x1e\x25\xc2\x08\xcc\
-\x0a\xe0\x00\x8c\x04\x4c\x65\xf8\x18\xb3\x1a\x3e\x4a\x84\x47\x31\
-\x2b\x7f\x37\x63\x56\x8e\x6f\xac\x60\x95\x78\x32\xd0\x51\x84\x21\
-\x98\x78\xbf\xa9\xaa\x64\x02\x3d\x30\x61\x18\x19\x22\x0c\x77\x6c\
-\x69\x86\x79\xa8\xf9\x15\x93\xb4\x65\xb1\x20\x42\x37\xcc\x4e\x4d\
-\x45\x1c\x8b\x09\xdd\x71\x85\x40\x20\x30\x29\x33\x33\xb3\x0d\xec\
-\x14\xaf\xb6\xd4\x00\xaa\xae\x3f\x0f\xc6\x35\x89\xea\x04\xfe\xa6\
-\xca\x29\x00\x8e\xa6\xd9\xe7\xc0\x44\x11\x8e\x55\x65\xa5\x08\xa9\
-\x98\x38\xa7\x8d\x98\x38\xa5\x48\x7e\xc2\xc8\xab\x94\x6c\x87\xad\
-\x8b\xd2\xa7\x42\x9c\xd5\xc8\x67\x30\xba\x57\xd3\x30\x2b\x76\xfb\
-\x00\xa7\xb1\xbb\x7c\x4b\xb4\x2d\xb7\x42\xd8\x29\xda\x5b\x92\x54\
-\x92\x17\xa5\xdf\x96\x28\x6d\xe1\x34\xc5\x94\x63\x8a\x56\xde\x6b\
-\x02\xd1\xe3\xc1\x6a\x15\x55\x5d\x2e\x22\xdd\x79\xb8\xf7\x07\x9c\
-\x7f\x71\x0a\xad\x8f\xae\x78\x50\x38\x07\x37\x81\x57\xff\x07\x5d\
-\x3b\xc1\xc5\x97\xc2\x29\xa7\xd7\x8e\xa1\xb5\xcd\x90\x37\xe0\xdc\
-\x93\xe0\x85\xa7\xa0\xdf\xa3\xa6\x2d\x2d\x0d\xde\x19\xe5\xe1\xc2\
-\xd3\x4e\x05\xfe\x0d\x3c\x5a\xde\x14\xaa\x4c\x12\xe1\x4a\x4c\x46\
-\xfc\x3b\x18\x4d\xb5\xdb\x9c\x63\x55\x58\xd7\xbf\x30\xf7\x76\x28\
-\x62\x7c\x48\x84\x8b\x31\xab\xe3\xff\xc4\xfc\x6d\x2c\x02\xda\xa9\
-\xf2\x5d\x58\xd7\xb5\xec\x8a\xaf\x2d\xe1\x01\xcc\x96\xf4\x29\x98\
-\xd8\xd8\xd5\x40\xa6\x2a\xbf\x38\x21\x17\x4f\x63\x1c\xd2\xbf\x3b\
-\xe3\x67\x52\xb7\xab\xce\x96\xfa\xcf\x10\xcc\x03\x72\x65\xf8\xba\
-\x36\x0d\xa9\x80\x8c\x15\x2b\x56\x0c\xca\xcf\xcf\xa7\x71\xe3\x0a\
-\x73\xfc\x2c\x96\x7a\x41\xb9\x4e\xa0\x88\x9c\x83\x89\x69\x3b\x82\
-\xdd\xe3\x7a\xdc\x26\x84\x89\x2d\x9a\xa0\xaa\x33\xab\x3b\x89\x2a\
-\x6b\x45\xe8\x82\x59\x75\x1b\x02\x74\x52\xc5\x2f\xc2\x5f\xc0\x14\
-\xd5\xb2\x6b\x87\x3a\x82\xba\x0a\x1c\x56\xcd\xcb\xff\x0b\xf8\x4a\
-\x95\x1b\xc2\xe6\x3c\xbb\x9a\x73\xad\xc0\x48\xdf\x5c\x80\xd1\x65\
-\x2b\x99\x2f\x09\xb3\xca\x38\xbf\x9c\xb1\x4b\x31\x49\x42\xe9\xaa\
-\x95\x5e\x1d\xaa\x75\x54\x75\x94\xa4\xa6\x5d\x4b\xd7\x4e\xd7\xf3\
-\x53\x66\x03\x3c\x55\x54\xeb\x68\x77\x0d\xdc\x72\x87\x11\x60\x9e\
-\x92\x05\x0d\xeb\x5c\x42\x6c\xcf\xd9\x6f\x7f\x18\xfe\x2e\x74\x6c\
-\x07\x6d\xaf\x80\x33\x9d\xdb\xe3\xd8\x13\xe0\xc9\x17\x93\xe9\xdf\
-\x77\xa0\x88\x7c\xa7\xaa\xd3\xcb\x9b\x46\x95\x1f\x89\xc8\x10\x06\
-\x66\x44\xf4\x19\x8d\x89\x6f\x8d\x36\x7e\x1b\xe6\x7e\x2d\xef\x1a\
-\x13\xa0\x74\x88\x83\x2a\xf9\x98\xf8\xd5\x68\xfd\x73\x81\x1b\xcb\
-\x9b\xd3\x4d\x7c\x3e\xdf\x38\x60\x8d\xd7\xeb\xb5\xf5\x83\xdd\xe5\
-\x5c\xd8\xbd\x42\x4d\x19\x6c\xae\x4d\x43\x2a\x60\x86\x88\x84\xe6\
-\xce\x9d\x9b\x74\xe1\x85\xb1\x5a\x2e\xbb\x7e\xe2\x31\xff\xfb\xeb\
-\x9b\x0f\x12\x17\x44\x75\x02\x45\xc4\x83\xc8\xeb\xc0\x5d\x1c\xdc\
-\xd4\xcf\x09\x27\x27\x93\xea\xa9\x5f\xbf\x00\x7f\x40\x99\x9f\x53\
-\xcc\x9a\x55\x4f\x49\x52\xd2\x9b\xa8\x7a\x55\xb5\x5a\xc9\x0b\xce\
-\xd6\xea\xcb\xc0\x63\x22\x9c\xaa\xca\x1c\xe0\x5b\xe0\x06\x11\x06\
-\xaa\xb2\x26\xbc\x7f\x49\xcc\x92\x2a\xdb\x45\x98\x06\x74\x13\xe1\
-\x65\x55\xca\x8a\x21\x5a\x4b\x84\x8c\x86\x23\xdf\x92\xc4\xee\x09\
-\x1b\xb7\x55\xf3\x3d\x14\x8b\xf0\x2d\x70\x89\x08\x07\x87\xd9\x7c\
-\x17\x54\x28\x3d\x33\x09\xb3\x7a\xd3\x0b\xb3\xb2\x54\x0a\x57\x63\
-\xb4\x02\xfe\x9e\x2c\x59\x7c\x11\x4f\x0d\x6c\xca\xe3\xcf\x55\x3d\
-\xb8\xef\x3f\x2f\xc3\x85\xa7\xc1\x80\xfb\x60\x70\x7d\xce\x41\x28\
-\x87\x8b\xda\x42\x8f\xde\x66\x5b\x38\x23\x1b\x1a\x39\x8b\x22\x3d\
-\xfe\x05\xdf\x7d\xa5\x64\x4c\xfe\x44\x44\x8e\x57\xd5\x8a\x56\x7c\
-\x2d\x55\xc3\xea\x04\xd6\x03\x54\x77\xcb\x56\xaf\x97\xa8\x6a\x41\
-\x5a\x5a\xda\xc2\x9c\x9c\x9c\x13\xac\x13\x58\x73\x94\xe8\x04\x4e\
-\x9a\x34\xe9\x64\x8c\x68\xbd\xa5\x06\x29\x6b\x25\x70\x20\xa9\xa9\
-\x77\x30\x7c\x24\x74\xe8\x5c\xed\x52\x55\x75\x40\x32\x63\x3e\x02\
-\x6f\xd7\x6e\x04\x02\xcb\x31\x99\xb5\xd5\xe5\x15\xa0\x2f\x66\x6b\
-\xed\x3a\x8c\xc0\x6e\x3b\x60\x86\xe3\x20\xe6\x62\xb6\xc1\xce\xc6\
-\x08\x4e\x97\x88\x3f\xdf\x87\xc9\x22\x9e\x21\xc2\xeb\x18\x89\x8b\
-\x63\x80\x66\xaa\x3c\xe0\xf4\xf9\x09\x78\x54\x84\xff\x62\xe2\x9d\
-\xe6\xaa\x32\x51\x84\x77\x31\x01\xf7\xab\x30\x5b\x74\xd7\x10\x7d\
-\x4b\xb6\xb2\xf4\x77\x6c\xf9\x43\x84\x91\x98\x8c\xce\x7d\x1d\xdb\
-\xcb\x4c\xb0\x50\x25\x57\x84\x27\x80\x27\x44\x68\x8a\x71\x80\x8b\
-\x30\xf1\x8e\x37\x61\xb2\x9a\x7f\xd9\x03\xbb\xaa\x8d\xaa\x6e\x15\
-\x91\x4e\xbc\xfa\xe2\x54\x2e\x6b\x07\xe7\x5f\x5c\xb5\x09\x1a\xfe\
-\xcd\x64\xda\x5e\x7e\x2e\x5c\xfe\x0f\xb3\x3a\x18\x8b\x0c\xfa\x0f\
-\xfc\x34\x01\x1e\xfc\x17\x0c\x7b\xdb\xb4\x89\xc0\xf0\x91\xc9\xb4\
-\x39\xb6\x09\x5b\xb7\xbc\x4e\x35\x1f\x20\x2c\x16\x4b\xcd\xe0\xf7\
-\xfb\x27\x66\x66\x66\x1e\x45\xe5\x62\x18\x2d\x16\xd7\xd9\x6d\x65\
-\x45\x44\x1a\x21\x49\x03\x78\xfc\xb9\x14\x3a\x74\x76\xc3\xa6\xaa\
-\xd1\xb1\x0b\x3c\xf2\x64\x32\x92\x34\x48\x44\x2a\x23\xd2\x9c\xc5\
-\xae\x6c\xda\x9d\xa8\xb2\x19\x13\x40\xbf\xaf\x08\x4d\x55\x59\x8f\
-\x11\xad\xfd\x06\x53\x62\xeb\x63\x8c\x93\xd9\x1c\xf8\x28\x6c\xdc\
-\x2f\x98\x78\xa7\xa5\xce\xf8\xf7\x31\xe2\xd3\x0b\xc2\xa6\x7f\x11\
-\x78\x04\x53\x75\xe1\x5a\x4c\x6c\x14\xc0\x4b\x98\xf8\xa7\x7b\x31\
-\x92\x2e\x49\xc0\x3f\x30\x4e\xe3\xda\xb0\xf1\x73\xd8\x5d\xbb\x0d\
-\x60\x16\x61\x99\xbf\xaa\x2c\xc0\x24\xb4\xf8\x30\x71\x7e\xdf\x01\
-\x97\x38\xa7\xc3\xe7\x5b\xed\x5c\x23\x18\x36\xf6\x69\xa0\x03\x66\
-\xeb\x7f\x28\xf0\x16\xa6\x82\xc3\x14\x2a\x96\x97\xa9\x55\x54\x75\
-\x06\xf0\x34\x77\xdc\x58\x54\x4a\x40\xb9\xb2\x9c\x72\x3a\x0c\x78\
-\x02\xee\xe9\x6e\x12\x46\x62\x91\xd4\x54\xe3\xcc\x8e\xfd\x04\xbe\
-\x18\xb3\xab\xfd\xe0\x26\x30\xfc\xdd\x14\x42\xa1\x5b\x45\xa4\xde\
-\x6e\xad\x5a\x2c\x09\x42\xc6\xef\xbf\xff\x9e\x52\x54\x14\xbb\x7a\
-\xf5\xf5\x15\x11\xb1\x19\x22\xb5\x80\x44\x66\xde\x88\xc8\x79\x40\
-\x06\x73\xff\x80\x16\x2d\x5d\x31\xaa\xca\xe4\xfd\x01\x27\xb7\x02\
-\x38\xaf\xa2\xd8\xa8\x44\x43\x84\xc3\x31\x59\xce\x7d\x54\x77\xc5\
-\x0a\xc6\x1a\x22\x92\x4c\x5a\x83\x9f\xb9\xe2\x1f\x27\x32\xf2\xd3\
-\xaa\x6f\xd1\x85\x42\xd0\xfe\x12\x68\xd0\x00\xc6\x7c\x63\x56\xd1\
-\x62\x91\x37\x5f\x87\xa7\xff\x0d\xd3\xe7\x42\xb3\x43\x77\xb5\xf7\
-\xed\xa1\xbc\x3f\x62\x1b\xc1\xe0\x71\xaa\x5a\x51\x36\x78\xc2\x22\
-\x22\xe9\xc0\x70\x55\x8d\x5a\xea\x2e\x1c\x9f\xcf\xe7\x01\x2b\x15\
-\x13\xcb\x38\x6a\x07\xcf\xaa\x56\x5c\x8d\xa9\x66\xae\x27\x4d\x81\
-\x95\x3e\x9f\x8f\x53\x4f\x8d\x26\xad\x69\xa9\x2a\xeb\xd7\xaf\x67\
-\xe9\xd2\xa5\x4c\x99\x32\xa5\xcf\xe8\xd1\xa3\x87\xba\x6d\x4f\xbc\
-\x11\xcd\x09\xbc\x09\xf8\x88\xfc\x18\x73\xba\x1b\x0b\x40\x07\x55\
-\xfd\xdc\x6d\x53\xdc\x42\x84\x03\x80\x87\x31\x02\xd7\xeb\x30\xab\
-\x7a\xcf\x60\xb6\xb1\x5b\x3b\xc1\xfd\x31\x8b\x88\xb4\x22\xc5\x33\
-\x9f\x57\xdf\x6c\x48\x97\xae\x55\x9f\x60\xc5\x72\x93\x69\x7b\xcb\
-\x1d\x70\x5e\x0c\xc7\xec\xbc\xf8\x14\xf8\x03\xf0\xee\x68\x38\xa2\
-\xb5\x71\x68\x0b\xb7\xc3\xb9\x27\x05\x58\x9e\x37\x8b\x60\xf0\x22\
-\x2b\xac\x1a\x9d\xaa\x38\x81\x96\xd8\xa7\xae\x9d\x40\x80\xb4\xb4\
-\xb4\xe5\xdd\xba\x75\x3b\x34\x3d\x3d\xbd\xae\x2e\x19\xd7\x6c\xda\
-\xb4\x89\x76\xed\xda\x01\xfc\x9f\xaa\x4e\x76\xd9\x9c\xb8\x23\x51\
-\x25\x62\xe2\x95\x62\x4c\x4c\x61\x5f\x4c\x40\xfb\x66\x4c\x06\xe8\
-\x75\xb1\xee\x00\x02\xa8\xea\x52\x11\xf9\x27\xf7\xf6\x7c\x83\x73\
-\x2e\xf0\xd0\xb2\x55\xd5\x26\x38\xa4\xb9\xc9\xb4\x7d\xe5\x79\x18\
-\x36\xb8\x76\x8c\xac\x4b\xce\x38\x1a\xf6\xd9\x17\x4e\x3a\xd5\x6c\
-\x79\xf7\x79\xc8\xc3\xfd\xff\x3c\x17\x78\x08\x23\xe7\x62\xb1\x58\
-\xea\x98\x40\x20\x30\x31\x2b\x2b\xeb\xe6\xf4\xf4\x74\xfb\xf9\x5a\
-\x03\x58\x9d\xc0\xda\xc5\xde\xa4\x71\x84\x23\xc7\x71\x36\x80\x08\
-\x7f\x53\x65\xbb\xcb\x26\xd5\x38\xaa\xfa\x8e\xa4\x35\xb8\x96\xf4\
-\xce\xed\x98\x30\x2b\x6d\xa7\x80\x72\x65\x69\x77\x0d\x5c\xda\x0e\
-\x8a\x63\xbc\xd6\x7b\x71\x10\x7e\x5d\x00\xd9\x99\xe6\x98\xf8\x3d\
-\xbc\xf6\x12\x9c\x76\x66\x12\xd9\x99\x4f\x89\xc8\x0f\xaa\x9a\xe9\
-\xb6\x99\x16\x4b\xa2\xa1\xaa\x53\xe7\xce\x9d\x7b\x73\x28\x14\x22\
-\x29\x16\xab\x15\x59\x12\x0a\xeb\x04\xc6\x29\xf1\xe8\x00\xee\xc4\
-\x5f\xd4\x8d\x5f\xe7\x2f\xe2\xf9\x27\x0e\xa2\xff\xe3\x55\x0f\xee\
-\xf3\x78\xa8\xb2\xe6\x60\x7d\xe4\x8c\xb3\xcc\x51\xc2\xe7\xa3\xe1\
-\xfe\x7f\x82\xc7\x93\x44\xb0\xf8\x4b\x11\x39\x52\x55\xe3\xf7\x3e\
-\xa8\x65\x7c\x3e\xdf\xb7\xc0\x6a\xaf\xd7\x9b\xee\xb6\x2d\x96\x98\
-\x22\x63\xc7\x8e\x1d\x29\xb9\xb9\xb9\x1c\x75\xd4\x51\x6e\xdb\x12\
-\x17\x58\x9d\xc0\xda\xc3\x3e\xa6\x58\x62\x0e\x55\xdd\x44\x51\x51\
-\x17\x5e\x78\x5a\xf9\x79\x46\xc5\x03\x12\x85\xeb\x3a\xc1\xcc\x05\
-\x70\x61\x5b\xa1\x38\xd8\x14\x11\x37\xab\x27\x58\x2c\x09\x89\xaa\
-\x2e\x4a\x49\x49\xd9\x9c\x93\x93\xe3\xb6\x29\x71\x41\x89\x4e\x60\
-\x87\x0e\x1d\x4e\xae\xb8\xb7\xa5\xaa\x58\x27\xd0\x12\x93\xa8\xea\
-\x44\x84\xc1\x74\xed\x54\x44\xc1\x56\xb7\xcd\xa9\x3f\x1c\xf4\x77\
-\x18\xfd\xb5\xd1\x44\x54\xbd\x58\x44\xba\xbb\x6d\x92\xc5\x92\x68\
-\xa8\xea\xd4\xec\xec\x6c\x9b\x9c\x65\xa9\xf7\x24\x9c\x13\x28\xc2\
-\xed\x22\x9c\xeb\xe2\xf5\x6f\x14\xe1\x02\xb7\xae\x1f\x57\x14\x17\
-\x0f\x60\xd3\x86\x25\xdc\xe7\x0d\x56\xdc\x39\xc1\x18\xf9\x29\xec\
-\xbd\x0f\x88\xbc\x22\x22\x09\xf7\x77\x6e\xb1\xb8\x49\x71\x71\xf1\
-\x4f\x59\x59\x59\xf6\xff\x92\xa5\xde\x93\x88\x1f\x0e\xcf\x01\x6e\
-\xaa\x60\x3f\x0e\xdc\xec\xe2\xf5\xe3\x06\x55\xf5\xb3\x63\x47\x47\
-\x3e\xfd\x24\xc4\xd8\x4f\xdc\x36\xa7\x7e\xd1\xa0\x01\xbc\x3f\x16\
-\xa0\x11\xd0\xc3\x65\x6b\x62\x12\xaf\xd7\x7b\xa5\x8d\x07\xb4\x54\
-\x93\x8c\x4d\x9b\x36\xa5\xae\x5a\xb5\xca\x6d\x3b\xe2\x82\x60\x30\
-\x48\x28\x14\xb2\x2b\xab\xb5\x40\x22\x3a\x81\x96\x38\x42\x55\x7f\
-\xa5\x38\x78\x2f\xf7\x74\x0f\xb0\xc2\x6a\x24\x97\xe2\xa2\xb6\x70\
-\x5b\xf7\x22\x24\xe9\x5e\xb7\x4d\xb1\x58\x12\x8c\xcc\xa4\xa4\x24\
-\xbf\x8d\x0b\xdc\x73\x92\x93\x93\xe9\xdd\xbb\x37\x63\xc6\x8c\x99\
-\xeb\xb6\x2d\xf1\x48\x42\x3b\x81\x22\xa4\x8a\xd0\x52\xa4\xec\xac\
-\x23\x11\x92\x45\x38\x42\x84\x7d\x2a\x31\x9f\x47\x84\x63\x45\x76\
-\x15\x9d\xaf\xcc\x35\x9c\x7e\x4d\x44\x38\x4e\x84\x43\x2b\xea\x6b\
-\x29\x8d\xaa\x0e\xa3\x38\x38\x89\x3b\x6e\x2a\xc2\x3e\x2c\x96\xa6\
-\x5d\xfb\x06\x68\xe8\x48\x11\xa9\xf0\xfe\xb5\x58\x2c\x35\x83\xaa\
-\x06\x92\x93\x93\x67\x5b\x27\x70\xcf\x09\xd3\x09\xb4\x95\x7b\x6a\
-\x81\x44\x75\x02\x45\x84\xd7\x80\x2d\xc0\x1f\xc0\x1a\x11\xda\x97\
-\xee\x80\x47\x84\x67\x80\x6d\x40\x2e\xb0\x59\x84\x19\x22\x1c\x1d\
-\xd1\x6f\x87\x08\x4f\x88\xf0\x86\x33\xdf\x42\xa0\x95\x08\x49\x22\
-\x3c\x1d\x76\x8d\xf5\x22\xdc\xb4\xbb\x21\x9c\x2c\xc2\x5c\x60\x15\
-\xa6\xde\xf0\x72\x60\x85\x08\xcd\x6b\xfa\x4d\xc7\x35\x45\x45\xb7\
-\x91\x3d\xbb\x90\x21\xcf\x5b\x65\xd1\x70\x4e\x3d\x03\x8c\xb4\x82\
-\xad\x61\x55\x0d\x4a\x4a\xc7\x59\x2c\x55\x25\x10\x08\x4c\x9a\x3d\
-\x7b\xb6\xdf\x6d\x3b\x62\x9d\xfc\xfc\xfc\x92\x6f\xd7\xb8\x69\x47\
-\xbc\x92\xa8\x4e\x60\x3a\xb0\x0f\xa6\xac\xda\xa1\xc0\xf7\xc0\xe7\
-\x22\x1c\x1f\xd6\x67\x10\x70\x3f\xf0\x20\x70\x00\xd0\x06\x68\x0c\
-\x4c\x10\xe1\x6f\x11\xf3\xdd\x03\xb4\x00\xae\x03\x8e\x06\x56\x00\
-\x7d\x30\x25\xdc\xee\x03\xf6\x03\xda\x02\x03\x60\x37\xe7\x6e\x04\
-\x10\x04\x4e\xc7\xc4\x6f\xb5\x00\x06\x02\xf6\x9f\x47\x15\x50\xd5\
-\xb5\xf8\xfd\xb7\xf0\xd4\xc0\x10\xd9\x56\x23\x79\x27\x4d\x9a\xc1\
-\xfe\x07\xf8\x81\xd3\xdc\x36\x25\xd6\xf0\xf9\x7c\xfd\x00\xbb\x94\
-\x63\xa9\x2e\x19\xcb\x97\x2f\x4f\xdd\xb2\x65\x8b\xdb\x76\xc4\x34\
-\xeb\xd7\xaf\x27\x25\x25\x05\x60\xa5\xdb\xb6\xc4\x23\x89\xea\x04\
-\x6e\x07\xee\x54\x65\x85\x2a\x2b\x80\x3b\x81\xb5\x98\x72\x5b\x88\
-\xd0\x10\xb8\x17\x78\x47\x95\x57\x55\xd9\xa8\xca\x2f\xc0\x6d\xc0\
-\x21\x40\xa4\xec\x46\x12\x70\x95\x2a\xdf\xa9\xb2\x18\xb3\x7a\xf8\
-\x30\xf0\xb1\x2a\xc3\x54\xc9\x57\x25\x1b\xb8\x1b\x76\x73\x20\x9b\
-\x03\x5f\xa9\x92\xa5\xca\x76\x55\x96\xab\x32\x42\xd5\x3e\xf5\x54\
-\x15\x55\x1d\x8f\xc8\x9b\xdc\xde\xb1\x88\x42\xab\x91\xbc\x93\xa3\
-\x8f\xdd\x06\x58\x8d\xad\xaa\xb3\x01\x68\xe6\xb6\x11\x96\x98\x65\
-\xba\x88\xe8\xdc\xb9\x36\x94\x6d\x4f\xd8\xbe\x7d\x3b\x2f\xbc\xf0\
-\x82\x5a\xe1\xfb\xda\x21\x9a\x13\x58\x00\xc0\xd6\x18\x7a\x7a\xd9\
-\xb2\xb9\xe4\xbb\x1d\x95\x1c\x31\x45\x75\xd7\x4a\x9b\x2a\x3b\x80\
-\x9f\xd8\xb5\x65\xd6\x1a\xb3\x2a\xf7\x4d\xf8\x20\x55\x66\x63\x9c\
-\xc5\x13\x23\xe6\x9b\xa0\x4a\x78\x1d\xb2\xa6\xc0\xc1\xc0\x8f\x11\
-\xe3\x67\x62\xb6\x87\xc3\x19\x0d\x3c\x20\xc2\x87\x22\x5c\x2f\x42\
-\x5a\x25\xdf\x83\x25\x1a\xc1\xe0\x7d\xac\x59\xbd\x82\x87\x7a\x5b\
-\x79\x86\x12\xd6\xae\x69\x80\x59\x9d\xb6\x54\x8d\xd5\xc0\xbe\x3e\
-\x9f\xaf\x91\xdb\x86\x58\x62\x0f\x55\xdd\xe2\xf1\x78\x7e\xb3\x71\
-\x81\x7b\x46\x51\x51\x11\x05\x05\x05\xf6\xff\x79\x2d\x11\xcd\x09\
-\x9c\x03\xc0\xec\x59\x75\x6b\xc9\x9e\x30\x73\x5a\xc9\x77\xf3\x2a\
-\x39\x62\x63\x19\x6d\x07\x39\xdf\x1f\x5c\xc9\x7e\x65\x5d\xb7\xe4\
-\xfc\xa6\x4a\x5c\xfb\x5e\xcc\x76\xf2\xb1\xc0\x18\xe0\x4f\x27\xc6\
-\x30\x51\x57\x69\xf7\x08\x55\x2d\xa4\x68\xc7\x0d\x7c\xf0\x8e\xf0\
-\xf5\xe7\x6e\x9b\xe3\x3e\x85\xdb\xe1\x8f\x25\x0d\x00\xbb\x47\x5e\
-\x75\x56\x61\x1e\x2c\xff\xee\xb6\x21\x96\xd8\xc4\xef\xf7\x4f\xc8\
-\xca\xca\xb2\x09\x0d\x7b\x40\x71\x71\x31\xdb\xb7\x6f\xb7\xab\x80\
-\xb5\xc4\x6e\x8e\x86\xaa\xae\x20\xc5\x33\x9d\xfe\xf7\x06\xd8\x9c\
-\x1f\x6d\x4c\xfd\x62\xd3\x46\xe8\xd7\x27\x88\xc7\x93\xa1\xaa\x95\
-\x5d\xed\x88\xb6\xc5\xd3\x0c\x93\x94\x01\x90\xe7\x7c\x3d\x24\xbc\
-\x83\x93\xb5\xdb\x14\xf8\x2b\x62\x6c\x64\x32\x42\xc9\x3c\x4d\x23\
-\xc6\x27\x01\x4d\x4a\x0d\x54\xfc\xce\xf6\xef\xa9\xc0\xe1\xc0\xdb\
-\xc0\xbf\x81\x2b\x2a\x7e\x1b\x96\x68\xa8\x6a\x36\xa1\xe2\x7e\x78\
-\xd3\xfd\xac\x4e\x70\x9d\xae\x9c\x39\x10\x0a\x09\xd6\x09\xac\x32\
-\x5e\xaf\x77\xb6\xd7\xeb\x6d\xe8\xf5\x7a\xff\x70\xdb\x16\x4b\xcc\
-\x92\xf1\xdb\x6f\xbf\x25\x07\x02\xd6\x0f\xac\x2e\x7e\xbf\x5f\x0b\
-\x0a\x0a\x36\xb8\x6d\x47\xbc\x92\x12\xb5\x35\x18\xe8\xca\x92\xc5\
-\x33\x38\xfd\xa8\xc6\x74\xf7\xa6\x70\xec\x09\xe0\xa9\x67\x49\x72\
-\x81\x00\xfc\x3a\x1f\xde\xf2\x05\xd9\x9c\x9f\x4f\x20\x70\x5b\x15\
-\x46\xb7\x15\x61\x7f\x55\xb3\x2a\x27\xc2\x41\xc0\x65\x80\xcf\x39\
-\xbf\x14\xb3\x7d\x76\x0b\xf0\x61\xd8\xb8\x6b\x81\x7d\x81\x8c\xf2\
-\x26\x57\x65\xa3\x08\x0b\x30\xa2\xd4\xc3\xc3\x4e\x5d\x0f\x34\x28\
-\x67\x5c\x9e\x08\x8f\x61\x92\x4a\xda\x12\xb1\x1d\x6d\xa9\x12\x2f\
-\x51\x54\x74\x2d\x77\xdf\xda\x86\x2f\x7e\x4c\x45\x12\x54\x75\x27\
-\x73\x56\x88\xa4\xa4\xcd\x5a\x5c\x9c\x57\x71\x67\x8b\xc5\x52\xc3\
-\x64\x04\x83\xc1\xa4\x85\x0b\x17\x72\xf2\xc9\x36\x2c\xb7\x3a\x8c\
-\x1b\x37\xce\xff\xeb\xaf\xbf\x8e\x19\x3a\x74\xa8\xdb\xa6\xc4\x25\
-\x51\x9d\x40\x55\xcd\x15\x91\xa3\xd9\xb8\xe1\x19\x06\x3f\xd7\x0e\
-\x7f\x51\x7d\x94\x2b\x51\xd2\xd2\x96\x13\x08\x7c\x4b\x28\xd4\x5f\
-\x55\xa3\x6d\xdd\x96\xc5\x4a\xe0\x7b\x47\x02\x06\xe0\x11\xa0\x08\
-\x78\x01\x40\x95\xa0\x08\xfd\x80\xf7\x44\x78\x0f\xb3\x4d\xdb\x12\
-\x78\x02\x98\x06\x8c\xaa\xc4\x35\x1e\x01\x3e\x13\x61\x24\xc6\x91\
-\x6c\x09\x3c\x80\x09\x36\x07\x40\x84\xc6\xce\x7c\xef\x61\xb6\x94\
-\xd3\x80\x4e\xce\xd7\x6f\xab\xf0\x7e\x2c\x11\xa8\xaa\x8a\xc8\x4d\
-\xcc\xc8\xf8\x15\xdf\x2b\xa9\xfc\x33\x01\xf5\x92\xf3\x37\xc1\x4b\
-\xff\x09\x10\x0a\x7d\xe9\xb6\x29\x16\x4b\x22\xa2\xaa\x7f\xa5\xa5\
-\xa5\xad\xca\xc9\xc9\x69\x6a\x9d\xc0\xaa\x13\x0a\x85\x58\xbe\x7c\
-\x79\x12\xbb\x76\xe7\x2c\x35\x4c\x99\x71\x67\xaa\xba\x51\x8b\x8b\
-\x7b\x68\xd1\x8e\x16\xaa\x2a\xf5\xf0\x48\xd2\x1d\x3b\x0e\xd3\xe2\
-\xe2\x1e\x55\x74\x00\xa7\x03\x43\x81\x21\x18\x09\x98\xd7\x31\x4e\
-\x61\x9b\xf0\x8c\x5c\x55\xde\x07\xae\xc1\x38\x6f\xff\xc3\x94\xde\
-\x7a\x0b\xb8\x4c\xb5\xd4\xf6\xef\x14\x60\xd9\xee\x3f\x3f\xbe\xc0\
-\x48\xc6\xb4\x06\xde\x71\xe6\xea\x08\x8c\x07\x16\x3b\xdd\x0a\x81\
-\x49\x40\x17\x60\x24\x66\xd5\xb0\x39\x70\xbd\x6a\xe9\xa4\x12\x4b\
-\xd5\x51\xd5\x15\x04\xfc\xdd\x18\xf4\x50\x31\x0b\x12\x30\x43\xaf\
-\x5f\x1f\xd8\x56\x50\x88\xb9\xcf\x2d\xd5\xc4\xe7\xf3\x1d\xeb\xb6\
-\x0d\x96\xd8\x25\x18\x0c\x4e\x9c\x33\x67\x4e\x71\xc5\x3d\x2d\x91\
-\x2c\x58\xb0\x80\x82\x82\x02\x0f\xf0\x9d\xdb\xb6\xc4\x2b\x12\xa6\
-\xc6\x6d\xb1\xc4\x25\x92\x9a\xfa\x2e\x2d\x5a\xde\xc8\xb4\xb9\x69\
-\x34\x28\x73\x37\x3e\xbe\x18\xff\x05\xdc\x7c\x1d\xc0\x75\xaa\xfa\
-\x85\xdb\xe6\xd4\x17\x44\x24\x1d\x18\xae\xaa\x95\xba\x11\x7c\x3e\
-\xdf\xa5\x18\x1d\xd1\x43\xbc\x5e\x6f\x82\x07\x98\xc6\x1e\x22\xf4\
-\x04\x9e\x55\xa5\xb1\x7b\x36\x48\x8f\x86\x0d\x1b\xbe\x36\x71\xe2\
-\xc4\x14\x49\xd4\xb0\x94\x6a\x32\x62\xc4\x08\x46\x8f\x1e\xbd\x64\
-\xe3\xc6\x8d\x47\xba\x6d\x4b\xbc\x62\x33\x50\x2d\xf1\x4f\x20\xd0\
-\x8b\xbf\x96\xaf\xe3\xdf\x0f\x26\xc6\xd3\xf8\xe7\xa3\xa1\x7b\x97\
-\x1d\xc0\x48\xeb\x00\xee\x31\x53\x31\xba\x9f\xd7\xb8\x6d\x88\x25\
-\x66\xc9\x28\x2c\x2c\x4c\x59\xba\x74\xa9\xdb\x76\xc4\x1c\x2d\x5b\
-\xb6\xd4\xce\x9d\x3b\xaf\x75\xdb\x8e\x78\xc6\x3a\x81\x96\xb8\x47\
-\x55\x0b\x28\xda\xd1\x89\xb7\x86\xc1\x0f\x71\x9c\x6b\xb3\x69\x23\
-\xdc\x79\x33\xa4\x77\x86\xc2\xc2\x4f\x30\xd2\x43\x96\x3d\xc0\xeb\
-\xf5\x16\x61\x56\x02\xaf\x75\xdb\x16\x4b\xcc\xb2\x30\x25\x25\xa5\
-\xc0\xea\x05\x56\x8d\xc5\x8b\x17\xd3\xb8\x71\x63\xd9\xb4\x69\xd3\
-\xff\xdc\xb6\x25\x9e\xb1\x4e\xa0\x25\x21\x50\xd5\x99\xa8\x3e\xc9\
-\xdd\xb7\xfa\x59\xbf\xce\x6d\x73\x6a\x8e\x6d\x05\x30\x63\x2a\xbc\
-\xfe\x32\x9c\x71\x8c\x9f\x2f\xc7\x6e\x00\xda\xab\x6a\xba\xaa\x6e\
-\x75\xdb\xbc\x38\x61\x14\xbb\x8b\xbc\x5b\x2c\x95\x42\x4d\xcc\x55\
-\x46\x76\x76\xb6\x8d\xbd\xaa\x02\xb9\xb9\xb9\x6c\xdd\xba\x35\xb4\
-\x6d\xdb\xc4\x92\xaf\xb6\x00\x00\x0b\x1d\x49\x44\x41\x54\xb6\x77\
-\xdc\xb6\x25\x9e\x89\x2e\x11\x63\xb1\xc4\x23\xaa\x4f\x51\xb8\xfd\
-\x6a\x6e\xbe\xf6\x14\x0e\x6d\x11\xdb\xf7\x7e\x30\xa8\xcc\xcb\x09\
-\xb2\x6c\x49\x0a\xaa\x82\x27\x75\x0b\x01\xff\x18\xe0\x01\x55\x8d\
-\x26\x52\x6e\xa9\x26\x5e\xaf\xf7\x13\xe0\x13\xb7\xed\xb0\xc4\x2e\
-\xc1\x60\x70\x72\x66\x66\xe6\x25\x40\xaa\xdb\xb6\xc4\x0a\xf3\xe7\
-\xcf\x2f\x6e\xd0\xa0\xc1\xec\xaf\xbe\xfa\x2a\xe4\xb6\x2d\xf1\x4c\
-\x6c\x7f\x10\x5a\x2c\x55\x40\x55\x8b\x45\xa4\x3d\x3f\xcf\xb8\x8b\
-\x9f\x67\x9c\xee\xb6\x3d\x7b\x48\x31\xb0\x08\x23\x02\x9d\xa9\xfe\
-\x22\x2b\xa1\x60\xb1\xd4\x5f\x32\x36\x6c\xd8\x90\xba\x66\xcd\x1a\
-\x0e\x3e\xf8\xe0\x8a\x7b\x27\x38\xab\x56\xad\x62\xec\xd8\xb1\xc9\
-\xc0\xe3\x1f\x7c\xf0\x81\xdb\xe6\xc4\x35\xd6\x09\xb4\x24\x14\xaa\
-\xba\x1a\x78\xd2\x6d\x3b\x2c\x16\x4b\x42\x31\x3b\x29\x29\x29\x90\
-\x93\x93\xe3\xb9\xfc\xf2\xcb\xdd\xb6\xa5\xde\xf3\xee\xbb\xef\xaa\
-\xc7\xe3\x59\x19\x08\x04\xac\x54\x5a\x2d\x63\x63\x02\x63\x0c\x11\
-\x3a\x88\xd0\x36\xec\xf5\xd1\x22\xf4\x14\xa1\x9e\x95\x74\xb1\x58\
-\xe2\x0b\x9f\xcf\xd7\xc1\xe7\xf3\xf9\x2a\xee\x69\xb1\x94\x46\x55\
-\x8b\x52\x52\x52\xe6\xd8\xe4\x90\x8a\xc9\xcb\xcb\x63\xdc\xb8\x71\
-\x1a\x08\x04\x1e\x56\x55\x5b\x6f\xaf\x96\xb1\x4e\x60\xec\xd1\x0f\
-\xe8\x1e\xf6\xfa\x5c\x4c\xb9\xbb\x86\xee\x98\x63\xb1\x24\x0c\x01\
-\xa0\xa7\xcf\xe7\x3b\xdf\x6d\x43\x2c\xb1\x87\xdf\xef\x9f\x98\x99\
-\x99\xe9\x77\xdb\x8e\xfa\x4e\x76\x76\xb6\x5e\x7d\xf5\xd5\xeb\x28\
-\x5d\xb2\xd5\x52\x4b\x58\x27\x30\xf6\x99\x05\xdc\x0b\xec\x70\xdb\
-\x10\x8b\x25\x9e\xf1\x7a\xbd\x5f\x61\x2a\x04\x3d\xef\xb6\x2d\x96\
-\x98\x24\x23\x2f\x2f\xcf\x53\x50\x50\xe0\xb6\x1d\xf5\x96\xb9\x73\
-\xe7\xd2\xbc\x79\x73\x69\xd0\xa0\xc1\x50\xb5\x95\x2c\xea\x84\x84\
-\x74\x02\x45\x48\x12\xe1\x10\x11\x5a\x8b\x90\x56\x89\xfe\x0d\x44\
-\x38\x4e\x04\x89\x68\x17\x67\x8e\xbd\x23\xda\x9b\x8b\x50\x61\xf4\
-\xaf\x63\xc7\x11\x22\x65\xaf\xe2\x89\xe0\x11\xe1\xf0\xc8\x6b\x97\
-\xa0\xca\x42\x55\x5e\x51\xc5\x1f\x31\xae\xa1\x63\x5b\x6b\x11\xf6\
-\xaa\xc8\x16\x8b\xc5\x52\x29\x1e\x06\x4e\xf1\xf9\x7c\xc7\xb9\x6d\
-\x88\x25\xe6\x98\xae\xaa\xcc\x9b\x37\xcf\x6d\x3b\xea\x2d\x7f\xfd\
-\xf5\x97\xe6\xe5\xe5\xe5\x7f\xf2\xc9\x27\xff\x71\xdb\x96\x44\x21\
-\xe1\x9c\x40\x11\xfe\x03\x6c\x00\xfe\xc2\xd4\xf0\xdd\x2e\xc2\xeb\
-\xe1\xce\xa0\x08\x07\x8b\xa0\x22\x78\x45\xf8\x1c\xd8\x0a\x2c\x00\
-\xd2\x44\x98\x29\xc2\x67\x22\xdc\x0f\xe4\x3b\x73\xfc\xc3\x19\x97\
-\x2e\xc2\x06\xe0\x4f\x60\xb5\x08\xcb\x44\xb8\x2c\xe2\xfa\x93\x45\
-\xf8\xc6\x29\x67\xb4\x11\xc8\x05\xb6\x8a\xd0\x2f\x8a\xad\xfd\x81\
-\xcd\xc0\x52\x60\x93\x08\x77\x45\xe9\x73\x87\x63\xeb\x3e\x61\x6d\
-\xcf\x3b\x73\x2f\x76\x8e\x4d\x22\x3c\x53\xdd\x9f\x99\xc5\x62\x31\
-\x78\xbd\xde\x99\xc0\xa1\x5e\xaf\x77\xa1\xdb\xb6\x58\x62\x0b\x55\
-\xdd\x94\x9a\x9a\x9a\x6b\xe3\x02\xa3\x33\x75\xea\x54\x92\x92\x92\
-\x24\x37\x37\xb7\xb7\xdb\xb6\x24\x12\x89\x98\x1d\xbc\x0a\xb8\x1e\
-\x98\x0b\xec\x0d\x74\x00\x5e\x04\x56\x00\x91\x4f\x1f\x4f\x01\x3f\
-\x00\x17\x01\x05\xb0\x73\xb5\xed\x22\xe0\x30\xa0\x17\xa6\xac\x54\
-\x91\x08\x57\x03\x6f\x03\xc3\x9c\x79\x1a\x00\x43\x80\x6f\x44\x38\
-\x49\x95\xf0\x0f\x8d\xb3\x81\x7d\x80\x6e\x18\x27\x6d\x10\xf0\x8c\
-\x08\x3f\xaa\x32\x1b\x8c\x73\x07\x3c\x0d\x3c\x04\xbc\x05\x34\x05\
-\xde\x05\x8e\x01\x96\x94\xf5\xe6\x44\xb8\x06\x78\x10\xe8\x0d\x8c\
-\xc1\x94\xbc\x3a\x0e\x38\xb4\xb2\x3f\x20\x8b\xc5\x52\x36\x5e\xaf\
-\x77\xa3\xdb\x36\x58\x62\x93\x40\x20\x30\x21\x2b\x2b\xab\x25\xd8\
-\x44\xbe\x70\xb6\x6d\xdb\xc6\xe0\xc1\x83\x03\x6b\xd7\xae\x1d\x17\
-\x08\x04\xde\x73\xdb\x9e\x44\x22\xe1\x56\x02\x55\x79\x55\x95\x49\
-\xaa\x6c\x50\x65\x99\x2a\x83\x81\x2f\x81\xdb\xa2\x74\x5f\xa5\xca\
-\x4d\xaa\x4c\x57\x65\xae\x2a\x25\xa2\x95\xfb\x01\x9d\x55\x79\x5f\
-\x95\x3c\x55\x56\x03\x03\x80\xb9\xaa\xf4\x52\x65\x85\x2a\x4b\x80\
-\x2e\x98\x55\xc4\x01\x11\xf3\x36\x06\xba\xaa\x32\x56\x95\xf9\x18\
-\xa7\x0d\x20\x5c\x3b\xa0\x3f\xf0\xb5\x2a\x2f\xaa\xb2\xc9\x71\x22\
-\xbb\x02\x8d\x2a\x78\x8b\xcd\x31\xf1\x81\x6f\xa9\xb2\x4a\x95\x2d\
-\xaa\xcc\x54\x65\x4c\xa5\x7e\x40\x16\x8b\xa5\xd2\xf8\x7c\x3e\x9b\
-\x90\x65\xa9\x34\xaa\x9a\xb1\x70\xe1\xc2\xe4\x40\xc0\x26\xbd\x96\
-\x10\x0a\x85\x18\x38\x70\x60\xf1\xda\xb5\x6b\xf3\x83\xc1\xa0\x5d\
-\x05\xac\x63\x12\xce\x09\x14\x61\x2f\x11\xfa\x88\x30\x4a\x84\xa9\
-\x22\xcc\x04\x4e\x01\x5a\x46\xe9\xfe\x7d\x19\xd3\x2c\x55\x25\x37\
-\x6c\x4e\x01\x4e\x06\xbe\x0d\xef\xa4\xca\x56\x4c\x20\xf9\x49\x11\
-\xe3\xe7\x85\x8f\x57\x25\x0f\x58\x0e\x34\x73\xe6\x6b\x04\xb4\x06\
-\x4a\x69\x24\x39\x8e\xe0\xf2\x0a\xde\xe2\x58\xcc\x53\xe6\xcf\x22\
-\x3c\x22\xc2\x51\x15\xf4\xb7\x58\x2c\xd5\xc0\xe7\xf3\x9d\x03\x2c\
-\xf5\xf9\x7c\xc7\xb8\x6d\x8b\x25\x66\xc8\x08\x06\x83\x49\x8b\x16\
-\x2d\x72\xdb\x8e\x7a\xc3\x7b\xef\xbd\xc7\xac\x59\xb3\x42\xc1\x60\
-\xf0\x2a\x55\x5d\xe9\xb6\x3d\x89\x46\x42\x39\x81\x8e\x96\xde\x04\
-\xcc\x2a\x5b\x01\xf0\x39\xf0\x0a\x66\x4b\xb7\x41\x94\x21\x65\x45\
-\xf0\x46\xb6\xef\x0d\xfc\x0d\x13\x87\x17\xc9\x46\xe0\xc0\x88\xb6\
-\x15\x51\xfa\x6d\x07\x92\x9d\xef\x4b\xfa\x47\x2b\xff\x55\x6e\x49\
-\x30\x55\x56\x01\x27\x62\xb2\x86\x1f\x04\x16\x89\xf0\x9d\x08\x67\
-\x96\x37\xce\x62\xb1\x54\x99\x2c\x60\x19\xf0\xa5\xcf\xe7\xdb\xcf\
-\x65\x5b\x2c\x31\x80\xaa\xe6\x79\x3c\x9e\x35\x36\x2e\xd0\x30\x79\
-\xf2\x64\x4e\x3c\xf1\x44\xce\x3b\xef\xbc\x47\x55\xf5\x17\xb7\xed\
-\x49\x44\x12\xca\x09\x04\xce\x02\xda\x00\x0f\xa8\xd2\x4d\x95\x97\
-\x54\xf9\x18\x58\x57\x46\xff\xb2\x52\xd4\x4b\xb5\xab\xb2\x05\xe3\
-\x9c\x35\x8b\xd2\xf7\x10\x4c\x12\x4a\x55\x58\x89\x29\x0b\xd6\x34\
-\xca\xb9\x68\x6d\xa5\x8d\x53\x7e\x55\xa5\x3b\x70\x10\xd0\x1e\x68\
-\x01\xbc\x5a\x45\x1b\x2c\x16\x4b\x39\x78\xbd\xde\x22\x4c\x7c\x71\
-\x43\x60\x94\xcf\xe7\x8b\x9a\xc1\x6f\xb1\x84\x53\x5c\x5c\x3c\x39\
-\x3b\x3b\xbb\xd8\x6d\x3b\xdc\x66\xde\xbc\x79\x34\x6a\xd4\x88\x39\
-\x73\xe6\x4c\x9b\x32\x65\x8a\x4d\x5c\x74\x89\x44\x73\x02\x4b\x56\
-\xda\x76\x26\x56\x88\xd0\x00\xe8\x54\x03\x73\x4f\x05\x3a\x46\x64\
-\x19\xb7\x00\x2e\x06\xa6\x55\x65\x22\x55\x02\x98\x95\xbc\x4e\xe1\
-\xd2\x30\x4e\xa6\xf1\xdf\xcb\x1b\x1b\xde\x5f\x95\x80\x2a\x5f\x03\
-\xa3\x80\xb3\xac\x54\x8c\xc5\x52\xb3\x78\xbd\xde\x55\x98\xe4\xb2\
-\xb7\xbd\x5e\xaf\xd5\x35\xb3\x54\x48\x28\x14\x9a\x32\x67\xce\x9c\
-\x50\x22\xcb\xe0\xad\x5d\xbb\x96\x35\x6b\xd6\xe8\xb2\x65\xcb\xd6\
-\xac\x5c\xb9\xf2\x42\xb7\xed\x49\x64\x12\x2d\x3b\x78\x0a\x46\x6e\
-\x65\xa8\x08\x43\x80\x22\xe0\x7e\x60\x4b\x0d\xcc\x3d\x10\xf8\x19\
-\xf8\x51\x84\xd7\x80\x34\xe0\xdf\x98\x15\xc2\xa7\xab\x39\xdf\x0f\
-\xc0\x28\x11\x46\x60\x56\x00\x07\x00\xab\x2b\x18\xf7\x8c\x08\xcd\
-\x9c\xb1\x2b\x81\xe3\x81\x1e\xc0\x14\x55\xac\x4a\xa9\xc5\x52\xc3\
-\x78\xbd\xde\x5f\x00\xbb\x95\x65\xa9\x2c\x19\xdb\xb6\x6d\xf3\x2c\
-\x5b\xb6\x8c\xc3\x0f\x3f\xdc\x6d\x5b\xea\x9c\x15\x2b\x56\xd0\xb7\
-\x6f\xdf\x40\x4a\x4a\xca\x5f\x27\x9f\x7c\xf2\xb9\x5f\x7d\xf5\x55\
-\xa8\xe2\x51\x96\xda\x22\xa1\x9c\x40\x55\xd4\x91\x5e\x79\x0e\x13\
-\x0b\xb8\x08\x23\xeb\xb2\x1e\xf8\x57\x58\x57\x3f\xf0\x13\xd1\x1d\
-\xae\x2c\x8c\xce\x60\xe4\xdc\xf3\x9c\xb8\xbb\xe7\x81\x97\x9d\x39\
-\x66\x01\xf7\xa9\xb2\x3e\xac\x6b\x36\xc6\xf9\x8c\xe4\x67\x8c\x5c\
-\x4c\xc9\x7c\x93\x44\xb8\x12\x78\x0c\x78\x07\xc8\xc1\x64\x30\xdf\
-\x86\x91\xb9\x29\x61\xb5\x63\x6b\xd0\x79\x3d\x05\x23\x5d\xf3\x34\
-\xb0\xaf\xf3\xde\xc6\x38\xf3\x58\x2c\x96\x5a\xc6\xe7\xf3\xb5\x06\
-\x56\x79\xbd\x5e\xfb\xd0\x65\x89\xc6\xfc\xe4\xe4\xe4\x6d\x39\x39\
-\x39\x8d\x12\xcd\x09\xcc\xca\xca\xe2\xa1\x87\x1e\x0a\xee\xd8\xb1\
-\x63\x7e\x30\x18\xbc\x7a\xe9\xd2\xa5\x15\x2d\x6a\x58\x6a\x19\x49\
-\xe4\x25\x69\x8b\xc5\x92\x58\x88\x48\x3a\x30\x5c\x55\xa3\x25\x82\
-\xd5\x08\x3e\x9f\x6f\x16\x26\xd1\xec\x1a\xaf\xd7\x9b\x57\x5b\xd7\
-\xb1\xec\x8e\x13\xde\x13\xce\x5d\xc0\x93\x40\x93\x88\xf6\xa0\xea\
-\xce\x07\xe7\x3a\x27\x35\x35\xf5\xfb\x4b\x2f\xbd\xf4\xd2\x47\x1f\
-\x7d\x34\x61\xe2\x48\x7f\xfc\xf1\x47\x46\x8e\x1c\x19\xca\xcd\xcd\
-\x1d\x1d\x0a\x85\xd2\x55\xd5\x96\x3a\xad\x07\x24\x5a\x4c\xa0\xc5\
-\x62\xb1\xd4\x36\x9d\x31\xc9\x63\xbf\xf8\x7c\xbe\xf3\xdd\x36\x26\
-\xc1\xf8\x16\x28\x0c\x3b\x86\x62\x76\x44\x0a\x23\x8e\xcb\xca\x9a\
-\xa0\x2e\x08\x04\x02\x93\x33\x33\x33\x13\x42\x2c\x30\x18\x0c\xf2\
-\xe5\x97\x5f\xb2\xdf\x7e\xfb\xd1\xa6\x4d\x9b\xf1\xc5\xc5\xc5\x37\
-\x59\x07\xb0\xfe\x60\x9d\x40\x8b\xc5\x62\xa9\x41\x9c\xd5\xbf\xf3\
-\x30\x09\x61\x5d\x5c\x36\x27\xd1\xe8\x03\x54\x14\x63\xf6\x8d\x2a\
-\xdf\xd4\x85\x31\xe5\x90\xb1\x76\xed\xda\xd4\xf5\xeb\xd7\x57\xdc\
-\x33\x86\xd9\xb2\x65\x0b\xdf\x7e\xfb\xad\x1e\x78\xe0\x81\x64\x64\
-\x64\x3c\xf3\xde\x7b\xef\xb5\x77\xdb\x26\x4b\x69\xac\x13\x68\xb1\
-\x58\x2c\x35\x8c\xd7\xeb\xdd\x86\x91\x8f\xe9\xe3\xb6\x2d\x89\x84\
-\x2a\x39\xc0\x9b\xe5\x74\x09\x00\xf7\xd6\x91\x39\xe5\xf1\x73\x52\
-\x52\x52\x30\x5e\xf5\x02\x03\x81\x00\xa3\x47\x8f\xe6\x86\x1b\x6e\
-\x08\x4c\x9b\x36\x6d\xf3\xd4\xa9\x53\x6f\xf8\xf0\xc3\x0f\x23\x2b\
-\x67\x59\xea\x01\x36\x26\xd0\x62\xb1\x24\x0c\x75\x11\x13\x58\x16\
-\x3e\x9f\xef\x40\x4c\x9d\xf2\x27\xbd\x5e\x6f\x99\xf5\xbf\x2d\x7b\
-\x86\x08\x07\x02\xbf\x63\xca\x73\x46\xf2\x8a\x6a\xbd\x70\x02\x49\
-\x4b\x4b\x9b\x7d\xed\xb5\xd7\x9e\x7e\xff\xfd\xf7\xbb\x6d\x4a\x8d\
-\xa1\xaa\x4c\x98\x30\x81\xa1\x43\x87\x06\xd6\xaf\x5f\xaf\xa1\x50\
-\x68\x30\xf0\x8c\xaa\x6e\x76\xdb\x36\x4b\x74\xec\x4a\xa0\xc5\x62\
-\x49\x18\x54\xf5\x1d\x37\x1c\x40\x87\x43\x81\x73\x80\x5f\x7d\x3e\
-\xdf\x6b\x3e\x9f\xaf\x5c\xcd\x4f\x4b\xf5\x70\xd4\x18\x1e\x8b\x72\
-\x6a\x3d\xf0\x78\xdd\x5a\x53\x36\x7e\xbf\x7f\x62\x56\x56\x96\xdf\
-\x6d\x3b\x6a\x8a\x9f\x7f\xfe\x99\xef\xbf\xff\x5e\x53\x53\x53\xd9\
-\xbc\x79\xf3\x47\xa1\x50\xe8\x08\x55\xed\x67\x1d\xc0\xfa\x8d\x75\
-\x02\x2d\x16\x8b\xa5\x0e\xf0\x7a\xbd\xd9\x18\xdd\xce\xde\xc0\x0d\
-\x18\xb9\x27\x4b\xed\xf0\x3a\xf0\x6b\x44\xdb\x40\x55\xf2\xdd\x30\
-\xa6\x0c\x32\xfe\xf8\xe3\x0f\xcf\xf6\xed\xdb\xdd\xb6\xa3\xda\x04\
-\x02\x01\xa6\x4f\x9f\xce\xd8\xb1\x63\x35\x25\x25\x85\xfc\xfc\xfc\
-\x35\x19\x19\x19\x57\xef\xd8\xb1\xa3\xab\xaa\x56\xb5\x52\x96\xc5\
-\x05\xec\x76\xb0\xc5\x62\xb1\xd4\x31\x3e\x9f\xaf\x11\x10\x74\x4a\
-\xcf\x95\xb4\x75\x07\x16\x02\x33\x6d\xf5\x91\x3d\x47\x84\xcb\x81\
-\xef\x9c\x97\x73\x81\xd3\x54\xa9\x37\xe5\xda\x44\xe4\x00\x60\xdd\
-\x90\x21\x43\xe4\xac\xb3\xce\x72\xdb\x9c\x4a\x93\x9f\x9f\xcf\xac\
-\x59\xb3\x98\x34\x69\x52\x68\xc6\x8c\x19\xea\xf7\xfb\x93\x2e\xbc\
-\xf0\xc2\xc5\x07\x1e\x78\xe0\x90\x31\x63\xc6\xf8\xdc\xb6\xcf\x52\
-\x35\xac\x13\x68\xb1\x58\x2c\x2e\xe3\xf3\xf9\x92\x81\xf9\xc0\x31\
-\x18\x01\xf8\x71\xc0\xbf\xbc\x5e\x6f\xdc\x6c\x17\xba\x81\x08\xe3\
-\x30\xf5\xd3\x2f\x51\x65\x92\xdb\xf6\x44\x92\x96\x96\xb6\xe4\xd6\
-\x5b\x6f\x6d\x75\xf7\xdd\x77\xbb\x6d\x4a\x99\x14\x16\x16\xb2\x72\
-\xe5\x4a\x72\x73\x73\x09\x04\x02\xda\xa4\x49\x13\x99\x36\x6d\x5a\
-\x68\xf4\xe8\xd1\x3f\x06\x83\xc1\x4f\x81\x71\xaa\x6a\x45\x9f\x63\
-\x14\xeb\x04\x5a\x2c\x16\x4b\x3d\xc1\xe7\xf3\x1d\x0f\x5c\x03\x1c\
-\xef\xf5\x7a\x6f\x0d\x6b\x6f\x82\x71\x0c\x57\x3b\xc7\x62\xaf\xd7\
-\xfb\x62\xd8\xf9\xbd\x81\xab\xc2\xa6\xda\xe2\xf5\x7a\xc7\x87\x9d\
-\x6f\x0c\x5c\x19\x76\x7e\x93\xd7\xeb\xfd\x2e\x8e\xce\x1f\x40\x69\
-\xed\xbf\xf5\x5e\xaf\xf7\x47\x11\x8e\x04\x9e\x18\x36\xcc\xf7\xaf\
-\x68\xe7\x2b\x1a\x5f\xdb\xe7\x93\x92\x92\xde\x38\xe2\x88\x23\xba\
-\xa5\xa7\xa7\x27\xa7\xa6\xa6\xee\x3c\x19\x0a\x85\x08\x04\x76\xc9\
-\x08\x26\x25\x25\xe1\xf1\x78\x6a\xed\x3c\x98\xa4\x0e\xbf\xdf\x4f\
-\x28\x14\x62\xed\xda\xb5\xc5\xe3\xc7\x8f\x0f\x6e\xd8\xb0\x21\xb9\
-\xa8\xa8\x28\xe5\x84\x13\x4e\x20\x3d\x3d\x5d\xff\xfc\xf3\xcf\x3f\
-\xd7\xaf\x5f\xff\xd9\xf6\xed\xdb\x5f\xf8\xec\xb3\xcf\x56\x62\x89\
-\x79\x12\xaa\x6c\x9c\xc5\x62\xb1\xd4\x67\xbc\x5e\xef\x02\x60\x41\
-\x94\x53\x0a\x4c\x06\x9a\x01\x47\x02\x7f\xc7\x64\x1a\x97\xd0\x14\
-\x53\x5e\xb2\x84\xdf\x80\xf1\x61\xaf\x5b\x44\x9c\xcf\x61\xd7\x56\
-\x69\x3c\x9c\x3f\x22\xe2\xfc\x2c\xe0\x47\x55\x72\x45\xe8\x0a\x9c\
-\x1a\xed\x7c\x45\xe3\x6b\xfb\xbc\xaa\xfe\xb4\x64\xc9\x92\xf4\x11\
-\x23\x46\x68\xdf\xbe\x7d\x77\x7e\x1e\xe7\xe5\xe5\xe9\xe0\xc1\x83\
-\x77\x56\x34\x69\xdd\xba\xb5\xf4\xea\xd5\x6b\xe7\xf9\x25\x4b\x96\
-\xe8\xab\xaf\xbe\x5a\x63\xe7\x5b\xb5\x6a\xc5\x9d\x77\xde\x99\x1c\
-\x08\x04\x76\x14\x15\x15\x6d\x29\x28\x28\x58\xba\x72\xe5\xca\xf1\
-\x98\xfa\xf3\xab\x96\x2c\x59\xb2\xfa\xd3\x4f\x3f\x5d\x34\x7d\xfa\
-\x74\x2b\xf2\x1c\x67\xfc\x3f\x33\x70\xd6\xbb\x9a\x5f\x6a\xf3\x00\
-\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-\x00\x00\xcf\x3f\
-\x89\
-\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\
-\x00\x02\x77\x00\x00\x01\x56\x08\x06\x00\x00\x00\x0b\xd2\xbb\x6c\
-\x00\x00\x00\x04\x73\x42\x49\x54\x08\x08\x08\x08\x7c\x08\x64\x88\
-\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x12\x74\x00\x00\x12\x74\
-\x01\xde\x66\x1f\x78\x00\x00\x00\x19\x74\x45\x58\x74\x53\x6f\x66\
-\x74\x77\x61\x72\x65\x00\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\
-\x70\x65\x2e\x6f\x72\x67\x9b\xee\x3c\x1a\x00\x00\x20\x00\x49\x44\
-\x41\x54\x78\x9c\xec\xdd\x79\x5c\x55\x65\xfe\xc0\xf1\xcf\xf7\x2e\
-\xac\x22\x22\x20\xe2\x82\x8a\xb8\x90\x98\xb8\xa0\x96\x89\x9a\x8e\
-\x9a\xa6\x2d\xd3\x62\x65\x35\x35\x35\x76\xc6\xca\x6a\x32\x01\xeb\
-\x57\xb6\x88\xda\xb4\x37\x9d\x76\x67\xaa\x69\xda\x66\xb2\xd5\x6c\
-\xb7\x7d\xdf\x73\xab\x2c\xd3\xf4\xa2\x82\xe4\x8e\xc0\x7d\x7e\x7f\
-\x9c\x8b\x5e\x90\x4d\xb9\x97\xc3\xe5\x3e\xef\xd7\x8b\x97\xdc\x73\
-\x9f\x73\xce\xf7\x02\x72\xbf\x3c\xcb\xf7\x11\xa5\x14\x9a\xa6\x69\
-\x9a\x16\x2a\x4c\xd3\x74\x01\x89\x40\x12\xd0\xd6\x30\x8c\x0f\xfd\
-\x9e\x8b\x05\x4c\xa0\xbd\xef\x23\x02\x28\x07\x4a\x7c\x1f\xcf\x19\
-\x86\xf1\x8c\x5f\xfb\x4e\xbe\x6b\x6d\x05\x8a\x0d\xc3\xd8\xd7\x5c\
-\xaf\x43\xd3\x82\xc5\x61\x77\x00\x9a\xa6\x69\x9a\x56\x17\xd3\x34\
-\x1d\x35\x1e\x47\x02\xfb\x00\x0f\xf0\x1d\xf0\x76\x8d\x53\xf6\x61\
-\x25\x6b\xc5\xc0\x07\xc0\x12\xe0\x5d\x60\x33\xd0\x0e\x68\x5b\xa3\
-\xfd\x9f\x81\x6f\x80\x8d\x40\x99\x69\x9a\x85\x81\x7d\x05\x9a\xd6\
-\xfc\x44\xf7\xdc\x69\x9a\xa6\x69\x2d\x89\x69\x9a\x13\x81\x63\x80\
-\xa3\x80\x1c\x20\xcd\x30\x8c\x52\xbf\xe7\xa7\x00\xa5\xf8\x7a\xe3\
-\x0c\xc3\xd8\xd4\x84\x7b\xc5\x03\x9d\x39\xd0\xd3\xb7\xc6\x30\x8c\
-\x55\x7e\xcf\xdf\x08\x8c\x04\x3e\xc4\x4a\x16\x97\x1b\x86\xf1\xfb\
-\xe1\xde\x4f\xd3\x9a\x83\xcb\xee\x00\x34\x4d\xd3\xb4\xf0\x65\x9a\
-\x66\x14\x50\x61\x18\x46\x85\xdf\xe1\x85\x40\x14\xf0\x3e\xf0\x6f\
-\xc0\xff\x39\x0c\xc3\x78\x21\x50\xf7\xf7\x25\x6a\xf5\x25\x6b\xef\
-\x03\x1d\x80\x29\xc0\x55\xc0\x49\xc0\x73\x55\x4f\x9a\xa6\x29\x86\
-\x61\xe8\x5e\x12\xad\x45\xd1\xc9\x9d\xa6\x69\x9a\xd6\xec\x4c\xd3\
-\x1c\x02\x9c\x0f\x9c\x01\x5c\x00\xfc\xd7\xef\xe9\xe1\x86\x61\xec\
-\xb1\x25\xb0\x1a\x0c\xc3\x58\x0a\x2c\x05\x30\x4d\xb3\x3d\x50\x33\
-\xae\x77\x4d\xd3\xfc\x19\x78\x08\xab\x57\x4f\x27\x7a\x9a\xed\xf4\
-\xb0\xac\xa6\x69\x9a\xd6\xac\x4c\xd3\xfc\x3f\x60\x1e\xb0\x02\x78\
-\x00\x78\xc4\x30\x8c\x12\xff\x36\x22\xc4\x29\xc5\x0e\x3b\xe2\x6b\
-\x2c\xd3\x34\x05\xf8\x0b\xd6\xbc\xbd\x1c\x60\x35\x70\xa4\x5e\x94\
-\xa1\xd9\x4d\x27\x77\x9a\xa6\x69\x5a\xd0\xf8\x16\x44\x74\x37\x0c\
-\x63\xad\xdf\xb1\x9e\x40\x8a\x61\x18\x1f\xd4\x6c\x2f\x42\x26\x70\
-\x3b\xf0\xac\x52\xdc\xdb\x7c\x91\x36\x8d\x69\x9a\xfd\x81\xa3\x0c\
-\xc3\xb8\xdf\xef\x58\x24\xa0\x74\xb2\xa7\x35\x37\x9d\xdc\x69\x9a\
-\xa6\x69\x01\x67\x9a\x66\x37\xac\x61\xd7\x3f\x01\x02\x74\xab\x6f\
-\xc8\x52\x84\x76\xc0\x75\xc0\x4c\xac\x29\x43\x46\x28\x25\x77\xb5\
-\x31\x4d\xf3\x2f\xc0\x8d\xc0\x23\xc0\x03\x86\x61\xac\xb6\x39\x24\
-\x2d\x4c\xe8\x52\x28\x9a\xa6\x69\x5a\x40\x99\xa6\x19\x03\x7c\x09\
-\xcc\x00\x9e\x04\xc6\xd7\x95\xd8\x89\xe0\x10\x61\x06\xf0\x03\x30\
-\x8b\xd6\x35\x17\x7c\x29\x70\x0f\x70\x2a\xb0\xc2\x34\xcd\x73\x6c\
-\x8e\x47\x0b\x13\xba\xe7\x4e\xd3\x34\x4d\x0b\x38\xd3\x34\xb3\x81\
-\xef\x6a\xac\x82\xad\x46\x84\x51\xc0\x1d\xc0\x80\x5a\x9e\x0e\xf9\
-\x9e\xbb\x2a\xbe\xa1\xe9\x33\x80\xd7\x0c\xc3\xd8\x6c\x77\x3c\x5a\
-\xeb\xa7\x93\x3b\x4d\xd3\x34\xed\xb0\xf9\x12\x97\xe9\x40\x1b\xc3\
-\x30\xee\x69\xcc\x39\x22\xa3\xe6\xc1\xfc\xe9\x30\x22\xbd\xee\x56\
-\xab\x36\xc1\xcf\xdb\x02\x13\x65\xcb\xe3\x74\x8a\xe3\xb8\xe3\x9e\
-\xd8\xf4\xd1\x47\x2f\xfd\x69\xcb\x96\x2d\xbf\xda\x1d\x8f\xd6\xba\
-\xb4\xa6\xee\x6f\x4d\xd3\x34\xad\x19\x99\xa6\x39\x01\x58\x04\xf4\
-\x03\xee\x6a\xcc\x39\x22\x22\x4e\xe7\xc4\x2b\x1c\x8e\x0e\xb1\xe5\
-\xe5\x75\xb7\x8b\x8c\x8c\xe9\xe8\x72\x75\xe8\x18\x90\x40\x5b\xa0\
-\x98\x98\x68\xe9\xdd\xbb\x57\xdf\x21\x43\x2e\xfe\xf9\xc4\x13\x4f\
-\xbc\xff\xb9\xe7\x9e\xfb\xab\xd2\xbd\x2d\x5a\x80\xe8\xe4\x4e\xd3\
-\x34\x4d\x3b\x64\xbe\x79\x75\x8f\x00\x9f\x01\x67\x1a\x86\xf1\x7d\
-\x23\x4f\xcd\xac\xac\x7c\xa5\xcd\x83\x0f\x7e\xcc\x77\xdf\x45\xf0\
-\xc0\x03\x9d\xd9\xbe\xfd\xe0\xb7\xa2\x59\xb3\x2a\xe5\xe4\x93\xeb\
-\x1c\xd1\x0d\x79\xaf\xbc\xf2\x34\x4e\xa7\x13\xa5\x1c\x8e\xf1\xe3\
-\xc7\x5f\x54\x56\x56\x36\x41\x44\x8e\x57\x4a\xad\xb0\x3b\x36\x2d\
-\xf4\xe9\x05\x15\x9a\xa6\x69\xda\x21\x33\x0c\x63\x37\x56\x4d\xb7\
-\xc9\x87\x90\xd8\x01\x8c\x8a\x8a\x8a\xaa\xe8\xd3\xa7\x27\xa7\x9e\
-\xea\xe1\x99\x67\xbe\xe6\x94\x53\x8a\x70\x38\xc2\xa7\xd3\x4a\x29\
-\x45\x51\x51\x11\x5d\xbb\x76\x65\xfc\xf8\xf1\xc4\xc4\xc4\xf0\xeb\
-\xaf\xbf\x76\x75\x38\x1c\x5f\x8b\xc8\x3c\x11\x89\xb4\x3b\x46\x2d\
-\xb4\xe9\xe4\x4e\xd3\x34\x4d\x6b\x90\x69\x9a\x63\x4d\xd3\x9c\xeb\
-\x7f\xcc\x30\x8c\xa2\x43\xbd\x8e\x88\x8c\xca\xce\xce\xc6\xe1\xb0\
-\xde\x7e\xda\xb6\xad\xe0\xca\x2b\x7f\xe1\xb1\xc7\xbe\x25\x27\xa7\
-\x79\xb6\x6c\xdd\xb3\xc7\xc1\xba\x75\xd1\x54\x54\x48\xb3\xdc\xaf\
-\xa6\xe2\xe2\x62\xca\xcb\xcb\x49\x49\x49\x01\x20\x33\x33\x93\x07\
-\x1f\x7c\xd0\x75\xc9\x25\x97\xb8\x22\x22\x22\xe6\xc6\xc7\xc7\xaf\
-\x3c\xff\xfc\xf3\xf3\x6c\x09\x4e\x6b\x15\x74\x72\xa7\x69\x9a\xa6\
-\xd5\x4a\x84\x13\x9c\x4e\xf5\x54\x7a\x7a\xd1\xca\x87\x1e\xfa\xc3\
-\xeb\x77\xdc\x31\xf5\x22\x87\x83\x27\x45\x78\x42\x04\xf3\x30\xae\
-\x37\xc4\xe9\xec\x31\x6e\xf0\xe0\xc1\x07\x8d\xc3\xa6\xa7\xef\xe1\
-\xae\xbb\x56\x71\xf3\xcd\x6b\xe8\xd2\x65\x6f\x60\x5e\x40\x1d\xbe\
-\xfa\xaa\x2d\xa7\x9f\x7e\x24\x1b\x37\xda\xd3\x41\xe6\xf1\x78\x88\
-\x8c\x8c\x24\x21\x21\x61\xff\x31\x87\xc3\xc1\x19\x67\x9c\xc1\x93\
-\x4f\x3e\xe9\x9c\x32\x65\x4a\xb7\x9c\x9c\x9c\xc2\x99\x33\x67\xae\
-\x18\x3e\x7c\x78\xab\x9d\x77\xa8\x05\x8f\x9e\x73\xa7\x69\x9a\xa6\
-\xd5\x25\xd3\xeb\x95\x53\x63\x63\xf7\x56\x6e\xda\xd4\xfe\xb3\x8d\
-\x1b\xdb\xff\xd4\xb4\xcb\x79\x5f\xaf\xa8\x38\x37\x3e\x3b\xbb\x53\
-\x9d\x2d\x46\x8e\xdc\xc6\xf0\xe1\xa5\x14\x17\xbb\x9b\x76\xab\x7a\
-\x24\x26\xee\x63\xdc\xb8\x62\x62\x63\x2b\x83\x76\x8f\xfa\x14\x15\
-\x15\xed\xef\xb5\xab\x29\x35\x35\x95\x8b\x2f\xbe\xd8\xf1\xf6\xdb\
-\x6f\xd3\xb3\x67\xcf\xcc\xe4\xe4\xe4\x0d\x7d\xfb\xf6\x9d\xb9\x6a\
-\xd5\xaa\xfb\x9a\x39\x4c\x2d\x84\xe9\xe4\x4e\xd3\x34\x4d\xab\x57\
-\xaf\x5e\x9b\x26\xfc\xef\x7f\xdd\xde\x68\xfa\x95\xca\x5d\x0e\x87\
-\x53\x65\x66\x66\xd6\x3b\x1e\xea\x76\x2b\x3a\x76\x0c\xde\x8e\x5d\
-\xbd\x7b\xef\xe6\xc6\x1b\x7f\x0c\xda\xf5\x1b\xe2\xf1\x78\xc8\xca\
-\xca\xaa\xb7\xcd\xe8\xd1\xa3\x29\x29\x29\xe1\xed\xb7\xdf\x76\xfe\
-\xf0\xc3\x0f\xf7\xba\xdd\xee\xf1\x15\x15\x15\xe7\x28\xa5\x76\x35\
-\x53\x98\x5a\x08\xd3\xc9\x9d\xa6\x69\x9a\xb6\x9f\x69\x9a\x11\x35\
-\xf7\x42\x7d\xf6\xd9\xe1\x75\x66\x42\x22\xb8\x80\xc5\xc0\x1e\x60\
-\x86\x52\x28\xdf\xf1\x0e\xc0\xa3\xc0\xab\x4a\x71\x8b\x08\x6f\x82\
-\x2b\xda\xe5\x3a\x9f\x4b\x2e\x89\x05\xe0\xc4\x13\xb7\x30\x61\xc2\
-\x56\x00\xd6\xaf\x8f\xe2\xfe\xfb\xbb\xb0\x62\x45\x1b\x2a\x2b\x21\
-\x3b\x7b\x07\x33\x67\xae\x27\x39\xf9\x40\x28\x37\xdc\x90\x4e\x7a\
-\xfa\x1e\x7a\xf7\xde\xc5\x23\x8f\x74\xe2\x87\x1f\x62\xe8\xd1\x63\
-\x0f\x97\x5e\xfa\x2b\x99\x99\x07\x72\x9e\xf5\xeb\xa3\xb8\xef\xbe\
-\x2e\x7c\xf7\x5d\x1c\xbb\x76\x39\x69\xdf\xbe\x9c\x81\x03\xb7\x93\
-\x97\xf7\x33\x00\xdf\x7f\xdf\x86\xbb\xef\xee\xca\xbc\x79\x3f\xd1\
-\xa1\xc3\x81\xeb\x3f\xff\x7c\x32\x2f\xbc\x90\xcc\xfa\xf5\xd1\x74\
-\xea\x54\xc6\x1f\xfe\xb0\x95\x69\xd3\x3c\x88\x2f\x15\xdd\xbe\xdd\
-\xc5\x9c\x39\xbd\xb8\xe0\x82\xdf\xf8\xe9\xa7\x18\x5e\x7a\x29\x89\
-\xe2\xe2\x08\x06\x0d\xda\xce\x15\x57\xac\xa3\x5d\xbb\x7a\x6a\xbb\
-\xf8\xfc\xfe\xfb\xef\xec\xd9\xb3\x87\x8e\x1d\x1b\x1e\x6d\x6d\xdf\
-\xbe\x3d\x27\x9f\x7c\x32\x5d\xbb\x76\xe5\xea\xab\xaf\x9e\xba\x7b\
-\xf7\xee\x4f\x45\x64\x92\x52\xea\x97\x06\x4f\xd6\xc2\x9a\x9e\x73\
-\xa7\x69\x9a\xa6\x01\x60\x9a\xe6\x51\xc0\x4a\x5f\xfd\xba\x46\x51\
-\x8a\x0a\xe0\x3e\xac\x7d\x64\xe7\x00\x88\x20\xc0\x63\x40\x5f\xe0\
-\x61\x5f\xd3\x7f\x41\x99\xa4\xa6\x6e\x96\xe3\x8f\xdf\xca\xf1\xc7\
-\x6f\x25\x23\x63\x37\x00\xdf\x7d\xd7\x86\xb3\xcf\xee\xcf\xfa\xf5\
-\x51\x9c\x72\x8a\x87\xd3\x4f\xf7\xf0\xfd\xf7\x6d\x38\xfb\xec\x2c\
-\x7e\xff\xfd\x40\x1f\xc4\xca\x95\x6d\x78\xe9\xa5\x64\x6e\xba\xa9\
-\x27\x99\x99\xbb\x38\xe7\x9c\x4d\x78\x3c\x91\x5c\x76\x59\x5f\x76\
-\xef\x76\x02\xe0\xf5\x0a\x97\x5e\xda\x97\x75\xeb\xa2\x39\xe7\x9c\
-\xdf\xb8\xfe\xfa\x1f\x39\xe3\x8c\x4d\xd5\xca\xad\x6c\xdf\xee\xe2\
-\xcb\x2f\xdb\xb2\x77\xef\x81\xb7\xc0\x7b\xef\xed\xc2\xfc\xf9\xe9\
-\xf4\xee\xbd\x9b\x82\x82\xb5\x0c\x1e\xfc\x3b\x77\xdd\xd5\x8d\xc2\
-\xc2\x1e\xfb\xdb\x94\x97\x0b\x5f\x7e\xd9\x96\xbb\xee\x4a\xe3\xb9\
-\xe7\x3a\x30\x79\xf2\x56\xc6\x8d\x2b\xe6\xbd\xf7\xda\x71\xfd\xf5\
-\xf5\xd4\x63\xf6\xe3\xf1\x78\x70\x3a\x9d\x24\x27\x27\x37\xf6\x4b\
-\x4c\x4e\x4e\x0e\x8f\x3c\xf2\x88\xab\x5b\xb7\x6e\xbd\xce\x3d\xf7\
-\xdc\xd5\x67\x9c\x71\xc6\xe5\x8d\x3e\x59\x0b\x4b\xba\xe7\x4e\xd3\
-\x34\x2d\xcc\x99\xa6\x29\x40\x01\x70\x1d\xf0\x3a\xf0\x55\x8d\x26\
-\xef\x89\x50\x73\x82\xda\x32\xa5\x98\x01\xa0\x14\xef\x89\x70\x0d\
-\x70\x83\x08\xef\x01\x23\x81\x31\x40\xae\x52\xf8\x76\x99\x90\xd7\
-\xa1\x44\xfa\xf5\x2b\x67\xf2\xe4\x2d\xd5\x2e\x74\xeb\xad\xdd\x48\
-\x4a\xda\xc7\xe2\xc5\xdf\xed\xef\x25\x9b\x34\x69\x2b\x93\x27\x0f\
-\xe2\xb1\xc7\x3a\x31\x73\xe6\x81\x0d\x1c\xd6\xae\x8d\x66\xc9\x92\
-\x2f\xf7\x0f\xdb\xf6\xec\xb9\x9b\x59\xb3\xfa\xf2\xe1\x87\xed\x18\
-\x3b\xb6\x98\x4d\x9b\x22\xd8\xb4\x29\x92\x45\x8b\xd6\x90\x9b\x7b\
-\x60\x83\x8b\x13\x4f\xac\x7b\xd7\xaf\xe2\x62\x37\x8f\x3f\x9e\xca\
-\xb4\x69\x1e\x2e\xbb\x6c\x1d\x00\xb9\xb9\xdb\x88\x8a\xf2\xf2\xe0\
-\x83\x5d\x38\xfd\xf4\x22\x7a\xf6\xdc\xbd\xbf\xfd\xee\xdd\x4e\x9e\
-\x7a\xea\xeb\xfd\x8f\x5d\x2e\xc5\x63\x8f\xa5\xb2\x7d\xbb\x8b\xb6\
-\x6d\xeb\xaf\xcd\x17\x11\x11\x41\x9f\x3e\x7d\xf6\xaf\x16\x6e\xac\
-\x94\x94\x14\x1e\x78\xe0\x01\xd7\xab\xaf\xbe\xaa\xba\x74\xe9\x72\
-\xeb\xac\x59\xb3\xc6\xf7\xed\xdb\xf7\x78\xc3\x30\xec\x99\x38\xa8\
-\xb5\x68\xba\xe7\x4e\xd3\x34\x4d\x3b\x12\xc8\x07\x66\x03\x93\x6a\
-\x29\x71\xf2\x30\x70\x7b\x8d\x8f\x17\x6a\xb4\x59\x00\xbc\x01\xfc\
-\x17\xb8\x1e\x98\xab\x14\x1f\xfa\x3d\x9f\x0b\x1c\xd4\x63\xf5\xfb\
-\xef\x2e\x56\xac\x68\xc3\xc8\x91\xdb\xf8\xf5\xd7\x68\xd6\xad\xb3\
-\x3e\x4a\x4b\xdd\x64\x66\xee\x64\xc5\x8a\xd8\x6a\xed\x8f\x38\x62\
-\x57\xb5\xf9\x78\x47\x1e\xb9\x03\x87\x43\xe1\xf1\x44\x00\xd0\xa9\
-\x53\x19\x9d\x3a\x95\xb1\x78\x71\x67\xde\x78\x23\x91\x3d\x7b\x9c\
-\x0d\xbe\xf8\x15\x2b\xda\xb0\x6f\x9f\x83\x49\x93\xaa\x27\x9d\x53\
-\xa7\x6e\x41\x29\xf8\xfa\xeb\x36\xd5\x8e\x8f\x19\x53\x52\xed\xf1\
-\xc0\x81\xdb\x01\xf6\xc7\x50\x9f\x1e\x3d\x7a\x70\xf4\xd1\x47\x37\
-\xd8\xae\x36\xd1\xd1\xd1\x4c\x9d\x3a\x55\x36\x6c\xd8\x40\xcf\x9e\
-\x3d\x27\x7e\xf9\xe5\x97\x9f\x8b\x88\xee\xa4\xd1\x0e\xa2\x7f\x28\
-\x34\x4d\xd3\xc2\x9c\x61\x18\x5f\x9b\xa6\xd9\xdd\x30\x8c\xad\x75\
-\x34\x79\x58\x29\xd6\xd5\x77\x0d\xa5\x50\x22\x5c\x0b\x7c\x04\x6c\
-\x04\xfe\x5e\xa3\x49\xae\xd3\xe9\xc4\xe5\xaa\xfe\xb6\xb3\x7e\x7d\
-\x14\x00\xcf\x3c\xd3\x91\x67\x9e\x39\x78\x05\x69\x5a\x5a\xf5\xb2\
-\x28\x55\x43\xb9\x55\xa2\xa3\xbd\x44\x46\x2a\xca\xcb\xad\xbe\x0a\
-\x11\x98\x37\xef\x47\x1e\x7a\xa8\x33\x73\xe7\x66\x10\x11\xe1\x65\
-\xc2\x84\x62\xa6\x4d\xf3\x54\xeb\x7d\xf3\x57\x55\x12\x25\x39\xb9\
-\xfa\x9c\xb9\xe4\xe4\x7d\xb8\xdd\x8a\xcd\x9b\xab\x97\x4c\xe9\xd5\
-\xab\xfa\x75\xe2\xe3\xad\xde\xba\xaa\x18\x82\x49\x44\x38\xe1\x84\
-\x13\x78\xf7\xdd\x77\x59\xb2\x64\x49\x96\xcb\xe5\x7a\x4b\x44\x4e\
-\x52\x4a\xd5\xf5\xbd\xd3\xc2\x90\x4e\xee\x34\x4d\xd3\x34\xea\x49\
-\xec\x1a\x45\x84\x08\xe0\x6e\xe0\x67\x20\x0d\xf8\x1b\x70\x73\xd5\
-\xf3\x6e\xb7\x7b\x9c\xc8\xc1\xbd\x68\x09\x09\x56\x62\x74\xed\xb5\
-\x3f\x31\x6e\x5c\x71\x23\xee\xd4\xf0\x4e\x16\xfd\xfb\xef\xe4\xf6\
-\xdb\x57\x53\x54\x14\xc1\xf2\xe5\xed\x79\xf6\xd9\x0e\x5c\x78\xe1\
-\x11\xbc\xf4\xd2\x17\x44\x47\x7b\x0f\x6a\xdf\xbe\xbd\x95\xd4\x6d\
-\xdf\xee\x24\x21\xe1\x40\x82\xb7\x73\xa7\x93\xf2\x72\x21\x3e\xbe\
-\xe1\x85\x12\xcd\x6d\xe4\xc8\x91\xa4\xa6\xa6\x3a\x2f\xbf\xfc\xf2\
-\x61\xdb\xb6\x6d\xfb\x4a\x44\x8e\x53\x4a\x7d\x6b\x77\x5c\x5a\xcb\
-\xa0\x87\x65\x35\x4d\xd3\xc2\x8c\x69\x9a\x5d\x4d\xd3\x7c\xcb\x34\
-\xcd\x9e\x01\xbc\xec\xcd\x40\x26\x30\x19\x6b\x58\xf6\x26\x11\x86\
-\x02\x88\x48\x52\x79\x79\x79\x46\x4c\x8c\x97\xd2\xd2\xea\x7d\x0a\
-\xa9\xa9\x7b\x69\xd7\xae\x9c\x37\xdf\x6c\x1f\xc0\x50\x2c\x29\x29\
-\xfb\x38\xed\x34\x0f\x37\xdc\xf0\x23\xbb\x77\x3b\xf9\xe0\x83\x84\
-\x5a\xdb\x55\xf5\x06\x7e\xf2\x49\xbb\x6a\xc7\x3f\xf8\xc0\x7a\x9c\
-\x9e\xbe\x27\xe0\xb1\x05\x42\x46\x46\x06\x8f\x3e\xfa\xa8\x3b\x33\
-\x33\x33\xe5\x98\x63\x8e\xf9\x2c\x27\x27\xe7\xaf\x76\xc7\xa4\xb5\
-\x0c\xba\xe7\x4e\xd3\x34\x2d\x8c\x98\xa6\x99\x09\x2c\x03\x76\x02\
-\x8d\x2d\x26\x37\x5e\x84\x2d\xb5\x1c\x7f\x51\x29\x2a\x44\x38\x09\
-\xb8\x14\x38\x57\x29\x56\x8a\x70\x23\xd6\x82\x8a\x27\x44\x18\x08\
-\xe4\x8a\x88\xea\xd5\xab\x5c\x3e\xfa\x28\x9e\xe5\xcb\x13\x48\x4d\
-\x2d\x23\x39\xb9\x9c\x84\x84\x72\x2e\xbd\xf4\x57\xae\xbf\xbe\x27\
-\x77\xde\x99\xc6\x29\xa7\x14\x91\x94\x54\xce\xd6\xad\x6e\x3e\xf9\
-\x24\x9e\xa8\x28\x2f\x13\x27\x36\xbe\x53\x71\xf5\xea\x58\x96\x2f\
-\x4f\x60\xdc\xb8\x62\xba\x76\xdd\x4b\x49\x89\x9b\x25\x4b\x3a\x20\
-\x02\x5d\xbb\xd6\xbe\xf3\x45\x8f\x1e\x7b\x18\x3d\x7a\x1b\x0f\x3c\
-\xd0\x99\x4e\x9d\xf6\x32\x70\xe0\x0e\x56\xae\x8c\xe5\x8e\x3b\xba\
-\xd1\xbf\xff\x4e\x86\x0d\x0b\xcc\xb6\x68\xc5\xc5\xc5\x24\x24\x24\
-\x1c\xf2\x62\x8a\xfa\xb4\x6b\xd7\x8e\x7b\xee\xb9\xc7\xf5\xee\xbb\
-\xef\xe2\x72\xb9\xfe\x31\x64\xc8\x90\xbe\x9f\x7d\xf6\xd9\xa5\x01\
-\xbb\x81\x16\x92\x74\x72\xa7\x69\x9a\x16\x26\x4c\xd3\x4c\x03\xde\
-\x05\x7e\x04\x26\x1b\x86\xd1\x98\x71\x50\x80\xfb\xeb\x38\xde\x4e\
-\x84\x04\xac\x05\x17\xff\x52\x8a\x47\x00\x94\xc2\x2b\xc2\x59\xc0\
-\xd7\xc0\x03\xc0\xc6\xf4\xf4\xf4\x7d\x97\x5d\xf6\x5b\xe4\xc2\x85\
-\xdd\x99\x37\xaf\x27\xbb\x77\x3b\x31\x8c\xf5\x9c\x7b\xee\x46\x26\
-\x4d\xda\x8a\xc3\x01\xb7\xdf\x9e\xc6\xe3\x8f\xa7\xee\xbf\x78\xc7\
-\x8e\x65\xcc\x9a\xf5\x6b\x6d\xf7\xad\x93\x88\xe2\xe5\x97\x93\x79\
-\xf8\xe1\xce\x88\x80\x52\xd6\xfe\xb5\xb3\x67\xff\x42\xef\xde\x75\
-\xd7\xff\xbd\xfa\xea\x9f\x28\x2c\xec\xc1\x95\x57\xf6\x41\xf9\x46\
-\x7e\x87\x0f\x2f\xe5\xda\x6b\xd7\x1e\xd2\xfd\xeb\x52\x5e\x5e\xce\
-\x92\x25\x4b\x18\x3b\x76\x2c\xdd\xbb\x77\x0f\xc8\x35\xab\xb8\xdd\
-\x6e\x46\x8f\x1e\xcd\xfb\xef\xbf\xcf\x59\x67\x9d\x75\xc9\x98\x31\
-\x63\x62\xde\x7a\xeb\xad\x0b\x02\x7a\x13\x2d\xa4\x88\x52\x0d\xcf\
-\x5f\xd0\x34\x4d\xd3\x5a\x07\xd3\x34\x2f\x06\x16\x1b\x86\xd1\x6c\
-\x3b\x1d\x44\x44\x44\x7c\x7b\xca\x29\xa7\x64\xcd\x9a\x35\xab\xc1\
-\xb6\x5b\xb7\x46\x50\x52\xe2\xa2\x7d\xfb\x0a\x92\x92\x0e\x7f\x97\
-\x8a\xad\x5b\xdd\x94\x94\xb8\x89\x8e\xf6\xd2\xb1\xe3\x3e\xdc\xee\
-\x83\xe7\xda\xd5\x66\xcf\x1e\x27\x1b\x37\x46\x92\x92\x52\x46\x9b\
-\x36\x81\xab\x32\xf2\xdb\x6f\xbf\xb1\x74\xe9\x52\xce\x3a\xeb\x2c\
-\xa2\xa3\xa3\x03\x76\x5d\x7f\x4a\x29\x96\x2f\x5f\xce\xe2\xc5\x8b\
-\x59\xbd\x7a\xf5\x15\x4a\xa9\xdb\x82\x72\x23\xad\xc5\xd3\x3d\x77\
-\x9a\xa6\x69\x61\xc4\x30\x8c\xbb\x9b\xf3\x7e\x22\x12\x2f\x22\xfd\
-\x06\x0e\x1c\xd8\xa8\xf6\x49\x49\xfb\x9a\x94\xd4\x1d\xb8\x4e\x39\
-\x49\x49\x87\xbe\x10\x22\x3a\xba\xb2\xce\x55\xb5\x4d\xe1\xf1\x78\
-\x88\x8f\x8f\x0f\x5a\x62\x07\xd6\x4a\xda\xd1\xa3\x47\xb3\x61\xc3\
-\x06\x56\xaf\x5e\x7d\xab\x88\x94\x29\xa5\xee\x09\xda\x0d\xb5\x16\
-\x4b\x2f\xa8\xd0\x34\x4d\x6b\xc5\x4c\xd3\x9c\x68\x9a\x66\x8c\x8d\
-\x21\x8c\x50\x4a\xc9\x80\x01\x03\x6c\x0c\xc1\x7e\x1e\x8f\x87\x94\
-\x94\x83\x4b\xbd\x04\xc3\xf4\xe9\xd3\x99\x31\x63\x06\xc0\xdd\x29\
-\x29\x29\x97\x34\xcb\x4d\xb5\x16\x45\xf7\xdc\x69\x9a\xa6\xb5\x52\
-\xa6\x69\x1e\x0f\x2c\x01\x66\x00\x0f\xd9\x14\x46\x6e\x5a\x5a\x5a\
-\x59\x7c\x7c\x7c\x64\xc3\x4d\x5b\x27\xaf\xd7\xcb\x96\x2d\x5b\xe8\
-\xd5\xab\x57\xb3\xdd\xf3\xbc\xf3\xce\x43\x29\x25\x19\x19\x19\x77\
-\x9e\x77\xde\x79\xd9\x8b\x17\x2f\xfe\x73\xb3\xdd\x5c\xb3\x9d\xee\
-\xb9\xd3\x34\x4d\x6b\x85\x4c\xd3\x1c\x0a\x3c\x09\x3c\x60\x18\x86\
-\x5d\x89\x1d\x2e\x97\xeb\xd8\x9c\x9c\x9c\xb0\x4d\xec\x00\xb6\x6c\
-\xd9\x42\x45\x45\x45\xb3\xf5\xdc\x55\x39\xff\xfc\xf3\x29\x2d\x2d\
-\x65\xc8\x90\x21\xe7\x9f\x7a\xea\xa9\x0b\x9a\xf5\xe6\x9a\xad\x74\
-\x72\xa7\x69\x9a\xd6\x3a\x15\x02\xaf\x02\x33\xed\x0a\x40\x44\x62\
-\x2a\x2b\x2b\x07\x35\x76\xbe\x5d\x6b\x55\x54\x54\x44\x74\x74\x34\
-\xf1\xf1\xf1\xcd\x7e\xef\xa9\x53\xa7\xb2\x79\xf3\x66\x8e\x39\xe6\
-\x98\x39\x83\x07\x0f\xbe\xa8\xd9\x03\xd0\x6c\xa1\x93\x3b\x4d\xd3\
-\xb4\xd6\xe9\x8f\xc0\x19\x86\x61\x34\x6e\x99\x68\x70\x0c\x57\x4a\
-\x39\xb3\xb3\xb3\x6d\x0c\xc1\x7e\x1e\x8f\x87\x8e\x1d\x3b\xda\x76\
-\xff\xe3\x8e\x3b\x8e\x1f\x7e\xf8\x41\x7d\xf5\xd5\x57\x77\x89\xc8\
-\x24\xdb\x02\xd1\x9a\x8d\x9e\x73\xa7\x69\x9a\xd6\x0a\x19\x86\x51\
-\x6a\x77\x0c\x40\x6e\x4a\x4a\x4a\x59\x52\x52\x52\x58\x0f\xcb\x16\
-\x15\x15\x61\x67\xef\xa5\x88\x30\x7d\xfa\x74\xf9\xf5\xd7\x5f\x9d\
-\x2f\xbd\xf4\xd2\x12\x11\x99\xa4\x94\x7a\xdd\xb6\x80\xb4\xa0\xd3\
-\x3d\x77\x9a\xa6\x69\xad\x80\x69\x9a\x11\xa6\x69\xfe\xd1\xee\x38\
-\xfc\xf9\xe6\xdb\x45\xd8\x1d\x87\x9d\x4a\x4a\x4a\x28\x2b\x2b\xb3\
-\xb5\xe7\x0e\xac\x04\x2f\x3f\x3f\x5f\xc6\x8f\x1f\xef\x8a\x8c\x8c\
-\x7c\x31\x2d\x2d\x6d\xb8\xad\x01\x69\x41\xa5\x8b\x18\x6b\x9a\xa6\
-\x85\x38\xd3\x34\x05\xf8\x37\x70\x3c\xd0\xc7\x30\x8c\x4d\x36\x87\
-\x84\x88\x44\x38\x1c\x8e\x1d\x73\xe7\xce\x8d\x98\x3c\x79\xb2\xdd\
-\xe1\xd8\xa6\xb2\xb2\x92\xcd\x9b\x37\x93\x92\x92\x12\xd0\x6d\xc7\
-\x0e\x97\xd7\xeb\xe5\xf9\xe7\x9f\x57\x7b\xf7\xee\x2d\x7b\xe6\x99\
-\x67\xba\xad\x5f\xbf\x7e\xb3\xdd\x31\x69\x81\x67\xff\x4f\x9a\xa6\
-\x69\x9a\xd6\x54\x0b\x81\x53\x80\x3f\xb6\x84\xc4\xce\x67\x88\xd7\
-\xeb\x8d\x18\x34\x68\x90\xdd\x71\xd8\xca\xe9\x74\x92\x9a\x9a\xda\
-\x22\x12\x3b\x00\x87\xc3\xc1\x51\x47\x1d\x25\xdd\xbb\x77\x8f\x9a\
-\x32\x65\xca\x57\x22\xd2\x32\x02\xd3\x02\x4a\x7f\x53\x35\x4d\xd3\
-\x42\x98\x6f\xbf\xd8\x8b\x80\xf3\x0d\xc3\x78\xcd\xee\x78\xfc\x8c\
-\x6a\xdf\xbe\x7d\x59\x6a\x6a\x6a\xc3\x2d\xb5\x66\x95\x92\x92\x42\
-\x9b\x36\x6d\xe8\xd7\xaf\x5f\xea\xb4\x69\xd3\x96\xda\x1d\x8f\x16\
-\x78\x3a\xb9\xd3\x34\x4d\x0b\x61\x86\x61\xfc\x0a\xa4\x1b\x86\xf1\
-\x98\xdd\xb1\xf8\x73\x3a\x9d\x63\x86\x0c\x19\xe2\xb6\x3b\x0e\xad\
-\x76\x59\x59\x59\x94\x96\x96\xb2\x64\xc9\x92\xf1\x22\x72\xb2\xdd\
-\xf1\x68\x81\xa5\x93\x3b\x4d\xd3\xb4\x10\x67\x18\xc6\x56\xbb\x63\
-\xf0\x27\x22\x4e\x60\xc4\xa0\x41\x83\xf4\x7b\x4c\x0b\x36\x6e\xdc\
-\x38\x26\x4d\x9a\xa4\x9c\x4e\xe7\x63\x22\x92\x69\x77\x3c\x5a\xe0\
-\xe8\xff\x78\x9a\xa6\x69\x21\xc6\x34\x4d\x87\x69\x9a\x7d\xed\x8e\
-\xa3\x1e\xd9\x95\x95\x95\x31\xe1\x5e\xbc\x78\xe5\xca\x95\xac\x59\
-\xb3\xc6\xee\x30\xea\x75\xf9\xe5\x97\x4b\x9f\x3e\x7d\xdc\x2e\x97\
-\xeb\xa5\xd8\xd8\xd8\xe6\xaf\xb2\xac\x05\x85\x4e\xee\x34\x4d\xd3\
-\x42\xcf\x1c\xe0\x13\xd3\x34\xdb\xd9\x1d\x48\x1d\x72\xe3\xe2\xe2\
-\xf6\x75\xeb\xd6\xcd\xee\x38\x6c\xb5\x72\xe5\x4a\x4a\x4a\x4a\xec\
-\x0e\xa3\x5e\x6e\xb7\x9b\x45\x8b\x16\xb9\x4e\x3b\xed\xb4\x6e\xd3\
-\xa6\x4d\xfb\x52\x44\xc4\xee\x98\xb4\xa6\xd3\x45\x8c\x35\x4d\xd3\
-\x42\x88\x69\x9a\x47\x01\xd7\x03\x57\xb5\x90\x42\xc5\x07\x71\x38\
-\x1c\xa3\x07\x0f\x1e\xec\xb4\x3b\x0e\x3b\x95\x95\x95\x51\x52\x52\
-\x42\x28\xac\x16\x4e\x4a\x4a\x22\x37\x37\xd7\xe1\xf5\x7a\x7b\x6c\
-\xd8\xb0\xe1\x51\x60\xba\xdd\x31\x69\x4d\xa3\x7b\xee\x6c\x22\xf9\
-\x72\xb1\xcc\x91\x38\xbb\xe3\xd0\x34\x2d\x74\x98\xa6\x19\x0d\x3c\
-\x0e\xbc\x62\x18\xc6\x6d\x76\xc7\x53\x1b\x11\x11\x87\xc3\x31\x6a\
-\xd0\xa0\x41\x61\x9d\xdc\x15\x15\x15\x01\xd6\xca\xd4\x50\x90\x9d\
-\x9d\xcd\x8e\x1d\x3b\x18\x37\x6e\xdc\x59\xfd\xfa\xf5\xd3\xc9\x5d\
-\x88\xd3\xc9\x9d\x0d\x24\x5f\xba\x03\x37\xe3\x60\xae\xcd\xa1\x68\
-\x9a\x16\x42\x0c\xc3\xd8\x03\x5c\x05\xfc\xc9\xe6\x50\xea\x73\x44\
-\x45\x45\x45\x7c\xb8\xef\x27\x5b\x54\x54\x44\x7c\x7c\x3c\xd1\xd1\
-\xd1\x76\x87\xd2\x68\x23\x47\x8e\x64\xe7\xce\x9d\x6a\xfb\xf6\xed\
-\xf7\x89\x48\x4f\xbb\xe3\xd1\x0e\x9f\x4e\xee\xec\xa0\xb8\x05\x88\
-\x02\x2e\x97\xab\xf4\x7f\x20\x4d\xd3\x1a\xcf\x30\x8c\xa7\x0d\xc3\
-\x28\xb6\x3b\x8e\x7a\xe4\x46\x47\x47\x97\x67\x64\x64\xd8\x1d\x87\
-\xad\x3c\x1e\x8f\xed\x5b\x8e\x1d\x2a\x87\xc3\xc1\xd8\xb1\x63\xc5\
-\xed\x76\xbb\x5d\x2e\xd7\x63\x7a\xfe\x5d\xe8\xd2\xc9\x5d\x33\x93\
-\xb9\x32\x06\xa1\xaa\xa6\x50\x04\x4e\x6e\xb5\x35\x20\x4d\xd3\xb4\
-\x00\x12\x91\x51\xd9\xd9\xd9\xd2\x52\x76\x64\xb0\x43\x45\x45\x05\
-\x5b\xb6\x6c\x09\xb9\xe4\x0e\x20\x32\x32\x92\xeb\xae\xbb\xce\xed\
-\xf5\x7a\x87\x02\x33\xed\x8e\x47\x3b\x3c\xe1\xfb\xbf\xcf\x06\x72\
-\x9a\x38\xf1\x72\x47\x8d\xc3\x53\x65\x8e\xfc\xc1\x96\x80\x34\x4d\
-\x6b\xf1\x4c\xd3\x8c\x36\x4d\x73\x89\x69\x9a\x59\x76\xc7\xd2\x18\
-\x4e\xa7\xf3\xd8\xc1\x83\x07\x87\xf5\x62\xbd\x2d\x5b\xb6\xe0\xf5\
-\x7a\x43\x32\xb9\x03\xe8\xd3\xa7\x0f\xd3\xa7\x4f\x77\xe4\xe4\xe4\
-\xdc\x32\x62\xc4\x88\x01\x76\xc7\xa3\x1d\x3a\x9d\xdc\x35\xa7\x9e\
-\xcc\x00\xfa\x1f\x74\xdc\xc1\xed\x32\x4f\x42\xe2\x97\xa1\x08\xbd\
-\x44\xe8\xeb\xfb\xe8\x25\x42\x1b\xbb\x63\x6a\xad\x44\x98\x27\xc2\
-\x2c\xbf\xc7\xc3\x45\x78\x42\x84\x04\xbf\x63\xf7\x88\x70\x96\x3d\
-\x11\x6a\xcd\xe4\x36\x60\x24\xf0\xbb\xdd\x81\x34\x44\x44\x7a\x56\
-\x54\x54\x24\x87\x7b\x7d\x3b\x8f\xc7\x43\x4c\x4c\x0c\x71\x71\xa1\
-\xbb\x66\xee\xfc\xf3\xcf\xe7\xe4\x93\x4f\x76\x0f\x1b\x36\xac\x25\
-\x6d\x69\xa7\x35\x92\x4e\xee\x9a\x89\xe4\x4b\x02\x56\xf9\x82\xda\
-\x1c\x41\x19\x7f\x6d\xce\x78\x9a\xe0\x33\x60\xa5\xef\x63\x0d\xb0\
-\x43\x84\x55\x22\xfc\xd1\xde\xb0\x5a\x1e\x11\xfe\x25\xc2\x8c\x26\
-\x5c\xe2\x0f\xc0\xd1\x7e\x8f\xbb\x02\xa7\x03\xfe\x33\xb4\x4f\x00\
-\xf4\x5f\xd6\xad\x94\x69\x9a\x27\x00\x7f\xc1\xda\x37\x76\xbd\xdd\
-\xf1\x34\xc2\xa8\x88\x88\x88\xca\xbe\x7d\x5b\x72\x7d\xe5\xe0\x0b\
-\xc5\xf9\x76\x35\x45\x45\x45\x91\x90\x90\x20\x3d\x7b\xf6\x4c\x3e\
-\xf7\xdc\x73\x1f\xb6\x3b\x1e\xed\xd0\xe8\xe4\xae\xf9\x5c\x0f\x24\
-\xd6\xf9\xac\xe2\x3a\xb9\x52\x92\x9a\x2f\x9c\x26\x79\x1e\xe8\x01\
-\xf4\xc6\x7a\xe3\x51\xc0\x13\x22\x0c\xb1\x35\xaa\x96\x67\x14\xd0\
-\x94\x77\xb9\x69\xc0\xe5\x01\x8a\x45\x0b\x4d\x43\x80\xc7\x0c\xc3\
-\x78\xce\xee\x40\x1a\x29\x37\x2b\x2b\xcb\xeb\x74\x86\x75\x15\x14\
-\x00\x3a\x75\xea\x64\x77\x08\x4d\x96\x9d\x9d\xcd\x6f\xbf\xfd\x46\
-\xbf\x7e\xfd\xfe\xd4\xbd\x7b\xf7\xae\x76\xc7\xa3\x35\x5e\x48\x0c\
-\x05\x86\x3a\xc9\x93\x7e\x08\x17\x35\xd0\x2c\x01\x37\x37\x00\x46\
-\x73\xc4\xd4\x44\xbb\x94\xe2\x17\xdf\xe7\x3f\x88\x50\x0a\x3c\x05\
-\x4c\xc4\xea\xd9\x03\x40\x84\xb6\xc0\x68\xa0\x1b\xb0\x1d\xf8\x5c\
-\x29\xbe\xf3\x7b\xbe\x23\x56\xf2\xf3\xb1\x52\xec\xf1\xbf\x81\x08\
-\x69\x58\x09\xe4\x7b\x4a\x51\xe9\x3b\x16\x07\x1c\x03\xf4\xc4\xea\
-\x35\x7c\x4f\x29\x76\xfb\x9d\x13\x0b\xe4\x00\x5f\x01\x02\x8c\x01\
-\x12\x80\xe5\x4a\xf1\x63\x63\x5e\x98\x08\x0e\xdf\x35\xb2\x81\x62\
-\xe0\x1d\xa5\xd8\xec\xf7\xbc\xcb\x17\xc3\x4a\x60\x17\x56\x02\xd7\
-\x19\xf8\xa0\xc6\x6b\x3b\x06\x6b\x45\x74\x17\x11\x46\xfb\x0e\xaf\
-\x53\x8a\x9f\x7d\xcf\xf7\x06\x86\x62\x25\xfc\xbf\xfa\x62\xac\x59\
-\xca\x3e\x11\x28\x03\x36\x36\x26\xf6\x1a\xaf\xa3\x33\x30\x1c\x48\
-\xc2\xfa\xba\x7f\xd6\xc0\x29\x5a\x0b\x64\x18\xc6\x35\xa6\x69\x86\
-\xcc\x1f\xe1\x6e\xb7\x7b\xdc\x90\x21\x43\xdc\x76\xc7\x61\xb7\xe3\
-\x8e\x3b\xce\xee\x10\x02\x66\xdc\xb8\x71\x5c\x72\xc9\x25\x95\x1b\
-\x36\x6c\xb8\x13\x38\xc9\xee\x78\xb4\xc6\xd1\xc9\x5d\x73\x70\xa0\
-\x80\x53\xab\x1d\x53\x3c\x85\x70\x2f\xf0\xa6\xdf\xd1\x8a\xe6\x0c\
-\x2b\x80\xd6\xfa\xfe\xdd\xff\xe7\xba\x2f\xb9\xf8\x19\xd8\x86\x95\
-\xbc\x1c\x01\x44\x8b\xf0\x77\xa5\xb8\xca\xd7\x2c\x1a\x78\x03\x2b\
-\xa1\xbd\xbf\xc6\x35\x1f\x04\xda\x2b\x65\xf5\x06\x8a\x70\x14\xf0\
-\x24\x56\xb2\xb2\x1a\x2b\x29\x5c\x2f\xc2\x29\x4a\xf1\x8d\xef\x9c\
-\x1e\xc0\x5b\xc0\x15\x40\x3e\xd6\xd7\x33\x19\xa8\x14\xe1\x74\xa5\
-\xa8\xb7\xf7\xc3\x97\x50\x3e\x86\x35\xbf\xe9\x67\x20\x15\xd8\x27\
-\xc2\x9f\x95\xe2\x19\x5f\xb3\x38\xdf\x3d\xae\x05\xce\xf5\x3d\x8e\
-\x03\x22\x44\xb8\x48\x29\x1e\xf0\xb5\xbb\xc7\x17\xeb\x78\xac\x64\
-\xb1\xea\xd8\x22\x11\x66\x03\x85\xbe\x7b\xec\xc1\x9a\x87\xb9\xc5\
-\xf7\x5a\xde\xf1\x0b\xe9\x1f\xc0\x7a\xac\xa1\xd8\x46\x13\x21\x1f\
-\xb8\xce\xf7\xfa\xb7\x00\xdd\x44\x78\x06\x38\x5b\x29\xf6\x1e\xca\
-\xb5\x34\xfb\x19\x86\xe1\xb5\x3b\x86\xc6\x10\x91\x2e\x40\xe7\x70\
-\x9f\x6f\xd7\xda\xc4\xc6\xc6\x32\x63\xc6\x0c\xd7\xac\x59\xb3\x4e\
-\x14\x91\x3f\x2a\xa5\xfe\x6b\x77\x4c\x5a\xc3\x74\x72\x77\x88\x24\
-\x5f\xda\x01\x55\x93\x29\x36\xa9\x42\xd5\xe0\x24\x67\x35\x5f\xad\
-\x00\x56\xd4\xb8\x8e\x17\xc5\x17\xaa\x50\x2d\x09\x42\x98\xcd\x46\
-\x84\x28\x0e\x2c\x97\x7f\xdd\xef\xa9\x1d\xc0\x68\xa5\xf8\xc0\xaf\
-\xdd\x6c\xe0\x7a\x11\x5e\x54\x8a\x77\x94\xe2\x67\x11\x5e\x01\x66\
-\xe0\x97\xdc\x89\x90\x0e\x8c\xf3\x1d\x47\x04\x37\x56\xd2\xe5\x01\
-\x06\x29\xc5\x56\x5f\xf2\xf8\x26\xf0\x98\x08\xd9\x4a\xe1\xff\x06\
-\x58\x80\x55\xe4\x75\x29\xd0\x09\x6b\x18\xf9\x16\xa8\x3f\xb9\x03\
-\xfe\x85\xf5\xbd\x1d\xa6\x14\x9f\x88\x90\x08\x2c\x02\x16\x8b\xf0\
-\x81\x52\xd5\x7a\xd0\xf2\xb1\x92\xbb\x67\x81\x78\xac\x5d\x03\x16\
-\x8a\xf0\xa8\x52\xec\x55\x8a\x23\x45\xf8\x05\x78\x56\xa9\x83\x86\
-\x56\x5f\x05\x1e\x53\x8a\x4d\xbe\xd7\xd7\x05\xf8\x2f\xf0\x90\x08\
-\x7d\xab\x7a\x2a\x0f\x87\x08\x27\x01\xf3\x81\xbf\x61\x7d\x4d\x77\
-\x01\x13\x7c\xaf\xfd\x4a\xe0\xc6\xc3\xbd\xb6\xd6\x7c\x4c\xd3\x8c\
-\xf6\x15\x2c\x0e\x25\xb9\x2e\x97\xcb\xdb\xaf\x5f\xbf\x90\xe9\x69\
-\xd4\x1a\x67\xd8\xb0\x61\x4c\x9e\x3c\xd9\xbb\x6c\xd9\xb2\xfb\x44\
-\xe4\x2d\xa5\x54\xcb\xde\x30\x57\x6b\xfa\x9c\x3b\xc9\x97\x64\xc9\
-\x97\x27\xfc\x3e\xc6\xd7\x78\xfe\x4c\xbf\xe7\x86\x37\xf5\x7e\x2d\
-\xc0\x99\x1c\x58\x50\x70\x9a\xcd\xb1\xd8\x65\xb4\x08\xaf\x88\xf0\
-\x06\xb0\x15\xeb\xeb\x70\x09\x58\x89\x1c\x80\x52\x6c\xaf\x4a\xec\
-\xaa\x0e\x01\x77\x01\xa5\xc0\xb1\x7e\xc7\xef\x01\x06\xd5\x98\xaf\
-\x77\x01\xb0\x13\xf8\x8f\xef\xf1\x44\x20\x1d\xb8\x4a\x29\xb6\xfa\
-\xae\xff\x1b\x70\x0d\x56\xaf\xd7\xa8\x1a\xf1\x2d\x51\x8a\x97\x94\
-\xc2\xab\x14\x1b\x80\x25\x40\x4f\xdf\x30\x71\xad\x44\x18\x86\x35\
-\x84\x7c\x9b\x52\x7c\xe2\xbb\x47\x31\xd6\x5c\xc9\x58\xe0\x94\x1a\
-\xa7\xbc\xa5\x14\x4f\x29\x45\xb9\x2f\xa6\x27\xb1\x86\x80\x7b\xd4\
-\x75\x8f\xfd\x5f\x08\xc5\xd7\x7e\x89\x9d\x03\xeb\x6b\x78\x17\x90\
-\x81\xb5\x68\xa2\x29\xf2\x80\x95\x4a\x71\xab\x52\xec\x54\x0a\xa5\
-\x14\xaf\x60\x25\xba\x7f\x6a\xe2\xb5\xb5\x66\x60\x9a\xe6\x19\xc0\
-\x4a\xd3\x34\x43\x6d\xa9\x65\x6e\x9f\x3e\x7d\x2a\x22\x22\x22\xec\
-\x8e\x43\x0b\x82\xcb\x2e\xbb\xcc\x31\x7a\xf4\xe8\x76\x93\x27\x4f\
-\x7e\xd1\xee\x58\xb4\x86\x05\xa2\xe7\xae\x0d\xd5\x87\x8d\x06\x48\
-\xbe\x64\xa9\x42\x55\xd5\xfb\x30\xc0\xef\xf9\xff\x01\x1f\x05\xe0\
-\x9e\x9a\xbd\xb6\x03\xab\x80\xb6\x58\xf3\xdf\xda\x00\x6b\x94\x42\
-\xf9\x37\x12\xe1\xcf\xc0\xc5\x40\x2f\xac\x04\xa9\x4a\x17\xbf\xcf\
-\x97\x02\xbf\x60\xf5\xd2\x7d\xe6\x9b\xd3\x76\x1e\xf0\x6f\xa5\xd8\
-\xe9\x6b\x53\xb5\x28\xa1\xe6\xbc\xb1\xf7\x7d\xff\x66\x60\x0d\x95\
-\x56\x79\xa9\x46\xbb\xaf\x7c\xff\x26\xf9\x62\xaf\x4d\x55\x89\x9a\
-\x49\x22\x07\x25\x8b\x7b\x7c\xf7\xf0\x57\xd7\x3d\x92\xb1\x12\xff\
-\x3a\x89\x90\x84\x35\xac\x7b\x02\x56\xcf\xa2\xff\xec\xf3\x2e\xb0\
-\x7f\x3e\xe3\x21\x11\x41\x80\x2c\xac\xe1\xea\x27\x6a\x3c\xdd\x0d\
-\xe8\x2e\x82\x4b\xa9\x90\x1d\xfe\x6f\xf5\x7c\x09\xdd\xdf\x81\xa5\
-\x86\x61\xec\xb0\x3b\x9e\x43\xe1\x76\xbb\xc7\xe5\xe4\xe4\x84\x75\
-\x66\x57\x59\x59\x89\x88\xd0\x1a\x0b\x38\xc7\xc5\xc5\x31\x79\xf2\
-\x64\xa7\xd7\xeb\x3d\xaa\x4f\x9f\x3e\xd3\x56\xaf\x5e\x5d\xf3\x77\
-\x8c\xd6\x82\x04\xe3\x27\xb0\x2f\x70\x4e\x10\xae\xab\xb5\x1c\x5f\
-\x28\xc5\x65\x4a\x71\x3e\x56\x72\xf7\x3d\xf0\x94\x08\xfb\x97\x87\
-\x89\x30\x0d\x6b\xde\xdc\x7b\x58\xbd\x9d\xbd\xb1\xe6\xb0\xad\xc1\
-\xef\x8f\x0a\xdf\x70\xea\x7d\xc0\x19\xbe\x05\x13\x53\xb0\x86\x46\
-\xef\xf3\xbb\x5f\x34\x56\xcf\xdf\xbe\x1a\x71\x54\x0d\x5b\x45\xd5\
-\x38\x5e\xf3\x4d\xb1\x6a\xc8\xb6\xbe\xad\x74\xda\xf9\xfe\xfd\x14\
-\x2b\x51\xf3\xff\xb8\x01\x2b\x09\x6d\xcc\x3d\x1a\xe3\x51\xac\xaf\
-\x49\x21\x56\x2f\x66\x17\xac\xde\x49\x68\xda\x1f\x5c\x91\x58\x5f\
-\x8b\x5f\x38\xf8\x35\x3c\x09\x5c\x4d\xfd\x5f\x03\xcd\x7e\xd7\x62\
-\x7d\x1f\xe7\xd8\x1d\xc8\xa1\x10\x91\xe4\xf2\xf2\xf2\x9e\xe1\x3e\
-\xdf\x6e\xed\xda\xb5\x3c\xf6\xd8\x63\x78\xbd\x21\x31\x4d\xf2\x90\
-\x0d\x1b\x36\x0c\xaf\xd7\xcb\xc8\x91\x23\x1f\x16\x91\xd8\x86\xcf\
-\xd0\xec\x12\xac\x39\x77\xd7\x49\xbe\x3c\xae\x0a\x55\x59\x7d\x8d\
-\x24\x5f\x06\x00\x73\xb1\x7a\x4d\x92\x81\x9f\x80\xb7\x81\x9b\x54\
-\xa1\xda\xee\xd7\xee\x9f\x40\x77\xa0\x1c\x6b\x61\xc2\x6d\x58\x43\
-\x68\x6f\xaa\x42\xf5\x67\xc9\x97\xe7\xb1\x7a\x91\x8a\xb0\x7e\x39\
-\xde\x02\x0c\x02\x3e\x07\xae\x51\x85\xea\x4b\xc9\x97\x7c\xac\xd2\
-\x12\x09\x58\x6f\xd4\xb3\xab\xee\x21\xf9\xd2\x16\xb8\x1d\xab\x97\
-\x31\x15\xab\x97\x69\x13\x56\x0f\xcc\x6d\xaa\x50\xf9\x4f\x72\xaf\
-\xef\xf5\x0c\xc6\x9a\x8b\x95\x85\xb5\xd2\x71\x15\xd6\x9b\xea\x3d\
-\xaa\x50\xb5\xca\xff\xed\x4a\x51\xe9\x2b\xa2\xbb\x0a\xb8\x19\xf6\
-\x17\xd4\x3d\x11\xeb\xfb\x39\xab\x6a\x3e\x9c\xaf\x57\x2e\xb5\x96\
-\xcb\x3c\x04\xcc\xf3\x9d\x7b\x02\xf0\x89\x52\xfb\x7b\xc2\x00\x7e\
-\xc4\x4a\x4a\x7a\x61\x25\x92\x55\xfa\xf9\xfe\xfd\x25\x00\x2f\xa5\
-\x6a\x4e\xe4\xab\x4a\x05\xac\x77\xb9\x92\x1a\xff\xc7\x44\x88\xc1\
-\x5a\x64\x71\x83\x52\x98\x7e\xc7\x47\x34\xf5\x66\x4a\xb1\x57\x84\
-\x9f\x81\x12\xa5\x58\xd0\xd4\xeb\x69\xb6\xa8\x04\x66\xb7\xf0\xbd\
-\x63\x6b\x33\x52\x44\xd4\x91\x47\x1e\x19\xd6\x7f\x3c\x78\x3c\x1e\
-\xda\xb5\x6b\xd7\x2a\x7b\xee\xc0\xda\x7b\xb6\x47\x8f\x1e\xb8\x5c\
-\xae\xe8\xd4\xd4\xd4\x6b\x61\xff\xe2\x38\xad\x85\x09\xf4\x4f\xe0\
-\xa7\x58\xc3\x5e\x69\x50\x7f\xe9\x0f\xc9\x97\xe9\x58\xc9\xd7\xa9\
-\x58\xbd\x7d\x89\x58\xa5\x21\xae\x02\x56\x48\xbe\x74\xf0\x6b\x3e\
-\x14\x6b\x5e\xd5\x68\x60\x19\xd6\xdc\xa1\xee\xb0\x7f\x77\x84\x11\
-\xbe\xe7\x27\x62\x25\x87\x93\xb0\x7a\x7f\x26\x03\x2f\x49\xbe\x2c\
-\xc6\x9a\x64\x7e\x24\xd6\x9c\xa6\xbf\x00\x77\xfa\x5d\x3f\x0e\x6b\
-\x28\x70\x10\xd6\xe4\xf8\x68\xa0\x0f\x56\x82\xb2\x5c\xf2\x65\x5c\
-\x43\x2f\x5c\xf2\x65\x06\xf0\x09\xf0\x47\xdf\xb9\xf1\x58\x25\x33\
-\xee\xc2\x1a\x8e\x6e\xb5\x7c\xf3\xda\xfe\x01\x4c\x13\x21\xd3\x77\
-\xf8\x57\xac\x84\xdb\x3f\xb9\xb9\x02\xeb\x6b\x5d\xf3\xfc\x2d\xc0\
-\xd3\x58\xdf\xfb\xf1\x54\xef\xb5\x03\x78\x0d\xab\xa7\x6c\x76\xd5\
-\x01\x11\x9c\x58\xf3\xcb\xb6\x02\x8d\x4a\xbe\x1b\xb0\x1c\x58\x07\
-\xdc\x28\x42\xa4\xff\x13\x22\xb4\xf1\xdf\x15\xe2\x10\x14\x61\xad\
-\x12\xf6\x57\xe6\x3b\xde\xde\xef\xfa\x31\x04\xee\x97\xe4\xbf\x80\
-\x53\x7d\x73\x08\xab\xf1\xad\x06\xd6\x5a\x30\xc3\x30\xe6\x18\x86\
-\xb1\xd8\xee\x38\x0e\x43\x6e\x46\x46\xc6\xbe\xe8\xe8\xe8\x86\x5b\
-\xb6\x62\x45\x45\x45\x21\x5f\xbc\xb8\x21\x5d\xba\x74\x61\xf5\xea\
-\xd5\x6c\xde\xbc\x79\xa6\x48\xc8\xd4\x66\x0d\x3b\x81\x4e\xee\xb6\
-\x62\xcd\x17\x01\x98\x2b\xf9\x52\xeb\xd6\x54\x92\x2f\xc9\x58\x49\
-\x8f\x13\x6b\x68\xed\x52\xac\xde\xae\xa7\x7c\x4d\x3a\x63\xf5\xa4\
-\xd5\xe4\xc2\xea\xad\xb9\x1f\x6b\x58\xab\xe6\x92\xec\xb6\x58\x3d\
-\x30\xc7\x61\x25\x79\x60\xf5\x14\x9d\x8d\x95\xdc\x9d\xc4\x81\xe1\
-\xb4\x33\x25\x5f\xaa\x5e\xff\x2e\xac\x39\x5f\x29\xaa\x50\xc5\x62\
-\x25\x8d\xfe\x3b\x2e\xe4\xd7\xf5\x82\x7d\xaf\xa7\x3b\x56\x6f\xa2\
-\x03\x2b\x41\x18\x80\xf5\xe6\x7d\xaf\xaf\xc9\x09\x92\x2f\x67\xd4\
-\x77\x8d\x56\xe0\x66\xac\xef\xe5\x35\xbe\xc7\x0f\x61\xf5\xc6\x7e\
-\x2a\xc2\x42\x11\x9e\xc7\xfa\x9a\xae\xad\xe3\x7c\x13\x6b\x31\xc2\
-\x0e\xa8\x3e\x5f\xcc\x97\xfc\x5d\x09\x4c\x17\xe1\x6d\x11\x6e\xc1\
-\x9a\x6f\x37\x0e\xb8\x58\xa9\xa6\x6f\xcb\xa4\x14\xbb\xb0\xfe\x68\
-\x18\x08\xac\x12\xc1\x14\xe1\x66\x11\x9e\xc6\xaa\x33\x77\x38\x05\
-\x9a\x9f\x02\x8e\x15\xe1\x5b\x11\x96\x88\x70\xb6\x6f\x25\xec\x62\
-\x60\x86\xef\xd8\x22\xe0\x4b\xe0\x87\xa6\xbe\x06\x9f\x85\x58\xab\
-\x88\xdf\x13\xe1\x19\x11\x16\x88\xf0\xa0\x08\xdf\x62\x25\xe0\x9a\
-\x16\x70\x6e\xb7\x7b\x6c\x4e\x4e\x4e\x64\xc3\x2d\x5b\xaf\xbd\x7b\
-\xf7\x52\x5a\x5a\xda\xea\x93\x3b\x80\xd3\x4f\x3f\x9d\xd8\xd8\xd8\
-\x08\x11\x99\x6b\x77\x2c\x5a\xed\x82\x31\x2c\x7b\x1b\xd6\x24\xfa\
-\x0e\xd4\x5d\x5d\x7f\x04\x07\xe6\x38\xbd\xa1\x0a\xd5\x5d\x00\x92\
-\x2f\x33\xb1\x7a\xf2\x04\xab\xf7\xad\x36\x97\xa9\x42\xf5\x60\x3d\
-\xf7\x9f\xa9\x0a\xd5\x4a\xc9\x97\x5e\xb0\xbf\x78\xec\x17\xaa\x50\
-\xcd\xf5\xdd\xe3\x63\xac\xa4\xc0\x8d\x95\xf8\xfd\xa6\x0a\x55\xa9\
-\xe4\xcb\x7f\x80\x13\x25\x5f\xd2\x7d\xb1\x3b\xb1\x56\x6c\xb6\xc1\
-\x1a\x0e\xac\xcf\xb1\x1c\xd8\x12\xea\x3d\xac\x95\x9d\xe9\x54\x1f\
-\x42\x9c\xca\x81\xd5\x9f\xa1\xac\x90\x5a\x12\x11\x5f\x79\x92\x3f\
-\x01\x99\x22\xb8\x95\x62\xb5\x08\x63\x80\xe9\x58\x73\xca\xde\xc2\
-\x9a\x83\x77\x26\x56\xcf\x55\x4d\x9f\x02\xbb\xb1\x4a\x84\xec\xae\
-\xf9\xa4\x52\xdc\xef\x4b\x50\x4e\xc5\xea\xb5\x7d\x17\xb8\xa8\xc6\
-\xf0\xed\x66\xac\xe1\xdd\x9a\x09\xe4\x1a\xdf\xf1\x7a\x97\xef\x2b\
-\xc5\xdb\xbe\x9e\xc7\x0b\xb1\x7a\x93\x93\x81\xdf\xb0\x86\x8b\xab\
-\x7a\x07\xf7\xf8\xae\xf5\x75\x8d\xd3\x37\xf9\x8e\xaf\xf3\xbb\xde\
-\xed\x22\x7c\x89\x95\x30\xc6\x73\xa0\x18\xf1\x3c\x5f\xac\x47\x63\
-\xfd\xdc\xcc\x06\x3e\xc6\xaa\xdf\xf7\x8b\xdf\x35\x1f\xa2\xfa\x7e\
-\xa2\xdf\xfb\xce\xf5\x9f\xef\x77\x0b\xf0\xad\xdf\x3d\xf7\x01\x13\
-\x44\x38\x1d\xeb\xff\x59\x5f\xdf\xeb\x7e\x88\x56\xde\x83\x1c\xaa\
-\x4c\xd3\x6c\x0b\xb8\x43\x70\x28\x16\x00\x11\x89\x17\x91\x7e\xe1\
-\x3e\xdf\xae\xa8\xc8\xfa\xb5\x96\x92\x92\x62\x73\x24\xc1\x17\x1d\
-\x1d\xcd\x85\x17\x5e\xe8\xba\xed\xb6\xdb\x66\x8a\xc8\xed\x4a\xa9\
-\x75\x0d\x9f\xa5\x35\xa7\x80\x27\x77\xaa\x50\xed\x94\x7c\xb9\x11\
-\x6b\xd8\xf3\x4a\xac\xe1\xb6\x9a\xfc\x57\x1e\x1e\x28\x9f\x51\xa8\
-\xb6\x4a\xbe\xfc\x80\x35\xf9\x3e\x5e\xf2\x25\x59\x15\xaa\x2d\x35\
-\xce\x7d\xa5\x9e\xdb\x97\x62\xcd\xfd\x02\xab\xf8\x6b\x95\x0f\xfd\
-\x3e\xf7\x7f\xb3\x8c\x04\x90\x7c\xc9\xc1\xaa\xd1\x56\x57\xa9\x8c\
-\xf6\x75\x1c\xaf\xe2\xff\x7a\xce\x82\x5a\x37\x72\xef\xd3\xc0\x35\
-\x42\x42\x7d\x73\xb9\xfc\x0a\xfd\x56\x3d\x7e\x9b\x03\x3d\xa8\x55\
-\x6a\x0e\xb9\x56\xb9\x10\x88\xc0\xea\xd1\xad\xeb\xfa\x1f\x52\xfd\
-\x7b\x59\xf3\xf9\xcd\x58\xc5\x7b\x6b\x1e\x5f\x53\xdb\xf1\x7a\xae\
-\x71\x53\x3d\xcf\xef\xad\xe3\x1e\x9e\x3a\x8e\x2f\xc7\x1a\xf2\xf5\
-\x3f\xb6\x0f\xb8\xc3\xf7\xe1\xef\xba\x1a\xed\x1e\xaa\xf1\x78\x45\
-\x2d\x6d\x6e\xad\x23\xce\x27\xb1\xe6\x7b\x6a\x2d\xdf\x4d\xc0\xb1\
-\xa6\x69\x66\x19\x86\xa1\x1a\x6c\xdd\xf2\x1c\xa3\x94\x92\x01\x03\
-\xc2\x7b\x8b\x63\x8f\xc7\x43\xfb\xf6\xed\x89\x8c\x0c\x8f\x0e\xcc\
-\x13\x4f\x3c\x91\x15\x2b\x56\x38\xd2\xd3\xd3\x5f\xc3\x7a\xcf\xd6\
-\x5a\x90\x60\x2d\xa8\xb8\x0f\x6b\x7e\x55\x77\xac\x9e\x9b\x9a\x36\
-\xf9\x7d\xbe\x7f\xef\x4d\xc9\x97\x68\xac\x92\x0d\x60\xcd\x4d\xaa\
-\xd9\xd3\xb2\x4f\x15\xaa\x0d\xf5\xdc\x77\x87\x2a\x54\x55\xbf\x1c\
-\xfd\x0b\xc1\xfa\x27\x74\xb5\x4d\xf8\xbd\x91\x03\x89\xdd\x6c\xac\
-\xe1\xb4\x9d\x58\x3d\x54\x0d\x25\x76\x50\x3d\x91\x7c\x82\x1a\x6f\
-\xe6\x3e\xdb\x1a\x71\x9d\xb0\xe3\x5b\x48\x70\x0c\xd6\x1f\x02\x77\
-\x2b\xc5\x6a\x9b\x43\x3a\x88\x08\x47\x03\x7b\x95\xe2\x0b\xbb\x63\
-\xd1\x5a\x17\xd3\x34\x3b\x63\xcd\x01\xfe\x5b\x88\x26\x76\x00\xb9\
-\x69\x69\x69\x65\x6d\xdb\xb6\x0d\x8f\xac\xa6\x0e\xe1\x30\xdf\xce\
-\x9f\xdb\xed\x66\xd4\xa8\x51\xce\xb8\xb8\xb8\x5e\x27\x9d\x74\xd2\
-\x09\xcf\x3e\xfb\x6c\xa8\xec\x7f\x1c\x16\x82\xb2\xa4\x47\x15\xaa\
-\x7d\xc0\xff\xf9\x1e\xd6\xf6\x1f\xfe\x73\x0e\x94\x8e\x18\x2f\xf9\
-\x72\x84\x6f\xfe\xdb\x5f\xfc\xda\x7f\xe1\x57\x2b\x2f\xd8\xaa\x0a\
-\xc7\x56\x02\xff\x54\x85\xea\x57\xac\x2d\xa8\x1a\x93\xd8\x41\xf5\
-\xda\x7d\x7d\x80\x87\x55\xa1\xba\x57\x15\xaa\x7b\xb1\xe6\x07\xfe\
-\xc6\x61\xec\x0f\x1a\x26\xfe\x80\xb5\x42\xf6\x5e\xac\x95\xce\x2d\
-\xd1\xf9\x58\x35\xf8\xfe\x23\x42\x4f\xbb\x83\xd1\x5a\x95\x39\x58\
-\x5b\xc4\x3d\xd0\x50\xc3\x96\xca\xed\x76\x8f\x1d\x3a\x74\x68\x58\
-\x27\x76\x15\x15\x15\x6c\xdd\xba\x35\x2c\x86\x64\xfd\xe5\xe6\xe6\
-\x52\x5c\x5c\xac\xd2\xd2\xd2\xcc\x86\x5b\x6b\xcd\x29\x98\xeb\xb5\
-\xff\x0d\x07\x36\x52\xf7\xa7\x0a\xd5\x2a\x0e\x0c\x49\x75\xf4\xb5\
-\xfb\x8d\x03\x8b\x28\x2a\xb0\x76\x3c\x68\x2e\x55\xc9\x99\x13\xf8\
-\x4c\xf2\xe5\x2d\xe0\x19\xac\xde\xc3\x06\xa9\x42\xf5\x25\xd6\x7c\
-\x32\xb0\xe6\x57\x15\x4b\xbe\xbc\x28\xf9\xf2\x3a\xd6\xeb\x7a\x1e\
-\xf6\xaf\x22\xd5\xfc\x28\xc5\x75\x4a\x71\xb4\x52\x5c\xa3\x54\x9d\
-\x05\x86\xe7\x5b\xb9\x5e\x00\x00\x20\x00\x49\x44\x41\x54\x6d\xa5\
-\x14\x17\x60\x25\xa0\xfd\x81\x95\x22\xdc\x25\x42\x87\x06\x4e\xd3\
-\xb4\xc6\x58\x0b\xcc\x35\x0c\xa3\x51\xbf\x6b\x5a\x1a\x11\x89\xa9\
-\xa8\xa8\xc8\x0e\xf7\xf9\x76\x5b\xb6\x6c\xc1\xeb\xf5\x86\x55\xcf\
-\x1d\x58\xa5\x51\xe2\xe3\xe3\xa5\x4b\x97\x2e\xa9\x3d\x7a\xf4\x98\
-\x60\x77\x3c\xda\x01\x41\x4b\xee\x7c\x75\xdd\x0a\xea\x69\x32\x1b\
-\x6b\xc1\x45\x29\xd6\x50\x69\xd5\xff\x8a\xaf\x80\x5c\x55\xa8\x3e\
-\x0f\x56\x6c\xb5\xc8\xe3\xc0\x6e\x07\xdd\xb0\x4a\xa2\x4c\xa3\xfa\
-\x70\x6b\x43\x66\x62\xfd\x15\xbe\x0d\x6b\x11\xc6\x64\x60\x2c\x56\
-\x5d\xbd\x57\xb1\x56\x44\x6a\x21\x4a\x29\x5e\xc0\x2a\xa5\x33\x03\
-\x2b\xd1\xfb\x49\x84\xeb\x44\xa8\x75\x45\xb8\xa6\x35\x86\x61\x18\
-\xb7\x1b\x86\xf1\x2f\xbb\xe3\x68\x82\xa3\x94\x52\xce\xec\xec\x6c\
-\xbb\xe3\xb0\x95\xc7\xe3\x21\x2e\x2e\x8e\xd8\xd8\xf0\xab\xeb\x3b\
-\x6c\xd8\x30\x9e\x7c\xf2\xc9\x8a\x0d\x1b\x36\x5c\x67\x77\x2c\xda\
-\x01\xa2\x94\xbd\xd3\x3c\x24\x5f\x04\x6b\xd5\x6a\x22\xb0\xce\xbf\
-\x78\xb1\x0d\xb1\xa4\x61\x0d\x0b\xff\xe8\x37\x77\xef\x70\xae\x93\
-\x82\xf5\x9a\x4a\x00\x8f\x6f\x98\xba\x66\x9b\xbd\xc0\x45\xaa\x50\
-\xfd\xf3\x70\xef\xa3\xd9\x43\x84\x28\xac\x15\xe1\x05\x58\x85\xb5\
-\x6f\x00\xee\x53\x8a\x72\x5b\x03\xd3\xb4\x66\x26\x22\xf3\x52\x53\
-\x53\xe7\x3c\xfb\xec\xb3\x61\x3d\x2c\x5b\x5c\x5c\xcc\x8e\x1d\x3b\
-\xe8\xde\xbd\xbb\xdd\xa1\xd8\xe2\xdb\x6f\xbf\xe5\xc2\x0b\x2f\x04\
-\x98\xa2\x94\xd2\x7b\xcf\xb6\x00\xb6\x27\x77\xe1\x4a\x27\x77\xa1\
-\x4f\x84\x76\x58\xbd\xbe\x97\x62\x2d\x12\xba\x1a\x78\xa2\xe6\x1e\
-\xbb\x9a\x56\x93\x69\x9a\x91\xa1\x3a\x14\xeb\xcf\xed\x76\xbf\x3b\
-\x69\xd2\xa4\x11\x05\x05\x05\x61\xbd\x33\x85\x06\xb3\x67\xcf\xae\
-\xfc\xf0\xc3\x0f\x7f\xa8\xa8\xa8\xe8\xa7\x54\xeb\xdc\x91\x29\x94\
-\xb4\xce\x3d\x52\x34\xad\x19\x28\x45\xa9\x52\xe4\x61\xd5\x41\x7c\
-\x13\x6b\xcf\xd8\xcf\x45\x18\x6f\x6f\x64\x5a\x4b\x66\x9a\x66\x07\
-\x60\xbd\x69\x9a\x23\xed\x8e\xa5\x29\x44\x24\xc2\xeb\xf5\x0e\x1d\
-\x38\x70\xa0\x4e\xec\x34\x0c\xc3\x70\x9e\x74\xd2\x49\x7d\x07\x0f\
-\x1e\xac\xb7\x24\x6b\x01\x74\x72\xa7\x69\x4d\xa4\x14\xbf\x29\xc5\
-\x85\x58\x0b\x2e\xd6\x01\xcb\x44\x78\x5d\x84\xc1\x36\x87\xa6\xb5\
-\x4c\x57\x61\xad\xcc\xff\xcc\xee\x40\x9a\x28\xc7\xeb\xf5\x46\x84\
-\xfb\x62\x0a\xcd\x92\x9e\x9e\xce\x90\x21\x43\x18\x32\x64\xc8\xff\
-\x89\x48\xb0\xca\xac\x69\x8d\x14\xb6\xdf\x00\x11\xe9\x09\x4c\xb1\
-\x2d\x80\x39\x38\xf9\x82\xf1\x22\xd2\xae\xe1\xc6\x5a\x08\x59\x0e\
-\x17\xae\x83\xb9\x53\xa0\xdb\xa7\x22\x5f\x7f\x0d\xb3\x5f\x82\xd7\
-\xb6\x36\xf1\xba\x3b\xb1\x86\x7e\xd7\x03\xdf\xe9\x61\x8f\xd0\xe4\
-\xeb\xb5\x33\xb0\x56\xc8\xee\xb1\x3b\x9e\x26\xca\x4d\x4c\x4c\x2c\
-\xeb\xd8\xb1\x63\x58\xcf\xb7\xd3\x0e\x48\x4b\x4b\xa3\x4d\x9b\x36\
-\xd1\x39\x39\x39\x97\x60\xed\x56\xa5\xd9\x24\x6c\x93\x3b\xac\x5e\
-\x16\xfb\x7e\xf8\xbc\x80\x87\x33\x80\xd6\xbe\xe7\x6c\x18\x7a\xc0\
-\xf7\x31\x05\x28\xcc\x86\x97\xb2\xad\xc7\xd7\x53\xfb\xce\x6b\x87\
-\x6c\xb3\x88\xbc\x08\x3c\xac\x94\x7a\xbf\xc1\xd6\x5a\x4b\xd2\x13\
-\x6b\xbb\xb8\xba\x76\x6a\x09\x19\x4e\xa7\x73\xcc\x90\x21\x43\xdc\
-\x76\xc7\x61\xb7\xaf\xbe\xfa\x8a\x8c\x8c\x0c\xda\xb4\xd1\x0b\xe7\
-\x7b\xf4\xe8\xc1\xba\x75\xeb\xe8\xdf\xbf\x7f\x1e\x3a\xb9\xb3\x95\
-\x1e\x96\xd5\xb4\xa0\xa9\xaa\x9e\xf2\x17\xac\x44\xef\x27\xac\x04\
-\x2f\xae\xa9\x17\xee\x80\x55\x58\xf9\x5d\x11\xb9\x53\x44\x62\x9a\
-\x7a\x41\xad\x79\x18\x86\xf1\xa1\x61\x18\xc3\x43\xbd\xd7\x4e\x44\
-\x9c\xc0\x88\x41\x83\x06\x85\xf5\x7b\x48\x69\x69\x29\x9f\x7d\xf6\
-\x19\xbb\x77\x1f\xb4\x1d\x76\xd8\x4a\x48\x48\xe0\x91\x47\x1e\xe9\
-\x20\x22\x39\x76\xc7\x12\xce\xc2\xb9\xe7\x6e\x39\x70\x94\x6d\x77\
-\x77\xf0\x0e\xfd\x58\xc8\xb7\xbc\x64\x5b\x0c\x5a\x33\xf0\x02\xff\
-\x04\x96\x47\xc0\x93\xa7\x42\xfe\x39\x90\xe7\x85\xcf\xfe\x09\x7f\
-\xfc\x1f\x6c\x6a\x6c\xf9\x94\xb6\x40\x67\x60\x00\x70\x22\x56\x3d\
-\x46\xc1\x2a\xf6\x3d\x49\x44\xce\x53\x4a\xbd\x1b\xf8\xf8\x35\xad\
-\x56\x03\x2b\x2b\x2b\x63\x74\x7d\x3b\x0f\x2e\x97\x8b\xa4\xa4\x24\
-\xbb\x43\x69\x31\x06\x0c\x18\x40\x8f\x1e\x3d\xca\xd7\xae\x5d\x7b\
-\x05\x7a\x64\xca\x36\xba\x14\x8a\x4d\x74\x29\x94\xf0\xe4\x2b\x9f\
-\x32\x07\x98\x05\x78\x80\x6b\x80\xc7\x0f\xb5\x7c\x8a\x88\x4c\x05\
-\x4c\x88\xeb\x64\xf5\x0a\x3e\xee\x05\x16\x29\xa5\xf2\x03\x1d\xb3\
-\xa6\xd5\x24\x22\x57\xb4\x6d\xdb\xb6\xf0\xd5\x57\x5f\x8d\xb0\x3b\
-\x16\x3b\xbd\xfd\xf6\xdb\xec\xda\xb5\x8b\xc9\x93\x27\xdb\x1d\x4a\
-\x8b\xf2\xca\x2b\xaf\x30\x6f\xde\xbc\x4a\xa5\x54\x9a\x52\x4a\x6f\
-\xbd\x69\x83\xb0\xee\x52\xd7\xb4\xe6\xe6\x2b\x9f\x92\x8f\x55\x3e\
-\xe5\x0d\xe0\x5f\xc0\x97\x22\x4c\x3c\xc4\x2b\x7d\x02\xdb\x9f\x02\
-\xcf\x3e\xab\x9e\x32\x0e\x20\x4f\x44\x4e\x0f\x70\xc8\x5a\x00\x98\
-\xa6\x79\xb1\x69\x9a\xb7\xd8\x1d\x47\xa0\x38\x1c\x8e\xd1\x83\x06\
-\x0d\x72\xda\x1d\x87\xdd\x8a\x8a\x8a\xc2\x6e\xcb\xb1\xc6\x18\x3b\
-\x76\x2c\x3d\x7b\xf6\x54\x7f\xf8\xc3\x1f\x6e\x6f\xb8\xb5\x16\x0c\
-\x3a\xb9\xd3\x34\x1b\xf8\x95\x4f\xc9\x02\x7e\x06\x96\x8a\xf0\xa6\
-\x08\x0d\xce\x53\x11\x61\x0e\xf0\x0b\xc4\x5d\x06\x31\x11\xd0\xe9\
-\x23\xac\xd2\x1a\x00\xff\x10\x91\xf0\xda\xbd\xbc\x85\x33\x4d\x53\
-\xb0\x7a\x6a\x5b\xc5\xef\x5b\x11\x11\x87\xc3\x91\x3b\x78\xf0\xe0\
-\xb0\x4e\xee\x76\xef\xde\xcd\x8e\x1d\x3b\x74\x72\x57\x0b\xb7\xdb\
-\xcd\x99\x67\x9e\xe9\x9a\x30\x61\xc2\x29\x53\xa6\x4c\xd1\x15\x21\
-\x6c\xd0\x2a\x7e\xd9\x68\x5a\xa8\x52\x8a\x55\x4a\x71\x12\x70\x34\
-\xd6\x1c\xd8\x4f\x44\x78\x5a\x84\xde\xf5\x9c\x76\x37\xe0\xb7\xc5\
-\x4f\xb7\xaf\x81\x45\xbe\x07\x89\xc0\xfd\xc1\x89\x56\x3b\x4c\xc7\
-\x02\x19\xb4\x82\x15\xb2\x3e\xfd\x2a\x2a\x2a\xe2\xc3\xbd\xbe\x9d\
-\xc7\xe3\xc1\xe1\x70\xd0\xa1\x43\x07\xbb\x43\x69\x91\x86\x0d\x1b\
-\x46\x54\x54\x94\xb4\x6d\xdb\xb6\xd5\xf4\x58\x87\x12\x9d\xdc\x69\
-\x5a\x0b\xa0\x14\x1f\x2a\x45\x2e\xd6\x04\xba\xbe\xc0\xf7\x22\x98\
-\x22\xa4\xd6\xd2\xbc\x02\x6b\x58\x77\x15\xb0\x15\xd8\x0c\x5c\x07\
-\x7c\xe7\x7b\x7e\xaa\x88\x9c\x53\xdb\x7d\xe4\x34\x09\xeb\xde\x16\
-\x9b\x9c\x06\x2c\x37\x0c\x63\x95\xdd\x81\x04\x48\x6e\x4c\x4c\x4c\
-\x79\x7a\x7a\xba\xdd\x71\xd8\xaa\xa8\xa8\x88\xc4\xc4\x44\xdc\xee\
-\xb0\xaf\x06\x53\xab\xc4\xc4\x44\x36\x6f\xde\x4c\xf7\xee\xdd\xf5\
-\xa2\x0a\x1b\xe8\xe4\x4e\xd3\x5a\x10\xa5\x78\x11\x6b\x45\xec\x85\
-\xc0\x64\xe0\x47\x11\x6e\x14\xa1\xad\x5f\xb3\xf9\x40\xba\xef\xf9\
-\xfe\xc0\x2b\x4a\xa9\x7d\xc0\xb9\x58\x89\x1f\x58\x8b\x36\x0e\x96\
-\xce\x59\x92\x27\x0f\xcb\x5c\x3d\x74\xdb\x8c\xfe\x4a\x2b\x5a\x35\
-\x28\x22\xa3\xb2\xb3\xb3\xc5\xe1\x08\xef\xb7\x0f\x8f\xc7\xa3\x87\
-\x64\x1b\xd0\xb3\x67\x4f\x96\x2d\x5b\x16\x2d\x22\xc7\xda\x1d\x4b\
-\xb8\x09\xef\xff\x9d\x36\x90\x79\xd2\x56\x0a\xe4\x32\xac\x21\xb8\
-\x53\xa5\x40\x86\xd9\x1d\x93\xd6\xb2\x28\x85\x57\x29\xfe\x89\xd5\
-\x3b\xf7\x7f\x58\x3b\x1a\xac\x15\xe1\x72\xdf\xc2\x8b\xcb\x81\x59\
-\x4a\xb1\x56\x29\x3c\x4a\xf1\x81\x75\x9e\xfa\x02\x78\xda\x77\x99\
-\x23\x44\x24\xe3\xa0\x8b\x0b\x0e\x84\xf3\xf0\xf2\x83\xe4\xcb\x6c\
-\x99\x27\x61\xbd\xda\xb1\x39\x18\x86\x51\x69\x18\xc6\x26\xbb\xe3\
-\x08\x14\xa7\xd3\x79\xec\xe0\xc1\x83\xc3\xb9\x8c\x16\xe5\xe5\xe5\
-\x94\x94\x94\x90\x92\xa2\xff\x46\xaa\x4f\x9f\x3e\x7d\xf0\x7a\xbd\
-\x15\x2e\x97\xeb\x6f\x76\xc7\x12\x6e\x74\x72\xd7\x8c\xa4\x40\x8e\
-\x60\x2f\xdf\xa1\xb8\x0d\x70\x02\x93\x50\x7c\x20\xf9\xa2\xcb\x57\
-\x68\x07\x51\x8a\x32\xa5\xb8\x05\x6b\x57\x83\x07\x80\x1b\xb1\x56\
-\xd7\x3e\xa7\x14\x0f\xd7\x71\xda\xd3\x7e\x9f\xd7\x57\x9f\x21\x0e\
-\x58\xc4\x5e\xbe\x93\x02\x39\x3e\x20\x01\x6b\xad\x9e\x88\x64\x54\
-\x54\x54\x24\x85\xfb\x7c\xbb\xd2\xd2\x52\x9c\x4e\xa7\xee\xb9\x6b\
-\x84\x33\xcf\x3c\xd3\x55\x59\x59\x79\x5c\xad\x7f\x6c\x6a\x41\xa3\
-\x93\xbb\xe6\xb5\x18\xe8\x5a\xe3\x98\x03\xb8\x51\xf2\xe4\x68\x1b\
-\xe2\xd1\x42\x80\x5f\xf9\x94\x57\xb1\xaa\x22\x5f\x58\x4f\xf3\x4f\
-\xfd\x3e\x6f\xcc\x2f\xd3\x5e\x28\x5e\x90\x02\x79\x45\x0a\xa4\x6f\
-\x53\xe2\xd4\xaa\x33\x4d\x33\xdb\x34\xcd\xd6\x56\xa5\x3f\x37\x32\
-\x32\xb2\xa2\x4f\x9f\x3e\x76\xc7\x61\xab\xe4\xe4\x64\xce\x39\xe7\
-\x1c\xa2\xa2\xa2\xec\x0e\xa5\xc5\x1b\x31\x62\x04\x29\x29\x29\x15\
-\x31\x31\x31\x97\xdb\x1d\x4b\x38\x09\xeb\xae\xf5\xe6\x24\x79\x92\
-\x86\x30\xb4\x8e\xa7\x1d\x08\x73\x25\x4f\x1e\x6d\xd6\xa0\xb4\xd0\
-\xb1\xec\xde\xe1\x30\xe3\x44\x86\xde\xbc\x90\x31\x57\x8d\x93\xbc\
-\x3a\xda\xfd\x0d\x07\xb7\xe0\x05\x1c\x24\x30\x54\xf2\x64\x5a\x8d\
-\x16\xc3\x90\x5a\xce\x53\x4c\x00\xbe\x95\x3c\xb9\x9b\x68\xe6\xa9\
-\x6b\x55\x69\x40\xe3\x0f\x4f\xd7\x03\x91\xc0\x04\xbb\x03\x09\xa0\
-\xdc\xac\xac\x2c\xe5\x74\xea\x75\x39\xe1\x3e\xe7\xb0\xb1\x1c\x0e\
-\x07\x33\x67\xce\x74\xef\xda\xb5\xeb\x22\x11\xb9\x4a\x29\xb5\xcb\
-\xee\x98\xc2\x81\x4e\xee\x9a\x8b\x83\xce\x0d\xec\x41\x30\x11\x61\
-\x6c\x33\x45\xd3\x1c\x9c\x58\xdb\x63\x55\x34\xd4\x50\x6b\x84\xb1\
-\x7f\x83\x2e\xef\x97\x93\xf5\xe8\x65\xf5\xb6\x73\x03\x91\x38\x28\
-\x03\xe2\x18\x82\xf0\xcf\x1a\x2d\xea\x7b\x57\x76\x21\x9c\xcd\x5e\
-\x3e\x01\xfe\xd3\xa4\x78\xc3\x9c\x69\x9a\x5d\x80\x49\xc0\xa9\x76\
-\xc7\x12\x48\x6e\xb7\x7b\xdc\x90\x21\x43\xf4\xf2\x50\xed\x90\x64\
-\x65\x65\xb1\x69\xd3\x26\x47\x6e\x6e\xee\x65\xc0\x4d\x76\xc7\x13\
-\x0e\x74\x72\xd7\x5c\x2a\xf9\x0e\x87\xaf\x47\xa5\x36\x8a\x6b\xd4\
-\x02\x35\xbf\x79\x83\x0a\x1e\xc9\x93\xd3\x10\x9e\x40\x31\x4e\x2d\
-\x50\xef\xd9\x1d\x4f\xeb\xf1\x48\xbd\xcf\x8a\x48\x14\x60\x6d\x4a\
-\xff\x2b\x4f\xaa\x42\x75\x66\xb5\xe7\xf3\xe5\x4f\x58\xd3\x03\x6a\
-\xaa\x00\xee\x01\xae\x53\x85\x6a\x5b\x20\x22\x0d\x73\x17\x62\x95\
-\xa8\x79\xc1\xee\x40\x02\x45\x44\xba\x02\x9d\xc3\x7d\x3f\x59\xed\
-\xd0\xa5\xa6\xa6\xb2\x7a\xf5\x6a\x32\x33\x33\x67\xa0\x93\xbb\x66\
-\xa1\xfb\x95\x9b\x8b\x93\xb1\x40\x5d\x9b\xc4\x6f\x64\x1f\xf7\x36\
-\x67\x38\xc1\xa6\x16\xa8\xa7\x80\x37\x10\xfe\xa1\x6b\xab\x35\xab\
-\x2e\x7e\x9f\x37\x6e\x85\xa6\xb0\x0c\x2f\x47\xaa\x42\x35\x4b\x27\
-\x76\x01\xf3\x0e\x30\xdb\x30\x8c\xd6\xd4\x73\x9d\xeb\x72\xb9\xbc\
-\x59\x59\x59\x76\xc7\xa1\x85\x20\x87\xc3\x41\x64\x64\x64\x17\x11\
-\x49\xb4\x3b\x96\x70\xa0\x7b\xee\x82\x4c\xe6\x89\x8b\x3d\x14\x22\
-\x5c\x89\x62\x31\xb0\x03\xe1\x62\x0e\x24\xd6\xdf\xa0\x38\x53\xdd\
-\xaa\x4a\x6c\x0c\x33\x38\x84\x4b\x50\x7c\x43\x06\x33\x81\x3b\xed\
-\x0e\x27\x4c\x8c\xf3\xfb\xfc\x9b\x06\xda\xae\x41\xf8\x9b\x9a\xaf\
-\x5e\x6c\xa0\x9d\x76\x88\x0c\xc3\x78\xc3\xee\x18\x82\x20\x37\x33\
-\x33\xb3\xc2\xed\x76\x87\x75\xf9\x9c\x37\xde\x78\x83\xf8\xf8\x78\
-\x86\x0c\x19\x62\x77\x28\x21\x25\x27\x27\x87\xb9\x73\xe7\x7a\x81\
-\x53\x68\x3d\xbb\xb5\xb4\x58\xba\xe7\x2e\x88\xe4\x6a\xe9\xcc\x5e\
-\xde\x42\xf8\x2b\xc2\x9f\xd4\x02\x75\xbe\x5a\xa0\x66\x51\x46\x32\
-\x30\x06\x21\x93\x28\x06\xaa\x05\xea\x7b\xbb\x63\x0d\x06\x35\x5f\
-\xad\x02\x6e\x45\x71\xbd\x2e\x9a\xdb\x6c\xaa\x16\x50\x54\x52\x6d\
-\x8b\xb2\x6a\x7e\x07\xae\xa4\x84\x2c\x9d\xd8\x69\x8d\xe5\x9b\x6f\
-\x17\xd6\x89\x1d\xc0\xc6\x8d\x1b\x89\x8e\x8e\xb6\x3b\x8c\x90\x13\
-\x1d\x1d\x4d\x6e\x6e\xae\xb8\xdd\xee\x73\xed\x8e\x25\x1c\xe8\x9e\
-\xbb\x20\x91\x7c\x19\x07\x3c\x0e\x94\xe0\x60\x98\xba\x49\x55\x6d\
-\x0d\x85\xaf\x97\xee\x6d\xbb\x62\x6b\x56\x15\xdc\x80\x8b\x33\xf1\
-\xb2\x08\x6b\x07\x05\x2d\x48\x44\xe4\x34\x60\x94\xef\xe1\x7b\x4a\
-\xa9\xe2\x83\x1b\xf1\x11\xe5\xf4\x56\x37\xab\xcd\xcd\x1a\x9c\x16\
-\xd2\x44\xa4\x03\x90\xae\xeb\xdb\x95\x52\x56\x56\xa6\x8b\x17\x1f\
-\xa6\x09\x13\x26\x38\xde\x78\xe3\x8d\xe1\x22\xd2\x45\x29\xb5\xc1\
-\xee\x78\x5a\x33\x9d\xdc\x05\x98\xcc\x13\x07\x7b\xb8\x1a\xe1\x5a\
-\x84\x67\xa8\xe4\x02\x55\xa8\x76\xd8\x1d\x97\x5d\xd4\xcd\x6a\x97\
-\x14\xc8\x15\x28\x9e\x96\x3c\x79\x40\x2f\xae\x08\x0e\xdf\x9b\xef\
-\x3f\x7c\x0f\xbd\xc0\xdc\xda\xda\xf9\x7a\x53\xb5\x20\x31\x4d\xf3\
-\x7c\xe0\x02\x60\x84\x61\x18\xf5\xaf\x8f\x0f\x2d\x23\x1d\x0e\x87\
-\xea\xdf\xbf\x7f\x6d\x85\x74\xc2\x86\xc7\xe3\xc1\xed\x76\x93\x98\
-\xa8\xa7\x8d\x1d\x8e\xa3\x8e\x3a\x8a\x61\xc3\x86\x79\x13\x13\x13\
-\x6f\x00\xce\xb3\x3b\x9e\xd6\x4c\x0f\xcb\x06\x90\x5c\x29\x49\xec\
-\x65\x29\xc2\x5c\x60\x96\x9a\xaf\x4e\x57\x0b\xc3\x37\xb1\xab\xa2\
-\xe6\xab\x67\x10\x5e\xd3\x8b\x2b\x82\xea\x5e\x20\xc9\xf7\xf9\xad\
-\x4a\xa9\xf7\xed\x0c\x26\x8c\xfd\x11\x28\x6e\x65\x89\x1d\x40\x6e\
-\x46\x46\xc6\xbe\x70\x1f\x8e\xf4\x78\x3c\x74\xe8\xd0\x01\x91\xb0\
-\xce\x71\x0f\x9b\xdb\xed\xe6\xd8\x63\x8f\x75\x66\x67\x67\x9f\x66\
-\x77\x2c\xad\x9d\x4e\xee\x02\x44\x0a\xe4\x28\xdc\x7c\x09\xf4\xc1\
-\xcb\x48\x55\xa8\xee\xb6\x3b\xa6\x16\xe6\x62\xa0\xaf\x6f\x71\x85\
-\x16\x20\x22\x12\x29\x22\xb7\x00\x27\xf9\x0e\xad\x04\xae\xb1\x31\
-\xa4\xb0\x65\x9a\x66\x5b\xac\x05\x2d\xcf\xda\x1d\x4b\xa0\xb9\xdd\
-\xee\xb1\x39\x39\x39\x91\x76\xc7\x61\x37\x8f\xc7\xa3\xb7\x1c\x6b\
-\xa2\xce\x9d\x3b\xd3\xb9\x73\xe7\x98\xd1\xa3\x47\xe7\xda\x1d\x4b\
-\x6b\xa6\x93\xbb\x00\x90\x7c\xb9\x1c\xc5\x72\xe0\x1b\xca\x18\xa4\
-\x16\xaa\x4f\xec\x8e\xa9\xa5\x51\xf3\xd5\x1a\xe0\x16\xbd\xb8\x22\
-\x70\x44\x24\x07\xf8\x12\xb8\xc2\x77\xa8\x02\x38\x57\x29\xb5\xd7\
-\xbe\xa8\xc2\xda\x70\xdf\xbf\xcf\xd9\x1a\x45\x80\x89\x48\xbb\x8a\
-\x8a\x8a\x23\xc2\x7d\xbe\xdd\xae\x5d\xbb\xd8\xb9\x73\xa7\x4e\xee\
-\x9a\x68\xe0\xc0\x81\x94\x95\x95\xd1\xb1\x63\xc7\xba\xf6\xd9\xd1\
-\x02\x40\x27\x77\x4d\x20\xf3\xa4\xad\xe4\xc9\x7f\x81\x9b\x51\x5c\
-\xc7\x02\x8e\x6f\x95\x25\x4d\x02\x25\x8a\x1b\x81\xdf\xf1\x72\xb3\
-\xdd\xa1\x84\x32\x11\x49\x13\x91\x85\xc0\x87\x40\xa6\xef\x70\x11\
-\x70\xb2\x52\xea\xd3\xba\xcf\xd4\x82\xc9\x30\x8c\x57\x81\x0e\x86\
-\x61\x1c\xbc\x90\x25\xb4\x8d\x00\x18\x30\x60\x80\xdd\x71\xd8\xca\
-\xe3\xf1\xe0\x70\x38\x48\x4e\x4e\xb6\x3b\x94\x90\xe6\x74\x3a\xf9\
-\xf9\xe7\x9f\xf9\xf0\xc3\x0f\x75\x35\xec\x20\x0a\xdb\x05\x15\x22\
-\xd2\x0b\x6b\x7e\xcc\xe1\x49\x22\x95\x3e\x9c\x85\x83\x48\x7e\xe2\
-\x61\x36\xe2\x05\xe6\xe8\xb9\x18\x0d\x18\xc9\x3b\x8c\xe0\x6c\xc9\
-\x96\xdd\x7c\xcd\x2f\x76\x87\x13\x42\xe2\xb1\x0a\x14\xf7\x05\x06\
-\x43\xb5\x1d\x62\x9f\x06\xfe\xaa\x94\xda\x6a\x47\x60\xda\x01\x86\
-\x61\xfc\x6e\x77\x0c\x41\x90\x9b\x96\x96\xb6\x2f\x2e\x2e\x2e\xac\
-\x87\x65\x3d\x1e\x0f\x89\x89\x89\xb8\x5c\x61\xfb\xb6\x19\x30\x03\
-\x07\x0e\xe4\xae\xbb\xee\x4a\x15\x91\x1c\xfd\x07\x69\x70\x84\xf3\
-\x4f\x69\x3f\xa0\xf0\xb0\xcf\xde\xea\xfb\xb0\x5c\xd8\xf4\x70\xc2\
-\xc4\xbb\x40\x27\x60\x30\x33\xf8\x06\x1a\xd8\x6f\x57\xab\x5f\x31\
-\x70\xb1\x52\xea\x09\xbb\x03\xd1\x5a\x2f\xb7\xdb\x3d\x76\xe8\xd0\
-\xa1\x61\x9d\xd8\x81\x95\xdc\x75\xe9\xd2\xa5\xe1\x86\x5a\x83\x8e\
-\x38\xe2\x08\x3a\x76\xec\x58\xee\xf1\x78\xce\x04\x74\x72\x17\x04\
-\x7a\x58\x56\x6b\x7e\xaf\x02\x89\x58\xfd\x4f\xda\xa1\x2a\x05\xfe\
-\x0b\x9c\x03\x64\xe8\xc4\xae\x65\x30\x4d\xf3\x28\xd3\x34\xe3\xed\
-\x8e\x23\xd0\x44\x24\xb6\xa2\xa2\x22\x3b\xdc\xe7\xdb\x01\x64\x64\
-\x64\xd0\xa3\x47\x0f\xbb\xc3\x68\x35\x8e\x3b\xee\x38\xb7\xcb\xe5\
-\x9a\x2e\x7a\xb8\x2b\x28\xc2\xb9\xe7\xee\x2d\xa0\xf1\xbf\xb1\x06\
-\xd0\x8d\x01\xdc\x8c\x83\x14\x36\x70\x0d\xaf\xf3\x4e\xf0\x42\x6b\
-\xe5\xb6\x01\xbf\x33\x93\xb1\x4c\x63\x37\x27\xb2\x82\xd6\x36\x47\
-\x29\x18\x76\x02\x9b\x94\x52\xbb\xec\x0e\x44\xab\xce\x34\x4d\x17\
-\xd6\x6e\x20\x8b\x80\x85\x36\x87\x13\x68\x47\x29\xa5\x9c\xd9\xd9\
-\x7a\x7a\x54\xb8\xcf\x39\x0c\xb4\x51\xa3\x46\x91\x91\x91\x91\xf4\
-\xc8\x23\x8f\x8c\x04\xfd\x7e\x1a\x68\x61\x9b\xdc\x29\xa5\x7e\x07\
-\xbe\x6a\x4c\x5b\xc9\x93\xd3\x10\x1e\x04\x56\x01\xe3\xd5\x62\xf5\
-\x4b\x30\x63\x0b\x07\x32\x4f\x66\xb1\x97\x3f\x30\x95\x73\xd5\xf7\
-\xea\x1c\xbb\xe3\xd1\xb4\x26\x18\x0d\xb4\x07\xfe\x67\x73\x1c\xc1\
-\x90\xdb\xa9\x53\xa7\xb2\xf6\xed\xdb\x87\xfd\xb0\xac\x16\x58\xbd\
-\x7a\xf5\x62\xc7\x8e\x1d\x64\x65\x65\xcd\x44\x27\x77\x01\xa7\x87\
-\x65\xeb\x21\xf3\x24\x42\x0a\xe4\x4e\x84\x27\x81\x47\x89\xe2\x18\
-\x55\xa8\x13\xbb\x40\x50\xd7\xaa\xdd\x08\x97\x01\x67\x4b\x81\x8c\
-\xb4\x3b\x1e\x4d\x6b\x82\x93\x80\xef\x0c\xc3\xf8\xc1\xee\x40\x02\
-\xcd\xe5\x72\x1d\x9b\x93\x93\x13\xf6\xfb\xc9\x6a\x81\xe7\x74\x3a\
-\x29\x29\x29\x21\x2d\x2d\x6d\xac\xdd\xb1\xb4\x46\xcd\x9e\xdc\xc9\
-\x95\x92\x24\x57\x48\x68\x94\x39\x2f\x27\x15\xc5\x89\x28\xce\x50\
-\x85\x6a\xa6\xba\x56\xed\xb3\x3b\xa4\xd6\x44\xcd\x57\x4b\x80\xa5\
-\x28\xee\xd6\x3b\x57\x68\x21\x6c\x2d\x07\xb6\x7e\x6b\x35\x44\x24\
-\xc2\xeb\xf5\xe6\x0c\x1c\x38\x50\xcf\x89\xd2\x82\x22\x2a\x2a\x8a\
-\x94\x94\x94\xc4\x8c\x8c\x8c\x38\xbb\x63\x69\x6d\x44\xa9\xe0\x2f\
-\x57\x94\x7c\x39\x0b\xb8\x18\x45\x5f\x84\x76\xbe\xc3\x1b\x51\x3c\
-\x85\x97\x85\x6a\x91\xf2\x04\xf5\xfe\x05\x72\x2e\x5e\x52\x01\x58\
-\xc8\x42\x75\x08\x2f\x5a\xe6\x49\x84\x4e\xea\x82\x47\xf2\x25\x03\
-\xf8\x0e\xc5\x1c\xb5\x40\xdd\x61\x77\x3c\x9a\xa6\x59\x44\xe4\x18\
-\xe0\xdd\x25\x4b\x96\x84\x75\xe1\xde\x1d\x3b\x76\xb0\x7d\xfb\x76\
-\x3a\x77\xee\x6c\x77\x28\xad\x4e\x71\x71\x31\x27\x9c\x70\x02\x15\
-\x15\x15\x93\x94\x52\x4b\xed\x8e\xa7\x35\x09\x6a\xcf\x9d\xcc\x96\
-\x58\xc9\x93\x37\x81\xc7\x80\xe1\x7e\x89\x1d\x40\x27\x84\xcb\x70\
-\x30\x2c\x98\x31\x00\xa0\xb8\x04\xa1\x10\xa1\x90\x53\x0f\xed\x35\
-\xeb\xc4\x2e\xb8\x54\xa1\xfa\x11\x58\x84\x70\xbd\x5c\x25\xe1\xfb\
-\x0e\xa2\x69\x2d\x4f\x6e\x62\x62\x62\x59\x38\x27\x76\x00\x6b\xd7\
-\xae\xe5\xdd\x77\xdf\xb5\x3b\x8c\x56\x29\x31\x31\x91\xb4\xb4\xb4\
-\x72\x60\xbc\xdd\xb1\xb4\x36\xc1\x1d\x96\x75\x31\x1f\x61\x8c\xef\
-\xd1\x36\xac\x7a\x70\xbd\x80\x5e\xbe\xe1\xce\xb7\x6a\x3b\x4d\x66\
-\x88\x5b\x0a\xa4\xaf\x5c\x2d\x5d\x1b\x7b\x2b\x99\x23\x71\x52\x20\
-\x7d\x65\x9e\x34\x79\x91\x88\xcc\x93\x18\xc9\x93\x01\x35\xaf\x25\
-\x57\x48\xb4\xcc\x95\x2c\x99\x2d\x1d\x9a\x7a\x0f\xcd\x4f\x19\x85\
-\x40\x09\x4e\x16\xd9\x1d\x8a\xa6\x69\x16\xa7\xd3\x39\x26\x27\x27\
-\xc7\x6d\x77\x1c\x76\xd3\xfb\xc9\x06\xd7\x88\x11\x23\xdc\x11\x11\
-\x11\x53\xec\x8e\xa3\xb5\x09\xda\xb0\xac\x14\x48\x5f\x14\x2b\xb0\
-\x2a\xe9\x7b\x81\xe1\xaa\xf0\xe0\x4a\xd4\xfe\xc3\x9e\x92\x27\x69\
-\xc0\x6d\x08\x53\x39\xb0\x92\x77\x1b\x8a\x6b\x58\xc8\x3d\x55\xc3\
-\xa9\x92\x2f\xb3\x61\x7f\x22\x70\x21\xc2\x58\x14\xa7\x02\x4e\x84\
-\x12\xbc\x9c\xa9\x16\xa8\x65\x32\x57\xb2\xf0\xf2\x6d\x1d\x21\x6e\
-\x50\x85\xaa\xab\x14\xc8\x9f\x51\x3c\x08\x80\xe2\x32\x84\x23\x81\
-\xb3\x01\x37\x5e\xba\xaa\x85\x6a\x83\xe4\xcb\x40\xe0\x4e\xac\x6d\
-\x78\xaa\xe6\x9f\xac\x43\x31\x4b\x2d\x50\xad\x6a\x1f\x49\xbb\x48\
-\x81\x4c\x45\xf1\x1c\x42\xae\x9a\xaf\xf4\x9f\xc9\x5a\x8b\xe7\xab\
-\x6b\xb7\x08\xb8\xc9\x30\x8c\x5f\xed\x8e\x27\x90\x44\xc4\xe9\x74\
-\x3a\xb7\xcf\x99\x33\x27\x66\xea\xd4\xa9\x76\x87\x63\x1b\xa5\x14\
-\x8f\x3e\xfa\x28\x39\x39\x39\x64\x66\x66\x36\x7c\x82\x76\xc8\x3e\
-\xfd\xf4\x53\x6e\xb8\xe1\x06\x32\x32\x32\x8e\x78\xff\xfd\xf7\x57\
-\xda\x1d\x4f\x6b\x11\xbc\x9e\x3b\x2f\x43\x38\x90\x08\x2d\xab\x2d\
-\xb1\x83\x03\xc3\x9e\x52\x20\xc9\x08\x9f\x21\x9c\x8c\x95\xd8\x7d\
-\x0e\x6c\x04\x12\x10\xee\x26\x8f\xab\xeb\xb8\xd3\x6d\x28\xa6\x01\
-\x95\xd6\x05\x69\x8f\xf0\x4f\x99\x27\x51\x87\x1c\xb3\x90\x0f\x9c\
-\x0f\xec\xff\x6b\x55\xe6\x4a\x36\xf0\x31\x70\x0c\xd6\x7e\x0a\xef\
-\x01\xbf\x03\xdd\x10\x96\x48\xbe\x9c\x74\xc8\xf7\xd1\x0e\xa2\xe6\
-\xab\xe7\x81\x97\x50\xfc\x23\x50\x8b\x2b\x24\x5f\x2e\x92\xb9\x92\
-\x15\x88\x6b\x35\x95\x5c\x25\xbd\x24\x5f\x2e\x92\x4b\x45\x97\x94\
-\x68\x3d\x8e\x01\xfe\x02\x94\xd9\x1d\x48\x10\x0c\xac\xac\xac\x8c\
-\x09\xf7\xfa\x76\xdb\xb6\x6d\x63\xdf\xbe\x7d\xba\xe7\x2e\x88\x06\
-\x0c\x18\xc0\xd5\x57\x5f\x4d\xcf\x9e\x3d\x67\xdb\x1d\x4b\x6b\x12\
-\xbc\xe4\x4e\x38\xc2\xef\xd1\xaa\x06\xdb\x7b\xb9\x09\x48\xf6\x9d\
-\xfb\x17\x55\xa8\x86\x10\x45\x37\x84\x4f\x7c\x2d\xe6\xca\x5c\x49\
-\xad\xe5\xcc\xdd\x78\x19\xcf\x2e\xda\x02\xef\xfb\x8e\x75\x64\x37\
-\xd9\xea\x26\xf5\x9d\x2a\x54\x82\x95\x28\x5a\x7e\xc2\xa5\x0a\x95\
-\xa8\x42\x55\xdb\x90\x6f\x12\x8a\x45\x78\xe9\x8b\x83\x01\xc4\x50\
-\x82\x97\x7f\x50\x95\xec\x29\x46\xaa\x42\x35\x92\x28\xba\xc0\xfe\
-\xc2\xbb\x77\xe9\x0a\xdb\x01\x52\xc9\x2c\xa0\x17\xe9\x5c\x5c\xf3\
-\x29\xc9\x93\x63\x24\x5f\x3c\xbe\x8f\x4d\x92\x2f\xab\xa4\x40\x5e\
-\x95\x3c\x79\x50\xe6\xca\x41\x4b\xe9\x7d\xdf\x13\x13\xc5\xb1\xcd\
-\x11\xba\x5f\x9c\x53\x24\x4f\x0e\xae\xdb\x67\xcd\x2d\x35\x69\x43\
-\x9b\xe6\x8c\x47\x0b\xaa\x5c\x60\xa5\x61\x18\x45\x76\x07\x12\x04\
-\xb9\xf1\xf1\xf1\xfb\xd2\xd2\xd2\xec\x8e\xc3\x56\x1e\x8f\x87\xc8\
-\xc8\x48\x12\x12\x12\xec\x0e\xa5\xd5\x8a\x88\x88\xa0\xa4\xa4\x44\
-\xc5\xc7\xc7\x8f\x69\xb8\xb5\xd6\x58\xc1\x4c\xee\xca\xfd\x1e\x35\
-\x3c\x6f\x43\x18\xee\xfb\xcc\x0b\x0c\x90\x7c\xb9\x9d\xbd\xfc\xdd\
-\xaf\x45\x24\xaa\xd6\x0d\xab\x9e\x57\x0b\xd5\x6b\xea\x4e\x55\x06\
-\xbc\xe9\x77\xbd\xc3\xf9\xad\xf4\xb1\x5a\xa0\xe6\xa8\x85\x6a\xb5\
-\xba\x49\x7d\x03\xec\x03\x86\x00\xa0\x28\x45\x38\xcd\x17\xd7\x8d\
-\x08\xa5\xbe\x73\x3a\x93\x47\xb7\xc3\xb8\x97\x56\x83\x5a\xa4\x7e\
-\x42\xea\x58\x5c\x21\x44\x00\x29\x58\x5b\x6f\xe5\xa3\xb8\x03\x2f\
-\x5f\x23\x1c\x81\x97\xd7\x25\x5f\xde\x90\x3c\xd9\xbf\xfd\x93\x6f\
-\x08\xdf\x40\xfc\x7e\x26\x9a\x83\x83\x69\xc8\xc1\xc9\x29\x5e\x3e\
-\x06\x0c\x76\xb2\xb3\x59\xe3\xd1\x82\x29\x17\x58\x6e\x77\x10\xc1\
-\xe0\x70\x38\x46\x0f\x1e\x3c\x38\xec\xcb\x13\x79\x3c\x1e\x3a\x74\
-\xd0\x53\xac\x83\xcd\xe9\x74\x4a\xc7\x8e\x1d\xd3\x74\x47\x49\xe0\
-\x04\x6f\x87\x0a\x6b\xbe\x5d\x95\xc6\xec\xdb\x52\xd5\x2b\xe7\x40\
-\x31\xd3\xef\x3a\xfe\xd2\x6b\x39\xef\xfd\xfd\x9f\x29\x76\x73\xe0\
-\x47\xe3\x70\x5e\xdb\xab\xd5\x1e\xed\xa4\x3d\x2e\xac\x02\x9e\xd6\
-\x4a\xdf\x59\xf5\xc4\xf5\xcb\x61\xdc\x4f\xab\x29\x92\x42\xf6\x70\
-\x36\x4e\x6e\xc6\x9a\xfb\x58\xd3\xdb\xaa\x50\x3d\xed\x7f\x40\xf2\
-\x64\x1a\xc2\xe3\xc0\x2d\xc0\x05\x55\xc7\x55\xa1\xba\xb7\xbe\x5b\
-\xc9\x55\xd2\x0b\x17\xa5\x6a\xbe\xda\xb2\xff\xd8\x3c\x69\x4b\x19\
-\x5d\x28\xe6\x07\x75\x9f\x2a\xaf\xf3\xdc\x2b\x25\x89\x48\x3a\xe1\
-\x65\xbd\x2a\x54\xdb\x1a\x7a\x59\x6a\x91\xfa\x01\xa8\xb5\xc8\xad\
-\xcc\x96\x58\x22\xe8\xc1\x1e\x7e\x52\xb7\xaa\x3d\xf5\xc6\x5c\x20\
-\x89\x54\xd0\x8e\x9b\x59\x7b\x28\x25\x7d\xb4\xa0\x98\x0b\xad\x6f\
-\xeb\x3c\x11\x11\x97\xcb\x35\x6a\xd0\xa0\x41\x3a\xb9\xf3\x78\xe8\
-\xd7\xaf\x9f\xdd\x61\xb4\x7a\xdd\xba\x75\xe3\xe3\x8f\x3f\x76\x24\
-\x27\x27\x0f\x07\x3e\xb4\x3b\x9e\xd6\x20\x98\xab\x65\x3f\xc6\xea\
-\xf9\x02\x18\x29\x79\x32\xb9\x66\x03\x99\x27\x11\x72\x85\xb4\xf7\
-\x3d\x5c\xed\xfb\xb7\x12\xc5\x28\x84\xcc\x83\x3e\x14\x8f\x1e\x74\
-\x17\xc5\x81\x52\x25\xe2\x9b\x77\x77\xd0\x8d\xfc\x52\xb1\x7e\xd4\
-\xf7\x0b\xab\xda\x2f\x6a\x75\xb3\xda\x8c\xda\xdf\x43\xb7\x19\x45\
-\x56\xad\x71\x45\xf1\x51\x3d\xd7\xd4\x0e\x81\xba\x56\xed\xc5\x4a\
-\xa2\x4f\x95\x39\xd2\xa5\x51\xe7\x2c\x50\x4f\x00\x8b\x11\xfe\x2c\
-\x73\xa4\x0f\x58\x6f\x50\x92\x2f\x4a\x0a\xe4\xd2\xaa\x76\x52\x20\
-\xf7\x4a\xbe\xac\x94\x02\x99\x2a\xf9\xb2\x05\x27\x6b\x50\x5c\x02\
-\x20\x73\x24\x53\xf2\xe5\x7d\xf6\x52\x8a\xe2\x7b\xda\xb3\x43\xf2\
-\xe5\xc6\x83\x56\x4c\x17\xc8\x28\xc9\x97\x35\xb8\xd9\x82\x97\xaf\
-\x81\x62\xc9\x93\xff\x02\x48\xbe\xbc\x84\xe2\x4c\x20\x47\xf2\x45\
-\xf9\x3e\xde\x01\x90\x3c\x99\xee\x8b\x27\xd1\xef\x5a\xc9\x92\x27\
-\xcf\xe2\x62\x3b\x5e\xbe\x25\x92\x1d\x52\x20\xff\xf6\xef\x81\x94\
-\x3c\xe9\xe7\xbb\xce\x1f\xa5\x40\x5e\x45\xb1\x05\x27\x3f\x92\xc7\
-\x1a\xc9\x13\xfd\xae\x63\x23\xc3\x30\xde\x34\x0c\xe3\x6b\xbb\xe3\
-\x08\x82\xac\x8a\x8a\x8a\xb6\x03\x07\x36\x7e\xeb\xed\xd6\x68\xfb\
-\xf6\xed\xec\xde\xbd\x9b\x94\x94\x14\xbb\x43\x69\xf5\x7a\xf7\xee\
-\xcd\xe3\x8f\x3f\x5e\xbe\x65\xcb\x96\xd1\x76\xc7\xd2\x5a\x04\x2d\
-\xb9\xf3\x6d\xd3\x75\xdd\xfe\x03\xc2\xb3\x92\x2f\x8b\x24\x4f\x26\
-\x48\xbe\x8c\x97\x02\xb9\x8a\xbd\xac\x21\x82\xaa\xad\xa7\x5e\xf2\
-\xfd\xeb\x44\x38\x1f\x07\xbb\xd4\x7c\xb5\x8a\x72\xd6\x03\x19\x28\
-\xee\x68\x4c\x0f\x49\xed\xc1\xb0\x71\xff\xe7\x7b\x29\x90\xb9\x32\
-\x46\x0a\xa4\x6f\xa3\xce\x95\xfd\x71\x75\x40\x38\x05\xd8\xa2\xe6\
-\xab\x55\x44\xe2\xc1\xcb\x50\x14\x05\xea\x5a\xb5\xfb\xb0\xe2\xd2\
-\x6a\xa5\x16\xa8\x17\x70\xd2\x53\x2d\x54\x1b\x1a\x7d\x92\xf0\x2c\
-\x00\x4e\xfa\x37\xd0\xb2\x0b\x8a\x5b\x10\x6e\xc2\x49\x77\x5c\x2c\
-\x96\xd9\xd2\x01\x07\x1f\x01\xfb\x50\x9c\x84\x93\x2e\x28\xae\x03\
-\x2e\x67\x2f\x73\xf6\xdf\x62\xae\x0c\x42\xf1\x06\xb0\xca\x97\xd4\
-\xc7\xa2\x18\x48\xd5\xbe\x88\x15\x9c\x07\x3c\x07\x7c\x03\xf4\x00\
-\x7a\x50\xc9\x69\x75\xbf\x50\x9e\x46\x38\x1a\xc5\x54\x14\xed\x10\
-\x4e\x43\x71\x3c\x52\xcb\x1f\x31\x70\x37\x8a\x6f\xf0\xd2\x0f\x98\
-\x06\x44\x23\x98\x8d\xfb\xe2\x68\xda\x21\xc9\x8d\x89\x89\x29\x4f\
-\x4f\xaf\x6d\xa0\x24\x7c\x78\x3c\x1e\x9c\x4e\x27\xc9\xc9\xc9\x76\
-\x87\x12\x16\x8e\x3e\xfa\x68\x97\xdb\xed\x3e\xa8\x13\x48\x3b\x3c\
-\xc1\x1b\x96\x05\xf8\x89\x45\x64\xd0\x15\xc5\x0c\xac\x79\x77\xb3\
-\x11\xac\x15\x31\x35\x07\x94\x4a\xf8\x3b\xed\x39\x09\xc8\x01\xce\
-\xa5\x92\x73\x25\x5f\x8a\x71\x91\x78\x50\xdb\x43\xb7\x14\xa8\x5a\
-\xcf\x7f\x2d\x5e\xc0\x2a\xac\x5c\xdb\xb0\x5f\x75\x15\x5c\x81\x8b\
-\x31\x40\x27\xe0\x3a\x14\xd7\x48\x81\xfc\xee\x5b\x95\x0b\x54\x1b\
-\x7e\xd6\x02\x44\xdd\xa8\x7e\x3b\xa4\x13\x2a\xf9\x09\x07\xe0\xa5\
-\xa1\xa4\xbd\x0d\x70\x95\x9a\xaf\x9e\xad\x3a\x20\x79\x72\x1b\x10\
-\x83\x93\xe9\x7e\xf7\x5d\x20\xf9\x92\x09\xcc\x11\x91\xf9\x4a\x29\
-\x85\x97\x85\xc0\x3a\xa2\x38\xc5\xaf\xb8\xf5\xd7\xbe\x0f\xd4\xcd\
-\x6a\xb3\x14\xc8\x2e\x14\x65\x0d\xed\x41\x2c\x79\x72\x34\xc2\x28\
-\x14\x67\xab\x05\xaa\xea\x0f\x88\xff\x49\x81\xa4\xa1\xb8\x4d\xe6\
-\x4a\xb6\xba\x49\x7d\xe5\x77\xca\x27\xaa\x50\x5d\xe9\xfb\x7c\xa5\
-\xe4\xc9\x50\x84\x2b\x64\x9e\x44\xf9\x7a\x3b\x35\x2d\x20\x44\x64\
-\xd4\xc0\x81\x03\xc3\x7e\xfa\x53\x51\x51\x11\x49\x49\x49\x38\x9d\
-\x61\x3f\x3a\xdd\x2c\x86\x0f\x1f\x2e\x4b\x97\x2e\x1d\x26\x22\xb1\
-\x4a\xa9\x5d\x76\xc7\x13\xea\x82\x9a\xdc\xa9\xa7\x54\x25\xf0\x57\
-\x99\x23\xff\xc4\x81\x01\xf4\xc5\x2a\x62\xbc\x13\xf8\x09\xc5\xff\
-\x88\xb6\x0a\x19\xab\xfb\x54\xb9\xcc\x90\x11\x24\xf0\x57\x5f\x0f\
-\x59\x3a\x10\x09\x7c\x8f\xf0\x35\x5e\x0e\x6c\x4d\xa2\x58\x8f\xf8\
-\x26\x32\x3b\x29\x6a\xf0\x78\x14\xf7\xb3\x17\x2f\x30\x8e\xaa\x15\
-\xb9\x8a\xaa\x7a\x3a\x9b\x38\x30\x29\xfa\xa0\x84\x42\xdd\xac\x36\
-\xcb\x1c\xe9\x8b\x93\x3c\x60\x1c\x8a\x1e\x28\xbc\x58\x6f\xe8\x1f\
-\x03\xcf\xd6\x3c\x47\xb3\x81\xec\x9f\x1b\xd9\x50\x59\x8a\x72\xbc\
-\xbc\x5e\xe3\xdc\xe1\xc0\xcf\x54\x32\x45\xf2\xab\xbd\xa1\x55\x00\
-\x71\x5c\x45\x67\x60\x03\x30\x14\xc5\xc3\x01\xda\xb5\x64\xa0\xef\
-\x0e\xaf\x54\x3b\xaa\x78\x1e\xb8\x8d\x4a\x8e\x04\xfc\x93\xbb\xea\
-\x3f\x67\x0e\x3e\x44\x01\x15\xa4\x02\x3f\x07\x20\x1e\xad\x91\x4c\
-\xd3\x8c\x00\x3e\x01\xfe\x6a\x18\xc6\x07\x76\xc7\x13\x68\x4e\xa7\
-\x73\xcc\xe0\xc1\x83\x83\xfb\x87\x7f\x08\x18\x31\x62\x04\x7b\xf6\
-\xd4\x3b\x05\x56\x0b\xa0\x01\x03\x06\x90\x9b\x9b\xeb\x5a\xb7\x6e\
-\xdd\x44\xac\x85\x73\x5a\x13\x34\xcb\x7f\x60\xb5\x50\x7d\x02\xfb\
-\x4b\x9a\xd4\xdd\xce\x9a\xc0\x7e\x87\xef\xa3\xee\x76\xd6\x1c\xab\
-\x27\x1a\x7d\xfc\x5a\xe5\x05\xee\xf7\x7d\x54\x7f\x6e\xbe\x7a\x19\
-\x78\xb9\xde\xfb\x2d\x54\x3b\xb0\x26\x4f\xcf\xad\xaf\x9d\x66\x23\
-\x21\xc3\xf7\xef\xea\x06\x5a\xae\xf5\x7d\x3f\xfd\xa5\x01\x95\x08\
-\x27\xd6\xd2\x7e\x19\x0e\x22\x64\xb6\xc4\xe2\xa2\x2d\xb0\xa5\x96\
-\x36\x87\x4e\xb0\x26\xf2\xfc\x4a\xf5\xa9\x06\x5e\xb6\xe0\x00\x1c\
-\x24\xd5\x38\x63\x43\x8d\x76\x7b\x10\xa0\xa2\xde\x39\xa4\x5a\x70\
-\x0c\xc5\x5a\x24\x16\xd4\x3d\xb1\xed\x20\x22\xbd\x80\xa4\x70\xaf\
-\x6f\x07\xe0\x70\x38\x88\x8d\x8d\xb5\x3b\x8c\xb0\x91\x98\x98\xc8\
-\x29\xa7\x9c\xc2\x2b\xaf\xbc\x72\x32\x3a\xb9\x6b\xb2\xb0\xff\xeb\
-\x4c\x6b\x35\x2e\x00\xca\x71\xf0\x65\x03\xed\x6a\x1b\xe4\x5f\x8b\
-\xb0\x47\xcd\x57\x13\xeb\x3b\x51\xf2\xc5\x83\xe3\xb0\x4a\xec\xd4\
-\xe6\x17\x00\x7a\xd3\x09\x58\xbf\xff\xa8\x8b\x6e\x78\x01\x2f\x8d\
-\x9f\x6f\xa8\x35\xb7\xd1\xc0\x6f\x86\x61\xac\xb5\x3b\x90\x20\xc8\
-\x8d\x8c\x8c\xac\xe8\xdb\xb7\xaf\x7e\x6f\xd0\x9a\x95\xd3\xe9\xa4\
-\xb4\xb4\x94\x8e\x1d\x3b\x06\x7f\xbf\xf9\x30\x10\xdc\xbd\x65\x35\
-\x2d\xc8\x64\x9e\x44\x49\xbe\x5c\x07\x4c\x04\x16\xa8\x1b\xd5\xfa\
-\x06\x4e\xa9\xcd\x2b\x28\x46\xd5\xb6\xfa\xb4\xc6\xc4\xa3\x57\xf1\
-\x72\xba\x14\x48\xdd\x33\xac\x15\x25\x40\xf7\x06\xef\x28\x7c\x00\
-\x78\xa9\x64\x7a\xb5\xe3\x95\x9c\x07\x94\xfb\x15\xef\xd6\x5a\x9e\
-\x91\x54\x2d\xa2\x69\x7d\x72\xfb\xf7\xef\xaf\x1c\x0e\xfd\xd6\xa0\
-\x35\xbf\xca\xca\x4a\x3a\x77\xee\x1c\xde\x95\xb3\x03\x44\xff\x75\
-\xa6\x85\x16\xc5\x99\x92\x2f\x83\x81\x68\xac\x79\x99\x83\x81\x24\
-\xe0\x1e\xa2\xb8\xf1\xb0\xae\xb9\x8b\xbf\x13\xcb\x69\x08\x6f\x4b\
-\x9e\xdc\x82\x83\x6f\x50\xc4\x21\x64\x93\xc7\x70\xc0\xaa\x9c\xee\
-\x25\x1f\x07\x93\xf0\xf2\xb1\xe4\xcb\x22\x14\xeb\x10\xba\x01\xc3\
-\x54\xa1\x3a\xcf\x17\xdf\xfb\x08\x17\x4b\x81\xfc\x1b\xf8\x1c\xc5\
-\xfa\x9a\x75\xf9\x00\xd4\x7c\xb5\x4a\x0a\xe4\x01\x14\xd7\x4b\xbe\
-\x44\xa3\xf8\x14\xc8\x45\xb8\x1c\xc5\xcd\x6a\x41\xfd\x0b\x32\x34\
-\x5b\x9d\x04\xc4\x37\xd8\x2a\x04\xb9\xdd\xee\x71\x43\x86\x0c\x69\
-\xb8\xe8\xbc\xa6\x05\x41\xbb\x76\xed\x78\xf1\xc5\x17\xdd\x22\x92\
-\xa8\x94\x6a\x75\x35\x24\x9b\x93\xfe\xf3\x4c\x0b\x0d\x0e\x4a\x81\
-\xe5\x08\x09\xc0\x30\xac\xbd\x7d\x7f\x46\xb8\x15\x17\x7d\x54\xa1\
-\x9a\xe9\xbf\xd0\xc1\x57\xe0\x77\x39\xaa\xda\x22\x99\x35\xd4\x32\
-\xf7\x53\xdd\xa9\xca\x28\x63\x38\xf0\x00\x70\x2a\x8a\xc7\x80\x9b\
-\xb1\x12\xc7\x7f\xed\x6f\xb7\x50\x6d\xa4\x92\xfe\xc0\xdb\x58\xb5\
-\xf8\x1e\x07\x2e\x46\xf9\xcd\xf3\x5b\xc8\x93\xc0\x0c\x14\x6e\x14\
-\x53\xb0\xf6\x1f\x05\x45\x11\xb0\x9c\x48\xbf\x9d\x5b\x0a\x31\x80\
-\x02\xe0\x78\x1c\xfc\x13\x07\xa3\x81\x8b\xd5\x02\xb5\xbf\xfc\x0a\
-\xc2\x2e\xac\x05\x3f\xd5\xe7\xe6\x29\x8a\x81\xe5\x38\xd1\x33\xbe\
-\x9b\x99\x61\x18\xbb\x0d\xc3\xd8\x64\x77\x1c\x81\x26\x22\x5d\xcb\
-\xcb\xcb\x3b\x85\x7b\x7d\xbb\x8a\x8a\x0a\x5e\x7c\xf1\x45\xb6\x6d\
-\x3b\xbc\xca\x5b\xda\xe1\xeb\xdd\xbb\x37\xaf\xbd\xf6\x1a\xc0\x20\
-\xbb\x63\x09\x75\xa2\x8b\xdc\x6b\x9a\xa6\x69\x22\x72\x96\xcb\xe5\
-\xfa\xd7\x5b\x6f\xbd\xe5\x74\xbb\xc3\xb7\xf3\x6e\xe3\xc6\x8d\xbc\
-\xfc\xf2\xcb\x9c\x75\xd6\x59\x44\x47\x47\xdb\x1d\x4e\xd8\x99\x3c\
-\x79\xf2\xbe\xe2\xe2\xe2\x6b\x95\x52\x0b\xec\x8e\x25\x94\xe9\x9e\
-\x3b\x4d\xd3\xb4\x46\xf2\x95\x41\x69\xad\x72\x8f\x38\xe2\x88\xca\
-\x70\x4e\xec\xc0\x2a\x5e\xdc\xb6\x6d\x5b\x9d\xd8\xd9\x24\x2b\x2b\
-\xcb\xe5\x74\x3a\x87\xda\x1d\x47\xa8\xd3\xc9\x9d\xa6\x69\x5a\xe3\
-\xbd\x63\x9a\xe6\x0d\x76\x07\x11\x0c\xbe\xf9\x76\xad\x39\x79\x6d\
-\x14\x8f\xc7\x43\xc7\x8e\x1d\xed\x0e\x23\x6c\x0d\x1e\x3c\xd8\x71\
-\xe6\x99\x67\x4e\xb0\x3b\x8e\x50\xa7\x93\x3b\x4d\xd3\xb4\x46\x30\
-\x4d\x53\x80\x23\x80\x5f\xed\x8e\x25\xd0\x44\xa4\x43\x79\x79\x79\
-\x7a\xb8\xcf\xb7\xf3\x7a\xbd\x6c\xde\xbc\x59\xef\x27\x6b\xa3\x1e\
-\x3d\x7a\x30\x7c\xf8\xf0\x98\x51\xa3\x46\x75\xb5\x3b\x96\x50\xa6\
-\x93\x3b\x4d\xd3\xb4\xc6\xe9\x0a\xc4\x01\xdf\xdb\x1d\x48\x10\xe4\
-\x3a\x1c\x0e\x95\x95\x95\x65\x77\x1c\xb6\xda\xba\x75\x2b\x15\x15\
-\x15\x87\xdd\x73\xb7\x6e\x5d\x34\xff\xfb\x5f\x07\xbe\xfb\xae\x4d\
-\x80\x23\xab\xdd\xa6\x4d\x91\x4c\x9a\x34\x88\x4f\x3e\x69\x3d\x8b\
-\xb7\xd3\xd3\xd3\x11\x11\xda\xb4\x69\x73\x82\xdd\xb1\x84\x32\x9d\
-\xdc\x69\x9a\xa6\x35\x4e\x37\xa0\x8c\xd6\xb9\x9f\x74\x6e\xaf\x5e\
-\xbd\xf6\x85\xfb\x3c\xb3\xa2\xa2\x22\xa2\xa2\xa2\x88\x8f\x3f\xbc\
-\x64\xe9\x81\x07\x3a\xb3\x68\x51\x0f\x16\x2e\xec\x11\xe0\xc8\x6a\
-\xe7\xf5\x0a\x25\x25\x6e\xf6\xed\x6b\x3d\xfb\x00\x27\x26\x26\x52\
-\x51\x51\x41\x4c\x4c\xcc\x28\xbb\x63\x09\x65\x3a\xb9\xd3\x34\x4d\
-\x6b\x04\xc3\x30\xde\x05\x62\x0d\xc3\x28\xb5\x3b\x96\x40\x73\xbb\
-\xdd\xe3\x72\x72\x72\x22\xed\x8e\xc3\x6e\x1e\x8f\xe7\xb0\x87\x64\
-\xb7\x6f\x77\xb1\x7c\x79\x02\x39\x39\xdb\xf9\xe1\x87\x18\x56\xaf\
-\xd6\x5b\x97\x1d\xae\xcf\x3f\xff\x5c\x7d\xf6\xd9\x67\x6d\xed\x8e\
-\x23\x94\xe9\x22\xc6\x9a\xa6\x69\x8d\x64\x18\x46\xa5\xdd\x31\x04\
-\x9a\x88\xb4\x13\x91\xbe\x7a\x3f\x59\x2b\xb9\x3b\xdc\xaf\xc3\xb2\
-\x65\x89\x78\xbd\xc2\xff\xfd\xdf\x4f\x9c\x7d\x76\x16\x2f\xbe\x98\
-\x4c\x9f\x3e\xbb\xaa\xb5\xf9\xf2\xcb\xb6\x7c\xfb\x6d\x1b\xa6\x4f\
-\xdf\xc4\x8b\x2f\x26\xf1\xc5\x17\x6d\x69\xd3\xa6\x92\x29\x53\xb6\
-\x1c\xd4\x76\xdf\x3e\x07\x4f\x3d\x95\xc2\xaa\x55\xb1\x74\xed\xba\
-\x97\x09\x13\x8a\xd9\xba\xd5\xcd\xaa\x55\xb1\x4c\x9f\x5e\x7f\x99\
-\xc5\xbd\x7b\x1d\xbc\xf8\x62\x32\x2b\x57\xc6\xe2\x70\xc0\xa0\x41\
-\xdb\x99\x38\x71\x2b\x12\x22\x1d\x7c\x6d\xda\xb4\x91\x8d\x1b\x37\
-\x86\xf7\x1c\x81\x26\xd2\x3d\x77\x9a\xa6\x69\xe1\xed\x18\x80\x01\
-\x03\x06\xd8\x1d\x87\xad\xb6\x6d\xdb\x46\x59\x59\xd9\x61\xcf\xb7\
-\x7b\xe1\x85\x64\x8e\x3a\xea\x77\x92\x93\xf7\x31\x71\x62\x31\xcb\
-\x96\x25\x52\x5e\x5e\xfd\x2d\xf6\x8b\x2f\xe2\x58\xbc\xb8\x13\xd7\
-\x5e\xdb\x93\xfb\xef\xef\x02\xc0\xb2\x65\x49\x5c\x70\x41\x3f\x7e\
-\xf8\x21\x66\x7f\xbb\xf2\x72\x07\x17\x5d\x94\xc9\xdd\x77\xa7\xf1\
-\xfb\xef\x6e\x4a\x4a\xdc\x5c\x7e\x79\x1f\x1e\x7f\x3c\x95\xc7\x1e\
-\x4b\xad\x37\x8e\xdf\x7e\x8b\xe2\xec\xb3\xfb\x73\xe7\x9d\x69\xec\
-\xde\xed\x64\xeb\x56\x37\xd7\x5f\xdf\x93\x2b\xae\xe8\x83\xd7\x7b\
-\x58\x2f\xad\xd9\x65\x66\x66\xb2\x6f\xdf\xbe\x4e\x22\xd2\xde\xee\
-\x58\x42\x95\xee\xb9\xd3\x34\x4d\x6b\x80\x69\x9a\x0e\xac\x39\x77\
-\xbf\x18\x86\xd1\xda\x2a\xbf\xe7\x76\xef\xde\x7d\x5f\x5c\x5c\x5c\
-\x58\x0f\xcb\x7a\xbd\x5e\xd2\xd2\xd2\x48\x4c\x4c\x3c\xe4\x73\xd7\
-\xac\x89\x65\xcd\x9a\x58\xce\x3d\xf7\x07\x00\x26\x4d\xda\xc2\x13\
-\x4f\x74\xe4\x9d\x77\x12\x18\x3b\xb6\xfa\x2e\x5a\x7b\xf6\x38\x69\
-\xd3\xa6\x92\xe7\x9e\xfb\x0a\xa7\x53\xb1\x6b\x97\x93\x89\x13\x07\
-\xf1\xe4\x93\x1d\xb9\xfa\xea\xb5\x00\x3c\xf3\x4c\x07\x56\xad\x6a\
-\xc3\xbd\xf7\xae\x20\x3b\x7b\x07\x00\x6b\xd7\x46\x73\xf6\xd9\xfd\
-\x89\x8b\xab\xa8\x37\x96\x5b\x6e\xe9\xc6\x9e\x3d\x0e\x5e\x7e\xf9\
-\x0b\xda\xb4\xb1\x3a\x9a\xbf\xfc\x32\x0e\xc3\x38\x82\xa5\x4b\x93\
-\x99\x3c\x79\xcb\x21\xbf\xbe\xe6\xd6\xb7\x6f\xdf\xaa\x4f\x07\x03\
-\xaf\xd9\x18\x4a\xc8\xd2\x3d\x77\x9a\xa6\x69\x0d\xeb\x0d\xac\x05\
-\x5a\xdd\xd8\xa5\xdb\xed\x1e\xab\xe7\xdb\x59\x13\xf9\xc7\x8f\x1f\
-\x8f\xc3\x71\xe8\x6f\x8b\x2f\xbc\x90\x4c\x5c\x5c\x25\xb9\xb9\xd6\
-\x74\xcc\xde\xbd\x77\xd3\xab\xd7\x6e\x5e\x78\x21\xb9\xd6\xf6\x53\
-\xa7\x6e\xc6\xe9\xb4\xfe\x46\x88\x8d\xad\x24\x2b\x6b\x27\xeb\xd7\
-\x47\xed\x7f\xfe\x9d\x77\x12\x18\x34\x68\xfb\xfe\xc4\x0e\x20\x3d\
-\x7d\x0f\x43\x87\xfe\x5e\x6f\x1c\xdb\xb6\xb9\xf9\xe0\x83\x76\x9c\
-\x7c\xf2\xe6\xfd\x89\x1d\xc0\xc0\x81\x3b\xe8\xd6\x6d\x2f\x1f\x7d\
-\x14\x1a\xab\x6a\x63\x62\x62\xb8\xe4\x92\x4b\xd4\xf0\xe1\xc3\x27\
-\xd9\x1d\x4b\xa8\xd2\x3d\x77\x9a\xa6\x69\x0d\xcb\x02\x2a\x81\x95\
-\x76\x07\x12\x48\x22\x12\x2b\x22\x03\xc2\xbd\xbe\x5d\x53\x94\x97\
-\x3b\x58\xb6\x2c\x91\x63\x8e\xd9\xc6\xde\xbd\xc2\xde\xbd\x4e\x00\
-\xc6\x8c\x29\xe1\xc1\x07\xbb\xb0\x79\x73\x04\x1d\x3a\xec\xdf\xf6\
-\x9a\xe8\x68\x2f\x99\x99\xd5\xe7\xd7\x75\xee\x5c\xc6\xaa\x55\x07\
-\x16\x60\x6c\xda\x14\x45\x4e\xce\xc1\x89\x5c\x5a\xda\x5e\x56\xae\
-\xac\x7b\xa1\xc6\x2f\xbf\x58\xab\x9d\xff\xf3\x9f\x8e\x3c\xf3\x4c\
-\xf5\x85\x21\x3b\x77\x3a\x1b\xec\xf5\x6b\x29\x1c\x0e\x07\x3d\x7b\
-\xf6\x94\x8d\x1b\x37\xea\x1f\xcc\xc3\xa4\x93\x3b\x4d\xd3\xb4\x86\
-\xf5\x07\x7e\x34\x0c\x63\xaf\xdd\x81\x04\xd8\x51\x4a\x29\xa7\x5e\
-\x4c\x71\xf8\x96\x2f\x4f\x60\xfb\x76\x17\x4b\x97\x26\xb1\x74\x69\
-\xd2\x41\xcf\xbf\xfc\x72\x12\x7f\xfa\xd3\xc6\xfd\x8f\x1d\x8e\x86\
-\x47\xf5\x63\x63\x2b\xab\xf5\xe4\x55\xd9\xb5\xcb\x59\xef\x79\x55\
-\xd7\x9e\x31\x63\x03\x7d\xfb\xee\x3a\xe8\xf9\xe8\xe8\xd0\x59\x0f\
-\xb4\x73\xe7\x4e\xda\xb7\x6f\x9f\x6e\x77\x1c\xa1\x4a\x27\x77\x9a\
-\xa6\x69\x0d\x73\x00\xef\xd8\x1d\x44\x10\xe4\x76\xea\xd4\xa9\x2c\
-\x21\x21\x21\xec\x87\x65\x0f\xd7\x0b\x2f\x24\xd3\xb5\xeb\x5e\xf2\
-\xf3\x7f\x3e\xe8\xb9\xc5\x8b\x3b\xf3\xe2\x8b\xc9\xd5\x92\xbb\xc6\
-\xe8\xd1\x63\x37\x6f\xbf\xdd\x9e\x3d\x7b\x1c\x44\x47\x5b\xab\x20\
-\xbc\x5e\xf8\xea\xab\xb8\x7a\xcf\x4b\x4f\xdf\x83\xc3\x01\xa5\xa5\
-\x2e\xb2\xb2\x76\x1e\xd2\x3d\x5b\x9a\xca\xca\x4a\x12\x13\x13\x6b\
-\x1f\xd7\xd6\x1a\xa4\xe7\xdc\x69\x9a\xa6\x35\xc0\x30\x8c\x6b\x0c\
-\xc3\xf8\x8b\xdd\x71\x04\x9a\xcb\xe5\x3a\x76\xe8\xd0\xa1\x61\xbf\
-\x9f\x6c\x69\x69\x29\xff\xfd\x6f\x3b\x2e\xbd\xb4\x2f\x4b\xd0\xe7\
-\x65\xf3\x00\x00\x20\x00\x49\x44\x41\x54\x97\x26\xb1\x67\x4f\xe3\
-\xde\x1a\x3d\x9e\x08\x3e\xfd\x34\x9e\x09\x13\xb6\x32\x68\xd0\xf6\
-\x83\x3e\x4e\x3c\x71\x33\x1b\x36\x44\x35\x98\x94\xd5\x74\xd6\x59\
-\x9b\xa8\xa8\x10\xae\xbd\x36\x83\x35\x6b\x62\xd8\xbd\xdb\xc9\x5d\
-\x77\xa5\xb1\x75\x6b\xfd\xdf\xaa\xb8\xb8\x0a\x4e\x3e\xb9\x88\x7f\
-\xff\xbb\x13\x35\xcb\xc4\xfd\xf4\x53\x34\x2b\x56\x34\xcf\xce\x19\
-\x81\x50\x59\x59\xc9\xa3\x8f\x3e\xea\x14\x09\x95\x02\x2e\x2d\x8b\
-\xee\xb9\xd3\x34\x4d\x0b\x43\x22\x12\xe9\x70\x38\x72\x06\x0e\x1c\
-\x18\xf6\x6f\x9e\x6f\xbe\xf9\x26\x6e\x77\x37\x62\x62\xa6\x31\x7f\
-\x7e\x0f\x16\x2d\xea\xc1\xa8\x51\x25\x1c\x77\xdc\x56\x72\x72\xb6\
-\xd7\x39\x94\xfa\xd2\x4b\xc9\x78\xbd\x30\x71\x62\x71\xad\xcf\x1f\
-\x73\xcc\x36\x62\x62\x2a\x79\xe1\x85\xe4\x6a\x8b\x23\x1a\x92\x99\
-\xb9\x8b\x6b\xae\xf9\x89\x45\x8b\x7a\xf0\xce\x3b\x09\x38\x9d\x8a\
-\x31\x63\x4a\x38\xe1\x84\xcd\xbc\xf3\x4e\x42\xbd\xe7\xce\x9c\xb9\
-\x9e\x1d\x3b\x5c\x5c\x7c\x71\x26\x9d\x3a\x95\x91\x90\x50\xfe\xff\
-\xec\x9d\x77\x78\x94\x55\xf6\xc7\x3f\x67\x5a\x7a\x81\x10\x08\x84\
-\xa6\x74\x95\x2a\xd8\xb1\x60\x5f\x1b\x36\x5c\xd7\xb5\xb1\xa0\xc6\
-\xae\x6b\x61\x16\x5d\x44\x5d\xe3\xcf\xba\xba\x6a\x70\x2d\xa8\xd8\
-\x10\x7b\xc5\xb5\x01\x0a\x36\xaa\x14\x29\xd2\x21\x09\x24\x84\x90\
-\x90\x3a\x99\x39\xbf\x3f\xee\x4c\x32\x24\x93\x4a\x92\x21\xf0\x7e\
-\x9e\x67\x9e\xcc\x7b\xdf\xfb\xde\xf7\x4c\x08\x33\xdf\x39\xf7\x14\
-\x72\x72\x5c\xe4\xe4\xb8\xb8\xeb\xae\xf5\x1c\x72\x48\xdb\xf0\xe8\
-\xa5\xa4\xa4\xb0\x75\xeb\x56\x27\x90\x02\xd4\x5d\xd8\xcf\xa2\x06\
-\xa2\xba\xbf\x65\xf5\x5b\x58\x58\x58\x58\xd4\x87\x88\x8c\x04\xe6\
-\x7c\xf4\xd1\x47\x4d\xee\xca\xb0\x3f\x50\x5e\x5e\xce\xb4\x69\xd3\
-\x18\x35\x6a\x14\x07\x1d\x74\x10\x85\x85\x76\xbe\xf9\x26\x89\x99\
-\x33\x3b\xb0\x64\x49\x1c\x49\x49\x1e\x4e\x3b\x2d\x97\x2b\xaf\xcc\
-\x24\x21\x61\xcf\x84\x84\x3f\xfe\x88\xa6\xa4\xc4\xce\xc0\x81\xb5\
-\x0b\xb7\xd5\xab\xa3\xf1\x78\x6c\x1c\x7a\xe8\x6e\xb2\xb3\x23\xd8\
-\xb6\xcd\xc5\xe0\xc1\x7b\xce\xdf\xb8\x31\x92\xe2\x62\x7b\x8d\x44\
-\x0b\x8f\xc7\xc6\xfa\xf5\x91\x74\xee\x5c\x4e\x5c\x5c\x05\x77\xde\
-\xd9\x97\xa2\x22\x3b\xcf\x3d\xf7\xbb\xdf\x76\x1b\xcb\x96\xc5\xd2\
-\xab\x57\x71\x0d\xdb\xd6\xac\x89\x66\xed\xda\x68\x76\xed\x72\xd0\
-\xbe\xbd\x87\x41\x83\x0a\xe9\xd4\xa9\x9c\xb6\x42\x76\x76\x36\xa3\
-\x47\x8f\x06\x38\x4e\x55\xe7\x86\xdb\x9e\xb6\x86\xe5\xb9\xb3\xb0\
-\xb0\xb0\xa8\x83\x8c\x8c\x8c\x8e\x40\xb7\xb4\xb4\xb4\x05\xe1\xb6\
-\xa5\x99\x39\xbe\x43\x87\x0e\x65\x9d\x3a\x75\x3a\xa0\xe3\xed\xb6\
-\x6d\xdb\x86\xaa\x56\x16\x2f\x8e\x8b\xf3\x32\x7a\xf4\x76\x46\x8f\
-\xde\x4e\x76\x76\x04\x33\x67\x26\x31\x77\x6e\x3b\x1c\x8e\x9a\x8e\
-\x90\xde\xbd\x8b\xeb\x5d\xbf\x6f\xdf\xaa\x39\x29\x29\x65\xa4\xa4\
-\x94\xd5\x98\xd3\xa3\x47\xcd\x3c\x9d\xdc\x5c\x27\x1d\x3a\x78\x2a\
-\xaf\x5f\xba\x34\x96\x79\xf3\x12\xb9\xfe\xfa\xcd\x95\x73\x5c\x2e\
-\x1f\xc3\x86\x15\x84\xbc\x6f\x9f\x3e\xa6\x1c\x4b\x5b\xa5\x63\xc7\
-\x8e\xd8\xed\x76\x9f\xd7\xeb\x3d\x18\xb0\xc4\x5d\x23\xb1\xc4\x9d\
-\x85\x85\x85\x45\xdd\x9c\x0b\x3c\x02\xec\x57\xd5\xf2\xed\x76\xfb\
-\x49\x56\xbc\x9d\x11\x77\x09\x09\x09\x44\x45\x45\xd5\x38\x97\x92\
-\x52\xc6\x55\x57\x65\xee\x91\x10\xf1\xc1\x07\x1d\xe9\xd3\xa7\xb8\
-\xc5\x13\x16\xae\xbb\xee\x10\xe2\xe3\x2b\xe8\xd2\xa5\x8c\x5d\xbb\
-\x9c\x2c\x5c\x18\xc7\xd0\xa1\x85\x8c\x19\xb3\xad\x45\xef\xbb\xaf\
-\x60\xb3\xd9\xb8\xfe\xfa\xeb\xc9\xc9\xc9\xb9\x04\x98\x16\x6e\x7b\
-\xda\x1a\x96\xb8\xb3\xb0\xb0\xb0\xa8\x9b\x2e\x40\xe3\xd2\x1d\xf7\
-\x71\x44\xc4\x61\xb7\xdb\x8f\xb1\xe2\xed\xcc\xf6\x5f\x43\xb7\xa5\
-\x55\x61\xf6\xec\xf6\x3c\xf2\xc8\x41\x9c\x77\xde\x76\x6e\xb8\x61\
-\x73\x8b\xd5\x8e\x7b\xe0\x81\x3f\x58\xb4\x28\x9e\x9d\x3b\x9d\xf4\
-\xe9\x53\xcc\x98\x31\xd9\x1c\x77\xdc\xce\x36\xd3\x1f\xb6\x39\x68\
-\xd7\xae\x9d\x94\x97\x97\xf7\x0a\xb7\x1d\x6d\x11\x4b\xdc\x59\x58\
-\x58\x58\xd4\xcd\x7e\x27\xee\x80\xa1\x5e\xaf\x37\xea\x40\x2f\x5e\
-\xec\xf3\xf9\xc8\xc9\xc9\xa1\x6f\xdf\xbe\x0d\x9a\x2f\x02\xff\xfe\
-\xf7\x4a\xbe\xfc\xb2\x03\x4f\x3d\xd5\x9d\x59\xb3\xda\x71\xcf\x3d\
-\xeb\x38\xee\xb8\xfc\x66\xb7\x6d\xc0\x80\xa2\x1a\x31\x78\x07\x20\
-\x12\x19\x19\x79\xe0\x06\x84\xee\x05\x56\x29\x14\x0b\x0b\x0b\x8b\
-\xba\xc9\x06\x7e\x09\xb7\x11\xcd\xcc\xf1\x09\x09\x09\xe5\x5d\xbb\
-\x76\x0d\xb7\x1d\x61\x25\x37\x37\x17\xaf\xd7\x5b\x19\x6f\xd7\x50\
-\x4e\x3f\x3d\x97\x77\xde\x59\xc2\xb1\xc7\xe6\x73\xf7\xdd\x7d\xf9\
-\xfc\xf3\x9a\xc5\x8b\x2d\xf6\x1e\x97\xcb\x45\x74\x74\x74\xdb\xa9\
-\xdf\xb2\x0f\x61\x79\xee\x2c\x2c\x2c\x2c\xea\x20\x2d\x2d\xed\xbe\
-\x70\xdb\xd0\xdc\xd8\x6c\xb6\x13\x87\x0f\x1f\x7e\xc0\xbf\xff\x67\
-\x67\x67\x13\x1d\x1d\x4d\x7c\x7c\x7c\xfd\x93\xab\x11\x1b\xeb\xe5\
-\xde\x7b\xd7\x91\x9c\xec\xe1\x81\x07\x7a\xb1\x7b\xb7\x83\x31\x63\
-\xb2\x5b\xc0\xca\x03\x17\x97\xcb\xc5\x13\x4f\x3c\xe1\x48\x4f\x4f\
-\x8f\x50\xd5\x9a\x99\x28\x16\xb5\x72\xc0\xff\xe7\xb6\xb0\xb0\xb0\
-\x38\x90\x10\x11\x71\x38\x1c\xc7\x0f\x1b\x36\xac\xc1\x3b\x37\x25\
-\xde\x12\xb6\x97\x6c\x07\x20\xd1\x95\x48\x82\xab\x6d\x34\xa0\xaf\
-\x8f\xc6\xc4\xdb\xd5\xc6\x75\xd7\x99\xb8\xbb\x79\xf3\x12\xb8\xe8\
-\xa2\x6c\x6c\xd6\x7e\x58\xb3\x91\x9a\x9a\x4a\x5e\x5e\x9e\x00\x3d\
-\x81\x55\x61\x36\xa7\x4d\x61\x89\x3b\x0b\x0b\x0b\x8b\x46\x22\x93\
-\xc5\x45\x29\xaf\x05\x0d\xbd\xa7\xe9\x3a\xa3\xf2\xfc\x3f\xe4\x4f\
-\x28\x57\xf8\x0f\x5f\xd1\x74\x9d\xd9\xba\x16\xd6\xc9\x61\x15\x15\
-\x15\xf1\x8d\xe9\x27\xfb\xf3\xf6\x9f\x99\xf0\xf3\x04\x00\xae\x19\
-\x70\x0d\x63\xfb\x8d\x6d\x29\xdb\x5a\x95\x6d\xdb\xb6\x31\x6c\xd8\
-\xb0\xbd\x5e\xe7\xb2\xcb\xb2\xb8\xf4\xd2\xac\x4a\x61\xa7\xca\x01\
-\x95\xf8\xd0\x52\x74\xe9\xd2\x25\xf0\xf4\x60\x2c\x71\xd7\x28\x2c\
-\x71\x67\x61\x61\x61\x51\x0b\x19\x19\x19\x31\xc0\x08\xe0\xe7\xb4\
-\xb4\xb4\x92\xa0\x53\x0e\xe0\x92\xa0\xe3\x13\x64\xb2\x7c\xa6\x93\
-\x34\x50\x58\xac\x7f\xe5\x79\x65\x2e\xb0\x2f\x89\xbb\xe3\x63\x62\
-\x62\x3c\x07\x1f\x7c\xb0\x33\xdc\x86\x84\x9b\x33\xcf\x3c\x93\x98\
-\x98\x98\x66\x59\x2b\x20\xec\xde\x78\xa3\x33\xeb\xd6\x45\x71\xef\
-\xbd\xeb\x9a\x65\xdd\x03\x99\xa8\xa8\x28\xe2\xe2\xe2\x3c\x85\x85\
-\x85\x07\x87\xdb\x96\xb6\x86\xe5\x40\xb6\xb0\xb0\xb0\xa8\x9d\x43\
-\x80\xef\x80\x8e\xf5\xcc\x4b\xa1\x84\x9b\x5b\xc1\x9e\xbd\xc6\x66\
-\xb3\x9d\x30\x74\xe8\x50\xab\x65\x27\xd0\xa1\x43\x87\x90\xf5\xed\
-\xf6\x86\xbe\x7d\x8b\xf8\xe2\x8b\x0e\x7c\xfa\xa9\xd5\xf3\x7e\x6f\
-\x51\x55\xee\xba\xeb\x2e\xc7\xf1\xc7\x1f\x7f\x54\xb8\x6d\x69\x6b\
-\x58\x9e\x3b\x0b\x0b\x0b\x8b\xda\x09\xec\x0b\x35\x24\x52\xfe\x6e\
-\x99\x2c\x53\x74\x92\xd6\x59\x17\x43\xee\x92\x3e\xd8\xb9\x17\x18\
-\x8a\xd0\x05\x65\x3d\xf0\x23\xc2\xfd\xfa\x90\xe6\x54\xce\x9b\x20\
-\x4f\x22\x98\x5a\x25\xc2\xc5\x28\xf7\x01\xa7\x02\xab\x34\x5d\xcf\
-\x11\xb7\xbc\x82\x89\x45\xf2\xe0\xe3\x6a\x84\xa7\x10\x8e\x46\x58\
-\x06\xfc\x4b\x1f\xd2\xd9\xe2\x96\xeb\x11\xae\x46\xe9\x02\x7c\x87\
-\x70\x9b\xc3\xe6\x18\x75\xf8\xe1\x87\x3b\x7c\xea\xe3\x91\x25\x8f\
-\xb0\x7a\xd7\x6a\x72\x4a\x72\x28\xaa\x28\xa2\x7d\x44\x7b\xba\xc5\
-\x76\x63\xcc\xc1\x63\x38\xba\xd3\xd1\x0d\xfa\x05\x6d\xdc\xbd\x91\
-\x97\x57\xbd\xcc\xea\xfc\xd5\xe4\x95\xe5\xd1\x2d\xb6\x1b\x23\x53\
-\x46\x72\x59\xef\xcb\x70\xd8\x0e\xbc\x8f\x98\x11\x23\x0a\x18\x3b\
-\x76\x2b\x8f\x3f\xde\x93\x81\x03\x77\xd3\xa3\x47\x49\xfd\x17\x59\
-\x84\x44\x44\x88\x8d\x8d\x95\x76\xed\xda\x75\xa9\x7f\xb6\x45\x30\
-\x07\xde\xff\x3c\x0b\x0b\x0b\x8b\x86\xd3\x05\xd8\x99\x96\x96\x56\
-\x57\xa6\xde\x4a\x20\x0e\x21\x95\x52\xee\x02\xfe\x51\xdb\x44\x99\
-\x20\x67\x62\xe7\x43\xc0\x74\x86\x30\x1d\xad\xda\x03\x87\x03\x7f\
-\x91\xbb\xe4\x08\x7d\x44\xd7\x9a\xc9\x0c\x01\x4e\xf0\xcf\xfb\x10\
-\x38\xc6\xbf\x4c\xa0\xe6\xde\x11\xc0\x00\xc0\x8b\x30\x07\xe1\x20\
-\xff\xdc\xce\xc0\x11\xe2\x96\x37\x80\xeb\xa9\xea\x9a\x75\x19\xa5\
-\x74\xaf\xa8\xa8\x48\x1a\x3a\x74\x28\x8a\xf2\xe1\x86\x0f\x01\x70\
-\xd9\x5c\x28\xca\x96\xa2\x2d\x6c\x29\xda\xc2\x8f\xdb\x7e\x64\xf2\
-\xe1\x93\x39\xbd\xdb\xe9\x75\xfe\x72\xbe\xcb\xfc\x8e\x7b\xe7\xdf\
-\x4b\x85\xcf\x14\xf2\x75\xd8\x1c\x2c\xcb\x5b\xc6\xb2\xbc\x65\xcc\
-\xcd\x9e\xcb\x94\x91\x53\xb0\xc9\x81\xb7\x41\x34\x76\x6c\x26\x0b\
-\x16\x24\x30\x71\x62\x6f\x5e\x7e\x79\x39\x2e\x97\x2f\xdc\x26\xb5\
-\x59\xca\xca\xca\x88\x8d\x8d\xb5\x6a\xcd\x34\x92\x03\xef\x7f\x9d\
-\x85\x85\x85\x45\xc3\xd9\x01\x7c\x5a\xe7\x0c\xa5\x18\xb8\xdf\x7f\
-\x74\x8b\xdc\x25\x21\x8b\xa6\xc9\x64\x89\x46\x78\x01\x23\xec\x7c\
-\xc0\x3f\x10\x06\x00\xff\xf5\xaf\xd3\x1e\xbb\xff\x79\x4d\x0e\x07\
-\x5e\x07\xfe\x82\x30\xb5\xda\x39\x3b\x36\x76\xa0\x9c\xed\x17\x81\
-\x00\x09\xc0\xf5\x08\xff\x41\x39\x9b\x80\xe7\x31\x82\x91\xae\x44\
-\x57\x45\xdf\xbe\x7d\x11\x84\xdb\x06\xde\xc6\x27\x67\x7c\xc2\x9c\
-\x73\xe7\x30\xeb\x9c\x59\x3c\x77\xdc\x73\x95\x62\xec\xd5\x35\xaf\
-\xd6\xf9\xb2\x0b\xca\x0b\x78\x78\xf1\xc3\x54\xf8\x2a\x88\x73\xc6\
-\xf1\xd2\x09\x2f\xf1\xcd\x59\xdf\x70\x55\xdf\xab\x00\xf8\x2d\xef\
-\x37\xa6\xaf\x9d\x5e\xe7\x1a\xfb\x2b\x36\x9b\x32\x79\xf2\x1f\x6c\
-\xdf\xee\xe2\xa9\xa7\xba\x87\xdb\x9c\x36\x8d\xc7\xe3\x21\x36\x36\
-\x76\xbf\x6a\xfd\xd7\x1a\x58\x9e\x3b\x0b\x0b\x0b\x8b\x5a\x48\x4b\
-\x4b\x7b\x07\x78\xa7\xde\x89\x91\xbc\x4c\x29\x7f\x07\xfa\xe2\xe0\
-\x1e\xa0\x66\x34\x7d\x19\x83\x81\x54\x00\x84\x85\xfa\x90\xa6\x03\
-\xc8\x64\xb9\x89\x52\xfe\x0a\x44\x03\x27\xc9\x64\x89\x0e\x4a\xcc\
-\x30\x28\x0f\xea\xc3\xfa\x60\xad\xf7\x57\xee\xd4\x87\x75\x96\x4c\
-\x90\x18\x60\xb4\x7f\x74\x93\x3e\xa4\x37\x03\x88\x5b\xbe\x01\x2e\
-\x03\xe8\x33\xbc\x0f\x36\x7f\xf4\xff\xf9\x07\x9d\xcf\x9c\xac\x39\
-\x6c\xda\xbd\x89\x9d\x65\x3b\xa9\xd0\x0a\xe2\x9d\xf1\xe4\x97\xe7\
-\xb3\x79\xf7\x66\x54\x95\xda\x62\xf3\x96\xed\x5c\xc6\xae\xf2\x5d\
-\x00\x0c\x4a\x1a\x44\x6e\x69\x2e\xb9\xa5\xb9\xf4\x88\xeb\x81\x88\
-\xa0\xaa\xfc\x90\xfd\x03\x97\xf6\xbe\xb4\xde\x5f\x5f\x6b\xb3\x79\
-\xf3\x66\xb2\xb3\xb3\x19\x31\x62\x44\x8b\xdd\xa3\x63\xc7\x72\xee\
-\xb9\x67\x1d\x77\xdf\xdd\x97\x11\x23\x76\x71\xe2\x89\x3b\x5b\xec\
-\x5e\xfb\x33\xeb\xd6\xad\xe3\x83\x0f\x3e\xc8\x9d\x32\x65\x4a\xb8\
-\x4d\x69\x53\x58\xe2\xce\xc2\xc2\xc2\x62\x2f\xd1\x49\x5a\x21\x13\
-\xe4\x5e\x84\xe9\x28\xd7\x00\xcf\x87\x98\xd6\xbb\xea\x02\xe6\x05\
-\x5d\x5b\x2e\x6e\x59\x00\x8c\x04\x84\x72\x0e\x06\x96\xed\x71\xa5\
-\xf0\x45\x1d\xb7\xf7\x11\xe9\xef\xa0\x61\x63\x73\xd0\x36\xec\x8f\
-\x41\x73\x76\x05\x9e\xf4\x1b\xd0\xcf\x01\xb0\x69\xf7\x26\xae\xfb\
-\xfe\x3a\xf2\xca\xf2\x42\x2e\xea\xf1\x79\x28\xf5\x96\x12\xe5\x08\
-\x9d\x70\xb0\xa5\x68\x4b\xe5\xf3\xb9\xd9\x73\x99\x9b\x3d\xb7\xc6\
-\x9c\x8d\xbb\x37\xd6\x61\x76\xf8\xd8\xb8\x71\x23\x79\x79\xa1\x5f\
-\x77\x73\x72\xfc\xf1\x3b\xb9\xf0\xc2\x6d\xcc\x9c\xd9\xc1\x12\x77\
-\x4d\x24\x22\x22\x82\xe2\xe2\xe2\xfd\xa3\xb0\x62\x2b\x62\x89\x3b\
-\x0b\x0b\x0b\x8b\xe6\xe0\xff\x98\xc1\x04\xee\xc2\x6c\xa1\x8e\xaf\
-\x71\x5e\xc9\x0a\x3a\xea\x5f\xed\x6c\xbf\x5a\xe6\x19\x22\x59\x5b\
-\xc7\x9d\x2b\x2a\x3d\x7d\x5e\xbc\x41\xc1\x36\x95\x82\x0e\x41\x02\
-\xa2\x2f\xd0\x47\x75\xea\xaa\xa9\x95\xc2\xee\xca\xbe\x57\x72\x6e\
-\x8f\x73\x89\x77\xc5\x33\x76\xf6\x58\x36\xef\xde\x5c\xc7\xed\x0c\
-\x1d\xa3\xaa\x12\x88\x8f\xe9\x74\x0c\xc7\xa5\x1c\x57\x63\x4e\x84\
-\x3d\xa2\xde\x75\xc2\x41\x76\x76\x36\xdd\xbb\xb7\xce\x76\xe9\xed\
-\xb7\x6f\xb0\x0a\x1b\xef\x05\xf1\xf1\xf1\xa8\x6a\x62\xb8\xed\x68\
-\x6b\x58\x7f\x72\x16\x16\x16\x16\xb5\x90\x91\x91\x71\x46\x46\x46\
-\x46\xb7\x86\xcc\x55\x55\xa5\x2a\x99\xa2\xa6\xaa\xa9\xe0\x37\x20\
-\x90\x98\x71\x9c\xdc\x2d\xc3\x01\xc4\x2d\x97\x52\x55\x6a\x65\x9d\
-\x3e\xa4\x3b\xf6\xca\xe8\x7a\xe8\xd1\xa3\x07\x00\xdb\x4a\xb6\x55\
-\x8e\x9d\xd9\xed\x4c\x52\x63\x52\xd9\xb4\x7b\x53\x83\x84\x1d\xc0\
-\x80\xc4\x01\xd8\xc5\x0e\xc0\xba\xc2\x75\x9c\xd9\xed\x4c\x2e\x38\
-\xe8\x82\xca\x47\xb7\xd8\x6e\xb4\x8f\xd8\xf7\x42\xa5\xca\xca\xca\
-\xc8\xcf\xcf\x6f\x74\x3f\xd9\xa6\x12\x2c\xec\x54\x6b\x9f\x67\x11\
-\x9a\xb8\xb8\x38\xbc\x5e\x6f\x5c\xb8\xed\x68\x6b\x58\xe2\xce\xc2\
-\xc2\xc2\xa2\x76\xde\x07\x4e\x69\xe8\x64\x4d\xd7\xff\xa1\x7c\x17\
-\xf2\xdc\xa3\xba\x1d\xe1\x9f\xfe\xc3\x68\x6c\xfc\x2a\x6e\xd9\x0a\
-\xbc\x19\x34\x2d\xad\xe9\xa6\x36\x0c\x87\xc3\x6c\xd8\x1c\xd6\xfe\
-\xb0\xca\xb1\x1b\xe7\xde\xc8\x4d\x73\x6f\xe2\x9a\x39\xd7\x10\x69\
-\x8f\x6c\xd0\x3a\x9d\xa2\x3a\x71\x45\x5f\xd3\x84\x23\xbb\x38\x9b\
-\xd3\x3f\x3f\x9d\x5b\x7f\xbc\x95\x5b\xe6\xdd\xc2\x79\x5f\x9e\xc7\
-\x4d\x73\x6f\xe2\xf7\xfc\xdf\x9b\xff\x05\xec\x25\xd9\xd9\x26\xb7\
-\x64\x6f\xdb\x8e\x35\x06\x55\xb8\xf9\xe6\xfe\xbc\xf7\xde\xde\xdf\
-\x33\x3f\xdf\xc9\xc6\x8d\x51\x7b\x3c\xb6\x6d\x73\xe1\xf1\xec\x9f\
-\x75\x0b\x13\x12\x12\x78\xf0\xc1\x07\x1d\xe7\x9e\x7b\xae\x95\x31\
-\xdb\x08\xac\x6d\x59\x0b\x0b\x0b\x8b\xda\x89\x04\x4a\x1b\x75\x85\
-\x32\x01\xe1\xe7\x90\xe7\xd2\x79\x94\x09\xe4\x02\xe9\x18\x6f\x5d\
-\xa0\x7e\xd7\x6a\xe0\x26\x4d\xd7\xff\x35\xdd\xd4\xc6\x71\x75\xbf\
-\xab\x59\xb3\x6b\x0d\x3f\x6e\xfb\x91\xdc\xd2\x5c\x76\x7b\x76\x73\
-\xe7\xe0\x3b\xf9\x7c\xd3\xe7\xfc\x96\xf7\x5b\x83\xd6\x18\xdf\x7f\
-\x3c\xc9\x91\xc9\xbc\xb8\xf2\x45\xf2\xca\xf2\xf8\x69\xdb\x4f\x00\
-\xd8\xc5\xce\xd0\xa4\xa1\x0c\x6c\x3f\xb0\x25\x5f\x42\x93\xd8\xb6\
-\x6d\x1b\xed\xda\xb5\x23\x22\xa2\xf5\xb6\x8c\x45\xa0\x6b\xd7\x32\
-\x5e\x7f\xbd\x33\xe7\x9f\xbf\x1d\xbb\xbd\xe9\x2e\xbc\x37\xde\x48\
-\x61\xda\xb4\xd0\x65\xdf\x0e\x3b\x6c\x37\xd7\x5d\xb7\x99\xe1\xc3\
-\x0b\x9a\xbc\xfe\xbe\x46\x74\x74\x34\x0e\x87\x83\xdd\xbb\x77\xa7\
-\x00\xb9\xe1\xb6\xa7\xad\x20\x6a\xf9\x89\x2d\x2c\x2c\x2c\x6a\x90\
-\x91\x91\xe1\xc2\x6c\xa3\x5e\x90\x96\x96\xf6\x41\x73\xaf\x2f\x13\
-\xa5\x13\xd0\x09\x1f\x9b\x35\x5d\x5b\x34\xda\x5e\x44\x3a\x01\xd9\
-\xff\xf9\xcf\x7f\x6a\x64\x88\xe6\x96\xe6\x52\x54\x51\x44\xb7\x98\
-\x6e\x7b\x55\x93\x2e\xbf\x2c\x9f\xed\xa5\xdb\x89\x73\xc6\xd1\x21\
-\xb2\x03\x4e\xdb\xbe\xd9\xdd\xec\xe3\x8f\x3f\x26\x29\x29\x89\x63\
-\x8f\x3d\xb6\x55\xef\xbb\x75\x6b\x04\x17\x5f\x3c\x98\x7b\xef\x5d\
-\xc7\x99\x67\x36\x5d\xa3\x3c\xfb\x6c\xb7\x5a\xc5\x1d\x40\x64\xa4\
-\x8f\xd7\x5f\x5f\x4a\xd7\xae\x8d\xfb\x4e\xb2\xaf\xb2\x7e\xfd\x7a\
-\x76\xee\xdc\xc9\x5b\x6f\xbd\x75\xf2\x9c\x39\x73\xbe\x0d\xb7\x3d\
-\x6d\x05\xcb\x73\x67\x61\x61\x61\x11\x1a\x3b\xa6\xc6\xdd\x96\xfa\
-\x26\x36\x05\xfd\x97\x6e\x03\xb6\xd5\x3b\xb1\x79\x18\x69\xb7\xdb\
-\x7d\x03\x07\x0e\xac\xa1\xde\x3a\x44\x76\xa0\x03\x7b\xbf\xe3\x95\
-\x18\x91\x48\x62\xc4\xbe\x11\xf7\x9e\x59\x9c\xc9\xca\xfc\x95\xac\
-\xcc\x5f\xc9\xfa\x82\xf5\x74\x8b\xed\x46\xff\xc4\xfe\xf4\x8b\xeb\
-\x47\x6e\x6e\x2e\x87\x1e\x7a\x68\xab\xdb\x94\x9a\x5a\xc6\xa9\xa7\
-\xe6\x31\x6d\x5a\x97\xbd\x12\x77\xc1\x5c\x77\xdd\x16\xfe\xfc\xe7\
-\x2c\xd6\xac\x89\xe6\x9f\xff\xec\x4d\x56\x56\x04\xa5\xa5\x36\x7e\
-\xfe\x39\xa1\x52\xdc\xa9\x42\x66\x66\x24\x6b\xd6\x44\x91\x97\xe7\
-\xa4\xbc\xdc\x46\x72\x72\x39\xbd\x7b\x17\xd3\xa3\x87\x99\x53\x5e\
-\x6e\x63\xd9\xb2\x58\x00\x12\x13\x3d\x1c\x7c\x70\x55\x57\x0d\xaf\
-\x57\x58\xb2\xc4\x84\xbc\xc5\xc5\x55\xd0\xa7\x4f\x55\x95\x9e\xdc\
-\x5c\x27\x2b\x57\xc6\x92\x95\x15\x41\x87\x0e\xe5\xf4\xe9\x53\x5c\
-\x43\x54\x6e\xd9\x12\xc9\xf6\xed\xa6\x66\x77\xdf\xbe\x45\xa8\xc2\
-\xc2\x85\xf1\xe4\xe7\x3b\x19\x3c\xb8\x90\x9e\x3d\xeb\xee\xe0\x11\
-\x1b\x1b\xcb\xce\x9d\x3b\x51\xd5\xfa\x5a\x00\x5a\x04\x61\x89\x3b\
-\x0b\x0b\x0b\x8b\x10\xa4\xa5\xa5\x95\x00\xe7\x84\xdb\x8e\x66\xe2\
-\xf8\x3e\x7d\xfa\x78\x22\x23\x23\x5b\x7c\x2f\x72\xc6\xba\x19\xcc\
-\xdc\x3c\x93\x53\xba\x9e\xc2\x49\x9d\x4f\x22\x25\xba\x75\x12\x17\
-\xd6\x15\xae\xe3\x99\x65\xcf\xb0\x6c\xe7\x32\x0a\xca\x43\x6f\x4b\
-\xa6\x78\x52\x38\xdb\x77\x36\xcf\x6e\x7e\x96\xbf\xb5\xff\x1b\x87\
-\xb6\x6b\x5d\x91\x77\xd1\x45\xd9\x8c\x1f\x7f\x28\x1b\x36\x44\xd5\
-\x2b\x6a\x1a\x82\xdd\xae\x44\x46\xfa\x18\x38\x70\x37\x47\x1f\xbd\
-\x8b\xf7\xdf\x37\xfa\xc7\xe1\xa8\xda\x91\x5b\xb1\x22\x96\xbf\xfd\
-\x2d\xf4\xeb\x1c\x35\x2a\x8f\x07\x1e\xf8\x03\xa7\xd3\x47\x7a\xfa\
-\x41\x6c\xde\x1c\x49\xfb\xf6\x1e\x3e\xfe\x78\x51\xe5\x1a\xf3\xe7\
-\xc7\x73\xcb\x2d\x26\xb9\x7b\xdc\xb8\x2d\xf4\xe9\x53\x8c\xcf\x07\
-\xff\xfd\x6f\x57\xde\x78\xa3\x33\x1e\x4f\xd5\xf7\x05\x11\x38\xfb\
-\xec\x1c\x6e\xbf\x7d\x23\x51\x51\x5e\x00\xa6\x4f\x4f\x61\xc6\x0c\
-\x13\x6b\x78\xe3\x8d\x9b\x78\xf3\xcd\xce\xe4\xe5\x39\x2b\xed\xbf\
-\xe7\x9e\xba\x3d\x99\xed\xdb\xb7\xe7\x8a\x2b\xae\xa0\xa8\xa8\x68\
-\xff\x70\x45\xb6\x12\x56\x42\x85\x85\x85\x85\xc5\x7e\x8e\xd3\xe9\
-\x3c\x65\xc4\x88\x11\xad\x12\x64\xd6\x27\xa1\x0f\x5d\x63\xbb\xf2\
-\xc2\xef\x2f\x70\xfe\x57\xe7\x33\x6e\xce\x38\xde\x5a\xfb\x16\xd9\
-\xc5\x0d\x69\xcf\xdb\x78\x7c\xea\xe3\xb5\xd5\xaf\x71\xe5\x77\x57\
-\x32\x6f\xdb\xbc\x1a\xc2\x4e\xa8\x4a\x34\x48\xf1\xa4\x50\x68\x2f\
-\x64\x5e\xfe\x3c\xc6\xcf\x19\xcf\xb3\xcb\x9f\xc5\xe3\xf3\xb4\x88\
-\x5d\xa1\x38\xf4\xd0\x22\xa2\xa3\xbd\x2c\x58\x10\xdf\x6c\x6b\xfa\
-\x7c\xb0\x7a\x75\x0c\x3f\xff\x5c\x55\x0a\xee\x98\x63\xf6\x6c\x6f\
-\xdc\xb5\x6b\x29\x63\xc6\x64\x73\xf3\xcd\x9b\xb8\xf2\xca\xcc\x4a\
-\xef\xdb\xb7\xdf\xb6\x67\xfa\xf4\x14\x44\x60\xcc\x18\xe3\x44\xce\
-\xcb\x73\xf2\xc3\x0f\xed\x2a\xaf\xfd\xfa\xeb\x24\xc0\x64\xfd\x9e\
-\x7d\xb6\x11\x61\x6f\xbf\xdd\x99\x57\x5e\x49\xc5\xe3\xb1\x11\x11\
-\xe1\xe3\xd4\x53\x77\x10\x17\x57\x81\x2a\x7c\xf2\x49\x72\xad\x5d\
-\x39\x9e\x79\xa6\x3b\x3e\x9f\x89\x0d\x04\xe3\x15\x7c\xfa\xe9\xee\
-\x78\xbd\xb5\x27\x83\xd8\xed\x76\x4a\x4a\x4a\x2a\xca\xcb\xcb\xad\
-\x5a\x77\x8d\xc0\xf2\xdc\x59\x58\x58\x58\xec\xc7\x88\x48\x3b\x11\
-\xe9\x3f\x74\xe8\xd0\x56\xb9\xdf\x90\xa4\x21\x0c\x49\x1a\x42\xb9\
-\xaf\x9c\x1f\xb7\xfd\xc8\xb7\x99\xdf\xf2\xc2\xef\x2f\xf0\xf4\xb2\
-\xa7\x39\x24\xf1\x90\x66\xf5\xe8\x6d\x2c\xdc\xc8\xfd\x0b\xef\x67\
-\xf9\xce\xe5\x95\x63\x7d\x13\xfa\x32\x38\x69\x30\xfd\x13\xfb\xd3\
-\x3f\xb1\x3f\x3d\x62\x7b\xb0\xb5\x68\x2b\x2b\xf3\x57\xb2\x6e\xf9\
-\x3a\x76\xec\x36\x95\x66\x7c\xea\x63\xda\x9a\x69\xfc\x90\xfd\x03\
-\xff\x3c\xfc\x9f\x0c\x48\x1c\xb0\xd7\xf6\xd4\x87\xcd\xa6\x0c\x1e\
-\x5c\xc8\xfc\xf9\xf1\x5c\x78\xe1\xde\xef\xc8\x3f\xfb\x6c\x37\x9e\
-\x7d\xb6\xaa\x52\x4f\xe7\xce\x65\xb8\xdd\xeb\x49\x4e\x2e\xaf\x1c\
-\xeb\xdf\xbf\x88\x77\xdf\x5d\x02\x18\x31\x55\x50\xe0\xe0\xa4\x93\
-\xf2\x18\x3b\xf6\x30\x7c\x3e\xe3\x99\xfb\xcb\x5f\xb2\x38\xeb\xac\
-\x1c\x32\x32\xba\x52\x5c\x6c\xe7\xc3\x0f\x93\x39\xf1\xc4\x3c\x2a\
-\x2a\x84\xd9\xb3\x8d\xd0\x1b\x3e\x7c\x17\x29\x29\x65\xf8\x7c\xf0\
-\xc2\x0b\xa9\x95\xeb\xbf\xf9\xe6\x52\x52\x53\x4b\x29\x2e\xb6\x73\
-\xde\x79\x43\x29\x2c\xb4\xf3\xe1\x87\x1d\x19\x3b\x76\x2b\x1d\x3b\
-\x56\xd9\x01\x30\x74\x68\x01\x4f\x3c\xb1\x8a\xa8\x28\x1f\xd7\x5e\
-\x7b\x08\x4b\x96\xc4\xb1\x73\xa7\x93\xec\xec\x08\x52\x53\x6b\x77\
-\xcc\xc5\xc6\xc6\x7a\x4b\x4b\x4b\xdb\xd5\x3a\xc1\xa2\x06\x96\xb8\
-\xb3\xb0\xb0\xb0\x08\x41\x46\x46\x46\x02\x70\x1c\xf0\x4d\x5a\x5a\
-\x5a\x5b\xde\x12\x3a\x0e\x60\xd0\xa0\x41\xad\x7a\x53\x97\xcd\xc5\
-\x09\x9d\x4f\xe0\x84\xce\x27\xb4\x88\xd0\x5b\x5b\xb0\x96\xb1\xb3\
-\xc7\x52\xe6\x35\xa5\x03\xa3\xec\x51\xdc\x78\xd8\x8d\x5c\x70\xd0\
-\x05\x7b\x78\xeb\x00\x7a\xc4\xf5\xa0\x47\x5c\x0f\xf0\xeb\xa0\x11\
-\x5b\x46\xf0\xd8\x92\xc7\x28\xf4\x14\xb2\xbe\x70\x3d\xe3\x66\x8f\
-\x63\xca\xc8\x29\xad\x92\xdd\x7b\xd2\x49\x79\xfc\xf1\x47\x74\x8b\
-\xac\x1d\x17\xe7\x25\x31\x71\x4f\x4f\xa4\xc7\x23\x3c\xf7\x5c\x37\
-\xbe\xfa\x2a\x89\x9c\x1c\x57\x8d\x5a\x7b\xd9\xd9\xc6\xa1\x1b\x1d\
-\xed\xe5\xec\xb3\x73\x78\xe7\x9d\x14\x7e\xf9\x25\x91\xec\xec\x08\
-\xd6\xaf\x8f\xa2\xa0\xc0\xc8\x84\x73\xcf\xcd\x01\x20\x2b\x2b\x82\
-\x92\x12\x53\xdf\xf0\xa0\x83\x4a\x2a\x45\x59\x74\xb4\x97\xc3\x0f\
-\x2f\x60\xd6\x2c\xa3\xc1\xd6\xad\x8b\xae\x21\xee\x46\x8d\xca\x23\
-\x2a\xca\x07\x40\xf7\xee\xa5\x95\xb1\x7c\x3b\x76\x38\xeb\x14\x77\
-\xf1\xf1\xf1\xe4\xe6\xe6\x5a\xe2\xae\x11\x58\xe2\xce\xc2\xc2\xc2\
-\x22\x34\x03\x30\x09\x15\x5d\x20\x44\xd7\x88\xb6\xc3\xf1\x07\x1d\
-\x74\x50\x79\x6c\x6c\x6c\xd8\xda\x45\x34\xb7\xd0\xf3\xaa\x97\xfb\
-\x17\xde\x5f\x29\xec\x06\x25\x0d\x62\xd2\xb0\x49\xa4\xc6\xa4\xd6\
-\x73\xa5\xe1\xf4\xae\xa7\x73\x78\x87\xc3\x79\x68\xd1\x43\xcc\xdb\
-\x36\x0f\xaf\x7a\x79\x60\xe1\x03\x4c\x3b\x69\x5a\x8b\x77\xd5\x08\
-\x88\xa4\xe6\xe0\xea\xab\xb7\x72\xc6\x19\xb9\x7c\xf2\x49\x47\x5e\
-\x7f\xbd\x33\xab\x57\x47\x33\x61\x42\x5f\xde\x78\xe3\xb7\x4a\x11\
-\x95\x9e\x7e\x10\x5f\x7e\x69\x12\x66\x7a\xf6\x2c\x61\xf0\xe0\x42\
-\x22\x23\x7d\xcc\x98\xd1\x09\x9f\x4f\xf6\xd8\x12\xbd\xf8\xe2\x6d\
-\xcc\x98\x91\x82\xcf\x67\xb6\x57\xb3\xb3\x4d\x22\x44\x7c\x7c\x05\
-\x27\x9c\x60\x12\xba\x4b\x4b\xab\xa2\xb9\xe2\xe2\x2a\xf6\xb0\x27\
-\x36\xb6\xea\x38\x78\x5e\x80\xe0\x64\x8c\x88\x08\x5f\xe5\xf3\xba\
-\x8a\x76\xa8\x2a\x69\x69\x69\xae\xcf\x3e\xfb\x6c\x70\xbd\xbf\x10\
-\x8b\x4a\x0e\xb8\x98\x3b\x11\x69\x2f\x22\xfd\xfd\x8f\xe6\x0b\x7c\
-\xb0\xb0\xb0\xd8\xdf\x08\xb8\x57\xda\xb2\xd7\x0e\xa7\xd3\x79\x72\
-\x6b\xc5\xdb\x35\x84\x80\xd0\x9b\x7c\xf8\x64\x66\xfe\x69\x26\x0f\
-\x1f\xf1\xf0\x1e\x31\x7a\x7f\x9b\xfd\xb7\x7a\x63\xf4\x5e\x5d\xfd\
-\x2a\xab\xf2\x57\x01\x30\xac\xc3\x30\xa6\x1c\x37\xa5\xc1\xc2\x2e\
-\x40\x87\xc8\x0e\x3c\x71\xf4\x13\x9c\x9c\x7a\x32\x60\x7a\xed\x3e\
-\xb3\xfc\x99\xa6\xbf\xb0\x30\x10\x1d\xed\xa3\x47\x8f\x52\x6e\xbc\
-\x71\x13\x47\x1f\x6d\xe2\xec\x32\x33\x23\x78\xf5\xd5\xaa\xdf\xc5\
-\x4f\x3f\x99\x0c\xe6\xb8\x38\x2f\xaf\xbe\xba\x0c\xb7\x7b\x3d\x7f\
-\xfa\x53\x2e\x3e\x5f\xcd\x38\xb7\x6e\xdd\x4a\x2b\xd7\xf9\xf8\xe3\
-\x64\xe6\xcc\x31\x1d\x46\x4e\x3f\x3d\x17\xa7\x33\xe0\x71\x2b\xc3\
-\x66\x33\x6a\x6c\xc5\x8a\x58\x4a\x4a\xaa\x64\x44\x70\x2c\x61\x8f\
-\x1e\x35\x13\x46\x44\x42\x3f\xaf\x0b\x11\x21\x3a\x3a\x5a\xa2\xa3\
-\xa3\x1b\x56\x5d\xdb\x02\x00\x87\x88\x5c\x03\x8c\xaa\x63\xce\xfb\
-\xaa\xfa\x4e\x6b\x19\xd4\x0a\x8c\x05\x1e\xf5\x3f\xff\x2b\xf0\x46\
-\x18\x6d\xb1\xb0\xb0\xd8\x77\x69\xf3\xe2\x4e\x44\x62\x44\x64\x50\
-\x6b\xc5\xdb\x35\x96\xa6\x78\xf4\xd6\xec\x5a\xc3\xcb\xab\x5e\x06\
-\x20\xda\x11\xcd\xbd\xc3\xee\xdd\xab\xfa\x7c\x77\x0d\xbe\x8b\x45\
-\xb9\x8b\xc8\x2b\xcb\xe3\xdd\x75\xef\x72\x62\x97\x13\x39\xbc\xc3\
-\xe1\xcd\xf2\xfa\x6a\xe3\x9d\x77\x52\xd8\xb0\x21\x8a\xbb\xee\x5a\
-\xdf\x6c\x6b\x5e\x7f\xfd\x66\x7e\xfa\x29\x11\x55\x78\xe7\x9d\x4e\
-\x5c\x76\x59\x16\x71\x71\x15\x44\x45\xf9\xd8\xb5\x0b\x76\xef\xb6\
-\xf3\xcd\x37\xed\x49\x4a\xf2\xf0\xe2\x8b\xb5\x0b\xe1\x31\x63\xb2\
-\x99\x37\x2f\x91\x9c\x1c\x57\xe5\x58\xb0\xb7\xd1\xe9\xf4\x71\xc6\
-\x19\x3b\xf8\xfc\xf3\x0e\x54\x54\x08\x37\xdc\x30\x80\x73\xcf\xcd\
-\x61\xf6\xec\x76\x64\x65\x99\xef\x10\x03\x07\x16\x86\x14\x77\x4d\
-\xc5\xeb\xf5\xe2\x74\x3a\xad\x9d\xc6\x46\xe0\x00\x46\x00\x97\xd4\
-\x31\xe7\x0f\x60\x7f\x12\x77\x16\x16\x16\x16\x0d\x21\x0f\xf8\x9c\
-\xaa\x7e\xb0\x6d\x91\x63\x54\xd5\x3e\x64\xc8\x90\x70\xdb\x51\x2f\
-\x0d\x15\x7a\xdf\x6c\xfd\x86\x0a\x9f\xd9\xfe\xbb\xe5\xb0\x5b\xe8\
-\x1c\xdd\xb9\x41\xeb\x7b\x3c\x1e\x9c\xce\x9a\x85\x95\x13\x5c\x09\
-\xb8\x87\xba\xb9\xf3\xa7\x3b\x51\x94\xc7\x96\x3c\xc6\x5b\x27\xbf\
-\xd5\xac\xaf\xad\x3a\x79\x79\x8e\xca\xba\x72\xcd\x45\x9f\x3e\xc5\
-\x1c\x7f\xfc\x4e\x66\xcf\x6e\x47\x71\xb1\x9d\xb7\xdf\x4e\x61\xfc\
-\xf8\x2d\x5c\x7c\x71\x36\xff\xf9\x4f\x77\x54\xe1\xfe\xfb\x7b\x01\
-\x70\xdc\x71\x3b\x71\x3a\x35\x64\xcb\xb2\x23\x8f\xdc\x45\x8f\x1e\
-\xa5\x6c\xdc\x68\x1c\x65\xfd\xfb\x17\xed\xb1\x9d\x0a\x70\xdb\x6d\
-\x1b\xd8\xbc\x39\x82\xa5\x4b\xe3\x58\xb1\x22\x96\x15\x2b\xaa\x5e\
-\x4b\xf7\xee\xa5\x4c\x9a\xb4\x6e\x8f\x9e\xba\xf5\xb1\x7a\x75\x0c\
-\x83\x07\x17\xd6\x7a\xde\x2f\xee\xec\x0d\x5f\xb1\x71\x88\x5b\xee\
-\x45\x98\xa2\x0f\x69\xf3\xed\x99\x87\x99\xea\x4a\x78\x1e\xb0\xa6\
-\xda\xd8\xc2\x56\xb2\xc5\xc2\xc2\xc2\x62\x9f\x21\x2d\x2d\x6d\x1e\
-\x70\x56\xb8\xed\xd8\x4b\x8e\x4f\x4d\x4d\x2d\x4b\x4c\x4c\xdc\x67\
-\xb6\x65\x1b\x42\x5d\x42\x2f\x10\x67\x37\xb0\xfd\x40\xce\xeb\x79\
-\x5e\xad\x6b\xa8\x2a\xab\x0b\x56\xb3\xa1\x70\x03\x1d\x7c\x1d\x58\
-\xfc\xd5\x62\x46\x8f\x1e\x4d\x52\x52\x52\x8d\xb9\x23\x53\x46\x72\
-\x42\xe7\x13\x98\x9d\x35\x9b\xf5\x85\xeb\xd9\x55\xbe\x8b\x04\x57\
-\xcb\x55\xde\x88\x8d\xf5\x52\x54\xd4\x34\x6f\xe3\x11\x47\x14\x10\
-\x11\x61\xb6\x45\xab\x0b\xa2\xeb\xaf\xdf\x5c\x29\xc4\x02\xf1\x70\
-\x97\x5d\x96\x45\xe7\xce\x65\x7c\xff\x7d\x3b\x44\xe0\xd0\x43\x77\
-\x33\x7a\xf4\x76\xa6\x4d\xeb\x42\x45\x85\x90\x90\xb0\x67\x02\x86\
-\x08\x5c\x78\xe1\x36\x9e\x78\xa2\x07\x00\xe7\x9c\x53\x53\xef\xc4\
-\xc5\x79\xf9\xef\x7f\x57\xf0\xd5\x57\x49\x2c\x5b\x16\xcb\xf6\xed\
-\x11\xb4\x6f\xef\xa1\x57\xaf\x62\xce\x3d\x37\xa7\x72\x0b\x17\x4c\
-\x59\x96\x84\x04\x63\x4b\xa7\x4e\x65\x35\xc6\x37\x6c\x88\xe4\xf1\
-\xc7\x7b\xb0\x60\x41\x1c\x37\xdd\xb4\x89\xd4\xd4\x9a\xdf\xa5\xde\
-\x79\xe7\x9d\x8a\xdf\x7e\xfb\xad\x25\x1b\x15\xff\x0d\xe5\xef\xe2\
-\x96\xc9\xe4\xf1\x8c\x3e\xaf\xad\x57\x1f\xa7\x85\xa8\x2e\xee\xa6\
-\xaa\xea\x8b\xa1\x26\x8a\xc8\x18\xe0\xfa\xa0\x79\xaf\xfa\xc7\x2f\
-\x00\x6e\xf6\x8f\xbf\x1e\xb8\x5e\x44\x62\x80\xbb\x81\x53\x81\x3e\
-\xc0\x76\xe0\x57\xe0\x1e\x55\xdd\x1c\xb4\xee\xdd\xc0\x99\xfe\xc3\
-\x1b\x81\x1b\xfc\xc7\xdb\x80\x0c\x55\x7d\x45\x44\xce\x00\xee\x00\
-\x06\x02\x4b\x80\xdb\x55\x75\x59\xd0\x1a\x1f\x03\xf1\xfe\x6b\xee\
-\x00\x1e\x03\x8e\x05\xb2\x81\xff\xaa\xea\x7f\x1b\xf2\xcb\x10\x91\
-\xa3\xfc\x36\x1f\x0a\x24\x02\x2b\x81\xd7\x81\x17\x34\xa8\x4f\x9b\
-\x88\x9c\xe7\xb7\xb3\x3f\x90\x80\xf9\x86\xbf\x0a\xf8\x40\x55\x9f\
-\xaf\xe7\x1e\x37\x02\x17\xf9\x0f\xef\x54\xd5\x5f\x1b\x62\x9b\x85\
-\x85\x85\x45\x63\x71\x38\x1c\xa3\x8e\x38\xe2\x88\x36\x25\xec\xaa\
-\x13\x2c\xf4\x96\xef\x5c\xce\xdf\x66\xff\x0d\xa0\xce\xad\xd3\xdc\
-\xd2\x5c\x26\xcd\x9f\xc4\x82\xdc\x05\x00\xf4\x2b\xed\xc7\xb1\x1c\
-\x4b\x91\xb3\x88\x24\x6a\x8a\x3b\x80\xe1\xc9\xc3\x99\x9d\x35\x1b\
-\x80\x95\xf9\x2b\x39\xb2\xe3\x91\xcd\xfc\x4a\xaa\x88\x8e\xf6\x52\
-\x5c\xdc\x34\x47\xd4\x88\x11\xbb\x18\x31\x62\x57\xc8\x73\x3d\x7a\
-\x94\x30\x6e\x5c\xcd\x86\x2a\xa3\x46\xe5\x31\x6a\x54\xde\x1e\x63\
-\x57\x5d\xb5\x35\xe4\x1a\x5e\xaf\xb0\x72\x65\x0c\x00\xed\xda\x79\
-\x38\xe3\x8c\xd0\x05\x86\x45\xe0\xb4\xd3\x76\x70\xda\x69\x3b\xea\
-\xb4\xf7\xe8\xa3\xf3\x2b\xe3\xf8\x42\x8d\xcf\x9e\xdd\x8e\xaf\xbf\
-\x4e\x62\xd6\xac\xf6\xcc\x9d\x9b\xc8\xa5\x97\x66\x73\xd5\x55\x99\
-\x44\x47\x7b\x2b\xe7\x16\x15\x15\x69\x51\x51\x51\x45\x8d\x45\x9a\
-\x97\x04\xe0\x09\xda\x73\xad\xfc\x43\x6e\xd7\x87\xf4\xf3\x16\xbe\
-\x5f\x8b\x52\x5d\xdc\x1d\xec\x17\x38\xc1\x2c\x55\xd5\x22\xe0\x03\
-\xe0\xef\xc0\x11\xc0\x70\x11\x99\x0b\x94\x00\x2f\x02\xed\x80\x15\
-\xc0\x9b\x00\x22\x92\x0c\xfc\x02\xf4\xf4\xaf\xe1\x01\x92\x30\xd9\
-\x67\xe7\x8b\xc8\x48\x55\x5d\xe2\x3f\xd7\x1f\x38\xc1\xff\xfc\x7d\
-\x8c\x10\x04\xe8\x01\x8c\x10\x91\x81\x18\xd1\x17\x08\x00\x38\x15\
-\xf8\x52\x44\x7a\xa9\x6a\x20\x16\xe6\x58\xa0\x3d\x50\x80\x49\xfb\
-\x0f\x34\xde\x4b\x05\x9e\x17\x91\x04\x55\x0d\xc4\xd9\x85\x44\x44\
-\x6e\x03\x1e\x87\xca\x1c\x7a\x0f\x30\xd2\xff\x38\x11\xf8\x8b\x7f\
-\xde\xa9\xfe\xdf\x45\x60\xde\x2e\xff\xeb\xec\x09\x38\x81\x3a\xc5\
-\x1d\xd0\x3b\xe8\xf5\xb6\xaf\x67\xae\x85\x85\x85\x45\x93\x10\x91\
-\x08\x9b\xcd\x36\xa2\x2d\x6c\xc9\x36\x94\x35\xbb\xaa\x36\x96\xfa\
-\x27\xf6\x0f\x39\xc7\xa7\x3e\xdc\xbf\xb8\x59\x9a\xb7\xb4\x72\xac\
-\x53\x45\x27\xb6\x39\xb6\x31\x61\xfe\x04\x5e\x3d\xf1\xd5\x90\x7d\
-\x6f\x83\xd7\x6b\x69\x71\x17\x13\xd3\x74\x71\xd7\x92\x4c\x98\xd0\
-\x87\x9f\x7f\x4e\xac\x4c\x92\xb8\xfd\xf6\x8d\xc4\xc4\x78\xeb\xb9\
-\xaa\xf9\xf0\x78\x6c\xbc\xf6\x5a\x17\x3e\xfb\x2c\x99\xb4\xb4\xcd\
-\x9c\x75\x56\x4e\x83\x13\x2f\x9a\x91\x7e\x28\x9f\x89\x5b\x66\x22\
-\xdc\xa6\x0f\xe9\xca\x56\xb7\xa0\x19\xa8\x2e\xee\xdc\xfe\x47\x30\
-\x23\x80\xf9\xaa\xea\x11\x91\x3f\x03\x8b\x30\x0a\xf7\x55\xa0\x18\
-\x23\xec\x4a\x80\x31\xaa\x1a\xd8\x98\x7f\x8a\x2a\x61\x77\x37\xf0\
-\x1f\x60\x18\xf0\x0d\x10\x07\xbc\x80\x11\x89\xd5\x89\x02\x2e\x03\
-\x06\xf9\xaf\x13\xe0\x76\x4c\xdc\xcb\xd3\xc0\x64\xe0\x48\x8c\x78\
-\x1b\xe5\x1f\x0f\x26\x1e\xf8\x09\x38\x1f\x38\x0a\x48\xc7\x04\x45\
-\xdf\x2b\x22\x2f\xab\x6a\xc8\xaf\x18\x22\xd2\x0f\x78\xd8\x7f\xbf\
-\x35\xfe\xeb\xb7\x00\xff\x06\xae\x02\x2e\x15\x91\xe9\xaa\xfa\x11\
-\x46\x5c\x0a\x26\xc8\xfa\x60\x55\xcd\x12\x91\x28\xff\xfd\x7a\x87\
-\x5a\xdf\xc2\xc2\xa2\xed\x91\x91\x91\xd1\x07\x48\x4d\x4b\x4b\x9b\
-\x15\x6e\x5b\x9a\xc8\x11\x3e\x9f\xcf\xb9\xaf\x26\x53\x34\x85\x15\
-\x3b\x57\x54\x3e\xaf\x4d\xdc\x2d\xc9\x5b\xb2\x87\xb0\x03\xd3\x99\
-\x62\x6d\xc4\x5a\xd6\x15\xac\xe3\xf3\xb5\xb3\x39\xa2\xc3\xb1\x35\
-\xae\x8b\xd3\x6e\xd8\xc4\x86\x4f\x7d\x2c\xce\x59\xce\x69\xc9\xcd\
-\x97\x10\x50\x9d\x32\x2d\xa1\xac\xcc\xc6\x96\xdc\x52\xec\xf6\x3a\
-\xea\x80\xb4\x32\xf9\x05\x60\xb3\xf9\x38\x6c\x50\x01\x47\x1d\x93\
-\xcb\x61\xc3\xb7\x90\xb5\xb3\x65\xef\xb9\xb3\x28\xa6\xc6\xd8\x8e\
-\x1d\x4e\x1e\x7c\xf0\x60\xa6\xcf\xe8\xc0\xf5\x37\xaf\xc6\xeb\xf4\
-\x42\x1c\x91\x32\x59\x5a\xaa\x79\x71\xa8\x3d\xf2\x33\x50\x4e\x91\
-\x09\xf2\x0c\x51\x4c\xd6\x49\x5a\xd3\xfd\xb8\x0f\xd3\xa8\xec\x13\
-\x55\x5d\x2f\x22\xe3\x31\x09\x16\xc7\x04\x9d\xba\x49\x55\x97\x07\
-\x1d\x07\xe2\x54\xf2\x31\x09\x19\xa7\xfb\x8f\x7f\x07\x86\x60\x3c\
-\x72\x9d\x54\xb5\x7a\x89\xee\xff\xa8\xea\x9b\x7e\xaf\xe0\xdd\x41\
-\xe3\x63\x55\x75\x9b\x5f\x84\x05\xbe\x4e\x85\xee\x6f\x02\xb7\xa9\
-\xea\x0a\xe0\x17\x11\x39\xcd\x6f\x4b\x9c\xdf\xde\x4f\x6a\xb9\xe6\
-\x54\xaa\x3c\x83\xdf\x63\xbc\x87\x7d\x80\x65\x41\x73\xce\x01\x3e\
-\xc2\x88\x47\x80\x48\xe0\x05\x11\x99\x8d\x11\xbc\xbf\xaa\xea\x77\
-\xb5\xac\x1f\xcc\x14\x60\xa6\xff\xf9\x82\x06\xcc\xb7\xb0\xb0\x08\
-\x0f\x7f\x06\x2e\x05\x0e\x09\xb7\x21\x4d\x64\x78\x7c\x7c\x7c\x79\
-\xc7\x8e\x1d\x5d\xf5\x4f\x6d\x1b\xac\x2f\x34\xd9\xa5\x51\xf6\xa8\
-\x5a\xeb\xe1\xad\x2b\x58\xb7\xc7\x71\x94\x2f\x8a\x78\x6f\x3c\xd9\
-\x4e\x53\x5a\x25\xfd\x39\x81\x1f\x4f\x0c\x7d\x83\xeb\x7a\x42\xe2\
-\x3a\x7e\x5c\xb5\x8d\xf3\xff\x5e\xcb\x9c\x66\xe4\xa2\xb3\x4f\xa8\
-\x7f\x52\x18\x58\xf6\x5b\x22\xcb\x7e\x4b\xe4\xc5\x29\xe1\xf5\x57\
-\xac\x59\x15\xcf\x6d\x37\x0c\x67\xf8\xe9\x0f\x39\xcf\xbd\xf8\xa5\
-\xf1\x1f\xe7\x7f\x3c\xbe\x95\x4d\x70\x20\xdc\x4a\x29\x67\x88\x5b\
-\x8e\xd1\x74\x6d\x61\xa9\xdb\x7c\x54\x17\x77\x37\x03\xd3\xaa\x8d\
-\xed\x11\xb1\xa9\xaa\x33\x44\x64\x0e\x70\xbc\x7f\x68\xb9\xaa\xbe\
-\x14\x38\xef\xdf\x92\x0d\x14\xbb\x49\x04\xde\xab\xe5\xde\xfd\x31\
-\x31\x72\xc1\x04\x84\x53\x70\xd0\xc0\x86\x20\x11\x18\x1c\x68\x10\
-\xaa\xe6\x4d\xa1\x5f\xd8\x05\xf8\x85\x2a\xa1\x79\x70\x2d\x76\xc0\
-\x9e\x1e\xb7\xb1\xfe\x47\x28\x7b\xc1\x08\xc4\x15\x98\x37\xfc\xb3\
-\x82\xd6\x2f\x11\x91\x7b\x54\xf5\x89\x3a\xee\x83\xaa\xae\xc4\xc4\
-\xf2\x59\x58\x58\xec\xdb\xf8\xfc\x8f\xb6\xca\xca\x82\x82\x02\x57\
-\x61\x61\x21\x71\x71\x71\xe1\xb6\xa5\x59\xe8\x1c\xdd\x99\xa5\x79\
-\x4b\x29\xf1\x96\x90\x5f\x96\x4f\x62\x44\x4d\x47\x4e\x97\xe8\x2e\
-\x7b\x1c\xa7\x78\x52\x50\x94\xed\x8e\xed\x00\x9c\x7c\xca\x0e\x7a\
-\x9f\xfe\x61\x8d\xeb\x7c\x78\x79\xb9\x74\x33\x5e\xa0\x5b\x87\x68\
-\xfe\x74\x5f\xcd\x39\xcd\x45\x6e\x56\x22\xef\x3d\x7f\x22\x97\xdd\
-\xf6\x25\xb1\x09\x2d\xe7\x21\x6c\x0b\x6c\x58\xd9\x99\x2f\xdf\x0e\
-\xbd\x05\x1e\x1d\x57\xca\x99\x7f\xf9\x89\xbe\x5d\xe6\x6b\x4e\x6e\
-\xc7\x8d\x38\x48\x6b\x21\x33\x5e\x05\x3a\x86\x18\xaf\x00\x9e\x03\
-\xee\x6b\x4b\xc2\x0e\x6a\x8a\xbb\x12\xd5\xba\x5d\x8f\x22\x72\x16\
-\x26\x0e\x2d\xc0\xa1\x22\x72\xb5\xaa\x4e\xf5\x1f\xef\xc0\x6c\xd3\
-\x46\x01\x39\xc0\x3f\x6b\x59\x6a\x6d\x88\xb1\x02\x00\x55\xf5\x4a\
-\xd5\x46\x7b\xe8\xc8\xd1\xd0\xc4\x89\x48\x67\x55\x0d\x54\x93\xef\
-\x1b\x74\xae\xae\xae\xd5\xc1\x62\xf2\x35\xe0\xc7\x10\x73\xb6\xfb\
-\x6d\xf3\x88\xc8\x60\xe0\x34\x8c\x17\x71\x08\x70\x12\xc6\x3b\xf8\
-\x4f\x11\xc9\x50\xd5\x5a\xff\xb7\x8a\x88\x83\xaa\xdf\x7b\xb9\xaa\
-\xb6\xe5\x0f\x0f\x0b\x8b\xfd\x99\xc0\xfb\x58\x5b\x65\xae\x88\xe8\
-\x92\x25\x4b\xe4\xb8\xe3\x8e\x0b\xb7\x2d\xcd\xc2\x80\x76\x03\xf8\
-\xdf\x96\xff\x01\x26\x2e\xee\xa8\x4e\xd5\x43\xc4\x21\x29\x22\x09\
-\x87\xcd\x51\x59\x2e\xa5\x53\x45\x27\x76\x38\x76\xe0\x11\x0f\xed\
-\x22\xda\x71\xf7\xc9\x67\x10\xef\xaa\x59\xbf\x7e\xf5\xae\xd5\xbc\
-\xf0\x9d\x49\x92\x3c\xb9\xcf\x60\xae\x1e\xd0\xb0\x12\x2b\x4d\xa1\
-\xa4\xc4\xc6\xc9\x83\x7f\xe7\xb0\xc3\xda\xe3\x72\x1d\xd8\x1f\x01\
-\xb3\xa3\xda\xf1\xe5\xdb\x7b\x8e\xd9\x6c\xca\x05\x17\x6c\xe7\x9a\
-\x6b\xb6\x10\x1f\x1f\xc5\x97\x5f\x3a\xb0\x15\xd8\xf2\xf5\x79\x9d\
-\x19\x7a\x95\xbd\x43\xdc\x12\xa2\xe2\x32\x5f\x01\xb7\xea\x43\x7b\
-\x38\x8c\xda\x0c\xd5\xc5\xdd\xa1\xfe\xcc\xd4\x60\xb2\x55\x75\x31\
-\x80\x88\xa4\x62\x14\xae\x00\xbf\x61\xde\xfc\x8e\x04\x9e\x11\x91\
-\x9f\x54\xf5\x77\x55\xf5\x89\xc8\x2f\x98\xa4\x81\x64\x60\xad\xaa\
-\x7e\x15\x58\x4c\x44\x7a\x02\xe7\xa8\x6a\xcd\x94\x9e\xe6\xe1\x46\
-\x11\x99\x8c\x49\xde\x38\xc5\x3f\xa6\xd4\xbd\x05\x3a\x2f\xe8\x79\
-\x6f\x60\x9c\xaa\x49\x85\x16\x11\x3b\x70\x1e\x90\xe9\x3f\x3e\x14\
-\xc8\x57\xd5\xcf\xf1\xc7\xfc\x89\x88\x1b\x78\x08\x13\x8b\x78\x34\
-\xf0\x6d\x1d\xf7\x7a\x0c\xb8\xc5\xff\xfc\x0c\xe0\xcb\x06\xbf\x32\
-\x0b\x0b\x8b\xd6\x64\x35\x30\x27\xdc\x46\x34\x15\x55\x2d\x70\xb9\
-\x5c\xcb\x17\x2d\x5a\x74\xd8\xfe\x22\xee\x0e\x49\xac\xda\x21\x5f\
-\xb9\xab\xa6\xb8\x9b\x95\x39\x8b\xfb\x17\xde\x4f\x6a\x74\x2a\x85\
-\x9e\x42\xf2\xca\xf2\x48\xf1\xa4\x90\xed\xcc\x26\xc1\x95\xc0\xe4\
-\xc3\x27\x87\x14\x76\x40\x65\xc7\x0b\x80\x01\x89\x03\x5a\xc4\xfe\
-\x00\x51\x51\x3e\x86\x0d\x2b\x68\xd1\x7b\xb4\x55\x46\x8c\x28\xe0\
-\xd6\x5b\x37\xd0\xab\x57\x95\xde\xb2\xdb\xed\x78\x3c\x9e\xd6\xc9\
-\xec\x10\xd6\x02\xb7\xeb\x43\xfa\x71\xab\xdc\xaf\x85\xa8\x2e\xee\
-\x6e\xf5\x3f\x82\x79\x0f\xb8\xc8\x2f\x72\xde\xc2\x64\xbd\x96\x62\
-\x12\x1f\x8a\x81\xc5\x18\xaf\xd5\x74\x11\x39\xc2\x9f\xc1\x7a\x2b\
-\x66\x4b\xd4\x09\xfc\x4f\x44\x96\x60\x3c\x75\xbd\x30\xe5\x4c\x56\
-\x61\x92\x2c\x9a\x1b\x0f\x26\x56\x2f\x0d\x93\xe8\x11\xe0\x2d\x55\
-\xfd\xa3\xb6\x8b\x54\x75\x9e\x88\xbc\x89\xc9\x88\x3d\x06\xc8\xf5\
-\xc7\xd2\xc5\x00\x87\x61\xdc\xb5\x97\x63\xb6\x8d\xcf\x03\x1e\x14\
-\x91\xa5\xc0\x7a\x4c\xac\x5e\xc0\x93\x59\x0a\x2c\xc5\xc2\xc2\xa2\
-\xcd\x93\x96\x96\xf6\x29\xa6\xb7\x6c\x9b\xc5\xe3\xf1\x7c\x33\x7f\
-\xfe\xfc\x3e\x40\x9b\x2e\x87\x12\xa0\x5f\x62\xbf\xca\xa4\x87\xe5\
-\x79\x55\x61\xde\x3e\xf5\x91\xb1\x22\x83\x69\x6b\xa6\x71\x76\xf7\
-\xb3\xb9\x6b\xf0\x5d\x94\xfb\xca\xf9\x70\xd9\x1c\x4a\x72\x33\x49\
-\x4c\xe9\xcb\xa4\x93\x26\xd1\x2e\xa2\xf6\xde\xf3\xcb\x77\x56\xad\
-\x57\x5b\xb2\x46\x73\x91\x9b\xeb\x24\x22\x42\x6b\xf4\x66\x3d\x90\
-\x49\x4d\x2d\xe5\xe6\x9b\x37\x55\xf6\xb0\x0d\xe6\xe3\x8f\x3f\xf6\
-\xae\x5c\xb9\x72\xd1\xcb\x2f\xbf\xdc\x92\x26\x14\x02\xff\x22\x82\
-\x27\x75\x92\x96\xb7\xe4\x8d\x5a\x83\xc6\x54\x51\xbc\x8f\x2a\x11\
-\x33\x41\x55\x97\xa9\xea\x3a\x4c\x99\x12\x30\xa2\xed\x49\x00\xbf\
-\xa7\x6f\x24\x30\x17\xe3\x35\x1b\x0c\x5c\xe0\xff\xf9\x07\x50\xcd\
-\x09\xdb\x6c\x64\x63\x32\x5d\x83\xf9\x00\xb8\xb6\x01\xd7\xfe\x0d\
-\xb8\x07\xb3\x35\x1c\x8f\x49\xa0\x18\x85\x11\xae\x5f\x50\x25\xda\
-\x36\x60\x9a\x88\x0f\xc2\x08\xbd\x33\x81\x58\x4c\x96\xed\xc5\xaa\
-\xfb\x4f\x85\x6b\x0b\x0b\x8b\x36\xcf\xf7\x6b\xd6\xac\x71\x95\x94\
-\xec\x1f\x71\x5d\x91\xf6\x48\x7a\xc5\x9b\x2e\x0b\x3f\x64\xff\xc0\
-\xa2\xdc\x45\xe4\x97\xe5\x73\xd3\xdc\x9b\x78\x7b\xed\xdb\x4c\x18\
-\x32\x81\x7b\x86\xdd\x83\xcb\xee\x22\xd6\x19\xcb\x60\xc7\x70\x04\
-\x38\xb2\xd3\x45\x75\x0a\xbb\xb5\x05\x6b\xf9\x6c\xd3\x67\x80\xe9\
-\x39\xdb\x29\xaa\x53\x8b\xbe\x8e\x67\x9e\xe9\xce\xe4\xc9\xbd\x5a\
-\xf4\x1e\x6d\x85\xe8\x68\x2f\x37\xdc\xb0\x99\xb7\xdf\x5e\x1a\x52\
-\xd8\x01\x94\x95\x95\x51\x50\x50\xd0\x2c\x85\x85\xc5\x2d\x09\xe2\
-\x96\xeb\xc4\x2d\xdd\x82\x86\x5f\xc7\x46\x3f\x4d\xd7\xff\x6b\x6d\
-\x61\x27\x6e\x19\x21\x6e\xb9\xaa\xd9\xd7\x0d\xaa\xcd\xdb\x22\xf8\
-\xcb\x84\x1c\x84\x09\x4c\xce\xae\x2f\xa6\xaf\x89\xf7\xd8\x81\xa9\
-\x19\xb7\x59\x55\xbb\x8b\x09\xd8\xeb\x03\xe4\xa8\x36\x3e\x08\x52\
-\x44\x3a\x03\x9d\x30\xf1\x83\xd9\x81\x2d\xda\x6a\x73\x92\x31\x1e\
-\x3d\x27\x26\xb6\x30\x53\x5b\xfa\x97\x69\x61\x61\x61\xd1\x08\x44\
-\xa4\x23\xb0\xed\x3f\xff\xf9\x0f\x23\x46\xbd\x2b\xb9\xcb\x00\x00\
-\x20\x00\x49\x44\x41\x54\x8c\x08\xb7\x39\xcd\xc2\x9c\xac\x39\xdc\
-\xf5\xf3\x5d\x00\x24\x47\x25\x83\x82\x4d\x6c\xa4\x1f\x91\xce\x21\
-\xed\xf6\x4c\x6c\x5e\xb7\xce\xc3\xfd\xf7\x2b\x77\xdc\xd1\x9e\xc3\
-\x0e\xdb\x1d\x72\x3d\xaf\x7a\x19\x37\x7b\x1c\xbf\xe7\x9b\x06\x08\
-\x13\x86\x4c\x60\x74\xcf\xd1\x2d\xfa\x1a\xc6\x8e\x3d\x8c\xc1\x83\
-\x0b\xb8\xe5\x96\x4d\x2d\x7a\x9f\xfd\x85\x6b\xaf\xbd\xb6\x62\xc9\
-\x92\x25\x2f\xa8\xea\xf5\xd5\xcf\x89\x5b\xae\x00\x1e\xf1\x1f\x2a\
-\xe6\x73\x7b\x13\x66\x67\xed\x05\x4d\x37\x61\x65\x41\xf3\xfb\x61\
-\x92\x1a\xcf\xd4\xf4\x96\x89\xe1\x0b\x85\xb8\xe5\x4a\x20\x4f\xd3\
-\xf5\x93\x6a\xe3\xf7\x03\x37\x68\xba\x86\xae\xae\xdd\x44\x1c\x22\
-\x2d\x56\x37\x26\x98\xcc\xc0\x93\x16\xba\x5f\x20\xfb\xc2\x16\xb4\
-\xfe\xf6\xbd\xb8\x5f\x09\xc6\x43\x07\x10\x23\xa1\xab\x28\x7a\x80\
-\xe0\x12\xdf\x09\xb5\xcc\xb3\xb0\xb0\xd8\xf7\x28\xa8\x2f\x99\x29\
-\x23\x23\xa3\x03\xa6\x7e\xe5\x97\x69\x69\x69\x6d\xb2\x1d\x91\xaa\
-\x6e\x77\xb9\x5c\xeb\x16\x2f\x5e\x7c\xf0\xfe\x22\xee\x8e\xef\x7c\
-\x3c\x67\x74\x3b\x83\x99\x9b\x67\x92\x53\x92\x43\xc7\xa8\x8e\xbc\
-\x7a\xd2\xab\x24\xba\x6a\xbe\xd5\x47\x45\xc5\xb2\x72\xe5\x10\x60\
-\x79\xcd\x85\xfc\x4c\x5b\x33\xad\x52\xd8\x1d\xd5\xe9\xa8\x16\x17\
-\x76\x00\x1b\x37\x46\x72\xce\x39\xdb\x5b\xfc\x3e\xfb\x19\xb5\x7d\
-\xc0\x46\x63\x9c\x31\xff\x04\x36\x63\x76\xde\x0e\xc6\xc4\xdc\xa7\
-\x89\x5b\xde\x04\xae\xd4\x74\x0d\xc4\xec\x65\x63\x42\xb7\x6a\xff\
-\xa3\x68\x19\x6e\xc4\x84\xa4\x55\x2f\xc9\xf6\x09\xb0\xae\xe6\xf4\
-\xbd\xc3\x01\xb4\xa9\xf4\xde\x7a\x48\x65\xff\x7a\x3d\x16\x16\x16\
-\x2d\xc3\x00\xea\x2f\x49\x34\x10\xf3\xc6\xdb\x09\xff\x97\xc5\xb6\
-\x88\x3f\xee\xae\xeb\xf8\xf1\xe3\xf7\x8b\x7a\x77\x65\xde\x32\x7c\
-\x41\xba\x3c\xa7\x24\x87\x69\xab\xa7\x71\xed\x80\x6b\x71\xd9\x1b\
-\xfe\x12\xbd\xea\xe5\xb5\xd5\xaf\xf1\xd2\x2a\x53\xc9\x2b\xce\x19\
-\xc7\xc4\xa1\x13\x9b\xdd\xde\xea\xec\xd8\xe1\xa4\xa8\xc8\x4e\xf7\
-\xee\xa5\xf5\x4f\xb6\x00\xe0\xf2\xcb\x2f\x77\xc4\xc7\xc7\xd7\x56\
-\xdb\x36\xc0\xc7\x9a\x5e\xd9\xf9\x0a\x71\x8b\x1d\xb8\x0b\x93\xec\
-\xb8\x14\xf8\x3f\x00\x4d\xd7\x5d\x98\x7a\xb3\x21\x11\xb7\xd8\x30\
-\xa5\xcf\x36\x6b\xba\x16\x06\x8d\x77\xc0\xe4\x1c\xac\xd1\xf4\xda\
-\xbf\x18\x8a\x5b\xba\x60\x76\x12\x37\x68\xba\x86\x76\x17\x07\xa1\
-\xe9\xfa\x2b\xa6\x35\x6b\xa8\xb5\x12\x31\x4d\x1b\xd6\x68\x7a\xdd\
-\xfd\x6e\xc5\x2d\xa9\x80\x4d\xd3\x4d\x7b\x57\x07\xa6\x8c\x47\x5b\
-\xe7\x48\xcc\xf6\x68\x29\x30\x3f\xcc\xb6\x58\x58\x58\xec\xbb\xf4\
-\xc6\x74\xc8\x69\x08\x81\x4f\xdf\x50\x35\x35\xdb\x12\x73\x56\xac\
-\x58\x31\xd6\xe3\xf1\xe0\x74\xd6\x6c\xbb\xd5\x96\xc8\x2c\xce\x64\
-\xc2\xcf\x13\xd8\x5a\xb4\x95\xab\xfb\x5e\xcd\xd4\xd5\x53\x51\x94\
-\x37\xfe\x78\x83\x79\xdb\xe6\xf1\xcf\xc3\xff\xd9\xa0\x4c\xd7\xb5\
-\x05\x6b\x79\x60\xe1\x03\xac\xcc\xaf\xd2\xf7\x77\x0c\xba\x83\xe4\
-\xc8\xe4\x96\x34\x1f\x80\x75\xeb\x4c\x75\x1d\x4b\xdc\x35\x0c\x55\
-\x25\x3a\x3a\x1a\x87\xc3\xd1\xa8\x6c\x59\xbf\xa7\x2e\x5d\xdc\x72\
-\x26\x70\x9f\xb8\xe5\x69\x4d\xd7\x92\x50\xdb\xb2\xe2\x96\x6f\x31\
-\x09\x15\x5f\x03\x0f\x62\xbc\x7f\x97\x03\xaf\x8b\x5b\x46\x62\xda\
-\x8a\x06\xfe\xb0\x0a\xc4\x2d\x6e\x4d\xd7\xe7\x82\xef\x27\x6e\xb9\
-\x04\xd3\x9d\x2b\x10\xb0\x59\x21\x6e\x79\x52\xd3\xf5\x2e\x71\xcb\
-\x1a\xcc\x7b\xcf\x70\x71\xcb\x65\xfe\xf3\x2f\x69\xba\x8e\x0b\xb5\
-\x2d\x2b\x6e\xe9\x0d\xbc\x82\x69\xad\x0a\x50\x2e\x6e\x79\x1a\x98\
-\xa8\xe9\x26\x26\x50\xdc\x72\x3e\xa6\x65\xeb\xf1\x98\x0e\x5e\x43\
-\xfc\xe3\x3f\x03\xa3\x1d\xaa\x3a\xab\x31\xbf\xb0\x7d\x94\x59\xe1\
-\x36\xc0\xc2\xc2\x62\xdf\x47\x44\x1a\x13\xf3\xbb\xdf\x88\x3b\x8f\
-\xc7\x63\x5f\xb9\x72\x25\x03\x07\x0e\x0c\xb7\x2d\x4d\x66\xde\xb6\
-\x79\x4c\x9a\x3f\x89\xe4\xc8\x64\xa6\x9e\x38\x95\xee\xb1\xdd\x19\
-\xd0\x6e\x00\x0f\x2f\x7e\x98\xbc\xb2\x3c\xd6\x17\xae\x67\xdc\xec\
-\x71\x9c\xdd\xe3\x6c\x06\xb5\x1f\x44\xff\xc4\xfe\x44\x68\x3f\x00\
-\x7c\xf8\x58\x5b\xb0\x96\xdf\xf3\x7f\x67\x59\xde\x32\x3e\xdb\xf4\
-\x19\x1e\x9f\x71\x84\xc4\x3a\x63\xb9\x6d\xe0\x6d\x9c\xde\xed\xf4\
-\xba\x6e\xdf\x6c\xcc\x9d\xdb\x8e\x1e\x3d\x4a\x49\x4e\x6e\xf3\x09\
-\x99\xad\x82\xcf\x67\x9c\x64\x7b\x11\xaf\xff\x21\x26\xc1\xb3\x0f\
-\xa6\x84\x5b\x6d\x8c\xc4\xe4\x07\xdc\x82\x29\x67\x56\x21\x6e\x19\
-\x82\xd1\x17\xef\x61\xb6\x55\x37\x60\x12\x34\x9f\x15\xb7\xe4\x68\
-\xba\xce\x00\x10\xb7\x5c\x8c\x49\x14\xcd\xc0\xc4\xff\xe5\x62\x3c\
-\xff\x81\xb4\xeb\x13\x31\x89\x99\x6b\x81\xdb\xfc\x63\x7b\x34\x88\
-\x08\x20\x6e\x71\x01\x5f\x01\x65\x18\x71\xf7\x3b\xa6\x5b\xce\x53\
-\x98\xad\xe9\x3b\xaa\x5d\x32\x15\x23\x04\x2f\xc2\x6c\x45\x3f\x06\
-\x3c\xd8\xa8\xf6\x63\x16\x16\x16\x16\x07\x10\x3b\x30\x2d\x07\xdb\
-\x74\xaa\xa9\xaa\x6e\x72\xb9\x5c\xd9\x8b\x16\x2d\x4a\x69\x8b\xe2\
-\x4e\x51\x5e\x5a\xf9\x12\x2f\xad\x7c\x89\x93\x53\x4f\x66\xe2\xb0\
-\x89\x44\xd9\x8d\xf7\xeb\xf8\xce\xc7\x33\x38\x69\x30\x8f\x2e\x79\
-\x94\xaf\xb7\x7e\x8d\x57\xbd\x7c\xb4\xe1\x23\x3e\xda\xf0\x11\x4e\
-\x75\x72\x58\xd9\x40\x62\xc6\x29\x37\xae\x5d\x41\xf9\x1f\x65\x35\
-\xd6\x3e\xaa\xd3\x51\xfc\x63\xc8\x3f\xe8\x18\x15\xaa\x39\x41\xcb\
-\x30\x6b\x56\x3b\xce\x38\x23\xb7\xd5\xee\xd7\xd6\x09\x12\x77\x4d\
-\x0d\xb9\x0a\x34\x4c\xe8\x4f\xdd\xe2\xae\x1d\x30\x52\xd3\xab\x5a\
-\xa9\x8a\x5b\x5e\xc0\xbc\x0f\x5c\xae\xe9\x1a\xf8\x03\xba\x5b\xdc\
-\x72\x3c\x30\x01\x98\xe1\x1f\x7b\x0c\xf8\x4e\xd3\xf7\x48\xf8\xf8\
-\xd1\xff\x40\xd3\x75\xab\xb8\xa5\x0c\x28\xd2\x74\xdd\x50\x8f\xbd\
-\x7f\x01\x7a\x02\x47\x6a\xba\xfe\xe2\x1f\xcb\x10\xb7\x0c\x04\x6e\
-\x14\xb7\xfc\xab\x5a\xb7\x8c\x0f\x34\x5d\x1f\x0c\xbc\x56\x71\xcb\
-\xd9\xc0\xa9\x96\xb8\xb3\xb0\xb0\xb0\x08\x41\x5a\x5a\xda\x26\xa0\
-\xe5\xa3\xeb\x5b\x81\x8a\x8a\x8a\x6f\x16\x2c\x58\x30\xe6\x8a\x2b\
-\xae\x68\x53\xfb\xb2\x85\x9e\x42\x26\xcd\x9f\xc4\xcf\xdb\x7f\xe6\
-\x96\x81\xb7\xf0\xe7\x5e\x7f\xae\x31\x27\xc1\x95\xc0\x83\x23\x1e\
-\x64\x54\xea\x28\x1e\x5b\xf2\x18\x79\x65\x79\x00\x78\xc5\xcb\xe0\
-\xa2\x41\x14\xc7\xfe\xc8\x2a\xdd\x53\xd8\xc5\x39\xe3\xb8\xe9\xb0\
-\x9b\x38\xb7\xc7\xb9\xad\xf2\x3a\x02\x14\x15\xd9\xe9\xd3\xa7\x98\
-\x53\x4e\xc9\x6b\xd5\xfb\xb6\x65\x9c\x4e\x27\x13\x27\x4e\xf4\x95\
-\x96\x96\x2e\xa9\x7f\x76\x48\x02\x81\x98\x35\xd5\xfd\x9e\x6c\x0a\
-\x16\x76\x7e\x8e\xc2\xb4\x1b\xbd\x5a\xdc\x7b\xe4\x73\xec\x00\x4e\
-\x12\xb7\x08\xa6\x6a\x46\x77\xe0\xe1\x26\xda\x57\x9d\xa1\xc0\xce\
-\x20\x61\x17\xe0\x63\x4c\x22\x48\x3f\xaa\x5a\xb5\x82\x29\xf7\x16\
-\xcc\x8f\xc0\x19\x96\xb8\xb3\xb0\xb0\xb0\xd8\xcf\x51\xd5\xd9\x4b\
-\x96\x2c\xb9\xc4\xe7\xf3\x61\xb3\x35\xa6\xbc\x69\xf8\x58\xbd\x6b\
-\x35\x13\x7e\x9e\x40\x99\xaf\x8c\x67\x8f\x7b\x96\x21\x49\x43\xea\
-\x9c\x3f\xaa\xcb\x28\x4e\xea\x72\x12\x9b\x77\x6f\x66\x65\xfe\x4a\
-\x56\xe6\xaf\xa4\xa8\xa8\x84\x2e\x25\x07\xe3\x4d\x8c\x66\x58\x6a\
-\x1f\x06\x24\x0e\x60\x40\xe2\x00\xba\xc7\x76\xc7\x26\xad\xff\x7b\
-\x88\x89\xf1\xf2\xe8\xa3\xab\x5b\xfd\xbe\x6d\x99\xf2\xf2\x72\x76\
-\xee\xdc\x69\xc3\x94\x1c\x6b\x0a\x81\xde\xf1\xab\xea\x9c\x05\x7b\
-\x88\x47\x71\x4b\x0c\x26\x31\x22\x99\xd0\x5f\xf2\xbe\xc7\x08\xc7\
-\x40\x33\xe3\xe6\xaa\x71\xdb\x89\xd0\x89\xa1\x81\xf5\x3b\x54\x1b\
-\xaf\xde\xed\xab\x04\xb0\x5b\xe2\xce\xc2\xc2\xc2\x62\xff\xe7\xfb\
-\xd2\xd2\x52\xc7\x1f\x7f\xfc\x41\xdf\xbe\x7d\xeb\x9f\x1d\x66\x3e\
-\xdb\xf4\x19\x8f\x2c\x79\x84\x7e\x89\xfd\x78\x68\xc4\x43\x74\x88\
-\xac\xfe\x79\x16\x1a\x41\xe8\x1e\xdb\x9d\xee\xb1\xdd\x39\xad\xeb\
-\x69\xfc\x90\xbf\x9c\x45\x8b\x96\x71\x59\xd7\x47\x6b\xad\x73\xd7\
-\x5a\xf8\x7c\x82\x88\x62\x55\xcc\x6a\x1c\x05\x05\x95\x6d\xda\x1a\
-\x1d\x73\x27\x6e\x71\x02\x57\x00\x79\x84\xee\x67\x1f\xcc\x1e\x75\
-\x6a\x35\x5d\x8b\xc4\x2d\xdb\x81\x6f\x34\x5d\x6f\xa8\xe3\x1e\x81\
-\x75\xeb\xcb\xe6\x6d\x28\x1b\x80\x73\xc4\x2d\xb6\x6a\x59\xb9\x3d\
-\xfc\x3f\x1b\xd4\xba\xb5\x45\xbf\xba\x88\x88\x53\x44\xf6\x8b\xf4\
-\x7b\x0b\x0b\x8b\x03\x8b\x8c\x8c\x0c\xc9\xc8\xc8\x38\x37\x23\x23\
-\x23\x35\xdc\xb6\xec\x2d\xaa\xba\xd2\xe1\x70\xec\x5c\xb4\x68\x51\
-\xb8\x4d\xa9\x13\x8f\xcf\xc3\x23\x4b\x1e\xe1\x81\x85\x0f\x70\x5e\
-\xcf\xf3\x78\xee\xd8\xe7\x1a\x2c\xec\x42\xd1\xa1\x43\x37\xa2\xa2\
-\x0a\x29\x2e\x0e\x7f\x8c\xdb\x27\x9f\x24\x73\xe5\x95\x03\xa9\xa8\
-\xb0\xd4\x5d\x63\xd8\xbd\xbb\x52\x94\x37\x2a\xe6\xce\x5f\x46\x64\
-\x0a\x26\xd6\xee\x96\xfa\x4a\x89\xd4\xc2\x4c\x60\x8c\xbf\x0c\x4a\
-\xf5\xf5\x05\x40\xd3\xb5\x00\xb3\x15\x7a\x8d\x3f\x19\xa2\x36\xf2\
-\x30\x09\x1b\xf5\xf1\x3d\xa6\x76\x5f\xf5\x6e\x5b\x57\x61\x12\x35\
-\x1a\xe4\xfa\x6d\x16\xcf\x9d\x88\x24\x00\x67\x03\x27\xe0\x70\x74\
-\xc7\xe1\xec\x8e\xd7\xdb\x19\x48\x00\x10\x97\xab\x00\xbb\x3d\x8b\
-\x0a\xef\x26\x2a\x3c\x9b\x30\xcd\xb8\x3f\xdd\x8b\x00\x49\x0b\x0b\
-\x0b\x8b\xd6\xe0\x23\x4c\xa6\xda\xf4\x70\x1b\xb2\xb7\xf8\x7c\xbe\
-\x59\x0b\x17\x2e\x3c\xf7\x92\x4b\x2e\xb1\x87\xdb\x96\x50\x6c\x2f\
-\xd9\x8e\xfb\x17\x37\x6b\x0b\xd6\x32\x79\xf8\x64\x4e\xef\xba\xf7\
-\xd9\xab\xf1\xf1\x1d\x28\x2b\x8b\x66\xd7\xae\x4d\x40\xf8\x3c\x96\
-\x3e\x9f\xf0\xda\x6b\x5d\x18\x3a\xb4\x00\x87\xc3\x6a\x64\xd4\x18\
-\x0a\x0a\x0a\x78\xf8\xe1\x87\xf9\xf4\xd3\x4f\xeb\x2c\x3a\x0e\xdc\
-\xe2\xf7\xb4\x05\x8a\x18\x1f\x81\xd1\x38\xf7\x6a\xba\xbe\xde\xc4\
-\xdb\xdf\x05\x9c\x06\xfc\x2c\x6e\x79\x12\xd3\x3e\x35\x50\xdc\x3c\
-\x1e\xe3\x15\x04\xb8\x19\x23\xca\xe6\x8a\x5b\x9e\xc5\xd4\xc5\xec\
-\x0f\x74\xd4\x74\x9d\xe0\x9f\xf3\x03\x70\x8f\xb8\xe5\x79\x4c\x06\
-\xec\x32\x4d\xd7\xaf\xab\xdf\x50\xd3\xf5\x33\x71\xcb\x77\xc0\x54\
-\x71\x4b\x0f\xff\x3d\x2f\xc4\xb4\x44\x1d\xa7\xe9\x5a\xdc\x10\xc3\
-\x9b\x2c\xee\x44\x24\x09\xb8\x18\xa7\xf3\x62\x6c\xb6\x13\xb0\xd9\
-\x84\x11\x47\x79\xe9\xd5\xd7\x49\x97\x54\xe8\x9c\x0a\x5d\xba\x9a\
-\xc9\x59\x5b\x13\xc8\xda\x9a\xc0\xd6\x2d\xfd\x59\xf7\x47\x05\xbf\
-\xcc\x1b\x8b\xd7\xab\xe2\x72\x7d\x8f\xc7\x33\x03\x98\x61\xf5\x64\
-\xb5\xb0\xb0\xd8\x97\x48\x4b\x4b\xd3\x8c\x8c\x8c\x32\x20\x2a\xdc\
-\xb6\x34\x07\x3e\x9f\x6f\xf6\xc2\x85\x0b\xcf\x02\xf6\x39\x71\xb7\
-\x20\x77\x01\x13\x7f\x9d\x48\x9c\x33\x8e\x97\x4e\x78\xa9\xb2\x7f\
-\xec\xde\x22\x22\x64\x65\xf5\xa3\x53\xa7\xcd\x84\x53\xdc\xfd\xef\
-\x7f\x49\x64\x65\xb9\x78\xea\xa9\xcc\xfa\x27\x5b\xec\x41\x71\x71\
-\x31\xf1\xf1\xf1\x44\x45\x45\xd5\x56\x48\x3c\x13\x98\x8d\x11\x74\
-\x07\x61\x92\x1d\x56\x00\x9f\x01\x6f\x69\xba\x56\x77\xdb\x16\xfb\
-\xe7\x07\x67\xb5\x2c\x26\x44\x56\xbc\xa6\xeb\x36\x71\xcb\x61\xc0\
-\xbf\x30\x25\x50\xba\xf9\xaf\x5b\x02\xbc\x18\x34\x6f\xbe\xbf\x6c\
-\xca\x83\x98\x4e\x19\x09\x98\xf6\x67\x4f\x07\x2d\xf7\x28\x50\x8e\
-\xa9\xcb\xdb\x17\x53\x9b\xf7\x6b\xcc\x36\xec\x0f\xd5\x6e\x7d\xa6\
-\x7f\xad\xb1\x98\x18\xbc\xd5\xc0\x05\x9a\xae\xc1\xc9\x13\x39\xfe\
-\xd7\x51\x3d\x51\x64\x33\x30\xbb\xd1\xbd\x65\x45\x24\x1a\xb8\x05\
-\x87\x63\x22\x2e\x57\x04\xa7\x9f\x6d\xe3\xec\xf3\x6d\x9c\xf6\x27\
-\x88\x8b\x6f\xd8\x22\xbb\x0b\xe1\xab\x2f\xe0\xd3\x0f\x7c\x7c\xf1\
-\x89\x8f\xb2\xb2\x72\xbc\x15\xe9\xc0\x13\xaa\x0d\x53\xa5\x16\x16\
-\x16\x16\x8d\x45\x44\x86\x00\x8b\x80\x01\xaa\x5a\x5f\x87\x0a\x32\
-\x32\x32\x72\x81\xfb\xd2\xd2\xd2\x9e\x69\x71\xe3\x5a\x18\x11\x19\
-\x0a\x2c\x9c\x3e\x7d\x3a\x3d\x7a\xf4\xa8\x77\x7e\x6b\xf1\xfa\x9a\
-\xd7\x79\x6e\xc5\x73\x1c\xdb\xe9\x58\x26\x1d\x3e\x89\x58\x67\x6c\
-\xb3\xad\x9d\x95\x15\xc1\xc4\x89\x3b\x19\x39\x72\x06\x57\x5e\x79\
-\x79\x58\x92\x49\x2a\x2a\x84\xcb\x2e\x1b\xc8\x21\x87\x14\x31\x69\
-\x52\x7d\x61\x5f\x16\xd5\x99\x35\x6b\x16\xb1\xb1\xb1\xdc\x70\xc3\
-\x0d\xd6\x7e\x76\x23\x68\xf0\x5f\xba\x88\xd8\x44\x64\x3c\x4e\xe7\
-\x7a\x22\x22\x1e\xe0\xb6\x09\x31\xac\xce\x76\x30\x75\xba\x8d\x0b\
-\xff\xdc\x70\x61\x07\x10\x1b\x07\xe7\x8f\x81\x97\xde\xb2\xf1\xc7\
-\x36\x07\x77\xde\x13\x4d\x64\xd4\x7d\x38\x9d\x1b\x45\x64\xbc\x88\
-\xec\x73\xdf\x2c\x2d\x2c\x2c\x0e\x48\x66\x00\x59\xe1\x36\xa2\x99\
-\x58\x62\xb7\xdb\x8b\xf6\x95\xb8\xbb\xe2\x8a\x62\xdc\xbf\xb8\x79\
-\x6e\xc5\x73\x5c\x33\xe0\x1a\x1e\x39\xea\x91\x66\x15\x76\x01\x32\
-\x33\x07\xe0\xf5\x7a\xd8\xbe\x3d\x3c\x1d\xe4\x5e\x7b\xad\x0b\x99\
-\x99\x11\x8c\x1d\xbb\xb5\xfe\xc9\x16\x35\xa8\xa8\xa8\xa0\xa8\xa8\
-\xa8\xbe\x2d\x59\x8b\x6a\x34\x48\xdc\x89\x48\x3c\x76\xc7\x17\xd8\
-\x6c\xcf\xf3\x97\xab\x92\x59\xb2\xde\xce\xc4\x07\x8c\x48\xdb\x5b\
-\xa2\x63\x60\xc2\x24\xf8\x6d\xbd\x9d\x2b\xc6\x27\x61\xb3\x4d\xc1\
-\xe1\xf8\x4a\x44\xda\xed\xfd\xe2\x16\x16\xe1\x41\x44\x4e\x10\x91\
-\x31\x41\xc7\xed\x44\xe4\x3a\x11\xe9\x1a\x34\x76\x96\x88\x9c\x19\
-\x1e\x0b\x2d\x1a\x42\x9a\xe1\xbd\xd6\xba\x9f\xb8\xa5\xa3\xb8\x25\
-\xa2\x25\xd6\x56\x55\x1f\xf0\xc3\xa2\x45\x8b\xc2\xfe\x41\xb9\xa1\
-\x70\x03\x57\xcf\xba\x9a\x85\xb9\x0b\xf9\xf7\xd1\xff\xe6\xaa\xbe\
-\x57\x21\xb5\xf6\x85\xdf\x3b\xf2\xf3\x53\x70\xb9\x62\xc8\xcc\x6c\
-\xfd\x2d\xd1\xb5\x6b\xa3\x98\x3a\x35\x95\xf1\xe3\xb7\xd2\xad\x9b\
-\xd5\x6e\xac\x29\x6c\xdd\xba\x95\xc7\x1e\x7b\xcc\xda\xcf\x6e\x24\
-\xf5\xc6\xdc\x89\x48\x2f\x9c\xae\x2f\x88\x8f\xef\xc9\xdb\x9f\x08\
-\x23\x8e\x6a\x19\x4b\x3a\x76\x82\xc7\x9f\x15\xfe\x7a\xb5\x30\xe6\
-\xec\xe3\xc8\xcf\x5b\x20\x22\x67\xa8\xaa\x55\x14\xc8\x62\x9f\x41\
-\x44\x5e\xc4\x24\x0f\x85\xe2\x7f\xaa\x1a\x08\xb0\xfd\x2b\x70\x34\
-\xf0\x8e\xff\xb8\x33\xa6\x35\xcd\x5a\xaa\x52\xd9\x6f\x01\x3c\x98\
-\xb6\x34\x16\x07\x20\xfe\x26\xe5\xd7\x01\x57\x63\x8a\x93\xc6\x01\
-\x2a\x6e\xd9\x08\xbc\x05\x3c\xa2\xe9\x4d\x6e\xbb\x54\x03\xaf\xd7\
-\x3b\x6b\xfe\xfc\xf9\x27\x02\x95\x02\xf2\xbd\xf5\xef\x51\xe4\x29\
-\x22\xd2\x1e\xc9\x98\x5e\x63\x6a\xbf\xb8\x99\xf8\x66\xeb\x37\x3c\
-\xb8\xe8\x41\x7a\xc6\xf6\xe4\xa9\x63\x9f\x22\x25\x2a\xa5\xc5\xef\
-\x99\x90\xd0\x93\xd2\xd2\xd6\x17\x57\xff\xfe\x77\x4f\x7a\xf5\x2a\
-\xe6\xaf\x7f\xdd\x5f\x9c\xbf\xad\x4f\x41\x41\x01\xbb\x76\xed\x0a\
-\x7f\xba\x73\x1b\xa3\x4e\x71\x27\x22\x23\x71\x38\x3f\xa1\xff\x80\
-\x18\xde\xf9\xcc\x41\xe7\x56\xa8\x08\x30\x74\x38\xfc\xb0\xd8\xc9\
-\x9f\xcf\xe9\xca\xd2\xc5\x0b\x44\xe4\x3c\x55\xfd\xb6\xe5\x6f\x6c\
-\x61\xd1\x20\x12\x81\x18\xe0\xce\x10\xe7\x36\x34\x72\xad\xa7\x80\
-\xb0\x7b\x51\x2c\xc2\x83\xb8\x25\x19\xf8\x1c\x18\x5e\xfd\x14\xa6\
-\xfd\x90\x1b\x93\xad\xfb\x73\x33\xde\x76\xce\x8e\x1d\x3b\x22\xb2\
-\xb3\xb3\x49\x49\x31\xa2\xea\x95\x55\xaf\x90\x53\x9a\x43\xa2\x2b\
-\xb1\x45\xc5\x9d\x57\xbd\x3c\xbb\xfc\x59\xde\xfc\xe3\x4d\xce\xed\
-\x71\x2e\x77\x0e\xbe\x13\xa7\xad\x75\x1a\x66\xf4\xea\x75\x6a\x58\
-\xea\xdc\x4d\x9c\xb8\x96\xf2\x72\x1b\x36\x9b\x95\x21\xdb\x54\x0a\
-\x0b\x0b\xf1\xf9\x7c\x96\xb8\x6b\x24\xb5\x8a\x3b\x11\x19\x80\xc3\
-\xf1\x05\x67\x9e\x13\xc5\x0b\xaf\xdb\x88\x6c\xc5\x84\xb1\x4e\x29\
-\x30\xf3\x07\x27\xd7\x5f\x65\xe7\xc3\x19\x9f\x8a\xc8\x51\xaa\x5a\
-\x57\x4f\x38\x0b\x8b\xd6\xa4\x54\x55\xa7\xec\xed\x22\xaa\xfa\x59\
-\x5d\xe7\x45\xa4\x3b\x50\xac\x5a\x23\xdb\x2b\x70\x3e\x01\x23\x02\
-\x8a\x81\xcd\xaa\x5a\xc3\x35\x21\x22\x82\xc9\x22\x2b\x56\x55\xcb\
-\x7d\xd0\x48\xfc\x35\xee\x46\xa6\xa5\xa5\xbd\xdd\x02\xcb\x3f\x43\
-\x95\xb0\xcb\xc2\x34\x04\xff\x11\x53\xf5\x7e\x30\xf0\xf7\x50\x17\
-\xf9\xb7\x6d\x7b\x61\x5a\x14\x35\xe8\xdf\x54\xdc\xd2\x0e\x48\xa6\
-\x3b\x0b\x6d\x5b\x6c\xe5\x8b\x17\x2f\x76\x9d\x71\xc6\x19\x4d\x32\
-\xba\xb8\xa2\x98\xad\x45\x5b\xe9\x93\xd0\x67\x8f\xf1\x92\x8a\x12\
-\x32\x8b\x33\x49\x8e\x4c\x26\xde\xb5\x67\x0c\x76\x5e\x59\x1e\x13\
-\x7f\x9d\xc8\xb2\xbc\x65\xfc\x63\xe8\x3f\x5a\xbd\xed\x57\x6b\x53\
-\x52\x62\x27\x2a\xca\x4b\x4a\x4a\x79\xb8\x4d\x69\xf3\x14\x16\x16\
-\x6a\x45\x45\x85\x25\xee\x1a\x49\x48\x71\x27\x22\xed\x71\xba\x66\
-\x32\x74\x78\x04\x2f\xbd\x65\xc3\x15\x86\x3a\xc4\x11\x11\xf0\xfc\
-\x34\x1b\xd9\x59\x4e\x7e\x99\xf7\x85\x88\x0c\x55\xd5\xf0\x44\xc4\
-\x5a\x58\xb4\x00\x22\xf2\x3f\xc0\xa3\xaa\x67\xf9\x8f\xcf\x07\xde\
-\xc7\xd4\x55\x7a\x16\xe8\x13\x34\xef\x52\x55\xcd\xf3\x1f\x47\x01\
-\xaf\x02\x17\x41\x65\xa0\x52\x99\x88\x5c\xa7\xaa\xaf\xf8\xe7\xd8\
-\x80\x5b\xa9\x4a\xcb\x47\x44\x96\x03\x57\xab\xea\xaf\xad\xf2\x02\
-\xf7\x0f\x86\x00\x6f\x65\x64\x64\x7c\x98\x96\x96\xd6\x6c\xfb\x7a\
-\xfe\xc6\xe3\x01\x37\x59\x19\xa6\x61\x79\x70\x2a\xe5\x2a\xe0\x1d\
-\x7f\x85\xfd\xc0\x35\xfd\x31\xde\xde\x53\xf0\xc7\x4b\x8b\x5b\xb2\
-\x81\x3b\x34\x5d\xdf\x08\x9a\xf7\x38\x70\xbb\xff\xf0\x62\xcc\x96\
-\xef\x99\x80\xf0\x17\xb6\xca\x0c\xf9\x7d\xd1\xa2\x45\x83\x92\x0e\
-\x4f\x92\x9b\xe6\xde\x54\x79\xc3\xfc\xf2\x7c\x8e\xfa\xd0\x84\xdd\
-\x0c\x48\x1c\xc0\xd4\x13\xa7\xf2\xca\xaa\x57\x98\xf2\xbb\xf9\x1e\
-\x73\xdf\xe1\xf7\x31\x2b\x73\x16\x73\xb2\xe7\xe0\x53\x1f\x73\xcf\
-\x9b\x8b\x5d\xec\x2c\xde\xb1\x98\x27\x97\x3e\xc9\xaa\xfc\xaa\xee\
-\x4e\x3d\xe2\x7a\x70\xf7\xe0\xbb\x19\xd6\x61\x18\x00\x5b\x76\x6f\
-\x21\xa7\x24\x87\x17\x8e\x7f\x81\xfe\x89\xfd\xf7\xee\x97\xb7\x8f\
-\xb3\x7c\x79\x2c\xb7\xdf\xde\x8f\xa7\x9e\x5a\x49\xff\xfe\x45\xe1\
-\x36\xa7\xcd\x73\xce\x39\xe7\x48\x44\x44\x44\xd3\x2b\x59\x1f\xa0\
-\xd4\x48\xa8\x10\x11\x27\x0e\xc7\x87\x74\xec\xd8\x99\xb7\x3e\x72\
-\x84\x45\xd8\x05\x70\x38\xe0\xf5\xf7\x1d\x74\xea\x9c\x8c\xc3\xf9\
-\x89\x48\xcb\x04\x1a\x5b\x58\x34\x12\x9b\x88\xf4\x0c\xf1\x48\x68\
-\xa6\xf5\x5f\x01\x26\x60\x8a\x64\x9e\x8c\x69\x24\xfd\x46\xd0\xf9\
-\x3b\x30\xbd\x0e\xcf\xc5\xf4\x3e\xec\xe0\x7f\xbe\x21\x68\xce\xbd\
-\xc0\x43\xc0\x93\x98\x9a\x4a\x27\x62\xea\x41\xfd\x4f\xa4\x66\xb5\
-\x75\x8b\x5a\x09\x04\x72\x77\x6e\xe6\x75\x8f\x08\x7a\xfe\x56\x35\
-\x61\x57\x49\xa0\xaa\xbe\xb8\xa5\x17\x30\x1f\x23\xfc\x05\xe3\xe1\
-\xcb\x05\x52\x80\xd7\xc5\x2d\xe3\x6b\xb9\xcf\x54\xe0\x4f\x98\xd8\
-\x4e\x80\x54\xef\x9f\xbc\xa9\xbf\xce\xff\xb5\xd1\x2e\xa5\xa7\x97\
-\x3d\xcd\xac\xac\x59\xf8\x82\x3a\x22\xfd\x9a\xf3\x2b\x69\xdf\xa7\
-\xb1\x2a\x7f\x15\x0e\x9b\x83\xa1\x49\x43\x89\xb4\x47\xb2\xb1\x70\
-\x23\x37\xfc\x70\x03\x4b\x76\x98\x76\x9d\x83\x92\x06\x31\xfd\x94\
-\xe9\xfb\xbd\xb0\xcb\xca\x8a\xe0\x8e\x3b\xfa\x72\xc8\x21\xbb\xe9\
-\xd3\xc7\xaa\xea\xb5\xb7\x78\xbd\x5e\x22\x23\x23\xf1\x78\x3c\x79\
-\xf5\xcf\xb6\x08\x26\x54\xb6\xec\x44\x1c\xce\xa3\x79\xf7\x0b\x27\
-\x49\xfb\xc0\x67\x40\xbb\xf6\xf0\xee\xe7\x4e\x9c\x8e\x61\xc0\xe4\
-\x70\x9b\x63\x11\x1e\x44\xc4\x2e\x22\x9d\x45\x64\x98\x88\xfc\x49\
-\x44\xae\x16\x91\x4b\x44\xe4\x78\x11\xe9\x2b\x22\xcd\x90\xba\xdd\
-\x60\xda\x63\x0a\x54\x56\x7f\xdc\xd8\x4c\xeb\x3f\xaf\xaa\xef\xab\
-\x6a\xa1\x3f\xde\x74\x02\x70\x86\x88\x0c\xf6\x9f\xef\x06\xac\x51\
-\xd5\x4f\x55\x75\xa7\xaa\xee\x50\xd5\xff\xa9\xea\x2c\x30\x99\xb9\
-\x98\xca\xea\x6f\xa9\xea\x64\x55\x5d\xa3\xaa\xb3\x31\x1e\x9c\x78\
-\x4c\x31\x4e\x8b\x86\x11\x10\x77\xcd\x1d\x70\x3c\x20\xe8\x79\xbd\
-\xf5\xf6\x80\x27\x30\xb1\x9e\x00\xe7\x69\xba\x1e\x03\x74\x05\xd6\
-\xf9\xc7\x1e\x11\xb7\x44\x87\xb8\x6e\x3b\x70\x0c\x90\x84\xa9\x8a\
-\x0f\x31\x74\xc8\xdc\x9d\x19\xd1\xdb\xd1\x9b\x9f\x46\xff\x44\x72\
-\x64\x32\x00\x89\xae\x44\x7e\x1a\xfd\x13\x3f\x8d\xfe\x89\xa9\x27\
-\x4e\xad\xb1\x50\x51\x45\x11\xe3\xfa\x8f\xe3\xbd\x53\xdf\x63\xea\
-\x89\x53\xb1\x89\x8d\x87\x17\x3f\x8c\xa2\xd8\xc5\xce\x9b\xa3\xde\
-\x24\x63\x64\x06\xef\x9f\xf6\x3e\x4e\x9b\x13\x45\x79\xfc\xb7\xc7\
-\x2b\xaf\xb7\xef\x03\x15\xae\x7c\x3e\x1f\x3e\x5f\xcb\x84\xb9\x66\
-\x65\x45\x70\xcb\x2d\xfd\x49\x4e\x2e\xe7\xa1\x87\xfe\xc0\x6e\xb7\
-\xe2\xec\xf6\x16\x8f\xc7\x7c\x27\xd9\xbd\x7b\xf7\xba\x7a\xa6\x5a\
-\x54\x63\x8f\x6d\x59\x11\x49\xc1\x6e\xbf\x9b\x7b\x1f\x74\x30\xe0\
-\xb0\x70\xd9\x54\x93\xfe\x87\x82\x7b\xb2\x83\xfb\xdc\xb7\x89\xc8\
-\xb3\xaa\xba\x39\xdc\x26\x59\xb4\x0c\x22\xd2\x07\xe3\x95\x3a\x04\
-\xa7\xb3\x2b\x76\x7b\x57\x7c\xbe\x4e\x88\x24\xa2\x5a\x55\x2b\x21\
-\x36\xd6\x43\x59\x99\x1d\x8f\xa7\xf2\x0b\x8a\x38\x1c\x65\x38\x9c\
-\x39\x40\x16\x9e\xf2\x4d\xf8\x7c\x5b\x80\x6f\x80\xaf\x42\xc5\xa3\
-\xed\x05\xf9\xc0\x49\x21\xc6\x9b\x2b\xa6\xed\xcb\x6a\xc7\x33\xfd\
-\x3f\x87\x60\x2a\xa3\xcf\x00\xc6\x8b\xc8\x0f\xc0\xdb\xc0\xfb\xaa\
-\x1a\x5c\x2a\x60\x10\xa6\x37\xe1\x6e\x11\xb9\x2e\x84\x8d\x03\xb0\
-\x68\x28\x39\x98\xd6\x63\x85\xcd\xbc\x6e\x70\x9f\xcb\x86\x74\x0a\
-\x3a\xda\xff\xb3\x14\x38\x59\xdc\x72\xb2\xff\x38\xe0\x1e\x4a\x04\
-\x0e\xc1\x78\xf7\x82\x79\x53\xd3\xf5\x47\x00\x71\xcb\x0f\xf8\xff\
-\xed\x25\x51\x7c\x8b\x17\x2f\xb6\x9d\x74\x52\xa8\x3f\xe3\x5a\x0c\
-\xe8\x78\x34\xe3\xfa\x8f\x03\x20\x95\x54\xf2\xcb\xf2\xd9\x5a\x64\
-\x6a\xb7\xb5\x8f\x68\xcf\x7b\xeb\xab\x2a\xc6\x24\xb8\x12\xc8\x2d\
-\xcd\x65\xcd\xae\x35\x94\x78\x4b\x88\xb2\x87\xbf\xc9\x87\xc7\xe3\
-\xe1\xcd\x37\xdf\xe4\x84\x13\x4e\xa0\x67\xcf\x9e\xcd\xba\xf6\xef\
-\xbf\xc7\xf0\xf7\xbf\xf7\x23\x39\xb9\x9c\x27\x9f\x5c\x45\x54\x94\
-\xb7\x59\xd7\x3f\x50\x09\xf4\x95\xcd\xcf\xcf\xb7\x62\xee\x1b\xc9\
-\x9e\x6f\x2a\x22\x93\x48\xee\x64\x63\xdc\x0d\x61\x32\xa7\x0e\xae\
-\xb9\x09\x9e\xfb\xb7\xb0\x3d\xfb\x01\x4c\x03\x5d\x8b\xfd\x04\x11\
-\x19\x06\x9c\x4f\x44\xc4\x25\x40\x1f\x92\x3a\x94\x33\x6c\x84\x9d\
-\xce\xa9\x76\x52\x3a\x43\xa7\xce\xec\xf1\xb3\x63\x0a\xb8\x5c\x26\
-\x16\x69\x67\x1e\x6c\xcb\x82\xec\x2c\xd8\x96\x1d\xc1\xb6\xac\xae\
-\x64\x67\x75\x25\x3b\x6b\x38\xeb\xd6\x78\xf8\x6d\xd1\xcd\x88\x94\
-\x89\xc3\xf1\x05\x5e\xef\x7b\x98\x9e\xc6\xbb\xf6\xd2\xe4\x0a\x55\
-\x5d\xbc\x97\x6b\xd4\x45\xf5\x2d\x88\x40\x0f\xe6\x8e\x00\xaa\xfa\
-\x95\x88\x8c\xc4\x04\xdc\x3f\x02\x3c\x21\x22\xef\x02\x6e\x55\xdd\
-\x88\xf1\xec\x81\x11\x79\x7d\xaa\xad\xb5\x8c\xc6\x67\xf5\x1e\xb0\
-\xa4\xa5\xa5\xf9\x30\xbd\x65\x9b\x9b\xdf\x83\x9e\x0f\xa9\x6b\xa2\
-\x3f\xee\x2e\xc9\x7f\x18\x89\x29\xa1\x13\x8a\x83\xa9\x29\xee\xe6\
-\x05\x3d\xaf\x0c\x00\xb3\x45\xd9\xd6\x2e\x5a\xb4\xa8\x4f\x63\xc4\
-\xdd\x91\x9d\x8e\xdc\xe3\x38\xb7\xac\x2a\xc6\x3d\xa7\x34\x87\xe9\
-\x6b\x6b\xb6\xdf\x55\x94\xac\xe2\x2c\x0e\x8e\x3b\xb8\xc1\xf7\x69\
-\x29\x9c\x4e\x27\xf1\xf1\xf1\x64\x66\x66\x36\xab\xb8\xfb\xe1\x87\
-\x76\xdc\x7b\x6f\x6f\x06\x0f\x2e\x24\x3d\x7d\x8d\x25\xec\x9a\x91\
-\x9d\x3b\x77\x72\xeb\xad\xb7\x52\x5e\x5e\x5e\xfd\xef\xda\xa2\x1e\
-\x2a\xc5\x9d\x88\xf4\x45\x64\x3c\x93\xff\xcf\x4e\xc4\x3e\x18\xda\
-\x16\x19\x09\xf7\xa5\x3b\x49\xbb\xea\x0a\x11\x79\x4c\x55\x97\x85\
-\xdb\x24\x8b\xa6\x23\x22\x47\x03\x97\xe0\x72\x5d\x02\xa4\x90\xda\
-\xad\x9c\x0b\x2e\x71\x71\xf6\xf9\x70\xc4\xd1\x2e\xa4\x81\x05\x4d\
-\xdb\xb5\x37\x8f\xfe\x87\xd6\xb8\x05\xe0\x62\x47\x2e\x7c\xfe\x51\
-\x24\x1f\xbd\x7b\x0e\xb3\xbe\x39\x0f\x9f\x57\xc5\xe5\x9a\xed\xef\
-\x69\xfc\x56\x33\x08\xbd\x96\xa0\x0b\xb0\x26\xe8\x38\x10\xef\xb5\
-\x29\x30\xa0\xaa\x3f\x00\x3f\x88\x48\x0c\xc6\xd3\xf9\x34\xc6\xbb\
-\x74\x2d\x55\x5b\x75\xf7\xab\xea\x37\x2d\x6f\xae\x45\x13\xf8\x1e\
-\x50\xcc\xdf\xe9\x05\xe2\x96\x23\x34\x5d\x7f\x09\x9e\xe0\xdf\x66\
-\x75\x68\xba\x16\x88\x5b\xd6\x01\xbd\x31\x02\xed\x78\xaa\x3c\x76\
-\xc1\x84\x6a\x81\x10\xdc\x77\xb2\x72\x3f\xd2\x1b\xe1\x5d\x38\x7f\
-\xfe\xfc\xee\x40\x84\x4d\x8c\xf3\xdb\xab\x75\x8b\x92\x04\xd7\x9e\
-\x21\xa5\xdd\x62\xba\x61\x13\x1b\x3e\xf5\xd1\x3d\xb6\x3b\x8f\x1e\
-\xf9\x68\xc8\xeb\xba\xc4\x74\xa9\x73\xdd\xd6\xa4\x4b\x97\x2e\x6c\
-\xde\xdc\x7c\x1b\x3f\xe5\xe5\x36\x1e\x7b\xac\x27\x27\x9f\xbc\x03\
-\xb7\x7b\xbd\xb5\x15\xdb\xcc\x6c\xdd\xba\x15\x8f\xc7\xa3\xc0\xc6\
-\x70\xdb\xd2\xd6\xa8\x8a\xb9\x13\xb9\x8b\x5e\x7d\xbc\x8c\xb9\x2c\
-\x8c\xe6\xd4\xc3\x98\xbf\x42\xdf\xfe\x15\x88\x84\x2c\x11\x60\xb1\
-\xef\x23\x22\x7d\xc4\xe9\xfc\x04\x98\x47\xbf\x01\x69\xdc\xee\x4e\
-\x61\xee\x12\x58\xbe\xc9\xc5\x03\x8f\xc2\x91\xc7\xd0\x60\x61\xd7\
-\x10\x92\x3a\xc0\xe5\x7f\x83\x77\xbf\x70\xb0\x61\x87\x8d\x17\xdf\
-\xb4\x73\xd6\xe8\x13\x89\x8c\x7a\x06\xa7\x73\x83\xbf\x6b\x44\xf8\
-\x83\x81\xf6\xa4\xfa\x7f\xc2\xcb\x80\x0a\xe0\x27\xa8\x2c\x6f\x02\
-\x80\xaa\x16\xa9\xea\x1b\x98\xed\xe7\xc0\x56\xdd\x12\x60\x1b\x70\
-\x7d\xa8\xc5\x83\xaf\xb7\x08\x0f\x9a\xae\x0b\x81\xff\xf8\x0f\x6d\
-\xc0\x77\xe2\x96\xfb\xc4\x2d\x27\x8b\x5b\xfe\x24\x6e\xb9\x17\x23\
-\xd2\x03\x5b\xe8\x9f\xfb\x7f\xc6\x00\x97\x63\xca\xa0\xac\xc4\xc4\
-\x04\x0e\x02\xfe\xa5\xe9\xda\xf0\xad\xe3\x76\x2c\x5d\xbf\x7e\xbd\
-\x6b\xf7\xee\xdd\x24\x45\x1a\xa7\x60\xa1\xa7\x90\xe9\x6b\xa7\xb3\
-\x30\x77\x61\xe5\x76\x6b\x5d\x44\xd8\x23\x38\xbc\xc3\xe1\x00\x6c\
-\xda\xbd\x89\x5f\x72\x7e\xa1\x43\x54\x07\x7a\xc4\xf5\x20\x21\x22\
-\x81\x05\xb9\x0b\x78\x77\xfd\xbb\xad\x56\xcb\xae\x21\x74\xe9\xd2\
-\x85\xfc\xfc\x7c\x8a\x8b\xf7\x2e\xd9\xa1\xb8\xd8\xbc\x65\xb8\x5c\
-\x3e\x5e\x7a\x69\x19\xf7\xdc\xb3\xce\x12\x76\x2d\xc0\xd6\xad\x5b\
-\x71\x38\x1c\xdb\x54\xd5\xaa\x29\xd3\x48\x1c\xe0\x2f\x9b\xe0\x70\
-\x5e\xc0\x25\x97\x37\xdc\x63\x12\x0e\x6c\x36\xf8\xeb\x58\x27\xf7\
-\xff\xe3\x7c\x11\x19\xa7\x5a\xf7\x57\x4d\x11\x39\x18\x93\x5d\x06\
-\xe6\x5b\xf2\x4e\x8c\xf7\x63\x63\xa8\x9a\x5f\x22\x92\x88\x09\x6e\
-\xbe\x51\x55\xdf\x6d\x66\xeb\x0f\x68\xfc\xa5\x39\x1e\xc0\x66\xbb\
-\x9b\x83\xfb\xf8\x78\xe4\x69\x38\xf1\x94\xd6\x4d\xc5\x8e\x8d\x83\
-\x0b\x2e\x81\x0b\x2e\xb1\xb1\x2b\x1f\x1e\x79\x20\x91\xe7\x9f\x7e\
-\x16\xb1\xdd\x2a\x22\x63\x1a\x51\x4b\x31\x46\x44\xfe\x1d\x62\x3c\
-\x47\x55\xff\xd5\x0c\x96\x8e\x14\x91\x47\x80\xaf\x80\x11\x98\x72\
-\x26\x53\xfc\x5b\xae\x00\xef\x89\xc8\x26\xcc\x96\x5b\xbe\x7f\xce\
-\x68\x60\x0a\x18\xc1\x27\x22\x37\x00\xd3\x45\xe4\x33\xe0\x4d\xcc\
-\x56\x6f\x37\x4c\x56\xed\x74\x60\x5a\x33\xd8\x79\x40\x90\x91\x91\
-\x31\x18\xe8\x99\x96\x96\xf6\x51\x33\x2f\xed\x06\x92\x81\x4b\x31\
-\x31\x92\x93\xea\x98\x7b\x0f\xa6\x9c\x49\x1f\x4c\x89\x9b\x5b\xc4\
-\x2d\x79\x54\x6d\xd7\x36\xae\x4c\x54\x1f\x96\xe9\x2c\xe5\xb7\xdf\
-\x7e\xe3\x98\x4e\xc7\xb0\x62\xe7\x0a\x00\x9e\x5c\xfa\x24\x00\x97\
-\xf5\xbe\x8c\x9b\x0e\xbb\xa9\xae\x15\x00\x98\x30\x64\x02\x57\xcd\
-\xba\x8a\x42\x4f\x21\x8f\xff\xf6\x38\x4f\x2d\x7b\x8a\x48\x7b\x24\
-\xbb\x3d\x26\x56\x6a\x78\x72\xf5\xfa\xcc\xe1\xa5\x73\xe7\xce\xd8\
-\x6c\x36\x32\x33\x33\xe9\xdd\xbb\x77\xa3\xaf\x57\x85\xf7\xdf\xef\
-\xc4\x94\x29\xdd\xc8\xc8\x58\x41\xef\xde\xc5\x24\x25\x79\xea\xbf\
-\xd0\xa2\x49\xf8\x5b\xc6\xfd\x11\x6e\x3b\xda\x22\x81\x6d\xd9\xa3\
-\xa9\xf0\xb4\xe3\xec\xd1\x61\x35\xa6\x41\x9c\x35\x1a\xee\xbd\x33\
-\x01\x38\x0e\x98\x5d\xcf\xec\x61\x98\x96\x4f\xdb\x30\x81\xc8\x31\
-\x98\xb2\x11\x88\xc8\x57\xc0\x44\xab\xe6\x57\xcb\x23\x22\xd1\xd8\
-\xed\x6f\x21\x72\x36\x0f\x3f\x65\xe3\xea\x6b\xed\xd8\xc3\xec\x2c\
-\x4b\x48\x84\x7f\x3d\x0e\xe3\xae\xb7\x71\xed\x15\xbd\x58\xf0\xf3\
-\x8f\x22\x72\x81\xaa\x56\x4f\x66\xa8\xce\x72\xcc\xdf\x50\xa8\x38\
-\xa9\x2d\x41\xcf\x57\xb1\x67\x4c\x6b\x31\xe6\xef\x35\x38\x9e\x6e\
-\x09\x10\xea\x0b\xca\xc5\x98\x72\x27\x2f\x00\x25\x98\x92\x26\xc1\
-\x99\xe2\x33\x31\xde\xbc\x31\x18\x51\x90\x09\x3c\x08\x3c\x1c\x98\
-\xa0\xaa\xef\xf9\xb7\xbe\xef\xf3\x9f\x4b\xc0\x24\x53\xcc\x66\xcf\
-\x38\x2c\x8b\xfa\x39\x07\xd3\x4e\xae\x59\xc5\x9d\xa6\x6b\x31\xf0\
-\x17\x71\xcb\x8b\x98\x4c\xe6\xfe\xf8\x8b\x13\x63\xb6\xe5\xdf\x01\
-\x7e\xf3\xcf\x2d\x14\xb7\x0c\xc6\xd4\xaf\x3b\x0b\x13\x5f\x67\x03\
-\x96\x02\x0b\x80\x8f\x83\x96\x5e\x4b\xd5\x7b\xe3\xce\x90\xe3\x49\
-\x6c\x72\x3a\x9d\xab\x16\x2f\x5e\xdc\x7f\xfc\x75\xe3\x89\x71\xc6\
-\xb0\x64\xc7\x12\x0a\xca\x0b\x00\x48\x8d\x31\xc9\xc1\x29\xd1\x29\
-\x0c\xed\x30\x14\x80\x76\xae\x9a\xed\xbe\x53\x63\x52\x99\x71\xea\
-\x0c\xa6\xae\x9a\xca\x92\x1d\x4b\xc8\x2c\xce\xc4\x65\x73\x91\x1a\
-\x93\xca\xa0\xf6\x83\x38\x39\xf5\xe4\x1a\xd7\x84\x13\x87\xc3\x41\
-\xc7\x8e\x1d\x9b\x24\xee\x7e\xfc\x31\x91\x17\x5f\x4c\x65\xe5\xca\
-\x18\xae\xbc\x32\x93\x9e\x3d\x4b\x5a\xc8\x4a\x8b\x00\x03\x07\x0e\
-\xd4\xc4\xc4\xc4\xe6\x2a\x31\x75\x40\x21\xaa\x8a\x88\xfc\x1f\x5d\
-\xbb\xdf\xc6\xb2\x8d\xfb\x8e\xff\xbc\x2e\x0e\xef\x57\xce\xda\xd5\
-\xcf\xa9\xea\x6d\x75\x4d\x13\x91\x8b\x30\x99\x85\xa7\x04\x62\x8f\
-\xfc\x25\x33\x4e\x04\xfe\x0f\xd3\xcb\x71\xa4\xaa\x5a\x1f\x76\x2d\
-\x84\x88\x08\x4e\xe7\x77\xb8\x22\x8e\x65\xfa\x27\x0e\x8e\x3b\x31\
-\xdc\x26\xd5\xa4\xac\x0c\xae\xbd\xdc\xc7\x47\xef\x2a\xaa\xa7\xaa\
-\xea\x77\xe1\x30\x23\xa8\x88\x71\x0f\x55\xdd\x54\xdf\x7c\x8b\xc6\
-\x23\x22\x43\x80\x45\xc0\x00\x55\x6d\x48\x09\x12\x32\x32\x32\xc6\
-\x01\x4f\xa6\xa5\xa5\xb5\x66\xb9\x9d\x16\x47\x44\x9e\x19\x30\x60\
-\xc0\xb8\xa9\x53\xa7\xee\x83\x41\xd6\xcd\x43\x56\x56\x04\xe7\x9f\
-\x3f\x84\x17\x5f\x5c\x5e\xd9\x7e\x6c\xe1\xc2\x85\xac\x5e\xbd\x9a\
-\x3f\xff\xb9\x61\x79\x32\xf3\xe6\x19\x51\xb7\x62\x45\x2c\xc7\x1d\
-\xb7\x93\x6b\xae\xd9\x42\xdf\xbe\x56\x0d\xbb\xd6\xe0\xdb\x6f\xbf\
-\xd5\xb5\x6b\xd7\x7e\xfd\xe2\x8b\x2f\x9e\x56\xff\x6c\x8b\x60\x4c\
-\xcc\x5d\x44\xe4\xf9\x9c\x77\x51\xdb\x10\x76\x00\xa3\x2f\x72\xe1\
-\x72\x9d\xdf\x94\x4b\xfd\xb5\xc3\x3e\xc1\xd4\x7e\xca\x05\x5e\x12\
-\x31\x55\xe0\x45\x24\x4a\x44\xee\x13\x91\x41\x81\xf9\x22\x12\x29\
-\x22\xd7\x8a\xc8\xab\x22\xf2\x81\x88\x4c\x11\x91\xbf\x06\xaf\x29\
-\x22\x0e\x11\xb9\x41\x44\xde\x14\x91\x07\x45\xe4\x50\x11\x39\x51\
-\x44\xee\x0e\x9a\xd3\xc3\xbf\x76\x4a\xb5\x6b\x07\xfb\xc7\x23\xab\
-\x8d\xf7\x10\x91\x89\x22\x32\x5d\x44\xfe\x2d\x22\xc7\x37\xe5\xf5\
-\xee\x03\xdc\x80\xea\x48\xbe\x98\xb3\x6f\x0a\x3b\x30\xdd\x50\xa6\
-\x4e\xb7\x71\xde\x45\x82\xd3\x35\x4d\x44\x62\xc3\x6d\x92\xc5\x3e\
-\x45\x36\x10\x9b\x91\x91\xb1\x5f\x89\x3b\x60\xce\xea\xd5\xab\x9d\
-\x65\x65\x65\xf5\xcf\xdc\x8f\x48\x4d\x4d\x65\xf7\xee\xdd\x14\x14\
-\x14\xd4\x39\xaf\xa8\xc8\xce\x15\x57\x0c\xe4\xef\x7f\xef\x47\xc7\
-\x8e\x1e\x5e\x7b\x6d\x19\x8f\x3d\xb6\xda\x12\x76\xad\x84\xcf\xe7\
-\x23\x26\x26\x46\x2a\x2a\x2a\xac\x6d\xd9\x26\x60\xc4\x5d\x85\xa7\
-\x07\xfd\xda\x50\xe9\xab\xbe\x03\xc0\xe3\xe9\xba\x37\x81\xe1\xaa\
-\x9a\x8f\x29\x0c\xda\x1f\x53\x1f\x0a\x20\x0a\x13\xf7\x32\x38\x68\
-\xea\x27\x98\x6d\xb1\x48\x60\x35\x10\x47\xd0\xf6\x97\x88\x38\x30\
-\xb1\x51\xff\x87\xd9\x7a\x4b\x06\x3e\xc3\x6c\xab\xdd\x1d\xb4\x4e\
-\x4f\xff\xda\x7b\x88\x3b\xcc\xf6\xde\x24\xff\xfa\x81\x35\xcf\xc5\
-\x6c\xb7\xdc\x02\x14\x00\xa3\x80\x59\xc1\x62\xb1\x2d\x20\x22\xc9\
-\xd8\xed\x8f\x72\xc7\x3d\x36\x06\x0d\x0d\xb7\x39\x75\x23\x02\x8f\
-\x3f\x67\x23\x3a\xba\x23\xa6\xbb\x83\x85\x45\x80\x55\xc0\x8b\x34\
-\xac\x1e\x5d\x5b\xe2\x7b\xaf\xd7\x6b\x5b\xbe\x7c\x79\xb8\xed\x68\
-\x55\x92\x93\x93\x71\x3a\x9d\x81\x78\xae\x4a\x0a\x0b\x1d\xbc\xf3\
-\x4e\x0a\xbf\xfe\x6a\xfa\xe2\xc6\xc4\x78\x39\xe6\x98\x9d\x4c\x9b\
-\xb6\x94\x87\x1f\x5e\x4d\xdf\xbe\x56\x2b\xb1\xd6\x24\x33\x33\x13\
-\x11\xc1\xe7\xf3\x59\x35\xee\x9a\x80\xc3\x5f\xcd\xde\x45\xe7\xe6\
-\x2e\xc0\xde\x82\x74\x49\x05\x55\x3b\x46\x48\xed\x4d\xbf\xd9\xc0\
-\xbb\x5a\x7f\x4c\xfc\xd3\x1e\x88\x48\x37\x4c\x1f\xc7\x2b\x54\x75\
-\x5a\xd0\x78\xb0\x97\xf3\x4a\xcc\x36\xef\xa8\xc0\x76\x9e\x7f\xeb\
-\x67\x01\xd0\xe8\x32\x1b\x22\x12\x8f\x89\xb5\xfa\x0a\xb8\x44\x55\
-\x2b\xfc\xe3\x93\x81\xfb\x45\xe4\x5d\xd5\xd0\xad\x8a\xf6\x41\x8e\
-\xc5\xe7\x8b\xe4\xfa\x5b\xc3\x6d\x47\xc3\x48\xea\x00\x97\x5d\xed\
-\xe4\xa5\xe7\xce\x61\x4f\x61\xde\x2a\xa8\xea\x07\x54\xf5\x8a\xb5\
-\xd8\x47\x48\x4b\x4b\x5b\x03\xd4\xd6\xde\xab\xcd\xa2\xaa\x59\x2e\
-\x97\x6b\xd3\xa2\x45\x8b\xba\x0f\x1b\x36\x2c\xdc\xe6\xb4\x1a\x36\
-\x9b\x8d\x94\x94\x14\xb6\x6e\xdd\x4a\xff\xfe\x55\xed\xd0\x0a\x0a\
-\xec\x3c\xff\x7c\x57\xae\xb9\x66\x0b\x23\x46\x18\xaf\xde\x75\xd7\
-\x6d\xa9\x6d\x19\x8b\x16\x26\x2b\x2b\x8b\x5b\x6f\xbd\x95\xa4\xa4\
-\xa4\xf7\xc3\x6d\x4b\x5b\xc4\x86\xa9\xa9\x05\xa9\x5d\xc3\x6b\x49\
-\x63\xe8\x52\x69\x6b\x75\x2f\x58\x63\xd9\x16\x58\xb1\x96\xf3\xdb\
-\x31\x01\xc9\xa7\x88\x48\x65\x6f\x49\x55\x0d\x4e\x8f\x1a\x03\xfc\
-\x1c\x1c\xa7\xe5\x2f\x70\xfb\x55\x13\x6d\x3a\x0b\x53\xac\xf6\xf1\
-\x80\xb0\xf3\xf3\x22\xe0\xc4\x08\xc9\xb6\xc2\x91\x1c\xd4\xab\x9c\
-\xf8\x36\x14\x0f\x3b\xe2\x28\x28\x2f\xef\x27\x12\xb2\x95\x93\x85\
-\xc5\x7e\x85\xc7\xe3\xf9\x7a\xfe\xfc\xf9\x07\x5c\xba\xe7\xe0\xc1\
-\x83\x39\xe4\x90\x43\xf6\x18\x4b\x4d\x2d\x63\xe6\xcc\x05\x5c\x72\
-\x49\x76\x98\xac\xb2\x08\x66\xeb\xd6\xad\x88\x48\xd1\xf6\xed\xdb\
-\xf7\xc6\x81\x73\xc0\x52\x25\xee\xda\x9a\xe7\xce\xb0\xb7\xcd\xbc\
-\x03\x95\xfc\xd7\x87\x3a\xa9\xaa\x65\x98\x72\x05\x67\x01\x5b\x44\
-\xe4\x07\x11\xb9\x5c\x44\x82\x4b\x78\x1c\x8c\xd9\xae\xad\xce\x8a\
-\x26\xda\x14\x78\xc7\x79\x5f\x44\xb2\x03\x0f\x20\x90\xd5\x7b\x50\
-\x13\xd7\x0d\x07\xed\xe8\x94\x12\xaa\x7f\xf1\xbe\x4b\x72\x47\x50\
-\xb5\x61\x7a\xb0\x5a\x58\xec\xef\xcc\x59\xbe\x7c\xb9\xcd\xeb\x3d\
-\xb0\xba\x2a\xa4\xa4\xa4\xd0\xb9\x73\xcd\x8f\x0f\xa7\xd3\xaa\x55\
-\xb7\xaf\xb0\x75\xeb\x56\xec\x76\xbb\x55\xbc\xb8\x89\x38\x00\x13\
-\x3c\x1e\xd3\x86\x62\xc8\x23\x22\xc1\x66\x53\x7c\xbe\xbd\xf5\xae\
-\x1c\xe1\xff\x59\x6b\xd6\x9c\xaa\x3e\x2f\x22\xd3\x80\x0b\x80\xf3\
-\x31\x1e\xb4\x7b\x45\xa4\xbf\xaa\xfa\x30\x25\x56\x42\xd5\x6b\xab\
-\x2d\x03\xad\xba\xd8\xa9\x1e\xa4\x5d\xe1\x7f\x5c\x48\xe8\x32\x19\
-\x99\x21\xc6\x2c\x2c\x2c\x5a\x90\x8c\x8c\x8c\x43\x81\xd3\xd2\xd2\
-\xd2\x9e\x0c\xb7\x2d\xcd\xcc\xf7\xe5\xe5\xe5\xf6\x95\x2b\x57\x72\
-\xe8\xa1\x35\xba\xbc\x58\x58\x84\x8d\xdc\xdc\x5c\xad\xa8\xa8\x68\
-\x50\x46\xbb\x45\x4d\x6c\x04\x9a\x9d\x67\xb7\x21\xcd\x90\xb3\x1d\
-\x7c\x3e\xa1\x6a\x5b\xb5\xd1\x88\x48\x4f\xe0\x26\xe0\x07\x4c\xc0\
-\x74\xad\xa8\x6a\xb1\xaa\xbe\xae\xaa\x17\x62\x8a\x22\xf7\x01\x4e\
-\xf7\x9f\x5e\x03\x0c\x09\x91\xdc\x31\xa2\xba\xd5\xfe\x9f\x83\xaa\
-\x8d\x9f\x53\xed\x78\x29\xfe\xc0\x6d\x55\xfd\x29\xc4\xc3\x2a\x91\
-\x61\x61\xd1\xfa\xf4\x03\x1e\xcb\xc8\xc8\x88\x0a\xb7\x21\xcd\x89\
-\xaa\xae\x73\x3a\x9d\xdb\x17\x2d\x5a\x14\x6e\x53\x2c\x2c\xf6\xe0\
-\xd4\x53\x4f\x95\x0b\x2f\xbc\x70\x7f\xcb\x50\x6f\x35\x6c\x04\x3c\
-\x41\x99\xf5\xb7\x9b\xd9\x67\xc8\xaa\xb4\xb5\xa1\xc1\x11\x2e\x7f\
-\x49\x93\x24\x11\x19\x21\x22\x77\x62\x6a\x5d\xf9\x80\xbf\xa9\x6a\
-\x48\x5f\xbc\x88\x1c\x24\x22\xa3\xaa\x09\xb7\xee\xfe\x9f\x81\x3e\
-\x8d\x53\x30\x6f\xfc\x37\x06\x5d\x77\x29\x35\xc5\xdd\x7a\x4c\x37\
-\x81\x31\x22\xd2\x4e\x44\x9c\xfe\x3a\x7c\xd5\x3b\x77\x7f\x82\x11\
-\x78\xcf\xf9\x3b\x6c\x04\xd6\x14\x11\x39\x3d\x38\xf6\xcf\xa2\xf5\
-\x11\x91\x3f\xfb\xff\xdd\x2c\x0e\x2c\x96\x62\xde\x2f\xf7\x3b\xf7\
-\x56\x45\x45\xc5\xb7\x0b\x17\x2e\xac\xa8\x7f\xa6\x85\x45\xeb\xe0\
-\xf1\x78\x88\x8c\x8c\x24\x2f\x2f\x6f\x69\xb8\x6d\x69\xab\x04\x3c\
-\x77\x1a\x24\x98\xf6\x7d\xaa\x6c\xad\xd1\x42\xac\x16\x3e\xc7\x54\
-\xfa\xcf\x05\x7e\xc1\xb4\xf2\x99\x06\xf4\x56\xd5\x50\xf1\x72\x01\
-\x7a\x60\x7a\x76\x6e\x13\x91\xb9\x22\xb2\x16\x78\x0d\xd3\xbe\xe9\
-\x2b\x00\x55\xfd\x1f\xf0\x18\xf0\xb4\x88\x2c\x13\x91\x25\xfe\xf5\
-\xff\x1b\xbc\x90\xaa\x96\x00\x13\x30\x1e\xbf\x4c\x4c\x93\xef\xc7\
-\x09\x2a\xab\xe2\x9f\xe7\xc1\x24\x69\x54\x00\x2b\xfd\x6b\x2e\xf0\
-\xdb\xfe\x31\x90\xd8\xc0\xd7\x6c\xd1\x32\x8c\xc3\x64\x48\x5b\x1c\
-\x58\xac\xc5\xbc\x87\x1c\x16\x6e\x43\x9a\x1b\x55\x9d\xb3\x78\xf1\
-\xe2\xda\xbe\xe3\xee\xb7\xf8\x7c\x3e\x96\x2c\x59\xc2\xce\x9d\x3b\
-\xeb\x9f\x6c\xd1\xaa\xe4\xe6\xe6\x02\xb0\x61\xc3\x86\xb9\x61\x36\
-\xa5\xcd\xe2\x50\x55\x8f\xb8\x22\xf2\xd9\xba\xb9\x66\x6f\x99\x7d\
-\x95\x2d\x9b\xc1\xe1\x28\x52\x8f\xa7\xbe\xfe\x2f\xb3\xa9\xf2\x8c\
-\x55\xf6\x96\xf5\xd7\xb8\x0b\x45\x81\x7f\xfe\xef\x00\xaa\x3a\xcb\
-\xef\x3d\x3b\x0a\xe8\x04\x14\x01\x8b\x54\x75\x7e\xf0\x45\xaa\x7a\
-\xa7\x88\xbc\x09\x1c\x09\x6c\xc0\x6c\xf5\xde\x59\x7d\x71\x7f\xfc\
-\xde\xaf\xfe\x79\x5b\xfd\xf6\x45\x02\xdf\x02\xbb\x83\xe6\xad\x14\
-\x91\x23\x31\x2d\xd6\xfa\x62\xb2\x64\x37\x01\xb3\x55\xb5\xee\xca\
-\x9b\x16\xfb\x04\xfe\x6d\xff\x72\x55\xcd\x0c\x1a\xeb\x08\xb4\x03\
-\xfe\x68\x40\x5f\xe4\x83\x80\x22\x55\x0d\x99\x29\xe6\xf7\x26\xf7\
-\x06\x32\x55\xb5\x59\x0a\x70\x89\x88\x1d\x13\x72\xb0\x5d\x55\xf3\
-\xea\x98\xe7\xf2\xdf\x7b\x93\xaa\xee\xae\x6d\xde\xfe\x44\x5a\x5a\
-\x9a\x2f\x23\x23\x63\x22\x55\xe5\x93\xf6\x27\xe6\x14\x17\x17\x3b\
-\xd7\xae\x5d\xdb\xa4\x7e\xab\x6d\x15\x9b\xcd\xc6\xef\xbf\xff\x8e\
-\xcf\xe7\xa3\x5d\xbb\xb6\xf3\xf1\x77\x20\xb0\x65\xcb\x16\x72\x73\
-\x73\x59\xbb\x76\xed\xf7\xe1\xb6\xa5\xad\x62\x82\xfb\xd5\x37\x97\
-\xd9\xdf\xb4\x9d\x74\x29\x63\x6b\xbd\x2d\xc3\x54\x35\x47\x55\x67\
-\xf9\x1f\xb3\x55\xf5\xb7\x3a\x84\x1d\xaa\x5a\xe1\x9f\xbb\x2d\x68\
-\x6c\xbd\xaa\xbe\xa5\xaa\xff\x56\xd5\x17\xaa\x0b\xbb\xa0\x79\x8b\
-\x54\x75\x8a\xaa\xce\xac\xeb\x03\x4f\x55\x17\xaa\x6a\x86\xaa\x7e\
-\xac\xaa\xbb\x54\x75\x9b\xff\x9e\x15\xd5\xe6\x05\x6c\xf9\xaf\xaa\
-\x3e\xab\xaa\x9f\x58\xc2\x3c\xdd\x52\x0d\x00\x00\x20\x00\x49\x44\
-\x41\x54\x2e\xbc\x88\xc8\x7c\xe0\x64\xe0\x6c\x11\x51\xff\x63\x86\
-\xff\xdc\x44\x11\xd9\x2d\x22\x47\x8b\xc8\x66\xcc\x36\xfc\xbf\xfc\
-\xe7\x86\x8b\xc8\x72\x4c\x8c\xe8\x4a\xa0\x40\x44\xee\x08\xde\xee\
-\x17\x91\xdb\x44\xc4\x27\x22\x43\x44\x64\x1d\xb0\x0e\xe3\x31\xfe\
-\xb4\x7a\xc7\x0c\x11\x19\x85\xf9\x72\xb0\x1a\xc8\xf7\x77\x4f\xb9\
-\x57\x44\x4a\x82\xe6\x1c\xe9\xb7\xef\xa8\x6a\xd7\x5e\xe2\x1f\x4f\
-\x09\x1a\x8b\x14\x91\xc7\x80\x42\xcc\x17\x9b\x1d\x22\x32\x3b\x38\
-\x2c\xc0\x3f\xaf\xbd\x88\xbc\x81\xf9\x22\xb2\x1c\xd8\x25\x22\x33\
-\x44\x24\x89\x03\x80\xb4\xb4\xb4\x27\xd3\xd2\xd2\xf6\xc7\x5e\xd4\
-\x2b\x1c\x0e\xc7\xae\xc5\x8b\x17\x87\xdb\x8e\x56\xa7\x4b\x97\x2e\
-\x35\x8a\x19\x5b\x84\x9f\xe5\xcb\x97\xf3\xd0\x43\x0f\x65\xab\x6a\
-\x4e\xfd\xb3\x2d\x42\xe1\xef\x50\x51\xf1\x01\xb3\xbe\x81\xa2\x36\
-\xf0\x25\xbc\xb4\x14\xbe\xfe\x42\xa9\xa8\x78\x2f\xdc\xa6\x58\x1c\
-\x70\x9c\x83\xf9\x52\xf1\x0d\xa6\x24\xcd\x41\xc0\xf5\x41\xe7\x23\
-\x30\xdb\xfd\xff\xc5\x34\x80\x7f\x48\x44\x3a\x60\x3c\xb3\xbb\x30\
-\x9d\x4f\x92\x81\x47\x80\x47\xab\x5d\x0b\xa6\x80\xf1\x6b\xc0\x53\
-\xfe\xeb\xef\x06\xfe\x84\xe9\x54\x62\x26\x88\xf4\x00\xbe\xc0\x94\
-\xc6\xe9\x81\x29\xe7\xb3\x1b\xf8\xfb\x5e\xbc\xae\x97\x81\x2b\x30\
-\xe1\x04\xdd\x81\xd1\x98\x2c\xee\xcf\xa5\xaa\x35\x9f\x00\x5f\x62\
-\x32\xcc\xaf\xc7\x94\x21\x1a\x0b\x0c\xf7\xbf\x66\x8b\x36\x8a\xaa\
-\xaa\xcf\xe7\x9b\xb3\x70\xe1\xc2\xb6\xf3\x05\xbf\x99\xe8\xd2\xa5\
-\x0b\xdb\xb7\x6f\xa7\xa2\xc2\x0a\x39\xdc\x97\x58\xb1\x62\x85\xcf\
-\xeb\xf5\xfe\x18\x6e\x3b\xda\x32\x81\x76\x3a\x9f\x52\xe1\xb1\xf1\
-\xf5\x4c\x38\x6f\x1f\x8f\x15\x9f\xf5\x35\x94\x96\xda\x81\x8f\xc2\
-\x6d\x4a\x3d\xfc\x88\xd9\x4e\x3d\xb0\xc9\xce\xb2\xf1\xf2\x94\x70\
-\x5b\xd1\x70\xfe\xa8\x3d\x04\x53\x55\xb3\xfc\xde\xb1\x12\x55\xdd\
-\x10\x62\x8a\x03\x78\x5a\x55\x9f\x0e\x0c\xf8\x3b\x8b\x44\x00\x17\
-\xab\x6a\x20\x58\x74\xb2\xdf\xa3\xf6\x4f\xe0\xd9\x6a\x6b\x4c\x51\
-\xd5\xe7\xfc\xcf\x1f\x11\x91\xcb\x81\x53\xf1\x7b\x01\x31\x22\xae\
-\x04\xb8\x3c\xe0\xc9\x15\x91\x9b\x30\x59\xdc\x8d\xae\x44\x2e\xa6\
-\x8f\xf2\xa5\xc0\x3f\x54\xf5\x09\xff\xf0\x66\x11\xd9\x05\x7c\x87\
-\x11\x7a\x33\x30\xa5\x79\x86\x03\x17\xaa\x6a\xa0\x62\xfc\xab\xfe\
-\x9e\xc8\x53\x44\x64\x90\xaa\x5a\x6d\x82\xda\x28\x3e\x9f\x6f\xd6\
-\x82\x05\x0b\x4e\x07\xec\xe1\xb6\xa5\x35\xe9\xd2\xa5\x0b\x5e\xaf\
-\x97\x6d\xdb\xb6\x91\x9a\xda\x86\x6a\xbd\xee\xe7\x2c\x5d\xba\xb4\
-\xc2\xe7\xf3\xfd\x12\x6e\x3b\xda\x32\x81\x92\x1b\xdb\xc5\xe5\xfa\
-\x95\x4f\x3f\x18\xc1\x79\x17\xed\xdb\xed\x8f\x3e\xfd\x40\x71\xb9\
-\x16\x68\x59\xd9\x3e\x5d\x46\x5c\x55\x67\x02\x33\xc3\x6d\x47\x98\
-\xd9\xc5\x96\xcd\xf9\x4c\xb8\x65\xdf\xfe\x9b\xaa\x8e\xdd\xee\xa5\
-\xe9\x55\x5d\x3f\xaf\x76\x3c\x14\x58\x16\x24\xec\x02\x7c\x0c\x9c\
-\x21\x22\x9d\x82\xc3\x00\x80\x0f\xaa\xcd\xfb\x09\x38\x21\xe8\x78\
-\x08\xf0\x53\xf0\x16\xbd\xaa\xfa\x44\xe4\x2b\xe0\xea\x26\xd8\x1b\
-\xd8\xb6\xb5\x8b\xc8\x75\x41\xe3\x36\xa0\x1c\x08\x34\x9d\x3e\xda\
-\x7f\xdc\xb9\xda\xbc\xf6\xfe\x9f\x03\x80\xfd\x5a\xdc\x65\x64\x64\
-\x44\x63\x12\xa0\xa6\xa4\xa5\xa5\x35\xb5\x48\xf9\xbe\xca\x9c\x5d\
-\xbb\x76\xb9\xb6\x6c\xd9\x42\xd7\xae\x6d\xa8\x5b\xd1\x5e\x12\x1d\
-\x1d\x4d\x62\x62\x22\x99\x99\x99\x96\xb8\xdb\x47\xc8\xc9\xc9\x21\
-\x32\x32\xd2\xe5\x70\x38\x16\x84\xdb\x96\xb6\x4c\x55\x23\x6c\x8f\
-\xe7\x45\x3e\x78\xe7\x70\x26\xa5\xdb\xe9\xda\xbd\x8e\x4b\xc2\xc8\
-\xe6\x8d\xf0\xf6\x34\xa5\xc2\xf3\x4a\xb8\x4d\xb1\xa8\x1f\x55\xbd\
-\x9b\x30\xf4\x68\x0d\x23\x45\xaa\xfa\x47\xb5\xb1\x4e\x98\x44\x9e\
-\xea\x04\x62\x49\x92\xa9\xaa\xd7\xa8\xaa\x5a\x3d\x03\xbc\x98\x3d\
-\x1b\xd6\x27\x63\xca\xf8\xd4\xb6\x5e\x63\xe9\xc6\xff\xb3\x77\xde\
-\xe1\x51\x95\xd9\x1f\xff\x9c\x69\xa1\x48\x11\x02\x84\x84\x2a\x20\
-\x52\x54\x14\xeb\xcf\x86\xdd\x15\x2c\xa8\xd8\xd7\x5e\x98\x75\x5d\
-\x57\x57\x5d\x7b\x6f\x6b\x59\x0b\xae\xd7\xde\x05\x15\x45\x11\x15\
-\x51\x29\x02\xd2\x02\x24\xa1\x77\x81\x40\x42\x42\x80\x40\x80\x24\
-\xd3\xce\xef\x8f\x77\x22\x21\x04\x92\x90\xc9\xdc\x94\xfb\x79\x9e\
-\xfb\x5c\xe6\xce\x7b\xdf\xf7\x3b\x40\x32\xe7\x9e\xf7\x14\x93\x6c\
-\x74\x62\x39\xef\x4d\x64\x57\xef\xe6\x8e\x18\xe3\xae\x6c\x5d\x46\
-\x30\xdb\xb5\x0d\xa1\xab\x7a\x21\xc6\x80\x9e\xcf\xfe\x77\xa0\xa9\
-\xad\xa4\xb9\xdd\xee\xc2\xb4\xb4\xb4\xc6\x0d\xc9\xb8\x03\x27\xee\
-\xae\xb6\xb1\x62\xc5\x0a\x1e\x7a\xe8\x21\x86\x0f\x1f\xbe\xc0\x6e\
-\x2d\x75\x99\xd2\xdd\x12\x3e\x40\x64\x0d\x4f\x3e\x58\x7b\xe3\x2e\
-\x9e\x78\x20\x82\x90\x05\xbc\x63\xb7\x14\x07\x87\x4a\xb2\x9a\xf2\
-\x7b\x17\x77\x8e\x9e\x33\xab\x38\x5f\xe6\x5e\xe6\x2b\xfb\x44\x56\
-\x1c\x3d\xb7\x2a\x73\xbd\x6c\x11\xed\x55\x98\x58\xbf\x9b\x54\xf5\
-\x9c\x72\x8e\x37\x4b\x8d\x03\x38\x77\x2f\xe3\xbe\xaf\xe2\xe7\xa8\
-\x73\xf8\xfd\x7e\xc5\x24\x92\xd4\xc7\x72\x28\x61\x60\x5a\x5a\x5a\
-\x5a\xc3\xaa\x87\x82\x31\xee\xf2\xf2\xf2\x08\x04\x02\x76\x4b\x71\
-\xc0\x94\x41\xc9\xcf\xcf\x0f\x4d\x9d\x3a\xb5\xb2\xa5\xce\x1c\xca\
-\xe1\x4f\xe3\x4e\x55\x43\x04\x83\xf7\xf0\xe5\x67\x2e\x16\x64\xd8\
-\xa9\xa9\x7c\xe6\xa5\xc1\x57\x23\x5c\x04\x83\xff\x56\x55\xe7\xa7\
-\xd0\xc1\x2e\x36\x53\xb5\xfe\xbe\x53\x80\x5e\x22\x72\x64\xc9\x05\
-\x11\x71\x61\x12\x18\x16\xaa\xea\xd6\x2a\xae\x3f\x05\x38\x21\x5a\
-\x6a\xa5\x64\xbe\xa6\xec\xe9\x51\x2b\xe9\x64\x72\x72\x99\xeb\x97\
-\x96\x79\x3d\x09\x63\x08\xde\x56\xde\x62\xa5\x32\x7a\xc7\x61\x5a\
-\x15\x5e\x53\x45\xbd\xf5\x8d\xf9\xc0\xa1\x76\x8b\xa8\x09\xc2\xe1\
-\xf0\xc4\xd9\xb3\x67\x37\xb8\xdf\xad\x25\x3d\x66\xb3\xb3\x1d\x5b\
-\xa2\x36\x10\x0c\x06\x75\xeb\xd6\xad\xe5\x96\x80\x72\xa8\x3c\xa5\
-\xb7\x7b\x50\xd5\x51\xe2\xf5\xcd\xe1\xdf\x77\xf4\x63\xcc\x04\x0f\
-\xae\x5a\xd2\xf3\x3d\x12\x81\xfb\xff\x19\xc6\xe3\x59\x44\x30\x38\
-\xc2\x6e\x39\x0e\x0d\x9a\xdf\x81\x8b\x45\xe4\x3d\xcc\x17\xfd\x32\
-\x55\x2d\x1b\x67\x57\x9a\xb7\x31\xdd\x4b\xbe\x17\x91\xc7\x30\xc5\
-\xa8\x6f\xc4\x74\x3a\x38\x77\x3f\xd6\x7f\x0d\xf0\x03\x63\x45\xe4\
-\x51\xcc\x56\xe9\xdd\x98\x6d\xd9\xa6\x25\x83\x54\x75\xb3\x88\xfc\
-\x08\x0c\x15\x11\x0f\xb0\x26\xba\xee\xce\xd2\x93\xa9\xea\x1f\xd1\
-\x79\x9e\x15\x91\x64\xe0\x7b\xcc\xf6\x63\x57\xe0\x32\x4c\xbd\xc6\
-\xe9\xaa\x3a\x51\x44\x3e\x00\xde\x12\x91\xc3\x31\x35\x1a\x05\x53\
-\x17\xef\xaf\xc0\x29\xfb\xaa\x8d\x57\x8f\x78\x1b\x53\xab\xb0\x3e\
-\x32\x25\x37\x37\x37\x61\xe3\xc6\x8d\xb4\x69\xd3\xc6\x6e\x2d\x71\
-\x23\x21\x21\x81\xd6\xad\x5b\x93\x95\x95\x45\xe7\xce\x9d\x2b\xbe\
-\xc1\xa1\x46\xc9\xcc\xcc\xd4\x26\x4d\x9a\x38\xfd\xf0\xaa\x89\x67\
-\x8f\x2b\xa1\xe0\x50\xa6\x4f\x9d\xc6\x13\x0f\xc0\x63\xcf\x95\x73\
-\x8b\x0d\x3c\xf5\x10\x4c\x9f\xaa\x44\x22\xb7\x36\xb8\x32\xea\x0e\
-\xb5\x8d\x37\x30\x46\xcd\x89\xc0\x05\x18\x23\xe7\x47\x8c\xf1\xb4\
-\x47\xc1\x4d\x55\x0d\x44\x33\x63\x5f\xc0\x64\xba\xb6\xc4\x6c\xed\
-\x0d\x50\xd5\xa9\xa5\x86\xae\xc3\x78\xd1\xca\xb2\x02\x93\x54\x51\
-\x32\xdf\xd6\x68\x81\xeb\x57\xa3\x47\x26\xf0\x01\xd0\x02\x78\xb4\
-\xcc\xbd\xd7\x47\xf5\x5e\x8d\x69\xd5\x37\x1c\x53\x42\xa5\xc4\x28\
-\x2c\x99\xf3\x3f\x22\xb2\x20\xaa\xef\x65\x4c\x76\xef\x3a\x4c\x17\
-\x96\xe5\xa5\xc6\xdd\x20\x22\xd3\x80\xeb\x80\x2b\x31\xb1\x7a\x7f\
-\x60\xb2\x69\xeb\x40\x1d\xa5\xea\x53\x4f\xeb\xdc\x95\x30\xd3\xe5\
-\x72\x05\xd3\xd2\xd2\xbc\x67\x9d\x75\x96\xdd\x5a\xe2\x4a\xc7\x8e\
-\x1d\xd9\xb1\xa3\x21\x84\x8d\xd6\x6e\xb2\xb3\xb3\x19\x31\x62\x84\
-\x0b\x78\xfe\xdd\x77\xdf\xb5\x5b\x4e\x9d\x46\xca\xb3\x95\x44\xe4\
-\x4a\xe0\x53\xde\xfc\x48\xb8\xdc\xe6\x5d\x98\xaf\x46\xc0\x4d\x57\
-\x02\xdc\xa0\xaa\x1f\xd8\x2b\xc6\xc1\xa1\x76\x22\x22\xf7\x01\x8f\
-\xaa\x6a\xbd\x6a\x6c\x1f\x6b\x44\xa4\x1f\x26\x21\xa5\x97\xaa\x2e\
-\xb1\x5b\x4f\x6d\xc3\xeb\xf5\x4e\x3b\xff\xfc\xf3\x8f\xbf\xf7\xde\
-\x7b\xed\x96\x12\x13\xb2\xb3\x13\x18\x3c\xb8\x1f\xef\xbe\xbb\x90\
-\xbe\x7d\x1b\xc4\xf3\x47\x9d\x66\xc2\x84\x09\x3c\xf8\xe0\x83\xaa\
-\xaa\xcd\x1b\x4a\xf7\x9b\x9a\xa2\xdc\x7d\x57\x55\x1d\x0e\x3c\xc3\
-\xdf\x6f\x8a\x30\x63\x6a\x79\x43\xe2\xc3\x9c\x59\xf0\xb7\xeb\xc2\
-\x88\xbc\xe4\x18\x76\x0e\x0e\x0e\x0e\x35\x4b\x28\x14\x9a\x98\x9a\
-\x9a\x5a\x5c\xf1\xc8\xf8\x12\x0c\x0a\x13\x26\xb4\x62\xf8\xf0\xf6\
-\x4c\x9b\xd6\x92\x48\x64\xcf\x31\x8b\x16\x35\xe5\xb5\xd7\x6a\x69\
-\xa5\x07\x87\x4a\xb1\x78\xf1\x62\xbc\x5e\xef\x4a\xc7\xb0\xab\x3e\
-\xfb\x0a\xaa\x7b\x18\x61\x34\x17\x9c\x11\xe6\x9b\x2f\xe3\x26\xe8\
-\x4f\x7e\xf8\x16\x06\x0e\x08\x13\x89\x8c\x43\xb5\x7e\x3c\x46\x3a\
-\x38\x38\xd4\x79\x2c\xcb\x3a\xc7\xb2\xac\x5f\xed\xd6\x51\x43\x4c\
-\xce\xcc\xcc\x4c\xd8\xba\xb5\xaa\x79\x3e\x35\x47\x61\xa1\x9b\x5b\
-\x6f\xed\xc3\x03\x0f\xf4\xe0\xb5\xd7\x3a\x71\xd7\x5d\x3d\xb9\xf5\
-\xd6\x3e\x64\x66\x36\xda\x6d\xdc\xea\xd5\x8d\x19\x39\x32\x69\x2f\
-\xb3\x38\xd4\x05\x8a\x8a\x8a\xc2\x89\x89\x89\xb5\x30\xa3\xb3\xee\
-\xb1\x57\xe3\x4e\x55\x95\x60\x70\x08\x81\xe0\xeb\x5c\x7f\x19\x3c\
-\xfd\x30\xc4\x2b\xdc\xed\x85\xa7\xe0\xea\x8b\xa0\xb8\xe8\x1d\x42\
-\xa1\x0b\x54\xb5\x9c\xe7\x34\x07\x07\x87\x12\x54\xf5\x39\x67\x4b\
-\x36\x6e\x6c\x07\x4e\xb7\x2c\xab\x2a\x59\xd3\x75\x85\x69\x22\x12\
-\xc9\xc8\xa8\x3d\xdf\xaf\x9f\x7d\xd6\x9e\x25\x4b\x9a\x70\xe3\x8d\
-\xeb\xf9\xe2\x8b\x0c\x9e\x7c\x72\x05\x1b\x36\xf8\xb8\xf9\xe6\x3e\
-\x2c\x5e\xdc\xb4\xe2\x09\x1c\xea\x04\xa1\x50\x88\x01\x03\x06\xb8\
-\x8f\x3d\xf6\xd8\xda\xf3\x64\x51\x87\xd9\x67\x3a\xac\xaa\x86\x35\
-\x12\xfe\x27\x70\x33\x2f\x3d\x13\xe6\xb2\x41\x61\xd6\xfc\x51\x73\
-\x6a\xd6\xad\x85\xab\x2e\x8c\xf0\xcc\x23\x61\x54\xff\xae\x91\x88\
-\x5f\x55\x9d\xa6\x7f\x0e\x0e\x0e\xb5\x89\x54\xa0\x88\xdd\x3b\x87\
-\xd4\x0b\x54\xb5\xc0\xe3\xf1\x2c\x48\x4b\xab\x3d\xc9\x8a\x33\x67\
-\x36\xa7\x7f\xff\x02\x6e\xbe\x79\x1d\x9d\x3b\x17\x71\xe6\x99\x9b\
-\xf8\xe4\x93\xf9\x74\xed\x5a\xc8\xdf\xff\xde\x8b\xf9\xf3\x0f\x88\
-\xd9\x5a\xe1\x70\xd8\xe9\x33\x6b\x13\x7f\xfc\xf1\x07\x22\xc2\xaa\
-\x55\xab\x9c\xbe\xf1\x31\xa0\x52\xb5\x4e\x54\xf5\x5d\x22\x91\xd3\
-\x98\xf8\x4b\x36\xfd\x0f\x8e\xf0\xc0\x5d\xb0\x79\x53\xec\x54\x6c\
-\xcd\x87\x47\xee\x85\x23\xba\x87\xf9\x79\x6c\x16\xaa\x67\xab\x6a\
-\xd9\x9e\x9b\x0e\x0e\x0e\x0e\xb6\xe3\xf7\xfb\x8b\x81\x59\xc0\x00\
-\x9b\xa5\xd4\x08\xc1\x60\x70\x7c\x6d\x8a\xbb\xdb\xb4\xc9\xc7\x51\
-\x47\xed\xee\xcc\x69\xd9\x32\xc4\x2b\xaf\x2c\xe1\xd0\x43\x0b\xb8\
-\xe3\x8e\x43\x98\x37\xaf\x59\xb5\xd7\x51\x55\x46\x8c\x18\xc1\xd2\
-\xa5\x4b\xab\x3d\x97\x43\xd5\xc9\xc9\xc9\x21\x37\x37\x97\x8c\x8c\
-\x8c\x09\x76\x6b\xa9\x0f\x54\xba\x90\x9d\xaa\x4e\x26\x18\xec\x46\
-\x28\x74\x17\x6f\x0f\xcb\xe7\xd0\xce\x21\x9e\x7b\x1c\x96\x55\x23\
-\xe1\x6c\xc5\x32\xb3\x05\xdb\xa7\x53\x88\x37\x5e\xd9\x4a\x30\x78\
-\x0f\xc1\x40\x37\x55\x1d\xbf\xff\x93\x3a\x38\x38\x38\xd4\x38\x37\
-\x03\x77\xda\x2d\xa2\x86\x98\xbc\x72\xe5\x4a\x5f\x61\x61\xa1\xdd\
-\x3a\x00\x68\xdd\x3a\x40\x56\x56\xc2\x1e\xd7\x13\x12\x22\xbc\xf0\
-\xc2\x32\x8e\x3a\x6a\x1b\x77\xdc\xd1\x93\x8c\x8c\xea\x19\x78\x22\
-\x42\x9b\x36\x6d\x9c\x56\x64\x36\xb1\x62\xc5\x0a\xa6\x4f\x9f\xbe\
-\x5e\x55\x8b\xec\xd6\x52\x1f\xd8\xb3\xce\xdd\x3e\x88\x76\x86\x78\
-\x55\x44\x3e\x20\x14\xba\x87\x97\x9e\x19\xca\x73\x8f\x25\xd2\xe5\
-\xa0\x00\x17\x0e\xf1\x71\xe6\x5f\xa0\xcb\x41\xd0\xae\x3d\x78\xca\
-\x4c\x1d\x0a\x41\x4e\x36\xac\xf9\x03\x7e\x19\x0b\xa3\xbf\x0a\xb0\
-\x6a\x85\x0f\xaf\x6f\x33\xc1\xc0\xdb\xc0\x73\xfb\x51\xad\xdf\xc1\
-\xc1\xa1\x1c\x44\xe4\x12\x20\x4f\x55\x27\xd9\xad\xa5\x3e\xe2\xf7\
-\xfb\x97\xd9\xad\xa1\x06\x99\xaa\xaa\xcc\x9b\x37\x8f\x63\x8f\x3d\
-\xd6\x6e\x2d\xf4\xeb\xb7\x9d\xb1\x63\x5b\x13\x0a\x09\x1e\xcf\xee\
-\x71\xdf\x5e\xaf\xf2\xcc\x33\xcb\x79\xe0\x81\x1e\x8c\x1e\xdd\x16\
-\xaf\xb7\x7a\x71\xe1\x29\x29\x29\xcc\x9d\x3b\x17\x55\x65\x57\x73\
-\x16\x87\x78\xf0\xd5\x57\x5f\x05\xf3\xf2\xf2\x3e\xb2\x5b\x47\x7d\
-\x61\xbf\x5a\x50\xa8\xea\x36\x55\x7d\x98\x60\xa0\x2d\xf0\x7f\xac\
-\x5e\xf5\x2a\x6f\xbc\xbc\x86\x81\x03\xa0\x4f\x27\x68\xe3\x53\xba\
-\x26\x06\x38\xe1\xf0\x22\x4e\x38\xbc\x88\x83\x12\x03\xb4\xf1\x29\
-\x7d\x3a\xc1\xb9\xa7\xc0\xff\xfe\x9b\xc9\xaa\x15\xc3\x80\x13\x09\
-\x06\xda\xa8\xea\xfd\x8e\x61\xe7\x50\x9f\x10\x91\xbf\x89\xc8\xa9\
-\x36\x4a\x78\x08\xb8\xd6\xc6\xf5\x1d\xea\x28\xaa\x9a\xe7\xf5\x7a\
-\x57\xd6\x96\xb8\xbb\xb3\xcf\xce\xa3\x63\xc7\x22\x16\x2d\x2a\x3f\
-\xb6\xce\xe3\x31\x06\xde\xd9\x67\x6f\xa2\x53\xa7\xea\x79\x1b\x93\
-\x93\x93\x09\x04\x02\xe4\xe5\xe5\x55\x6b\x1e\x87\xaa\xf1\xc7\x1f\
-\x7f\x90\x97\x97\xe7\x05\xc6\xda\xad\xa5\xbe\x50\x25\xcf\x5d\x59\
-\xa2\xdd\x22\xa6\x47\x8f\x7b\xa3\xed\x8b\x52\x50\x4d\x66\xcb\xa6\
-\x14\xb6\x6c\x4a\xc6\x54\xf3\xcf\x02\xd6\x97\x9c\xb5\xb8\x78\x7d\
-\x35\x75\x3b\x38\xd4\x76\xee\x07\xbe\x00\x26\xda\x2d\xc4\xa1\xe6\
-\xb0\x2c\xab\x91\xdf\xef\xaf\x77\xdb\x48\xc1\x60\xf0\xd7\xd9\xb3\
-\x67\x77\x02\x7c\x76\x6b\xe9\xde\x7d\x27\x96\xb5\x78\x9f\x63\x3c\
-\x1e\xe5\xf1\xc7\x57\x54\x7b\xad\x56\xad\x5a\xd1\xb8\x71\x63\xb2\
-\xb2\xb2\x1a\x54\x0b\x36\xbb\x99\x3e\x7d\x3a\x6e\xb7\x7b\x7b\x38\
-\x1c\x9e\x6e\xb7\x96\xfa\x42\xb5\x8c\xbb\xb2\xa8\x6a\x16\xc6\x80\
-\x73\x70\xa8\xf7\x88\x48\x57\x20\xa0\xaa\xfb\xf5\xb0\x22\x22\x29\
-\x40\x82\xaa\xae\xaa\x60\x9c\x17\xd3\xc3\xf5\x0f\x55\x2d\xd7\x35\
-\x21\x22\x8d\x80\xce\xc0\xf2\x58\x95\x0e\x12\x91\x03\x80\x4e\xc0\
-\x8a\x68\x48\x86\x43\x29\x2c\xcb\xba\x8b\x5d\x7d\x82\xeb\x1b\x53\
-\x96\x2c\x59\x72\x4b\x30\x18\xc4\xeb\xf5\xda\xad\x25\xae\x24\x27\
-\x27\x93\x95\x95\xc5\xe1\x87\x1f\x6e\xb7\x94\x06\x43\x20\x10\xd0\
-\xa3\x8f\x3e\x3a\x6d\xfa\xf4\xe9\x61\xbb\xb5\xd4\x17\xf6\x6b\x5b\
-\xd6\xc1\xa1\xa1\x22\x86\xdb\x44\x64\x13\xb0\x0a\x58\x27\x22\x4b\
-\x45\xe4\x84\x52\x63\x0a\x80\x0e\xc0\xbf\x44\x44\xa3\xc7\x53\xa5\
-\xde\xbf\x44\x44\xd6\x61\xfa\xb7\xae\x14\x91\x2c\x11\xb9\xb0\xcc\
-\x3a\x33\x45\x64\xb8\x88\xdc\x05\x6c\xc1\xf4\xa3\xdd\x2a\x22\xff\
-\x28\x33\xce\x25\x22\x4f\x03\x5b\x81\x25\xc0\xa6\x68\xfb\xc0\xb2\
-\xba\x5f\x16\x91\xd5\xe5\x5c\xff\x46\x44\x26\x95\xb9\xd6\x3d\x7a\
-\x6d\x5b\x74\xdd\x02\x11\x79\x41\x44\x6c\xf7\xe2\xd4\x32\x16\x00\
-\xbd\x2d\xcb\xaa\x8f\x2e\x9e\xc9\xa1\x50\xc8\xb5\x70\xe1\x42\xbb\
-\x75\xc4\x9d\xe4\xe4\x64\x72\x72\x72\x88\x94\xd7\x06\xc3\x21\xe6\
-\xec\xdc\xb9\x93\x5e\xbd\x7a\x49\xb7\x6e\xdd\x9c\x76\x80\x31\xc4\
-\x31\xee\x1c\x1c\xaa\xc6\xbf\x80\x57\x80\x37\x80\xde\xc0\x09\xc0\
-\x72\x60\x5c\x34\x2c\x01\x8c\x27\x67\x03\xf0\x0e\xd0\x35\x7a\xbc\
-\x08\x20\x22\x17\x01\x23\x81\xd1\xc0\xd1\xc0\x61\xc0\xcf\xc0\xd7\
-\x22\xd2\xbf\xcc\x5a\x67\x03\x03\x81\xcb\x80\x23\x80\x1f\x81\xff\
-\x8a\x48\xcf\x52\x63\xee\x00\xee\x8b\xea\x3a\x10\x53\x9e\xe3\x1e\
-\xa0\xfb\xfe\x7c\x38\x11\x39\x10\x98\x81\xf1\xea\x0f\x01\x52\x80\
-\x07\x81\x5b\x80\x47\xf7\x67\xce\x7a\xcc\x34\x20\x0c\x9c\x64\xb7\
-\x90\x58\xa3\xaa\xeb\xbc\x5e\xef\xfa\xf4\xf4\x74\xbb\xa5\xc4\x9d\
-\xe4\xe4\x64\x42\xa1\x10\x39\x39\x39\x76\x4b\x69\x10\xa4\xa7\xa7\
-\xe3\xf5\x7a\x89\x44\x22\x6f\xdb\xad\xa5\x3e\xe1\x18\x77\x0e\x0e\
-\x95\x44\x44\x9a\x02\x0f\x03\xdf\xa8\xea\xc3\xaa\xba\x58\x55\xa7\
-\x61\x12\x17\x7c\xc0\xdf\x01\x54\x75\x2d\x10\x02\xb6\xa9\xea\xea\
-\xe8\x91\x1f\x9d\xe6\x39\x60\x8e\xaa\xde\xa6\xaa\xb3\x55\x75\x3e\
-\x66\x6b\x2f\x0f\x63\x94\x95\xa6\x05\x70\x85\xaa\xfe\xa0\xaa\xe9\
-\x18\x23\xcb\x0d\x9c\x16\xd5\x23\xc0\xbf\x81\x91\xaa\xfa\xba\xaa\
-\xe6\xab\x6a\x06\xc6\x10\xdb\xdf\xd2\xfd\x77\x63\x8c\xc4\x6b\x55\
-\xf5\x6b\x55\xcd\x52\xd5\x17\x81\xe1\x18\x4f\x64\xc3\xda\xa3\xdb\
-\x07\x7e\xbf\x7f\x3b\x30\x13\xe8\x62\xb3\x94\x1a\x21\x18\x0c\x8e\
-\x9f\x33\x67\x4e\xd0\x6e\x1d\xf1\xa6\x59\xb3\x66\x34\x6f\xde\xdc\
-\x29\x89\x12\x27\xb2\xb2\xb2\xd8\xba\x75\x6b\x70\xf8\xf0\xe1\xb3\
-\xed\xd6\x52\x9f\x88\x69\xcc\x9d\x83\x43\x3d\xa7\x17\xd0\x1c\xd8\
-\x22\x22\x43\xcb\xbc\xb7\x2e\xfa\xfe\x5e\x11\x91\x56\x98\xd8\xb9\
-\x51\xe5\xdc\xbf\xa6\x9c\xfb\x7f\x57\xd5\xdc\x52\xaf\x17\x61\xb6\
-\x4a\x4b\x3c\x84\x49\x40\x3b\xe0\xa7\xd2\x37\xa9\x6a\xaa\x88\x6c\
-\xa9\xe0\xb3\xec\x8d\xe3\x80\x4c\xe0\x4c\x11\x39\xb3\xcc\x7b\x09\
-\x18\x2f\x64\x7d\x2e\x03\x52\x55\x4e\xf2\xfb\xfd\xf5\x75\xff\x6e\
-\xf2\xbc\x79\xf3\xae\x8c\x44\x22\xb8\x5c\x0d\xcb\x0f\x50\x12\x77\
-\xd7\xbf\x7f\x59\x67\xba\x43\xac\x19\x3d\x7a\x74\xa8\x43\x87\x0e\
-\x5f\xdf\x77\xdf\x7d\x76\x4b\xa9\x57\x38\xc6\x9d\x83\x43\xe5\xe9\
-\x14\x3d\xf7\xc1\x24\x2f\x94\x66\x19\xb0\xb2\x92\xf7\x77\x01\x2e\
-\x2c\xf3\xde\x66\x8c\xf7\xae\x34\xbb\x25\x6a\xa8\xaa\x8a\x48\x11\
-\xc6\x7b\x07\xd0\x36\x7a\x2e\xcf\x90\xdb\x58\x81\x96\x7d\x69\xf4\
-\x96\xa3\x0f\x60\x5c\xa9\xb5\x1d\x80\x7a\x6c\xd8\x01\x4c\x2e\x2e\
-\x2e\xf6\x2c\x5d\xba\x94\x5e\xbd\xf6\xf9\xdc\x52\xef\xe8\xd3\xa7\
-\x0f\x45\x45\xf5\x2e\x09\xba\xd6\xb1\x7a\xf5\x6a\x96\x2f\x5f\xee\
-\x59\xbe\x7c\xf9\xeb\x76\x6b\xa9\x6f\x38\xc6\x9d\x83\x43\xe5\x29\
-\x31\xde\x9e\x57\xd5\xef\xf6\xe3\xfe\x92\xac\xd8\x4f\x54\xf5\x95\
-\x18\xe8\x59\x1b\x3d\xb7\x2f\x7d\x51\x44\x5c\x98\x84\x8e\xd2\x14\
-\x01\x2d\x45\xc4\x55\x26\x9b\xf6\x50\x8c\xd7\xb1\xb4\xc6\x03\x54\
-\xf5\x9c\x18\xe8\x73\xa8\xc3\xa8\xea\x72\xaf\xd7\xbb\x29\x3d\x3d\
-\xbd\x75\x6d\x32\xee\xf2\xf3\xbd\x4c\x9e\xdc\x92\xdc\xdc\x04\x8a\
-\x8b\x77\x2f\x34\xec\x76\x2b\x43\x87\xae\xdb\xcb\x9d\x95\xe7\xc0\
-\x03\x0f\xac\xf6\x1c\x0e\x15\x33\x7d\xfa\x74\x3c\x1e\x4f\x41\x28\
-\x14\x9a\x61\xb7\x96\xfa\x86\x63\xdc\x39\x38\x54\x9e\xc5\x98\x2d\
-\xcb\xbf\x01\x7b\x18\x77\x22\x22\xd1\xda\x8f\x60\x3c\x71\x5d\x4b\
-\xbf\xaf\xaa\xdb\x44\x64\x3a\x70\x93\x88\xbc\x51\xb6\xbc\x48\x99\
-\xfb\x2b\x44\x55\xb7\x88\xc8\x42\xe0\x2a\xe0\xcd\x52\x6f\x9d\x07\
-\x34\x29\x33\x7c\x2d\x26\x86\xef\x30\x20\x3d\xba\x5e\x7f\xa0\x1b\
-\xbb\x1b\x77\x3f\x01\x2f\x88\x48\x7f\x55\x9d\x53\x1d\x7d\x0d\x05\
-\xcb\xb2\x9a\x03\xa7\xfa\xfd\xfe\xd1\x76\x6b\x89\x35\x91\x48\x64\
-\xe2\xdc\xb9\x73\x07\x5f\x71\xc5\x15\xb5\xc2\x63\x9b\x96\xd6\x9c\
-\xbb\xee\x3a\x98\xc2\x42\x37\x8d\x1a\x45\x68\xd2\x64\xf7\xca\x19\
-\x5e\x6f\x6c\x8c\x3b\x87\xf8\xf0\xfb\xef\xbf\x87\x23\x91\xc8\x4f\
-\xaa\xea\x94\x40\x89\x31\x8e\x71\xe7\xe0\x50\x49\x54\x35\x10\x8d\
-\x95\x1b\x2d\x22\xbf\x02\x1f\x61\xb6\x52\x3b\x00\xe7\x62\x0c\xa3\
-\xb7\xa2\xc3\xa7\x02\x7f\x15\x91\xd7\x30\xde\xb0\x99\xaa\x3a\x1d\
-\xf0\x03\xbf\x03\xd3\x45\xe4\x0d\xcc\xd6\x6b\x12\x26\x49\x62\x2d\
-\xa6\xb3\x44\x55\x78\x10\xf8\x46\x44\x3e\x01\x3e\xc3\x6c\x17\xdf\
-\x03\xe4\x96\x19\x37\x0a\x93\xb1\xfb\xa9\x88\xbc\x89\x31\x3c\x2f\
-\x61\xcf\xad\xe4\x61\xc0\x15\xc0\x2f\x22\xf2\x12\xc6\x10\x6c\x8a\
-\x31\x0a\x4f\x03\xfe\xaf\x8a\xfa\x1a\x02\xfd\x81\x6f\x2d\xcb\xea\
-\xe2\xf7\xfb\xd7\xd8\x2d\x26\x96\x44\x22\x91\xdf\xd2\xd2\xd2\x2e\
-\x50\x55\x77\x6d\x68\xc7\x35\x6c\x58\x27\xda\xb4\x09\xf2\xc0\x03\
-\x4b\x39\xf4\xd0\xed\xb8\xdd\xce\xb3\x46\x5d\x65\xc7\x8e\x1d\x5c\
-\x7e\xf9\xe5\xee\x16\x2d\x5a\x38\x31\xbc\x35\x40\xc3\x8a\x92\x75\
-\x70\xa8\x26\xaa\xfa\x23\xa6\x84\xc9\x4e\xe0\x31\x4c\x16\xe9\x5d\
-\x18\x63\xea\xb7\x52\x43\xef\x07\xfe\x8b\x31\xb6\x2e\xc0\x94\x4d\
-\x21\x9a\xcd\xda\x17\x58\x8a\x31\xc2\x3e\xc7\x18\x68\x2e\xe0\xfb\
-\x52\xf7\xcf\xc5\x24\x50\x94\x65\x1a\xbb\xb6\x77\x51\xd5\xd1\x98\
-\xf8\xb8\xee\xc0\x87\xd1\xb5\x86\x00\x63\x30\x75\xef\x4a\xc6\xe5\
-\x00\x83\x30\xdb\xb3\x8f\x62\x8c\xb5\xab\x81\x11\x44\x3d\x79\xd1\
-\x71\x21\x4c\x69\x8f\x61\xc0\x60\xe0\x13\xe0\x25\x4c\xa2\xc5\x87\
-\x15\xfc\xf5\x34\x54\x26\x03\x9b\x80\x8b\xec\x16\x52\x03\x4c\xd9\
-\xbe\x7d\xbb\x77\xf5\xea\xd5\x76\xeb\x00\x60\xed\xda\x46\x5c\x76\
-\xd9\x06\xfa\xf5\x2b\x70\x0c\xbb\x3a\xce\xfc\xf9\xf3\xf1\xf9\x7c\
-\xec\xd8\xb1\xe3\x03\xbb\xb5\xd4\x47\x1c\xcf\x9d\x83\x43\x15\x89\
-\x96\x25\x39\xbf\x82\x31\xdb\x30\xc6\x5f\x79\xef\xad\x06\xf6\x28\
-\x34\x5c\x66\x8c\x7f\x2f\xd7\x07\x97\x73\xed\x3b\xf6\xdc\x26\xbe\
-\xa9\x9c\x71\x13\x81\xa3\xca\x5c\x9e\x52\xce\xb8\x62\x8c\x01\xe8\
-\xd4\xb5\xab\x04\x7e\xbf\x3f\x6c\x59\xd6\x77\x18\x63\xf8\x65\xbb\
-\xf5\xc4\x98\xf9\x6e\xb7\x7b\x7b\x5a\x5a\xda\x01\x5d\xbb\x76\xad\
-\x78\x74\x0d\xd3\xa3\xc7\x0e\x36\x6e\x8c\x5f\x2d\xed\xf4\xf4\x74\
-\x92\x92\x92\x48\x4a\x4a\x8a\xdb\x9a\x0d\x85\xad\x5b\xb7\x92\x9f\
-\x9f\x5f\x30\x7d\xfa\xf4\x8a\x12\xd1\x1c\xf6\x03\xc7\x73\xe7\xe0\
-\xe0\xe0\x50\x7d\x3e\xa2\x1e\xf6\x11\x8e\x26\xdf\x4c\x4e\x4b\x4b\
-\xab\x15\x59\xc1\xd7\x5f\x9f\xc5\x4f\x3f\x25\xb2\x66\x4d\xa3\xb8\
-\xac\x97\x99\x99\xc9\xca\x95\x8e\xed\x11\x6b\x54\x15\xaf\xd7\xab\
-\x6b\xd7\xae\xfd\xad\xe2\xd1\x0e\xfb\x83\xe3\xb9\x73\x70\x70\x70\
-\xa8\x26\x7e\xbf\xff\x37\x76\xdf\x96\xaf\x37\x84\xc3\xe1\xdf\x66\
-\xcf\x9e\x7d\x06\xa6\x50\xb7\xad\xa4\xa7\x37\xc3\xed\x8e\x70\xd9\
-\x65\x87\x73\xd0\x41\x85\x1c\x74\xd0\xce\xdd\xde\xf7\x78\x94\xc7\
-\x1e\x8b\x9d\x31\x96\x9c\x9c\xcc\xaa\x55\xfb\x6c\xfd\xec\xb0\x1f\
-\xac\x59\xb3\x86\x07\x1f\x7c\x50\x9a\x36\x6d\xfa\x82\xdd\x5a\xea\
-\x2b\x8e\x71\xe7\xe0\xe0\xe0\xe0\xb0\x2f\x26\x6f\xd9\xb2\xc5\x97\
-\x95\x95\x45\x72\x72\x72\xc5\xa3\x6b\x90\x0d\x1b\x12\x68\xd2\x24\
-\x42\x8f\x1e\xc6\xa8\x5b\xb3\xa6\xf1\x6e\xef\x7b\xbd\xb1\x8d\xc3\
-\x4b\x4e\x4e\x26\x2d\x2d\x8d\x1d\x3b\x76\xd0\xb4\xe9\xfe\x36\x7d\
-\x71\x28\xcb\xe4\xc9\x93\x71\xb9\x5c\x05\xdb\xb7\x6f\xff\xdd\x6e\
-\x2d\xf5\x15\xc7\xb8\x73\x70\x70\x70\x70\xd8\x17\x73\x5c\x2e\x57\
-\x71\x5a\x5a\x5a\x82\xdd\xc6\xdd\x23\x8f\xc4\x77\x8b\xb4\x6d\xdb\
-\xb6\x78\x3c\x1e\xb2\xb2\xb2\xe8\xd1\xa3\x47\x5c\xd7\xae\xcf\x7c\
-\xf7\xdd\x77\xc1\x48\x24\x32\xc2\x29\x81\x52\x73\x38\x31\x77\x0e\
-\x0e\x0e\x0e\x31\xc2\xb2\xac\x57\x2d\xcb\xda\x23\xe9\xa5\x2e\xa3\
-\xaa\x41\x97\xcb\x35\x33\x3d\x3d\xbd\xc1\xa5\xa7\xba\xdd\x6e\xda\
-\xb5\x6b\xc7\xfa\xf5\xeb\x2b\x1e\xec\x50\x29\x16\x2c\x58\x80\xdb\
-\xed\xf6\xaa\xaa\x93\x25\x5b\x83\x38\x9e\x3b\x07\x07\x07\x87\xd8\
-\xd1\x15\x53\xfe\xe6\x1b\xbb\x85\xc4\x92\x50\x28\x34\x21\x35\x35\
-\xf5\x58\x4c\x7f\x61\x5b\x29\x28\xf0\xf0\xc9\x27\xed\xc9\xc8\x68\
-\x46\x6e\xae\x8f\x03\x0f\x0c\xd1\xad\xdb\x4e\xae\xbb\x2e\x8b\x94\
-\x94\xd8\xb7\x0c\x4b\x4e\x4e\x66\xd1\xa2\xf2\xaa\x12\x39\xec\x0f\
-\xab\x57\xaf\xe6\xea\xab\xaf\x2e\x7e\xea\xa9\xa7\x9c\xae\x14\x35\
-\x88\xe3\xb9\x73\x70\x70\x70\x88\x1d\x5f\x01\x67\x5b\x96\x75\x80\
-\xdd\x42\x62\xcc\xe4\x0d\x1b\x36\x24\x6c\xda\xb4\xc9\x56\x11\x79\
-\x79\x5e\x2e\xbb\xec\x30\x3e\xfd\xb4\x3d\x22\xd0\xb7\xef\x76\x9a\
-\x35\x0b\x31\x7e\x7c\x2b\x2e\xbf\xfc\x30\xe6\xcd\x6b\x16\xf3\x35\
-\x93\x93\x93\xd9\xb1\x63\x07\x5b\xb7\x6e\x8d\xf9\xdc\x0d\x8d\xe2\
-\xe2\x62\x5a\xb6\x6c\x49\x56\x56\xd6\x04\xbb\xb5\xd4\x77\x1c\xcf\
-\x9d\x83\x83\x83\x43\xec\x18\x03\xbc\x0b\xfc\x05\x18\x69\xb3\x96\
-\x58\x32\x43\x44\xc2\xe9\xe9\xe9\xee\xd3\x4f\x3f\xdd\x36\x11\xc3\
-\x86\x75\xa2\x49\x93\x30\xef\xbc\xb3\x90\x94\x94\xe2\x3f\xaf\x17\
-\x14\xb8\x79\xf8\xe1\x1e\x3c\xfd\x74\x57\xbe\xf8\x62\x5e\x4c\xd7\
-\x4c\x4c\x4c\xc4\xe7\xf3\xb1\x7e\xfd\x7a\x5a\xb4\x68\x11\xd3\xb9\
-\x1b\x1a\x33\x66\xcc\xa0\x59\xb3\x66\x04\x02\x81\x27\xed\xd6\x52\
-\xdf\x71\x3c\x77\x0e\x0e\x0e\x0e\x31\xc2\xef\xf7\x6f\xc1\x74\xf8\
-\x18\x65\xb7\x96\x58\xa2\xaa\x85\x1e\x8f\x27\x2d\x3d\x3d\xbd\xe2\
-\xc1\x35\x48\x46\x46\x73\x6e\xbe\x79\xdd\x6e\x86\x1d\x40\xb3\x66\
-\x61\xee\xbc\x73\x35\x6b\xd6\x34\x26\x3f\xdf\x1b\xd3\x35\x45\x84\
-\xf6\xed\xdb\x93\x9d\x9d\x1d\xd3\x79\x1b\x22\x93\x26\x4d\x8a\xa4\
-\xa6\xa6\xae\xfd\xf4\xd3\x4f\xa7\xdb\xad\xa5\xbe\x13\x17\xcf\x9d\
-\x98\xa6\x84\x07\x02\xdb\xcb\x36\x4b\x77\x70\x70\x70\xa8\x4f\xf8\
-\xfd\xfe\x99\x76\x6b\xa8\x09\x82\xc1\xe0\xf8\x59\xb3\x66\x1d\x8a\
-\x8d\x71\x77\x45\x45\x42\xa3\x46\xe5\xd7\x53\x6e\xdc\xd8\x5c\x2f\
-\x2e\x8e\x7d\x0f\xdc\x0e\x1d\x3a\x38\x49\x15\xd5\x24\x2f\x2f\x8f\
-\x9f\x7e\xfa\x49\x54\xf5\x9e\xf7\xdf\x7f\xdf\x6e\x39\xf5\x9e\x98\
-\x18\x77\x22\x72\x18\xd0\x0d\xd3\x00\xbd\x3d\x90\x84\xc7\xd3\x01\
-\x8f\xa7\x03\x11\x4d\xc2\xe5\x6a\x45\x24\xe2\x06\x10\x9f\xaf\x00\
-\xb7\x3b\x87\x48\x24\x8b\x40\x60\x2d\xb0\x01\xc8\x8e\x9e\xb3\x80\
-\x59\xaa\xba\x73\x2f\x4b\xc5\x14\x11\x69\x06\x5c\x05\xfc\x14\x6d\
-\x09\x85\x88\x9c\x0d\x24\x44\x5b\x3a\x21\x22\xed\x31\xfd\x3a\x47\
-\xaa\xaa\xbd\x01\x27\x0e\x0e\x0e\x0e\xf6\x31\x65\xed\xda\xb5\xf7\
-\x16\x14\x14\xd0\xac\x59\xec\x63\xdb\x2a\xc3\x21\x87\xec\xe4\xcb\
-\x2f\x93\x38\xe1\x84\x7c\x3c\x9e\xdd\x93\x77\x47\x8c\x68\x4f\xcb\
-\x96\x21\xda\xb5\x8b\xbd\xff\xa0\x57\xaf\x5e\xf4\xea\xd5\x2b\xe6\
-\xf3\x36\x24\xc6\x8e\x1d\x8b\xcb\xe5\xda\x1e\x0e\x87\x47\xdb\xad\
-\xa5\x21\xb0\x5f\xc6\x9d\x88\xb8\x80\x13\x80\x8b\xf0\xfa\x2e\x05\
-\x92\x71\xb9\x95\x03\x0f\x0c\xd2\xae\x7d\x84\xe4\x14\x0f\xed\x53\
-\x3c\x24\xb5\x87\xb6\x49\xd0\x2e\x09\xda\xb4\x85\x82\x02\xc8\xc9\
-\x6e\xc6\x86\xec\x66\xe4\x64\x77\x27\x3b\x2b\xc2\xfa\xcc\x20\x1b\
-\xb2\x60\x53\x9e\x97\x60\xd0\x85\xdb\x5d\x2c\x6e\xf7\x58\x22\x91\
-\x91\xc0\x0f\xaa\x5a\xe5\x28\x56\x11\xe9\x0b\xfc\xba\x8f\x21\xa7\
-\xa9\xea\x22\xa0\x35\x60\x61\x1a\xaf\xaf\x8e\xbe\x37\x14\xe3\x65\
-\x2c\xe9\xd5\x79\x70\x74\xcc\x0c\x4c\x73\x70\x07\x07\x07\x87\x0a\
-\xb1\x2c\xeb\x30\x60\x91\xdf\xef\x0f\xd9\xad\x25\x46\x4c\x05\xc8\
-\xc8\xc8\xe0\xc4\x13\x4f\xb4\x45\x80\xdf\x9f\xc9\x8d\x37\xf6\x61\
-\xc8\x90\xc3\x39\xe3\x8c\xcd\x24\x26\x06\xd8\xb6\xcd\xc3\xb4\x69\
-\x2d\x59\xbc\xb8\x29\x0f\x3f\xec\xb4\x0a\xab\xad\x8c\x1e\x3d\x3a\
-\x18\x89\x44\x3e\x89\xf6\xae\x76\xa8\x61\x2a\x6d\xdc\x89\x88\x17\
-\x38\x0d\x91\x8b\xf0\x7a\x2f\x21\x18\x6c\xc5\x41\x3d\x02\x5c\x7c\
-\x99\x8f\xf3\x2e\x82\xbe\x87\x0b\x2e\x57\x55\xdb\xd3\xb8\x28\xed\
-\xe2\xdf\x90\x05\x63\xc7\x24\x30\xfa\xab\x41\x4c\x99\x78\x3e\xaa\
-\x11\xf1\x7a\x27\x10\x0a\x7d\x09\x8c\x56\xd5\xbc\x4a\xce\xeb\x05\
-\xda\x01\x9f\x11\xfd\x85\x54\x86\x0d\x55\xd0\xb8\x0c\xf0\x03\x99\
-\x55\xb8\xc7\xc1\xc1\xa1\x01\x63\x59\x56\x5b\x60\x2e\x70\x19\xf0\
-\xb5\xcd\x72\x62\x82\xaa\x6e\xf5\xf9\x7c\x8b\xd3\xd3\xd3\x7b\xdb\
-\x65\xdc\xf5\xec\xb9\x83\xb7\xdf\x5e\xc8\x5b\x6f\x75\x64\xe4\xc8\
-\x76\x14\x15\xb9\xf0\x78\x94\x83\x0e\xda\xc9\x73\xcf\x2d\x67\xc0\
-\x80\xcd\xb6\xe8\x72\xd8\x37\xf3\xe7\xcf\xe7\xca\x2b\xaf\xf4\x8e\
-\x18\x31\xe2\x0b\xbb\xb5\x34\x14\x2a\x34\xee\xa2\x46\xdd\x6d\x78\
-\x3c\x8f\x13\x0a\x35\xe7\xd0\xc3\x03\x0c\xbe\xcc\xc7\xa0\xc1\xd0\
-\xa3\x67\x6c\x7b\x0d\x26\x25\xc3\xf5\xb7\xc2\xf5\xb7\x7a\xd8\x9a\
-\x0f\x3f\x7d\xef\xe2\xbb\xaf\x4e\xe7\x97\xb1\xa7\x13\x0c\xbe\x2d\
-\x1e\xcf\xe7\x84\xc3\xf7\xaa\x6a\x65\x83\x1f\x26\xab\xea\xdb\xd5\
-\x91\xa4\xaa\xd9\xc0\x9b\x7b\x7b\x5f\x44\x1a\x61\xea\x5a\x2d\x8f\
-\x36\xd9\x2e\xfb\xbe\x3b\xfa\x7e\x33\x60\x83\xaa\xe6\xec\x65\x9e\
-\x66\x40\xc7\xe8\x3c\xc1\xea\x68\x76\x70\x70\xb0\x17\xbf\xdf\x9f\
-\x6b\x59\xd6\xf7\x98\x9d\x80\x7a\x61\xdc\x81\x89\xbb\x9b\x3d\x7b\
-\x76\x37\x6c\x8c\xbb\xeb\xdd\x7b\x07\xaf\xbe\xba\x04\x55\xc8\xcf\
-\xf7\xd2\xa2\x45\x08\x97\xab\xc1\xd5\x57\xae\x53\xac\x5d\xbb\x16\
-\x8f\xc7\x53\xb8\x76\xed\xda\xc9\x76\x6b\x69\x28\xec\x33\x5b\x56\
-\x44\xce\xc4\xeb\x5b\x82\xd7\xfb\x22\xff\xfc\x77\x73\x16\xae\x85\
-\xc9\x69\x3e\xee\xbc\x0f\x7a\xf4\xac\x59\x65\x2d\x5a\xc2\x65\x57\
-\xc3\x67\xdf\xba\x59\xb3\xc5\xcd\x3b\x9f\xb9\x48\x4e\x19\x82\xdb\
-\xbd\x52\x44\x1e\x16\x91\x78\x25\x83\x9c\x22\x22\x2a\x22\xfd\x4a\
-\x5d\x5b\x24\x22\x6f\x89\xc8\x4b\x40\x3e\xb0\x04\xd8\x2c\x22\x97\
-\x96\xb9\x77\x30\xb0\x16\x58\x09\xa4\x03\x1b\x44\x64\x7e\x99\x31\
-\x3d\x45\x64\x0a\xb0\x15\x58\x08\x14\x88\xc8\x33\x51\xa3\xda\xc1\
-\xc1\xa1\xee\xf2\x26\x70\xba\x65\x59\xdd\xed\x16\x12\x43\x26\x2f\
-\x5f\xbe\xdc\x5b\x54\x14\xfb\x62\xc1\x95\x21\x35\xb5\x05\x85\x85\
-\xe6\x6b\x4b\x04\x0e\x3c\x30\x18\x57\xc3\x2e\x1c\x0e\x13\x08\x38\
-\x39\x81\x55\xa1\xb0\xb0\x90\x36\x6d\xda\xb0\x7c\xf9\x72\x27\xd6\
-\x2e\x8e\xec\xd5\xb8\x13\x91\x7f\x22\x32\x8e\xb3\xfe\xd2\x85\x39\
-\xcb\xdc\x3c\xf4\x14\xa4\x74\x8c\xa7\xb6\x5d\x34\x6e\x02\x97\x5c\
-\x01\x73\x96\x7b\x79\xf4\xd9\x04\x12\x1a\x3d\x8a\xc7\x3b\x36\xea\
-\xed\xda\x17\xad\x45\xa4\x4b\x99\xa3\x53\x8c\x54\x5d\x8e\xf1\xc8\
-\xf5\x00\x92\x31\x4f\xe7\x9f\x8b\x48\x7f\x00\x11\x69\x0a\x0c\x07\
-\xa6\x00\xbd\x80\x26\x40\x4f\xe0\x4f\x4f\xa2\x88\x24\x62\x62\xf9\
-\x22\xc0\x45\x40\x0a\xf0\x08\xf0\x0f\xe0\x81\x18\xe9\x74\x70\x70\
-\xb0\x87\x9f\x81\x0f\xa9\x05\x5d\x1d\x62\xc8\x94\x70\x38\xec\x9a\
-\x3f\x7f\x7e\xc5\x23\x6b\x80\xb7\xdf\xee\xc0\xa0\x41\x47\xf2\xc2\
-\x0b\x5d\x58\xbe\xbc\x49\xdc\xd7\xff\xe6\x9b\x6f\xc8\xc8\xc8\x88\
-\xfb\xba\x75\x99\xd4\xd4\x54\x8a\x8a\x8a\x58\xb4\x68\xd1\x7d\x76\
-\x6b\x69\x48\x94\xeb\xfd\x12\xb7\xfb\x45\x44\xee\xe2\x89\xe7\x85\
-\xdb\xef\x8e\x7d\x5e\xf9\xfe\xe2\xf3\xc1\x3f\xee\x81\x01\x67\xb8\
-\xb9\xe8\x9c\x53\xd8\x9a\x3f\x53\x44\x4e\xda\x47\x16\xeb\x33\xd1\
-\xa3\x34\x85\x18\x43\xab\xba\x84\x80\xeb\x54\x75\x3b\x80\x88\x0c\
-\x05\xce\x04\xfe\x0d\x5c\x0a\x24\x02\x8d\x80\xcf\x55\x75\x49\xf4\
-\x9e\x65\xd1\xa3\x84\xfb\x30\xdb\xb5\x7f\x55\xd5\xb5\xd1\x6b\xcf\
-\x8b\xc8\x21\xc0\x3d\x22\xf2\x64\x79\x5b\xbd\x0e\x0e\x0e\xb5\x1f\
-\xbf\xdf\x1f\x01\x6e\xb0\x5b\x47\x2c\x51\xd5\x1c\x9f\xcf\xb7\x3a\
-\x23\x23\xa3\xcb\xd1\x47\x1f\x1d\xf7\xf5\x1f\x79\x64\x25\xdf\x7e\
-\xdb\x96\x1f\x7e\x68\xc3\xd7\x5f\xb7\xa3\x4f\x9f\xed\x0c\x1e\x9c\
-\xcb\x19\x67\x6c\xda\x6b\x89\x94\x58\xd2\xae\x5d\x3b\xb2\xb2\xb2\
-\x6a\x7c\x9d\xfa\xc4\x57\x5f\x7d\x15\x5a\xbc\x78\xf1\xf8\x6d\xdb\
-\xb6\xad\xb1\x5b\x4b\x43\x62\x0f\xcf\x9d\x88\x0c\x24\x12\xf9\x17\
-\xef\x7c\x26\xdc\x7e\xb7\x1d\x9a\x2a\xe6\xb0\x23\xe0\xb7\xd9\x5e\
-\x12\x13\xbb\xe3\xf1\x0c\xdb\xc7\xc8\xa7\x80\x23\xca\x1c\xc7\xc5\
-\x48\xc5\xef\x25\x86\x1d\x98\xe6\xda\xc0\x78\xa0\x5f\xf4\xf5\x1a\
-\x20\x15\x78\x4f\x44\xfe\x27\x22\xa7\x47\xeb\xfd\x95\xe6\x38\x4c\
-\x96\xee\xb9\x22\x32\xb4\xe4\x00\xc2\x40\x53\x20\x56\x5e\x46\x07\
-\x07\x07\x87\x98\x10\x0c\x06\x7f\x9d\x3d\x7b\xb6\x2d\x7b\x93\x1d\
-\x3b\x16\x71\xfb\xed\x6b\x19\x33\x66\x2e\x4f\x3e\xb9\x82\x84\x84\
-\x08\x4f\x3d\x75\x10\x83\x06\x1d\xc9\x4b\x2f\x75\x61\xe5\xca\xc6\
-\x35\xba\x7e\x4a\x4a\x0a\x79\x79\x79\xce\xd6\x6c\x25\xc9\xcb\xcb\
-\x23\x35\x35\xd5\x5d\x50\x50\xf0\x96\xdd\x5a\x1a\x1a\xbb\x19\x77\
-\x22\xd2\x0c\xaf\xf7\x7d\x86\x5c\x19\xe1\x92\x2b\xec\xd2\x54\x39\
-\x52\x3a\x82\xf5\x91\x97\x50\xe8\x0a\x11\x19\xb8\x97\x51\x99\xaa\
-\x9a\x5e\xe6\x88\x55\x6f\x9a\xf2\xd2\xb2\xb6\x00\x6d\x4b\xbd\x3e\
-\x1b\x78\x01\x38\x07\x53\x9a\x65\xa9\x88\x5c\x5f\xea\xfd\x8e\x98\
-\x2d\x9b\x0b\xcb\x1c\x1d\x81\x71\x38\xed\xe1\x1c\x1c\x1c\x6a\x1f\
-\x93\x17\x2e\x5c\xe8\x0e\x85\xec\xab\xf0\xe2\xf5\x2a\x67\x9e\xb9\
-\x89\x37\xde\x58\xcc\x17\x5f\x64\x70\xc6\x19\x9b\x18\x39\xb2\x1d\
-\x57\x5d\x75\x18\xb7\xdc\xd2\x9b\xf4\xf4\x9a\xa9\xc3\x97\x9c\x9c\
-\x8c\xaa\x3a\xdd\x2a\x2a\xc9\xb7\xdf\x7e\x8b\xdb\xed\xde\x06\x7c\
-\x6f\xb7\x96\x86\x46\x59\xcf\xdd\x69\x84\x42\x6d\x79\xfa\xbf\x75\
-\xa3\x2d\xd9\x80\x33\xe0\x8c\xbf\x44\x70\xb9\x6e\xb2\x61\xf5\xe4\
-\x72\xae\xb5\xc7\x24\x50\x00\xa0\xaa\x5b\x54\xf5\x39\x55\xed\x86\
-\xf1\xe8\xa5\x03\x6f\x47\x0b\x23\x03\xac\xc2\x64\xc7\x9e\xb3\x97\
-\x63\x45\x8d\x7f\x0a\x07\x07\x87\x1a\xc5\xb2\xac\x36\x96\x65\x4d\
-\xb3\x2c\xeb\x10\xbb\xb5\xc4\x88\x29\xc1\x60\xd0\xbd\x78\xf1\x62\
-\xbb\x75\xb0\x74\x69\x53\x3e\xff\xbc\x3d\x3f\xff\xdc\x1a\x9f\x2f\
-\xc2\xd9\x67\xe7\xa1\x0a\x43\x87\xf6\xe6\xe9\xa7\x0f\x8a\xf9\x7a\
-\x8d\x1a\x35\xa2\x55\xab\x56\xce\xd6\x6c\x25\x28\x28\x28\x60\xc5\
-\x8a\x15\x11\x97\xcb\xf5\x9a\x53\x01\x22\xfe\x94\x35\xe2\x8e\xa5\
-\xcb\x41\x01\xda\xb6\xb3\x45\xcc\x7e\x71\xe2\x29\x2e\x3c\x9e\x58\
-\x6d\xb5\x56\x85\x53\x44\x24\xa5\xe4\x85\x88\x1c\x08\x9c\x8b\x49\
-\xa0\xa0\xec\x16\xac\xaa\x66\x00\x4f\x63\xbc\x71\x27\x47\x2f\x8f\
-\x03\x4e\x8c\x76\xf8\xd8\x8d\x72\xb6\x70\x1d\x1c\x1c\xea\x26\x79\
-\x40\x1b\xe0\x16\xbb\x85\xc4\x02\x55\x5d\xed\xf5\x7a\x37\xd8\xd5\
-\x67\x76\xe7\x4e\x37\xdf\x7c\xd3\x96\x6b\xaf\xed\xcb\xb5\xd7\xf6\
-\x25\x35\xb5\x39\x37\xdd\xb4\x9e\x31\x63\xd2\x78\xfc\xf1\x95\xbc\
-\xf3\xce\x22\x9e\x7e\x7a\x05\x63\xc6\xb4\x21\x27\x27\xb6\xd5\xba\
-\xc0\x6c\xcd\x3a\xad\xc8\x2a\x66\xda\xb4\x69\x0c\x1c\x38\x50\x7a\
-\xf4\xe8\x61\xd9\xad\xa5\x21\x52\xd6\xb8\x6b\x47\x9b\x76\x75\xc3\
-\x6b\x57\x42\x62\x1b\x08\x87\x0f\xdc\x8b\x31\x74\xa9\x88\xbc\x52\
-\xce\xd1\xaf\x9c\xb1\x55\x65\x2d\xf0\xa3\x88\x0c\x89\x96\x3c\x19\
-\x17\xbd\xfe\x5c\xf4\x7c\xba\x88\x4c\x12\x91\xdb\x44\xe4\x4c\x11\
-\xb9\x06\x18\x06\x6c\x03\x7e\x8f\x8e\xf9\x2f\xa6\xfc\xc9\x04\x11\
-\xb9\x5f\x44\xce\x15\x91\xcb\x44\xe4\x19\x60\x52\x0c\x34\x3a\x38\
-\x38\xd8\x8c\xdf\xef\x57\x4c\x96\xfc\x35\x96\x65\xd5\x6c\x50\x58\
-\x9c\x08\x85\x42\x13\xe6\xcc\x99\x13\xf7\x7d\xd9\x77\xde\xe9\xc0\
-\xc0\x81\x26\x5b\x36\x29\x29\xc0\xab\xaf\x2e\x61\xe4\xc8\x0c\xae\
-\xbc\x32\x9b\x16\x2d\x76\xc9\x39\xfd\xf4\x4d\xb4\x68\x11\xe2\x8f\
-\x3f\x62\xff\xd7\x9d\x9c\x9c\x4c\x7e\x7e\x3e\x85\x85\x85\x31\x9f\
-\xbb\xbe\x10\x08\x04\xf0\xf9\x7c\xba\x72\xe5\xca\x39\x0b\x16\x2c\
-\x70\xf6\xb0\x6d\xa0\x6c\x4c\x57\x2a\xf3\xd2\xae\x25\x1c\x06\xb7\
-\xdb\x16\x41\x55\x66\x6e\x2a\xb8\xdd\x19\x1a\x0a\x95\x2e\x76\xb4\
-\x1d\xf8\x0d\xf3\xf9\xca\x33\xe4\x5a\x46\xcf\x45\xd1\x71\xa5\x3b\
-\x5f\x2c\xc0\x64\xb0\x96\x90\x1f\x1d\xb3\x9d\xdd\x99\x00\x4c\x04\
-\xfe\x09\x74\xc7\x6c\xb9\xfe\x9f\xaa\x96\x74\xb2\x58\x81\x31\x00\
-\xff\x81\xe9\x96\xb1\x03\x53\xb1\xfe\x74\x55\x5d\x07\xa0\xaa\x01\
-\x11\x39\x1e\x78\x08\xb8\x18\xb8\x27\xba\xce\x52\xe0\xa3\xca\x7c\
-\x7c\x07\x07\x87\x3a\xc1\x07\x98\x32\x47\x67\x01\x75\xbe\xde\x97\
-\xaa\xfe\x96\x9e\x9e\x7e\x69\x24\x12\xc1\xe5\x8a\x9f\x3f\x60\xd5\
-\xaa\xc6\x5c\x79\x65\x36\x17\x5c\x90\x4b\xdb\xb6\xfb\x4e\x6a\x78\
-\xf1\xc5\xa5\xf8\x7c\xb1\xaf\x81\xd7\xbe\x7d\x7b\x5c\x2e\x17\x59\
-\x59\x59\x74\xeb\xd6\x2d\xe6\xf3\xd7\x07\x26\x4d\x9a\x44\xab\x56\
-\xad\x64\xe7\xce\x9d\xff\xb0\x5b\x4b\x43\x45\x54\x77\xfd\xe7\x17\
-\x91\xde\xc0\x42\xde\xfa\xc4\x14\x10\xae\xed\x6c\xd9\x0c\x47\xf6\
-\x08\xb2\x65\xf3\x8b\xaa\x1a\xb7\xba\x70\x22\xb2\x08\x98\xa2\xaa\
-\xb7\xc6\x6b\x4d\x87\xaa\x11\xed\x7f\xdc\x28\x7a\x34\x06\x04\x63\
-\xcc\x17\x02\x45\xaa\x1a\xb6\x51\x9e\x83\x4d\x44\xbd\xf6\x69\x40\
-\xaf\x52\x25\x8a\xe2\x82\x65\x59\x89\x7e\xbf\xbf\xb2\x2d\x14\x6b\
-\x35\x22\xd2\x0b\x58\xf4\xf1\xc7\x1f\x73\xf0\xc1\x07\xdb\x2d\x67\
-\xaf\x64\x67\x27\x30\x78\x70\x3f\xde\x7d\x77\x21\x7d\xfb\x96\x7d\
-\x3e\xdf\x7f\xbe\xff\xfe\x7b\x9a\x37\x6f\xce\xc9\x27\x9f\x5c\xf1\
-\xe0\x06\x46\x38\x1c\xe6\xba\xeb\xae\x0b\xf5\xec\xd9\x73\xca\x98\
-\x31\x63\x4e\xb3\x5b\x4f\x43\x65\x37\xcf\x9d\xaa\x2e\x12\x97\xeb\
-\x5d\xee\xf9\xfb\x75\x9c\x7e\xb6\x87\xc4\x36\x76\xe9\xaa\x1c\xff\
-\xbe\x23\xc2\xf6\x82\xcd\xec\xda\x0a\x75\xa8\x87\x44\xe3\x19\x93\
-\x31\x09\x2b\xbb\x0e\x91\x64\x7c\xbe\x4e\x88\xb4\x43\xb5\x31\x11\
-\x4d\x40\x23\x09\x44\x22\x3e\x2a\xc8\x34\x16\x97\x2b\x8c\xdb\x1d\
-\x40\x5c\xc5\xb8\xa4\x18\x91\x22\x94\x8d\x04\x03\x6b\x89\x44\xb2\
-\x80\xec\xb2\x87\xaa\xe6\xd6\xe8\x07\x75\xa8\xd7\xd4\x17\xc3\x0e\
-\x40\x55\x17\x7b\xbd\xde\xfc\xf4\xf4\xf4\x96\x76\x19\x77\xc5\xc5\
-\x2e\xb6\x6f\xdf\x7d\x87\x49\x04\x5a\xb5\xaa\xf9\xd8\xfd\xe4\xe4\
-\x64\x96\x2d\x5b\x56\xf1\xc0\x06\xc8\xcf\x3f\xff\xcc\x8a\x15\x2b\
-\x64\xf9\xf2\xe5\x37\xda\xad\xa5\x21\xb3\xe7\x17\xa0\xea\xbf\x28\
-\xdc\x79\x2e\x03\x07\xb4\x61\xd4\x4f\x5e\xdb\xba\x52\xec\x8b\x48\
-\x04\xfe\x7d\x87\x32\xf2\x33\x41\xf5\x7a\x55\xdd\x66\xb7\x24\x87\
-\xea\x13\xed\x38\xd2\x07\xe8\x0b\x1c\x8a\xd7\xd7\x0f\x38\x14\x38\
-\xf0\xcf\x41\x6e\xb7\xd2\xaa\x75\x88\xa4\x64\x48\xe9\xe0\x21\x29\
-\x59\x68\xdb\xce\x74\x31\x69\xdc\x18\x12\x1a\x95\x7f\x46\xa0\xb8\
-\x08\x0a\x0b\x4b\xce\x6e\x8a\x8b\x1a\x53\x58\xd8\xf8\xcf\xeb\x79\
-\xb9\x9d\xd9\x90\x7d\x14\xeb\x33\x83\x64\x67\x29\x9b\x36\x7a\x08\
-\x06\xff\xdc\x73\x12\xaf\x77\x07\x6e\xf7\x62\x8a\x8b\xe7\x62\xb6\
-\xef\x17\x00\xf3\x55\xb5\xde\x7c\x69\x3b\x38\x54\x96\x48\x24\x32\
-\x69\xee\xdc\xb9\xe7\x5d\x7a\xe9\xa5\x71\x8b\xe1\x51\x85\xcf\x3f\
-\x6f\xcf\x67\x9f\x25\x91\x97\xb7\x67\xb2\x84\xd7\xab\x4c\x99\x32\
-\xab\xc6\x75\xf4\xe8\xd1\x83\xe4\xe4\xf2\x0a\x26\x34\x6c\x54\x95\
-\xf7\xdf\x7f\x3f\x28\x22\x5f\x44\x22\x91\x3f\xec\xd6\xd3\x90\xd9\
-\xc3\xb8\x2e\x95\xa3\xf7\x00\x00\x20\x00\x49\x44\x41\x54\x53\xd5\
-\x6d\x22\x72\x1c\xab\x56\xfc\xcc\xc9\xfd\xbb\xf1\xd1\x97\x5e\x4e\
-\x1c\x60\x83\xb4\xbd\xb0\x31\x17\x6e\xbb\x21\xcc\xf8\x9f\xc2\xa8\
-\x5e\xae\xaa\x63\xe3\x2d\x41\x55\x7b\xc7\x7b\xcd\xfa\x88\x88\xf4\
-\x04\x4e\xc3\xe5\x3a\x0d\x8f\xf7\x04\x8c\x47\x0e\x1a\x37\x09\x71\
-\x48\xef\x08\x87\x1d\xe1\xa3\xf7\xa1\xd0\xfd\x60\x68\x97\x04\xed\
-\xda\x43\xeb\x44\xc1\xe5\xaa\xe9\xbe\xbb\xbb\xe6\xdf\xb2\x19\x72\
-\xb2\x21\x67\x03\xfc\xb1\xb2\x29\x8b\xe6\x1f\xc5\xfc\x8c\xc3\x59\
-\x34\x0f\xb6\x6e\xf5\x02\x88\x2f\x61\x33\x1a\x99\x4d\x28\xf4\x2b\
-\x26\x16\x33\xcd\xe9\x2c\xe2\xb0\x37\x2c\xcb\x1a\x02\x78\xfc\x7e\
-\xff\x08\xbb\xb5\x54\x87\x48\x24\xf2\xdb\x9c\x39\x73\xce\x05\xe2\
-\x66\xdc\x7d\xf3\x4d\x5b\x86\x0d\xeb\xc4\x09\x27\x6c\xa1\xa8\xa8\
-\x10\xb7\x5b\x39\xfe\xf8\xad\x4c\x9f\xde\x82\x45\x8b\x0e\xe0\x8e\
-\x3b\xe2\xd3\x04\xa1\x59\xb3\x66\x34\x6b\x56\x33\xb5\xf4\xea\x32\
-\x53\xa6\x4c\x21\x27\x27\xc7\x13\x89\x44\x9e\xb5\x5b\x4b\x43\xa7\
-\xdc\xad\x2b\x55\xcd\x14\x91\x63\xd9\x96\xff\x39\x83\x4e\xfd\x0b\
-\x17\x0e\x89\xf0\xf4\x4b\x2e\x5b\xbd\x78\xc1\x20\xbc\xf5\x1a\x3c\
-\xfb\x68\x88\x40\x20\x8f\x70\xf8\x02\x55\xad\xf9\x47\x34\x87\x98\
-\x21\x22\xc9\xc0\xd9\x88\x9c\x8e\xc7\x7b\x26\xd0\x96\x26\x4d\x43\
-\x9c\x7c\x2a\x1c\x77\xa2\x87\x43\xfa\x40\xef\xbe\xd0\xb1\xb3\x87\
-\xda\x52\x09\xe6\xc0\x56\xe6\x38\xa4\x0f\x9c\x72\x7a\xc9\x55\x63\
-\xfc\xe5\x6c\x80\xc5\x0b\x60\xd1\xfc\x56\xcc\xf8\xfd\x0c\x7e\x1b\
-\x7f\x2a\x5b\xf3\xbd\x78\x3c\x05\xe2\xf1\x4c\x24\x1c\xfe\x15\x18\
-\xa7\xaa\xce\xfe\x8d\x43\x69\x4e\x02\x86\x58\x96\xf5\xad\xdf\xef\
-\xaf\xcb\x29\x97\x93\x0b\x0a\x0a\x7c\x6b\xd6\xac\xa1\x73\xe7\xce\
-\x71\x59\xf0\x9b\x6f\xda\x71\xce\x39\x79\x3c\xf2\xc8\x4a\x5e\x7d\
-\xb5\x33\xa1\x10\x5c\x76\xd9\x06\x2e\xbb\x6c\x03\x6f\xbe\xd9\x81\
-\xc9\x93\x5b\x31\x70\xa0\xe3\x48\xb7\x8b\x60\x30\xa8\x37\xde\x78\
-\x63\xe6\x1b\x6f\xbc\xb1\xc8\x6e\x2d\x0d\x9d\xbd\xc6\x25\x45\xb7\
-\x3a\xcf\x15\x91\xf3\xf9\xe1\xdb\x57\xf9\x71\x74\x47\xce\x1a\x08\
-\x17\x5c\xe2\xe6\xec\x81\xd0\xbc\x45\xcd\xab\x8b\x44\x60\xc6\x54\
-\xf8\x6e\x14\x8c\xfa\x3c\xc8\xa6\x3c\x25\x1c\x7e\x16\x78\x5e\x55\
-\x77\xd6\xbc\x00\x87\xea\x22\x22\x09\xc0\x05\x78\xbc\x37\x21\x72\
-\x06\x1e\x6f\x84\x63\xff\x4f\x39\xed\x2c\x0f\xa7\x9c\x0e\xfd\xfa\
-\x7b\xea\x4c\x66\x76\x59\xda\x25\x99\x63\xc0\x19\xf0\xb7\x3b\x5d\
-\xa8\xba\x58\x38\x0f\x26\x4f\x68\xc6\xa4\x5f\x07\x32\x75\xd2\xb9\
-\xec\xdc\xe9\x91\x84\x84\x39\x04\x02\x6f\x03\x5f\xa8\xea\x56\xbb\
-\x65\x3b\xd8\xce\xb3\xc0\x4d\xc0\xad\xc0\x2b\x36\x6b\xa9\x0e\x19\
-\x6e\xb7\x7b\x67\x46\x46\x46\x93\x78\x19\x77\xeb\xd6\x25\x70\xfd\
-\xf5\xa6\xc6\x9c\xc7\x13\x61\xfd\xfa\x5d\xa5\x4e\x2e\xbd\x34\x87\
-\xf3\xcf\x3f\x82\x40\xc0\x85\xcf\xe7\x38\xce\xe3\x4d\x6a\x6a\x2a\
-\x2d\x5b\xb6\x94\xa9\x53\xa7\xd6\xd2\xbe\xa5\x0d\x8b\x0a\x73\xd8\
-\x55\xf5\x3b\x82\xc1\x9e\x04\x02\xb7\xf1\xd3\x98\xa9\xdc\x72\x75\
-\x98\x83\x12\x23\x0c\x3e\x2b\xc4\x47\xef\x98\x6d\xd2\x58\x12\x08\
-\xc0\xaf\x3f\xc1\x1d\xb7\x28\x07\x25\x06\x39\xf7\x14\x78\xcf\x5a\
-\x4d\x6e\xce\x7f\x09\x87\xbb\xab\xea\x63\x8e\x61\x57\xfb\x11\x91\
-\xfe\xe2\x72\xbd\x8e\xc7\x9b\x8b\xcb\xf5\x39\xa7\x9c\x7e\x1a\x1f\
-\x7e\x29\x64\x6e\x75\xf3\xfd\x44\x0f\x77\xdd\x0f\xfd\x8f\xa9\x3b\
-\x25\x77\x2a\x83\x08\xf4\x3d\x1c\xfe\x76\x27\x7c\xf9\x83\x9b\xcc\
-\x6d\x1e\xbe\xf9\x19\xce\xbf\xf8\x48\x7c\xbe\x37\x70\xbb\x73\xc5\
-\xe3\x19\x21\x22\x67\xc6\x66\x39\xb9\xb5\x74\x4f\xe2\x32\x47\xcf\
-\x58\xac\x51\x45\x3d\x6f\x89\xc8\x98\x52\xaf\xfb\x8b\xc8\x06\x11\
-\x39\xa2\xd4\xb5\x1f\x44\xa4\x41\x17\x35\xf5\xfb\xfd\xd9\xc0\x9b\
-\xc0\x9d\x96\x65\xd5\xad\xba\xa2\xa5\x88\x66\x9c\xff\x3e\x77\xee\
-\xdc\xb8\x59\x52\x4d\x9a\x44\x70\xbb\x4d\x85\x87\x36\x6d\x82\xac\
-\x5a\xb5\xcb\xb8\xdb\xb2\xc5\x43\x28\x24\x35\x52\xb8\xd8\xa1\x62\
-\xb6\x6d\xdb\xa6\x8b\x17\x2f\xce\xf9\xf1\xc7\x1f\x47\xda\xad\xc5\
-\xa1\x92\xbd\x4b\x55\x35\x00\xbc\x05\xbc\x25\x22\xad\x08\x85\xce\
-\x63\xf2\x84\x8b\xf9\x6d\xc2\xd9\xfc\xf3\x56\x2f\x47\x1f\x1f\xe2\
-\xe8\xe3\xbc\x7f\xc6\x45\x95\x78\x34\xda\xb5\x37\x5b\x5a\x65\xb7\
-\xd8\x76\x6c\x87\x0d\xd9\x26\x96\xa9\xf4\x79\xf5\xaa\x08\xbf\x8c\
-\x8d\xb0\x73\x87\x07\xaf\x77\x01\xc1\xe0\x97\xc0\x37\x1a\x28\x5e\
-\x18\xf3\x4f\xee\x50\x23\x88\xc8\x79\xb8\x5c\xc3\x80\xce\x74\xed\
-\x1e\xe6\xaf\x37\xb8\xb9\xe2\x1a\x48\x4a\xae\x47\x56\x5c\x25\x71\
-\xbb\xe1\xd4\x33\xe1\xd4\x33\x85\x6d\x5b\xdd\x8c\xfa\xc2\xcd\x27\
-\xef\x0d\x61\xce\xac\xcb\xc5\xe7\xdb\x4a\x30\xf8\x28\x30\xac\x1a\
-\xf1\x79\x6f\x00\xc5\x98\xc2\xd8\x65\xc9\xc7\xd4\x4b\xac\x34\x22\
-\x32\x1e\xc8\x55\xd5\x58\x35\x96\xf6\x62\x6a\x3c\x96\xfe\xb6\x6d\
-\x4d\xf9\x7a\x1b\x1a\x4f\x03\xc3\xfc\x7e\x7f\x9d\x76\x31\x85\xc3\
-\xe1\x89\xa9\xa9\xa9\x27\x63\x7a\x64\xd7\x38\x3d\x7a\xec\x64\xd9\
-\xb2\xa6\x9c\x72\xca\x16\xfa\xf7\xdf\xca\x2b\xaf\x74\xe6\xd5\x57\
-\x3b\x73\xdc\x71\xf9\x7c\xfa\x69\x32\x4d\x9b\x86\x49\x4a\xda\x77\
-\xfd\xbb\x58\x32\x7f\xfe\x7c\x0e\x38\xe0\x00\xba\x76\xed\x1a\xb7\
-\x35\x6b\x23\xf3\xe6\xcd\x23\x35\x35\x55\xb6\x6c\xd9\x72\x8f\xdd\
-\x5a\x1c\x0c\x55\x6e\x4c\xaf\xaa\x9b\x31\x05\x76\x3f\x12\x91\x26\
-\xc0\x39\xa4\x4e\xbf\x80\xf4\xd9\x87\x02\xed\x09\x85\x12\x89\x44\
-\x76\xcd\xeb\x76\x47\x68\xd5\x3a\x48\x62\x5b\xd8\xbe\x0d\x36\x6e\
-\x74\x53\x54\x58\x7a\x5d\xc5\xeb\xdd\x8a\xb8\x72\x08\x87\x56\x13\
-\x0e\xff\x04\x7c\xa3\x81\x40\x7c\x22\x63\x1d\x62\x82\x88\x1c\x84\
-\xb8\xc6\xe1\x76\x77\xa7\x7d\x0a\xfc\xe7\x55\x18\x78\x61\xc3\x33\
-\xe8\xf6\x46\xf3\x16\x70\xdd\x2d\x70\xdd\x2d\x6e\xe6\xcc\x82\x7b\
-\xfe\xde\x82\xb4\xd9\xaf\xe0\x72\x3d\x21\x22\x97\xaa\xea\xb8\x8a\
-\x27\x29\x97\x4f\x55\x35\x56\x6d\xad\x7c\x94\x4e\x26\xa9\x22\x4e\
-\xdd\xc7\xca\xe3\xf7\xfb\x37\x01\x9b\xec\xd6\x11\x03\x26\x6f\xda\
-\xb4\x29\x61\xc3\x86\x0d\x24\x25\x25\xd5\xf8\x62\x17\x5f\x9c\xc3\
-\xbc\x79\x26\x91\xa1\x5b\xb7\x42\xae\xb9\x26\x8b\x0f\x3f\x4c\x66\
-\xc4\x88\x24\x3a\x74\x28\xe2\x81\x07\x56\xe1\xf5\xc6\xcf\x5e\xce\
-\xcd\xcd\x25\x3b\x3b\xbb\xc1\x1b\x77\xef\xbd\xf7\x5e\x68\xce\x9c\
-\x39\x73\x83\xc1\xe0\x27\x76\x6b\x71\x30\x54\xd9\xb8\x2b\x4d\x74\
-\x7b\x74\x54\xf4\xf8\x13\x11\x69\x85\xc9\x7c\x4c\x22\x1c\x6e\xcf\
-\xc6\xdc\x24\x36\xe6\xb6\x05\x0a\x80\x0d\x98\xba\x61\x25\xe7\x1c\
-\x0d\x04\xe2\xde\xc6\xc6\x21\x76\x88\xc8\xed\x78\xbd\xaf\xe0\xf1\
-\xb8\xb8\xf7\x11\xb3\x2d\x99\x10\x97\x07\xf9\xba\x49\xff\x63\x60\
-\xfc\x4c\xf8\xe2\x53\x78\xf8\x9e\xe6\x6c\xde\xf4\x93\x88\x7c\x0c\
-\xdc\x50\x13\xc5\x95\x45\xe4\x01\x4c\xcf\xe3\x5c\xe0\xaf\x40\x0f\
-\x60\x36\xf0\x9a\xaa\x16\x47\xc7\xf8\x81\x4e\x40\x6b\x11\x79\x2c\
-\x7a\xeb\x3c\x55\x1d\x25\x22\x2d\x80\xf3\x81\x13\x81\xb6\x40\x16\
-\xf0\x93\xaa\x8e\x29\xb3\xce\x25\x40\x0b\x55\x7d\x6f\x3f\x34\xfe\
-\x05\x38\x13\xe8\x00\xcc\x03\xde\x52\xd5\x8d\x55\x9d\xc7\x21\xee\
-\xa4\xba\x5c\xae\x40\x46\x46\x86\x2f\x1e\xc6\xdd\x49\x27\x6d\xe1\
-\xa4\x93\xb6\xfc\xf9\x7a\xe8\xd0\x4c\x2e\xb9\x64\x03\x9b\x36\xf9\
-\x38\xf8\xe0\x1d\x71\xcf\xc3\x4a\x4e\x4e\x66\xd6\xac\x59\xa8\x2a\
-\x0d\xb5\x1d\xf8\xb2\x65\xcb\x98\x39\x73\xa6\x07\x78\xc2\x6e\x2d\
-\x0e\xbb\xa8\x91\x78\x0f\x55\xdd\xac\xaa\x0b\x55\x75\xbc\xaa\x7e\
-\xaa\xaa\x2f\xaa\xea\xbd\xaa\xfa\xa4\xaa\xbe\xa3\xaa\xdf\xab\xea\
-\x6c\x55\x5d\xaf\xaa\x8e\x61\x57\x87\x11\x91\xfb\xf1\x78\x5f\xe3\
-\xe0\x5e\x2e\xd2\x56\xc2\x9d\xf7\x39\x86\x5d\x65\x10\x81\xcb\xff\
-\x0a\x19\x2b\xe1\xdc\xf3\xc1\xed\xb9\x06\x13\x8f\x56\x13\x3f\x93\
-\x0f\x60\xda\xe4\xfd\x0e\x1c\x83\xd9\x2a\x7d\x1e\xf8\xaa\xd4\x98\
-\x14\x4c\x37\x8f\x26\x40\x97\xe8\x91\x18\x7d\xef\x62\xe0\x71\x8c\
-\x67\x6f\x35\x26\xdb\xf3\x3b\x11\x79\xaa\xcc\x3a\x43\x80\x2a\x17\
-\x2e\x15\x91\x8f\x80\x1f\x81\x93\x31\x5b\xb6\x77\x03\x0b\x44\xa4\
-\x4f\x55\xe7\xaa\x6b\x58\x96\xe5\xb3\x2c\xeb\x46\xcb\xb2\xea\xe4\
-\x0f\x8d\xaa\x06\x5c\x2e\x57\x6a\x5a\x5a\x5a\xec\xfb\x7c\x55\x92\
-\xc4\xc4\x20\x3d\x7b\xee\x20\x14\x72\xf1\xed\xb7\x6d\xe3\xba\x76\
-\x72\x72\x32\xc1\x60\x90\x8d\x1b\x1b\xee\x73\xc8\x07\x1f\x7c\x10\
-\xf6\x78\x3c\x0b\x55\xf5\x07\xbb\xb5\x38\xec\xa2\x5a\x9e\x3b\x87\
-\x86\x8d\x88\xdc\x85\xc7\xf3\x0c\x3d\x7a\xc2\x98\x09\xd0\xaa\xb5\
-\xdd\x92\xea\x1e\x4d\x9a\xc2\xfb\x9f\xc3\xb5\x43\xe0\xe7\x1f\xce\
-\x26\x1c\x1e\x0d\x9c\x57\x85\x19\x4e\x11\x91\x0f\xcb\xb9\xfe\x80\
-\xaa\x66\x95\x7a\x7d\x01\x70\x98\xaa\x2e\x02\x10\x91\x87\x81\x27\
-\x44\xe4\x10\x55\x5d\xa2\xaa\x0f\x89\xc8\x29\x40\x8e\xaa\x5e\x57\
-\x66\xae\xaf\x80\x0f\xb4\x54\xaf\x42\x11\x79\x01\xf8\xb7\x88\x58\
-\xaa\xba\xbe\x0a\x7a\x77\x43\x44\xae\x00\xae\x01\x06\xab\xea\xb7\
-\xd1\x6b\x77\x60\x3c\x8b\xaf\x60\xbc\x79\xf5\x99\x44\xe0\x7f\x98\
-\x16\x79\xaf\xdb\xac\x65\xbf\x08\x85\x42\x13\x66\xcd\x9a\x75\x14\
-\x71\x88\xbb\x2b\x2a\x72\xd1\xa8\xd1\xee\xdb\xae\xc1\xa0\x8b\xd1\
-\xa3\xdb\xf0\xf1\xc7\xc9\x6c\xd9\xe2\xe5\xc2\x0b\xe3\xd7\x48\xa6\
-\x45\x8b\x16\x34\x6d\xda\x94\xac\xac\x2c\xda\xb6\x8d\xaf\x61\x59\
-\x1b\x98\x35\x6b\x16\x83\x06\x0d\x72\x2f\x5f\xbe\xfc\x61\xbb\xb5\
-\x38\xec\x4e\x9d\xcd\xd4\x72\xb0\x17\x11\xe9\x8b\xc8\x0b\xb4\x6a\
-\x0d\xdf\x4f\x74\x0c\xbb\xea\xe0\xf5\xc2\x47\x23\xcd\x76\xad\xcb\
-\x3d\x48\x44\xae\xad\xc2\xdd\x09\x40\xcb\x72\x8e\xb2\xf1\x8e\x93\
-\x4b\x0c\xbb\x28\x25\x31\x7e\x3d\x2a\x5a\x40\x55\xb7\xa9\xaa\x8a\
-\x48\x27\x11\x39\x41\x44\xce\x01\x56\x62\x1e\x0e\xab\x5b\xd0\xfb\
-\x06\x60\x09\x30\xba\xd4\x7a\x3b\x80\xcf\x80\x53\x45\xa4\xa6\x0b\
-\x56\xdb\x8a\xdf\xef\xcf\x02\xde\x06\x1e\xb6\x2c\xab\xa5\xdd\x7a\
-\xf6\x93\x29\x59\x59\x59\x09\xf9\xf9\xf9\x35\xb6\xc0\x8f\x3f\x26\
-\x72\xc1\x05\x47\x30\x60\xc0\xd1\x5c\x7c\x71\x3f\x86\x0f\x37\xf5\
-\xce\x53\x53\x9b\x73\xe5\x95\x87\xf2\xe2\x8b\x5d\x48\x4a\x2a\xe6\
-\xbf\xff\xad\x52\x0e\x51\x4c\x48\x4e\x4e\x26\x2b\x2b\xab\xe2\x81\
-\xf5\x8c\x40\x20\xc0\xb6\x6d\xdb\x74\xf5\xea\xd5\x99\x99\x99\x99\
-\xdf\xd8\xad\xc7\x61\x77\x1c\xcf\x9d\x43\x95\x11\x11\x0f\x5e\xef\
-\x70\x12\x12\x5c\x0c\xb9\x0a\x5a\x27\x56\x7c\x93\xc3\xbe\xf1\x7a\
-\xe1\xfa\xa1\x30\x37\x15\xc4\xf3\xba\x88\xfc\xac\xaa\xd9\x95\xb8\
-\xf3\xe7\x4a\x26\x54\xfc\x56\xe6\xf5\xaa\xe8\xb9\x79\x45\x37\x8a\
-\x48\x57\x8c\xb1\x75\x3c\x10\x06\xd6\x44\xcf\x60\xb6\x78\xab\x43\
-\x2f\xa0\x15\x90\x5d\x26\x66\x29\x01\x63\xa0\x76\xc2\x18\x92\xf5\
-\x99\x47\x80\xcb\x80\x87\x30\x5b\xd2\x75\x8d\x69\x22\x12\x4e\x4f\
-\x4f\x77\x0f\x18\x30\x20\xe6\x93\x2f\x5f\xde\x84\x27\x9f\xec\x46\
-\x42\x42\x84\xd3\x4e\xdb\xcc\xe2\xc5\x4d\x19\x36\xac\x13\xaa\xf0\
-\xc6\x1b\x1d\xe9\xd4\xa9\x88\x61\xc3\x96\x70\xf4\xd1\xf6\x94\x90\
-\x4c\x49\x49\x61\xca\x94\x29\x84\xc3\x61\xdc\xf5\xa9\xb4\x53\x05\
-\x8c\x1f\x3f\x9e\x96\x2d\x5b\xca\xf2\xe5\xcb\x2f\xb2\x5b\x8b\xc3\
-\x9e\x38\x9e\x3b\x87\xfd\xe1\x16\x22\xda\x87\xed\xdb\xe1\x82\x4b\
-\xec\xd6\x52\x7f\x38\xf7\x7c\x73\x6e\xde\xb2\x31\x2e\xd7\x73\x31\
-\x9e\xbd\x3a\xb1\xad\x6f\x61\x3c\x7c\xfd\x80\xa6\xaa\xda\x0d\x28\
-\x69\xd7\x51\xdd\x28\xf2\x10\x30\x1e\xb8\xb0\xcc\xf1\x17\x8c\x31\
-\xb9\xdf\x5b\xbe\x75\x05\xbf\xdf\x9f\x0f\x5c\x04\xfc\xc7\x6e\x2d\
-\xfb\x83\xaa\xee\xf0\x78\x3c\xf3\xd2\xd2\xd2\x6a\x64\xfe\x5f\x7e\
-\x69\x8d\xc7\xa3\x7c\xfb\x6d\x1a\xcf\x3c\xb3\x9c\x51\xa3\xd2\x39\
-\xe9\xa4\x2d\x0c\x1b\xd6\x89\x53\x4f\xdd\xcc\x87\x1f\x2e\xb0\xcd\
-\xb0\x03\x68\xdf\xbe\x3d\xe1\x70\x98\x9c\x9c\x1c\xdb\x34\xc4\x9b\
-\x0d\x1b\x36\x30\x79\xf2\xe4\xc8\xac\x59\xb3\x46\x8f\x1d\x3b\x76\
-\xb6\xdd\x7a\x1c\xf6\xc4\x31\xee\x1c\xaa\x8e\xd7\xf7\x4f\x2e\xbd\
-\x4a\x10\x31\xbd\x57\x1d\x62\x43\xc1\x36\x08\x85\xe0\xf2\xab\xdd\
-\xc0\x15\x22\x12\x6f\x97\x68\x00\x93\x50\x51\x96\x63\x81\x8f\x54\
-\x35\xa3\x24\xbb\x16\x38\xa2\x9c\x71\xfb\xc3\x7c\xa0\x3b\x30\x4b\
-\x55\x67\x94\x73\x14\xc5\x68\x9d\x5a\x8d\xdf\xef\xff\xdd\xef\xf7\
-\xd7\xd9\xa8\xfc\x60\x30\x38\x61\xf6\xec\xd9\xc5\x15\x8f\xac\x3a\
-\xb9\xb9\x3e\xfa\xf7\xdf\x4a\xcb\x96\xe6\xf9\x44\x04\x4e\x3b\xcd\
-\xfc\xde\xf9\xeb\x5f\xb3\x49\x48\xb0\xb7\x54\x60\xd3\xa6\x4d\x69\
-\xd1\xa2\x45\x83\xda\x9a\x7d\xe5\x95\x57\xc2\x53\xa6\x4c\x59\x3b\
-\x62\xc4\x88\x4b\xed\xd6\xe2\x50\x3e\x8e\x71\xe7\x50\x25\x44\x64\
-\x00\xc1\x40\x0f\xfe\x7e\x97\x70\xf4\x71\xf0\xdd\xd7\x76\x4b\xaa\
-\x3f\x8c\xf9\x06\x5a\x1e\x08\xf7\x3f\x0e\x8d\x9b\x08\x26\x1e\xad\
-\x22\x7c\x22\xd2\xb2\x9c\xa3\xd1\x7e\x28\x58\x0b\x1c\x29\x22\x29\
-\x65\xae\x4f\x01\x4e\x8e\xb6\x92\x43\x44\x3a\x00\xb1\xf2\x2c\x3e\
-\x0b\xf4\x04\x9e\x17\x91\x3f\x8b\x1d\x47\x3f\x83\xb3\xdd\x53\x77\
-\x98\xbc\x6a\xd5\x2a\xdf\x8e\x1d\x3b\x62\x3e\x71\x51\x91\x7b\x8f\
-\xc2\xc4\xed\xda\x19\x3b\xb2\x73\xe7\xda\xd1\x9a\x37\x25\x25\xa5\
-\xc1\x18\x77\x33\x67\xce\x64\xd2\xa4\x49\xee\x50\x28\x34\x34\xda\
-\xe0\xc0\xa1\x16\xe2\x18\x77\x0e\x55\xe5\x5c\xba\x1f\x1c\xa0\xcf\
-\x61\x30\x68\x30\x7c\x3b\x12\xe6\xcc\xb2\x5b\x53\xdd\x27\x6b\x1d\
-\x58\xaf\xc0\x5f\xce\x87\x66\xcd\xe1\x82\x4b\x3c\x78\xbd\x83\x2a\
-\x71\xe7\xb5\xc0\x96\x72\x8e\xfd\xa9\x39\x35\x0c\xf3\x3b\x61\x9d\
-\x88\xe4\x8b\xc8\xdb\xa5\xae\x1f\x01\x6c\x14\x91\x19\xc0\x42\x4c\
-\x77\x8c\x6a\xa3\xaa\xd3\x80\x9b\x81\x5b\x80\x0d\x22\x32\x4b\x44\
-\x96\x00\x39\xc0\x1d\xb1\x58\xa3\x2e\x61\x59\x56\x23\xcb\xb2\x1e\
-\xb5\x2c\xab\xae\xa5\x5e\x4e\x55\x55\xe6\xcd\x9b\x57\x23\x93\x17\
-\x14\xb8\x59\xb3\xa6\xf1\x9f\x47\x4e\x8e\x49\xcc\x5d\xbb\xb6\xd1\
-\x6e\xd7\xd7\xae\xdd\x9f\x67\x9a\xea\xd3\xa1\x43\x07\x12\x12\x12\
-\x28\x95\x50\x5e\x2f\x29\x2e\x2e\xe6\xdd\x77\xdf\x0d\xb9\xdd\xee\
-\xef\xaa\x51\x78\xdd\x21\x0e\x38\x09\x15\x0e\x55\xc3\xeb\x3b\x9e\
-\x63\x4f\x30\x1e\x96\x5b\x6e\x87\xdf\xc6\xc3\x45\x67\xc3\xe8\x5f\
-\xa1\x5f\x7f\x9b\xc5\xd5\x51\xb2\xd6\xc1\xa0\x53\xa1\x71\x13\x78\
-\xe2\x79\x73\xad\xff\x31\xf0\xe5\xa7\xfd\x45\x44\x74\xef\xdf\x18\
-\xa7\xb1\xf7\x98\xb7\xb5\xa5\xfe\xfc\x17\x4c\x12\x44\x69\xb6\x02\
-\xa7\x02\x7f\x66\xd0\xaa\xea\x5c\x11\xe9\x8c\xd9\x26\x6d\x85\x29\
-\x7a\x8c\xaa\x8e\x13\x91\xbe\xc0\x29\x98\x42\xe4\xd3\x30\xb1\x70\
-\x0b\x80\xc5\xa5\xe6\x7c\x9c\xdd\xcb\x61\x2c\x2a\xbb\x06\xf0\x37\
-\x60\x37\x77\x8b\xaa\xbe\x27\x22\xdf\x63\xb6\x7f\xbb\x62\x6a\xdd\
-\x2d\x06\x66\xee\xe5\xb3\xd5\x67\x7c\xc0\x50\xcc\xdf\xc3\x75\xf6\
-\x4a\xa9\x3c\xaa\xba\xd9\xe7\xf3\x2d\x4f\x4f\x4f\x3f\xf8\xf8\xe3\
-\x8f\x8f\xf9\xfc\xe3\xc7\xb7\x66\xfc\xf8\x3d\x33\xf2\xaf\xb9\xe6\
-\xd0\xdd\x5e\x7b\xbd\xca\x94\x29\xf1\x7f\xd8\xec\xd4\xa9\x13\x9d\
-\x3a\x75\x8a\xfb\xba\xf1\x66\xd2\xa4\x49\x5c\x7d\xf5\xd5\xee\x61\
-\xc3\x86\xd5\xc5\xc4\x9f\x06\x85\x63\xdc\x39\x54\x8d\x48\xa4\x3f\
-\x47\x1c\x65\xfe\xdc\xa8\x11\x7c\xf6\x2d\x5c\x75\x21\x5c\x78\x26\
-\x7c\xf2\x35\x9c\x74\xaa\xbd\xfa\xea\x1a\x4b\x16\xc2\x95\x17\x9a\
-\x6c\xd9\x31\x13\x20\xb1\x8d\xb9\x7e\xc4\x51\x10\x0a\x35\xc1\x18\
-\x5a\xcb\xcb\xbb\x55\x55\xcb\x66\xc0\x96\x8b\xaa\x4e\x29\xe7\x5a\
-\x10\x98\x54\xce\xf5\x42\x4c\x1c\x5c\xd9\xeb\x4b\xd9\xb3\x57\xed\
-\xa4\x32\x63\x16\x95\x79\xbd\xad\x9c\x31\x73\xf7\xa2\x31\x07\xf8\
-\xae\xbc\xf7\x1a\x12\x7e\xbf\x7f\x9b\x65\x59\xff\x02\x3e\xb5\x2c\
-\xeb\x6d\xbf\xdf\x3f\xcd\x6e\x4d\x95\x25\x18\x0c\xfe\x9a\x9a\x9a\
-\xda\xc5\xef\xf7\xfb\x2a\x1e\x5d\x79\x06\x0d\xca\xa5\x5f\xbf\xca\
-\xb5\x23\x6e\x40\xc9\xaa\x71\x27\x2b\x2b\x8b\x56\xad\x5a\x31\x73\
-\xe6\xcc\x1f\x33\x33\x33\xcb\xfd\x9d\xe4\x50\x7b\x70\x8c\x3b\x87\
-\x4a\x23\xa6\x56\x45\x63\xda\x27\xef\xba\x58\x62\xe0\xf9\xaf\x85\
-\xf3\x4e\x83\xf3\x2f\x86\x27\x5f\x80\xce\x0d\xbb\xd7\x62\x85\x6c\
-\xd9\x0c\xcf\x3e\x0a\xef\x59\xc6\xe3\x39\x7c\x34\xb4\x29\xb5\x13\
-\x57\x62\xe4\x41\x33\x3b\xe4\x39\xd8\x87\xdf\xef\x1f\x6e\x59\xd6\
-\xcd\x98\xd2\x28\xe7\xda\xad\xa7\x0a\x4c\x5e\xba\x74\xe9\xd0\x40\
-\x20\x80\xcf\x17\x3b\xfb\xee\xc4\x13\x6b\xae\x7e\x9e\x43\xe5\x99\
-\x37\x6f\x9e\x46\x22\x91\x60\x46\x46\x86\x93\x44\x51\x07\x70\x62\
-\xee\x1c\xaa\x42\xf9\xcf\xc5\x8d\x1a\xc1\x07\x5f\xc0\xb7\xbf\xc0\
-\xb2\x25\x70\x4c\x2f\x78\xec\x3e\xc8\x6d\x38\xa5\x01\x2a\xcd\x8e\
-\xed\xf0\xe6\x6b\x70\x64\x0f\xf8\x6e\x14\xfc\xef\x7d\xf8\x75\x06\
-\xb4\xdb\x6b\x5f\x4e\xe7\x67\xb4\x61\xf2\x57\xa0\xae\x7d\x89\x4e\
-\x09\x87\xc3\xae\x85\x0b\x17\xda\xad\xc3\x21\xc6\xa4\xa6\xa6\x32\
-\x76\xec\x58\x99\x33\x67\xce\xbf\xe7\xcd\x9b\xb7\xd3\x6e\x3d\x0e\
-\x15\xe3\x78\xee\x1c\xaa\x82\x31\x34\x22\x7b\x29\x3d\x30\xe0\x0c\
-\xf8\x3d\x03\xde\x7f\xd3\x78\xa5\x5e\x7f\x09\xce\x3c\x17\xae\xbe\
-\x1e\xce\x1a\x68\xb6\x1e\x1b\x22\xaa\x30\x6d\x32\x7c\xfa\x01\x8c\
-\xfe\x0a\x22\x61\xb8\xfd\x6e\xd3\x87\xb7\x49\xd3\xf2\xef\x29\xfe\
-\xb3\xaa\x44\xfd\x8e\xd0\x76\x28\x17\xbf\xdf\xbf\xce\x6e\x0d\x55\
-\x45\x55\xb3\x7c\x3e\x5f\x66\x5a\x5a\x5a\xc7\x23\x8e\x88\x55\xa5\
-\x9c\xba\x45\x28\x14\x22\x18\x0c\xd2\xb8\x71\x63\xbb\xa5\xc4\x8c\
-\x50\x28\xc4\xf3\xcf\x3f\x1f\xcc\xca\xca\xfa\x29\x14\x0a\xbd\x62\
-\xb7\x1e\x87\xca\xe1\x78\x05\x1c\x2a\x8d\xaa\x06\xf0\xf9\x72\x59\
-\xb1\x6c\xef\x83\xdc\x6e\xb8\xf9\x36\x58\x94\x09\xff\xfb\xc0\x78\
-\xaa\xae\xbe\x08\x7a\xa5\xc0\x03\x77\xc1\xec\x99\x10\x0e\xef\xfd\
-\xfe\xfa\x82\x2a\x2c\x5e\x00\xcf\x3d\x0e\xfd\xba\xc1\xc0\x01\xb0\
-\x70\x1e\x3c\xfa\x2c\x2c\x5a\x07\x0f\x3e\xb9\x77\xc3\x0e\x60\xd1\
-\x7c\x10\x51\x4c\x6b\x2e\x07\x87\x3a\x41\x30\x18\xfc\x75\xf6\xec\
-\xd9\x41\xbb\x75\xd8\xc5\xb8\x71\xe3\x98\x33\x67\x8e\xdd\x32\x62\
-\xca\xe7\x9f\x7f\xce\xfa\xf5\xeb\x35\x1c\x0e\xdf\x6e\xb7\x16\x87\
-\xca\xe3\x78\xee\x00\x11\x39\x04\xd3\x30\x7d\x4b\xf4\x75\x5b\xe0\
-\x00\x55\x5d\x15\x7d\xed\x05\xba\x01\xeb\x54\x75\xbb\x7d\x4a\x6b\
-\x01\xe1\xf0\x74\x32\xe6\x9e\x47\x45\x0f\x06\x8d\x1a\xc3\x65\x57\
-\x9b\x63\xed\x6a\x18\xfe\x11\x7c\xfe\x31\xbc\xf1\xb2\x29\xf5\xf1\
-\x7f\x27\xc1\xc9\xa7\x99\xa3\xef\xe1\xa6\x32\x69\x5d\x67\xe5\x72\
-\x98\x3c\xc1\x1c\x53\x27\xc1\xc6\x5c\x13\x47\x77\xc9\x95\xc6\x7b\
-\xd9\xe7\xb0\xca\xcf\x95\x36\x1b\x7c\xbe\x95\x5a\x54\x14\xfb\xc2\
-\x61\x0e\x75\x06\xcb\xb2\x5c\xc0\xff\x80\xef\xfd\x7e\xff\x0f\x76\
-\xeb\xa9\x04\x53\x16\x2c\x58\x70\x4d\x43\x6b\xc5\x55\x42\x52\x52\
-\x12\x2b\x56\xac\xb0\x5b\x46\xcc\x58\xb1\x62\x05\x3f\xfc\xf0\x43\
-\x24\x12\x89\x3c\xa9\xaa\x65\x33\xee\x1d\x6a\x31\xf5\xd6\x73\x27\
-\x22\xcd\x44\xe4\xf3\x7d\x1c\x47\x44\xc7\xb9\x30\x65\x17\xae\x2e\
-\x75\xfb\x43\xc0\x2f\xa5\x5e\x77\x88\x8e\x39\x2d\x6e\x1f\xa0\xb6\
-\x12\x0e\xcf\x60\xca\xc4\x10\xa1\x2a\x74\xb3\xea\xd4\x05\xee\x7b\
-\x14\xd2\x57\x9a\xe3\xa9\x17\xa1\xe9\x01\xf0\xf2\x73\x70\xd2\x11\
-\x70\x50\x22\x5c\x7e\x1e\x3c\xf1\x00\x7c\xf9\x19\x2c\xc8\x28\xbd\
-\x2d\x59\xfb\x08\x85\x4c\x6c\xe1\xe8\xaf\xe0\xb9\xc7\xe0\xda\x21\
-\xd0\xbb\x23\xf4\x3f\x18\x1e\xba\xdb\x78\x2b\xff\xf9\x6f\xb3\x45\
-\xbd\x6c\x03\x3c\xfb\x72\xd5\x0c\x3b\x80\x09\x3f\x07\x09\x04\x7e\
-\xaf\x11\xfd\x0e\x75\x06\xbf\xdf\x1f\x01\xbc\xc0\x47\x96\x65\x95\
-\x2d\x2e\x5d\x1b\x99\x1c\x08\x04\xdc\x4b\x97\x96\x4d\xac\x6e\x18\
-\x24\x27\x27\x53\x50\x50\x40\x41\x41\x81\xdd\x52\xaa\xcd\xce\x9d\
-\x3b\x59\xbf\x7e\xbd\x0e\x1c\x38\x30\x9f\xd8\x15\x2d\x77\x88\x13\
-\xf5\xd9\x73\x97\x80\x69\xc6\xbd\x88\x72\x4a\x3b\x54\x91\x1d\xc0\
-\x17\x34\x80\x3e\x97\x95\x60\x04\x9b\x37\x3d\xcd\x98\x51\x30\x78\
-\x3f\xe2\xbd\xbb\x1c\x64\x8e\x6b\x6f\x36\x5b\x97\x0b\xe7\x99\x5a\
-\x79\x73\x66\xc1\xd8\x31\x26\x4e\x2f\x10\x30\xdb\xbb\x07\x75\x87\
-\x5e\x7d\xe1\xe0\x43\xa0\x7d\x0a\xb4\x4f\x86\x76\xed\x21\xa9\x3d\
-\xb4\x4d\xaa\xb9\x18\xbe\x48\xc4\x78\xdd\x36\x64\xc1\x86\x6c\xc8\
-\xc9\x86\xec\x2c\x58\xbe\x04\x16\x2f\x34\xe7\x40\x00\x5c\x2e\xf3\
-\x59\x0e\xe9\x63\x3e\xcf\x29\xa7\x9b\xfa\x74\xd5\xd5\x35\x6d\x32\
-\xcc\x4b\xf3\x62\x7a\xba\xee\x37\x22\x72\x2c\x30\x1a\x38\x4b\x55\
-\x6b\xa6\xba\x6c\xf9\xeb\x3e\x19\x5d\xf3\xd8\x2a\xde\x77\x36\xf0\
-\x11\x70\xb4\xaa\x66\xd6\x88\xb8\xba\xc9\x3f\x30\x7d\x76\x87\x5b\
-\x96\x75\x9a\xdf\xef\xaf\xb5\x71\x0d\xaa\xba\xd2\xe7\xf3\x6d\x4c\
-\x4b\x4b\x6b\xd3\xbb\x77\x6f\xbb\xe5\xc4\x9d\x76\xed\xda\xe1\xf1\
-\x78\x58\xbf\x7e\x3d\x87\x1c\x72\x88\xdd\x72\xaa\xc5\xe4\xc9\x93\
-\xd5\xe7\xf3\x69\x7a\x7a\xfa\x00\x55\xad\x4e\x6f\x6a\x07\x1b\xa8\
-\xcf\xc6\x5d\x09\xa3\x54\xf5\xe1\xea\x4c\xa0\xaa\xb9\xc0\xe5\x31\
-\xd2\x53\xa7\x51\xd5\x35\xe2\xf5\x7e\xc7\xeb\x2f\x0d\x64\xf0\xa5\
-\xd5\xb3\x62\x44\xcc\x96\x6c\xdf\xc3\x77\x5d\x0b\x85\xcc\xf6\xe6\
-\x92\x85\xc6\x90\x5a\xb2\xd0\x18\x7d\x1b\xb2\x60\xf3\x26\x63\x10\
-\x96\xdc\xdb\x3a\xd1\x18\x7b\x6d\xdb\x99\x02\xc0\x09\x09\x90\xd0\
-\xc8\x9c\x1b\x35\x02\x5f\xa9\xb3\x08\x04\x8a\xa1\xa8\x68\xd7\xb9\
-\xb8\x18\x8a\xa3\xe7\xa2\x42\xc8\xdb\x68\x0c\xb9\x8d\xb9\xbb\xc7\
-\x05\xb6\x68\x69\x0c\xca\xae\xdd\xe1\xac\x73\xe1\x1f\xf7\x40\xaf\
-\x3e\x70\x70\x2f\x33\x7f\xac\x79\xe1\xa9\x10\x1e\xef\x0c\x0d\x06\
-\xa6\xc7\x7e\xf2\xb8\xd0\x1c\x68\x53\xe1\x28\x87\x4a\xe1\xf7\xfb\
-\x77\x5a\x96\x75\x29\xf0\x19\xd0\x1e\xa8\xd5\xc9\x16\xa1\x50\x68\
-\xe2\xdc\xb9\x73\x2f\xba\xea\xaa\xab\x1a\xc2\xf7\xcb\x6e\xb8\x5c\
-\x2e\xda\xb5\x6b\x47\x56\x56\x56\x9d\x36\xee\x26\x4e\x9c\x48\x62\
-\x62\xa2\x8c\x1b\x37\xee\x81\x29\x53\xa6\x54\xd7\x39\xe2\x60\x03\
-\x0d\xee\x87\x6f\x7f\x10\x91\xf6\xc0\x08\xe0\x81\x68\xbb\x24\x44\
-\xe4\x79\x4c\x26\xe3\x8f\xc0\x03\xc0\xe1\x18\x0f\xe1\x83\xaa\x3a\
-\xab\xd4\xbd\xc9\xc0\x93\x98\x4a\xfd\xad\x80\x8d\xc0\x2c\xe0\xc6\
-\x92\xa6\xe8\x22\xe2\x06\xee\x04\x2e\x02\x7a\x60\x8a\xc5\xbe\xa1\
-\xaa\xc3\xe3\xf2\x01\xab\x4a\x28\xf4\x5f\xe6\xcc\xba\x90\x5f\x7f\
-\x82\x33\xce\x89\xed\xdc\x1e\x0f\xf4\xec\x65\x8e\x0b\x2e\xd9\xfd\
-\xbd\x60\x10\x72\x37\xec\xf2\xa6\x95\x9c\x37\xe6\x42\x61\xa1\x31\
-\xd0\xb6\xe6\x1b\x83\xad\xb0\xd0\x9c\x8b\x8a\xcc\x75\x55\x63\xf8\
-\x35\x6e\x6c\xce\x8d\x1a\x99\xb8\xc0\x46\x8d\xa0\x59\x33\x13\x1b\
-\xd7\xaf\xff\x2e\xcf\xe0\x9f\xe7\x24\x33\x2e\x5e\xfc\x38\x1a\x26\
-\xfe\xe2\x01\x1e\xad\xee\x54\xaa\x3a\x13\xd8\x6b\x8d\x95\xda\x46\
-\xb4\x9d\x51\x9d\xd1\x1b\x4f\xfc\x7e\xff\x42\xcb\xb2\x8e\xf0\xfb\
-\xfd\xb5\x3e\x7b\x5a\x55\x7f\x4b\x4b\x4b\x1b\xac\xaa\x48\x7d\x88\
-\xa5\xad\x22\xc9\xc9\xc9\xcc\x9f\x5f\x77\xed\xa1\xcc\xcc\x4c\x1e\
-\x7f\xfc\xf1\x50\xd7\xae\x5d\x87\x2f\x5a\xb4\xc8\xd9\x8e\xad\xa3\
-\x38\xc6\x5d\xe5\x68\x84\x69\xbd\x94\x58\xea\xda\xe1\xc0\xc1\xc0\
-\xc5\x98\x78\x84\x77\x30\xad\x95\x7e\x13\x91\xe3\x54\x35\x23\x3a\
-\x6e\x14\xc6\x8b\xf1\x0a\xa6\xd3\x40\x12\xa6\x30\xa9\x17\x28\x8a\
-\x8e\x19\x03\xfc\x1f\x30\x12\x78\x0d\x63\xe4\x7d\x24\x22\xed\x55\
-\xf5\xa5\x1a\xfc\x5c\xfb\x85\xaa\x4e\x11\x8f\xe7\x33\x6e\xbc\xe2\
-\x32\xa6\xcf\xf7\x90\xdc\x21\x3e\x0b\x7b\xbd\x90\xd2\xd1\x1c\xf5\
-\x91\xbc\x8d\x70\xdb\x0d\x41\x5c\xae\x8f\x34\x1c\x9e\x50\x99\x5b\
-\x44\xa4\x0f\x26\xfc\xa0\x17\x26\x7c\x60\x06\xf0\x99\xaa\x16\x88\
-\x48\x27\xe0\x06\xe0\x2d\x55\xcd\x8e\x8e\xff\x1b\x90\x09\x64\x00\
-\x57\x01\xfd\x81\xc7\x54\x75\x41\xf4\x21\xe3\x5a\xe0\x18\xcc\xff\
-\xd9\x55\xc0\x57\x51\x23\x11\x11\xb9\x1d\x58\xa9\xaa\x3f\x96\xd1\
-\xf0\x30\x30\xbe\xe4\xc1\x67\x2f\x3a\x4f\x05\xce\x01\x0e\xc2\xfc\
-\xbf\x4f\xc7\x3c\xc0\x14\x96\x1a\xd3\x13\xb8\x02\x78\x45\x55\xf3\
-\xa3\xd7\xfe\x15\xd5\xba\x1a\xb8\x12\xf3\x73\xf7\x2f\x55\x5d\x1d\
-\x4d\x74\xba\x2e\xaa\xd7\x07\xfc\x0e\xbc\x5f\x5f\xb7\x90\xea\x82\
-\x61\x17\x65\xf2\xce\x9d\x3b\xbd\xab\x56\xad\xa2\x5b\xb7\x6e\x76\
-\x6b\x89\x3b\x29\x29\x29\xa4\xa6\xa6\xb2\x79\xf3\x66\x5a\xb5\x6a\
-\x65\xb7\x9c\x2a\x11\x0c\x06\xb9\xef\xbe\xfb\x82\xa1\x50\x68\xe1\
-\xe2\xc5\x8b\x6f\xb2\x5b\x8f\xc3\xfe\x53\x6f\x13\x2a\x4a\x71\xbb\
-\x88\xac\x2e\xe7\x38\x30\x06\x73\x77\x01\xae\x52\xd5\x77\x55\xf5\
-\x2b\x4c\x0f\xcf\x8d\xc0\x63\x00\x22\xd2\x08\xf3\xc5\xf3\x92\xaa\
-\xbe\xa6\xaa\x63\x55\xf5\x03\x55\x1d\xa2\xaa\x05\xd1\x31\x17\x47\
-\xef\xbb\x51\x55\x6f\x56\xd5\xcf\x55\xf5\x52\xe0\x5d\xe0\x31\x11\
-\x39\x20\x06\x3a\x63\x4f\x38\x7c\x2b\x3b\x77\xae\xe1\x9a\x4b\xc2\
-\x04\x1b\x6c\xe5\x83\xd8\x11\x0a\xc1\xcd\x57\x2a\x3b\xb6\x6f\x25\
-\x12\xb9\xb3\x32\xb7\x88\xc8\xf5\xc0\x1c\xcc\xc3\x42\x26\x10\x04\
-\xee\x05\x8e\x8e\x0e\xe9\x84\xf1\x00\x96\x6a\x29\xc2\xdf\x30\x31\
-\x5c\x53\x31\x85\x72\xb7\x03\xcd\x45\xa4\x05\xc6\x38\x1a\x06\x34\
-\xc5\x18\x76\xbd\xd8\x3d\x90\xfa\x76\x60\x60\x39\x52\x1e\x06\x4e\
-\xd8\x87\xce\x46\xc0\xf7\x18\xaf\xf4\x1a\xa0\x35\xf0\x34\x30\x3b\
-\xfa\x5e\x09\x87\x44\xf5\xb6\x2c\x75\xed\x5f\xc0\x1d\x98\x7e\xb6\
-\x17\x02\x3b\x81\x03\x44\x24\x09\x48\xc5\x64\x92\x26\x61\x3a\x79\
-\xbc\x01\x4c\x11\x91\x98\xb6\xbf\xaa\x8d\x58\x96\x75\x9a\x65\x59\
-\xb5\xd5\x2d\xb6\xd0\xe3\xf1\x6c\x4b\x4f\x4f\xb7\x5b\x87\x2d\xb4\
-\x6e\xdd\x1a\x9f\xcf\xc7\xfa\xf5\x75\x2f\x44\xfb\xb5\xd7\x5e\xd3\
-\xd5\xab\x57\x07\x42\xa1\xd0\x45\xd1\x16\x85\x0e\x75\x94\x86\xe0\
-\xb9\x9b\x85\xd9\x3a\x2d\x4b\x61\x39\xd7\xaa\xca\xd2\x12\xaf\x06\
-\x80\xaa\x16\x8b\xc8\x17\xc0\x4d\xd1\xd7\x45\x22\x32\x0d\xf8\x87\
-\x88\xec\x00\xbe\x2b\x29\xb7\x52\x8a\xbf\x00\x9b\x81\x25\xd1\x92\
-\x2c\x25\xa4\x62\x1a\x88\x1f\x02\xcc\x8e\x81\xd6\x98\xa2\xaa\x3b\
-\x44\x64\x30\xe9\x73\xd2\xb9\xe6\x12\xf8\xf8\xab\x86\x5b\xa4\x38\
-\x16\xfc\xf3\x56\x98\x3c\x51\x08\x87\xef\xa8\x4c\xb9\x1d\x11\xe9\
-\x0c\xbc\x0e\x7c\x09\x5c\xa7\xaa\x91\xe8\x75\x17\xc6\x8b\xb5\x2f\
-\xce\x00\xae\x55\xd5\x8f\x4b\xcd\xf7\x1a\xc6\x2b\x56\xda\xeb\x8c\
-\x88\x34\xa9\xfa\x87\xd9\x83\x62\xa0\x7d\xb4\xd7\x6c\xc9\xbc\x47\
-\x62\x0c\xd3\xa1\x18\xaf\xf6\xbe\x18\x04\x9c\xa7\xaa\xdf\x97\xba\
-\xff\x03\x8c\x17\xb0\x93\xaa\x6e\x88\x5e\xeb\x0d\x2c\xc0\x18\x83\
-\x2f\xc4\x40\x77\xad\xc4\xb2\xac\x1e\xc0\xcf\x18\x43\xfe\xbf\x36\
-\xcb\xd9\x03\x55\x55\xb7\xdb\x3d\x79\xee\xdc\xb9\xe7\x5e\x7c\xf1\
-\xc5\x0d\xc1\x81\xb0\x1b\x22\x42\xfb\xf6\xed\xc9\xca\xca\xe2\xd0\
-\x43\x0f\xb5\x5b\x4e\xa5\x99\x3a\x75\x2a\xbd\x7b\xf7\x96\x89\x13\
-\x27\x0e\xdd\xb8\x71\xe3\x1f\x76\xeb\x71\xa8\x1e\x0d\xe1\x07\x6f\
-\xa6\xaa\xbe\x52\xce\x51\x54\xf1\xad\x15\x92\x55\xce\xb5\xf5\x40\
-\x4b\x11\x29\xe9\x09\x3a\x14\x13\x8b\xf7\x1e\x90\x2b\x22\x5f\x88\
-\xc8\x71\xa5\xc6\x1f\x8c\xf1\x54\xcc\xc1\x6c\x55\x95\x1c\x6f\x60\
-\xbe\x14\x6b\x6d\x0c\x92\xaa\xce\x27\x14\x1a\xca\xcf\x3f\xc0\x75\
-\x43\x60\x7b\xdd\x4f\xff\x8f\x3b\xaa\xf0\xd4\x43\xf0\xd9\x07\x10\
-\x0e\x3f\x56\x85\x38\xcb\x21\x40\x13\xe0\xee\x12\xc3\xce\x4c\xa7\
-\x91\x4a\xfc\xdf\xde\x8c\x09\xce\x2f\xcd\xb5\xc0\x87\xa5\x0d\xbb\
-\xe8\x7c\xd5\x6e\x35\xa4\x86\x6d\x22\xd2\x42\x44\x8e\x14\x91\xb3\
-\x80\xb6\x18\x2f\xde\xe1\x15\xdc\x0e\xf0\x47\x19\xc3\xce\x8b\x29\
-\x5d\xf4\x61\x89\x61\x17\x5d\x67\x11\xc6\xfb\x78\x76\x75\x35\xd7\
-\x66\xfc\x7e\xff\x72\xcc\xee\xc0\xb3\x96\x65\xf5\xb7\x59\x4e\xb9\
-\x44\x22\x91\x49\x73\xe6\xcc\xa9\x97\xdb\xe3\x95\x21\x25\x25\x85\
-\xec\xec\x6c\x22\x7b\xeb\xe6\x53\xcb\xc8\xcc\xcc\xc4\xe5\x72\x91\
-\x9b\x9b\x3b\x7f\xe3\xc6\x8d\x9f\xda\xad\xc7\xa1\xfa\xd4\xa8\xe7\
-\x4e\x44\x9a\x62\x8c\x93\xf6\xa5\xce\x00\xd9\xc0\x86\xe8\x91\xad\
-\xaa\x75\xb5\x50\x6b\x79\x5b\xbb\x07\x62\x62\x8a\xb6\x03\xa8\xea\
-\x02\x60\x88\x88\xb4\x03\xce\x03\x6e\x01\xa6\x8a\x48\x17\x55\x5d\
-\x87\xd9\xc6\xcd\x50\xd5\x23\xe3\xa4\x39\xa6\xa8\xea\x3b\x22\xe2\
-\x63\xdc\x8f\xc3\x38\xaa\xa7\xf0\xc6\x87\x70\xda\x59\x76\xcb\xaa\
-\x1b\x64\xcc\x85\x3b\x6e\x31\x67\xd5\xf7\x54\xf5\xf1\x2a\xdc\xdd\
-\x0b\xd8\x10\xcd\xe4\xae\x2a\x13\x54\xf5\xcf\x74\x60\x11\x49\xc1\
-\x64\xb8\xd6\x48\xb9\x14\x31\x51\xf5\xaf\x01\x37\x63\x4a\x14\xe5\
-\x00\xf9\x98\x18\xd6\x76\x95\x98\xe2\xe7\x32\xaf\x7b\x60\x7e\x77\
-\x5d\x23\x22\x65\xeb\xf1\x34\xc3\xfc\x7e\xa9\xef\x3c\x83\xa9\xbb\
-\xf9\xbe\x65\x59\xfd\x6a\x61\x3c\xde\x94\xfc\xfc\x7c\xdf\xfa\xf5\
-\xeb\x49\x49\xa9\x0b\xe5\xf9\x62\x4b\xd7\xae\x5d\x49\x4c\x4c\xac\
-\x13\x09\x25\xc1\x60\x90\x05\x0b\x16\xa8\xaa\x16\x67\x66\x66\x9e\
-\x68\xb7\x1e\x87\xd8\x10\x13\xe3\x2e\xba\x45\x74\x21\x22\x27\xe0\
-\xf5\x75\x40\x24\x85\x50\xa8\x0d\xd0\xb8\xd4\x20\x68\xde\x22\x00\
-\xc0\xb6\xad\xbe\x3f\x4b\x5a\x00\xe2\xf1\x14\xe2\xf1\x6e\x04\xcd\
-\x26\x10\x58\x8b\xea\x0c\xe0\x1b\x55\xad\xed\xae\xe1\xde\x22\x92\
-\xac\xaa\xa5\x3d\x78\x67\x02\xf3\x55\x75\xb7\x5f\xb6\xaa\x9a\x03\
-\xbc\x2b\x22\xa3\x31\x5f\x6e\x43\x80\x97\x81\x99\xc0\xf9\x22\xd2\
-\x43\x55\x97\xc7\x4b\x78\x2c\x51\xd5\xff\x89\xc8\x8f\x6c\xcc\xfd\
-\x95\x8b\xce\x39\x88\x81\xe7\xc3\x8d\x7f\x33\xbd\x66\x5d\x0d\xc1\
-\x39\x5c\x45\xf2\xb7\xc0\x93\x0f\xc1\xfb\x16\xb8\x3d\x5b\x50\xbd\
-\x5c\x55\xcb\x1a\x30\x15\xb1\x13\x93\xe8\xb3\x5f\x0a\xca\x99\x8b\
-\x4a\xcc\xa7\x94\xf1\xf6\x8b\x48\x63\xa0\xa2\x56\x04\xd7\x01\x7f\
-\x07\x6e\x03\x3e\x57\xd5\xcd\xd1\x7b\xa7\x00\x95\xf9\xf6\xdb\x5a\
-\xe6\x75\x89\x61\xfa\x22\xf0\x6b\x39\xe3\x6b\x71\x05\xec\xd8\xe0\
-\xf7\xfb\x23\x96\x65\x5d\x0d\xb4\xa9\x85\x86\x1d\xc0\x5c\x97\xcb\
-\x55\x94\x96\x96\xd6\xa8\x21\x1a\x77\x8d\x1b\x37\xae\x33\xfd\x65\
-\x2d\xcb\x22\x1c\x0e\x87\x8b\x8b\x8b\xcf\x1f\x33\x66\xcc\xb6\x8a\
-\xef\x70\xa8\x0b\xec\xb7\x71\x17\xcd\xd2\x1b\x8c\x2f\xe1\x52\xe0\
-\x50\x9a\x1e\x10\xe2\x84\x93\xdd\x24\x77\x90\xdd\x4b\x49\x44\xcf\
-\x6d\xda\x81\xd7\x6b\x62\x81\x42\x21\xd8\x98\x03\x39\x1b\xa2\x47\
-\x76\x63\x72\x36\x74\x22\x77\x43\x27\xb2\xd6\x1d\xc3\x6f\x13\x06\
-\xb3\xbd\xe0\x25\x49\x68\xb4\x98\x40\xf1\x17\x18\x43\x6f\x7f\xbd\
-\x0a\x3d\x45\xe4\xc2\x72\xae\x2f\x50\xd5\xea\xf6\x89\x09\x00\x1f\
-\x8b\xc8\x75\x98\x2f\xa0\x3b\x31\xc5\x46\x2f\x81\x3f\x8d\xde\xdb\
-\x31\x5b\x60\x4b\x30\xde\x91\xa1\x98\x2f\xb4\x92\x06\xad\xc3\x80\
-\x5b\x81\x6f\x45\xe4\x0e\x8c\xb1\x97\x80\xf1\xcc\x5c\xa5\xaa\x43\
-\xab\xa9\x31\x2e\x44\x0d\xf1\x6e\x22\x72\x3f\xbf\x8c\xbd\x97\x1f\
-\x46\xb7\x24\x39\x05\xae\xbb\x15\xfe\x7a\x83\x29\x42\xdc\xd0\x99\
-\x3e\x05\x3e\x7a\x07\xbe\xf9\x12\x22\x91\x08\xaa\xc3\x08\x05\xef\
-\x2c\xfb\x20\x50\x49\xe6\x63\xb6\xff\x7b\x47\xb7\x23\xf7\x1b\x55\
-\xdd\x22\x22\xeb\x31\x49\x11\x2f\xef\x63\x68\x1e\x50\xb6\xd5\xc6\
-\xb9\x54\x1c\xde\x71\x2c\x26\x84\xc1\x2a\xf9\xac\xd1\x44\x8a\xfd\
-\x8d\x27\x5d\x81\x89\x99\x4d\x52\xf3\x20\xd8\x20\xf1\xfb\xfd\x59\
-\x94\x1f\x1a\x62\x3b\xaa\x1a\xf2\x78\x3c\xd3\xd2\xd2\xd2\x4e\x1d\
-\x34\x68\x50\xed\x77\x5f\x35\x50\xa6\x4e\x9d\xca\xf0\xe1\xc3\xc1\
-\xc4\xed\xfe\x52\xd1\x78\x87\xba\x43\x95\x8c\xbb\x68\xc0\xf2\x75\
-\xf8\x7c\x43\x80\x2e\x1c\xd8\x2a\xc8\x05\x97\x78\x39\xef\x22\x38\
-\xf9\x34\x4f\xa5\x03\xea\x3d\x9e\x68\xc7\x81\x72\xbf\xf0\x85\x50\
-\xc8\xc3\xd4\x49\x30\x66\x54\x2f\xbe\x1d\xf9\x20\x9b\xf2\x1e\x93\
-\x84\x84\x4c\x02\x81\x2f\x81\x8f\x54\xb5\x2a\x45\x84\x86\x44\x8f\
-\xb2\xdc\x0d\x54\xb7\xcc\xc8\x14\x4c\x16\xdf\x72\x8c\x41\x16\x04\
-\xee\x55\xd5\xaf\xa3\xef\x87\x81\xf3\x31\x19\x7f\x8a\x31\xea\xb6\
-\x03\x8f\xa8\xea\x0f\x00\xaa\x5a\x28\x22\x03\x00\x0b\xb3\xfd\x54\
-\xf2\x8b\xb0\x18\x18\x57\x4d\x7d\x71\x47\x55\x9f\x05\x9e\x15\x91\
-\x53\xc9\x5a\xff\x0c\x2f\x3c\x75\x2c\xcf\x3d\x26\x9c\x7e\x0e\x5c\
-\x7f\x0b\x9c\x35\xd0\xfc\xfb\x37\x14\x36\x64\xc3\xc8\xcf\xe0\x3d\
-\x0b\x56\xaf\x02\xaf\x6f\x07\xc1\xc0\xe7\xc0\x7d\xaa\x9a\x57\x8d\
-\x99\x3f\x03\x1e\xc1\x78\x83\x2f\x2c\xd9\x9e\x15\x91\x0e\x40\x30\
-\xea\x29\xae\x0a\xff\x01\x5e\x15\x91\xeb\x54\xf5\xc3\xe8\x5c\x2e\
-\xe0\x30\x55\x2d\x49\x7b\x9c\x03\x0c\x15\x91\xfe\xaa\x3a\x27\xfa\
-\x80\xf7\xcf\x4a\xcc\x3d\x19\x13\x8e\xd0\x17\x98\x1f\x2d\xb9\xf2\
-\x12\xbb\x97\x16\xaa\x34\xaa\x1a\x16\x91\xff\x00\x0f\x8a\xc8\x78\
-\x55\xfd\xa6\xe4\x3d\x11\xe9\x0e\x24\xab\xea\xe4\xfd\x99\xbb\x2e\
-\x63\x59\x56\x0b\xbf\xdf\x5f\xd6\xcb\x69\x1b\xe1\x70\x78\x52\x6a\
-\x6a\xea\x09\x98\xdf\x8d\x0e\xb5\x8c\x35\x6b\xd6\xf0\xe8\xa3\x8f\
-\x86\x5c\x2e\xd7\xa7\xe1\x70\xb8\x6c\x0c\xae\x43\x1d\xa7\x52\xdf\
-\xb2\x22\xd2\x0e\x91\x27\x11\xb9\x91\xa4\xf6\x61\x2e\xbc\xd4\xcb\
-\xf9\x17\xc1\xb1\x27\x78\x6b\x64\xdb\xcd\xe3\x31\x5b\x7a\x03\xce\
-\x80\x17\xff\xe7\x65\xd6\x74\x18\x33\xaa\x23\xdf\x7c\xf9\x0f\xb2\
-\xd6\xdd\x25\x6e\xf7\x47\x44\x22\x0f\x94\xd4\xee\x2a\x8f\xe8\x17\
-\x67\x85\x4f\x8c\xd1\x60\x74\x29\x73\xed\x1f\x98\x72\x11\x25\xaf\
-\xff\xd8\xdb\x5c\xaa\xfa\x54\xb4\xa0\x71\x37\x60\x95\xaa\x16\x97\
-\x7a\x6f\x1d\x70\xb0\x88\xb4\xc1\xc4\x1b\x06\x80\x35\xa5\x6b\x7b\
-\x45\xc7\x65\x02\x83\xa2\x99\x89\x07\x61\x0c\xbb\x75\x65\xc7\xd5\
-\x25\x54\x75\x22\x70\x7c\x74\xdb\xee\x09\x26\xfd\x72\x23\xbf\x8e\
-\x3d\x90\x56\xad\x8d\x81\x77\xf4\x71\xe6\xe8\x7d\xa8\x69\x35\x56\
-\x5f\xd8\x5e\x00\x53\x7f\x33\x2d\xd5\x7e\x19\x0b\x2b\x96\x82\xc7\
-\xa3\x84\xc3\xe9\xc0\x63\x1a\x28\xfe\x2e\x16\xcb\x44\xb3\x95\x87\
-\x60\x8c\xbc\x35\x22\xb2\x18\xb3\xad\x7a\x30\x26\x16\xab\xaa\xc6\
-\xdd\x1b\xd1\x7b\xdf\x8f\xb6\x0f\xcb\xc2\xfc\x5f\x5c\x84\xa9\xf1\
-\x08\xf0\x3c\x30\x18\x53\xc2\x64\x2d\xd0\x11\xb3\xdd\x5a\x51\x9b\
-\xb1\x51\x98\x52\x2d\xe9\x22\x92\x86\x29\xcd\x32\x15\x98\x58\x45\
-\x8d\xa5\x79\x16\x13\xc7\xfb\xb5\x88\xac\x8b\xea\x6d\x1f\xd5\xf4\
-\x30\xc6\xa0\x6c\x30\x58\x96\xd5\x0b\x98\x66\x59\xd6\x65\x7e\xbf\
-\xbf\xaa\x5b\xfc\x35\xc5\xe4\xdc\xdc\xdc\x27\xf2\xf2\xf2\x48\x4c\
-\xdc\x2f\x3b\xde\xa1\x86\x58\xbb\x76\x2d\x13\x27\x4e\x8c\x00\xa9\
-\x91\x48\xc4\x6f\xb7\x1e\x87\xd8\x23\x15\xed\x08\x89\xc8\x95\xb8\
-\xdd\xef\xd0\x3a\xd1\xcb\x53\x2f\x79\x19\x72\xa5\x89\x9f\xb3\x8b\
-\x51\x5f\xc0\x83\x77\x05\xc9\xcd\x09\x13\x0e\xfb\x4b\xbc\x0c\xf1\
-\x46\x44\xc6\x01\x61\x55\x3d\xd7\x8e\xf5\xeb\x22\x22\x72\x12\xf0\
-\x38\x5e\xef\x91\x44\xb4\x05\xe1\x90\x69\x15\xd6\xef\x28\x38\xee\
-\x04\x63\xec\x1d\x75\x9c\xd9\xc6\xaf\x0b\x84\x42\xc6\x78\x5b\x38\
-\xdf\xf4\xc8\x9d\x3c\x01\xe6\xce\x86\x48\x18\x12\x12\x0a\x29\x2e\
-\x4e\xc3\x94\x2a\x79\xaf\x32\xe5\x4d\xf6\x87\x68\xd2\xd2\xff\x61\
-\xb6\x38\x77\x02\x33\x54\x75\x61\xf4\xbd\x16\xc0\x11\xc0\xec\x92\
-\xf5\x45\xe4\x68\x60\xab\xaa\x2e\xdb\xcb\x7c\x3d\x81\xa3\x30\xb5\
-\xe8\xd6\x02\xbf\x94\x4e\x78\x12\x91\xd6\x98\x6c\xd4\x26\xc0\x14\
-\x55\x5d\x2a\x22\x27\x63\x32\x5a\x33\xa3\x63\xba\x03\xad\x4b\x97\
-\x09\x8a\xd6\x6b\x3c\x0f\x68\x01\xcc\xc5\x6c\xc7\xf6\xc5\x24\xd3\
-\xce\x2f\x35\xf7\xa1\xd1\xcf\x50\xd2\xbd\xe5\x78\x20\x47\x55\x57\
-\xed\x45\x6f\x2f\xa0\x1f\x26\x31\x23\x17\x93\x1d\xbf\x72\x1f\x7f\
-\x5f\xfd\x80\x34\xa0\x97\xaa\x2e\xd9\xdb\xb8\xba\x46\xb4\xe6\xdd\
-\xa7\x98\x9d\x82\x93\xfd\x7e\x7f\x9a\xcd\x92\x10\x91\x46\x2e\x97\
-\xab\xe0\xf1\xc7\x1f\xf7\x9c\x79\xe6\x99\xb6\x68\xc8\xce\x4e\x60\
-\xf0\xe0\x7e\xbc\xfb\xee\x42\xfa\xf6\xad\x91\x1f\xc1\x7d\xb2\x68\
-\x91\x89\x98\xa8\x4d\x7d\x76\x73\x73\x73\x59\xb6\x6c\x19\xeb\xd7\
-\xaf\xdf\x36\x72\xe4\xc8\xce\x99\x99\x99\x65\x63\x70\x1d\xea\x01\
-\xfb\x34\xee\x44\xe4\x21\xe0\x09\x6e\xbb\x4b\x78\xe8\x49\xd3\xbf\
-\xb3\x36\x50\x54\x04\xff\x79\x1c\x5e\x7e\x4e\x81\xa7\x54\xf5\x91\
-\x78\x4b\x70\x8c\xbb\xea\x21\x22\x1e\xe0\x02\x4c\x22\xce\xb1\xf8\
-\x7c\x5d\x28\x2e\x36\xfb\xfa\x49\xed\xe1\xd8\x13\xe0\x90\xde\x90\
-\x94\x1c\xdd\xc2\x8f\x9e\x13\xdb\xc4\x3f\x49\x63\xf3\x26\xc8\x5a\
-\x07\xeb\x32\x61\xf9\x12\x58\x30\x0f\x32\xe6\x98\x1e\xb8\xc1\xa0\
-\xd1\xe3\xf5\x05\x08\x14\xaf\xc2\x74\x6f\x78\x63\x5f\x06\x86\x83\
-\x7d\xd4\x57\xe3\x0e\xc0\xb2\x2c\x2f\xa6\xa6\x67\x5f\xa0\x97\xdf\
-\xef\xb7\xfd\x4b\xdb\xeb\xf5\xce\xb8\xe0\x82\x0b\x8e\xbd\xe7\x9e\
-\x7b\x6c\x59\xdf\x6e\xe3\x6e\xfa\xf4\xe9\xe4\xe4\xe4\x70\xe1\x85\
-\xe5\x85\x7d\xc7\x9f\xad\x5b\xb7\x32\x77\xee\x5c\xdd\xbe\x7d\x7b\
-\xe0\xd7\x5f\x7f\x3d\x78\xc6\x8c\x19\x6b\xed\xd6\xe4\x50\x33\xec\
-\x75\x5b\x56\x44\x9e\xc2\xe5\xba\x9f\x57\xde\x12\xae\xa9\x65\x5d\
-\x48\x1a\x35\x82\x47\x9f\x85\x9e\xbd\x85\xbf\xdf\xf0\xa0\xb8\x5c\
-\x4d\x34\x12\xb9\x3b\xce\x2a\x1e\x8b\xf3\x7a\xf5\x0a\x35\x2d\xa2\
-\xbe\x8e\x1e\x00\x88\x48\x17\xe0\x2a\x36\x64\x9f\xc9\x0f\xa3\x0f\
-\x65\xdc\xf7\xcd\x09\x85\x3c\x84\x4a\x95\xcb\x72\xbb\xa1\x75\xa2\
-\x31\xf4\x3a\x76\x86\xe4\x94\x5d\xc6\x5f\xcb\x03\xc1\xe3\x05\x9f\
-\xcf\x1c\x65\xff\xec\xf5\x9a\x07\x83\xc2\x9d\xb0\x73\x07\xec\x2c\
-\x39\x97\xfa\xf3\xa6\x3c\x58\xbf\x0e\xd6\xae\x86\x75\x6b\x4d\xc2\
-\x4f\x30\xb0\x6b\x7d\x5f\x42\x84\x48\x78\x33\xa1\xd0\x0a\x4c\x0c\
-\xda\xaf\x44\x22\xe3\xb4\xa8\xb0\xce\x6e\xa1\x3b\xd4\x0f\xfc\x7e\
-\x7f\xd0\xb2\xac\x8b\x80\x81\xb5\xc1\xb0\x03\x08\x85\x42\xe2\x2b\
-\x08\x6a\x00\x00\x0e\x74\x49\x44\x41\x54\x13\x52\x53\x53\xfb\xd1\
-\x40\xe3\xee\x92\x93\x93\x59\xb4\x68\x11\xc5\xc5\xc5\x24\x24\xd8\
-\xfb\x57\x50\x5c\x5c\xcc\x23\x8f\x3c\x12\x3a\xfa\xe8\xa3\x43\x4b\
-\x96\x2c\x39\xde\x31\xec\xea\x37\xe5\x7a\xee\x44\xe4\x68\x44\x66\
-\xf0\xd2\x1b\x2e\x6e\xa8\xe5\xc9\x9a\xc3\x3f\x84\xbf\x5d\xaf\xc0\
-\xc9\xaa\x3a\xd5\x6e\x39\x0e\xb1\x27\x5a\x23\xf0\x70\xcc\xd6\x63\
-\x0f\xa0\x33\x90\x0c\x92\x88\xcf\xd7\x0a\x91\x26\x84\x42\x6e\xc2\
-\xfb\x51\x33\x55\xc4\x18\x8c\x2e\x97\x22\xae\x08\x42\x90\x60\x30\
-\x9f\x70\x38\x0f\x13\xc7\xb5\x1a\x93\x30\xb3\x08\x98\xb3\x1f\x89\
-\x0a\x0e\xb5\x88\xfa\xec\xb9\xab\x8d\x88\xc8\x39\xc0\xd8\x9f\x7f\
-\xfe\x99\xe6\xcd\x9b\xc7\x7d\x7d\xbb\x3d\x77\x81\x40\x80\x4f\x3e\
-\xf9\x84\xd3\x4f\x3f\x9d\x2e\x5d\xba\xc4\x7d\xfd\x12\xc2\xe1\x30\
-\x77\xdf\x7d\x77\x38\x35\x35\xb5\x20\x14\x0a\x1d\xa7\xaa\x4b\x6d\
-\x13\xe3\x10\x17\xca\xf7\xdc\x25\x24\xbc\xc5\x31\xc7\x2b\xd7\xdf\
-\x1a\x67\x39\xfb\xc1\x95\xd7\xc1\xd7\x9f\x47\x98\x32\xf1\x4d\xcc\
-\x76\x84\x43\x3d\x23\x6a\x50\xfd\xcc\x9e\xc5\x6c\x77\x43\x44\x12\
-\x31\x1e\x82\x26\x98\x1a\x8b\x09\xd1\x73\xa3\xe8\x9f\x13\x30\xd9\
-\xca\x9b\x30\x5d\x1a\x36\x6a\x24\xe2\xd4\x75\x72\xa8\xb7\x58\x96\
-\xd5\x12\x28\xf0\xfb\xfd\xe1\x0a\x07\xd7\x0c\xd3\x44\x24\x92\x91\
-\x91\xe1\x3a\xe9\xa4\x93\x6c\x92\x60\x1f\x3e\x9f\x8f\xc4\xc4\x44\
-\xb2\xb2\xb2\x6c\x33\xee\x54\x95\xc7\x1f\x7f\x3c\x32\x6b\xd6\xac\
-\xe2\x70\x38\x7c\xba\x63\xd8\x35\x0c\xf6\x30\xee\x44\xa4\x19\x22\
-\xfd\xb8\xed\x2e\xb1\x35\x71\xa2\x2a\xfc\xfd\x5f\x6e\xc6\x8f\xeb\
-\x23\x22\xad\x55\x75\x93\xdd\x72\x1c\xec\xa1\x9a\xa5\x45\x1c\x1c\
-\xea\x15\x96\x65\xb9\x80\x09\x98\xfe\xda\xb6\x6c\xc1\xa8\xea\x36\
-\x9f\xcf\xb7\x30\x2d\x2d\xed\xd0\x86\x68\xdc\x81\xd9\x9a\x5d\xbd\
-\x7a\xb5\x6d\xeb\x8f\x1a\x35\x8a\x48\x24\xa2\xe1\x70\xf8\x5c\x55\
-\x9d\x6b\x9b\x10\x87\xb8\x52\x9e\xe7\xee\x18\x54\x85\xfb\xef\x0c\
-\xf2\xd8\x7d\xb5\xb1\xf2\xf9\x9e\x04\x83\x02\x78\x81\xe3\x80\x1f\
-\x6c\x56\xe3\xe0\xe0\xe0\x60\x3b\xd1\x2e\x16\x4f\x00\x5f\x59\x96\
-\x95\xed\xf7\xfb\xab\xd2\xde\x2e\x66\x04\x83\xc1\xf1\xa9\xa9\xa9\
-\x07\xd3\x40\xe3\xee\x52\x52\x52\xc8\xc8\xc8\x60\xc7\x8e\x1d\x34\
-\x6d\xda\x34\xae\x6b\x8f\x1a\x35\x8a\xae\x5d\xbb\x92\x9f\x9f\xff\
-\x3f\x55\xfd\x2d\xae\x8b\x3b\xd8\x4a\x79\xc6\x5d\x11\xf0\x1f\xfe\
-\xa8\x93\xc9\x7e\x7f\x6e\xb1\x89\x48\x02\xa6\x0c\xc4\x12\x55\xad\
-\x15\xc1\xc5\x0e\x0e\x0e\x0e\xf1\xc4\xef\xf7\x7f\x6b\x59\xd6\xdf\
-\x80\x37\x2d\xcb\x5a\xe9\xf7\xfb\xed\x68\x0a\x3f\x65\xe5\xca\x95\
-\x77\x14\x16\x16\xd6\x99\x96\x5c\xb1\xa4\x5d\xbb\x76\xb8\xdd\x6e\
-\xb2\xb3\xb3\xe9\xde\xbd\x7b\xdc\xd6\xfd\xe9\xa7\x9f\xe8\xdc\xb9\
-\x33\x0b\x17\x2e\x1c\xf9\xf6\xdb\x6f\xdf\x11\xb7\x85\x1d\x6a\x05\
-\x7b\x18\x77\xaa\xfa\x3b\xf0\xbb\x0d\x5a\x62\x4d\x47\x60\x3a\x30\
-\x08\xc7\x9b\xe7\xe0\xe0\xd0\x40\xf1\xfb\xfd\x6f\x5b\x96\x95\x89\
-\xd9\xa2\xb5\x83\x29\x91\x48\x44\xe6\xcf\x9f\xcf\x31\xc7\x1c\x63\
-\x93\x04\xfb\x70\xbb\xdd\xb4\x6d\xdb\x96\xf5\xeb\xd7\xc7\xcd\xb8\
-\xfb\xe1\x87\x1f\xf8\xf2\xcb\x2f\x39\xe6\x98\x63\x46\x7e\xfc\xf1\
-\xc7\x97\xc6\x65\x51\x87\x5a\x45\x03\xea\x03\xe5\xe0\xe0\xe0\xd0\
-\x30\xf1\xfb\xfd\x63\xed\x5a\x5b\x55\x37\xfa\x7c\xbe\x95\x69\x69\
-\x69\xdd\x1a\xa2\x71\x07\x66\x6b\x76\xf1\xe2\xc5\x71\x59\x6b\xc4\
-\x88\x11\xbc\xf6\xda\x6b\xaa\xaa\x4f\x2e\x59\xb2\xe4\xd1\xb8\x2c\
-\xea\x50\xeb\x88\x73\x35\xd8\xf8\x10\xad\xb2\x5f\xd2\x2b\xef\x59\
-\x11\x99\x14\x3d\x8e\x8c\xbe\xff\xa5\x88\xf8\x45\xe4\x42\x11\x19\
-\x2f\x22\x9b\xa2\x25\x12\x10\x91\x13\x44\x64\x9c\x88\x64\x8b\xc8\
-\x22\x11\x79\x4d\x44\x9a\x95\x99\xff\x13\x11\xf9\xa7\x88\x9c\x15\
-\xbd\x3f\x57\x44\x26\x8a\xc8\x11\xe5\x68\xb9\x48\x44\xa6\x89\x48\
-\x96\x88\x7c\x2d\x22\xdd\x45\xe4\x73\x11\xb9\xad\xd4\x98\x7f\x8b\
-\xc8\xbb\xe5\xdc\xfb\xb2\x88\x3c\x55\xe6\x5a\x13\x11\x79\x4e\x44\
-\xe6\x44\xd7\xfd\x55\x44\x4e\x2d\xe7\xde\x36\x22\xf2\xa6\x88\x2c\
-\x8c\xae\x3d\x5a\x44\x9c\x6c\x62\x07\x87\x06\x8e\x65\x59\x62\x59\
-\xd6\x03\x96\x65\xb5\x8e\xd7\x9a\xc1\x60\x70\xfc\x9c\x39\x73\x02\
-\x15\x8f\xac\x9f\xa4\xa4\xa4\xd0\xaa\x55\x2b\x82\xc1\x60\x8d\xad\
-\x11\x0c\x06\x79\xfd\xf5\xd7\xf5\xd5\x57\x5f\x55\x55\xbd\x5f\x55\
-\x1d\xc3\xae\x01\x53\x2f\x8d\x3b\x20\x8f\x5d\xc5\x71\xc7\x03\x1f\
-\x46\x8f\x92\x5e\xb4\xc7\x63\xb2\xc7\xde\x03\xe6\x03\xf7\x00\xf9\
-\xd1\x9a\x4c\x25\x41\xa7\xff\x00\x2c\xe0\x2a\x60\xba\x88\x78\x4b\
-\xcd\x7f\x0c\x70\x23\xf0\x0e\x30\x03\x78\x01\xd3\x87\xf3\xa7\x68\
-\x3b\x28\x00\x44\xe4\x72\xe0\x2b\x4c\x9d\xb4\xa1\xc0\x4c\x4c\x05\
-\xf9\xb3\x81\xd2\xfe\xf9\x9e\xc0\xd1\xe5\x7c\x8e\xc3\x31\xed\x98\
-\x4a\xe6\x6b\x04\xa4\x02\xd7\x00\x93\x80\xbb\xe0\xff\xdb\xbb\xf7\
-\xe0\xa8\xaa\x3b\x80\xe3\xdf\x93\xdd\x20\xa6\x28\x48\x44\xc3\xaa\
-\x40\x4b\x8d\x55\x1c\x6b\x69\x2d\x0c\xb6\x53\x5b\x54\xd4\x76\x5a\
-\xa8\xda\x29\xad\x4a\xb5\x6a\xe7\x38\x53\x95\x5a\xfa\x9c\xd6\xd2\
-\xfa\x88\xaf\xce\x68\xd5\xd3\x82\x28\xd2\x30\x91\x3a\x4a\x9b\xb1\
-\xc2\x84\x50\x2c\x20\xe5\x1d\x22\x1a\x4a\xda\x4a\x06\x08\xa1\x01\
-\x81\x12\x12\x81\xdd\xdc\x5f\xff\x38\x37\xb8\xec\x24\x86\x6c\xb2\
-\x1b\x92\xfd\x7d\x66\xee\x64\xf6\xde\x73\xcf\x39\x19\x20\xf9\x71\
-\x1e\xbf\x43\x00\x54\x1a\x63\xbe\x9a\x54\xee\x1c\xe0\x6d\x60\x22\
-\xfe\xf8\xab\x5f\xe2\xcf\xf3\x5c\x6f\x8c\x39\x56\x9f\x52\x2a\x27\
-\x9d\x0d\x7c\x0f\x58\xee\x9c\x3b\x27\x4b\x6d\x2e\xaf\xa9\xa9\x89\
-\x64\x32\xb8\x39\x99\x0d\x1b\x36\x8c\x49\x93\x26\x91\x9f\x9f\xdf\
-\x79\xe1\x34\x1c\x38\x70\x80\xa5\x4b\x97\xca\xe8\xd1\xa3\x89\x46\
-\xa3\x37\x88\xc8\x23\x19\x69\x48\xf5\x19\xfd\x32\xb8\x0b\xd3\xa1\
-\xbc\x1a\x7e\xac\x14\x91\xb9\xe1\xd5\x90\x54\xec\x12\xe0\x52\x11\
-\xb9\x57\x44\x9e\x17\x91\x3a\xa0\x04\x9f\xe0\xf4\x5a\x11\x79\x59\
-\x44\x7e\x07\x5c\x0f\x8c\x01\xee\x48\x69\x66\x0c\x30\x5e\x44\x7e\
-\x2e\x22\x8f\x01\x77\x01\x67\x01\x57\x03\x18\x63\xf2\x80\x87\x80\
-\x0a\x11\x99\x26\x22\xe5\x22\xf2\x28\xf0\x08\x30\x24\xcd\x6f\x6d\
-\x3a\x70\x11\x30\x49\x44\xee\x13\x91\x52\x11\xb9\x1a\x1f\x90\x3e\
-\x96\x54\xee\x41\x60\x10\x70\x99\x88\xcc\x14\x91\xe7\xf0\x01\xe9\
-\x9e\xf0\x99\x52\x2a\x47\x59\x6b\x77\x03\x97\x87\x1f\xdf\x74\xce\
-\x9d\x9f\x85\x66\x97\x27\x12\x89\x48\xdb\x59\xab\xaa\xe7\x6c\xdf\
-\xbe\x9d\x75\xeb\xd6\xc9\x80\x01\x03\x82\xd5\xab\x57\xdf\x10\x8f\
-\xc7\x5f\xed\xfc\x2d\xd5\xdf\xf5\xcb\xe0\xee\x04\x6d\x6a\x3b\xe8\
-\x1c\xc0\x18\x33\x04\x3f\x52\x56\x2a\x22\x41\xdb\x7d\x11\x79\x03\
-\xf8\x0f\x90\x9a\xa4\xe9\x1f\x29\xc1\xe2\x0a\x40\xf0\x1b\x39\xc0\
-\x9f\xa2\xf0\x51\xe0\xc5\x94\xf7\xca\xc2\x72\xe9\xb8\x0e\xa8\x06\
-\xe2\xc6\x98\x4f\xb4\x5d\xc0\x4a\xa0\x38\x69\xfa\xf8\x3a\x60\x09\
-\x50\x94\x54\xe6\x02\xfc\x68\xdf\x67\xd2\x6c\x5b\x29\xd5\x4f\x58\
-\x6b\x77\xe2\x7f\xa6\x55\x01\x19\x4f\x70\x2c\x22\x3b\xf2\xf3\xf3\
-\x1b\x36\x6d\xda\x94\xe9\xa6\x72\x4a\x75\x75\x35\x73\xe7\xce\x0d\
-\x44\xe4\xe8\x9a\x35\x6b\xc6\x2d\x5e\xbc\x58\x03\x3b\x05\xe4\xf6\
-\x86\x8a\x15\x29\x9f\x47\x85\x5f\xeb\xdb\x29\xbb\x8d\x0f\x82\xb6\
-\x36\xd5\xc9\x1f\x44\xe4\xa0\x31\x26\x8e\x3f\x0d\x01\x60\x44\xf8\
-\x75\x57\x4a\xb9\x16\x63\xcc\x9e\x2e\xf7\xd6\x2b\x06\x0a\x81\xf6\
-\x7e\x42\x1e\x01\x62\xc6\x98\xff\x02\xc3\x80\x2f\x03\xd7\xb4\x53\
-\x4e\x8c\x31\x79\xc9\x01\xac\x52\x2a\xf7\x58\x6b\xf7\x01\x53\xb2\
-\xd5\x5e\x3c\x1e\xaf\xdc\xb0\x61\xc3\x37\xa7\x4d\x9b\x96\x99\xb9\
-\xc9\x1c\xb3\x68\xd1\x22\x1e\x78\xe0\x81\x00\xf8\x6b\x24\x12\xb9\
-\xbd\xbc\xbc\xbc\xb1\xb7\xfb\xa4\x4e\x1e\xb9\x3c\x72\x97\xba\xb8\
-\xb7\xed\x1f\xc6\xd0\x76\xca\x0e\xc3\xaf\xe3\xeb\x8a\xb6\x00\xee\
-\x8c\xe4\x9b\xe1\x74\xed\x19\x29\x65\x03\x3e\x08\x0a\x93\xa5\xae\
-\x87\x69\x04\x5e\x16\x91\x81\x1d\x5c\x5b\x81\x26\x7c\xae\xc2\x07\
-\x3b\x28\x73\xaa\x06\x76\x4a\xa9\xf6\x38\xe7\xc6\x3b\xe7\x32\x75\
-\x34\xd1\xf2\xea\xea\x6a\x13\x04\xb9\xfb\xe3\xe7\xe8\xd1\xa3\x34\
-\x35\x35\x75\xab\x0e\x11\x61\xf6\xec\xd9\xcc\x9c\x39\x93\x20\x08\
-\x7e\xdb\xda\xda\x3a\x59\x03\x3b\x95\xaa\x3f\x07\x77\xcd\xe1\xd7\
-\x33\x4f\xa4\xb0\x88\xec\xc2\x07\x64\x57\x27\xdf\x37\xc6\x8c\xc4\
-\xaf\xaf\x7b\xbb\x8b\xed\xbf\x8b\x3f\xc7\xf4\xca\x94\xfb\x5f\xc0\
-\x9f\xa6\x91\x6c\x17\x70\xbe\x31\xe6\x58\x60\x69\x8c\xb9\x04\x3f\
-\x52\x97\x6c\x2d\x30\x31\x9c\x42\x6e\x97\x88\xb4\x02\xeb\x81\xc9\
-\xc6\x98\x48\x17\xfb\xac\x94\xca\x51\xce\xb9\x61\xf8\x5c\x78\x15\
-\xce\xb9\xa2\x0c\x34\xb1\xe2\xc8\x91\x23\xd1\xda\xda\xda\x0c\x54\
-\xdd\x37\xac\x5c\xb9\x92\x55\xab\x56\xa5\xfd\x7e\x4b\x4b\x0b\xe5\
-\xe5\xe5\x52\x58\x58\x28\xc6\x98\x3b\x83\x20\x98\xa1\xff\x59\x57\
-\xed\xe9\xcf\xc1\xdd\x6e\xfc\x01\xf1\xb7\x18\x63\x26\x1a\x63\x2e\
-\x35\xc6\x0c\xea\xe4\x9d\x87\x80\x29\xc6\x98\xe9\xc6\x98\xa1\xe1\
-\x5a\xb5\x32\x7c\xa0\xf8\x64\x57\x1a\x17\x91\xc3\xc0\x53\xc0\x1d\
-\xc6\x98\xa9\xc6\x98\x81\x61\xc0\xf6\x24\x7e\x0a\x35\x59\x05\x60\
-\x80\x47\xc3\x35\x72\xd7\x03\x7f\x20\xe9\xc4\x8d\xd0\xfd\xf8\x11\
-\xbe\x3f\x1b\x63\x3e\x1b\xa6\x45\x29\x32\xc6\x5c\x6b\x8c\x79\x38\
-\xa9\xdc\x0f\xf1\xbb\x6c\xe7\x1b\x63\x2e\x0a\xdb\x3e\xcf\x18\xf3\
-\x0d\x63\xcc\x7d\x5d\xf9\x3e\x94\x52\xb9\xc1\x5a\xbb\x07\xb8\x02\
-\xbf\xf3\xff\x2d\xe7\xdc\x55\x3d\x59\xbf\x88\x6c\x8d\x46\xa3\xfb\
-\x72\x79\xdd\x5d\x2c\x16\xa3\xa1\xa1\x81\x74\x46\x2f\x1b\x1a\x1a\
-\x58\xbb\x76\xad\x0c\x1e\x3c\x98\xba\xba\xba\x19\x41\x10\xcc\xce\
-\x40\x17\x55\x3f\xd1\x6f\x83\x3b\x11\x11\xe0\x56\xa0\x08\x78\x0d\
-\xbf\x70\x78\x5c\x27\xaf\x3d\x85\x0f\xa0\x4a\xf0\x81\xe1\x16\xfc\
-\x34\xed\x44\x11\x49\x67\x9d\xdc\x4c\x7c\x0a\x96\x52\xa0\x05\x58\
-\x0e\xfc\x1a\x1f\x78\x26\xf7\x75\x25\xf0\x30\x3e\xbd\xca\x16\xfc\
-\x26\x8c\xe7\x81\x0d\x29\xe5\x76\xe2\x77\xb9\x9d\x8a\x4f\xab\xd2\
-\x8c\x4f\xef\xb2\x00\x28\x48\x2a\xb7\x06\xb8\x0a\xf8\x34\xf0\x0e\
-\xf0\x3e\xb0\x1d\x78\x9a\xf4\x37\x73\x28\xa5\xfa\x39\x6b\xed\x5a\
-\xfc\xb1\x8d\x4b\xc8\xc0\xef\x87\x20\x08\xde\xd8\xb8\x71\x63\xc6\
-\x37\x70\x9c\xac\x62\xb1\x18\x89\x44\x82\xc6\xc6\xae\xcd\xa2\x2e\
-\x59\xb2\x84\xca\xca\x4a\xa9\xaf\xaf\x7f\xff\x95\x57\x5e\x19\xbf\
-\x60\xc1\x82\x27\x32\xd4\x45\xd5\x4f\x18\x1f\x03\xa9\x64\x61\x4e\
-\xbb\x8f\x03\x07\x52\x76\xc4\xa6\x5b\xdf\x69\xf8\x3c\x73\xff\x12\
-\x91\xc0\x18\x53\x07\x2c\x14\x91\xe9\x29\xe5\x86\x84\xe5\x6a\x45\
-\x24\xd1\x49\x9d\xa7\xe3\x77\xe3\x1e\x04\x76\x8a\x48\xbb\x09\xa4\
-\x8c\x31\x67\x02\xe7\x02\xfb\xc2\x72\x3a\x84\xaf\x72\x56\x98\xac\
-\xbc\x0a\xb8\x50\x44\xfe\xd9\xdb\xfd\xc9\x35\xc6\x98\xbb\x07\x0d\
-\x1a\xf4\x78\x65\x65\x65\x56\x36\x55\x34\x34\x9c\xc2\x94\x29\x97\
-\xf2\xdc\x73\xef\x70\xf1\xc5\x87\xb2\xd1\x64\xa7\x5e\x7a\xe9\x25\
-\x8a\x8b\x8b\x19\x3b\x76\x6c\xa7\x65\x1b\x1b\x1b\x29\x29\x29\x69\
-\x5d\xb5\x6a\x55\x5e\x41\x41\xc1\x8b\x2d\x2d\x2d\xd3\xf5\xac\x74\
-\x75\x22\xfa\xed\xc8\x5d\x77\x88\x48\x5c\x44\xb6\xf4\x44\x60\x17\
-\xd6\xd7\x24\x22\x5b\x3b\x0b\xac\x44\xe4\x80\x88\xd4\x74\x16\xd8\
-\x85\x65\x0f\x8a\x48\xb5\x88\x6c\xeb\x28\xb0\x0b\xcb\xed\x15\x91\
-\x4d\x22\xb2\x5d\x03\x3b\xa5\x54\x3a\x9c\x73\x9f\x77\xce\xa5\xe6\
-\xfa\x4c\xc7\xf2\x43\x87\x0e\xe5\xd7\xd5\xd5\xf5\x40\x55\x7d\x53\
-\x2c\x16\x63\xd7\xae\x5d\x1f\x5a\x46\x44\x78\xfd\xf5\xd7\x99\x3a\
-\x75\x6a\xeb\xba\x75\xeb\x76\x00\x5f\x6c\x6e\x6e\xbe\x55\x03\x3b\
-\x75\xa2\x34\xb8\x53\x4a\x29\xd5\x99\x71\xc0\xef\x9d\x73\x7f\x72\
-\xce\xa5\x9b\x84\x1d\xe0\xad\x48\x24\xd2\x5c\x55\x55\xd5\x53\xfd\
-\xea\x73\x62\xb1\x18\x8d\x8d\x8d\x1d\x1e\x45\x56\x57\x57\x47\x59\
-\x59\x59\x50\x54\x54\xc4\x84\x09\x13\x16\xc6\xe3\xf1\x0b\x45\xe4\
-\xef\xed\x16\x56\xaa\x03\x1a\xdc\xf5\x8e\x3b\xf1\x47\x9f\x29\xa5\
-\xd4\x49\xcf\x5a\xfb\x38\x7e\x1d\xef\x04\xa0\xca\x39\x57\xd0\xc9\
-\x2b\xed\x0a\x67\x0f\x56\x56\x55\x55\xe5\xec\x2c\x42\x2c\x16\x23\
-\x08\x02\x76\xef\x3e\x6e\xe9\x35\x89\x44\x82\xb2\xb2\x32\x6a\x6b\
-\x6b\x19\x39\x72\x64\xb0\x79\xf3\xe6\x7b\x2a\x2a\x2a\x6e\x0c\x37\
-\xe7\x29\xd5\x25\x1a\xdc\xf5\x02\x11\xa9\x10\x91\xae\xa6\x56\x51\
-\x4a\xa9\x5e\x63\xad\xfd\x1b\xfe\xd8\xc6\xdf\x58\x6b\x5b\xd2\xad\
-\xa7\xb5\xb5\x75\xd9\xfa\xf5\xeb\x73\xf3\x90\x59\xa0\xa0\xa0\x80\
-\x21\x43\x86\x1c\x37\x35\x5b\x53\x53\xc3\x4d\x37\xdd\x14\x9f\x33\
-\x67\xce\x91\xe6\xe6\xe6\xf5\xf1\x78\xfc\x63\xcf\x3e\xfb\xec\x53\
-\xbd\xd8\x4d\xd5\xc7\xe5\xf2\x09\x15\x4a\x29\xa5\xba\x20\x3c\xd5\
-\xe2\xf9\xe4\x7b\xce\xb9\x2f\x01\xbb\xad\xb5\x27\x7a\x70\xec\xf2\
-\x7d\xfb\xf6\x9d\xd2\xd0\xd0\xc0\xf0\xe1\xc3\x7b\xbc\x8f\x7d\x41\
-\x2c\x16\xa3\xbe\xbe\x9e\xa6\xa6\x26\xe6\xcd\x9b\x47\x69\x69\xa9\
-\x44\x22\x91\x15\x89\x44\xe2\xf6\x92\x92\x92\x6d\xbd\xdd\x3f\xd5\
-\xf7\x69\x70\xa7\x94\x52\xaa\x3b\x7e\x00\x5c\xe3\x9c\x7b\x01\xb8\
-\xdf\x5a\xfb\xe1\xbb\x05\x60\x7d\x5e\x5e\xde\xd1\x59\xb3\x66\x0d\
-\x18\x35\x6a\x14\x6d\x19\x1b\x44\xe4\x43\xaf\xd4\x32\x00\x41\x10\
-\x74\xf8\x5c\x44\x68\x6e\x1e\x06\x3c\x43\x69\x69\x29\x43\x87\xd6\
-\x76\x5a\x67\x37\x9e\x4b\xdb\xbd\xb0\x4f\x92\x54\x4e\x52\xdf\x29\
-\x2c\x2c\x64\xc4\x88\x11\x91\xcd\x9b\x37\xb3\x7f\xff\xfe\x23\x22\
-\x72\x67\x3c\x1e\x9f\xd7\x73\x7f\x24\x2a\xd7\x69\x2a\x14\xa5\x54\
-\xce\xd0\x54\x28\x3d\xcf\x39\x97\x07\xdc\x02\x3c\x80\xcf\xc1\x79\
-\x5e\x67\xd3\xb6\xd1\x68\x74\x41\x34\x1a\xbd\x0c\x9f\x77\xb3\x5b\
-\x57\x98\xd3\x34\x00\xa4\xb5\x75\xc6\x59\x41\x70\xdd\x10\x9f\x13\
-\x1e\x60\x60\x9e\xc8\xa7\x4e\x37\xe6\x9d\x26\x38\x98\x00\x23\x00\
-\xc6\xac\x3e\x10\x89\xfc\x68\x5b\xd2\xfb\x6d\x57\x90\xf4\x39\xe8\
-\xe8\x59\xb8\x76\x30\xad\xfe\x8e\x19\x33\xa6\xf0\xb6\xdb\x6e\xbb\
-\xf6\xf0\xe1\xc3\xa6\xaa\xaa\x6a\xc5\xb2\x65\xcb\x6e\xde\xbb\x77\
-\xef\xf1\x0b\xf0\x94\xea\x26\x0d\xee\x94\x52\x39\x43\x83\xbb\xcc\
-\x71\xce\x9d\x0a\x8c\xb7\xd6\x2e\xeb\xad\x3e\x18\xc3\x79\xc0\x56\
-\x7c\x90\xd9\x91\x56\x60\xac\x08\x6f\x65\xa7\x57\xc7\x73\xce\x0d\
-\x04\xee\x05\x9e\xb1\xd6\x76\xef\xa0\x59\xa5\x3a\xa0\xc1\x9d\x52\
-\x2a\x67\x68\x70\x97\x5d\xce\xb9\xbb\x81\x11\xc0\x1c\x6b\xed\x96\
-\x6c\xb4\x69\x0c\xbf\xc2\x9f\x34\xd4\x61\xb7\x44\xb8\x2b\x1b\x7d\
-\x71\xce\x8d\xc4\x9f\x94\x54\x6a\xad\xfd\x77\x36\xda\x54\x0a\x74\
-\xb7\xac\x52\x4a\xa9\xcc\x09\x80\x1b\x81\x1a\xe7\xdc\x2a\xe7\xdc\
-\x05\x59\x68\xf3\x51\x60\x47\x07\xcf\xf6\x03\xbf\xc8\x74\x07\x9c\
-\x73\x57\x38\xe7\x2a\x80\x77\x01\x8b\x3f\xf1\x48\xa9\xac\xd1\xe0\
-\x4e\x29\x95\x4b\x0e\xe3\xa7\xed\x8e\xf4\x76\x47\x72\x81\xb5\xf6\
-\x69\xfc\x31\x89\x93\xf0\x81\x4e\xc6\xd7\x96\x89\xd0\x02\xfc\xb8\
-\x83\xc7\xf7\x8b\xf0\x5e\xa6\xfb\x00\x0c\xc7\xff\x1d\xbb\x01\x38\
-\xd7\x5a\xbb\x38\x0b\x6d\x2a\x75\x8c\x4e\xcb\x2a\xa5\x94\xca\x3a\
-\xe7\xdc\xd9\xc0\x22\x60\x3e\xf0\x47\x6b\x6d\x63\x4f\xd6\x6f\x0c\
-\x6f\xe2\x93\x2e\xb7\xa9\x01\x3e\x29\x42\xa7\xc7\x3b\x9e\x28\xe7\
-\xdc\x19\xc0\xb7\x81\x0b\xac\xb5\xdf\xef\xa9\x7a\x95\xea\x2e\x1d\
-\xb9\x53\x4a\x29\xd5\x1b\xa2\xc0\x1a\xfc\x34\xe9\x4e\xe7\xdc\x13\
-\x3d\x5c\xff\x3d\xf8\x1d\xaa\x6d\xee\xed\xa9\xc0\xce\x39\x97\xef\
-\x9c\x5b\x0a\xec\x02\x1e\x01\x4e\x73\xce\x45\x7a\xa2\x6e\xa5\x7a\
-\x82\x8e\xdc\x29\xa5\x94\xea\x35\xe1\x2e\xdb\xc9\x40\xb3\xb5\xb6\
-\x3c\xe9\xfe\x64\xe0\x6b\xc0\x9b\xc0\x4a\x60\xab\xb5\xb6\x4b\xbf\
-\xb0\x8c\xe1\x05\xe0\x3b\xc0\x5f\x44\x98\x9c\x46\xdf\x46\x03\x97\
-\x03\x9f\x03\x66\x58\x6b\xff\x97\xf4\xac\x04\x3f\x1a\xb8\x50\x77\
-\xbd\xaa\x93\x8d\x26\x31\x56\x4a\x29\xd5\x6b\xac\xb5\xef\x03\x65\
-\xed\x3c\x12\x60\x14\x7e\x43\xc6\x47\x80\x9f\x01\x0f\xb7\x3d\x0c\
-\x03\xaf\x53\x80\xbd\xc0\x7b\xd6\xda\xd6\x76\xea\xf8\x29\xf0\x15\
-\xe0\xbe\xf6\xda\x0e\x73\xf4\x0d\x05\xce\x04\xea\x93\x83\x34\xe7\
-\xdc\x32\xe0\x0a\xfc\xda\xb9\x8d\x40\x11\x70\x2c\xb8\xb3\xd6\xfe\
-\xe4\x04\xbf\x45\xa5\xb2\x4e\x47\xee\x94\x52\x4a\x9d\xb4\x9c\x73\
-\x51\xfc\x99\xb6\x7b\xac\xb5\x3b\x92\xee\xcf\x07\xbe\x15\x7e\x14\
-\xe0\x66\x6b\xed\xfc\xa4\xe7\xdf\x05\xc6\xd4\xd6\x9e\x43\x71\x71\
-\xbd\x00\xf3\xac\xb5\xd5\x49\xcf\x4b\x81\xa9\x7c\xb0\x3c\xe9\xeb\
-\xd6\xda\x85\x49\xcf\xaf\x04\x9a\x81\x8d\xd6\x5a\xdd\x80\xa3\xfa\
-\x14\x1d\xb9\x53\x4a\x29\x75\xd2\xb2\xd6\x26\xf0\x23\x67\xa9\xee\
-\x01\x4a\xf0\x23\x6f\x43\x81\x0d\x29\xcf\xcf\x02\xc6\x15\x17\xd7\
-\x0f\x06\x9a\x80\xd7\x52\x9e\xcf\x02\x16\x02\xfb\xc2\xeb\xdd\x94\
-\x76\x2b\xbb\xdd\x79\xa5\x7a\xc9\xff\x01\xc6\x5e\xaa\x37\xb8\x52\
-\x09\x86\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\
-"
-
-qt_resource_name = "\
-\x00\x09\
-\x0c\x78\x54\x88\
-\x00\x6e\
-\x00\x65\x00\x77\x00\x50\x00\x72\x00\x65\x00\x66\x00\x69\x00\x78\
-\x00\x06\
-\x07\x03\x7d\xc3\
-\x00\x69\
-\x00\x6d\x00\x61\x00\x67\x00\x65\x00\x73\
-\x00\x11\
-\x0b\x8f\x12\x87\
-\x00\x73\
-\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x73\x00\x68\x00\x70\x00\x65\x00\x72\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\
-\
-\x00\x14\
-\x0c\xe5\xe6\xa7\
-\x00\x73\
-\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x72\x00\x65\x00\x63\x00\x74\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2e\
-\x00\x70\x00\x6e\x00\x67\
-\x00\x12\
-\x07\x43\x81\xa7\
-\x00\x73\
-\x00\x63\x00\x68\x00\x65\x00\x6d\x00\x61\x00\x5f\x00\x65\x00\x6c\x00\x6c\x00\x69\x00\x70\x00\x73\x00\x65\x00\x2e\x00\x70\x00\x6e\
-\x00\x67\
-"
-
-qt_resource_struct = "\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\
-\x00\x00\x00\x18\x00\x02\x00\x00\x00\x03\x00\x00\x00\x03\
-\x00\x00\x00\x80\x00\x00\x00\x00\x00\x01\x00\x01\x06\xa2\
-\x00\x00\x00\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-\x00\x00\x00\x52\x00\x00\x00\x00\x00\x01\x00\x00\x5a\xc2\
-"
-
-def qInitResources():
-    QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-def qCleanupResources():
-    QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-qInitResources()
index 4d3384de0d64aeb04d6eab57462b60ac78048465..ecc73966b851b860e7f3ed8366cb4b3d478ab373 100644 (file)
@@ -5,11 +5,11 @@ from PyQt5.QtCore import *
 from PyQt5.QtGui import *
 from PyQt5.QtWidgets import *
 
-import utilityFunctions as uF
-import genereCrack, Zset, output, zcracks_ui
+from . import utilityFunctions as uF
+from . import genereCrack, Zset, output, zcracks_ui
 
-from output import message, init
-from zcracks_ui import Ui_Zui
+from .output import message, init
+from .zcracks_ui import Ui_Zui
 
 
 #  ---------------------
@@ -21,7 +21,7 @@ def stringToFloat(string, typ=float):
   if str(string).replace(' ','')=='':
     out=[]
   else:
-    out=map(typ, str(string).split())
+    out=list(map(typ, str(string).split()))
   return(out)
 
 def addExtension(string, extension):
@@ -266,10 +266,10 @@ class ShipHolderApplication(QGroupBox):
         else:
           obj.setText(self.data[self.lineEditNames[cont]])
 
-      self.ui.CBQuad.setChecked(True if 'quad' in self.data.keys() and self.data['quad'] else False)
-      self.ui.CBBarsoum.setChecked(True if 'barsoum' in self.data.keys() and self.data['barsoum'] else False)
-      self.ui.CBIs2D.setChecked(True if 'is2D' in self.data.keys() and self.data['is2D'] else False)
-      self.ui.CBRefine.setChecked(True if 'refine' in self.data.keys() and self.data['refine'] else False)
+      self.ui.CBQuad.setChecked(True if 'quad' in list(self.data.keys()) and self.data['quad'] else False)
+      self.ui.CBBarsoum.setChecked(True if 'barsoum' in list(self.data.keys()) and self.data['barsoum'] else False)
+      self.ui.CBIs2D.setChecked(True if 'is2D' in list(self.data.keys()) and self.data['is2D'] else False)
+      self.ui.CBRefine.setChecked(True if 'refine' in list(self.data.keys()) and self.data['refine'] else False)
 
       self.setTableParameters()
 
@@ -337,10 +337,10 @@ class ShipHolderApplication(QGroupBox):
       if not test2:
         message('A','No mesh file to visualize')
       else:
-        print medit+' %s' %meshFile2
+        print(medit+' %s' %meshFile2)
         system(medit+' %s' %meshFile2)
     else:
-      print medit+' %s' %meshFile1
+      print(medit+' %s' %meshFile1)
       system(medit+' %s' %meshFile1)
     return()
 
@@ -431,9 +431,8 @@ class ShipHolderApplication(QGroupBox):
     else:
       import SMESH, salome
       #salome.salome_init()
-      theStudy = salome.myStudy
       from salome.smesh import smeshBuilder
-      smesh = smeshBuilder.New(theStudy)
+      smesh = smeshBuilder.New()
 
       ([objetSain], status) = smesh.CreateMeshesFromMED(saneFile)
 
index 2f6933e257ea07551509568f1bd73465cb20f80f..6a6e15f9d953f54fbd572139b7682b3b46178262 100644 (file)
@@ -8,10 +8,9 @@ import sys, numpy
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
+notebook = salome_notebook.NoteBook()
 
 ###
 ### GEOM component
@@ -21,8 +20,8 @@ import GEOM
 from salome.geom import geomBuilder
 import math
 import SALOMEDS
-import utilityFunctions as uF
-from output import message
+from . import utilityFunctions as uF
+from .output import message
 
 #import GEOM_Gen.ild
 #rectangle.generate(data_longueur,data_largeur,data_centre,data_normale,data_direction,data_angle,data_rayon,rayon_entaille,extension,outFile)
@@ -65,7 +64,7 @@ def generate(data_longueur,data_largeur,data_centre,
   Vnormale, Vdirection, Vortho = uF.calcCoordVectors(data_normale, data_direction)
   Vcentre = numpy.array(data_centre)
 
-  geompy = geomBuilder.New(theStudy)
+  geompy = geomBuilder.New()
 
   O = geompy.MakeVertex(0, 0, 0)
   OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -211,16 +210,16 @@ def generate(data_longueur,data_largeur,data_centre,
 
   import  SMESH, SALOMEDS
   from salome.smesh import smeshBuilder
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
 
   Maillage=uF.meshCrack(FACE_FISSURE, minSize, maxSize, chordal, dim)
 
   try:
-    Maillage.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    Maillage.ExportMED(outFile)
     smesh.SetName(Maillage.GetMesh(), 'MAILLAGE_FISSURE')
   except:
-    print 'ExportToMEDX() failed. Invalid file name?'
+    print('ExportMED() failed. Invalid file name?')
 
 
   if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(1)
+    salome.sg.updateObjBrowser()
index 79542b2c5b6b7cf16669f3440fae8e92feb7cbac..4ea4ea8cb9ae3fc5b58db90bd4e83d47c1eb5c36 100644 (file)
@@ -8,10 +8,9 @@ import sys, numpy
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
+notebook = salome_notebook.NoteBook()
 
 ###
 ### GEOM component
@@ -21,8 +20,8 @@ import GEOM
 from salome.geom import geomBuilder
 import math
 import SALOMEDS
-import utilityFunctions as uF
-from output import message
+from . import utilityFunctions as uF
+from .output import message
 
 #import GEOM_Gen.ild
 
@@ -30,7 +29,7 @@ def generate(data_rayon,data_centre,outFile):
   #data_rayon = 0.1
   #data_centre = [1., 1., 01.]
 
-  geompy = geomBuilder.New(theStudy)
+  geompy = geomBuilder.New()
 
   O = geompy.MakeVertex(0, 0, 0)
   OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -48,7 +47,7 @@ def generate(data_rayon,data_centre,outFile):
   import  SMESH, SALOMEDS
   from salome.smesh import smeshBuilder
 
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
 
   A=numpy.pi/(20.)
   chordal, minSize = uF.calcElemSize(A, data_rayon)
@@ -57,14 +56,14 @@ def generate(data_rayon,data_centre,outFile):
   Maillage=uF.meshCrack(FACE_FISSURE, minSize, maxSize, chordal, dim=3)
 
   try:
-    Maillage.ExportMED( outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    Maillage.ExportMED(outFile)
     smesh.SetName(Maillage.GetMesh(), 'MAILLAGE_FISSURE')
   except:
-    print 'ExportToMEDX() failed. Invalid file name?'
+    print('ExportMED() failed. Invalid file name?')
 
 
   ## Set names of Mesh objects
 
 
   if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(1)
+    salome.sg.updateObjBrowser()
index 9571fd8d922ff035f48ee09d68fec83dda91742d..e7aab2a282ed156a574a073e4e4ea7846096a55e 100644 (file)
@@ -3,7 +3,7 @@
 
 import numpy, subprocess, sys
 from os import remove, getpid, path, environ
-from output import message
+from .output import message
 
 def calcCoordVectors(normalIN, directionIN):
   V3TEMP=numpy.cross(normalIN,directionIN)
@@ -17,11 +17,11 @@ def calcCoordVectors(normalIN, directionIN):
 
 def testStrictRange(x, inf=0.0, sup=False):
   test=False
-  c1=(type(x)==list)
+  c1=(isinstance(x, list))
   if c1:
     c2=(len(x)==1)
     if c2:
-      c3=(type(x[0])==type(inf))
+      c3=(isinstance(x[0], type(inf)))
       if c3:
         c4=(x[0]>inf)
         c5=True
@@ -33,24 +33,24 @@ def testStrictRange(x, inf=0.0, sup=False):
 
 def test3dVector(x):
   test=False
-  c1=(type(x)==list)
+  c1=(isinstance(x, list))
   if c1:
     c2=(len(x)==3)
     if c2:
-      c3=(type(x[0])==float)
-      c4=(type(x[1])==float)
-      c5=(type(x[2])==float)
+      c3=(isinstance(x[0], float))
+      c4=(isinstance(x[1], float))
+      c5=(isinstance(x[2], float))
       if c3 and c4 and c5:
         test=True
   return(test)
 
 def testRange(x, inf=0.0, sup=False):
   test=False
-  c1=(type(x)==list)
+  c1=(isinstance(x, list))
   if c1:
     c2=(len(x)==1)
     if c2:
-      c3=(type(x[0])==type(inf))
+      c3=(isinstance(x[0], type(inf)))
       if c3:
         c4=(x[0]>=inf)
         c5=True
@@ -131,11 +131,10 @@ def meshCrack(geomObject, minSize, maxSize, chordal, dim):
   import salome
 
   salome.salome_init()
-  theStudy = salome.myStudy
 
   import  SMESH, SALOMEDS
   from salome.smesh import smeshBuilder
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
   Maillage = smesh.Mesh(geomObject)
 
   if dim==3:
@@ -173,9 +172,8 @@ def extendElsets(meshFile, outFile=None):
 
   import SMESH, salome
   #salome.salome_init()
-  theStudy = salome.myStudy
   from salome.smesh import smeshBuilder
-  smesh = smeshBuilder.New(theStudy)
+  smesh = smeshBuilder.New()
 
   ([mesh], status) = smesh.CreateMeshesFromMED(meshFile)
   
@@ -233,7 +231,7 @@ def extendElsets(meshFile, outFile=None):
     if len(front)==0: crackOnly=False
 
   if crackOnly:
-    mesh.ExportMED(outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+    mesh.ExportMED(outFile)
     return('crack')
 
   # Propagates color using elem connectivity
@@ -266,8 +264,8 @@ def extendElsets(meshFile, outFile=None):
   while ifChanged :
     ifChanged=False
     for elemId in elemList[0]:
-      minColor=sys.maxint
-      maxColor=-sys.maxint
+      minColor=sys.maxsize
+      maxColor=-sys.maxsize
       for elemNodeId in mesh.GetElemNodes(elemId) :
         nodeColor=colorList[elemNodeId-1]
         if nodeColor<minColor : minColor=nodeColor
@@ -304,7 +302,7 @@ def extendElsets(meshFile, outFile=None):
       mesh.MakeGroupByIds('Extended_side%d' %n ,SMESH.EDGE,grElemList[2][n])
 
   if outFile==None: outFile=meshFile
-  mesh.ExportMED(outFile, 0, SMESH.MED_V2_2, 1, None ,1)
+  mesh.ExportMED(outFile)
   return(True)
 
 
@@ -332,7 +330,7 @@ def cleanGroups(mesh):
 
 def getMaxAspectRatio(tmpdir):
   logFile=path.join(tmpdir,'MESHING_OUTPUT')
-  print logFile
+  print(logFile)
   if not path.isfile(logFile): return(-1)
 
   import re
@@ -348,8 +346,8 @@ def getMaxAspectRatio(tmpdir):
 
 
 def removeFromSessionPath(envVar, patern):
-  if type(patern) is not list: patern=[patern]
-  if type(envVar) is not list: envVar=[envVar]
+  if not isinstance(patern, list): patern=[patern]
+  if not isinstance(envVar, list): envVar=[envVar]
 
   for env in envVar:
     path=environ[env]
index fa7acf20e7098532e0ebb6d716c97f5ae81d08f2..4d58ce11456a583a895c3e8e63e9645402e6497f 100755 (executable)
@@ -1,5 +1,4 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
+#!/usr/bin/env python3
 
 import Zcracks
 Zcracks.IHM()
index 60a09a8e753688202add673946f2ae4a71466abc..41351cd47490bc7b80ebbfc9d192654ec82dfebc 100644 (file)
@@ -27,5 +27,5 @@ def ZcracksLct(context):
     if command is not "":
       try:
         subprocess.check_call(command, executable = '/bin/bash', shell = True, bufsize=-1)
-      except Exception, e:
-        print "Error: ",e
+      except Exception as e:
+        print("Error: ",e)
diff --git a/src/Tools/ZCracksPlug/zcracks_ui.py b/src/Tools/ZCracksPlug/zcracks_ui.py
deleted file mode 100644 (file)
index 449e30b..0000000
+++ /dev/null
@@ -1,738 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'zcracks.ui'
-#
-# Created: Wed Oct 19 07:56:41 2016
-#      by: PyQt4 UI code generator 4.9.6
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    def _fromUtf8(s):
-        return s
-
-try:
-    _encoding = QtGui.QApplication.UnicodeUTF8
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig, _encoding)
-except AttributeError:
-    def _translate(context, text, disambig):
-        return QtGui.QApplication.translate(context, text, disambig)
-
-class Ui_Zui(object):
-    def setupUi(self, Zui):
-        Zui.setObjectName(_fromUtf8("Zui"))
-        Zui.resize(709, 540)
-        Zui.setMinimumSize(QtCore.QSize(709, 540))
-        Zui.setMaximumSize(QtCore.QSize(709, 540))
-        palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush)
-        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush)
-        Zui.setPalette(palette)
-        Zui.setTitle(_fromUtf8(""))
-        self.horizontalLayoutWidget = QtGui.QWidget(Zui)
-        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(3, 497, 301, 37))
-        self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget"))
-        self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
-        self.horizontalLayout.setMargin(0)
-        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
-        self.btReset = QtGui.QPushButton(self.horizontalLayoutWidget)
-        self.btReset.setMinimumSize(QtCore.QSize(85, 35))
-        self.btReset.setMaximumSize(QtCore.QSize(85, 35))
-        self.btReset.setObjectName(_fromUtf8("btReset"))
-        self.horizontalLayout.addWidget(self.btReset)
-        self.btSave = QtGui.QPushButton(self.horizontalLayoutWidget)
-        self.btSave.setMinimumSize(QtCore.QSize(85, 35))
-        self.btSave.setMaximumSize(QtCore.QSize(85, 35))
-        self.btSave.setObjectName(_fromUtf8("btSave"))
-        self.horizontalLayout.addWidget(self.btSave)
-        self.btLoad = QtGui.QPushButton(self.horizontalLayoutWidget)
-        self.btLoad.setMinimumSize(QtCore.QSize(85, 35))
-        self.btLoad.setMaximumSize(QtCore.QSize(85, 35))
-        self.btLoad.setObjectName(_fromUtf8("btLoad"))
-        self.horizontalLayout.addWidget(self.btLoad)
-        self.horizontalLayoutWidget_2 = QtGui.QWidget(Zui)
-        self.horizontalLayoutWidget_2.setGeometry(QtCore.QRect(344, 490, 360, 51))
-        self.horizontalLayoutWidget_2.setObjectName(_fromUtf8("horizontalLayoutWidget_2"))
-        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.horizontalLayoutWidget_2)
-        self.horizontalLayout_2.setMargin(0)
-        self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2"))
-        self.btCancel = QtGui.QPushButton(self.horizontalLayoutWidget_2)
-        self.btCancel.setMinimumSize(QtCore.QSize(100, 35))
-        self.btCancel.setMaximumSize(QtCore.QSize(100, 35))
-        self.btCancel.setObjectName(_fromUtf8("btCancel"))
-        self.horizontalLayout_2.addWidget(self.btCancel)
-        self.btApply = QtGui.QPushButton(self.horizontalLayoutWidget_2)
-        self.btApply.setMinimumSize(QtCore.QSize(100, 35))
-        self.btApply.setMaximumSize(QtCore.QSize(100, 35))
-        self.btApply.setObjectName(_fromUtf8("btApply"))
-        self.horizontalLayout_2.addWidget(self.btApply)
-        self.btApplyClose = QtGui.QPushButton(self.horizontalLayoutWidget_2)
-        self.btApplyClose.setMinimumSize(QtCore.QSize(130, 35))
-        self.btApplyClose.setMaximumSize(QtCore.QSize(130, 35))
-        self.btApplyClose.setObjectName(_fromUtf8("btApplyClose"))
-        self.horizontalLayout_2.addWidget(self.btApplyClose)
-        self.frame = QtGui.QFrame(Zui)
-        self.frame.setGeometry(QtCore.QRect(3, 6, 309, 255))
-        self.frame.setFrameShape(QtGui.QFrame.Panel)
-        self.frame.setFrameShadow(QtGui.QFrame.Raised)
-        self.frame.setLineWidth(2)
-        self.frame.setMidLineWidth(0)
-        self.frame.setObjectName(_fromUtf8("frame"))
-        self.gridLayoutWidget = QtGui.QWidget(self.frame)
-        self.gridLayoutWidget.setGeometry(QtCore.QRect(-2, 21, 311, 81))
-        self.gridLayoutWidget.setObjectName(_fromUtf8("gridLayoutWidget"))
-        self.gridLayout = QtGui.QGridLayout(self.gridLayoutWidget)
-        self.gridLayout.setSpacing(6)
-        self.gridLayout.setContentsMargins(10, 0, 10, 0)
-        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
-        self.txtCrackedName = QtGui.QLabel(self.gridLayoutWidget)
-        self.txtCrackedName.setMinimumSize(QtCore.QSize(112, 0))
-        self.txtCrackedName.setMaximumSize(QtCore.QSize(76, 16777215))
-        self.txtCrackedName.setStatusTip(_fromUtf8(""))
-        self.txtCrackedName.setWhatsThis(_fromUtf8(""))
-        self.txtCrackedName.setAccessibleName(_fromUtf8(""))
-        self.txtCrackedName.setAccessibleDescription(_fromUtf8(""))
-        self.txtCrackedName.setObjectName(_fromUtf8("txtCrackedName"))
-        self.gridLayout.addWidget(self.txtCrackedName, 0, 0, 1, 1)
-        self.valCrackedName = QtGui.QLineEdit(self.gridLayoutWidget)
-        self.valCrackedName.setMinimumSize(QtCore.QSize(118, 0))
-        self.valCrackedName.setAutoFillBackground(True)
-        self.valCrackedName.setObjectName(_fromUtf8("valCrackedName"))
-        self.gridLayout.addWidget(self.valCrackedName, 0, 1, 1, 1)
-        self.txtSaneName = QtGui.QLabel(self.gridLayoutWidget)
-        self.txtSaneName.setMaximumSize(QtCore.QSize(100, 16777215))
-        self.txtSaneName.setObjectName(_fromUtf8("txtSaneName"))
-        self.gridLayout.addWidget(self.txtSaneName, 1, 0, 1, 1)
-        self.valSaneName = QtGui.QLineEdit(self.gridLayoutWidget)
-        self.valSaneName.setToolTip(_fromUtf8("file address (ex: /home/A123456/cuve.med)"))
-        self.valSaneName.setAutoFillBackground(True)
-        self.valSaneName.setInputMask(_fromUtf8(""))
-        self.valSaneName.setText(_fromUtf8(""))
-        self.valSaneName.setObjectName(_fromUtf8("valSaneName"))
-        self.gridLayout.addWidget(self.valSaneName, 1, 1, 1, 1)
-        self.btLoadCracked = QtGui.QPushButton(self.gridLayoutWidget)
-        self.btLoadCracked.setMinimumSize(QtCore.QSize(28, 28))
-        self.btLoadCracked.setMaximumSize(QtCore.QSize(28, 28))
-        self.btLoadCracked.setObjectName(_fromUtf8("btLoadCracked"))
-        self.gridLayout.addWidget(self.btLoadCracked, 0, 2, 1, 1)
-        self.btLoadSane = QtGui.QPushButton(self.gridLayoutWidget)
-        self.btLoadSane.setMinimumSize(QtCore.QSize(28, 28))
-        self.btLoadSane.setMaximumSize(QtCore.QSize(28, 28))
-        self.btLoadSane.setObjectName(_fromUtf8("btLoadSane"))
-        self.gridLayout.addWidget(self.btLoadSane, 1, 2, 1, 1)
-        self.cracked_name_2 = QtGui.QLabel(self.frame)
-        self.cracked_name_2.setGeometry(QtCore.QRect(0, 0, 311, 28))
-        palette = QtGui.QPalette()
-        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
-        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Text, brush)
-        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.BrightText, brush)
-        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.ButtonText, brush)
-        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
-        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Text, brush)
-        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.BrightText, brush)
-        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.ButtonText, brush)
-        brush = QtGui.QBrush(QtGui.QColor(118, 118, 117))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
-        brush = QtGui.QBrush(QtGui.QColor(118, 118, 117))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Text, brush)
-        brush = QtGui.QBrush(QtGui.QColor(255, 255, 255))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.BrightText, brush)
-        brush = QtGui.QBrush(QtGui.QColor(118, 118, 117))
-        brush.setStyle(QtCore.Qt.SolidPattern)
-        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, brush)
-        self.cracked_name_2.setPalette(palette)
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        self.cracked_name_2.setFont(font)
-        self.cracked_name_2.setAlignment(QtCore.Qt.AlignCenter)
-        self.cracked_name_2.setObjectName(_fromUtf8("cracked_name_2"))
-        self.gridLayoutWidget_3 = QtGui.QWidget(self.frame)
-        self.gridLayoutWidget_3.setGeometry(QtCore.QRect(-2, 102, 311, 161))
-        self.gridLayoutWidget_3.setObjectName(_fromUtf8("gridLayoutWidget_3"))
-        self.gridLayout_3 = QtGui.QGridLayout(self.gridLayoutWidget_3)
-        self.gridLayout_3.setContentsMargins(10, 0, 10, 0)
-        self.gridLayout_3.setObjectName(_fromUtf8("gridLayout_3"))
-        self.txtMaxSize = QtGui.QLabel(self.gridLayoutWidget_3)
-        self.txtMaxSize.setObjectName(_fromUtf8("txtMaxSize"))
-        self.gridLayout_3.addWidget(self.txtMaxSize, 1, 0, 1, 1)
-        self.txtExtractLength = QtGui.QLabel(self.gridLayoutWidget_3)
-        self.txtExtractLength.setObjectName(_fromUtf8("txtExtractLength"))
-        self.gridLayout_3.addWidget(self.txtExtractLength, 2, 0, 1, 1)
-        self.valMinSize = QtGui.QLineEdit(self.gridLayoutWidget_3)
-        self.valMinSize.setAutoFillBackground(True)
-        self.valMinSize.setObjectName(_fromUtf8("valMinSize"))
-        self.gridLayout_3.addWidget(self.valMinSize, 0, 1, 1, 1)
-        self.valMaxSize = QtGui.QLineEdit(self.gridLayoutWidget_3)
-        self.valMaxSize.setAutoFillBackground(True)
-        self.valMaxSize.setObjectName(_fromUtf8("valMaxSize"))
-        self.gridLayout_3.addWidget(self.valMaxSize, 1, 1, 1, 1)
-        self.valExtractLength = QtGui.QLineEdit(self.gridLayoutWidget_3)
-        self.valExtractLength.setAutoFillBackground(True)
-        self.valExtractLength.setObjectName(_fromUtf8("valExtractLength"))
-        self.gridLayout_3.addWidget(self.valExtractLength, 2, 1, 1, 1)
-        self.CBQuad = QtGui.QCheckBox(self.gridLayoutWidget_3)
-        self.CBQuad.setObjectName(_fromUtf8("CBQuad"))
-        self.gridLayout_3.addWidget(self.CBQuad, 3, 0, 1, 1)
-        self.CBBarsoum = QtGui.QCheckBox(self.gridLayoutWidget_3)
-        self.CBBarsoum.setEnabled(False)
-        self.CBBarsoum.setObjectName(_fromUtf8("CBBarsoum"))
-        self.gridLayout_3.addWidget(self.CBBarsoum, 3, 1, 1, 1)
-        self.txtMinSize = QtGui.QLabel(self.gridLayoutWidget_3)
-        self.txtMinSize.setObjectName(_fromUtf8("txtMinSize"))
-        self.gridLayout_3.addWidget(self.txtMinSize, 0, 0, 1, 1)
-        self.frame_2 = QtGui.QFrame(Zui)
-        self.frame_2.setGeometry(QtCore.QRect(2, 265, 309, 226))
-        self.frame_2.setFrameShape(QtGui.QFrame.Panel)
-        self.frame_2.setFrameShadow(QtGui.QFrame.Raised)
-        self.frame_2.setLineWidth(2)
-        self.frame_2.setMidLineWidth(0)
-        self.frame_2.setObjectName(_fromUtf8("frame_2"))
-        self.labelCrackedName = QtGui.QLabel(self.frame_2)
-        self.labelCrackedName.setGeometry(QtCore.QRect(-1, 0, 311, 28))
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        self.labelCrackedName.setFont(font)
-        self.labelCrackedName.setAlignment(QtCore.Qt.AlignCenter)
-        self.labelCrackedName.setObjectName(_fromUtf8("labelCrackedName"))
-        self.gridLayoutWidget_2 = QtGui.QWidget(self.frame_2)
-        self.gridLayoutWidget_2.setGeometry(QtCore.QRect(0, 14, 311, 220))
-        self.gridLayoutWidget_2.setObjectName(_fromUtf8("gridLayoutWidget_2"))
-        self.gridLayout_2 = QtGui.QGridLayout(self.gridLayoutWidget_2)
-        self.gridLayout_2.setMargin(10)
-        self.gridLayout_2.setSpacing(10)
-        self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2"))
-        self.txtGrVol = QtGui.QLabel(self.gridLayoutWidget_2)
-        self.txtGrVol.setObjectName(_fromUtf8("txtGrVol"))
-        self.gridLayout_2.addWidget(self.txtGrVol, 0, 0, 1, 1)
-        self.valGrVol = QtGui.QLineEdit(self.gridLayoutWidget_2)
-        self.valGrVol.setAutoFillBackground(True)
-        self.valGrVol.setObjectName(_fromUtf8("valGrVol"))
-        self.gridLayout_2.addWidget(self.valGrVol, 0, 1, 1, 1)
-        self.txtGrFace = QtGui.QLabel(self.gridLayoutWidget_2)
-        self.txtGrFace.setToolTip(_fromUtf8("Groups of faces to keep"))
-        self.txtGrFace.setObjectName(_fromUtf8("txtGrFace"))
-        self.gridLayout_2.addWidget(self.txtGrFace, 1, 0, 1, 1)
-        self.valGrFace = QtGui.QLineEdit(self.gridLayoutWidget_2)
-        self.valGrFace.setToolTip(_fromUtf8("groups separated by a space (ex: Gr1 Gr2 Gr3)"))
-        self.valGrFace.setAutoFillBackground(True)
-        self.valGrFace.setInputMask(_fromUtf8(""))
-        self.valGrFace.setText(_fromUtf8(""))
-        self.valGrFace.setObjectName(_fromUtf8("valGrFace"))
-        self.gridLayout_2.addWidget(self.valGrFace, 1, 1, 1, 1)
-        self.txtGrEdge = QtGui.QLabel(self.gridLayoutWidget_2)
-        self.txtGrEdge.setObjectName(_fromUtf8("txtGrEdge"))
-        self.gridLayout_2.addWidget(self.txtGrEdge, 2, 0, 1, 1)
-        self.valGrEdge = QtGui.QLineEdit(self.gridLayoutWidget_2)
-        self.valGrEdge.setAutoFillBackground(True)
-        self.valGrEdge.setObjectName(_fromUtf8("valGrEdge"))
-        self.gridLayout_2.addWidget(self.valGrEdge, 2, 1, 1, 1)
-        self.txtGrNode = QtGui.QLabel(self.gridLayoutWidget_2)
-        self.txtGrNode.setObjectName(_fromUtf8("txtGrNode"))
-        self.gridLayout_2.addWidget(self.txtGrNode, 3, 0, 1, 1)
-        self.valGrNode = QtGui.QLineEdit(self.gridLayoutWidget_2)
-        self.valGrNode.setAutoFillBackground(True)
-        self.valGrNode.setObjectName(_fromUtf8("valGrNode"))
-        self.gridLayout_2.addWidget(self.valGrNode, 3, 1, 1, 1)
-        self.btGrVol = QtGui.QPushButton(self.gridLayoutWidget_2)
-        self.btGrVol.setMaximumSize(QtCore.QSize(40, 28))
-        self.btGrVol.setObjectName(_fromUtf8("btGrVol"))
-        self.gridLayout_2.addWidget(self.btGrVol, 0, 2, 1, 1)
-        self.btGrFace = QtGui.QPushButton(self.gridLayoutWidget_2)
-        self.btGrFace.setMaximumSize(QtCore.QSize(40, 28))
-        self.btGrFace.setObjectName(_fromUtf8("btGrFace"))
-        self.gridLayout_2.addWidget(self.btGrFace, 1, 2, 1, 1)
-        self.btGrEdge = QtGui.QPushButton(self.gridLayoutWidget_2)
-        self.btGrEdge.setMaximumSize(QtCore.QSize(40, 28))
-        self.btGrEdge.setObjectName(_fromUtf8("btGrEdge"))
-        self.gridLayout_2.addWidget(self.btGrEdge, 2, 2, 1, 1)
-        self.btGrNode = QtGui.QPushButton(self.gridLayoutWidget_2)
-        self.btGrNode.setMaximumSize(QtCore.QSize(40, 28))
-        self.btGrNode.setObjectName(_fromUtf8("btGrNode"))
-        self.gridLayout_2.addWidget(self.btGrNode, 3, 2, 1, 1)
-        self.btGrAll = QtGui.QPushButton(self.gridLayoutWidget_2)
-        self.btGrAll.setMaximumSize(QtCore.QSize(80, 28))
-        self.btGrAll.setObjectName(_fromUtf8("btGrAll"))
-        self.gridLayout_2.addWidget(self.btGrAll, 4, 1, 1, 1)
-        self.frame_3 = QtGui.QFrame(Zui)
-        self.frame_3.setGeometry(QtCore.QRect(317, 6, 388, 333))
-        self.frame_3.setFrameShape(QtGui.QFrame.Panel)
-        self.frame_3.setFrameShadow(QtGui.QFrame.Raised)
-        self.frame_3.setLineWidth(2)
-        self.frame_3.setMidLineWidth(0)
-        self.frame_3.setObjectName(_fromUtf8("frame_3"))
-        self.tabWidget = QtGui.QTabWidget(self.frame_3)
-        self.tabWidget.setGeometry(QtCore.QRect(4, 23, 378, 306))
-        self.tabWidget.setMinimumSize(QtCore.QSize(0, 270))
-        self.tabWidget.setMaximumSize(QtCore.QSize(16777215, 331))
-        self.tabWidget.setObjectName(_fromUtf8("tabWidget"))
-        self.ongletEllipse = QtGui.QWidget()
-        self.ongletEllipse.setObjectName(_fromUtf8("ongletEllipse"))
-        self.tabEllipse = QtGui.QTableWidget(self.ongletEllipse)
-        self.tabEllipse.setGeometry(QtCore.QRect(0, 0, 375, 271))
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.tabEllipse.sizePolicy().hasHeightForWidth())
-        self.tabEllipse.setSizePolicy(sizePolicy)
-        self.tabEllipse.setMaximumSize(QtCore.QSize(16777215, 301))
-        self.tabEllipse.setBaseSize(QtCore.QSize(0, 0))
-        font = QtGui.QFont()
-        font.setUnderline(False)
-        self.tabEllipse.setFont(font)
-        self.tabEllipse.setMouseTracking(False)
-        self.tabEllipse.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
-        self.tabEllipse.setAutoFillBackground(False)
-        self.tabEllipse.setObjectName(_fromUtf8("tabEllipse"))
-        self.tabEllipse.setColumnCount(1)
-        self.tabEllipse.setRowCount(8)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setItalic(False)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabEllipse.setVerticalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabEllipse.setVerticalHeaderItem(1, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabEllipse.setVerticalHeaderItem(2, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setVerticalHeaderItem(3, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setVerticalHeaderItem(4, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setVerticalHeaderItem(5, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setVerticalHeaderItem(6, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setVerticalHeaderItem(7, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setHorizontalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
-        brush.setStyle(QtCore.Qt.NoBrush)
-        item.setBackground(brush)
-        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
-        brush.setStyle(QtCore.Qt.NoBrush)
-        item.setForeground(brush)
-        self.tabEllipse.setItem(0, 0, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabEllipse.setItem(1, 0, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabEllipse.setItem(2, 0, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setItem(3, 0, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setItem(4, 0, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabEllipse.setItem(5, 0, item)
-        self.infoEllipse = QtGui.QLabel(self.ongletEllipse)
-        self.infoEllipse.setGeometry(QtCore.QRect(330, 0, 40, 25))
-        self.infoEllipse.setAlignment(QtCore.Qt.AlignCenter)
-        self.infoEllipse.setObjectName(_fromUtf8("infoEllipse"))
-        self.tabWidget.addTab(self.ongletEllipse, _fromUtf8(""))
-        self.ongletRectangle = QtGui.QWidget()
-        self.ongletRectangle.setObjectName(_fromUtf8("ongletRectangle"))
-        self.tabRectangle = QtGui.QTableWidget(self.ongletRectangle)
-        self.tabRectangle.setGeometry(QtCore.QRect(0, 0, 375, 271))
-        self.tabRectangle.setMaximumSize(QtCore.QSize(16777215, 301))
-        self.tabRectangle.setObjectName(_fromUtf8("tabRectangle"))
-        self.tabRectangle.setColumnCount(1)
-        self.tabRectangle.setRowCount(8)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabRectangle.setVerticalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabRectangle.setVerticalHeaderItem(1, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabRectangle.setVerticalHeaderItem(2, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabRectangle.setVerticalHeaderItem(3, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setVerticalHeaderItem(4, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setVerticalHeaderItem(5, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setVerticalHeaderItem(6, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setVerticalHeaderItem(7, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setHorizontalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setItem(3, 0, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setItem(4, 0, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setItem(5, 0, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabRectangle.setItem(6, 0, item)
-        self.infoRectangle = QtGui.QLabel(self.ongletRectangle)
-        self.infoRectangle.setGeometry(QtCore.QRect(330, 0, 40, 25))
-        self.infoRectangle.setAlignment(QtCore.Qt.AlignCenter)
-        self.infoRectangle.setObjectName(_fromUtf8("infoRectangle"))
-        self.tabWidget.addTab(self.ongletRectangle, _fromUtf8(""))
-        self.ongletSphere = QtGui.QWidget()
-        self.ongletSphere.setObjectName(_fromUtf8("ongletSphere"))
-        self.tabSphere = QtGui.QTableWidget(self.ongletSphere)
-        self.tabSphere.setGeometry(QtCore.QRect(0, 0, 375, 272))
-        self.tabSphere.setMaximumSize(QtCore.QSize(16777215, 301))
-        self.tabSphere.setObjectName(_fromUtf8("tabSphere"))
-        self.tabSphere.setColumnCount(1)
-        self.tabSphere.setRowCount(2)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabSphere.setVerticalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabSphere.setVerticalHeaderItem(1, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabSphere.setHorizontalHeaderItem(0, item)
-        self.infoSphere = QtGui.QLabel(self.ongletSphere)
-        self.infoSphere.setGeometry(QtCore.QRect(330, 0, 40, 25))
-        self.infoSphere.setAlignment(QtCore.Qt.AlignCenter)
-        self.infoSphere.setObjectName(_fromUtf8("infoSphere"))
-        self.tabWidget.addTab(self.ongletSphere, _fromUtf8(""))
-        self.ongletPerso = QtGui.QWidget()
-        self.ongletPerso.setObjectName(_fromUtf8("ongletPerso"))
-        self.tabPerso = QtGui.QTableWidget(self.ongletPerso)
-        self.tabPerso.setGeometry(QtCore.QRect(0, 0, 375, 271))
-        self.tabPerso.setMaximumSize(QtCore.QSize(16777215, 301))
-        self.tabPerso.setObjectName(_fromUtf8("tabPerso"))
-        self.tabPerso.setColumnCount(1)
-        self.tabPerso.setRowCount(1)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        item.setFont(font)
-        self.tabPerso.setVerticalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
-        font = QtGui.QFont()
-        font.setBold(False)
-        font.setWeight(50)
-        item.setFont(font)
-        self.tabPerso.setHorizontalHeaderItem(0, item)
-        item = QtGui.QTableWidgetItem()
-        self.tabPerso.setItem(0, 0, item)
-        self.infoCustom = QtGui.QLabel(self.ongletPerso)
-        self.infoCustom.setGeometry(QtCore.QRect(330, 0, 40, 25))
-        self.infoCustom.setAlignment(QtCore.Qt.AlignCenter)
-        self.infoCustom.setObjectName(_fromUtf8("infoCustom"))
-        self.tabWidget.addTab(self.ongletPerso, _fromUtf8(""))
-        self.labelCrackName = QtGui.QLabel(self.frame_3)
-        self.labelCrackName.setGeometry(QtCore.QRect(0, 0, 381, 28))
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        self.labelCrackName.setFont(font)
-        self.labelCrackName.setAlignment(QtCore.Qt.AlignCenter)
-        self.labelCrackName.setObjectName(_fromUtf8("labelCrackName"))
-        self.frame_4 = QtGui.QFrame(Zui)
-        self.frame_4.setEnabled(True)
-        self.frame_4.setGeometry(QtCore.QRect(317, 344, 388, 147))
-        self.frame_4.setFrameShape(QtGui.QFrame.Panel)
-        self.frame_4.setFrameShadow(QtGui.QFrame.Raised)
-        self.frame_4.setLineWidth(2)
-        self.frame_4.setMidLineWidth(0)
-        self.frame_4.setObjectName(_fromUtf8("frame_4"))
-        self.CBAdvanced = QtGui.QCheckBox(self.frame_4)
-        self.CBAdvanced.setGeometry(QtCore.QRect(6, 2, 171, 23))
-        font = QtGui.QFont()
-        font.setBold(True)
-        font.setWeight(75)
-        self.CBAdvanced.setFont(font)
-        self.CBAdvanced.setObjectName(_fromUtf8("CBAdvanced"))
-        self.widget = QtGui.QWidget(self.frame_4)
-        self.widget.setGeometry(QtCore.QRect(0, 24, 427, 106))
-        self.widget.setObjectName(_fromUtf8("widget"))
-        self.gridLayoutWidget_9 = QtGui.QWidget(self.widget)
-        self.gridLayoutWidget_9.setGeometry(QtCore.QRect(1, 35, 381, 40))
-        self.gridLayoutWidget_9.setObjectName(_fromUtf8("gridLayoutWidget_9"))
-        self.gridLayout_9 = QtGui.QGridLayout(self.gridLayoutWidget_9)
-        self.gridLayout_9.setContentsMargins(10, 0, 10, 0)
-        self.gridLayout_9.setObjectName(_fromUtf8("gridLayout_9"))
-        self.btVisu = QtGui.QPushButton(self.gridLayoutWidget_9)
-        self.btVisu.setMinimumSize(QtCore.QSize(85, 28))
-        self.btVisu.setMaximumSize(QtCore.QSize(85, 28))
-        self.btVisu.setObjectName(_fromUtf8("btVisu"))
-        self.gridLayout_9.addWidget(self.btVisu, 0, 0, 1, 1)
-        self.txtSurfopt = QtGui.QLabel(self.gridLayoutWidget_9)
-        self.txtSurfopt.setMinimumSize(QtCore.QSize(67, 28))
-        self.txtSurfopt.setMaximumSize(QtCore.QSize(16777215, 28))
-        self.txtSurfopt.setObjectName(_fromUtf8("txtSurfopt"))
-        self.gridLayout_9.addWidget(self.txtSurfopt, 0, 1, 1, 1)
-        self.valSurfopt = QtGui.QLineEdit(self.gridLayoutWidget_9)
-        self.valSurfopt.setMinimumSize(QtCore.QSize(0, 28))
-        self.valSurfopt.setMaximumSize(QtCore.QSize(16777215, 28))
-        self.valSurfopt.setAutoFillBackground(True)
-        self.valSurfopt.setText(_fromUtf8(""))
-        self.valSurfopt.setObjectName(_fromUtf8("valSurfopt"))
-        self.gridLayout_9.addWidget(self.valSurfopt, 0, 2, 1, 1)
-        self.CBIs2D = QtGui.QCheckBox(self.widget)
-        self.CBIs2D.setGeometry(QtCore.QRect(0, 80, 81, 26))
-        self.CBIs2D.setObjectName(_fromUtf8("CBIs2D"))
-        self.CBRefine = QtGui.QCheckBox(self.widget)
-        self.CBRefine.setGeometry(QtCore.QRect(90, 80, 92, 26))
-        self.CBRefine.setObjectName(_fromUtf8("CBRefine"))
-        self.gridLayoutWidget_8 = QtGui.QWidget(self.widget)
-        self.gridLayoutWidget_8.setGeometry(QtCore.QRect(2, 6, 381, 30))
-        self.gridLayoutWidget_8.setObjectName(_fromUtf8("gridLayoutWidget_8"))
-        self.gridLayout_8 = QtGui.QGridLayout(self.gridLayoutWidget_8)
-        self.gridLayout_8.setContentsMargins(10, 0, 10, 0)
-        self.gridLayout_8.setObjectName(_fromUtf8("gridLayout_8"))
-        self.txtGradation = QtGui.QLabel(self.gridLayoutWidget_8)
-        self.txtGradation.setMinimumSize(QtCore.QSize(0, 28))
-        self.txtGradation.setObjectName(_fromUtf8("txtGradation"))
-        self.gridLayout_8.addWidget(self.txtGradation, 0, 0, 1, 1)
-        self.valGradation = QtGui.QLineEdit(self.gridLayoutWidget_8)
-        self.valGradation.setMinimumSize(QtCore.QSize(40, 28))
-        self.valGradation.setAutoFillBackground(True)
-        self.valGradation.setObjectName(_fromUtf8("valGradation"))
-        self.gridLayout_8.addWidget(self.valGradation, 0, 1, 1, 1)
-        self.txtLayers = QtGui.QLabel(self.gridLayoutWidget_8)
-        self.txtLayers.setMinimumSize(QtCore.QSize(50, 28))
-        self.txtLayers.setObjectName(_fromUtf8("txtLayers"))
-        self.gridLayout_8.addWidget(self.txtLayers, 0, 2, 1, 1)
-        self.txtIterations = QtGui.QLabel(self.gridLayoutWidget_8)
-        self.txtIterations.setMinimumSize(QtCore.QSize(69, 0))
-        self.txtIterations.setMaximumSize(QtCore.QSize(16777215, 28))
-        self.txtIterations.setObjectName(_fromUtf8("txtIterations"))
-        self.gridLayout_8.addWidget(self.txtIterations, 0, 4, 1, 1)
-        self.valLayers = QtGui.QLineEdit(self.gridLayoutWidget_8)
-        self.valLayers.setMinimumSize(QtCore.QSize(30, 28))
-        self.valLayers.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.valLayers.setAutoFillBackground(True)
-        self.valLayers.setObjectName(_fromUtf8("valLayers"))
-        self.gridLayout_8.addWidget(self.valLayers, 0, 3, 1, 1)
-        self.valIterations = QtGui.QLineEdit(self.gridLayoutWidget_8)
-        self.valIterations.setMinimumSize(QtCore.QSize(30, 28))
-        self.valIterations.setMaximumSize(QtCore.QSize(30, 28))
-        self.valIterations.setAutoFillBackground(True)
-        self.valIterations.setObjectName(_fromUtf8("valIterations"))
-        self.gridLayout_8.addWidget(self.valIterations, 0, 5, 1, 1)
-
-        self.retranslateUi(Zui)
-        self.tabWidget.setCurrentIndex(2)
-        QtCore.QMetaObject.connectSlotsByName(Zui)
-
-    def retranslateUi(self, Zui):
-        Zui.setWindowTitle(_translate("Zui", "Zcracks interface - version dev", None))
-        self.btReset.setToolTip(_translate("Zui", "Clear all parameters", None))
-        self.btReset.setText(_translate("Zui", "Reset", None))
-        self.btSave.setToolTip(_translate("Zui", "Save parameters in a file", None))
-        self.btSave.setText(_translate("Zui", "Save", None))
-        self.btLoad.setToolTip(_translate("Zui", "Load all parameters from a file", None))
-        self.btLoad.setText(_translate("Zui", "Load", None))
-        self.btCancel.setToolTip(_translate("Zui", "Exit Zcracks", None))
-        self.btCancel.setText(_translate("Zui", "Cancel", None))
-        self.btApply.setToolTip(_translate("Zui", "Launch crack insertion", None))
-        self.btApply.setText(_translate("Zui", "Apply", None))
-        self.btApplyClose.setToolTip(_translate("Zui", "Launch crack insertion and quit", None))
-        self.btApplyClose.setText(_translate("Zui", "Apply and close", None))
-        self.txtCrackedName.setToolTip(_translate("Zui", "Name of the resulting cracked mesh", None))
-        self.txtCrackedName.setText(_translate("Zui", "Cracked name", None))
-        self.valCrackedName.setToolTip(_translate("Zui", "file address (ex: /home/A123456/cracked.med)", None))
-        self.txtSaneName.setToolTip(_translate("Zui", "Name of the sane mesh", None))
-        self.txtSaneName.setText(_translate("Zui", "Sane mesh", None))
-        self.btLoadCracked.setText(_translate("Zui", "...", None))
-        self.btLoadSane.setText(_translate("Zui", "...", None))
-        self.cracked_name_2.setToolTip(_translate("Zui", "General parameters", None))
-        self.cracked_name_2.setText(_translate("Zui", "Mesh parameters", None))
-        self.txtMaxSize.setToolTip(_translate("Zui", "Maximum mesh size", None))
-        self.txtMaxSize.setText(_translate("Zui", "Maximum size", None))
-        self.txtExtractLength.setToolTip(_translate("Zui", "Extraction length (optionnal)", None))
-        self.txtExtractLength.setText(_translate("Zui", "Extraction length", None))
-        self.valMinSize.setToolTip(_translate("Zui", "float (ex: 1.E-04)", None))
-        self.valMaxSize.setToolTip(_translate("Zui", "float (ex: 1.E-03)", None))
-        self.valExtractLength.setToolTip(_translate("Zui", "float (ex: 1.E-04)", None))
-        self.CBQuad.setToolTip(_translate("Zui", "Quadratic cracked mesh", None))
-        self.CBQuad.setText(_translate("Zui", "Quadratic", None))
-        self.CBBarsoum.setToolTip(_translate("Zui", "Use Barsoum (quarter nodes) elements at crack front", None))
-        self.CBBarsoum.setText(_translate("Zui", "Barsoum", None))
-        self.txtMinSize.setToolTip(_translate("Zui", "Minimum mesh size", None))
-        self.txtMinSize.setText(_translate("Zui", "Minimum size", None))
-        self.labelCrackedName.setToolTip(_translate("Zui", "Groups to save (limit list to vital groups)", None))
-        self.labelCrackedName.setText(_translate("Zui", "Groups", None))
-        self.txtGrVol.setToolTip(_translate("Zui", "Groups of volumes to keep", None))
-        self.txtGrVol.setText(_translate("Zui", "Volumes", None))
-        self.valGrVol.setToolTip(_translate("Zui", "groups separated by a space (ex: Gr1 Gr2 Gr3)", None))
-        self.txtGrFace.setText(_translate("Zui", "Faces", None))
-        self.txtGrEdge.setToolTip(_translate("Zui", "Groups of edges to keep", None))
-        self.txtGrEdge.setText(_translate("Zui", "Edges", None))
-        self.valGrEdge.setToolTip(_translate("Zui", "groups separated by a space (ex: Gr1 Gr2 Gr3)", None))
-        self.txtGrNode.setToolTip(_translate("Zui", "Groups of nodes to keep", None))
-        self.txtGrNode.setText(_translate("Zui", "Nodes", None))
-        self.valGrNode.setToolTip(_translate("Zui", "groups separated by a space (ex: Gr1 Gr2 Gr3)", None))
-        self.btGrVol.setText(_translate("Zui", "Load", None))
-        self.btGrFace.setText(_translate("Zui", "Load", None))
-        self.btGrEdge.setText(_translate("Zui", "Load", None))
-        self.btGrNode.setText(_translate("Zui", "Load", None))
-        self.btGrAll.setText(_translate("Zui", "Load all", None))
-        item = self.tabEllipse.verticalHeaderItem(0)
-        item.setText(_translate("Zui", "Centre", None))
-        item = self.tabEllipse.verticalHeaderItem(1)
-        item.setText(_translate("Zui", "Normale", None))
-        item = self.tabEllipse.verticalHeaderItem(2)
-        item.setText(_translate("Zui", "Rayon", None))
-        item = self.tabEllipse.verticalHeaderItem(3)
-        item.setText(_translate("Zui", "Direction", None))
-        item = self.tabEllipse.verticalHeaderItem(4)
-        item.setText(_translate("Zui", "Rayon 2", None))
-        item = self.tabEllipse.verticalHeaderItem(5)
-        item.setText(_translate("Zui", "Angle", None))
-        item = self.tabEllipse.verticalHeaderItem(6)
-        item.setText(_translate("Zui", "Rayon entaille", None))
-        item = self.tabEllipse.verticalHeaderItem(7)
-        item.setText(_translate("Zui", "Extension", None))
-        item = self.tabEllipse.horizontalHeaderItem(0)
-        item.setText(_translate("Zui", "Valeur", None))
-        __sortingEnabled = self.tabEllipse.isSortingEnabled()
-        self.tabEllipse.setSortingEnabled(False)
-        self.tabEllipse.setSortingEnabled(__sortingEnabled)
-        self.infoEllipse.setToolTip(_translate("Zui", "<html><head/><body><p><span style=\" font-weight:600; text-decoration: underline;\">Fissure de forme elliptique :</span></p><p><img src=\":/newPrefix/images/schema_ellipse.png\"/><br/></p><p><span style=\" font-weight:600; text-decoration: underline;\">Centre</span> : Coordonnées du centre de l\'ellipse (ex: 0 0 1)</p><p><span style=\" font-weight:600; text-decoration: underline;\">Normale</span> : Coordonnées du vecteur normal à l\'ellipse (ex: 1 0 0)</p><p><span style=\" font-weight:600; text-decoration: underline;\">Rayon</span> : Rayon de l\'ellipse le long du vecteur direction (ex: 1.0e1)</p><p><span style=\" text-decoration: underline;\">Direction</span> : Coordonnées du vecteur direction de l\'ellipse (ex: 0 1 0). Nécessaire pour une ellipse</p><p><span style=\" text-decoration: underline;\">Rayon 2</span> : Rayon de l\'ellipse le long du vecteur orthogonal à normale et direction (ex: 1.0e1). Si vide égal à Rayon</p><p><span style=\" text-decoration: underline;\">Angle</span> : Angle en degrés pour une ellipse tronquée (ex: 180.). Si vide, l\'ellipse n\'est pas tronquée</p><p><span style=\" text-decoration: underline;\">Rayon entaille</span> : Rayon du fond d\'entaille. (ex: 1.0e1). Si vide, la fissure est plane sans entaille</p><p><span style=\" text-decoration: underline;\">Extension</span> : Longueur d\'extension de l\'ellipse tronquée dans le long de la direction opposée à Direction (ex: 1.0)</p><p><span style=\" font-weight:600; font-style:italic;\">Gras : Informations obligatoires</span></p></body></html>", None))
-        self.infoEllipse.setText(_translate("Zui", "?", None))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.ongletEllipse), _translate("Zui", "Ellipse", None))
-        item = self.tabRectangle.verticalHeaderItem(0)
-        item.setText(_translate("Zui", "Centre", None))
-        item = self.tabRectangle.verticalHeaderItem(1)
-        item.setText(_translate("Zui", "Normale", None))
-        item = self.tabRectangle.verticalHeaderItem(2)
-        item.setText(_translate("Zui", "Longueur", None))
-        item = self.tabRectangle.verticalHeaderItem(3)
-        item.setText(_translate("Zui", "Direction", None))
-        item = self.tabRectangle.verticalHeaderItem(4)
-        item.setText(_translate("Zui", "Largeur", None))
-        item = self.tabRectangle.verticalHeaderItem(5)
-        item.setText(_translate("Zui", "Rayon", None))
-        item = self.tabRectangle.verticalHeaderItem(6)
-        item.setText(_translate("Zui", "Angle", None))
-        item = self.tabRectangle.verticalHeaderItem(7)
-        item.setText(_translate("Zui", "Rayon entaille", None))
-        item = self.tabRectangle.horizontalHeaderItem(0)
-        item.setText(_translate("Zui", "Valeur", None))
-        __sortingEnabled = self.tabRectangle.isSortingEnabled()
-        self.tabRectangle.setSortingEnabled(False)
-        self.tabRectangle.setSortingEnabled(__sortingEnabled)
-        self.infoRectangle.setToolTip(_translate("Zui", "<html><head/><body><p><span style=\" font-weight:600; text-decoration: underline;\">Fissure de forme rectangulaire :</span></p><p><img src=\":/newPrefix/images/schema_rectangle.png\"/><br/></p><p><span style=\" font-weight:600; text-decoration: underline;\">Centre</span> : Coordonnées du centre du rectangle (ex: 0 0 1)</p><p><span style=\" font-weight:600; text-decoration: underline;\">Normale</span> : Coordonnées du vecteur normal au rectangle (ex: 1 0 0)</p><p><span style=\" font-weight:600; text-decoration: underline;\">Longueur</span> : Demie longueur du rectangle le long du vecteur direction (ex: 1.0e1)</p><p><span style=\" font-weight:600; text-decoration: underline;\">Direction</span> : Coordonnées du vecteur direction du rectangle (ex: 0 1 0)</p><p><span style=\" text-decoration: underline;\">Largeur</span> : Demie largeur du rectangle le long du vecteur orthogonal à normale et direction (ex: 1.0e1). Si vide, égal à Longueur</p><p><span style=\" text-decoration: underline;\">Rayon </span>: Rayon du congé aux angles du rectangle (ex: 1.0e1). Si vide, pas de congé</p><p><span style=\" text-decoration: underline;\">Angle</span> : Angle en degrés pour un rectangle tronqué (ex: 180.). Si vide, le rectangle n\'est pas tronquée</p><p><span style=\" text-decoration: underline;\">Rayon entaille</span> : Rayon du fond d\'entaille. (ex: 1.0e1). Si vide, la fissure est plane sans entaille</p><p><span style=\" font-weight:600; font-style:italic;\">Gras : Informations obligatoires</span></p></body></html>", None))
-        self.infoRectangle.setText(_translate("Zui", "?", None))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.ongletRectangle), _translate("Zui", "Rectangle", None))
-        item = self.tabSphere.verticalHeaderItem(0)
-        item.setText(_translate("Zui", "Centre", None))
-        item = self.tabSphere.verticalHeaderItem(1)
-        item.setText(_translate("Zui", "Rayon", None))
-        item = self.tabSphere.horizontalHeaderItem(0)
-        item.setText(_translate("Zui", "Valeur", None))
-        self.infoSphere.setToolTip(_translate("Zui", "<html><head/><body><p><span style=\" font-weight:600; text-decoration: underline;\">Fissure de forme spherique :</span></p><p><img src=\":/newPrefix/images/schema_shpere.png\"/><br/></p><p><span style=\" font-weight:600; text-decoration: underline;\">Centre</span> : Coordonnées du centre de la sphere (ex: 0 0 1)</p><p><span style=\" font-weight:600; text-decoration: underline;\">Rayon</span> : Rayon de la sphere (ex: 1.0e1)</p><p><span style=\" font-weight:600; font-style:italic;\">Gras : Informations obligatoires</span></p></body></html>", None))
-        self.infoSphere.setText(_translate("Zui", "?", None))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.ongletSphere), _translate("Zui", "Sphere", None))
-        item = self.tabPerso.verticalHeaderItem(0)
-        item.setText(_translate("Zui", "med file", None))
-        item = self.tabPerso.horizontalHeaderItem(0)
-        item.setText(_translate("Zui", "File", None))
-        __sortingEnabled = self.tabPerso.isSortingEnabled()
-        self.tabPerso.setSortingEnabled(False)
-        self.tabPerso.setSortingEnabled(__sortingEnabled)
-        self.infoCustom.setToolTip(_translate("Zui", "<html><head/><body><p><span style=\" font-weight:600; text-decoration: underline;\">Fissure de forme personnalisée :</span></p><p><span style=\" font-weight:600; text-decoration: underline;\">Med file</span> : Adresse du maillage décrivant la fissure (ex: $HOME/PROJETX/fissure3.med)</p><p><span style=\" font-style:italic;\">Le maillage de la fissure doit être une surface composée de tétrahèdres linéaires uniquement.</span></p><p><span style=\" font-weight:600; font-style:italic;\">Gras : Informations obligatoires</span></p></body></html>", None))
-        self.infoCustom.setText(_translate("Zui", "?", None))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.ongletPerso), _translate("Zui", "Custom", None))
-        self.labelCrackName.setToolTip(_translate("Zui", "Crack automatic generation", None))
-        self.labelCrackName.setText(_translate("Zui", "Crack", None))
-        self.CBAdvanced.setToolTip(_translate("Zui", "Advanced options (Use with caution)", None))
-        self.CBAdvanced.setText(_translate("Zui", "Advanced options", None))
-        self.btVisu.setToolTip(_translate("Zui", "Load all parameters from a file", None))
-        self.btVisu.setText(_translate("Zui", "Quick View", None))
-        self.txtSurfopt.setToolTip(_translate("Zui", "SURFOPT options", None))
-        self.txtSurfopt.setText(_translate("Zui", "SURFOPT", None))
-        self.valSurfopt.setToolTip(_translate("Zui", "string", None))
-        self.CBIs2D.setToolTip(_translate("Zui", "Check if sane mesh is a surface", None))
-        self.CBIs2D.setText(_translate("Zui", "2D case", None))
-        self.CBRefine.setToolTip(_translate("Zui", "Check to refine sane mesh before crack insertion", None))
-        self.CBRefine.setText(_translate("Zui", "Pre refine", None))
-        self.txtGradation.setToolTip(_translate("Zui", "Mesh increase parameter", None))
-        self.txtGradation.setText(_translate("Zui", "Gradation", None))
-        self.valGradation.setToolTip(_translate("Zui", "float (ex: 1.3)", None))
-        self.valGradation.setText(_translate("Zui", "1.3", None))
-        self.txtLayers.setToolTip(_translate("Zui", "Constant size layers number", None))
-        self.txtLayers.setText(_translate("Zui", "Layers", None))
-        self.txtIterations.setToolTip(_translate("Zui", "Remeshing iterations number", None))
-        self.txtIterations.setText(_translate("Zui", "Iterations", None))
-        self.valLayers.setToolTip(_translate("Zui", "integer (ex: 5)", None))
-        self.valLayers.setText(_translate("Zui", "5", None))
-        self.valIterations.setToolTip(_translate("Zui", "integer (ex: 2)", None))
-        self.valIterations.setText(_translate("Zui", "2", None))
-
-import images_rc
index 40e34cea8f918ad5a3b27d8476f7543777d3068e..2c91f460a9758d9543cc7829d41237097133046c 100644 (file)
@@ -33,4 +33,4 @@ dicoParams = dict(nomCas            = 'fissTuyau',
 execInstance = casStandard(dicoParams)
 
 if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
+    salome.sg.updateObjBrowser()
index dc834acd95e465938c4149c81144eaa1f4a408e2..a8fa04b3d06220e3bdbf533d33bdebed06b102d4 100644 (file)
@@ -33,4 +33,4 @@ dicoParams = dict(nomCas            = 'fissTuyau',
 execInstance = casStandard(dicoParams)
 
 if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
+    salome.sg.updateObjBrowser()
index b7d31c405124c5b885b3afe9bd901c8becae5d93..32fd450a38dc6f03830ab6a881a751f6fb45240b 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from cubeAngle import cubeAngle
+from .cubeAngle import cubeAngle
 
 class cubeAngle2(cubeAngle):
   """
index 8d83ec10370a831217ce857d831f3c5505f4cae2..f5909f29b71cac684fa9a185ceba56b97369d7ae 100644 (file)
@@ -10,7 +10,7 @@ import SALOMEDS
 import SMESH
 import logging
 
-from cylindre import cylindre
+from .cylindre import cylindre
 
 from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
index 35c8598d95b86b039c87df13a490f6656ae7ad03..cf1c8dec829d883878aa86595270d413ca58ea2b 100644 (file)
@@ -13,7 +13,7 @@ import SMESH
 #import NETGENPlugin
 import logging
 
-from ellipse_1 import ellipse_1
+from .ellipse_1 import ellipse_1
 
 from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
index 8f78081904d86a30e3f68a7015ce7b0e7fd26b29..d07d8fca2758b00d9a1eb3ada40473457ff88392 100644 (file)
@@ -13,7 +13,7 @@ import SMESH
 #import NETGENPlugin
 import logging
 
-from eprouvetteDroite import eprouvetteDroite
+from .eprouvetteDroite import eprouvetteDroite
 
 from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
index 8d8524f739cbe398d1dba052417ada5abe4ac43d..ccd70cb30f853545abc1e0b35ae18a329f914d78 100644 (file)
@@ -144,4 +144,4 @@ for i in range(len(problemes)):
       problemes[i].executeProbleme()
     except:
       traceback.print_exc()
-    print "---------------------------------------------------------------------"
+    print("---------------------------------------------------------------------")
index 55a8b090dffb7663ff1d4f72c2692bf4ab872099..3a3c8f81df5b8b57ba501d2c6bc671fdd6ddd894 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from fissure_Coude  import fissure_Coude
+from .fissure_Coude  import fissure_Coude
 
 class fissure_Coude_4(fissure_Coude):
   """
@@ -46,7 +46,7 @@ class fissure_Coude_4(fissure_Coude):
     orientation : 0° : longitudinale, 90° : circonférentielle, autre : uniquement fissures elliptiques
     externe     : True : fissure face externe, False : fissure face interne
     """
-    print "setParamShapeFissure", self.nomCas
+    print("setParamShapeFissure", self.nomCas)
     self.shapeFissureParams = dict(nomRep        = '.',
                                    nomFicSain    = self.nomCas,
                                    nomFicFissure = 'fissure_' + self.nomCas,
index 1b0141f65834f1994ba24b942947e89d4b59d4ac..ef0def57a82a1e34ad5f6bf76f6948823932fe20 100644 (file)
@@ -4,10 +4,8 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
 
 ###
 ### GEOM component
@@ -18,8 +16,7 @@ from salome.geom import geomBuilder
 import math
 import SALOMEDS
 
-
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -49,7 +46,7 @@ geompy.addToStudy( Cut_1, 'Cut_1' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 boite = smesh.Mesh(Box_1)
 Regular_1D = boite.Segment()
@@ -59,7 +56,7 @@ Quadrangle_2D = boite.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 Hexa_3D = boite.Hexahedron(algo=smeshBuilder.Hexa)
 isDone = boite.Compute()
 smesh.SetName(boite, 'boite')
-boite.ExportMED( r'boite.med', 0, SMESH.MED_V2_2, 1 )
+boite.ExportMED(r'boite.med')
 
 ## set object names
 smesh.SetName(boite.GetMesh(), 'boite')
@@ -91,4 +88,4 @@ dicoParams = dict(nomCas            = 'angleCube2',
 execInstance = casStandard(dicoParams)
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index f8b761fabfe5698d1f721434ae388cd8ccc52ad6..4638d9aeb700192475849707a8a59e167c18ff40 100644 (file)
@@ -33,4 +33,4 @@ dicoParams = dict(nomCas            = 'fissTuyau',
 execInstance = casStandard(dicoParams)
 
 if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
\ No newline at end of file
+    salome.sg.updateObjBrowser()
\ No newline at end of file
index 5f144fb6f019f95f4e08fb6c333894c0fe3f60fb..f365cead240d4fc3db91b06c0362f0a312876741 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import os
-import initLog
+from . import initLog
 
 # --- calcul path blocFissure
 
index acce0d0e7942b206b6bf0c500b79759c6ecc1c25..de2dd7da362d519323c3325e2b35d8ad3cf9591d 100644 (file)
@@ -2,9 +2,9 @@
 
 import logging
 
-from geomsmesh import geompy
-from findWireIntermediateVertices import findWireIntermediateVertices
-from projettePointSurCourbe import projettePointSurCourbe
+from .geomsmesh import geompy
+from .findWireIntermediateVertices import findWireIntermediateVertices
+from .projettePointSurCourbe import projettePointSurCourbe
 
 def ajustePointsEdgePipeFissure(edgesPipeFissureExterneC, wirePipeFissureExterne, gptsdisks, idisklim):
   """
index 0e68757775320e1cf0e509c923b1d9e47a62131c..088622dacf4206953d6487486aade9a68d15b82b 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- bloc defaut
index 8a21e72ea077fdb7935e76301869fb714f5405e2..c3f4d5ff29f1fc6e1f07f268c76e4ea24165af64 100644 (file)
@@ -3,8 +3,8 @@
 import logging
 import math
 
-from geomsmesh import geompy
-from geomsmesh import smesh
+from .geomsmesh import geompy
+from .geomsmesh import smesh
   
 def calculePointsAxiauxPipe(edgesFondFiss, edgesIdByOrientation, facesDefaut, 
                             centreFondFiss, wireFondFiss, wirePipeFiss,
index e52b700130229425cdaf76b9f882d846e9425e97..262919590b64881cd480aa1c07f2f39c0b212637 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import os
-from geomsmesh import geompy, smesh
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy, smesh
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 import math
 import GEOM
@@ -15,13 +15,13 @@ import SMESH
 #import NETGENPlugin
 import logging
 
-from fissureGenerique import fissureGenerique
+from .fissureGenerique import fissureGenerique
 
-from initEtude import initEtude
-from triedreBase import triedreBase
-from genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
-from creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
-from construitFissureGenerale import construitFissureGenerale
+from .initEtude import initEtude
+from .triedreBase import triedreBase
+from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
+from .creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
+from .construitFissureGenerale import construitFissureGenerale
 
 O, OX, OY, OZ = triedreBase()
 
@@ -39,13 +39,13 @@ class casStandard(fissureGenerique):
     initEtude()
     self.references = references
     self.dicoParams = dicoParams
-    if self.dicoParams.has_key('nomCas'):
+    if 'nomCas' in self.dicoParams:
       self.nomCas = self.dicoParams['nomCas']
-    elif self.dicoParams.has_key('nomres'):
+    elif 'nomres' in self.dicoParams:
       self.nomCas = os.path.splitext(os.path.split(self.dicoParams['nomres'])[1])[0]
     else:
       self.nomCas = 'casStandard'
-    if self.dicoParams.has_key('reptrav'):
+    if 'reptrav' in self.dicoParams:
       self.reptrav = self.dicoParams['reptrav']
     else:
       self.reptrav = '.'  
@@ -54,15 +54,15 @@ class casStandard(fissureGenerique):
       self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
     else:
       self.nomProbleme = self.nomCas
-    if self.dicoParams.has_key('lenSegPipe'):
+    if 'lenSegPipe' in self.dicoParams:
       self.lenSegPipe = self.dicoParams['lenSegPipe']
     else:
       self.lenSegPipe =self.dicoParams['rayonPipe']
-    if self.dicoParams.has_key('step'):
+    if 'step' in self.dicoParams:
       step = self.dicoParams['step']
     else:
       step = -1 # exécuter toutes les étapes
-    if not self.dicoParams.has_key('aretesVives'):
+    if 'aretesVives' not in self.dicoParams:
       self.dicoParams['aretesVives'] = 0
     if self.numeroCas == 0: # valeur par défaut : exécution immédiate, sinon execution différée dans le cas d'une liste de problèmes
       self.executeProbleme(step)
@@ -86,7 +86,7 @@ class casStandard(fissureGenerique):
     pointIn_x   : optionnel : coordonnée x d'un point dans le solide sain (pour orienter la face - idem avec y,z)
     """
     logging.info("setParamShapeFissure %s", self.nomCas)
-    if self.dicoParams.has_key('pointInterieur'):
+    if 'pointInterieur' in self.dicoParams:
       self.shapeFissureParams = dict(lgInfluence = self.dicoParams['lgInfluence'],
                                      rayonPipe   = self.dicoParams['rayonPipe'],
                                      lenSegPipe  = self.lenSegPipe,
index e1fcf2be1f41771db868a9a469ba0f01e55d324b..ff4abeab06a63d09d786fff05030e10b32d842e8 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- teste si l'opération de partition a produit une modification
@@ -24,7 +24,7 @@ def checkDecoupePartition(shapes, part):
     info = geompy.ShapeInfo(shape)
     logging.debug("shape info %s", info)
     for k in ['VERTEX', 'EDGE', 'FACE', 'SOLID']:
-      if k in orig.keys():
+      if k in list(orig.keys()):
         orig[k] += info[k]
       else:
         orig[k] = info[k]
index 1777ae89c22e29fe39e57ddeb58a1bd043d126f7..12ce354ead279520221fa70af7cd2b13c981d84e 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- subShapes communes à deux listes
@@ -17,7 +17,7 @@ def commonSubShapes(obj, sub1, sub2):
     idsub1[geompy.GetSubShapeID(obj, s)] = s
   for s in sub2:
     idsub = geompy.GetSubShapeID(obj, s)
-    if idsub in idsub1.keys():
+    if idsub in list(idsub1.keys()):
       subList.append(s)
   logging.debug("subList=%s", subList)
   return subList
index 85b3212810753dc77f9a65b56e263d9a6f065933..ac89a0e7d6f0274c3b499bff63a52770c7493155 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 def compoundFromList(elements, nom=None):
   """
index 0dcd41f39fa9c9e33d552bcc53ad329a9a72528d..538b92cea4b3881bfe4464b8d530c00727dbc26c 100644 (file)
@@ -2,12 +2,12 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import GEOM
-from sortEdges import sortEdges
+from .sortEdges import sortEdges
 
 def construitEdgesRadialesDebouchantes(idisklim, idiskout, gptsdisks, raydisks,
                                        facesPipePeau, edgeRadFacePipePeau, nbsegCercle):
index 8db3cabb04406bcfcda26a20cdefb5dc0535eafd..7895244da8bfd1a8267df42ce7df3ba82e676a45 100644 (file)
@@ -2,12 +2,12 @@
 
 import logging
 import salome
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import GEOM
-from geomsmesh import smesh
+from .geomsmesh import smesh
 from salome.smesh import smeshBuilder
 import SMESH
 import math
@@ -23,36 +23,36 @@ import traceback
 # from produitMixte import produitMixte
 # from findWireEndVertices import findWireEndVertices
 #from findWireIntermediateVertices import findWireIntermediateVertices
-from orderEdgesFromWire import orderEdgesFromWire
+from .orderEdgesFromWire import orderEdgesFromWire
 # from getSubshapeIds import getSubshapeIds
-from putName import putName
+from .putName import putName
 # from distance2 import distance2
-from enleveDefaut import enleveDefaut
-from shapeSurFissure import shapeSurFissure
-from regroupeSainEtDefaut import RegroupeSainEtDefaut
-from triedreBase import triedreBase
+from .enleveDefaut import enleveDefaut
+from .shapeSurFissure import shapeSurFissure
+from .regroupeSainEtDefaut import RegroupeSainEtDefaut
+from .triedreBase import triedreBase
 # from checkDecoupePartition import checkDecoupePartition
 # from whichSide import whichSide
 # from whichSideMulti import whichSideMulti
 #from whichSideVertex import whichSideVertex
 #from projettePointSurCourbe import projettePointSurCourbe
 # from prolongeWire import prolongeWire
-from restreintFaceFissure import restreintFaceFissure
-from partitionneFissureParPipe import partitionneFissureParPipe
-from construitPartitionsPeauFissure import construitPartitionsPeauFissure
-from compoundFromList import compoundFromList
-from identifieElementsGeometriquesPeau import identifieElementsGeometriquesPeau
-from identifieFacesEdgesFissureExterne import identifieFacesEdgesFissureExterne
-from calculePointsAxiauxPipe import calculePointsAxiauxPipe
-from elimineExtremitesPipe import elimineExtremitesPipe
-from construitEdgesRadialesDebouchantes import construitEdgesRadialesDebouchantes
-from creePointsPipePeau import creePointsPipePeau
-from ajustePointsEdgePipeFissure import ajustePointsEdgePipeFissure
-from construitMaillagePipe import construitMaillagePipe
-from mailleAretesEtJonction import mailleAretesEtJonction
-from mailleFacesFissure import mailleFacesFissure
-from mailleFacesPeau import mailleFacesPeau
-from fissError import fissError
+from .restreintFaceFissure import restreintFaceFissure
+from .partitionneFissureParPipe import partitionneFissureParPipe
+from .construitPartitionsPeauFissure import construitPartitionsPeauFissure
+from .compoundFromList import compoundFromList
+from .identifieElementsGeometriquesPeau import identifieElementsGeometriquesPeau
+from .identifieFacesEdgesFissureExterne import identifieFacesEdgesFissureExterne
+from .calculePointsAxiauxPipe import calculePointsAxiauxPipe
+from .elimineExtremitesPipe import elimineExtremitesPipe
+from .construitEdgesRadialesDebouchantes import construitEdgesRadialesDebouchantes
+from .creePointsPipePeau import creePointsPipePeau
+from .ajustePointsEdgePipeFissure import ajustePointsEdgePipeFissure
+from .construitMaillagePipe import construitMaillagePipe
+from .mailleAretesEtJonction import mailleAretesEtJonction
+from .mailleFacesFissure import mailleFacesFissure
+from .mailleFacesPeau import mailleFacesPeau
+from .fissError import fissError
 
 # -----------------------------------------------------------------------------
 # --- procédure complète fissure générale
@@ -69,7 +69,7 @@ def construitFissureGenerale(maillagesSains,
   fondFiss          = shapesFissure[4] # groupe d'edges de fond de fissure
 
   rayonPipe = shapeFissureParams['rayonPipe']
-  if shapeFissureParams.has_key('lenSegPipe'):
+  if 'lenSegPipe' in shapeFissureParams:
     lenSegPipe = shapeFissureParams['lenSegPipe']
   else:
     lenSegPipe = rayonPipe
@@ -82,20 +82,20 @@ def construitFissureGenerale(maillagesSains,
   nbsegCercle       = maillageFissureParams['nbsegCercle']   # nombre de secteur dans un cercle du pipe
   areteFaceFissure  = maillageFissureParams['areteFaceFissure']
   lgAretesVives     = 0
-  if maillageFissureParams.has_key('aretesVives'):
+  if 'aretesVives' in maillageFissureParams:
     lgAretesVives   = maillageFissureParams['aretesVives']
 
   pointIn_x = 0.0
   pointIn_y = 0.0
   pointIn_z = 0.0
   isPointInterne = False
-  if shapeFissureParams.has_key('pointIn_x'):
+  if 'pointIn_x' in shapeFissureParams:
     pointIn_x = shapeFissureParams['pointIn_x']
     isPointInterne = True
-  if shapeFissureParams.has_key('pointIn_y'):
+  if 'pointIn_y' in shapeFissureParams:
     pointIn_y = shapeFissureParams['pointIn_y']
     isPointInterne = True
-  if shapeFissureParams.has_key('pointIn_z'):
+  if 'pointIn_z' in shapeFissureParams:
     pointIn_z = shapeFissureParams['pointIn_z']
     isPointInterne = True
   if isPointInterne:
@@ -328,12 +328,12 @@ def construitFissureGenerale(maillagesSains,
   fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
 
   logging.info("export maillage fini")
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
+  maillageComplet.ExportMED(fichierMaillageFissure)
   putName(maillageComplet, nomFicFissure)
   logging.info("fichier maillage fissure %s", fichierMaillageFissure)
 
   if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
+    salome.sg.updateObjBrowser()
 
   logging.info("maillage fissure fini")
   
index e08ba47c343c2046005a8347966984560b5e2fd8..84be0203d9902b7053de6197bfca172baf1bbd06 100644 (file)
@@ -2,8 +2,8 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import smesh
+from .geomsmesh import geompy
+from .geomsmesh import smesh
 import SMESH
 
 def construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad):
index 20ba23bf511e5028dcdd62ebf1176a64b07b28a6..d3c46dffdb30fe9741ed7c9788ff100e00446247 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from checkDecoupePartition import checkDecoupePartition
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .checkDecoupePartition import checkDecoupePartition
 
   # -----------------------------------------------------------------------------
   # --- peau et face de fissure
index 0f3bb71a3109dd481b36e833bc39d1ac63c13ce8..5bf5e91fc0531664e1bbde521bd7b9b3e1e1f2c8 100644 (file)
@@ -2,11 +2,11 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from projettePointSurCourbe import projettePointSurCourbe
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .projettePointSurCourbe import projettePointSurCourbe
 
 def creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout,
                        ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad):
index d4270fceade65e7ed994c0ec8c142385fdace2a8..a1cd1e710f6535d45e7b4af6b60091d4e86ac9e5 100644 (file)
@@ -1,16 +1,16 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import smesh
+from .geomsmesh import smesh
 import SMESH
 import SALOMEDS
 
-from creeZoneDefautMaillage import creeZoneDefautMaillage
-from peauInterne import peauInterne
-from quadranglesToShapeNoCorner import quadranglesToShapeNoCorner
-from creeZoneDefautFilling import creeZoneDefautFilling
-from creeZoneDefautGeom import creeZoneDefautGeom
-from getCentreFondFiss import getCentreFondFiss
+from .creeZoneDefautMaillage import creeZoneDefautMaillage
+from .peauInterne import peauInterne
+from .quadranglesToShapeNoCorner import quadranglesToShapeNoCorner
+from .creeZoneDefautFilling import creeZoneDefautFilling
+from .creeZoneDefautGeom import creeZoneDefautGeom
+from .getCentreFondFiss import getCentreFondFiss
 
 # -----------------------------------------------------------------------------
 # ---
@@ -21,8 +21,6 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   #TODO: a compléter
   """
   logging.info('start')
-  
-  #smesh.SetCurrentStudy(salome.myStudy)
 
   geometrieSaine      = geometriesSaines[0]
   maillageSain        = maillagesSains[0]
@@ -32,10 +30,10 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   coordsNoeudsFissure = shapesFissure[3]
 
   isElliptique = False
-  if shapeFissureParams.has_key('elliptique'):
+  if 'elliptique' in shapeFissureParams:
     isElliptique      = shapeFissureParams['elliptique']
   if isElliptique:
-    if shapeFissureParams.has_key('demiGrandAxe'):
+    if 'demiGrandAxe' in shapeFissureParams:
       demiGrandAxe    = shapeFissureParams['demiGrandAxe']
     else:
       demiGrandAxe    = shapeFissureParams['longueur']
@@ -59,7 +57,7 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   [origShapes, verticesShapes, dmoyen] = \
     creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut, nomZones, coordsNoeudsFissure)
 
-  maillageSain.ExportMED( fichierMaillageSain, 0, SMESH.MED_V2_2, 1 )
+  maillageSain.ExportMED(fichierMaillageSain)
   logging.debug("fichier maillage sain %s", fichierMaillageSain)
   [maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges] = \
     peauInterne(fichierMaillageSain, shapeDefaut, nomZones)
@@ -88,7 +86,7 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
     for face in facesDefaut:
       bordsPartages.append([None,None]) # TODO : traitement des arêtes vives ?
     fillconts = facesDefaut
-    idFilToCont = range(len(facesDefaut))
+    idFilToCont = list(range(len(facesDefaut)))
 
   return [facesDefaut, centresDefaut, normalsDefaut, extrusionsDefaut, dmoyen, bordsPartages, fillconts, idFilToCont,
           maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges,
index c83f2aa0256d68d28709b30e009c08f6923c5d30..bb87fbe975e54806c2e32871f1b2d885c6be7b57 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- crée zone géométrique défaut a partir d'un filling
index 4c622ebeab9de2b966dbdad91a74c76867c9098b..2418128e2b766f5e6baa8953d7b29b94af034b11 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from prolongeVertices import prolongeVertices
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .prolongeVertices import prolongeVertices
 
 # -----------------------------------------------------------------------------
 # --- zone de defaut, constructions geometrique avec CAO d'origine
index 5225d9834096cd34b8de5d0204c8aad01e623918..fa6edc8498e37f297c21a2065aa09f813078cdf7 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 import math
-from distance2 import distance2
+from .distance2 import distance2
 import traceback
-from fissError import fissError
+from .fissError import fissError
 
 # -----------------------------------------------------------------------------
 # --- zone de defaut extraite du maillage
index b9e2e6c1d5dbd790d40b25ca70eb202510434df2..5b29ce9837ffedd341efb395bbff29feae0714e5 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- éliminer les doublons d'une liste de subshapes
@@ -13,12 +13,12 @@ def eliminateDoubles(obj, subshapes):
   idsubs = {}
   for sub in subshapes:
     subid = geompy.GetSubShapeID(obj, sub)
-    if subid in idsubs.keys():
+    if subid in list(idsubs.keys()):
       idsubs[subid].append(sub)
     else:
       idsubs[subid] = [sub]
   shortList = []
-  for k, v in idsubs.iteritems():
+  for k, v in idsubs.items():
     shortList.append(v[0])
   logging.debug("shortList=%s", shortList)
   return shortList
index edfb5ed602532530f48b02246b6a696848255325..36ab658be20a29b1e1748e38af9136fa6987f806 100644 (file)
@@ -2,8 +2,8 @@
 
 import logging
 
-from geomsmesh import geompy
-from whichSideVertex import whichSideVertex
+from .geomsmesh import geompy
+from .whichSideVertex import whichSideVertex
 
 def elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCercle):
   """
index 3940d57ca992942c5281ecce3db0e2bcf1913cc4..09ffa807bdf73d5cb0034576ce37ef068d5a4751 100644 (file)
@@ -2,8 +2,8 @@
 
 import logging
 import math
-from geomsmesh import geompy
-from triedreBase import triedreBase
+from .geomsmesh import geompy
+from .triedreBase import triedreBase
 O, OX, OY, OZ = triedreBase()
 
 # -----------------------------------------------------------------------------
index ec95646de137c8a55be5bf026155ff012b05c30a..e73eca91f90bd021583515a076a4e9fb72b19375 100644 (file)
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
-from whichSide import whichSide
+from .whichSide import whichSide
 
 # -----------------------------------------------------------------------------
 # --- renvoie l'extraction des shapes d'un objet selon leur position par rapport à la face.
index 0c6457ad302b469e9c7dcb004221d51e6ce192a9..239fe9d2e48abeefccd24b80115f9c7098012838 100644 (file)
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
-from whichSideMulti import whichSideMulti
+from .whichSideMulti import whichSideMulti
 
 # -----------------------------------------------------------------------------
 # --- renvoie l'extraction des shapes d'un objet selon leur position par rapport à la face.
index 71df8eeb03e5e35a82384174815f73fdf8de1429..a624947368052994e212089f76b77cf35e75b567 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- TORE
index f1b8dbe4000877f8ece6cd7734768bfeea4d8f95..3e51289c140c99a9598dee2600524f63a3207920 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- faces fissure dans et hors tore, et edges face hors tore
index 529216958d245295f38a624949576f03d6870bb8..b48eb8e7f2adbafa9a3fa2c87124aeac36059f02 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- identification des faces tore et fissure dans le solide hors tore du bloc partitionné
index 6d3434ba1d54360f5425f5e3570df47797157fd5..9826ab9a9206a85cd91dbe589cf8ad02576b85ad 100644 (file)
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from extractionOrientee import extractionOrientee
-from getSubshapeIds import getSubshapeIds
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .extractionOrientee import extractionOrientee
+from .getSubshapeIds import getSubshapeIds
 
 # -----------------------------------------------------------------------------
 # --- TORE
index 22f4ff014f105200a3ebfc6b4b55cdcd64c4a124..be9b34736253b6ec52593cc60ac0a8328fc978ec 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- trouver les vertices extremites d'un wire
@@ -42,7 +42,7 @@ def findWireEndVertices(aWire, getNormals=False):
         normals += [n1, n0]
   for i, sub in enumerate(vertices):
     subid = geompy.GetSubShapeID(aWire, sub)
-    if subid in idsubs.keys():
+    if subid in list(idsubs.keys()):
       idsubs[subid].append(sub)
     else:
       idsubs[subid] = [sub]
@@ -53,7 +53,7 @@ def findWireEndVertices(aWire, getNormals=False):
         name='norm%d'%i
         geomPublishInFather(initLog.debug, aWire, normals[i], name)
   logging.debug("idsubs: %s", idsubs)
-  for k, v in idsubs.iteritems():
+  for k, v in idsubs.items():
     if len(v) == 1:
       shortList.append(v[0])
       if getNormals:
index 63c884458002affa026af13e244052e2b6414c0a..42e5ec9fe238973769b5ffac9457f62613db1d9c 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- trouver les vertices intermediaires d'un wire
@@ -39,7 +39,7 @@ def findWireIntermediateVertices(aWire, getNormals=False):
         normals += [n1, n0]
   for i, sub in enumerate(vertices):
     subid = geompy.GetSubShapeID(aWire, sub)
-    if subid in idsubs.keys():
+    if subid in list(idsubs.keys()):
       idsubs[subid].append(sub)
     else:
       idsubs[subid] = [sub]
@@ -49,7 +49,7 @@ def findWireIntermediateVertices(aWire, getNormals=False):
         idnorm[subid] = normals[i]
         name='norm%d'%i
         geomPublishInFather(initLog.debug, aWire, normals[i], name)
-  for k, v in idsubs.iteritems():
+  for k, v in idsubs.items():
     if len(v) > 1:
       shortList.append(v[0])
       if getNormals:
index 22432356795be3b685b24b92b10135e0ca3947b8..c2fa0e36ffa86d2eca89e00335bdb6a51e01e141 100644 (file)
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
 
-from geomsmesh import geompy, smesh
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy, smesh
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 import math
 import GEOM
@@ -14,13 +14,13 @@ import SMESH
 #import NETGENPlugin
 import logging
 
-from fissureGenerique import fissureGenerique
+from .fissureGenerique import fissureGenerique
 
-from triedreBase import triedreBase
-from genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
-from creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
-from construitFissureGenerale import construitFissureGenerale
-from sortEdges import sortEdges
+from .triedreBase import triedreBase
+from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
+from .creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
+from .construitFissureGenerale import construitFissureGenerale
+from .sortEdges import sortEdges
 
 O, OX, OY, OZ = triedreBase()
 
@@ -336,7 +336,7 @@ class fissureCoude(fissureGenerique):
     externe     = shapeFissureParams['externe']
     lgInfluence = shapeFissureParams['lgInfluence']
     self.elliptique  = False
-    if shapeFissureParams.has_key('elliptique'):
+    if 'elliptique' in shapeFissureParams:
       self.elliptique = shapeFissureParams['elliptique']
 
 
index 703c02447f51e116ff9adc0b5e389a711b00d759..b599be6d15348ade02e46db3eb414a273b01464a 100644 (file)
@@ -6,16 +6,16 @@ Created on Tue Jun 24 09:14:13 2014
 """
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import smesh
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import smesh
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import GEOM
 import SMESH
 
-from listOfExtraFunctions import createNewMeshesFromCorner
-from listOfExtraFunctions import createLinesFromMesh
+from .listOfExtraFunctions import createNewMeshesFromCorner
+from .listOfExtraFunctions import createLinesFromMesh
 
 # -----------------------------------------------------------------------------
 # --- groupe de quadrangles de face transformé en face géométrique par filling
index 62be40c7755176b49577422b1d34102470b0887b..6374be9fc9daa63ee1ba4c1b6ce8117f9742c659 100644 (file)
@@ -1,15 +1,15 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-
-from toreFissure import toreFissure
-from ellipsoideDefaut import ellipsoideDefaut
-from rotTrans import rotTrans
-from genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+
+from .toreFissure import toreFissure
+from .ellipsoideDefaut import ellipsoideDefaut
+from .rotTrans import rotTrans
+from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 
 # -----------------------------------------------------------------------------
 # --- création élements géométriques fissure elliptique
index 08e24748c7da511aee18c714b80c500b7d8cab1e..8e296f2cf4e0c5d4c21cb6022a4aa045395fb0d3 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import smesh
+from .geomsmesh import smesh
 from salome.smesh import smeshBuilder
 
 # -----------------------------------------------------------------------------
index 4c61d1b924f821d53c152c7c70b09013a3203fc7..f4287c12a820656472ae8c59b086f8d3f08ef27f 100644 (file)
@@ -2,16 +2,16 @@
 
 import logging
 #logging.info('start')
-import initLog
+from . import initLog
 
 import salome
 salome.salome_init()
 
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New(salome.myStudy)
+smesh = smeshBuilder.New()
 
 # logging.debug("initialisation de geompy et smesh OK")
 
index 52f1f3bd9c5902998e9054abfbfcc5be654c8126..34d3e09ca06710c3828aa2e8cb48291748de359a 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import bisect
 
 publie = False
index 453b6b90489e4b48fe9f53009d4c9aabd70f7c1f..cf06fb33cb15450398f9137c27c44d8796a083d3 100644 (file)
@@ -13,7 +13,7 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
   logging.debug('start')
 
   nomRep = '.'
-  if maillageFissureParams.has_key('nomRep'):
+  if 'nomRep' in maillageFissureParams:
     nomRep = maillageFissureParams['nomRep']
   
   nomFicFissure     = maillageFissureParams['nomFicFissure']
@@ -25,7 +25,7 @@ def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissure
   if maillage is not None:
     mesures = maillage.GetMeshInfo()
     d= {}
-    for key, value in mesures.iteritems():
+    for key, value in mesures.items():
       logging.debug( "key: %s value: %s", key, value)
       d[str(key)] = value
     logging.debug("dico mesures %s", d)      
index 7783596466b6d65723da3852e4dee3af4f5faf77..15383c9cd33334a097fe9599ea6ad601346b7fac 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- transformation d'une liste de subshapes en une liste d'Id
index 70595896ef34d9461632b806c2840defafa5b0ba..53b2cc5b91ff500a33a55fe899665d85b9e46c11 100644 (file)
@@ -2,12 +2,12 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
-from substractSubShapes import substractSubShapes
+from .substractSubShapes import substractSubShapes
 
 def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSorted,
                        edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees):
index fb03f94b713a0137f659681dd06c8ac2268778c1..4eb25795acf34524a05082611a0f6d9ad0c87a43 100644 (file)
@@ -3,15 +3,15 @@
 import logging
 import math
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import traceback
-from fissError import fissError
+from .fissError import fissError
 
-from produitMixte import produitMixte
-from whichSide import whichSide
+from .produitMixte import produitMixte
+from .whichSide import whichSide
   
 def identifieElementsDebouchants(ifil, facesDefaut, partitionPeauFissFond,
                                 edgesFondIn, edgesFondFiss, wireFondFiss,
index fcad8c51966f68a9ce7a21b6a8068f8c29c2e8b5..8add85194d18cc515919d7a3ecb6f75dfae95fd4 100644 (file)
@@ -2,13 +2,13 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
-from extractionOrientee import extractionOrientee
-from extractionOrienteeMulti import extractionOrienteeMulti
+from .extractionOrientee import extractionOrientee
+from .extractionOrienteeMulti import extractionOrienteeMulti
  
 def identifieElementsFissure(ifil, facesDefaut, partitionPeauFissFond,
                              edgesPipeFiss, edgesFondFiss, aretesVivesC,
index c60682c513b17832f08b1f6fc5340602f08937bf..2fdd9251aafbe728c53cb9e02c01c51e82079527 100644 (file)
@@ -2,11 +2,11 @@
 
 import logging
 
-from identifieElementsFissure import identifieElementsFissure
-from identifieElementsDebouchants import identifieElementsDebouchants
-from trouveEdgesFissPeau import trouveEdgesFissPeau
-from identifieFacesPeau import identifieFacesPeau
-from identifieEdgesPeau import identifieEdgesPeau
+from .identifieElementsFissure import identifieElementsFissure
+from .identifieElementsDebouchants import identifieElementsDebouchants
+from .trouveEdgesFissPeau import trouveEdgesFissPeau
+from .identifieFacesPeau import identifieFacesPeau
+from .identifieEdgesPeau import identifieEdgesPeau
 
 def identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, edgesPipeFiss,
                                       edgesFondFiss, wireFondFiss, aretesVivesC,
index 12efab46ce6b21c0f6c87a4d537673ea050e95e8..170ad723bba19df90d866d641672ae0123bd6daa 100644 (file)
@@ -2,10 +2,10 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 def identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss):
   """
index a8917ad78b26061c8474790f3b7b31d5fb3dd731..ab009b7c8ab0bde4a00bd2d4ad7b4807f7f1da15 100644 (file)
@@ -2,13 +2,13 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
-from sortFaces import sortFaces
-from extractionOrientee import extractionOrientee
+from .sortFaces import sortFaces
+from .extractionOrientee import extractionOrientee
 
 def identifieFacesPeau(ifil, verticesPipePeau, facesOnside, wireFondFiss,
                        verticesEdgesFondIn, pipexts, cercles,
index 1e73886b63cf8a664e34a9849b46356d96d7c10a..c59b54d3ad9391629bf26b9efc0142ee01cc03e1 100644 (file)
@@ -7,4 +7,4 @@ def initEtude():
   """
   creation nouvelle etude salome
   """
-  import geomsmesh
+  from . import geomsmesh
index de8fbeb17a232d9fd23c5279562df713f1909d7e..339eca80b2c7f7e149271116cc93da2c051cc915 100644 (file)
@@ -2,26 +2,26 @@
 
 import logging
 import salome
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from geomsmesh import smesh
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .geomsmesh import smesh
 import SMESH
 import math
 
-from partitionBlocDefaut import partitionBlocDefaut
-from facesVolumesToriques import facesVolumesToriques
-from facesCirculaires import facesCirculaires
-from propagateTore import propagateTore
-from sortGeneratrices import sortGeneratrices
-from facesFissure import facesFissure
-from facesToreInBloc import facesToreInBloc
-from shapeSurFissure import shapeSurFissure
-from meshBlocPart import meshBlocPart
-from enleveDefaut import enleveDefaut
-from regroupeSainEtDefaut import RegroupeSainEtDefaut
-from putName import putName
+from .partitionBlocDefaut import partitionBlocDefaut
+from .facesVolumesToriques import facesVolumesToriques
+from .facesCirculaires import facesCirculaires
+from .propagateTore import propagateTore
+from .sortGeneratrices import sortGeneratrices
+from .facesFissure import facesFissure
+from .facesToreInBloc import facesToreInBloc
+from .shapeSurFissure import shapeSurFissure
+from .meshBlocPart import meshBlocPart
+from .enleveDefaut import enleveDefaut
+from .regroupeSainEtDefaut import RegroupeSainEtDefaut
+from .putName import putName
  
 # -----------------------------------------------------------------------------
 # --- procedure complete fissure elliptique
@@ -189,11 +189,11 @@ def insereFissureElliptique(geometriesSaines, maillagesSains,
 
   if step == 18:
     return None
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
+  maillageComplet.ExportMED(fichierMaillageFissure)
   putName(maillageComplet, nomFicFissure)
   logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
 
   if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
+    salome.sg.updateObjBrowser()
 
   return maillageComplet
index a8619bdda38b8b09cce60634d2a34dacd5270e8b..1c58e6b9e5e75826cd2943c0ad60f90236ed64e8 100644 (file)
@@ -2,40 +2,40 @@
 
 import logging
 import salome
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import GEOM
-from geomsmesh import smesh
+from .geomsmesh import smesh
 from salome.smesh import smeshBuilder
 import SMESH
 import math
 import bisect
 
-from extractionOrientee import extractionOrientee
-from extractionOrienteeMulti import extractionOrienteeMulti
-from sortFaces import sortFaces
-from sortEdges import sortEdges
-from eliminateDoubles import eliminateDoubles
-from substractSubShapes import substractSubShapes
-from produitMixte import produitMixte
-from findWireEndVertices import findWireEndVertices
-from findWireIntermediateVertices import findWireIntermediateVertices
-from orderEdgesFromWire import orderEdgesFromWire
-from getSubshapeIds import getSubshapeIds
-from putName import putName
-from distance2 import distance2
-from enleveDefaut import enleveDefaut
-from shapeSurFissure import shapeSurFissure
-from regroupeSainEtDefaut import RegroupeSainEtDefaut
-from triedreBase import triedreBase
-from checkDecoupePartition import checkDecoupePartition
-from whichSide import whichSide
-from whichSideMulti import whichSideMulti
-from whichSideVertex import whichSideVertex
-from projettePointSurCourbe import projettePointSurCourbe
-from prolongeWire import prolongeWire
+from .extractionOrientee import extractionOrientee
+from .extractionOrienteeMulti import extractionOrienteeMulti
+from .sortFaces import sortFaces
+from .sortEdges import sortEdges
+from .eliminateDoubles import eliminateDoubles
+from .substractSubShapes import substractSubShapes
+from .produitMixte import produitMixte
+from .findWireEndVertices import findWireEndVertices
+from .findWireIntermediateVertices import findWireIntermediateVertices
+from .orderEdgesFromWire import orderEdgesFromWire
+from .getSubshapeIds import getSubshapeIds
+from .putName import putName
+from .distance2 import distance2
+from .enleveDefaut import enleveDefaut
+from .shapeSurFissure import shapeSurFissure
+from .regroupeSainEtDefaut import RegroupeSainEtDefaut
+from .triedreBase import triedreBase
+from .checkDecoupePartition import checkDecoupePartition
+from .whichSide import whichSide
+from .whichSideMulti import whichSideMulti
+from .whichSideVertex import whichSideVertex
+from .projettePointSurCourbe import projettePointSurCourbe
+from .prolongeWire import prolongeWire
 #from getCentreFondFiss import getCentreFondFiss
 
 # -----------------------------------------------------------------------------
@@ -53,7 +53,7 @@ def insereFissureGenerale(maillagesSains,
   fondFiss          = shapesFissure[4] # groupe d'edges de fond de fissure
 
   rayonPipe = shapeFissureParams['rayonPipe']
-  if shapeFissureParams.has_key('lenSegPipe'):
+  if 'lenSegPipe' in shapeFissureParams:
     lenSegPipe = shapeFissureParams['lenSegPipe']
   else:
     lenSegPipe = rayonPipe
@@ -70,13 +70,13 @@ def insereFissureGenerale(maillagesSains,
   pointIn_y = 0.0
   pointIn_z = 0.0
   isPointInterne = False
-  if shapeFissureParams.has_key('pointIn_x'):
+  if 'pointIn_x' in shapeFissureParams:
     pointIn_x = shapeFissureParams['pointIn_x']
     isPointInterne = True
-  if shapeFissureParams.has_key('pointIn_y'):
+  if 'pointIn_y' in shapeFissureParams:
     pointIn_y = shapeFissureParams['pointIn_y']
     isPointInterne = True
-  if shapeFissureParams.has_key('pointIn_z'):
+  if 'pointIn_z' in shapeFissureParams:
     pointIn_z = shapeFissureParams['pointIn_z']
     isPointInterne = True
   if isPointInterne:
@@ -1373,12 +1373,12 @@ def insereFissureGenerale(maillagesSains,
   fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
 
   logging.info("export maillage fini")
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
+  maillageComplet.ExportMED(fichierMaillageFissure)
   putName(maillageComplet, nomFicFissure)
   logging.info("fichier maillage fissure %s", fichierMaillageFissure)
 
   if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
+    salome.sg.updateObjBrowser()
 
   logging.info("maillage fissure fini")
   
index 347fb401c678a5b95caead419dcb7b7ae6d16e30..0303f9ee3cc1b06dc17944a0ba31b09b1f3e0165 100644 (file)
@@ -2,29 +2,29 @@
 
 import logging
 import salome
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from geomsmesh import smesh
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .geomsmesh import smesh
 from salome.smesh import smeshBuilder
 import SMESH
 import math
 
-from extractionOrientee import extractionOrientee
-from sortFaces import sortFaces
-from sortEdges import sortEdges
-from eliminateDoubles import eliminateDoubles
-from substractSubShapes import substractSubShapes
-from produitMixte import produitMixte
-from findWireEndVertices import findWireEndVertices
-from getSubshapeIds import getSubshapeIds
-from putName import putName
-from distance2 import distance2
-from enleveDefaut import enleveDefaut
-from shapeSurFissure import shapeSurFissure
-from regroupeSainEtDefaut import RegroupeSainEtDefaut
-from triedreBase import triedreBase
+from .extractionOrientee import extractionOrientee
+from .sortFaces import sortFaces
+from .sortEdges import sortEdges
+from .eliminateDoubles import eliminateDoubles
+from .substractSubShapes import substractSubShapes
+from .produitMixte import produitMixte
+from .findWireEndVertices import findWireEndVertices
+from .getSubshapeIds import getSubshapeIds
+from .putName import putName
+from .distance2 import distance2
+from .enleveDefaut import enleveDefaut
+from .shapeSurFissure import shapeSurFissure
+from .regroupeSainEtDefaut import RegroupeSainEtDefaut
+from .triedreBase import triedreBase
 
 # -----------------------------------------------------------------------------
 # --- procedure complete fissure longue
@@ -649,11 +649,11 @@ def insereFissureLongue(geometriesSaines, maillagesSains,
   #isDone = maillageComplet.ReorientObject( grps[0] )
   fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
 
-  maillageComplet.ExportMED( fichierMaillageFissure, 0, SMESH.MED_V2_2, 1 )
+  maillageComplet.ExportMED(fichierMaillageFissure)
   putName(maillageComplet, nomFicFissure)
   logging.info("fichier maillage fissure %s", fichierMaillageFissure)
 
   if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser(True)
+    salome.sg.updateObjBrowser()
 
   return  maillageComplet
\ No newline at end of file
index fbdd5cf97af60f8d26771f41d211e12f26410856..803e37a6c422c9ed13dadfda58a281d717c607b2 100644 (file)
@@ -7,7 +7,7 @@ Created on Mon Jun 23 14:49:36 2014
 
 import logging
 import SMESH
-from geomsmesh import smesh
+from .geomsmesh import smesh
 
 def lookForCorner(maillageAScanner):
     
index e8f9d81974613477e1edd26e81fefc5de62e63ea..6c249374059d8edd607f8118d7cf7d642595ce94 100644 (file)
@@ -2,11 +2,11 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import smesh
+from .geomsmesh import geompy
+from .geomsmesh import smesh
 import SMESH
 
-from putName import putName
+from .putName import putName
   
 def mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives):
   """
index 90bd8701271531570522c4ecf221a1032cb5fca9..99101ecaf5b3d62c0e9819c08462e1d2ca50f353 100644 (file)
@@ -2,12 +2,12 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import smesh
+from .geomsmesh import geompy
+from .geomsmesh import smesh
 from salome.smesh import smeshBuilder
 import SMESH
 
-from putName import putName
+from .putName import putName
   
 def mailleFacesFissure(faceFissureExterne, edgesPipeFissureExterneC, edgesPeauFissureExterneC,
                         meshPipeGroups, areteFaceFissure, rayonPipe, nbsegRad):
index 41a72e9ab0897bf1215ce652cd1d2164658c0d44..8f9abab99d5a8d9d45607bc433d6d89dd2220d45 100644 (file)
@@ -2,15 +2,15 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from geomsmesh import smesh
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .geomsmesh import smesh
 from salome.smesh import smeshBuilder
 import SMESH
 
-from putName import putName
+from .putName import putName
 
 def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut,
                     facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau,
index c868ed1391007741419dbb6a5684a9c445199620..4b13379529bf60532519715ee7953f24de600b69 100644 (file)
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import smesh
+from .geomsmesh import geompy
+from .geomsmesh import smesh
 from salome.smesh import smeshBuilder
 import SMESH
 from salome.StdMeshers import StdMeshersBuilder
-from putName import putName
+from .putName import putName
 
 # -----------------------------------------------------------------------------
 # --- maillage du bloc partitionne
index 0a092e26cd12f1e8fbff417cf6b8e752d55d4c89..36d95f2fdd0ca2a5b86ecf5c2fa2f7b310bb7c3b 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- trouver les vertices intermediaires d'un wire
@@ -29,16 +29,16 @@ def orderEdgesFromWire(aWire):
       idverts[(i,1)] = verts[0]
      
   idsubs = {}
-  for kv, sub in idverts.iteritems():
+  for kv, sub in idverts.items():
     subid = geompy.GetSubShapeID(aWire, sub)
-    if subid in idsubs.keys():
+    if subid in list(idsubs.keys()):
       idsubs[subid].append(kv)
     else:
       idsubs[subid] = [kv]
   
   debut = -1
   fin = -1    
-  for k, kvs in idsubs.iteritems():
+  for k, kvs in idsubs.items():
     if len(kvs) == 1: # une extremité
       kv = kvs[0]
       if kv[1] == 0:
@@ -48,13 +48,13 @@ def orderEdgesFromWire(aWire):
   logging.debug("nombre d'edges: %s, indice edge début: %s, fin: %s",len(edges), debut, fin)
   if debut < 0:
     logging.critical("les edges du wire ne sont pas orientées dans le même sens: pas de début trouvé")
-    return edges, range(len(edges))
+    return edges, list(range(len(edges)))
   
   orderedList = [debut]
   while len(orderedList) < len(edges):
     bout = orderedList[-1]
     vertex = idverts[(bout,1)]
-    for k, v in idverts.iteritems():
+    for k, v in idverts.items():
       if k[0] not in orderedList:
         if geompy.MinDistance(vertex, v) < 1.e-4:
           if k[1] == 0:
@@ -62,10 +62,10 @@ def orderEdgesFromWire(aWire):
             break
           else:
             logging.critical("les edges du wire ne sont pas orientées dans le même sens: une edge à l'envers")
-            return edges, range(len(edges))
+            return edges, list(range(len(edges)))
 
   logging.debug("liste des edges ordonnées selon le sens de parcours: %s", orderedList)
-  accessList = range(len(orderedList))
+  accessList = list(range(len(orderedList)))
   for i,k in enumerate(orderedList):
     accessList[k] = i
   logging.info("position ordonnée des edges selon le sens de parcours: %s", accessList)
index be3a3481dfb73d116d3461b60dbbe8f64b93f4d9..7a34e935f90d66ecb547bc76760b84cc2cfc7ea2 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- partition du bloc defaut par generatrice, tore et plan fissure
index e7ce51a11b479791a38d63361c0941d2529ef9ee..f3a50635db1c6cdbd05b82f099b5b99472d469aa 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- partition volume sain et bloc, face du bloc recevant la fissure
index 32ae8b3f091073bb1181c89908800b23c0c32deb..bf5a4c10994257009a57bfdd4cc48fcb9640f9bb 100644 (file)
@@ -2,14 +2,14 @@
 
 import math
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from findWireEndVertices import findWireEndVertices
-from prolongeWire import prolongeWire
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .findWireEndVertices import findWireEndVertices
+from .prolongeWire import prolongeWire
 import traceback
-from fissError import fissError
+from .fissError import fissError
 
 def partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe):
   """
index 6e6915966ddba61a814015f0b902b0aa02cd29c9..4e4004e404549110ad3b99a338121a6e991e721c 100644 (file)
@@ -1,13 +1,13 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import smesh
+from .geomsmesh import smesh
 import SMESH
 import traceback
-from fissError import fissError
+from .fissError import fissError
 
-from listOfExtraFunctions import lookForCorner
-from fusionMaillageAttributionDefaut import fusionMaillageDefaut
+from .listOfExtraFunctions import lookForCorner
+from .fusionMaillageAttributionDefaut import fusionMaillageDefaut
 
 # -----------------------------------------------------------------------------
 # --- peau interne du defaut dans le maillage sain
@@ -46,7 +46,7 @@ def peauInterne(fichierMaillage, shapeDefaut, nomZones):
   # --- Le groupe ZoneDefaut ne doit contenir que des Hexaèdres"
   
   info=maillageSain.GetMeshInfo(zoneDefaut)
-  keys = info.keys(); keys.sort()
+  keys = list(info.keys()); keys.sort()
   nbelem=0
   nbhexa=0
   for i in keys:
index 509a75889fd1559e917730e382e01256ec05870d..96c7cce7fd823ab60ad6d23daeafa6cc82c389ca 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- calcul de produit mixte pour orientation
index fa43d39262aa5ef77b5fd67be3bb506e79bc53a1..47c83612f48eae7c6963c305c4606ce6d6fdcb9d 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from geomsmesh import geompy
+from .geomsmesh import geompy
 import logging
 import math
 
index e6e6f038acc4425f9410ee8fceb50a20dae771ab..63e465f1b21c55535fcb187b200d2a39b3c528a4 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- prolongation des segments extremité des polylines, pour la découpe
index 52b3991b4540059b9314027dc2f47b9deec52f28..75cbb518add48e103705067f37abc9dd02d464e0 100644 (file)
@@ -1,11 +1,11 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from orderEdgesFromWire import orderEdgesFromWire
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .orderEdgesFromWire import orderEdgesFromWire
 
 # -----------------------------------------------------------------------------
 # --- prolongation d'un wire par deux segments tangents
@@ -22,7 +22,7 @@ def prolongeWire(aWire, extrem, norms, long):
     uneSeuleEdge = True
   edgesBout = []
   for i, v1 in enumerate(extrem):
-    exts = [geompy.MakeTranslationVectorDistance(v1, norms[i], l) for l in (-long, long)]
+    exts = [geompy.MakeTranslationVectorDistance(v1, norms[i], l) for l in (-int, int)]
     dists = [(geompy.MinDistance(v, aWire), i , v) for i, v in enumerate(exts)]
     dists.sort()
     v2 = dists[-1][-1]
index 23200e1f738b06dc72086bb037497b9fbc186bb3..ab96494a9e08d397887824a1a11b5a26efbca135 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- recherche et classement des edges du tore par propagate
index b8d4cbfa3090c8dc1245ed3fe55df30482c1f389..35b8888cc63b8caa214ae90af72fe6b34e2da3b1 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-from geomsmesh import smesh
+from .geomsmesh import smesh
 
 # -----------------------------------------------------------------------------
 # --- nommage des objets mesh (algorithme, hypothèse, subMesh)
index b9facb652fe7dcd83eea7aeac10d572d3a46219f..1ffd6ba7eaa9b1c329148c841b9f26ea622505f6 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import GEOM
 import math
 import numpy as np
@@ -29,7 +29,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
   logging.info("start")
 
   isVecteurDefaut = False
-  if shapeFissureParams.has_key('vecteurDefaut'):
+  if 'vecteurDefaut' in shapeFissureParams:
     isVecteurDefaut = True
     vecteurDefaut = shapeFissureParams['vecteurDefaut']
 
@@ -153,7 +153,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
     h = e/(np.sqrt(f*g))                   # cosinus
     ruptureX = h < cosmin                  # True si angle > reference
     logging.debug("matrice de rupture X: \n%s",ruptureX)
-    rupX = filter(lambda x: np.prod(ruptureX[:,x]), range(len(nodeline)-2))
+    rupX = [x for x in range(len(nodeline)-2) if np.prod(ruptureX[:,x])]
     logging.debug("colonnes de rupture: %s",rupX)
     # recherche d'angles supérieurs a un seuil sur une colonne : angle entre deux vecteurs successifs
     vecy = mat[ 1:, :, :] - mat[:-1, :, :] # vecteurs selon direction "y"
@@ -165,7 +165,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
     h = e/(np.sqrt(f*g))                   # cosinus
     ruptureY = h < cosmin                  # True si angle > reference
     logging.debug("matrice de rupture Y: \n%s",ruptureY)
-    rupY = filter(lambda x: np.prod(ruptureY[x, :]), range(len(nodelines)-2))
+    rupY = [x for x in range(len(nodelines)-2) if np.prod(ruptureY[x, :])]
     logging.debug("lignes de rupture: %s",rupY)
     if (len(rupX)*len(rupY)) > 0:
       logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions, 
@@ -270,13 +270,13 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
         pointIn_y = 0.0
         pointIn_z = 0.0
         pointExplicite = False
-        if shapeFissureParams.has_key('pointIn_x'):
+        if 'pointIn_x' in shapeFissureParams:
           pointExplicite = True
           pointIn_x = shapeFissureParams['pointIn_x']
-        if shapeFissureParams.has_key('pointIn_y'):
+        if 'pointIn_y' in shapeFissureParams:
           pointExplicite = True
           pointIn_y = shapeFissureParams['pointIn_y']
-        if shapeFissureParams.has_key('pointIn_z'):
+        if 'pointIn_z' in shapeFissureParams:
           pointExplicite = True
           pointIn_z = shapeFissureParams['pointIn_z']
         if pointExplicite:
@@ -284,7 +284,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
           logging.debug("orientation filling par point intérieur %s", (pointIn_x, pointIn_y, pointIn_z))
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
         
-      if shapeFissureParams.has_key('convexe'):
+      if 'convexe' in shapeFissureParams:
         isConvexe = shapeFissureParams['convexe']
         logging.debug("orientation filling par indication de convexité %s", isConvexe)
         cdg = geompy.MakeCDG(filling)
index d3c52ab59cf4e2129c01cea7feb6ad46144012bd..0ef3227e0c8768dfc1deab776150207a3b1d199f 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import GEOM
 import math
 import numpy as np
@@ -29,7 +29,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
   logging.info("start")
 
   isVecteurDefaut = False
-  if shapeFissureParams.has_key('vecteurDefaut'):
+  if 'vecteurDefaut' in shapeFissureParams:
     isVecteurDefaut = True
     vecteurDefaut = shapeFissureParams['vecteurDefaut']
 
@@ -156,7 +156,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     h = e/(np.sqrt(f*g))                   # cosinus
     ruptureX = h < cosmin                  # True si angle > reference
     logging.debug("matrice de rupture X: \n%s",ruptureX)
-    rupX = filter(lambda x: np.prod(ruptureX[:,x]), range(len(nodeline)-2))
+    rupX = [x for x in range(len(nodeline)-2) if np.prod(ruptureX[:,x])]
     logging.debug("colonnes de rupture: %s",rupX)
     # recherche d'angles supérieurs a un seuil sur une colonne : angle entre deux vecteurs successifs
     vecy = mat[ 1:, :, :] - mat[:-1, :, :] # vecteurs selon direction "y"
@@ -168,7 +168,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     h = e/(np.sqrt(f*g))                   # cosinus
     ruptureY = h < cosmin                  # True si angle > reference
     logging.debug("matrice de rupture Y: \n%s",ruptureY)
-    rupY = filter(lambda x: np.prod(ruptureY[x, :]), range(len(nodelines)-2))
+    rupY = [x for x in range(len(nodelines)-2) if np.prod(ruptureY[x, :])]
     logging.debug("lignes de rupture: %s",rupY)
     if (len(rupX)*len(rupY)) > 0:
       logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions, 
@@ -273,13 +273,13 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
         pointIn_y = 0.0
         pointIn_z = 0.0
         pointExplicite = False
-        if shapeFissureParams.has_key('pointIn_x'):
+        if 'pointIn_x' in shapeFissureParams:
           pointExplicite = True
           pointIn_x = shapeFissureParams['pointIn_x']
-        if shapeFissureParams.has_key('pointIn_y'):
+        if 'pointIn_y' in shapeFissureParams:
           pointExplicite = True
           pointIn_y = shapeFissureParams['pointIn_y']
-        if shapeFissureParams.has_key('pointIn_z'):
+        if 'pointIn_z' in shapeFissureParams:
           pointExplicite = True
           pointIn_z = shapeFissureParams['pointIn_z']
         if pointExplicite:
@@ -287,7 +287,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
           logging.debug("orientation filling par point intérieur %s", (pointIn_x, pointIn_y, pointIn_z))
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
         
-      if shapeFissureParams.has_key('convexe'):
+      if 'convexe' in shapeFissureParams:
         isConvexe = shapeFissureParams['convexe']
         logging.debug("orientation filling par indication de convexité %s", isConvexe)
         cdg = geompy.MakeCDG(filling)
index 66963300fddc3cbd2f778a39ebaae1c2590d32be..bc77c59f032d98ba7b95b1880182981c2e880330 100644 (file)
@@ -6,14 +6,14 @@ Created on Tue Jun 24 09:14:13 2014
 """
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import GEOM
 
-from listOfExtraFunctions import createNewMeshesFromCorner
-from listOfExtraFunctions import createLinesFromMesh
+from .listOfExtraFunctions import createNewMeshesFromCorner
+from .listOfExtraFunctions import createLinesFromMesh
 
 # -----------------------------------------------------------------------------
 # --- groupe de quadrangles de face transformé en face géométrique par filling
index 7acbe4c77c6b7341575c5b5d9fed99933301808c..6238a409668cbd9fccae27956e70f45b5d473e55 100644 (file)
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import smesh
+from .geomsmesh import smesh
 import SMESH
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- maillage complet et fissure
index b300ae19f9086e10cfb53f8c7b26b985874bfd82..cdda80f8533415932be2b6976ef0f50858fe96d1 100644 (file)
@@ -1,13 +1,13 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
-from sortFaces import sortFaces
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
+from .sortFaces import sortFaces
 import traceback
-from fissError import fissError
+from .fissError import fissError
 
 def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
   """
index 05e3dcbe10db1d2821891018d22779c132854a48..fc2d2a98e9ce48157abcc107fd2e7e98b198dfb0 100644 (file)
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import math
-from triedreBase import triedreBase
+from .triedreBase import triedreBase
 O, OX, OY, OZ = triedreBase()
 
 # -----------------------------------------------------------------------------
index f9e36ac195bd91a41f3f39357bb8473d85e4a05c..0c54646b06c4be7804f831edb0ea7f4bbd52563d 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- construction d'une shape de dectection des éléments à modifier suite à la la duplication des noeuds de la face fissure (d'un coté de la face)
index a8a98a1a13236dd8447b72cf772afd1666ccc601..9c975c41bb55bc8978cd4b675a6a104d95c6040a 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
index 6d633f7d89c4183dc0cde4a9bc1ed204d12544a2..576338bd5e6d40c2cd4c1554c1815741a45a9164 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- tri par longueur d'edges
index 0fe962e6da543563a890ed0c3e7610abcad234c9..f45cd61052b63870e8e8d2b6b9abe69cea442e65 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- tri par surface de faces
index f61dc28381106d83f652fc5e6edcc64c454c0ec4..a72f83c642dbd016a609c5839ea1df15b8edef9e 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # -----------------------------------------------------------------------------
 # --- tri par longueur des 3 generatrices
index c51bca539ad1c41cf06fba8bec984799bc43a453..4905ccaeb71302c50ac3696f437812115f6ad5db 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- tri par volume de solides
index 3f819d7f4f58b80ad5fb76cd95f745da7c4577bc..7abb8b564a0775e3e6464cc0513ca8e164bafd5d 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- substract a list of subShapes from another
@@ -17,7 +17,7 @@ def substractSubShapes(obj, subs, toRemove):
     idToremove[geompy.GetSubShapeID(obj, s)] = s
   for s in subs:
     idsub = geompy.GetSubShapeID(obj, s)
-    if idsub not in idToremove.keys():
+    if idsub not in list(idToremove.keys()):
       subList.append(s)
   logging.debug("subList=%s", subList)
   return subList
index 12464f65d3b35abb45794a875c9f1928f4d9327f..742bd0eddca10ef5c58948cb32e5ba31af2a0d32 100644 (file)
@@ -1,12 +1,12 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 import math
-from triedreBase import triedreBase
+from .triedreBase import triedreBase
 
 O, OX, OY, OZ = triedreBase()
 
index 8113cd077eecff59ca66b848cbc0149ccb48c1bf..3188601c8052353dc1b5edd0cd94b0520812d97a 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 # --- origine et vecteurs de base
 
index 49205e6887c870d76862ae60390e121fae4ea2e9..6b652465036f27a891af11f926be8951f808d88a 100644 (file)
@@ -2,10 +2,10 @@
 
 import logging
 
-from geomsmesh import geompy
-from geomsmesh import geomPublish
-from geomsmesh import geomPublishInFather
-import initLog
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from . import initLog
 
 def trouveEdgesFissPeau(facesInside, facesOnside, edgesPipeIn, edgesFondIn, partitionPeauFissFond, edgesFissExtPeau):
   """
index d31fad2dd652f993070df5a4282aa69016506936..ab36a27c35b9ecc5ce5fedf8db0215c611bcf403 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)
index 248e6cf2cca0c59a71f7e58df9f199589797f6d7..f33ecfcdd702a4a03d4768541c6d1296a40d3ed4 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)
index 13a29c4fa1c406611763e18d13117fcf18efc8e7..713aae5ddcf1417cfe2b88127673783fd3854e84 100644 (file)
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 
 import logging
-from geomsmesh import geompy
+from .geomsmesh import geompy
 
 # -----------------------------------------------------------------------------
 # --- calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)
index a561ab8168267243ddab5016f6d712989488c2c4..1d24db51d9b13adcc5a546f91c38c776a26ef05e 100644 (file)
@@ -36,7 +36,7 @@ SET(_pyuic_FILES
   fissureGenerale.ui
 )
 # scripts / pyuic wrappings
-PYQT_WRAP_UIC(_pyuic_SCRIPTS ${_pyuic_FILES} TARGET_NAME _target_name_pyuic)
+PYQT_WRAP_UIC(_pyuic_SCRIPTS ${_pyuic_FILES} TARGET_NAME _target_name_pyuic OPTIONS "--import-from=blocFissure" "--resource-suffix=_qrc")
 
 # --- rules ---
 
index 1167c55fac7106acb7049032c6f45f3e3bfbb04c..54a50407a6e46d695df08029091fd6368bd4cf9a 100644 (file)
@@ -55,7 +55,7 @@ class fissureCoude_ihm(fissureCoude):
     pointIn_x   : optionnel coordonnées x d'un point dans le solide, pas trop loin du centre du fond de fissure (idem y,z)
     externe     : True : fissure face externe, False : fissure face interne
     """
-    print "setParamShapeFissure", self.nomCas
+    print("setParamShapeFissure", self.nomCas)
     self.shapeFissureParams = dict(profondeur  = self.dico['profondeur'],
                                    rayonPipe   = self.dico['rayonTore'],
                                    lenSegPipe  = self.dico['lenSegPipe'],
index 30936d50cbabb3a66f838cac69da3373cd34aa4f..d028f3d8add725ecaebaac7d62e98a5add69801c 100644 (file)
 # if you already have plugins defined in a salome_plugins.py file, add this file at the end.
 # if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
 
-import sys, traceback
 import math
+import sys
+import traceback
+
 from blocFissure import gmu
 
+
 def fissureCoudeDlg(context):
-  # get context study, studyId, salomeGui
+  # get context study, salomeGui
   study = context.study
-  studyId = context.studyId
   sg = context.sg
   
   import os
   #import subprocess
   #import tempfile
   from qtsalome import QFileDialog, QMessageBox, QPalette, QColor, QDialog
-  from fissureCoude_ui import Ui_Dialog
+  from blocFissure.ihm.fissureCoude_ui import Ui_Dialog
   
   class fissureCoudeDialog(QDialog):
     
@@ -249,27 +251,26 @@ def fissureCoudeDlg(context):
       else:
         self.ui.sb_nbSecteur.setPalette(self.blackPalette)
         
-      print "incomplet: ", incomplet
+      print("incomplet: ", incomplet)
       return incomplet
     
     def fileDefault(self):
       filedef = os.path.expanduser("~/.config/salome/dialogFissureCoude.dic")
-      print filedef
+      print(filedef)
       return filedef
     
     def writeDefault(self, dico):
       filedef = self.fileDefault()
-      f = open(filedef, 'w')
-      f.write(str(dico))
-      f.close()
+      with open(filedef, 'w') as f:
+          f.write(str(dico))
     
     def readValPrec(self):
       filedef = self.fileDefault()
       if os.path.exists(filedef):
-        f = open(filedef, 'r')
-        txt = f.read()
+        with open(filedef, 'r') as f:
+            txt = f.read()
         dico = eval(txt)
-        print dico
+        print(dico)
         self.initDialog(dico)
 
     def resetVal(self):
@@ -277,7 +278,7 @@ def fissureCoudeDlg(context):
       self.initDialog(self.defaut)
       
     def sauver(self):
-      print "sauver"
+      print("sauver")
       fileDiag = QFileDialog(self)
       fileDiag.setFileMode(QFileDialog.AnyFile)
       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
@@ -286,12 +287,11 @@ def fissureCoudeDlg(context):
         fileNames = fileDiag.selectedFiles()
         filedef = fileNames[0]
         dico = self.creeDico()
-        f = open(filedef, 'w')
-        f.write(str(dico))
-        f.close()
+        with open(filedef, 'w') as f:
+            f.write(str(dico))
         
     def recharger(self):
-      print "recharger"
+      print("recharger")
       fileDiag = QFileDialog(self)
       fileDiag.setFileMode(QFileDialog.ExistingFile)
       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
@@ -299,12 +299,12 @@ def fissureCoudeDlg(context):
       if fileDiag.exec_() :
         fileNames = fileDiag.selectedFiles()
         filedef = fileNames[0]
-        print filedef
+        print(filedef)
         if os.path.exists(filedef):
-          f = open(filedef, 'r')
-          txt = f.read()
+          with open(filedef, 'r') as f:
+              txt = f.read()
           dico = eval(txt)
-          print dico
+          print(dico)
           self.initDialog(dico)
          
     def creeDico(self):
@@ -338,7 +338,7 @@ def fissureCoudeDlg(context):
         aretesFaceFissure = self.ui.dsb_aretesFaceFissure.value(),
         influence         = self.ui.dsb_influence.value(),
         )
-      print dico
+      print(dico)
       return dico
       
     def checkValues(self):
@@ -356,26 +356,26 @@ def fissureCoudeDlg(context):
       NOK = self.testval(dico)
       if not(NOK):
         dico['lenSegPipe'] = (dico['longueur'] + math.pi*dico['profondeur'])/dico['nbTranches']
-        print 'lenSegPipe', dico['lenSegPipe']
+        print('lenSegPipe', dico['lenSegPipe'])
         areteMinAngle = (dico['rCintr'] -dico['dext']/2.0)*(dico['angle']*math.pi/180.0)/dico['nbAxeCoude']
-        print'areteMinAngle', areteMinAngle
+        print('areteMinAngle', areteMinAngle)
         areteMinCirco = dico['dext']*math.pi/(2*dico['nbCirconf'])
-        print'areteMinCirco', areteMinCirco
+        print('areteMinCirco', areteMinCirco)
         areteMinEpais = dico['epais']/dico['nbEpaisseur']
-        print'areteMinEpais', areteMinEpais
+        print('areteMinEpais', areteMinEpais)
         if dico['influence'] == 0:
           dico['influence'] = max(areteMinAngle, areteMinCirco, areteMinEpais)
-          print 'influence', dico['influence']
+          print('influence', dico['influence'])
         if dico['aretesFaceFissure'] == 0:
           dico['aretesFaceFissure'] = (areteMinAngle + areteMinCirco)/2.0
-          print 'aretesFaceFissure', dico['aretesFaceFissure']
+          print('aretesFaceFissure', dico['aretesFaceFissure'])
         if dico['rbPosiAngul'] == False:
           rmoy = (dico['dext'] - dico['epais'])/2.0
           eta = 1
           if dico['rbFissExt'] == False:
             eta = -1
           dico['posiAngul'] = (180.0/math.pi)*dico['absCurv']/(dico['rCintr']+(rmoy+eta*dico['epais']/2.0)*math.cos(math.pi*dico['azimut']/180.))
-          print 'posiAngul' , dico['posiAngul']
+          print('posiAngul' , dico['posiAngul'])
         
         self.writeDefault(dico)
         self.ui.lb_calcul.show()
@@ -398,9 +398,9 @@ def fissureCoudeDlg(context):
     result = window.result()
     if result:
       # dialog accepted
-      print "dialog accepted, check"
+      print("dialog accepted, check")
       retry = window.checkValues()
     else:
-      print "dialog rejected, exit"
+      print("dialog rejected, exit")
   pass
   
index 48d962653cb613e999132e5d74814ac52b4a230e..2924f176fb4206201f27553b8e4b348dbcc5232d 100644 (file)
@@ -27,9 +27,8 @@ import math
 from blocFissure import gmu
 
 def fissureGeneraleDlg(context):
-  # get context study, studyId, salomeGui
+  # get context study, salomeGui
   study = context.study
-  studyId = context.studyId
   sg = context.sg
 
   import os
@@ -42,12 +41,12 @@ def fissureGeneraleDlg(context):
   from PyQt5.QtWidgets import QMessageBox
   from PyQt5.QtGui import QPalette
   from PyQt5.QtGui import QColor
-  from fissureGenerale_ui import Ui_Dialog
+  from blocFissure.ihm.fissureGenerale_ui import Ui_Dialog
 
   class fissureGeneraleDialog(QtWidgets.QDialog):
 
     def __init__(self):
-      print "__init__"
+      print("__init__")
       QtWidgets.QDialog.__init__(self)
       # Set up the user interface from Designer.
       self.ui = Ui_Dialog()
@@ -106,7 +105,7 @@ def fissureGeneraleDlg(context):
       self.ui.sb_couronnes.setValue(dico['nbSegRad'])
       self.ui.sb_secteurs.setValue(dico['nbSegCercle'])
       self.ui.dsb_areteFaceFissure.setValue(dico['areteFaceFissure'])
-      if dico.has_key('aretesVives'):
+      if 'aretesVives' in dico:
         self.ui.dsb_aretesVives.setValue(dico['aretesVives'])
       else:
         self.ui.dsb_aretesVives.setValue(0)
@@ -133,12 +132,12 @@ def fissureGeneraleDlg(context):
         l = dico['edgeFissIds']
         for i in l:
           if not isinstance(i, int):
-            print"not isinstance(i, int)"
+            print("not isinstance(i, int)")
             incomplet = True
             edgeFissIdsOK=False
             break
       except:
-        print "except eval"
+        print("except eval")
         incomplet = True
         edgeFissIdsOK=False
       if edgeFissIdsOK:
@@ -171,19 +170,18 @@ def fissureGeneraleDlg(context):
       else:
         self.ui.dsb_areteFaceFissure.setPalette(self.blackPalette)
 
-      print "incomplet: ", incomplet
+      print("incomplet: ", incomplet)
       return incomplet
 
     def fileDefault(self):
       filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
-      print filedef
+      print(filedef)
       return filedef
 
     def writeDefault(self, dico):
       filedef = self.fileDefault()
-      f = open(filedef, 'w')
-      f.write(str(dico))
-      f.close()
+      with open(filedef, 'w') as f:
+          f.write(str(dico))
 
     def genereExemples(self):
       maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med')
@@ -200,10 +198,10 @@ def fissureGeneraleDlg(context):
     def readValPrec(self):
       filedef = self.fileDefault()
       if os.path.exists(filedef):
-        f = open(filedef, 'r')
-        txt = f.read()
+        with open(filedef, 'r') as f:
+            txt = f.read()
         dico = eval(txt)
-        print dico
+        print(dico)
         self.initDialog(dico)
 
     def resetVal(self):
@@ -212,9 +210,9 @@ def fissureGeneraleDlg(context):
 
     def setLogVerbosity(self, logfile):
       from blocFissure.gmu import initLog # le mode de log s'initialise une seule fois
-      print "setLogVerbosity"
+      print("setLogVerbosity")
       index = self.ui.cb_log.currentIndex()
-      print index
+      print(index)
       if index == 0:
         initLog.setRelease(logfile)
       elif index == 1:
@@ -224,24 +222,23 @@ def fissureGeneraleDlg(context):
 
 
     def sauver(self):
-      print "sauver"
+      print("sauver")
       fileDiag = QFileDialog(self)
       fileDiag.setFileMode(QFileDialog.AnyFile)
       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
       fileDiag.setViewMode(QFileDialog.List)
       if fileDiag.exec_() :
         fileNames = fileDiag.selectedFiles()
-        print fileNames
+        print(fileNames)
         filedef = fileNames[0]
         if filedef[-4:] not in ['.dic']:
           filedef += '.dic'
         dico = self.creeDico()
-        f = open(filedef, 'w')
-        f.write(str(dico))
-        f.close()
+        with open(filedef, 'w') as f:
+          f.write(str(dico))
 
     def recharger(self):
-      print "recharger"
+      print("recharger")
       fileDiag = QFileDialog(self)
       fileDiag.setFileMode(QFileDialog.ExistingFile)
       fileDiag.setNameFilter("Parametres *.dic (*.dic)")
@@ -249,12 +246,12 @@ def fissureGeneraleDlg(context):
       if fileDiag.exec_() :
         fileNames = fileDiag.selectedFiles()
         filedef = fileNames[0]
-        print filedef
+        print(filedef)
         if os.path.exists(filedef):
-          f = open(filedef, 'r')
-          txt = f.read()
+          with open(filedef, 'r') as f:
+            txt = f.read()
           dico = eval(txt)
-          print dico
+          print(dico)
           self.initDialog(dico)
 
     def selectMaillage(self):
@@ -265,7 +262,7 @@ def fissureGeneraleDlg(context):
       if fileDiag.exec_() :
         fileNames = fileDiag.selectedFiles()
         filedef = fileNames[0]
-        print filedef
+        print(filedef)
         self.ui.le_maillage.setText(filedef)
 
     def selectFacefiss(self):
@@ -276,7 +273,7 @@ def fissureGeneraleDlg(context):
       if fileDiag.exec_() :
         fileNames = fileDiag.selectedFiles()
         filedef = fileNames[0]
-        print filedef
+        print(filedef)
         self.ui.le_facefiss.setText(filedef)
 
     def selectReptrav(self):
@@ -287,7 +284,7 @@ def fissureGeneraleDlg(context):
       if fileDiag.exec_() :
         fileNames = fileDiag.selectedFiles()
         reptrav = str(fileNames[0])
-        print "reptrav ", reptrav
+        print("reptrav ", reptrav)
         self.ui.le_reptrav.setText(os.path.abspath(reptrav))
 
 
@@ -303,7 +300,7 @@ def fissureGeneraleDlg(context):
       if fileDiag.exec_() :
         fileNames = fileDiag.selectedFiles()
         tempnom = os.path.split(str(fileNames[0]))[1]
-        print "nomres ", tempnom
+        print("nomres ", tempnom)
         self.ui.le_nomres.setText(tempnom)
       else:
         self.ui.le_nomres.setText(nomres)
@@ -325,14 +322,14 @@ def fissureGeneraleDlg(context):
                   nomres           = str(self.ui.le_nomres.text()),
                   verbosite        = self.ui.cb_log.currentIndex()
                   )
-      print dico
+      print(dico)
       return dico
 
     def checkValues(self):
       return self.NOK
 
     def execute(self):
-      print "execute"
+      print("execute")
       dico = self.creeDico()
       NOK = self.testval(dico)
       if not(NOK):
@@ -347,14 +344,14 @@ def fissureGeneraleDlg(context):
         try:
           execInstance = casStandard(dico)
         except fissError as erreur:
-          print '-'*60
-          print type(erreur)
-          print '-'*60
-          print erreur.msg
-          print '-'*60
+          print('-'*60)
+          print(type(erreur))
+          print('-'*60)
+          print(erreur.msg)
+          print('-'*60)
           for ligne in erreur.pile:
-            print repr(ligne)
-          print '-'*60
+            print(repr(ligne))
+          print('-'*60)
           texte = erreur.msg
 #           texte += +"<br>" +'-'*60 +"<br>"
 #           for ligne in erreur.pile:
@@ -373,7 +370,7 @@ def fissureGeneraleDlg(context):
 
 # ----------------------------------------------------------------------------
 
-  print "main"
+  print("main")
   window = fissureGeneraleDialog()
   retry = True
   while(retry):
@@ -382,9 +379,9 @@ def fissureGeneraleDlg(context):
     result = window.result()
     if result:
       # dialog accepted
-      print "dialog accepted, check"
+      print("dialog accepted, check")
       retry = window.checkValues()
     else:
-      print "dialog rejected, exit"
+      print("dialog rejected, exit")
   pass
 
index 3b0097aa4f90cda8c60a15368821826f3d37d410..b24d86cf728ea17f7626a82270990e980562525d 100644 (file)
@@ -29,4 +29,4 @@ dicoParams = dict(nomCas            = 'casTestCoinTriple',
 execInstance = casStandard(dicoParams)
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 89ceb14e7091a1815e5610c3b38bd9a400f4659b..4ffd10a8a03e9c5c0938cca451501de4fa665ae6 100644 (file)
@@ -29,4 +29,4 @@ dicoParams = dict(nomCas            = 'casTestCoinTriple',
 execInstance = casStandard(dicoParams)
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 49eeed3ae6a190d82987540a41c57715275e514f..d7789575e21d88730f943aea44406a603b105a4e 100644 (file)
@@ -29,4 +29,4 @@ dicoParams = dict(nomCas            = 'testAubry',
 execInstance = casStandard(dicoParams)
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index a9c4769aaf1edcbf50f35862b8980362f213a816..eb5352a766359ed1ec48daefe8dd751056d5f23b 100644 (file)
@@ -4,10 +4,8 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
 
 import os
 from blocFissure import gmu
@@ -22,7 +20,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -55,7 +53,7 @@ geompy.addToStudy( Common_1, 'Common_1' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 Mesh_1 = smesh.Mesh(Box_1)
 Regular_1D = Mesh_1.Segment()
@@ -65,7 +63,7 @@ Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
 isDone = Mesh_1.Compute()
 smesh.SetName(Mesh_1, 'Mesh_1')
-Mesh_1.ExportMED(  os.path.join(gmu.pathBloc, "materielCasTests/CubeAngle.med"), 0, SMESH.MED_V2_2, 1 )
+Mesh_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/CubeAngle.med"))
 
 ## set object names
 smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
@@ -75,4 +73,4 @@ smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
 smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 3eeb130df8e47a9a9da06fbba1beca36f5794664..c7c1e0794375d748a6f1ecf354df99fb71aca169 100644 (file)
@@ -4,10 +4,8 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
 
 import os
 from blocFissure import gmu
@@ -22,7 +20,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -104,7 +102,7 @@ geompy.ExportBREP(cubeFin_Milieu, os.path.join(gmu.pathBloc, "materielCasTests/c
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 cubeFin_1 = smesh.Mesh(cubeFin)
 Regular_1D = cubeFin_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(20)
@@ -124,7 +122,7 @@ smesh.SetName(ENCASTR_1, 'ENCASTR')
 smesh.SetName(cubeFin_1.GetMesh(), 'cubeFin')
 smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
 
-cubeFin_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/cubeFin.med"), 0, SMESH.MED_V2_2, 1 )
+cubeFin_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/cubeFin.med"))
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index c43889c94f2d48ddd522e8e6b8464e1b50af0451..8e0077695781eac02f8df2a3cd9671b7c2307b28 100644 (file)
@@ -4,7 +4,6 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
 notebook = salome_notebook.notebook
@@ -22,7 +21,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -125,7 +124,7 @@ geompy.addToStudy( FissInCylindre2, 'FissInCylindre2' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 smeshObj_1 = smesh.CreateHypothesis('NumberOfSegments')
 smeshObj_1.SetNumberOfSegments( 5 )
@@ -144,13 +143,13 @@ Nb_Segments_3 = Regular_1D_2.NumberOfSegments(6,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
 isDone = CylindreSain_1.Compute()
 smesh.SetName(CylindreSain_1, 'CylindreSain')
-CylindreSain_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests//CylindreSain.med"), 0, SMESH.MED_V2_2, 1 )
+CylindreSain_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests//CylindreSain.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
 ## some objects were removed
-aStudyBuilder = theStudy.NewBuilder()
-SO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR(smeshObj_1))
+aStudyBuilder = salome.myStudy.NewBuilder()
+SO = salome.myStudy.FindObjectIOR(salome.myStudy.ConvertObjectToIOR(smeshObj_1))
 if SO is not None: aStudyBuilder.RemoveObjectWithChildren(SO)
 ## set object names
 smesh.SetName(CylindreSain_1.GetMesh(), 'CylindreSain')
@@ -164,4 +163,4 @@ smesh.SetName(SubMesh_1, 'SubMesh_1')
 smesh.SetName(SubMesh_2, 'SubMesh_2')
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 7fc7173dc5a91282b806a48314b5ab48b61b5a49..316fb0701c619f092c444594e52fa9347f471f79 100644 (file)
@@ -4,7 +4,6 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
 notebook = salome_notebook.notebook
@@ -23,7 +22,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -56,7 +55,7 @@ geompy.addToStudyInFather( Disque, Compound_4, 'Compound_4' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 Disque_1 = smesh.Mesh(Disque)
 Regular_1D = Disque_1.Segment()
@@ -71,7 +70,7 @@ status = Disque_1.AddHypothesis(Nb_Segments_2,Compound_4)
 Quadrangle_2D = Disque_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 isDone = Disque_1.Compute()
 smesh.SetName(Disque_1, 'Disque')
-Disque_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/disque.med"), 0, SMESH.MED_V2_2, 1 )
+Disque_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/disque.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
@@ -86,4 +85,4 @@ smesh.SetName(SubMesh_1, 'SubMesh_1')
 smesh.SetName(SubMesh_2, 'SubMesh_2')
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index e55e913cf5097ba2f3d07387e9693eb04e0ee094..8a57b3aa1d6ac18e351ed7a9408d839b5bebc841 100644 (file)
@@ -4,7 +4,6 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
 notebook = salome_notebook.notebook
@@ -22,7 +21,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -58,4 +57,4 @@ geompy.ExportBREP(ellipse1, os.path.join(gmu.pathBloc, "materielCasTests/ellipse
 
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index b0b1d37f3d1558d4676b80605f9b09e201710262..56f2861a437652e705227eca9608d43f7606b60a 100644 (file)
@@ -4,10 +4,8 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
 
 import os
 from blocFissure import gmu
@@ -22,7 +20,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -50,4 +48,4 @@ geompy.addToStudy( Ellipse_disque, 'Ellipse_disque' )
 
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 5b01a500d1f4700cee579956239d6ec25459ecb1..b607f7c78b4c7ab3a20898853a16858303b8c7a6 100644 (file)
@@ -4,7 +4,6 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
 notebook = salome_notebook.notebook
@@ -22,7 +21,7 @@ from salome.geom import geomBuilder
 import math
 import SALOMEDS
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 Disk_1 = geompy.MakeDiskR(100, 1)
 O = geompy.MakeVertex(0, 0, 0)
@@ -56,4 +55,4 @@ geompy.ExportBREP(ellipse1, os.path.join(gmu.pathBloc, "materielCasTests/ellipse
 
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 3430703529a7497a3ba9ace8bdd03893ed100640..faf41c5e5b1e9f6a815b202873b56eab20274e7a 100644 (file)
@@ -4,7 +4,6 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
 notebook = salome_notebook.notebook
@@ -22,7 +21,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -72,7 +71,7 @@ geompy.addToStudyInFather( EprouvetteCourbe, Compound_x, 'Compound_x' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 EprouvetteCourbe_1 = smesh.Mesh(EprouvetteCourbe)
 Regular_1D = EprouvetteCourbe_1.Segment()
@@ -88,7 +87,7 @@ Nb_Segments_3 = Regular_1D_2.NumberOfSegments(25)
 Nb_Segments_3.SetDistrType( 0 )
 isDone = EprouvetteCourbe_1.Compute()
 smesh.SetName(EprouvetteCourbe_1, 'EprouvetteCourbe')
-EprouvetteCourbe_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteCourbe.med"), 0, SMESH.MED_V2_2, 1 )
+EprouvetteCourbe_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteCourbe.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
@@ -104,4 +103,4 @@ smesh.SetName(SubMesh_1, 'SubMesh_1')
 smesh.SetName(SubMesh_2, 'SubMesh_2')
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 1b2ef1c477434e45780c2e3f03d23e23fe5300be..3420d7cb4ddf228992e15592e70f8c2e8ccbf673 100644 (file)
@@ -4,10 +4,8 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
-notebook = salome_notebook.NoteBook(theStudy)
 
 import os
 from blocFissure import gmu
@@ -22,7 +20,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -107,7 +105,7 @@ geompy.addToStudy( Face_2, 'Face_2' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 eprouvetteDroite_1 = smesh.Mesh(eprouvetteDroite)
 Regular_1D = eprouvetteDroite_1.Segment()
@@ -123,7 +121,7 @@ Nb_Segments_3 = Regular_1D_2.NumberOfSegments(10,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
 isDone = eprouvetteDroite_1.Compute()
 smesh.SetName(eprouvetteDroite_1, 'eprouvetteDroite')
-eprouvetteDroite_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/eprouvetteDroite.med"), 0, SMESH.MED_V2_2, 1 )
+eprouvetteDroite_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/eprouvetteDroite.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
@@ -139,4 +137,4 @@ smesh.SetName(SubMesh_1, 'SubMesh_1')
 smesh.SetName(SubMesh_2, 'SubMesh_2')
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index a6d4e3999e3548d2d3c789721bc88a09c090ff21..934b9b40269cb26ba0a528449f26e3762c496e5b 100644 (file)
@@ -4,7 +4,6 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
 notebook = salome_notebook.notebook
@@ -22,7 +21,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -101,7 +100,7 @@ geompy.addToStudyInFather( objetSain, Compound_6, 'Compound_6' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 objetSain_1 = smesh.Mesh(objetSain)
 Regular_1D = objetSain_1.Segment()
@@ -117,7 +116,7 @@ Nb_Segments_3 = Regular_1D_2.NumberOfSegments(5,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
 isDone = objetSain_1.Compute()
 smesh.SetName(objetSain_1, 'objetSain')
-objetSain_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/faceGaucheSain.med"), 0, SMESH.MED_V2_2, 1 )
+objetSain_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/faceGaucheSain.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
@@ -133,4 +132,4 @@ smesh.SetName(SubMesh_1, 'SubMesh_1')
 smesh.SetName(SubMesh_2, 'SubMesh_2')
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index 0f08fd71511cb041694fbd65967741455cf11875..e46b5a8e4d3da56d78b3313b49170a64e5f40e1f 100644 (file)
@@ -4,7 +4,6 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
 notebook = salome_notebook.notebook
@@ -22,7 +21,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
@@ -75,7 +74,7 @@ geompy.addToStudy( FaceFissExtCoupe, 'FaceFissExtCoupe' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 Mesh_1 = smesh.Mesh(objetSain)
 Regular_1D = Mesh_1.Segment()
@@ -85,7 +84,7 @@ Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
 isDone = Mesh_1.Compute()
 smesh.SetName(Mesh_1, 'Mesh_1')
-Mesh_1.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/boiteSaine.med"), 0, SMESH.MED_V2_2, 1 )
+Mesh_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/boiteSaine.med"))
 
 ## set object names
 smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
@@ -95,4 +94,4 @@ smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
 smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index ce9aa6805295a5858864a99da8f4d88088d7362c..8db9aaca63060259a0767c0b714f578d9012097f 100644 (file)
@@ -4,7 +4,6 @@ import sys
 import salome
 
 salome.salome_init()
-theStudy = salome.myStudy
 
 import salome_notebook
 notebook = salome_notebook.notebook
@@ -22,7 +21,7 @@ import math
 import SALOMEDS
 
 
-geompy = geomBuilder.New(theStudy)
+geompy = geomBuilder.New()
 O = geompy.MakeVertex(0, 0, 0)
 OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
 OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
@@ -167,7 +166,7 @@ geompy.addToStudyInFather( Fissure, fondFiss, 'fondFiss' )
 import  SMESH, SALOMEDS
 from salome.smesh import smeshBuilder
 
-smesh = smeshBuilder.New(theStudy)
+smesh = smeshBuilder.New()
 coupe_vis_1 = smesh.Mesh(coupe_vis)
 Regular_1D = coupe_vis_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
@@ -193,7 +192,7 @@ visHex80 = smesh.CopyMesh( coupe_vis_1, 'visHex80', 1, 0)
 [ tige_2, section_2, tige_haute_2, rond_2, tete_2, section_tete_2, conge_2, appui_2, p_imp_2, tige_rotated, tige_top, section_rotated, section_top, tige_haute_rotated, tige_haute_top, rond_rotated, rond_top, tete_rotated, tete_top, section_tete_rotated, section_tete_top, conge_rotated, conge_top, appui_rotated, appui_top, p_imp_rotated, p_imp_top ] = visHex80.GetGroups()
 Sub_mesh_1 = Regular_1D_1.GetSubMesh()
 Sub_mesh_2 = Regular_1D_2.GetSubMesh()
-visHex80.ExportMED( os.path.join(gmu.pathBloc, "materielCasTests/visSain.med"), 0, SMESH.MED_V2_2, 1 )
+visHex80.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/visSain.med"))
  
 
 ## Set names of Mesh objects
@@ -245,4 +244,4 @@ smesh.SetName(tige_haute_2, 'tige_haute')
 
 
 if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser(True)
+  salome.sg.updateObjBrowser()
index a0b78faaa5a85ef402f98d4bf6af9e0c6dc100ee..f84c83b4bf1b03eaad9ee71f9ae3de344ede3856 100644 (file)
@@ -40,7 +40,7 @@ module SPADDERPluginTest {
   {
     void demo(in double a,in double b,out double c) raises (SALOME::SALOME_Exception);
     boolean testkernel() raises (SALOME::SALOME_Exception);
-    boolean testsmesh(in long studyId) raises (SALOME::SALOME_Exception);
+    boolean testsmesh() raises (SALOME::SALOME_Exception);
   };
 };
 
index 10b5b94c86575930175ac602b2969033f1aaae46..220f73727c76939e4fb797cbb532f9c656b9c46e 100644 (file)
@@ -118,16 +118,15 @@ bool SPADDERPluginTester_i::testkernel()
  * This test checks the constructor of the basic classes of the SMESH
  * plugin for PADDER.
  */
-bool SPADDERPluginTester_i::testsmesh(CORBA::Long studyId)
+bool SPADDERPluginTester_i::testsmesh()
 {
   beginService("SPADDERPluginTester_i::testsmesh");
 
   // Resolve the SMESH engine and the SALOME study
   // _WARN_ The SMESH engine should have been loaded first
   SMESH_Gen_i* smeshGen_i = SMESH_Gen_i::GetSMESHGen();
-  CORBA::Object_var anObject = smeshGen_i->GetNS()->Resolve("/myStudyManager");
-  SALOMEDS::StudyManager_var aStudyMgr = SALOMEDS::StudyManager::_narrow(anObject);
-  SALOMEDS::Study_var myStudy = aStudyMgr->GetStudyByID(studyId);
+  CORBA::Object_var anObject = smeshGen_i->GetNS()->Resolve("/Study");
+  SALOMEDS::Study_var aStudy = SALOMEDS::Study::_narrow(anObject);
 
   //
   // _MEM_ CAUTION: SMESH_Gen define a data structure for local usage
index 9a2193d556c2669274b0a55df51daa6a1a9aed73..c6eea5ec45870646c4231f2a6e457fe7965c2016 100644 (file)
@@ -50,7 +50,7 @@ public:
   
   void demo(CORBA::Double a,CORBA::Double b,CORBA::Double& c);
   bool testkernel();
-  bool testsmesh(CORBA::Long studyId);
+  bool testsmesh();
 
 };
 
index b279695dac9d74ed980697779e9c8abccc73b1db..dc9ee81907244b6fffb7ecc5efa90bcbcc8e249e 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 # Copyright (C) 2011-2016  EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+import csv
 import salome
 salome.salome_init()
 import GEOM
 from salome.geom import geomBuilder
-geompy = geomBuilder.New(salome.myStudy)
+geompy = geomBuilder.New()
 
 filename="/home/gboulant/development/projets/salome/SPADDER/spadder/resources/padderexe/REF_spheres.dat.xyz"
-file=open(filename,'rb')
 
-import csv
-datalines = csv.reader(file, delimiter=' ')
+with open(filename,'rb') as f:
+    datalines = csv.reader(file, delimiter=' ')
 i=0
 for row in datalines:
     x=float(row[0])
index 0031b907da0ef0eceaec8e87daeae25fc4ba45c0..effd68f7d6c96cb9b2279d536367a744bf882261 100644 (file)
@@ -98,11 +98,11 @@ def loadSpadderCatalog():
     import SALOME_ModuleCatalog
     catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
     if not catalog:
-        raise RuntimeError, "Can't accesss module catalog"
+        raise RuntimeError("Can't accesss module catalog")
 
     filename = getSpadderCatalogFilename()
     catalog.ImportXmlCatalogFile(filename)
 
     from salome.kernel import services
-    print "The list of SALOME components is now:" 
-    print services.getComponentList()
+    print("The list of SALOME components is now:") 
+    print(services.getComponentList())
index 9580a51e40ceb730301171bc0b460e038c2b5f72..7593ccf50f6310b1d900f9da4f2b1084e8d7b0c3 100644 (file)
@@ -22,7 +22,7 @@
 #
 
 import sys, os
-import ConfigParser
+import configparser
 from MESHJOB import ConfigParameter
 from salome.kernel.uiexception import AdminException, UiException
 
@@ -42,7 +42,7 @@ class ConfigReader:
         self.__configFilename = None
         try:
             smeshpath=os.environ["SMESH_ROOT_DIR"]
-        except KeyError, ex:
+        except KeyError as ex:
             raise AdminException("You should define the variable SMESH_ROOT_DIR")
 
         pluginspath = os.path.join(smeshpath,CONFIG_RELPATH)
@@ -53,11 +53,11 @@ class ConfigReader:
             msg = "The configuration file %s can't be found in the SMESH plugins path %s"
             raise AdminException(msg%(CONFIG_FILENAME,pluginspath))
 
-        print "The configuration file is : %s"%self.__configFilename
-        self.__configparser = ConfigParser.RawConfigParser()
+        print("The configuration file is : %s"%self.__configFilename)
+        self.__configparser = configparser.RawConfigParser()
         try:
             self.__configparser.read(self.__configFilename)
-        except ConfigParser.ParsingError, ex:
+        except configparser.ParsingError as ex:
             raise AdminException(ex.message)
 
     def getLocalConfig(self):
@@ -87,10 +87,10 @@ class ConfigReader:
         return defaultType
 
 def printConfig(config):
-    print "PADDER CONFIGURATION:"
-    print "\tconfig.resname = %s"%config.resname
-    print "\tconfig.binpath = %s"%config.binpath
-    print "\tconfig.envpath = %s"%config.envpath
+    print("PADDER CONFIGURATION:")
+    print("\tconfig.resname = %s"%config.resname)
+    print("\tconfig.binpath = %s"%config.binpath)
+    print("\tconfig.envpath = %s"%config.envpath)
     
 def getPadderTestDir(config):
     """
@@ -112,10 +112,10 @@ def TEST_getDefaultConfig():
     try:
         configReader = ConfigReader()
         defaultConfig = configReader.getDefaultConfig()
-        print defaultConfig.resname
-        print defaultConfig.binpath
-        print defaultConfig.envpath
-    except Exception, ex:
+        print(defaultConfig.resname)
+        print(defaultConfig.binpath)
+        print(defaultConfig.envpath)
+    except Exception as ex:
         sys.stderr.write('ERROR: %s\n' % str(ex))
         return False
     
@@ -127,8 +127,8 @@ def TEST_getDefaultConfig_withError():
     try:
         configReader = ConfigReader()
         defaultConfig = configReader.getDefaultConfig()
-    except UiException, err:
-        print 'ERROR: %s' % str(err)
+    except UiException as err:
+        print('ERROR: %s' % str(err))
         return True
     
     return False
index 2ca9f8fc9a3c0319778dbcccff7af8b3622fe027..f0d81eaeccad2b109124a4a7d670013546db44bc 100644 (file)
@@ -32,8 +32,8 @@ from omniORB import CORBA
 
 from qtsalome import QIcon, QStandardItemModel, QStandardItem, QMessageBox, pyqtSignal
 
-from inputframe_ui import Ui_InputFrame
-from inputdata import InputData
+from salome.smesh.spadder.gui.inputframe_ui import Ui_InputFrame
+from salome.smesh.spadder.gui.inputdata import InputData
 
 DEBUG_MODE=True
 GROUPNAME_MAXLENGTH=8
@@ -178,7 +178,7 @@ class InputDialog(GenericDialog):
             self.__selectedMesh = None
             return
 
-        self.smeshStudyTool.updateStudy(studyedit.getActiveStudyId())
+        self.smeshStudyTool.updateStudy()
         self.__selectedMesh = self.smeshStudyTool.getMeshObjectFromSObject(mySObject)
         if CORBA.is_nil(self.__selectedMesh):
             self.__ui.txtSmeshObject.setText("The selected object is not a mesh")
@@ -240,7 +240,7 @@ class InputDialog(GenericDialog):
         """
         # if the entry already exists, we remove it to replace by a
         # new one
-        if self.__dictInputFiles.has_key(meshName):
+        if meshName in self.__dictInputFiles:
             self.__delInputFromMap(meshName)
 
         inputData = InputData()
@@ -255,10 +255,10 @@ class InputDialog(GenericDialog):
         else:
             self.__nbSteelbarMesh += 1
 
-        print inputData
-        print "meshType = ",inputData.meshType
-        print "nb concrete mesh ",self.__nbConcreteMesh
-        print "nb steelbar mesh ",self.__nbSteelbarMesh
+        print(inputData)
+        print("meshType = ",inputData.meshType)
+        print("nb concrete mesh ",self.__nbConcreteMesh)
+        print("nb steelbar mesh ",self.__nbSteelbarMesh)
 
 
     def onDeleteInput(self):
@@ -287,9 +287,9 @@ class InputDialog(GenericDialog):
         else:
             self.__nbSteelbarMesh -= 1
 
-        print inputData
-        print "nb concrete mesh ",self.__nbConcreteMesh
-        print "nb steelbar mesh ",self.__nbSteelbarMesh
+        print(inputData)
+        print("nb concrete mesh ",self.__nbConcreteMesh)
+        print("nb steelbar mesh ",self.__nbSteelbarMesh)
 
 
     def setData(self, dictInputData={}):
@@ -298,14 +298,14 @@ class InputDialog(GenericDialog):
         the specified data list.
         """
         self.clear()
-        if dictInputData.has_key(INPUTDATA_KEY_FILES):
+        if INPUTDATA_KEY_FILES in dictInputData:
             listInputData = dictInputData["meshfiles"]
             for inputData in listInputData:
 
-                meshName   = inputData.meshName
+                meshName = inputData.meshName
                 meshObject = inputData.meshObject
-                meshType   = inputData.meshType
-                groupName  = inputData.groupName
+                meshType = inputData.meshType
+                groupName = inputData.groupName
 
                 self.__addInputInGui(meshName, meshObject, meshType, groupName)
                 self.__addInputInMap(meshName, meshObject, meshType, groupName)
@@ -313,12 +313,12 @@ class InputDialog(GenericDialog):
                 if not DEBUG_MODE:
                     self.onSelectSmeshObject()
 
-           if dictInputData.has_key(INPUTDATA_KEY_PARAM):
-               dictInputParameters = dictInputData[INPUTDATA_KEY_PARAM]
-            if dictInputParameters.has_key(PARAM_KEY_NBITER):
+        if INPUTDATA_KEY_PARAM in dictInputData:
+            dictInputParameters = dictInputData[INPUTDATA_KEY_PARAM]
+            if PARAM_KEY_NBITER in dictInputParameters:
                 self.__ui.txtParamNbIter.setValue(dictInputParameters[PARAM_KEY_NBITER])
-            if dictInputParameters.has_key(PARAM_KEY_RMAXRMIN):
-                self.__ui.txtParamRmaxRmin.setValue(dictInputParameters[PARAM_KEY_RMAXRMIN])
+            if PARAM_KEY_RMAXRMIN in dictInputParameters:
+                self.__ui.txtParamRminRmax.setValue(dictInputParameters[PARAM_KEY_RMAXRMIN])
 
     def getData(self):
         """
@@ -369,7 +369,7 @@ def TEST_InputDialog():
     dlg=InputDialog()
     dlg.displayAndWait()
     if dlg.wasOk():
-        print "OK has been pressed"
+        print("OK has been pressed")
 
 def TEST_InputDialog_setData():
     import sys
@@ -379,7 +379,7 @@ def TEST_InputDialog_setData():
 
     dlg=InputDialog()
 
-    from inputdata import InputData
+    from .inputdata import InputData
     inputData = InputData()
     inputData.meshName   = "myMesh"
     inputData.meshObject = None
@@ -392,9 +392,9 @@ def TEST_InputDialog_setData():
 
     dlg.displayAndWait()
     if dlg.wasOk():
-        print "OK has been pressed"
+        print("OK has been pressed")
         outputListInputData = dlg.getData2()
-        print outputListInputData
+        print(outputListInputData)
 
 
 if __name__ == "__main__":
index 4fec4e8d375a091325aa6d7f703ee01b3c5216b8..44796efa5ebb8141d713ad7996aa6d945d6ee0de 100644 (file)
 
 from qtsalome import QDialog, QIcon, Qt
 
-from plugindialog_ui import Ui_PluginDialog
-from inputdialog import InputDialog, INPUTDATA_KEY_FILES, INPUTDATA_KEY_PARAM
-from inputdialog import PARAM_KEY_NBITER, PARAM_KEY_RMAXRMIN
-from inputdata import InputData
+from salome.smesh.spadder.gui.plugindialog_ui import Ui_PluginDialog
+from salome.smesh.spadder.gui.inputdialog import InputDialog, INPUTDATA_KEY_FILES, INPUTDATA_KEY_PARAM
+from salome.smesh.spadder.gui.inputdialog import PARAM_KEY_NBITER, PARAM_KEY_RMAXRMIN
+from salome.smesh.spadder.gui.inputdata import InputData
 # __GBO__: uncomment this line and comment the previous one to use the
 # demo input dialog instead of the real one.
 #from demoinputdialog import InputDialog
@@ -38,7 +38,7 @@ from salome.kernel.uiexception import AdminException
 from omniORB import CORBA
 import SMESH
 from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New(salome.myStudy)
+smesh = smeshBuilder.New()
 import MESHJOB
 
 gui_states = ["CAN_SELECT", "CAN_COMPUTE", "CAN_REFRESH", "CAN_PUBLISH"]
@@ -87,7 +87,7 @@ class PluginDialog(QDialog):
         self.__ui.btnClear.setIcon(icon)
 
         # Then, we can connect the slot to there associated button event
-       self.__ui.btnInput.clicked.connect( self.onInput )
+        self.__ui.btnInput.clicked.connect( self.onInput )
         self.__ui.btnCompute.clicked.connect( self.onCompute )
         self.__ui.btnRefresh.clicked.connect( self.onRefresh )
         self.__ui.btnPublish.clicked.connect( self.onPublish )
@@ -140,7 +140,7 @@ class PluginDialog(QDialog):
                 self.__inputDialog.windowFlags() | Qt.WindowStaysOnTopHint)
             # The signal inputValidated emitted from inputDialog is
             # connected to the slot function onProcessInput:
-           self.__inputDialog.inputValidated.connect( self.onProcessInput )
+            self.__inputDialog.inputValidated.connect( self.onProcessInput )
 
         else:
             self.__ui.frameInput.setVisible(True)
@@ -179,7 +179,7 @@ class PluginDialog(QDialog):
         servant. Note that the component is loaded on first demand,
         and then the reference is recycled.
         """
-        if self.__dict__.has_key("__jobManager") and self.__jobManager is not None:
+        if "__jobManager" in self.__dict__ and self.__jobManager is not None:
             return self.__jobManager
 
         # WARN: we first have to update the SALOME components catalog
@@ -211,7 +211,7 @@ class PluginDialog(QDialog):
         name. This returns the filename.
         '''
         filename=str("/tmp/padder_inputfile_"+meshName+".med")
-        meshObject.ExportToMEDX( filename, 0, SMESH.MED_V2_2, 1, 1 )
+        meshObject.ExportMED(filename, False, True, True)
         return filename
 
     def clear(self):
@@ -294,7 +294,7 @@ class PluginDialog(QDialog):
         # And to create a list of the additional parameters.
         # WARN: the CORBA interface requires string values.
         meshJobParameterList=[]
-        for inputParameterKey in self.__dictInputParameters.keys():
+        for inputParameterKey in self.__dictInputParameters:
             value = self.__dictInputParameters[inputParameterKey]
             parameter = MESHJOB.MeshJobParameter(name=inputParameterKey,value=str(value))
             meshJobParameterList.append(parameter)
@@ -368,7 +368,7 @@ class PluginDialog(QDialog):
         medfilename = os.path.join(meshJobResults.results_dirname,
                                    meshJobResults.outputmesh_filename)
 
-        smesh.SetCurrentStudy(studyedit.getActiveStudy())
+        smesh.UpdateStudy()
         ([outputMesh], status) = smesh.CreateMeshesFromMED(medfilename)
 
         # By convention, the name of the output mesh in the study is
@@ -376,7 +376,7 @@ class PluginDialog(QDialog):
         meshname = 'padder_'+str(self.__jobid)
         smesh.SetName(outputMesh.GetMesh(), meshname)
         if salome.sg.hasDesktop():
-            salome.sg.updateObjBrowser(False)
+            salome.sg.updateObjBrowser()
 
         self.__ui.lblStatusBar.setText("Publication OK")
         self.__setGuiState(["CAN_SELECT"])
@@ -417,6 +417,3 @@ def TEST_PluginDialog():
 
 if __name__ == "__main__":
     TEST_PluginDialog()
-
-
-
index e9f8fa12e7fc88da76f641f2cca3515b21186974..99ee5bc967bf0ddce86f65d9decfd5a7bf56e864 100644 (file)
@@ -25,7 +25,7 @@ def runSpadderPlugin(context):
     from salome.kernel.uiexception import UiException
     try:
         dialog=plugindialog.getDialog()
-    except UiException, err:
+    except UiException as err:
         from qtsalome import QMessageBox
         QMessageBox.critical(None,"An error occurs during PADDER configuration",
                              err.getUIMessage())
index 3f705458f0dd146fa52c530edd53da1250a1ed96..4fe3da6d91f45bcf060e8cea72607de816a596fa 100644 (file)
@@ -172,14 +172,14 @@ meshJobParameterList.append(param)
 jobid = component.initialize(meshJobFileList, meshJobParameterList, configId)
 if jobid<0:
     msg = component.getLastErrorMessage()
-    print "ERR: %s"%msg
+    print("ERR: %s"%msg)
     sys.exit(1)
 
 created = False
 nbiter  = 0
 while not created:
     state = component.getState(jobid)
-    print "MeshJobManager ["+str(nbiter)+"] : state = "+str(state)
+    print("MeshJobManager ["+str(nbiter)+"] : state = "+str(state))
     if state == "CREATED":
         created = True
     time.sleep(0.5)
@@ -196,10 +196,10 @@ while not created:
 ok=component.start(jobid)
 if not ok:
     msg = component.getLastErrorMessage()
-    print "ERR: %s"%msg
+    print("ERR: %s"%msg)
     sys.exit(1)
 
-print "job started: %s"%ok
+print("job started: %s"%ok)
 
 #
 # This part illustrates how you can follow the execution of the job.
@@ -212,20 +212,20 @@ ended  = False
 nbiter = 0
 while not ended:
     state = component.getState(jobid)
-    print "MeshJobManager ["+str(nbiter)+"] : state = "+str(state)
+    print("MeshJobManager ["+str(nbiter)+"] : state = "+str(state))
     if state not in run_states:
         ended=True
     time.sleep(0.5)
     nbiter+=1
 
 if state not in end_states:
-    print "ERR: jobid = "+str(jobid)+" ended abnormally with state="+str(state)
+    print("ERR: jobid = "+str(jobid)+" ended abnormally with state="+str(state))
     msg = component.getLastErrorMessage()
-    print "ERR: %s"%msg
+    print("ERR: %s"%msg)
 else:
-    print "OK:  jobid = "+str(jobid)+" ended with state="+str(state)
+    print("OK:  jobid = "+str(jobid)+" ended with state="+str(state))
     meshJobResults = component.finalize(jobid)
-    print meshJobResults
+    print(meshJobResults)
     if meshJobResults.status is not True:
-        print "ERR: the results are not OK: %s"%component.getLastErrorMessage()
-        print "ERR: see log files in %s"%meshJobResults.results_dirname
+        print("ERR: the results are not OK: %s"%component.getLastErrorMessage())
+        print("ERR: see log files in %s"%meshJobResults.results_dirname)
index 65566eb4eb461ad04ff69e79980abbd7e19ae68a..efb8053b2acb3ebb6ea5cd75f3a13c49d652f2c3 100644 (file)
@@ -34,19 +34,19 @@ from salome.smesh import spadder
 spadder.loadSpadderCatalog()
 
 # Basic test
-print "Basic tests"
+print("Basic tests")
 c=salome.lcc.FindOrLoadComponent("FactoryServer","SPADDERPluginTester")
 z=c.demo(2.,3.)
 
 # Test of usage of KERNEL services from the test component
-print "Test of usage of KERNEL services from the test component"
+print("Test of usage of KERNEL services from the test component")
 c.testkernel()
 
 # Test of usage of SMESH engine from the test component
 # WARN: the SMESH engine must be loaded first
-print "Test of usage of SMESH engine from the test component"
+print("Test of usage of SMESH engine from the test component")
 import SMESH
 salome.lcc.FindOrLoadComponent("FactoryServer","SMESH")
-c.testsmesh(salome.myStudyId)
+c.testsmesh()
 
-print "Test completed : OK"
+print("Test completed : OK")
index 2b2ad4b603230b1fa0971875e803f60d2df603dd..8393e6a8b8117e7da6c4711964e569af217a4b36 100644 (file)
@@ -27,8 +27,8 @@ try:
   salome_pluginsmanager.AddFunction('PADDER mesher',
                                     'Create a mesh with PADDER',
                                     runSpadderPlugin)
-except:
-  salome_pluginsmanager.logger.info('ERROR: PADDER mesher plug-in is unavailable')
+except Exception as e:
+  salome_pluginsmanager.logger.info('ERROR: PADDER mesher plug-in is unavailable: {}'.format(e))
   pass
 
 try:
@@ -37,8 +37,8 @@ try:
                                     'Cut a tetrahedron mesh by a plane',
                                     MeshCut)
 
-except:
-  salome_pluginsmanager.logger.info('ERROR: MeshCut plug-in is unavailable')
+except Exception as e:
+  salome_pluginsmanager.logger.info('ERROR: MeshCut plug-in is unavailable: {}'.format(e))
   pass
 
 try:
@@ -46,8 +46,8 @@ try:
   salome_pluginsmanager.AddFunction('ReMesh with MGSurfOpt',
                                     'Run Yams',
                                     YamsLct)
-except:
-  salome_pluginsmanager.logger.info('ERROR: MGSurfOpt plug-in is unavailable')
+except Exception as e:
+  salome_pluginsmanager.logger.info('ERROR: MGSurfOpt plug-in is unavailable: {}'.format(e))
   pass
 
 try:
@@ -55,8 +55,8 @@ try:
   salome_pluginsmanager.AddFunction('ReMesh with MGCleaner',
                                     'Run MGCleaner',
                                     MGCleanerLct)
-except:
-  salome_pluginsmanager.logger.info('ERROR: MGCleaner plug-in is unavailable')
+except Exception as e:
+  salome_pluginsmanager.logger.info('ERROR: MGCleaner plug-in is unavailable: {}'.format(e))
   pass
 
 try:
@@ -64,16 +64,16 @@ try:
   salome_pluginsmanager.AddFunction('Meshed Pipe with a crack (blocFissure plugin)',
                                     'Create a mesh with blocFissure tool',
                                     fissureCoudeDlg)
-except:
-  salome_pluginsmanager.logger.info('ERROR: Meshed Pipe with a crack plug-in is unavailable')
+except Exception as e:
+  salome_pluginsmanager.logger.info('ERROR: Meshed Pipe with a crack plug-in is unavailable: {}'.format(e))
   pass
 try:
   from blocFissure.ihm.fissureGenerale_plugin import fissureGeneraleDlg
   salome_pluginsmanager.AddFunction('Add a crack in a mesh (blocFissure plugin)',
                                     'Insert a crack in an hexahedral mesh with blocFissure tool',
                                     fissureGeneraleDlg)
-except:
-  salome_pluginsmanager.logger.info('ERROR: Meshed Pipe with a crack plug-in is unavailable')
+except Exception as e:
+  salome_pluginsmanager.logger.info('ERROR: Meshed Pipe with a crack plug-in is unavailable: {}'.format(e))
   pass
 
 # ZCracks plugin requires the Zcracks tool
@@ -85,7 +85,7 @@ try:
     salome_pluginsmanager.AddFunction('Run Zcrack',
                                       'Run Zcrack',
                                       ZcracksLct)
-except:
+except Exception as e:
   #print 'probleme zcracks'
-  salome_pluginsmanager.logger.info('ERROR: Zcrack plug-in is unavailable')
+  salome_pluginsmanager.logger.info('ERROR: Zcrack plug-in is unavailable: {}'.format(e))
   pass