From 61a651c63a95e35c548b64cff049be5140e44ebd Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Fri, 3 May 2024 13:59:57 -0700 Subject: [PATCH 01/62] Fix uninitialized variable error in asset cache. PiperOrigin-RevId: 630491063 Change-Id: If5ac05beaee28b38975845682b92a9cb767f009b --- src/user/user_cache.cc | 33 +++++++++++++++++++------------- test/user/user_cache_test.cc | 37 ++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 13 deletions(-) diff --git a/src/user/user_cache.cc b/src/user/user_cache.cc index 6c97060f..4711a55c 100644 --- a/src/user/user_cache.cc +++ b/src/user/user_cache.cc @@ -187,16 +187,23 @@ const std::string* mjCCache::HasAsset(const std::string& id) { // is updated only if the timestamps disagree bool mjCCache::Insert(const mjCAsset& asset) { std::lock_guard lock(mutex_); + + // check if asset is too large to fit in the cache + std::size_t nbytes = asset.BytesCount(); const std::string& id = asset.Id(); + if ((size_ + nbytes > max_size_) && lookup_.find(id) == lookup_.end()) { + return false; + } + if (asset.References().size() != 1) { return false; } const std::string& filename = *(asset.References().begin()); auto [it, inserted] = lookup_.insert({id, asset}); + mjCAsset* asset_ptr = &(it->second); if (!inserted) { - mjCAsset* asset_ptr = &(it->second); - if (size_ - asset_ptr->BytesCount() + asset.BytesCount() > max_size_) { + if (size_ - asset_ptr->BytesCount() + nbytes > max_size_) { return false; } models_[filename].insert(asset_ptr); // add it for the model @@ -205,19 +212,16 @@ bool mjCCache::Insert(const mjCAsset& asset) { return true; } asset_ptr->SetTimestamp(asset.Timestamp()); - size_ = size_ - asset_ptr->BytesCount() + asset.BytesCount(); - asset_ptr->ReplaceBlocks(asset.Blocks(), asset.BytesCount()); + size_ = size_ - asset_ptr->BytesCount() + nbytes; + asset_ptr->ReplaceBlocks(asset.Blocks(), nbytes); return true; - } else if (size_ + asset.BytesCount() > max_size_) { - return false; } // new asset - mjCAsset* asset_ptr = &(it->second); asset_ptr->SetInsertNum(insert_num_++); entries_.insert(asset_ptr); models_[filename].insert(asset_ptr); - size_ += asset.BytesCount(); + size_ += nbytes; return true; } @@ -225,16 +229,22 @@ bool mjCCache::Insert(const mjCAsset& asset) { bool mjCCache::Insert(mjCAsset&& asset) { std::lock_guard lock(mutex_); + + // check if asset is too large to fit in the cache + std::size_t nbytes = asset.BytesCount(); const std::string& id = asset.Id(); + if ((size_ + nbytes > max_size_) && lookup_.find(id) == lookup_.end()) { + return false; + } + if (asset.References().size() != 1) { return false; } const std::string& filename = *(asset.References().begin()); - std::size_t nbytes = asset.BytesCount(); auto [it, inserted] = lookup_.try_emplace(id, std::move(asset)); + mjCAsset* asset_ptr = &(it->second); if (!inserted) { - mjCAsset* asset_ptr = &(it->second); if (size_ - asset_ptr->BytesCount() + nbytes > max_size_) { return false; } @@ -248,12 +258,9 @@ bool mjCCache::Insert(mjCAsset&& asset) { size_ = size_ - asset_ptr->BytesCount() + nbytes; asset_ptr->ReplaceBlocks(std::move(asset.blocks_), asset.nbytes_); return true; - } else if (size_ + nbytes > max_size_) { - return false; } // new asset - mjCAsset* asset_ptr = &(it->second); asset_ptr->SetInsertNum(insert_num_++); entries_.insert(asset_ptr); models_[filename].insert(asset_ptr); diff --git a/test/user/user_cache_test.cc b/test/user/user_cache_test.cc index ed8b3ff4..99c513ae 100644 --- a/test/user/user_cache_test.cc +++ b/test/user/user_cache_test.cc @@ -232,6 +232,43 @@ TEST(CacheTest, LimitTest2) { EXPECT_THAT(cache.HasAsset("bar.obj"), NotNull()); } +// stress test with large asset +TEST(CacheTest, LimitTest3) { + mjCCache cache(12); + std::vector v1 = {1, 2, 3}; + std::vector v2 = {1, 2, 3, 4, 5}; + mjCAsset asset1("file.xml", "foo.obj", "now"); + mjCAsset asset2("file.xml", "bar.obj", "now"); + asset1.AddVector("v", v1); + asset2.AddVector("v", v2); + + cache.Insert(std::move(asset1)); + cache.Insert(std::move(asset2)); + + // foo should still be in cache + EXPECT_THAT(cache.HasAsset("foo.obj"), NotNull()); + + // bar could not be inserted because it's too large + EXPECT_THAT(cache.HasAsset("bar.obj"), IsNull()); +} + +TEST(CacheTest, LimitTest4) { + mjCCache cache(12); + std::vector v = {1, 2, 3}; + mjCAsset asset1("file.xml", "foo.obj", "now"); + mjCAsset asset2("file.xml", "bar.obj", "now"); + asset1.AddVector("v", v); + asset2.AddVector("v", v); + + cache.Insert(std::move(asset1)); + cache.Insert(std::move(asset2)); + + EXPECT_THAT(cache.HasAsset("foo.obj"), NotNull()); + + // cache is full, so bar can't be inserted + EXPECT_THAT(cache.HasAsset("bar.obj"), IsNull()); +} + TEST(CacheTest, ResetAllTest) { mjCCache cache(kMaxSize); mjCAsset asset1("file1.xml", "foo.obj", "now"); From ac1af8e4611d76c3c77813dcdb62d0c8bc918534 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Sun, 5 May 2024 03:27:13 -0700 Subject: [PATCH 02/62] Remove `urdfeffort` attribute, parse URDF "effort" into `mjsJoint.actforcerange`. PiperOrigin-RevId: 630796429 Change-Id: I45363aca8afcce68bf48b2e8bdb556b39852f073 --- src/user/user_api.h | 1 - src/user/user_init.c | 1 - src/user/user_objects.cc | 12 +----------- src/xml/xml_urdf.cc | 25 ++++++++++++++++--------- 4 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/user/user_api.h b/src/user/user_api.h index e23a5cb2..e69c7602 100644 --- a/src/user/user_api.h +++ b/src/user/user_api.h @@ -244,7 +244,6 @@ typedef struct _mjsJoint { // joint specification // other int group; // group mjtByte actgravcomp; // is gravcomp force applied via actuators - double urdfeffort; // effort (urdf) mjDoubleVec userdata; // user data mjString info; // message appended to compiler errors } mjsJoint; diff --git a/src/user/user_init.c b/src/user/user_init.c index 02f8b8fa..b45c2dde 100644 --- a/src/user/user_init.c +++ b/src/user/user_init.c @@ -105,7 +105,6 @@ void mjs_defaultJoint(mjsJoint* joint) { joint->actfrclimited = mjLIMITED_AUTO; mj_defaultSolRefImp(joint->solref_limit, joint->solimp_limit); mj_defaultSolRefImp(joint->solref_friction, joint->solimp_friction); - joint->urdfeffort = -1; } diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index 18c5c61d..db747ab3 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -2411,8 +2411,7 @@ void mjCGeom::Compile(void) { if (type==mjGEOM_HFIELD) { size[0] = hfield->size[0]; size[1] = hfield->size[1]; - size[2] = 0.5*(0.5*hfield->size[2] + - hfield->size[3]); + size[2] = 0.25 * hfield->size[2] + 0.5 * hfield->size[3]; } else if (type==mjGEOM_MESH || type==mjGEOM_SDF) { const double* aamm = mesh->aamm(); size[0] = mju_max(fabs(aamm[0]), fabs(aamm[3])); @@ -5021,7 +5020,6 @@ void mjCActuator::CopyFromSpec() { void mjCActuator::ResolveReferences(const mjCModel* m) { - mjCJoint* pjnt; switch (trntype) { case mjTRN_JOINT: case mjTRN_JOINTINPARENT: @@ -5031,14 +5029,6 @@ void mjCActuator::ResolveReferences(const mjCModel* m) { throw mjCError(this, "unknown transmission target '%s' for actuator id = %d", target_.c_str(), id); } - pjnt = (mjCJoint*) ptarget; - - // apply urdfeffort - if (pjnt->spec.urdfeffort>0) { - forcerange[0] = -pjnt->spec.urdfeffort; - forcerange[1] = pjnt->spec.urdfeffort; - forcelimited = mjLIMITED_TRUE; - } break; case mjTRN_SLIDERCRANK: diff --git a/src/xml/xml_urdf.cc b/src/xml/xml_urdf.cc index e7d281ce..8001d93a 100644 --- a/src/xml/xml_urdf.cc +++ b/src/xml/xml_urdf.cc @@ -13,6 +13,7 @@ // limitations under the License. #include +#include #include #include #include @@ -488,17 +489,23 @@ void mjXURDF::Joint(XMLElement* joint_elem) { // limit element if ((elem = FindSubElem(joint_elem, "limit"))) { - ReadAttr(elem, "lower", 1, pjoint->range, text); - ReadAttr(elem, "upper", 1, pjoint->range+1, text); - bool is_limited = mjuu_defined(pjoint->range[0]) && - mjuu_defined(pjoint->range[1]) && - pjoint->range[0] < pjoint->range[1]; - pjoint->limited = is_limited ? mjLIMITED_TRUE : mjLIMITED_FALSE; + bool haslower = ReadAttr(elem, "lower", 1, pjoint->range, text); + bool hasupper = ReadAttr(elem, "upper", 1, pjoint->range+1, text); + + // handle range mis-specification, otherwise the default mjLIMITED_AUTO will do the right thing + bool bad_range = (haslower != hasupper) || pjoint->range[0] > pjoint->range[1]; + if (bad_range) { + pjoint->limited = mjLIMITED_FALSE; + } // ReadAttr(elem, "velocity", 1, &pjoint->maxvel, text); // no maxvel in MuJoCo - ReadAttr(elem, "effort", 1, &pjoint->urdfeffort, text); - } else { - pjoint->limited = mjLIMITED_FALSE; + double effort = 0; + ReadAttr(elem, "effort", 1, &effort, text); + effort = std::abs(effort); + if (effort > 0) { + pjoint->actfrcrange[0] = -effort; + pjoint->actfrcrange[1] = effort; + } } } From 62bc837b4cec7bf19d7b70cc27e3224813428971 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Sun, 5 May 2024 12:02:48 -0700 Subject: [PATCH 03/62] Rename remaining model to spec in xml/ PiperOrigin-RevId: 630855094 Change-Id: Ib921fe43b9b5a5a64867ef4c8c1cca217c27a5aa --- src/xml/xml.cc | 32 +++++------ src/xml/xml.h | 2 +- src/xml/xml_api.cc | 34 ++++++------ src/xml/xml_native_reader.cc | 100 +++++++++++++++++------------------ src/xml/xml_native_reader.h | 4 +- src/xml/xml_native_writer.cc | 6 +-- src/xml/xml_native_writer.h | 2 +- 7 files changed, 90 insertions(+), 90 deletions(-) diff --git a/src/xml/xml.cc b/src/xml/xml.cc index 064d52f3..b765f01d 100644 --- a/src/xml/xml.cc +++ b/src/xml/xml.cc @@ -100,17 +100,17 @@ class LocaleOverride { } // namespace // Main writer function - calls mjXWrite -std::string mjWriteXML(mjSpec* model, char* error, int error_sz) { +std::string mjWriteXML(mjSpec* spec, char* error, int error_sz) { LocaleOverride locale_override; // check for empty model - if (!model) { + if (!spec) { mjCopyError(error, "Cannot write empty model", error_sz); return ""; } mjXWriter writer; - writer.SetModel(model); + writer.SetModel(spec); return writer.Write(error, error_sz); } @@ -286,7 +286,7 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs, } // clear - mjSpec* model = nullptr; + mjSpec* spec = nullptr; if (error) { error[0] = '\0'; } @@ -345,14 +345,14 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs, } // create model, set filedir - model = mjs_createSpec(); + spec = mjs_createSpec(); const char* dir; int ndir = 0; mju_getResourceDir(resource, &dir, &ndir); if (dir != nullptr) { - mjs_setString(model->modelfiledir, std::string(dir, ndir).c_str()); + mjs_setString(spec->modelfiledir, std::string(dir, ndir).c_str()); } else { - mjs_setString(model->modelfiledir, ""); + mjs_setString(spec->modelfiledir, ""); } // close resource @@ -364,11 +364,11 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs, // find include elements, replace them with subtree from xml file std::unordered_set included = {filename}; mjXReader parser; - parser.SetModelFileDir(mjs_getString(model->modelfiledir)); - mjIncludeXML(parser, root, mjs_getString(model->modelfiledir), vfs, included); + parser.SetModelFileDir(mjs_getString(spec->modelfiledir)); + mjIncludeXML(parser, root, mjs_getString(spec->modelfiledir), vfs, included); // parse MuJoCo model - parser.SetModel(model); + parser.SetModel(spec); parser.Parse(root); } @@ -378,11 +378,11 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs, // set reasonable default for parsing a URDF // this is separate from the Parser to allow multiple URDFs to be loaded. - model->strippath = true; - model->fusestatic = true; - model->discardvisual = true; + spec->strippath = true; + spec->fusestatic = true; + spec->discardvisual = true; - parser.SetModel(model); + parser.SetModel(spec); parser.Parse(root); } @@ -394,11 +394,11 @@ mjSpec* mjParseXML(const char* filename, const mjVFS* vfs, // catch known errors catch (mjXError err) { mjCopyError(error, err.message, error_sz); - mjs_deleteSpec(model); + mjs_deleteSpec(spec); return nullptr; } - return model; + return spec; } diff --git a/src/xml/xml.h b/src/xml/xml.h index 71104a6c..10b5e4a3 100644 --- a/src/xml/xml.h +++ b/src/xml/xml.h @@ -24,7 +24,7 @@ // Top level API // Main writer function -std::string mjWriteXML(mjSpec* model, char* error, int error_sz); +std::string mjWriteXML(mjSpec* spec, char* error, int error_sz); // Main parser function MJAPI mjSpec* mjParseXML(const char* filename, const mjVFS* vfs, char* error, int error_sz); diff --git a/src/xml/xml_api.cc b/src/xml/xml_api.cc index a827ddef..c3cab08d 100644 --- a/src/xml/xml_api.cc +++ b/src/xml/xml_api.cc @@ -37,7 +37,7 @@ class GlobalModel { public: // deletes current model and takes ownership of model - void Set(mjSpec* model = nullptr); + void Set(mjSpec* spec = nullptr); // writes XML to string std::optional ToXML(const mjModel* m, char* error, @@ -46,30 +46,30 @@ class GlobalModel { private: // using raw pointers as GlobalModel needs to be trivially destructible std::mutex* mutex_ = new std::mutex(); - mjSpec* model_ = nullptr; + mjSpec* spec_ = nullptr; }; std::optional GlobalModel::ToXML(const mjModel* m, char* error, int error_sz) { std::lock_guard lock(*mutex_); - if (!model_) { + if (!spec_) { mjCopyError(error, "No XML model loaded", error_sz); return std::nullopt; } - mjs_copyBack(model_, m); - std::string result = mjWriteXML(model_, error, error_sz); + mjs_copyBack(spec_, m); + std::string result = mjWriteXML(spec_, error, error_sz); if (result.empty()) { return std::nullopt; } return result; } -void GlobalModel::Set(mjSpec* model) { +void GlobalModel::Set(mjSpec* spec) { std::lock_guard lock(*mutex_); - if (model_ != nullptr) { - mjs_deleteSpec(model_); + if (spec_ != nullptr) { + mjs_deleteSpec(spec_); } - model_ = model; + spec_ = spec; } @@ -91,29 +91,29 @@ mjModel* mj_loadXML(const char* filename, const mjVFS* vfs, char* error, int error_sz) { // parse new model - std::unique_ptr> model( + std::unique_ptr> spec( mjParseXML(filename, vfs, error, error_sz), - [](mjSpec* m) { mjs_deleteSpec(m); }); - if (!model) { + [](mjSpec* s) { mjs_deleteSpec(s); }); + if (!spec) { return nullptr; } // compile new model - mjModel* m = mjs_compile(model.get(), vfs); + mjModel* m = mjs_compile(spec.get(), vfs); if (!m) { - mjCopyError(error, mjs_getError(model.get()), error_sz); + mjCopyError(error, mjs_getError(spec.get()), error_sz); return nullptr; } // handle compile warning - if (mjs_isWarning(model.get())) { - mjCopyError(error, mjs_getError(model.get()), error_sz); + if (mjs_isWarning(spec.get())) { + mjCopyError(error, mjs_getError(spec.get()), error_sz); } else if (error) { error[0] = '\0'; } // clear old and assign new - GetGlobalModel().Set(model.release()); + GetGlobalModel().Set(spec.release()); return m; } diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index 1a12d3d8..da9f41e5 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -924,25 +924,25 @@ void mjXReader::Parse(XMLElement* root) { // compiler section parser -void mjXReader::Compiler(XMLElement* section, mjSpec* mod) { +void mjXReader::Compiler(XMLElement* section, mjSpec* spec) { string text; int n; // top-level attributes if (MapValue(section, "autolimits", &n, bool_map, 2)) { - mod->autolimits = (n==1); + spec->autolimits = (n==1); } - ReadAttr(section, "boundmass", 1, &mod->boundmass, text); - ReadAttr(section, "boundinertia", 1, &mod->boundinertia, text); - ReadAttr(section, "settotalmass", 1, &mod->settotalmass, text); + ReadAttr(section, "boundmass", 1, &spec->boundmass, text); + ReadAttr(section, "boundinertia", 1, &spec->boundinertia, text); + ReadAttr(section, "settotalmass", 1, &spec->settotalmass, text); if (MapValue(section, "balanceinertia", &n, bool_map, 2)) { - mod->balanceinertia = (n==1); + spec->balanceinertia = (n==1); } if (MapValue(section, "strippath", &n, bool_map, 2)) { - mod->strippath = (n==1); + spec->strippath = (n==1); } if (MapValue(section, "fitaabb", &n, bool_map, 2)) { - mod->fitaabb = (n==1); + spec->fitaabb = (n==1); } if (MapValue(section, "coordinate", &n, coordinate_map, 2)) { if (n==1) { @@ -951,48 +951,48 @@ void mjXReader::Compiler(XMLElement* section, mjSpec* mod) { } } if (MapValue(section, "angle", &n, angle_map, 2)) { - mod->degree = (n==1); + spec->degree = (n==1); } if (ReadAttrTxt(section, "eulerseq", text)) { if (text.size()!=3) { throw mjXError(section, "euler format must have length 3"); } - memcpy(mod->euler, text.c_str(), 3); + memcpy(spec->euler, text.c_str(), 3); } if (ReadAttrTxt(section, "assetdir", text)) { - mjs_setString(mod->meshdir, text.c_str()); - mjs_setString(mod->texturedir, text.c_str()); + mjs_setString(spec->meshdir, text.c_str()); + mjs_setString(spec->texturedir, text.c_str()); } // meshdir and texturedir take precedence over assetdir std::string meshdir, texturedir; if (ReadAttrTxt(section, "meshdir", meshdir)) { - mjs_setString(mod->meshdir, meshdir.c_str()); + mjs_setString(spec->meshdir, meshdir.c_str()); }; if (ReadAttrTxt(section, "texturedir", texturedir)) { - mjs_setString(mod->texturedir, texturedir.c_str()); + mjs_setString(spec->texturedir, texturedir.c_str()); } if (MapValue(section, "discardvisual", &n, bool_map, 2)) { - mod->discardvisual = (n==1); + spec->discardvisual = (n==1); } if (MapValue(section, "convexhull", &n, bool_map, 2)) { - mod->convexhull = (n==1); + spec->convexhull = (n==1); } if (MapValue(section, "usethread", &n, bool_map, 2)) { - mod->usethread = (n==1); + spec->usethread = (n==1); } if (MapValue(section, "fusestatic", &n, bool_map, 2)) { - mod->fusestatic = (n==1); + spec->fusestatic = (n==1); } - MapValue(section, "inertiafromgeom", &mod->inertiafromgeom, TFAuto_map, 3); - ReadAttr(section, "inertiagrouprange", 2, mod->inertiagrouprange, text); + MapValue(section, "inertiafromgeom", &spec->inertiafromgeom, TFAuto_map, 3); + ReadAttr(section, "inertiagrouprange", 2, spec->inertiagrouprange, text); if (MapValue(section, "exactmeshinertia", &n, bool_map, 2)){ - mod->exactmeshinertia = (n==1); + spec->exactmeshinertia = (n==1); } // lengthrange subelement XMLElement* elem = FindSubElem(section, "lengthrange"); if (elem) { - mjLROpt* opt = &(mod->LRopt); + mjLROpt* opt = &(spec->LRopt); // flags MapValue(elem, "mode", &opt->mode, lrmode_map, lrmode_sz); @@ -1110,7 +1110,7 @@ void mjXReader::Option(XMLElement* section, mjOption* opt) { // size section parser -void mjXReader::Size(XMLElement* section, mjSpec* mod) { +void mjXReader::Size(XMLElement* section, mjSpec* spec) { // read memory bytes { constexpr char err_msg[] = @@ -1199,69 +1199,69 @@ void mjXReader::Size(XMLElement* section, mjSpec* mod) { if (*memory / sizeof(mjtNum) > std::numeric_limits::max()) { throw mjXError(section, "%s", err_msg); } - mod->memory = *memory; + spec->memory = *memory; } } // read sizes - ReadAttrInt(section, "nuserdata", &mod->nuserdata); - ReadAttrInt(section, "nkey", &mod->nkey); + ReadAttrInt(section, "nuserdata", &spec->nuserdata); + ReadAttrInt(section, "nkey", &spec->nkey); - ReadAttrInt(section, "nconmax", &mod->nconmax); - if (mod->nconmax < -1) throw mjXError(section, "nconmax must be >= -1"); + ReadAttrInt(section, "nconmax", &spec->nconmax); + if (spec->nconmax < -1) throw mjXError(section, "nconmax must be >= -1"); { int nstack = -1; const bool has_nstack = ReadAttrInt(section, "nstack", &nstack); if (has_nstack) { - if (mod->nstack < -1) { + if (spec->nstack < -1) { throw mjXError(section, "nstack must be >= -1"); } - if (mod->memory != -1 && nstack != -1) { + if (spec->memory != -1 && nstack != -1) { throw mjXError(section, "either 'memory' and 'nstack' attribute can be specified, not both"); } - mod->nstack = nstack; + spec->nstack = nstack; } } { int njmax = -1; const bool has_njmax = ReadAttrInt(section, "njmax", &njmax); if (has_njmax) { - if (mod->njmax < -1) { + if (spec->njmax < -1) { throw mjXError(section, "njmax must be >= -1"); } - if (mod->memory != -1 && njmax != -1) { + if (spec->memory != -1 && njmax != -1) { throw mjXError(section, "either 'memory' and 'njmax' attribute can be specified, not both"); } - mod->njmax = njmax; + spec->njmax = njmax; } } - ReadAttrInt(section, "nuser_body", &mod->nuser_body); - if (mod->nuser_body < -1) throw mjXError(section, "nuser_body must be >= -1"); + ReadAttrInt(section, "nuser_body", &spec->nuser_body); + if (spec->nuser_body < -1) throw mjXError(section, "nuser_body must be >= -1"); - ReadAttrInt(section, "nuser_jnt", &mod->nuser_jnt); - if (mod->nuser_jnt < -1) throw mjXError(section, "nuser_jnt must be >= -1"); + ReadAttrInt(section, "nuser_jnt", &spec->nuser_jnt); + if (spec->nuser_jnt < -1) throw mjXError(section, "nuser_jnt must be >= -1"); - ReadAttrInt(section, "nuser_geom", &mod->nuser_geom); - if (mod->nuser_geom < -1) throw mjXError(section, "nuser_geom must be >= -1"); + ReadAttrInt(section, "nuser_geom", &spec->nuser_geom); + if (spec->nuser_geom < -1) throw mjXError(section, "nuser_geom must be >= -1"); - ReadAttrInt(section, "nuser_site", &mod->nuser_site); - if (mod->nuser_site < -1) throw mjXError(section, "nuser_site must be >= -1"); + ReadAttrInt(section, "nuser_site", &spec->nuser_site); + if (spec->nuser_site < -1) throw mjXError(section, "nuser_site must be >= -1"); - ReadAttrInt(section, "nuser_cam", &mod->nuser_cam); - if (mod->nuser_cam < -1) throw mjXError(section, "nuser_cam must be >= -1"); + ReadAttrInt(section, "nuser_cam", &spec->nuser_cam); + if (spec->nuser_cam < -1) throw mjXError(section, "nuser_cam must be >= -1"); - ReadAttrInt(section, "nuser_tendon", &mod->nuser_tendon); - if (mod->nuser_tendon < -1) throw mjXError(section, "nuser_tendon must be >= -1"); + ReadAttrInt(section, "nuser_tendon", &spec->nuser_tendon); + if (spec->nuser_tendon < -1) throw mjXError(section, "nuser_tendon must be >= -1"); - ReadAttrInt(section, "nuser_actuator", &mod->nuser_actuator); - if (mod->nuser_actuator < -1) throw mjXError(section, "nuser_actuator must be >= -1"); + ReadAttrInt(section, "nuser_actuator", &spec->nuser_actuator); + if (spec->nuser_actuator < -1) throw mjXError(section, "nuser_actuator must be >= -1"); - ReadAttrInt(section, "nuser_sensor", &mod->nuser_sensor); - if (mod->nuser_sensor < -1) throw mjXError(section, "nuser_sensor must be >= -1"); + ReadAttrInt(section, "nuser_sensor", &spec->nuser_sensor); + if (spec->nuser_sensor < -1) throw mjXError(section, "nuser_sensor must be >= -1"); } diff --git a/src/xml/xml_native_reader.h b/src/xml/xml_native_reader.h index c0b36748..69059900 100644 --- a/src/xml/xml_native_reader.h +++ b/src/xml/xml_native_reader.h @@ -42,9 +42,9 @@ class mjXReader : public mjXBase { void SetTextureDir(std::string texturedir); // XML sections embedded in all formats - static void Compiler(tinyxml2::XMLElement* section, mjSpec* mod); // compiler section + static void Compiler(tinyxml2::XMLElement* section, mjSpec* spec); // compiler section static void Option(tinyxml2::XMLElement* section, mjOption* opt); // option section - static void Size(tinyxml2::XMLElement* section, mjSpec* mod); // size section + static void Size(tinyxml2::XMLElement* section, mjSpec* spec); // size section private: // XML section specific to MJCF diff --git a/src/xml/xml_native_writer.cc b/src/xml/xml_native_writer.cc index a5505982..b24a6824 100644 --- a/src/xml/xml_native_writer.cc +++ b/src/xml/xml_native_writer.cc @@ -769,9 +769,9 @@ mjXWriter::mjXWriter(void) { // cast model -void mjXWriter::SetModel(mjSpec* modelspec) { - if (modelspec) { - model = (mjCModel*)modelspec->element; +void mjXWriter::SetModel(mjSpec* spec) { + if (spec) { + model = (mjCModel*)spec->element; } } diff --git a/src/xml/xml_native_writer.h b/src/xml/xml_native_writer.h index 5b8cd38d..f2881e18 100644 --- a/src/xml/xml_native_writer.h +++ b/src/xml/xml_native_writer.h @@ -27,7 +27,7 @@ class mjXWriter : public mjXBase { public: mjXWriter(); // constructor virtual ~mjXWriter() = default; // destructor - void SetModel(mjSpec* modelspec); + void SetModel(mjSpec* spec); // write XML document to string std::string Write(char *error, std::size_t error_sz); From 3e35eebbb9480709638011861dc3df8bf09f0f62 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Sun, 5 May 2024 12:08:57 -0700 Subject: [PATCH 04/62] Documentation updates: - Added a section on preventing slip in the modeling chapter. - Added more intuitive descriptions of friction coefficients in the Computation chapter. - Fixed some en-dashes and em-dashes. PiperOrigin-RevId: 630856003 Change-Id: I8e767e6c5a95affdeb72ef9bc424bdd18f58e4df --- doc/XMLreference.rst | 7 +-- doc/computation/index.rst | 45 +++++++++------- doc/modeling.rst | 108 +++++++++++++++++++++++++++++--------- doc/overview.rst | 9 ++-- 4 files changed, 117 insertions(+), 52 deletions(-) diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index f166401b..ea0b509c 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -301,8 +301,8 @@ adjust it properly through the XML. setting of solimp determines a single impedance value for all contact dimensions, which is then modulated by this attribute. Settings larger than 1 cause friction forces to be "harder" than normal forces, having the general effect of preventing slip, without increasing the actual friction coefficient. For pyramidal friction cones the situation is - more complex because the pyramidal approximation mixes normal and frictional dimensions within each basis vector; but - the overall effect of this attribute is qualitatively similar. + more complex because the pyramidal approximation mixes normal and frictional dimensions within each basis vector; it + is not recommended to use high impratio values with pyramidal cones. .. _option-gravity: @@ -2274,7 +2274,8 @@ helps clarify the role of bodies and geoms in MuJoCo. along both axes of the tangent plane. The second number is the torsional friction, acting around the contact normal. The third number is the rolling friction, acting around both axes of the tangent plane. The friction parameters for the contact pair are combined depending on the solmix and priority attributes, as explained in :ref:`Contact - parameters `. + parameters `. See the general :ref:`Contact` section for descriptions of the semantics of this + attribute. .. _body-geom-mass: diff --git a/doc/computation/index.rst b/doc/computation/index.rst index aebb5046..9512537d 100644 --- a/doc/computation/index.rst +++ b/doc/computation/index.rst @@ -29,7 +29,7 @@ Robots as well as humans interact with their environment primarily through physi importance of physics modeling in robotics, machine learning, animation, virtual reality, biomechanics and other fields, there is need for simulation models of contact dynamics that are both physically accurate and computationally efficient. One application of simulation models is to assess candidate estimation and control strategies before deploying them on -physical systems. Another application is to automate the design of those strategies - usually through numerical +physical systems. Another application is to automate the design of those strategies -- usually through numerical optimization that uses simulation in an inner loop. The latter application imposes an additional constraint: the objective function defined with respect to the contact dynamics should be amenable to numerical optimization. The contact model underlying MuJoCo has benefits along these and other relevant dimensions. In the following sections we @@ -50,7 +50,7 @@ for frictional contacts there are differences. If one sees convex models as approximations to LCP, the logical question to ask is how good that approximation is. However we do not see it that way. Instead, we see both LCP models and convex models as different approximations to physical reality, each with its strengths and weaknesses. The immediate consequence of dropping strict complementarity -and replacing it with a cost is that complementarity can be violated - meaning that force and velocity in the contact +and replacing it with a cost is that complementarity can be violated -- meaning that force and velocity in the contact normal direction can be simultaneously positive, and frictional forces may not be maximally dissipative. A related phenomenon is that the only way to initiate slip is to generate some motion in the normal direction. These effects are numerically small yet undesirable. This shortcoming however has little practical relevance, because it is premised on @@ -117,7 +117,7 @@ Inverse dynamics and optimization The objective of inverse dynamics is to recover the applied force and contact force given the position, velocity and acceleration of the multi-joint system. With hard contacts this computation is impossible. Consider pushing against a wall without moving. The contact force cannot be recovered from the kinematics, unless of course we consider the -material deformations - in which case we need a soft contact model. Inverse dynamics are trivial to compute with +material deformations -- in which case we need a soft contact model. Inverse dynamics are trivial to compute with spring-damper models of contact, because in that case the contact force is only a function of position and velocity and does not depend on applied force. But this is also the reason why spring-damper models are undesirable: ignoring the applied force means that an error is introduced at each time step, and so the simulator is perpetually in @@ -125,7 +125,7 @@ error-correction mode, in turn causing instabilities. In contrast, modern contac well as all internal forces) into account when computing the contact force/impulse. But this complicates inversion. The present contact model has a uniquely-defined inverse. The inverse dynamics are in fact easier to compute than the forward dynamics, because the optimization problem becomes diagonal and decomposes into independent optimization -problems over individual contacts - which can be solved analytically. +problems over individual contacts -- which can be solved analytically. Inverse dynamics play a key role in optimization algorithms arising in system identification, estimation and control. They make it possible to treat the sequence of positions (or a parametric representation thereof) as the object being @@ -269,7 +269,7 @@ activation state :math:`w_i` with its own dynamics. The control inputs for all a the force outputs are stored in ``mjData.actuator_force``, and the activation states (if any) are stored in ``mjData.act``. -These three components of an actuator - transmission, activation dynamics, and force generation - determine how the +These three components of an actuator -- transmission, activation dynamics, and force generation -- determine how the actuator works. The user can set them independently for maximum flexibility, or use :ref:`Actuator shortcuts ` which instantiate common actuator types. @@ -736,8 +736,8 @@ properties of quaternions, differentiation with respect to :math:`q` produces ve Among other applications, equality constraints can be used to create "loop joints", i.e., joints that cannot be modeled via the kinematic tree. Gaming engines represent all joints in this way. The same can be done in MuJoCo but is not -recommended - because it leads to both slower and less accurate simulation, effectively turning MuJoCo into a gaming -engine. The only reason to represent joints with equality constraints would be to model soft joints - which can be done +recommended -- because it leads to both slower and less accurate simulation, effectively turning MuJoCo into a gaming +engine. The only reason to represent joints with equality constraints would be to model soft joints -- which can be done via the constraint solver but not via the kinematic tree. There are five types of equality constraints described next. The numbers in the headings correspond to the @@ -846,7 +846,7 @@ at the limit, and negative if the limit is violated. The constraint becomes acti constraint force depends on distance through the solver :ref:`parameters ` described later. It is possible that both the lower and the upper limits for a given joint or tendon become active. In that case they are -both included in the list of scalar constraints, however this situation should be avoided - by increasing the range or +both included in the list of scalar constraints, however this situation should be avoided -- by increasing the range or decreasing the margin. In particular, avoid using narrow ranges to approximate an equality constraint. Instead use an explicit equality constraint, and if some slack is desired make the constraint soft by adjusting the solver parameters. This is more efficient computationally, not only because it involves one scalar constraint instead of two, but also @@ -900,7 +900,8 @@ model definition. * - ``condim`` - Dimensionality of the contact force/torque in the contact frame. |br| It can be 1, 3, 4 or 6. * - ``friction`` - - Vector of friction coefficients with dimensionality ``condim-1``. + - Vector of friction coefficients with dimensionality ``condim-1``. See below for semantics of the specific + coefficients. * - ``margin`` - The distance margin used to determine if the contact should be included in the global contact array ``mjData.contact``. @@ -921,19 +922,23 @@ as defined later. The ``condim`` parameter determines the contact type, and has similar to a joint or tendon limit, but is applied to the distance between two geoms. ``condim = 3`` : 3 for elliptic, 4 for pyramidal - This is a regular frictional contact, which can generate normal force as well as tangential friction force opposing - slip. + This is a regular frictional contact, which can generate normal force as well as a tangential friction force opposing + slip. An interpertation of this number is the slope of a surface above which a flat object will begin to slip + under gravity. ``condim = 4`` : 4 for elliptic, 6 for pyramidal In addition to normal and tangential force, this contact can generate torsional friction torque opposing rotation - around the contact normal. This is useful for modeling soft fingers, and can substantially improve the stability of - simulated grasping. Keep in mind that the torsional (as well as rolling) friction coefficients have different units - from the tangential friction coefficients. + around the contact normal, corresponding to a torque generated by a contacting surface patch. This is useful for + modeling soft fingers, and can substantially improve the stability of simulated grasping. Torsional friction + coefficients have **units of length** which can be interperted as the diameter of the surface contact patch. ``condim = 6`` : 6 for elliptic, 10 for pyramidal This contact can oppose motion in all relative degrees of freedom between the two geoms. In particular it adds - rolling friction, which can be used for example to stop a ball from rolling indefinitely on a plane. It can also be - used to model rolling friction between tires and a road, and in general to stabilize contacts. + rolling friction, which can be used for example to stop a ball from rolling indefinitely on a plane. Rolling friction + in the real world results from energy dissipated by local deformations near the contact point. It can be + used to model rolling friction between tires and a road, and in general to stabilize contacts. Rolling friction + coefficients also have **units of length** which can be interperted as the depth of the local deformation within + which energy is dissipated. Note that condim cannot be 2 or 5. This is because the two tangential directions and the two rolling directions are treated as pairs. The friction coefficients within a pair can be different though, which can be used to model skating @@ -1109,7 +1114,7 @@ and the dual of the dual of a cone is the cone itself. The pyramidal friction co self-dual, but the elliptic one is not. The Huber "norm" is based on the Huber function from robust statistics: it is a quadratic around zero, and transitions -smoothly to a linear function when the absolute value of the argument crosses a threshold - in this case given by the +smoothly to a linear function when the absolute value of the argument crosses a threshold -- in this case given by the friction loss parameters. Setting :math:`\eta = \infty` recovers the quadratic norm; we use this convention for all constraint forces that are not due to friction loss. This is another instance of reverse engineering: we want to obtain interval constraints on the friction loss forces, which is non-trivial because Lagrange duality usually yields @@ -1190,7 +1195,7 @@ the constraints. We are then left with an unconstrained optimization problem ove more efficient algorithms. The reduction is based on the fact that minimization over :math:`y` in :eq:`eq:primal` comes down to finding the nearest -point on the constraint set - which is either a plane or a cone, and can be done analytically. Substituting the result, +point on the constraint set -- which is either a plane or a cone, and can be done analytically. Substituting the result, we obtain the unconstrained problem .. math:: @@ -1296,7 +1301,7 @@ because the forward dynamics need all the quantities that enter into the inverse the analytical formula. This makes it possible to implement an automatic correctness check in MuJoCo. When the flag ``fwdinv`` in ``mjModel.opt.enableflags`` is on, the forward and inverse dynamics are automatically compared at the end of each time step, and the difference is recorded in ``mjData.solver_fwdinv``. Discrepancies indicate that the forward -solver - which is numerical and is usually terminated early - is not converging well. Of course the inverse dynamics are +solver---which is numerical and is usually terminated early---is not converging well. Of course the inverse dynamics are also useful on their own, without computing the forward dynamics first. .. _soAlgorithms: @@ -1348,7 +1353,7 @@ representations of the constraint Jacobian and related matrices. can be up to 5-dimensional given our contact model. Now we optimize the quadratic cost within this ellipsoid. This is an instance of quadratically constrained quadratic programming (QCQP). Since there is only one scalar constraint (however nonlinear it may be), the dual is a scalar optimization problem over the unknown Lagrange multiplier. We - solve this problem with Newton's method applied until convergence - which in practice takes less than 10 iterations, + solve this problem with Newton's method applied until convergence -- which in practice takes less than 10 iterations, and involves small matrices. Overall this algorithm has similar behavior to PGS for pyramidal cones, but it can handle elliptic cones without approximating them. It does more work per contact, however the contact dimensionality is smaller, and these two factors roughly balance each other. diff --git a/doc/modeling.rst b/doc/modeling.rst index 490affa8..27f2f6aa 100644 --- a/doc/modeling.rst +++ b/doc/modeling.rst @@ -31,7 +31,7 @@ Loading models As explained in :ref:`Model instances ` in the Overview chapter, MuJoCo models can be loaded from plain-text XML files in the MJCF or URDF formats, and then compiled into a low-level mjModel. Alternatively a previously saved -mjModel can be loaded directly from a binary MJB file - whose format is not documented but is essentially a copy of the +mjModel can be loaded directly from a binary MJB file -- whose format is not documented but is essentially a copy of the mjModel memory buffer. MJCF and URDF files are loaded with :ref:`mj_loadXML` while MJB files are loaded with :ref:`mj_loadModel`. @@ -45,8 +45,8 @@ XML file has a unique top-level element. This element must be :el:`mujoco` for M Compiling models ~~~~~~~~~~~~~~~~ -Once a high-level mjCModel is created - by loading an MJCF file or a URDF file, or programmatically when such -functionality becomes available - it is compiled into mjModel. Even though loading and compilation are presently +Once a high-level mjCModel is created---by loading an MJCF file or a URDF file, or programmatically when such +functionality becomes available---it is compiled into mjModel. Even though loading and compilation are presently combined in one step, compilation is independent of loading, meaning that the compiler works in the same way regardless of how mjCModel was created. Both the parser and the compiler perform extensive error checking, and abort when the first error is encountered. The resulting error messages contain the row and column number in the XML file, @@ -56,7 +56,7 @@ simulation step of the compiled model is performed and any runtime errors are in (temporarily) setting :ref:`mju_user_error` to point to a function that throws C++ exceptions; the user can implement similar error-interception functionality at runtime if desired. -The entire process of parsing and compilation is very fast - less than a second if the model does not contain large +The entire process of parsing and compilation is very fast -- less than a second if the model does not contain large meshes or actuator lengthranges that need to be computed via simulation. This makes it possible to design models interactively, by re-loading often and visualizing the changes. Note that the :ref:`simulate.cc ` code sample has a keyboard shortcut for re-loading the current model (Ctrl+L). @@ -166,7 +166,7 @@ which overrides the default settings. The cylinder specifies defaults class "mai "sub", even though the latter was specified in the childclass attribute of the body containing the geom. Now we describe the general rules. MuJoCo supports unlimited number of defaults classes, created by possibly nested -:ref:`default ` elements in the XML. Each class has a unique name - which is a required +:ref:`default ` elements in the XML. Each class has a unique name -- which is a required attribute except for the top-level class whose name is "main" if left undefined. Each class also has a complete collection of dummy model elements, with their attributes set as follows. When a defaults class is defined within another defaults class, the child automatically inherits all attribute values from the parent. It can then override @@ -248,7 +248,7 @@ specified by the user, the frame is not rotated. :at:`zaxis`: :at-val:`real(3), optional` The Z axis of the frame. The compiler finds the minimal rotation that maps the vector :math:`(0, 0, 1)` into the vector specified here. This determines the X and Y axes of the frame implicitly. This is useful for geoms with - rotational symmetry around the Z axis, as well as lights - which are oriented along the Z axis of their frame. + rotational symmetry around the Z axis, as well as lights -- which are oriented along the Z axis of their frame. .. _CSolver: @@ -448,33 +448,36 @@ there is nothing to do, but what if their parameters are different? In that case :at:`solmix` and :at:`priority` to decide how to combine them. The combination rules for each contact parameter are as follows: -condim +**condim** If one of the two geoms has higher priority, its condim is used. If both geoms have the same priority, the maximum of the two condims is used. In this way a frictionless geom and a frictional geom form a frictional contact, unless the frictionless geom has higher priority. The latter is desirable in particle systems for example, where we may not want the particles to stick to any objects. -friction +**friction** Recall that contacts can have up to 5 friction coefficients: two tangential, one torsional, two rolling. Each contact in mjData.contact actually has all 5 of them, even if condim is less than 6 and not all coefficients are used. In contrast, geoms have only 3 friction coefficients: tangential (same for both axes), torsional, rolling (same for both axes). Each of these 3D vectors of friction coefficients is expanded into a 5D vector of friction coefficients by - replicating the tangetial and rolling components. The contact friction coefficients are then computed according to - the following rule: if one of the two geoms has higher priority, its friction coefficients are used. Otherwise the - element-wise maximum of each friction coefficient over the two geoms is used. The rationale is similar to taking the - maximum over condim: we want the more frictional geom to win. + replicating the tangetial and rolling components. See the :ref:`Contact` section in the Computation + chapter for an intuitive description of the semantics of tangential, torsional and rolling coefficients. + + The contact friction coefficients are then computed according to the following rule: if one of the two geoms has + higher priority, its friction coefficients are used. Otherwise the **element-wise maximum** of each friction + coefficient over the two geoms is used. + The reason for having 5 coefficients per contact and only 3 per geom is as follows. For a contact pair, we want to allow the most flexible model our solver can handle. As mentioned earlier, anisotropic friction can be exploited to model effects such as skating. This however requires knowing how the two axes of the contact tangent plane are oriented. For a predefined contact pair we know the two geom types in advance, and the corresponding collision - function always generates contact frames oriented in the same way - which we do not describe here but it can be seen + function always generates contact frames oriented in the same way -- which we do not describe here but it can be seen in the visualizer. For individual geoms however, we do not know which other geoms they might collide with and what their geom types might be, so there is no way to know how the contact tangent plane will be oriented when specifying an individual geom. This is why MuJoCo does not allow anisotropic friction in the individual geom specifications, but only in the explicit contact pair specifications. -margin, gap +**margin**, **gap** The maximum of the two geom margins (or gaps respectively) is used. The geom priority is ignored here, because the margin and gap are distance properties and a one-sided specification makes little sense. -solref, solimp +**solref**, **solimp** If one of the two geoms has higher priority, its solref and solimp parameters are used. If both geoms have the same priority, the weighted average is used. The weights are proportional to the solmix attributes, i.e., weight1 = solmix1 / (solmix1 + solmix2) and similarly for weight2. There is one important exception to this weighted averaging @@ -493,7 +496,7 @@ facilitate this process, we provide a mechanism to override some of the solver p the actual model. Once the override is disabled, the simulation reverts to the parameters specified in the model. This mechanism can also be used to implement continuation methods in the context of numerical optimization (such as optimal control or state estimation). This is done by allowing contacts to act from a distance in the early phases of -optimization - so as to help the optimizer find a gradient and get close to a good solution - and reducing this effect +optimization---so as to help the optimizer find a gradient and get close to a good solution---and reducing this effect later to make the final solution physically realistic. The relevant settings here are the :at:`override` attribute of :ref:`flag ` which @@ -556,12 +559,12 @@ general guidelines and observations: threshold is better defined in terms of number of active constraints, which is model and behavior dependent. - The choice between pyramidal and elliptic friction cones is a modeling choice rather than an algorithmic choice, i.e., it leads to a different optimization problem solved with the same algorithms. Elliptic cones correspond more - closely to physical reality. However pyramidal cones can improve the performance of the algorithms - but not + closely to physical reality. However pyramidal cones can improve the performance of the algorithms -- but not necessarily. While the default is pyramidal, we recommend trying the elliptic cones. When contact slip is a problem, the best way to suppress it is to use elliptic cones, large impratio, and the Newton algorithm with very small tolerance. If that is not sufficient, enable the Noslip solver. - The Newton algorithm is the best choice for most models. It has quadratic convergence near the global minimum and - gets there in surprisingly few iterations - usually around 5, and rarely more than 20. It should be used with + gets there in surprisingly few iterations -- usually around 5, and rarely more than 20. It should be used with aggressive tolerance values, say 1e-10, because it is capable of achieving high accuracy without added delay (due to quadratic convergence at the end). The only situation where we have seen it slow down are large models with elliptic cones and many slipping contacts. In that regime the Hessian factorization needs a lot of updates. It may also slow @@ -1314,7 +1317,7 @@ probe away (which is possible because the probe is a mocap body which can move i we can see the indentation made by the probe, and the resulting deformation in the rest of the body. By changing the solref and solimp attributes of the equality constraints that hold the soft object together, one can adjust the behavior of the system making it softer or harder, damped or springy, etc. Note that box, cylinder and ellipsoid objects do not -involve long kinematic chains, and can be simulated at large timesteps - similar to particle and grid, and unlike rope +involve long kinematic chains, and can be simulated at large timesteps -- similar to particle and grid, and unlike rope and cloth. .. _CDeformable: @@ -1403,7 +1406,7 @@ self-collisions; see XML reference. In case of 3D flexes made of tetrahedra, it may be useful to examine how the flex is "triangulated" internally. We have a special visualization mode that peels off the outer layers. Below is an example with the Stanford Bunny. Note how it has smaller tetrahedra on the outside and larger ones on the inside. This mesh design makes sense, because we want the -collision surface to be accurate, but on the inside we just need soft material properties - which require less spatial +collision surface to be accurate, but on the inside we just need soft material properties -- which require less spatial resolution. In order to convert a surface mesh to a tetrahedral mesh, we recommend open tools like the `fTetWild library `__. @@ -1436,7 +1439,7 @@ The flexibility of repeated MCJF sections comes at a price: global settings that the :at:`angle` attribute of :ref:`compiler ` for example, can be defined multiple times. MuJoCo allows this, and uses the last definition encountered in the composite model, after all include elements have been processed. So if model A is defined in degrees and model B is defined in radians, and A is included in B after -the :el:`compiler` element in B, the entire composite model will be treated as if it was defined in degrees - leading +the :el:`compiler` element in B, the entire composite model will be treated as if it was defined in degrees -- leading to undesirable consequences in this case. The user has to make sure that models included in each other are compatible in this sense; local vs. global coordinates is another compatibility requirement. @@ -1469,7 +1472,7 @@ unless there is a specific reason to define it. There can be several such reason is useful for custom computations involving a model element that is identified by its name in the XML (as opposed to relying on a fixed index which can change when the model is edited). - The model file could in principle become more readable by naming certain elements. Keep in mind however that XML - itself has a commenting mechanism, and that mechanism is more suitable for achieving readability - especially since + itself has a commenting mechanism, and that mechanism is more suitable for achieving readability -- especially since most text editors provide syntax highlighting which detects XML comments. .. _CURDF: @@ -1620,8 +1623,8 @@ is not always obvious, so it may be useful to have it spelled out. Performance tuning ~~~~~~~~~~~~~~~~~~ -Here is a list of steps one can take in order to maximize simulation throughput. All of the recommendations below -involve some tweaking. It is recommended that these be carried out in interactive fashion while looking at the +Below is a list of steps one can take in order to maximize simulation throughput. All of the recommendations +involve parameter tweaking. It is recommended that these be carried out in interactive fashion while looking at the :ref:`simulate` utility's built-in profiler. A detailed and sometimes more useful profile is also reported by the :ref:`testspeed` utility. When embarking on the more elaborate steps below, target the most expensive pipeline component reported by the profiler. Note that some of these are subtly different for MJX, see @@ -1663,6 +1666,61 @@ dedicated section :ref:`therein`. - If replacing collision meshes with primitives is not feasible, decimate the meshes as much as possible. Open source tools like trimesh, Blender, MeshLab and CoACD are very useful in this regard. +.. _CSlippage: + +Preventing slip +~~~~~~~~~~~~~~~ + +Below is a list of steps one can take in order to diagnose and solve contact slippage, which is especially problematic +in manipulation tasks. In order to diagnose slippage, it is recommended to use the :ref:`simulate` utility's +built in visualization options to inspect contacts and contact forces. It is often helpful to tweak the visual size of +contacts and forces (using the global :ref:`meansize` or the specific +:ref:`contactwidth`, :ref:`contactheight` and +:ref:`forcewidth` attributes) and the :ref:`force scaling` attribute, to +better visualize and understand the contact configuration and resulting forces. + +**Slip-preventing contact forces are outside the friction cone** + This implies that the physics cannot prevent slip, even in principle. This occurs when: + + a. *The normal force is too small.* Ensure that the maximum force that can be applied by the gripper mutiplied by + the sliding friction coefficient is significantly greater than the weight of the object. + b. *The sliding friction coefficient is too low.* Increase the sliding :ref:`friction` + coefficient. + c. *Torsional friction is insufficient to apply the required torques.* Increase :ref:`condim` to + 4 or 6 and choose appropriate friction coefficients. + **condim 4** enables torsional friction, preventing rotation around the normal. + **condim 6** also enables rolling friction, preventing rotation around the tangential directions. + See the :ref:`Contact` section for details and the specifc semantics of these coefficients. + +**The geometry does not support the required forces or torques** + This is a common real-world problem, solved by improved design of grippers and handles. + + a. Improve the geometry of the contacting geoms in order to add more contact points, possibly with non-flat + geometry (e.g., bumps), so slippage is prevented by the normal force and not only frictional components. + b. If contacts are between flat surfaces, try enabling the :ref:`multiccd` flag, which allows + the detector to find more contacts than the single contact returned by the convex-convex collider. + +**High-frequency vibration** + High-frequency, low-amplitude vibrations are also a real-world problem in many industrial settings, but unlike in + simulation, in the real world they are audible. Such vibration is often caused by controllers with very + high gains and sometimes by stick-slip feedback from contacts or joints, resonating with the eigen-modes of the + mechanism. The easist way to diagnose such vibration is to visualize contact forces in + :ref:`simulate`. The solution is usually to reduce the :ref:`timestep` and/or add + some :ref:`armature` to the relevant joints. Another reason for vibration is feedback from + explicit damping. Use the implicit or implicitfast integrators, as documented in the + :ref:`Numerical Integration` section. + +**Slow slippage** + Unlike the above problems which lead to fast slippage, slow, gradual slippage is a property of MuJoCo's contact + model by design, since without it the inverse dynamics are not defined. This is discussed in detail in the + :ref:`softness and slip` clarification. This type of slippage can be addressed in two ways. + + a. Increase the :ref:`impration` parameter. This will reduce (but not entirely prevent) slow + slippage. Note that high impratio values work well only with :ref:`elliptic cones`. + b. Enable the noslip solver by increasing :ref:`noslip_iterations` to a positive integer. + A small number (1, 2 or 3) is usually sufficient. The noslip post-processing solver will entirely prevent slip, + at the cost of making inverse dynamics ill-defined and additional computational cost. + .. _CBacklash: Backlash @@ -1710,7 +1768,7 @@ destabilize the system because of integration errors. This was already discussed The standard approach to reducing integration errors is to reduce the timestep or use the Runge-Kutta integrator, both of which are effective but slow down the simulation. An alternative approach is to put all damping in the joints and -use the Euler integrator. In that case damping forces are integrated implicitly - meaning that the inertia matrix is +use the Euler integrator. In that case damping forces are integrated implicitly -- meaning that the inertia matrix is adjusted and re-factorized internally as part of the velocity update, in a way transparent to the user. Implicit integration is much more stable than explicit integration, allowing substantially larger time steps. Note that the Runge-Kutta integrator is explicit, and so is Euler except for the way it treats damping forces. Ideally we would have diff --git a/doc/overview.rst b/doc/overview.rst index 7c3c574a..fff37970 100644 --- a/doc/overview.rst +++ b/doc/overview.rst @@ -56,7 +56,7 @@ Soft, convex and analytically-invertible contact dynamics equality constraints. Tendon geometry - MuJoCo can model the 3D geometry of tendons - which are minimum-path-length strings obeying wrapping and via-point + MuJoCo can model the 3D geometry of tendons -- which are minimum-path-length strings obeying wrapping and via-point constraints. The mechanism is similar to the one in OpenSim but implements a more restricted, closed-form set of wrapping options to speed up computation. It also offers robotics-specific structures such as pulleys and coupled degrees of freedom. Tendons can be used for actuation as well as to impose inequality or equality constraints on the @@ -635,7 +635,7 @@ store results from custom computations there; recall that everything that change Custom text ^^^^^^^^^^^ -Custom text fields can be saved in the model. They can be used in custom computations - either to specify keyword +Custom text fields can be saved in the model. They can be used in custom computations -- either to specify keyword commands, or to provide some other textual information. Do not use them for comments though; there is no benefit to saving comments in a compiled model. XML has its own commenting mechanism (ignored by MuJoCo's parser and compiler) which is more suitable. @@ -788,7 +788,8 @@ For situations where it is desirable to suppress slip completely, there is a sec the main solver. It updates the contact forces in friction dimensions by disregarding constraint softness. When this option is used however, MuJoCo is no longer solving the convex optimization problem it was designed to solve, and the simulation may become less robust. Thus using the Newton solver with elliptic friction cones and large value of -``impratio`` is the recommended way of reducing slip. +``impratio`` is the recommended way of reducing slip. For more detailed recommendations, see +:ref:`preventing slip` in the Modeling chapter. .. _TypeNameId: @@ -847,7 +848,7 @@ Now the differences. Bodies are used to construct the kinematic tree and are con geoms and sites. Bodies have a spatial frame, inertial properties, but no properties related to appearance or collision geometry. This is because such properties do not affect the physics (except for contacts of course, but these are handled separately). If you have seen diagrams of kinematic trees in robotics textbooks, the bodies are usually drawn as -amorphous shapes - to make the point that their actual shape is irrelevant to the physics. +amorphous shapes -- to make the point that their actual shape is irrelevant to the physics. Geoms (short for geometric primitive) are used to specify appearance and collision geometry. Each geom belongs to a body and is rigidly attached to that body. Multiple geoms can be attached to the same body. This is particularly useful in From 93b57c1421805e5e537aa52d0ffbca983a45b4ed Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Mon, 6 May 2024 14:39:53 -0700 Subject: [PATCH 05/62] Update Python documentation. PiperOrigin-RevId: 631189628 Change-Id: I17d0fbe476fc14bbad525a302f588bf773a2244b --- doc/XMLreference.rst | 2 + doc/changelog.rst | 2 +- doc/conf.py | 2 +- doc/python.rst | 245 +++++++++++++++++++++++++------------------ 4 files changed, 149 insertions(+), 102 deletions(-) diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index ea0b509c..27a911b8 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -1088,6 +1088,8 @@ specified with OBJ files and MSH files, as well as explicitly in the XML with th STL files. These mechanism cannot be mixed. So if you have an STL mesh, the only way to add texture coordinates to it is to convert to one of the other supported formats. +.. _legacy-msh-docs: + MSH file format The binary MSH file starts with 4 integers specifying the number of vertex positions (nvertex), vertex normals (nnormal), vertex texture coordinates (ntexcoord), and vertex indices making up the faces (nface), followed by the diff --git a/doc/changelog.rst b/doc/changelog.rst index 37fa8565..441c036d 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -193,7 +193,7 @@ MJX Python bindings ^^^^^^^^^^^^^^^ -12. Improved the implementation of the :ref:`rollout` module. Note the changes below are breaking, dependent +12. Improved the implementation of the :ref:`rollout` module. Note the changes below are breaking, dependent code will require modification. - Uses :ref:`mjSTATE_FULLPHYSICS` as state spec, enabling divergence detection by inspecting time. diff --git a/doc/conf.py b/doc/conf.py index d9ca5bfb..e41542fa 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -111,7 +111,7 @@ html_logo = 'images/banner.svg' SHARED_CSS_VARIABLES = { 'admonition-font-size': '1rem', 'admonition-title-font-size': '1rem', - 'sidebar-item-font-size': '115%', + 'sidebar-item-font-size': '130%', } # font-stack--monospace used in code blocks, Inconsolata fits in 100 chars. diff --git a/doc/python.rst b/doc/python.rst index 5dff8d11..639c73e4 100644 --- a/doc/python.rst +++ b/doc/python.rst @@ -1,8 +1,8 @@ -=============== -Python Bindings -=============== +====== +Python +====== -Starting with version 2.1.2, MuJoCo comes with native Python bindings that are developed in C++ using +MuJoCo comes with native Python bindings that are developed in C++ using `pybind11 `__. The Python API is consistent with the underlying C API. This leads to some non-Pythonic code structure (e.g. order of function arguments), but it has the benefit that the :doc:`API documentation` is applicable to both languages. @@ -12,23 +12,22 @@ low-level bindings that are meant to give as close to a direct access to the MuJ order to provide an API and semantics that developers would expect in a typical Python library, the bindings deliberately diverge from the raw MuJoCo API in a number of places, which are documented throughout this page. -Google DeepMind’s `dm_control `__ reinforcement learning library (which -prior to version 1.0.0 implemented its own MuJoCo bindings based on ``ctypes``) has been updated to depend on the -``mujoco`` package and continues to be supported by Google DeepMind. Changes in dm_control should be largely transparent -to users of previous versions, however code that depended directly on its low-level API may need to be updated. Consult -the `migration guide `__ for detail. +Google DeepMind’s `dm_control `__ reinforcement learning library depends +on the ``mujoco`` package and continues to be supported by Google DeepMind. For code that depends on dm_control versions +prior to 1.0.0, consult the +`migration guide `__. -For mujoco-py users, we include :ref:`notes ` below to aid migration. +For mujoco-py users, we include :ref:`migration notes ` below. .. _PyNotebook: Tutorial notebook ================= -A MuJoCo tutorial using the Python bindings is available here: |colab| +A MuJoCo tutorial using the Python bindings is available here: |mjcolab| -.. |colab| image:: https://colab.research.google.com/assets/colab-badge.svg - :target: https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/tutorial.ipynb +.. |mjcolab| image:: https://colab.research.google.com/assets/colab-badge.svg + :target: https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/tutorial.ipynb .. _PyInstallation: @@ -55,8 +54,8 @@ use cases are supported: .. _PyViewerApp: -Standalone application ----------------------- +Standalone app +-------------- - ``python -m mujoco.viewer`` launches an empty visualization session, where a model can be loaded by drag-and-drop. - ``python -m mujoco.viewer --mjcf=/path/to/some/mjcf.xml`` launches a visualization session for the specified @@ -466,90 +465,6 @@ Alternatively, if a callback is implemented in a native dynamic library, users c it to ``mujoco.set_mjcb_foo``. The bindings will then retrieve the underlying function pointer and assign it directly to the raw callback pointer, and the GIL will **not** be acquired each time the callback is entered. -.. _PySample: - -Open-loop rollouts -================== - -We include a code sample showing how to add additional C/C++ functionality, exposed as a Python module via pybind11. The -sample, implemented in `rollout.cc `__ -and wrapped in `rollout.py `__, -implements a common use case where tight loops implemented outside of Python are beneficial: rolling out a trajectory -(i.e., calling ``mj_step()`` in a loop), given an intial state and sequence of controls, and returning subsequent states -and sensor values. The basic usage form is - -.. code-block:: python - - state, sensordata = rollout.rollout(model, data, initial_state, control) - -``initial_state`` is a ``nroll x nstate`` array, with ``nroll`` initial states of size ``nstate``, where -``nstate = mj_stateSize(model, mjtState.mjSTATE_FULLPHYSICS)`` is the size of the -:ref:`full physics state`. ``control`` is a ``nroll x nstep x ncontrol`` array of controls. Controls are -by default the ``mjModel.nu`` standard actuators, but any combination of :ref:`user input` arrays can be -specified by passing an optional ``control_spec`` bitflag. - -If a rollout diverges, the current state and sensor values are used to fill the remainder of the trajectory. -Therefore, non-increasing time values can be used to detect diverged rollouts. - -The ``rollout`` function is designed to be completely stateless, so all inputs of the stepping pipeline are set and any -values already present in the given ``MjData`` instance will have no effect on the output. - -Since the Global Interpreter Lock can be released, this function can be efficiently threaded using Python threads. See -the ``test_threading`` function in -`rollout_test.py `__ for an example -of threaded operation (and more generally for usage examples). - -.. _PyMjpy_migration: - -Migration from mujoco-py -======================== - -In mujoco-py, the main entry point is the `MjSim `_ -class. Users construct a stateful ``MjSim`` instance from an MJCF model (similar to ``dm_control.Physics``), and this -instance holds references to an ``mjModel`` instance and its associated ``mjData``. In contrast, the MuJoCo Python -bindings (``mujoco``) take a more low-level approach, as explained above: following the design principle of the C -library, the ``mujoco`` module itself is stateless, and merely wraps the underlying native structs and functions. - -While a complete survey of mujoco-py is beyond the scope of this document, we offer below implementation notes for a -non-exhaustive list of specific mujoco-py features: - -``mujoco_py.load_model_from_xml(bstring)`` - This factory function constructs a stateful ``MjSim`` instance. When using ``mujoco``, the user should call the - factory function ``mujoco.MjModel.from_xml_*`` as described :ref:`above `. The user is then responsible - for holding the resulting ``MjModel`` struct instance and explicitly generating the corresponding ``MjData`` by - calling ``mujoco.MjData(model)``. - -``sim.reset()``, ``sim.forward()``, ``sim.step()`` - Here as above, ``mujoco`` users needs to call the underlying library functions, passing instances of ``MjModel`` and - ``MjData``: :ref:`mujoco.mj_resetData(model, data) `, :ref:`mujoco.mj_forward(model, data) - `, and :ref:`mujoco.mj_step(model, data) `. - -``sim.get_state()``, ``sim.set_state(state)``, ``sim.get_flattened_state()``, ``sim.set_state_from_flattened(state)`` - The MuJoCo library’s computation is deterministic given a specific input, as explained in the :ref:`Programming - section `. mujoco-py implements methods for getting and setting some of the relevant fields (and - similarly ``dm_control.Physics`` offers methods that correspond to the flattened case). ``mujoco`` do not offer such - abstraction, and the user is expected to get/set the values of the relevant fields explicitly. - -``sim.model.get_joint_qvel_addr(joint_name)`` - This is a convenience method in mujoco-py that returns a list of contiguous indices corresponding to this joint. The - list starts from ``model.jnt_qposadr[joint_index]``, and its length depends on the joint type. ``mujoco`` doesn't - offer this functionality, but this list can be easily constructed using ``model.jnt_qposadr[joint_index]`` and - ``xrange``. - -``sim.model.*_name2id(name)`` - mujoco-py creates dicts in ``MjSim`` that allow for efficient lookup of indices for objects of different types: - ``site_name2id``, ``body_name2id`` etc. These functions replace the function :ref:`mujoco.mj_name2id(model, - type_enum, name) `. ``mujoco`` offers a different approach for using entity names – :ref:`named access - `, as well as access to the native :ref:`mj_name2id`. - -``sim.save(fstream, format_name)`` - This is the one context in which the MuJoCo library (and therefore also ``mujoco``) is stateful: it holds a copy in - memory of the last XML that was compiled, which is used in :ref:`mujoco.mj_saveLastXML(fname) `. Note - that mujoco-py’s implementation has a convenient extra feature, whereby the pose (as determined by ``sim.data``’s - state) is transformed to a keyframe that’s added to the model before saving. This extra feature is not currently - available in ``mujoco``. - - .. _PyBuild: Building from source @@ -609,7 +524,9 @@ Building from source .. code-block:: shell cd dist - MUJOCO_PATH=/PATH/TO/MUJOCO MUJOCO_PLUGIN_PATH=/PATH/TO/MUJOCO_PLUGIN pip install mujoco-x.y.z.tar.gz + MUJOCO_PATH=/PATH/TO/MUJOCO + MUJOCO_PLUGIN_PATH=/PATH/TO/MUJOCO_PLUGIN + pip install mujoco-x.y.z.tar.gz The Python bindings should now be installed! To check that they've been successfully installed, ``cd`` outside of the ``mujoco`` directory and run @@ -619,3 +536,131 @@ successfully installed, ``cd`` outside of the ``mujoco`` directory and run As a reference, a working build configuration can be found in MuJoCo's `continuous integration setup `_ on GitHub. + + +.. _PyModule: + +Modules +======= + +The ``mujoco`` package contains two sub-modules: ``mujoco.rollout`` and ``mujoco.minimize`` + +.. _PyRollout: + +rollout +------- + +``mujoco.rollout`` shows how to add additional C/C++ functionality, exposed as a Python module via pybind11. It is +implemented in `rollout.cc `__ +and wrapped in `rollout.py `__. The module +performs a common functionality where tight loops implemented outside of Python are beneficial: rolling out a trajectory +(i.e., calling :ref:`mj_step` in a loop), given an intial state and sequence of controls, and returning subsequent +states and sensor values. The basic usage form is + +.. code-block:: python + + state, sensordata = rollout.rollout(model, data, initial_state, control) + +``initial_state`` is an ``nroll x nstate`` array, with ``nroll`` initial states of size ``nstate``, where +``nstate = mj_stateSize(model, mjtState.mjSTATE_FULLPHYSICS)`` is the size of the +:ref:`full physics state`. ``control`` is a ``nroll x nstep x ncontrol`` array of controls. Controls are +by default the ``mjModel.nu`` standard actuators, but any combination of :ref:`user input` arrays can be +specified by passing an optional ``control_spec`` bitflag. + +If a rollout diverges, the current state and sensor values are used to fill the remainder of the trajectory. +Therefore, non-increasing time values can be used to detect diverged rollouts. + +The ``rollout`` function is designed to be completely stateless, so all inputs of the stepping pipeline are set and any +values already present in the given ``MjData`` instance will have no effect on the output. + +Since the Global Interpreter Lock can be released, this function can be efficiently threaded using Python threads. See +the ``test_threading`` function in +`rollout_test.py `__ for an example +of threaded operation (and more generally for usage examples). + +.. _PyMinimize: + +minimize +-------- + +This module contains optimization-related utilities. + +The ``minimize.least_squares()`` function implements a nonlinear Least Squares optimizer solving sequential +Quadratic Programs with :ref:`mju_boxQP`. It is documented in the associated notebook: |lscolab| + +.. |lscolab| image:: https://colab.research.google.com/assets/colab-badge.svg + :target: https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/least_squares.ipynb + + + + +.. _PyUtility: + +Utilities +========= + +The `python/mujoco `__ directory also contains +utility scripts. + + +.. _PyMsh2obj: + +msh2obj.py +---------- + +The `msh2obj.py `__ script converts the +:ref:`legacy .msh format` for surface meshes (different from the possibly-volumetric +:ref:`gmsh format` also using .msh), to OBJ files. The legacy format is depricated and will be removed +in a future release. Please convert all legacy files to OBJ. + + + +.. _PyMjpy_migration: + +mujoco-py migration +=================== + +In mujoco-py, the main entry point is the `MjSim `_ +class. Users construct a stateful ``MjSim`` instance from an MJCF model (similar to ``dm_control.Physics``), and this +instance holds references to an ``mjModel`` instance and its associated ``mjData``. In contrast, the MuJoCo Python +bindings (``mujoco``) take a more low-level approach, as explained above: following the design principle of the C +library, the ``mujoco`` module itself is stateless, and merely wraps the underlying native structs and functions. + +While a complete survey of mujoco-py is beyond the scope of this document, we offer below implementation notes for a +non-exhaustive list of specific mujoco-py features: + +``mujoco_py.load_model_from_xml(bstring)`` + This factory function constructs a stateful ``MjSim`` instance. When using ``mujoco``, the user should call the + factory function ``mujoco.MjModel.from_xml_*`` as described :ref:`above `. The user is then responsible + for holding the resulting ``MjModel`` struct instance and explicitly generating the corresponding ``MjData`` by + calling ``mujoco.MjData(model)``. + +``sim.reset()``, ``sim.forward()``, ``sim.step()`` + Here as above, ``mujoco`` users needs to call the underlying library functions, passing instances of ``MjModel`` and + ``MjData``: :ref:`mujoco.mj_resetData(model, data) `, :ref:`mujoco.mj_forward(model, data) + `, and :ref:`mujoco.mj_step(model, data) `. + +``sim.get_state()``, ``sim.set_state(state)``, ``sim.get_flattened_state()``, ``sim.set_state_from_flattened(state)`` + The MuJoCo library’s computation is deterministic given a specific input, as explained in the :ref:`Programming + section `. mujoco-py implements methods for getting and setting some of the relevant fields (and + similarly ``dm_control.Physics`` offers methods that correspond to the flattened case). ``mujoco`` do not offer such + abstraction, and the user is expected to get/set the values of the relevant fields explicitly. + +``sim.model.get_joint_qvel_addr(joint_name)`` + This is a convenience method in mujoco-py that returns a list of contiguous indices corresponding to this joint. The + list starts from ``model.jnt_qposadr[joint_index]``, and its length depends on the joint type. ``mujoco`` doesn't + offer this functionality, but this list can be easily constructed using ``model.jnt_qposadr[joint_index]`` and + ``xrange``. + +``sim.model.*_name2id(name)`` + mujoco-py creates dicts in ``MjSim`` that allow for efficient lookup of indices for objects of different types: + ``site_name2id``, ``body_name2id`` etc. These functions replace the function :ref:`mujoco.mj_name2id(model, + type_enum, name) `. ``mujoco`` offers a different approach for using entity names – :ref:`named access + `, as well as access to the native :ref:`mj_name2id`. + +``sim.save(fstream, format_name)`` + This is the one context in which the MuJoCo library (and therefore also ``mujoco``) is stateful: it holds a copy in + memory of the last XML that was compiled, which is used in :ref:`mujoco.mj_saveLastXML(fname) `. Note + that mujoco-py’s implementation has a convenient extra feature, whereby the pose (as determined by ``sim.data``’s + state) is transformed to a keyframe that’s added to the model before saving. This extra feature is not currently + available in ``mujoco``. From 34e537e557da387de053ef76bc9b30ab1cca3632 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Mon, 6 May 2024 15:34:56 -0700 Subject: [PATCH 06/62] Updates to `minimize.least_squares`. Fixes #1585 - Residual callable is vectorized for easy multithreading by the user. Internally all vectors are now explicitly column vectors. - Removed central findiff option, it wasn't applicable at the bounds anyway and just complicated the code. - Added optional user-provided norm function for non-quadratic (robust) norms. - Added an iter_callback callable for user convenience. - Added option to internally check user-provided Jacobian and norm against finite differences. - Updated the notebook accordingly. PiperOrigin-RevId: 631205889 Change-Id: I3b9f8893756e329640de464e6f2e26a39e7dbd9e --- python/least_squares.ipynb | 1462 ++++++++++++++++++-------------- python/mujoco/minimize.py | 354 +++++--- python/mujoco/minimize_test.py | 210 +++-- 3 files changed, 1223 insertions(+), 803 deletions(-) diff --git a/python/least_squares.ipynb b/python/least_squares.ipynb index e382cdc7..ed3b8063 100644 --- a/python/least_squares.ipynb +++ b/python/least_squares.ipynb @@ -11,27 +11,17 @@ "#

Least Squares

\n", "\n", "This notebook describes a utility function included in the MuJoCo Python library performing box-bounded nonlinear least squares optimization. We provide some theoretical background, describe our implementation and show example usage.\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "pOyD_TXFrM_4" - }, - "source": [ - "### Copyright notice" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "zYLuuNFmrEfo" - }, - "source": [ - ">

Copyright 2022 DeepMind Technologies Limited

\n", - ">

Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

\n", - ">

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

" + "\n", + "\n", + "" ] }, { @@ -86,6 +76,7 @@ " print('Checking that the installation succeeded:')\n", " import mujoco\n", " from mujoco import minimize\n", + " from mujoco import rollout\n", " mujoco.MjModel.from_xml_string('')\n", "except Exception as e:\n", " raise e from RuntimeError(\n", @@ -107,7 +98,8 @@ "import time\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", - "from matplotlib.patches import Rectangle\n" + "from matplotlib.patches import Rectangle\n", + "from typing import Tuple, Optional, Union\n" ] }, { @@ -262,6 +254,26 @@ "This completes the background section and allows us to accurately describe the function explored in the rest of the notebook. " ] }, + { + "cell_type": "markdown", + "metadata": { + "id": "IaaI2ZIY5FIw" + }, + "source": [ + "## Least Norm Generalization\n", + "\n", + "The Least Squares problem described above can be generalized as follows. Instead of the quadratic norm $\\frac{1}{2} r(x)^T\\cdot r(x)$, we can use some other smooth, convex norm $f(x) = n(r(x))$. Letting $\\nabla n = \\frac{\\partial n}{\\partial r}$ and $\\nabla^2 n = \\frac{\\partial^2 n}{\\partial r^2}$ be respectively the gradient and Hessian of $n$ with respect to $r$, we have\n", + "$$\n", + "\\begin{align}\n", + "g &= J^T\\cdot\\nabla n\\\\\n", + "H_{GN} &= J^T\\cdot \\nabla^2 n \\cdot J\n", + "\\end{align}\n", + "$$\n", + "It is easy to verify that for the quadratic norm, these expression reduce to the ones above as $\\nabla (\\frac{1}{2}r^T\\cdot r) = r$ and $\\nabla^2 (\\frac{1}{2}r^T\\cdot r) = I_m$.\n", + "\n", + "This completes the background section and allows us to accurately describe the function explored in the rest of the notebook. " + ] + }, { "cell_type": "markdown", "metadata": { @@ -293,7 +305,7 @@ "3. Since each evaluation of the residual involves rolling out the physics to obtain simulated sensor values, computing $r(x)$ is the most expensive part of the optimization.\n", "4. Analytic Jacobians $J = \\frac{\\partial r}{\\partial x}$ are usually not available and must be obtained with **finite-differencing**.\n", "5. Due to the sematics of $x$, box-bounds are usually sufficient (for example, masses and friction coefficients cannot be negative, joint angles should not exceed their limits).\n", - "6. The implementation should be efficient yet readable. The [least_squares function](https://github.com/google-deepmind/mujoco/blob/main/python/mujoco/minimize.py) takes less than 250 lines of code.\n", + "6. The implementation should be efficient yet readable. The [least_squares function](https://github.com/google-deepmind/mujoco/blob/main/python/mujoco/minimize.py) takes up ~250 lines of code.\n", "\n", "Let's look at the function's docstring and then discuss some implementation notes." ] @@ -317,11 +329,13 @@ "source": [ "## Implementation notes\n", "\n", + "1. The residual funciton must be vectorized: besides taking a column vector $x$ and returning the residual $r(x)$, it must accept an $n\\times k$ matrix $X$, returning an $m\\times k$ matrix $R$. The vectorized format is used by the internal finite-difference implementation and can be exploited to speed up the minimization by using multi-threading inside the residual function implementation.\n", "1. Bounds must be `None` or fully specified for all dimensions of $x$.\n", - "2. The `jacobian` callback can be supplied by the user and is finite-differenced otherwise. Note that this callback is not made available in the case the user knows the analytic Jacobian (this is very rare in the sysID context), but in case the user wants to implement their own multi-threaded fin-diff callback.\n", - "3. Automatic forward/backward differencing, chosen to avoid crossing the bounds, with optional central differencing. The fin-diff epsilon `eps` is scaled by the size of the bounds, if provided.\n", - "4. The termination criterion is based on small step size $||\\delta x|| < \\textrm{tol}$.\n", - "5. We use the simple yet affective $\\mu$-search strategy described in [Bazaraa et-al.](https://onlinelibrary.wiley.com/doi/book/10.1002/0471787779). Backtracking $\\mu$-increases are *careful*, attempting to find the smallest $\\mu$ where sufficient reduction is found. $\\mu$-decreases are *aggressive*, allowing fast quadratic convergence to a local minimum." + "1. The `jacobian` callback can be supplied by the user and is finite-differenced otherwise. Note that this callback is not made available in the case the user knows the analytic Jacobian (this is very rare in the sysID context), but in case the user wants to implement their own multi-threaded fin-diff callback.\n", + "1. Automatic forward/backward differencing, chosen to avoid crossing the bounds, with optional central differencing. The fin-diff epsilon `eps` is scaled by the size of the bounds, if provided.\n", + "1. The termination criterion is based on small step size $||\\delta x|| < \\textrm{tol}$.\n", + "1. We use the simple yet affective $\\mu$-search strategy described in [Bazaraa et-al.](https://onlinelibrary.wiley.com/doi/book/10.1002/0471787779). Backtracking $\\mu$-increases are *careful*, attempting to find the smallest $\\mu$ where sufficient reduction is found. $\\mu$-decreases are *aggressive*, allowing fast quadratic convergence to a local minimum.\n", + "1. The user may optionally provide a `norm` different than the quadratic norm (the default), this is covered in more detail below." ] }, { @@ -330,7 +344,7 @@ "id": "MvnHwh2ZgGT2" }, "source": [ - "# Toy examples: 2D" + "# Toy examples" ] }, { @@ -429,7 +443,7 @@ "source": [ "# Minimize Rosenbrock function.\n", "def rosenbrock(x):\n", - " return np.array((1-x[0], 10*(x[1]-x[0]**2)))\n", + " return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)])\n", "\n", "x0 = np.array((0.0, 0.0))\n", "x, rb_trace = minimize.least_squares(x0, rosenbrock);" @@ -477,9 +491,9 @@ "source": [ "#@title Minimize, visualize Beale\n", "def beale(x):\n", - " return np.array((1.5-x[0]+x[0]*x[1],\n", - " 2.25-x[0]+x[0]*x[1]*x[1],\n", - " 2.625-x[0]+x[0]*x[1]*x[1]*x[1]))\n", + " return np.stack((1.5-x[0, :]+x[0, :]*x[1, :],\n", + " 2.25-x[0, :]+x[0, :]*x[1, :]*x[1, :],\n", + " 2.625-x[0, :]+x[0, :]*x[1, :]*x[1, :]*x[1, :]))\n", "\n", "x0 = np.array((-3.0, -3.0))\n", "x, bl_trace = minimize.least_squares(x0, beale)\n", @@ -516,7 +530,7 @@ "# Choose bounds.\n", "lower = np.array([-.3, -1.])\n", "upper = np.array([0.9, 1.9])\n", - "bounds = (lower, upper)\n", + "bounds = [lower, upper]\n", "\n", "# Make some initial points, minimize, save taces.\n", "num_points = 4\n", @@ -549,7 +563,7 @@ "# Choose bounds.\n", "lower = np.array([-2, -1.3])\n", "upper = np.array([1.5, 3.])\n", - "bounds = (lower, upper)\n", + "bounds = [lower, upper]\n", "\n", "# Make some initial points, minimize, save taces.\n", "num_points = 5\n", @@ -569,15 +583,6 @@ "plot_2D(beale, 'Beale Function', plot_range, minimum, traces, bounds)" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "jX81C8JjGOwc" - }, - "source": [ - "# Toy examples: high-D" - ] - }, { "cell_type": "markdown", "metadata": { @@ -604,8 +609,8 @@ "n = 20\n", "\n", "def rosenbrock_n(x):\n", - " res0 = [1-x[i] for i in range(n-1)]\n", - " res1 = [10*(x[i]-x[i+1]**2) for i in range(n-1)]\n", + " res0 = [1 - x[i, :] for i in range(n - 1)]\n", + " res1 = [10 * (x[i, :] - x[i + 1, :] ** 2) for i in range(n - 1)]\n", " return np.asarray(res0 + res1)\n", "\n", "x0 = np.zeros(n)\n", @@ -615,570 +620,6 @@ "assert np.linalg.norm(x-1) < 1e-8" ] }, - { - "cell_type": "markdown", - "metadata": { - "id": "B23ybrGiVjN6" - }, - "source": [ - "## Simple humanoid control\n", - "\n", - "We'll now use `least_squares` to solve a humanoid control problem. While this is not its intended purpose, it demonstrates the power and general usability of the function.\n", - "\n", - "Below, we copy MuJoCo's [standard humanoid model](https://github.com/google-deepmind/mujoco/blob/main/model/humanoid/humanoid.xml), with the following modifications:\n", - "1. Added a \"target\" mocap body with a pink spherical site.\n", - "2. Changed the color of the right hand to pink.\n", - "3. Replaced the torque actuators with position actuators." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "cellView": "form", - "id": "fQlg1Pwl6eRG" - }, - "outputs": [], - "source": [ - "#@title Humanoid XML\n", - "xml = \"\"\"\n", - "\n", - " \n", - "\"\"\"" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "K4enFXBZa9TE" - }, - "source": [ - "Let's load the model and render the initial state for our control problem, chosen to be the \"squat\" [keyframe](https://mujoco.readthedocs.io/en/latest/XMLreference.html#keyframe)." - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "id": "Sz8eUNsyYnyr" - }, - "outputs": [], - "source": [ - "# Load model, make data\n", - "model = mujoco.MjModel.from_xml_string(xml)\n", - "data = mujoco.MjData(model)\n", - "\n", - "# Set the state to the \"squat\" keyframe, call mj_forward.\n", - "key = model.key('squat').id\n", - "mujoco.mj_resetDataKeyframe(model, data, key)\n", - "mujoco.mj_forward(model, data)\n", - "\n", - "# If a renderer exists, close it.\n", - "if 'renderer' in locals():\n", - " renderer.close()\n", - "\n", - "# Make a Renderer and a camera.\n", - "renderer = mujoco.Renderer(model, height=480, width=640)\n", - "camera = mujoco.MjvCamera()\n", - "mujoco.mjv_defaultFreeCamera(model, camera)\n", - "camera.distance = 3\n", - "camera.elevation = -10\n", - "\n", - "# Point the camera at the humanoid, render.\n", - "camera.lookat = data.body('torso').subtree_com\n", - "renderer.update_scene(data, camera)\n", - "media.show_image(renderer.render())" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "4xpd_ioic6Wq" - }, - "source": [ - "### Problem definition\n", - "\n", - "We choose the following optimal control problem defintion:\n", - "- A trajectory is rolled out from $t=0\\ldots T$, starting at the \"squat\" keyframe shown above.\n", - "- Controls $u_t$ are applied during the rollout which are a linear interpolation of first control $u_0$ and the last one $u_T$. These two control vectors are our decision variable $x = \\begin{pmatrix} u_0 & u_T \\end{pmatrix}$.\n", - "- The residual is a concatenation, over all time steps, of the vector from the right hand to the target and the torques applied by the actuators, scaled by some factor (the torques are numerically much larger than the hand-target distances).\n", - "\n", - "Let's see what this residual looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "id": "QrqGsFKMK3of" - }, - "outputs": [], - "source": [ - "def reach(ctrl0T, target, T, torque_scale, traj=None):\n", - " \"\"\"Residual for target-reaching task.\n", - "\n", - " Args:\n", - " ctrl0T: contatenation of the first and last control vectors.\n", - " target: target to which the right hand should reach.\n", - " T: final time for the rollout.\n", - " torque_scale: coefficient by which to scale the torques.\n", - " traj: optional list of positions to be recorded.\n", - "\n", - " Returns:\n", - " The residual of the target-reaching task.\n", - " \"\"\"\n", - "\n", - " # Reset to the \"squat\" keyframe.\n", - " key = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_KEY, 'squat')\n", - " mujoco.mj_resetDataKeyframe(model, data, key)\n", - "\n", - " # Move the mocap body to the target (for visualization only)\n", - " mocapid = model.body('target').mocapid\n", - " data.mocap_pos[mocapid] = target\n", - "\n", - " # Extract the first and last ctrl vectors\n", - " ctrl0 = ctrl0T[:model.nu]\n", - " ctrlT = ctrl0T[model.nu:]\n", - "\n", - " # Roll out the trajectory, accumulate the residual.\n", - " res = []\n", - " while data.time < T:\n", - " # Interpolate ctrl from ctrl0 and ctrlT.\n", - " f0 = (T - data.time) / T\n", - " f1 = 1 - f0\n", - " data.ctrl = f0*ctrl0 + f1*ctrlT\n", - "\n", - " # Step.\n", - " mujoco.mj_step(model, data)\n", - "\n", - " # Append the task residual: hand to target.\n", - " res.append(data.geom('hand_right').xpos - np.array(target))\n", - "\n", - " # Append the energy residual: actuator torques.\n", - " res.append(torque_scale * data.actuator_force.flatten())\n", - "\n", - " # Save state to traj, if requested.\n", - " if traj is not None:\n", - " traj.append(data.qpos.copy())\n", - "\n", - " # The normalizer keeps objective values the same when changing T or timestep.\n", - " normalizer = 100 * model.opt.timestep / T\n", - " return np.hstack(res).flatten() * normalizer" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "MvKh4XWIK8Bx" - }, - "source": [ - "Now let's give the rest of the problem definition:\n", - "1. The trajectory is integrated for 0.7s.\n", - "2. Torques are scaled by 0.003.\n", - "3. Since our decision variable is two copies of `mjData.ctrl`, the bounds are two concatenated copies of `mjData.actuator_ctrlrange`.\n", - "4. Our initial guess $x_0 = \\begin{pmatrix} u_0 & u_T \\end{pmatrix} = \\begin{pmatrix} q_\\textrm{squat} & q_\\textrm{stand} \\end{pmatrix}$ is the joint angles at the squatting position, followed by the angles at the default (standing position). We can use angles to initialize our controls because the position actuators have angle semantics.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "id": "ZpT5JeyMFNjy" - }, - "outputs": [], - "source": [ - "T = 0.7 # Rollout length (seconds)\n", - "torque_scale = 0.003 # Scaling for the torques\n", - "\n", - "# Bounds are the stacked control bounds.\n", - "lower = model.actuator_ctrlrange[:,0]\n", - "upper = model.actuator_ctrlrange[:,1]\n", - "bounds = [np.hstack((lower, lower)), np.hstack((upper, upper))]\n", - "\n", - "# Initial guess is midpoint of the bounds\n", - "x0 = 0.5 * (bounds[1] + bounds[0])" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "RAD9cZkFKRpp" - }, - "source": [ - "Let's define a utility function for rendering frames and visualize the initial guess:" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "id": "kqpsjWtPKf77" - }, - "outputs": [], - "source": [ - "def render_solution(x, target):\n", - " # Ask reach to save positions to traj.\n", - " traj = []\n", - " reach(x, target, T, torque_scale, traj=traj);\n", - "\n", - " frames = []\n", - " counter = 0\n", - " print('Rendering frames:', flush=True, end='')\n", - " for qpos in traj:\n", - " # Set positions, call mj_forward to update kinematics.\n", - " data.qpos = qpos\n", - " mujoco.mj_forward(model, data)\n", - "\n", - " # Render and save frames.\n", - " camera.lookat = data.body('torso').subtree_com\n", - " renderer.update_scene(data, camera)\n", - " pixels = renderer.render()\n", - " frames.append(pixels)\n", - " counter += 1\n", - " if counter % 10 == 0:\n", - " print(f' {counter}', flush=True, end='')\n", - " return frames\n", - "\n", - "# Visualize the initial guess.\n", - "target = (0., 0., -1.) # Target irrelevant, put it under the floor.\n", - "media.show_video(render_solution(x0, target))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ZX4NJFxWLNPr" - }, - "source": [ - "### Solutions to the reach task\n", - "\n", - "Let's solve once for some target and look at the optimization printout:" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "id": "h8jRWeyJ9_A7" - }, - "outputs": [], - "source": [ - "target = (.4, -.3, 1.2)\n", - "\n", - "reach_target = lambda x: reach(x, target, T, torque_scale, traj=None)\n", - "\n", - "r0 = reach_target(x0)\n", - "print(f'The decision variable x has size {x0.size}')\n", - "print(f'The residual r(x) has size {r0.size}\\n')\n", - "\n", - "x, _ = minimize.least_squares(x0, reach_target, bounds);" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "aOpVVTb5L9gZ" - }, - "source": [ - "Let's see what this solution looks like:" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "id": "LV9g5ExyJKrU" - }, - "outputs": [], - "source": [ - "media.show_video(render_solution(x, target))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "igXc849HOdO6" - }, - "source": [ - "Let's rerun this for several target values and make a video of all of them:" - ] - }, - { - "cell_type": "code", - "execution_count": 0, - "metadata": { - "id": "kbNubkPyIdJu" - }, - "outputs": [], - "source": [ - "targets = [(0.4, 0., 0.), (0.2, -1., 0.5), (-1., -.3, 1.), (0., -.2, 2.2)]\n", - "\n", - "frames = []\n", - "for target in targets:\n", - " res_target = lambda x: reach(x, target, T, torque_scale)\n", - " print(f'Optimizing for target at {target}', flush=True)\n", - " x, trace = minimize.least_squares(x0, res_target, bounds,\n", - " verbose=minimize.Verbosity.FINAL)\n", - " frames += render_solution(x, target)\n", - " print('\\n')\n", - "\n", - "print('Making video', flush=True)\n", - "media.show_video(frames)" - ] - }, { "cell_type": "markdown", "metadata": { @@ -1612,7 +1053,7 @@ "outputs": [], "source": [ "# Bounds at the joint limits.\n", - "bounds = (model.jnt_range[:, 0], model.jnt_range[:, 1])\n", + "bounds = [model.jnt_range[:, 0], model.jnt_range[:, 1]]\n", "\n", "# Inital guess is the 'home' keyframe.\n", "x0 = model.key('home').qpos" @@ -1654,29 +1095,34 @@ " data.mocap_quat[id] = model.body('target').quat if quat is None else quat\n", "\n", " # Set qpos, compute forward kinematics.\n", - " data.qpos = x\n", - " mujoco.mj_kinematics(model, data)\n", + " res = []\n", + " for i in range(x.shape[1]):\n", + " data.qpos = x[:, i]\n", + " mujoco.mj_kinematics(model, data)\n", "\n", - " # Position residual.\n", - " res_pos = data.site('effector').xpos - data.site('target').xpos\n", + " # Position residual.\n", + " res_pos = data.site('effector').xpos - data.site('target').xpos\n", "\n", - " # Effector quat, use mju_mat2quat.\n", - " effector_quat = np.empty(4)\n", - " mujoco.mju_mat2Quat(effector_quat, data.site('effector').xmat)\n", + " # Effector quat, use mju_mat2quat.\n", + " effector_quat = np.empty(4)\n", + " mujoco.mju_mat2Quat(effector_quat, data.site('effector').xmat)\n", "\n", - " # Target quat, exploit the fact that the site is aligned with the body.\n", - " target_quat = data.body('target').xquat\n", + " # Target quat, exploit the fact that the site is aligned with the body.\n", + " target_quat = data.body('target').xquat\n", "\n", - " # Orientation residual: quaternion difference.\n", - " res_quat = np.empty(3)\n", - " mujoco.mju_subQuat(res_quat, target_quat, effector_quat)\n", - " res_quat *= radius\n", + " # Orientation residual: quaternion difference.\n", + " res_quat = np.empty(3)\n", + " mujoco.mju_subQuat(res_quat, target_quat, effector_quat)\n", + " res_quat *= radius\n", "\n", - " # Regularization residual.\n", - " reg_target = model.key('home').qpos if reg_target is None else reg_target\n", - " res_reg = reg * (x - reg_target)\n", + " # Regularization residual.\n", + " reg_target = model.key('home').qpos if reg_target is None else reg_target\n", + " res_reg = reg * (x[:, i] - reg_target)\n", "\n", - " return np.hstack((res_pos, res_quat, res_reg))" + " res_i = np.hstack((res_pos, res_quat, res_reg))\n", + " res.append(np.atleast_2d(res_i).T)\n", + "\n", + " return np.hstack(res)" ] }, { @@ -1714,10 +1160,8 @@ " # useful, but we don't need it here.\n", " del res\n", "\n", - " # We can assume x has been copied into qpos\n", - " # and that mj_kinematics has been called by ik()\n", - "\n", - " # Call mj_comPos (required for Jacobians).\n", + " # Call mj_kinematics and mj_comPos (required for Jacobians).\n", + " mujoco.mj_kinematics(model, data)\n", " mujoco.mj_comPos(model, data)\n", "\n", " # Get end-effector site Jacobian.\n", @@ -1763,7 +1207,8 @@ "print('Finite-differenced Jacobian:')\n", "x_fd, _ = minimize.least_squares(x0, ik, bounds, verbose=1);\n", "print('Analytic Jacobian:')\n", - "x_analytic, _ = minimize.least_squares(x0, ik, bounds, jacobian=ik_jac, verbose=1);\n", + "x_analytic, _ = minimize.least_squares(x0, ik, bounds, jacobian=ik_jac,\n", + " verbose=1, check_derivatives=True);\n", "\n", "# Assert that we got a nearly identical solution\n", "assert np.linalg.norm(x_fd - x_analytic) < 1e-5" @@ -1775,9 +1220,9 @@ "id": "UP9UamTWzWM4" }, "source": [ - "Nice speed-up! This will become more pronounced the harder the specific IK problem (more dofs, more difficult configuration).\n", + "Nice speed-up! This will become more pronounced the harder the specific IK problem. We'll do a more comprehensive timing comparison a few cells down (this specific configuration happens to be solved rather slowly).\n", "\n", - "We'll do a more comprehensive timing comparison a few cells down." + "Note that we passed `check_derivatives=True` to ask the function to verify that our analytic Jacobian is correct, by making a comparison to the internal finite-difference function at the first timestep." ] }, { @@ -2117,13 +1562,760 @@ "\n", "media.show_video(frames, loop=False)" ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "69c7LaZ07VGY" + }, + "source": [ + "# Non-quadratic norms\n", + "\n", + "We'll now use `least_squares` to solve a trajectory optimization (control) problem. While this is not its intended purpose, it demonstrates the power and general usability of the function.\n", + "\n", + "After using regular Least Squares, we'll define a custom **non-quadratic norm** and solve again.\n", + "\n", + "Below, we copy MuJoCo's [standard humanoid model](https://github.com/google-deepmind/mujoco/blob/main/model/humanoid/humanoid.xml), with the following modifications:\n", + "1. Added a \"target\" mocap body with a pink spherical site.\n", + "2. Changed the color of the right hand to pink.\n", + "3. Replaced the torque actuators with position actuators.\n", + "4. Added sensors corresponding to the residual." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "cellView": "form", + "id": "1Cg4ABJa7VGd" + }, + "outputs": [], + "source": [ + "#@title Humanoid XML\n", + "xml = \"\"\"\n", + "\n", + " \n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "goe2DuOv7VGd" + }, + "source": [ + "Let's load the model and render the initial state for our control problem, chosen to be the \"squat\" [keyframe](https://mujoco.readthedocs.io/en/latest/XMLreference.html#keyframe)." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "xhvrJ9bX7VGd" + }, + "outputs": [], + "source": [ + "# Load model, make data\n", + "model = mujoco.MjModel.from_xml_string(xml)\n", + "data = mujoco.MjData(model)\n", + "\n", + "# Set the state to the \"squat\" keyframe, call mj_forward.\n", + "key = model.key('squat').id\n", + "mujoco.mj_resetDataKeyframe(model, data, key)\n", + "mujoco.mj_forward(model, data)\n", + "\n", + "# If a renderer exists, close it.\n", + "if 'renderer' in locals():\n", + " renderer.close()\n", + "\n", + "# Make a Renderer and a camera.\n", + "renderer = mujoco.Renderer(model, height=480, width=640)\n", + "camera = mujoco.MjvCamera()\n", + "mujoco.mjv_defaultFreeCamera(model, camera)\n", + "camera.distance = 3\n", + "camera.elevation = -10\n", + "\n", + "# Point the camera at the humanoid, render.\n", + "camera.lookat = data.body('torso').subtree_com\n", + "renderer.update_scene(data, camera)\n", + "media.show_image(renderer.render())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "yxIzoZ_O7VGd" + }, + "source": [ + "### Problem definition\n", + "\n", + "We define the following optimal control problem defintion:\n", + "- A trajectory is rolled out from $t=0\\ldots T$, starting at the \"squat\" keyframe shown above.\n", + "- Controls $u_t$ are applied during the rollout which are a linear interpolation of first control $u_0$ and the last one $u_T$. These two vectors are our decision variable $x = \\begin{pmatrix} u_0 & u_T \\end{pmatrix}$.\n", + "- The residual is a concatenation, over all time steps, of:\n", + " - The vector from the right hand to the target.\n", + " - The torques applied by the actuators, scaled by some factor (they are numerically much larger than the hand-target distances).\n", + "\n", + "Our residual uses `mujoco.rollout` to evaluate parallel trajectories:" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "cIX95v757VGd" + }, + "outputs": [], + "source": [ + "def reach(ctrl0T, target, T, torque_scale, traj=None):\n", + " \"\"\"Residual for target-reaching task.\n", + "\n", + " Args:\n", + " ctrl0T: contatenation of the first and last control vectors.\n", + " target: target to which the right hand should reach.\n", + " T: final time for the rollout.\n", + " torque_scale: coefficient by which to scale the torques.\n", + " traj: optional list of positions to be recorded.\n", + "\n", + " Returns:\n", + " The residual of the target-reaching task.\n", + " \"\"\"\n", + " # Extract the initial and final ctrl vectors, transpose to row vectors\n", + " ctrl0 = ctrl0T[:model.nu, :].T\n", + " ctrlT = ctrl0T[model.nu:, :].T\n", + "\n", + " # Move the mocap body to the target\n", + " mocapid = model.body('target').mocapid\n", + " data.mocap_pos[mocapid] = target\n", + "\n", + " # Append the mocap targets to the controls\n", + " nroll = ctrl0.shape[0]\n", + " mocap = np.tile(data.mocap_pos[mocapid], (nroll, 1))\n", + " ctrl0 = np.hstack((ctrl0, mocap))\n", + " ctrlT = np.hstack((ctrlT, mocap))\n", + "\n", + " # Define control spec (ctrl + mocap_pos)\n", + " mjtState = mujoco.mjtState\n", + " control_spec = mjtState.mjSTATE_CTRL | mjtState.mjSTATE_MOCAP_POS\n", + "\n", + " # Interpolate and stack the control sequences\n", + " nstep = int(np.round(T / model.opt.timestep))\n", + " control = np.stack(np.linspace(ctrl0, ctrlT, nstep), axis=1)\n", + "\n", + " # Reset to the \"squat\" keyframe, get the initial state\n", + " key = model.key('squat').id\n", + " mujoco.mj_resetDataKeyframe(model, data, key)\n", + " spec = mjtState.mjSTATE_FULLPHYSICS\n", + " nstate = mujoco.mj_stateSize(model, spec)\n", + " state = np.empty(nstate)\n", + " mujoco.mj_getState(model, data, state, spec)\n", + "\n", + " # Perform rollouts (sensors.shape == nroll, nstep, nsensordata)\n", + " states, sensors = rollout.rollout(model, data, state, control,\n", + " control_spec=control_spec)\n", + "\n", + " # If requested, extract qpos into traj\n", + " if traj is not None:\n", + " assert states.shape[0] == 1\n", + " # Skip the first element in state (mjData.time)\n", + " traj.extend(np.split(states[0, :, 1:model.nq+1], nstep))\n", + "\n", + " # Scale torque sensors\n", + " sensors[:, :, 3:] *= torque_scale\n", + "\n", + " # Reshape to stack the sensor values, transpose to column vectors\n", + " sensors = sensors.reshape((sensors.shape[0], -1)).T\n", + "\n", + " # The normalizer keeps objective values similar when changing T or timestep.\n", + " normalizer = 100 * model.opt.timestep / T\n", + " return normalizer * sensors" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Bgugbs987VGe" + }, + "source": [ + "Now let's give the rest of the problem definition:\n", + "1. The trajectory is integrated for 0.7s.\n", + "2. Torques are scaled by 0.003.\n", + "3. Since our decision variable is two copies of `mjData.ctrl`, the bounds are two concatenated copies of `mjData.actuator_ctrlrange`.\n", + "4. Our initial guess $x_0 = \\begin{pmatrix} u_0 & u_T \\end{pmatrix} = \\begin{pmatrix} q_\\textrm{squat} & q_\\textrm{stand} \\end{pmatrix}$ is the joint angles at the squatting position, followed by the angles at the default (standing position). We can use angles to initialize our controls because the position actuators have angle semantics.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "Q_6PshTn7VGe" + }, + "outputs": [], + "source": [ + "T = 0.7 # Rollout length (seconds)\n", + "torque_scale = 0.003 # Scaling for the torques\n", + "\n", + "# Bounds are the stacked control bounds.\n", + "lower = np.atleast_2d(model.actuator_ctrlrange[:,0]).T\n", + "upper = np.atleast_2d(model.actuator_ctrlrange[:,1]).T\n", + "bounds = [np.vstack((lower, lower)), np.vstack((upper, upper))]\n", + "\n", + "# Initial guess is midpoint of the bounds\n", + "x0 = 0.5 * (bounds[1] + bounds[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "DLkrsjeE7VGe" + }, + "source": [ + "Let's define a utility function for rendering frames and visualize the initial guess:" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "Ghnvrsyt7VGe" + }, + "outputs": [], + "source": [ + "def render_solution(x, target):\n", + " # Ask reach to save positions to traj.\n", + " traj = []\n", + " reach(x, target, T, torque_scale, traj=traj);\n", + "\n", + " frames = []\n", + " counter = 0\n", + " print('Rendering frames:', flush=True, end='')\n", + " for qpos in traj:\n", + " # Set positions, call mj_forward to update kinematics.\n", + " data.qpos = qpos\n", + " mujoco.mj_forward(model, data)\n", + "\n", + " # Render and save frames.\n", + " camera.lookat = data.body('torso').subtree_com\n", + " renderer.update_scene(data, camera)\n", + " pixels = renderer.render()\n", + " frames.append(pixels)\n", + " counter += 1\n", + " if counter % 10 == 0:\n", + " print(f' {counter}', flush=True, end='')\n", + " return frames\n", + "\n", + "# Use default target.\n", + "target = data.mocap_pos[model.body('target').mocapid]\n", + "\n", + "# Visualize the initial guess.\n", + "media.show_video(render_solution(x0, target))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0L_W3Y5r7VGe" + }, + "source": [ + "### Solutions to the reach task\n", + "\n", + "Let's solve once for some target and look at the optimization printout:" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "RrEuIHJF7VGe" + }, + "outputs": [], + "source": [ + "target = (.4, -.3, 1.2)\n", + "\n", + "reach_target = lambda x: reach(x, target, T, torque_scale, traj=None)\n", + "\n", + "r0 = reach_target(x0)\n", + "print(f'The decision variable x has size {x0.size}')\n", + "print(f'The residual r(x) has size {r0.size}\\n')\n", + "\n", + "x, _ = minimize.least_squares(x0, reach_target, bounds);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "S3r1KWHF7VGe" + }, + "source": [ + "Let's see what this solution looks like:" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "GcRuhJX-7VGe" + }, + "outputs": [], + "source": [ + "media.show_video(render_solution(x, target))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "zqgKu71p7VGe" + }, + "source": [ + "Let's rerun this for several target values and make a video of all of them:" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "GCsIOtdn7VGe" + }, + "outputs": [], + "source": [ + "targets = [(0.4, 0., 0.), (0.2, -1., 0.5), (-1., -.3, 1.), (0., -.2, 2.2)]\n", + "\n", + "frames = []\n", + "for target in targets:\n", + " res_target = lambda x: reach(x, target, T, torque_scale)\n", + " print(f'Optimizing for target at {target}', flush=True)\n", + " x, trace = minimize.least_squares(x0, res_target, bounds,\n", + " verbose=minimize.Verbosity.FINAL)\n", + " frames += render_solution(x, target)\n", + " print('\\n')\n", + "\n", + "print('Making video', flush=True)\n", + "media.show_video(frames)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "d12KzVKU_TFR" + }, + "source": [ + "### Non-quadratic norms\n", + "\n", + "As explained in the background section, Least Squares can be generalized to norms other than the quadratic. We are now in a position to show how to define a non-quadratic norm, which is important in the estimation and system-identification contexts, where long-taled, disturbance-rejecting distributions are proportional to the exponent of a non-quadratic function.\n", + "\n", + "Let's say that we wish the task residual i.e., the vector from the hand to the target, to be evaluated with the \"Smooth L2\" function $c(r)$ which, for a given smoothing radius $d \\gt 0$ is\n", + "$$\n", + "c(r) = \\sqrt{r^T\\cdot r + d^2 } - d\n", + "$$\n", + "This function is quadratic in a $d$-sized neighborhood of the origin, and then grows linearly thereafter, like the L2 norm. The first and second derivatives are\n", + "$$\n", + "\\begin{align}\n", + "s&=\\sqrt{r^T\\cdot r + d^2 }\\\\\n", + "g &= \\tfrac{\\partial c}{\\partial r} = \\frac{r}{s} \\\\\n", + "H &=\\tfrac{\\partial^2 c}{\\partial r^2} = \\frac{I_{n_r} - g\\cdot g^T}{s}\n", + "\\end{align}\n", + "$$\n", + "There is no particularly good reason to use this norm for this optimization task, it is meerly an example.\n", + "\n", + "Let's read the documentation of the `minimize.Norm` class:\n" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "TnRn0Mk7QR6Z" + }, + "outputs": [], + "source": [ + "print(minimize.Norm.__doc__)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3JGpR47DQ9S2" + }, + "source": [ + "Our sensors are 3 `r_pos` residual values for the hand-to-object vector followed by 21 `r_torque` actuator torques, for a total of `ns = 24` sensors. These are concatented for the entire trajectory, leading to a residual of size `24*N`, where `N` is the number of timesteps in a trajectory. After reshaping and slicing appropriately, the norm implementation looks like" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "f3MDXm4e_Wup" + }, + "outputs": [], + "source": [ + "class SmoothL2(minimize.Norm):\n", + " def __init__(self):\n", + " self.n = model.nsensordata # Equals 24.\n", + " self.d = 0.1 # The smoothing radius (length).\n", + "\n", + " def value(self, r):\n", + " rr = r.reshape((self.n, -1), order='F')\n", + " r_pos = rr[:3, :]\n", + " s = np.sqrt(np.sum(r_pos**2, axis=0) + self.d**2)\n", + " y_pos = (s - self.d).sum()\n", + " r_torque = rr[3:, :]\n", + " y_torque = 0.5 * (r_torque.T**2).sum()\n", + " return y_pos + y_torque\n", + "\n", + " def grad_hess(self, r, proj):\n", + " rr = r.reshape((self.n, -1), order='F')\n", + " r_pos = rr[:3, :]\n", + " s = np.sqrt(np.sum(r_pos**2, axis=0) + self.d**2)\n", + " g_pos = r_pos / s\n", + " g_torque = rr[3:, :]\n", + " g = np.vstack((g_pos, g_torque))\n", + " grad = proj.T @ g.reshape((-1, 1), order='F')\n", + " h_proj = proj.copy() # norm Hessian * projection matrix\n", + " for i in range(g_pos.shape[1]):\n", + " h_i = (np.eye(3) - g_pos[:, i:i+1] @ g_pos[:, i:i+1].T) / s[i]\n", + " j = self.n*i\n", + " h_proj[j:j+3, :] = h_i @ proj[j:j+3, :]\n", + " hess = proj.T @ h_proj\n", + " return grad, hess" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oJrh-rfL0LQh" + }, + "source": [ + "Before running the optimization, let's ask `least_squares` to check our norm implementation. We'll do this with a short trajectory simulation time `T`, to avoid creating huge matrices." + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "MUCDTV6JV0ix" + }, + "outputs": [], + "source": [ + "target = (.4, -.3, 1.2)\n", + "\n", + "T_short = 0.02\n", + "\n", + "reach_target = lambda x: reach(x, target, T=T_short,\n", + " torque_scale=torque_scale, traj=None)\n", + "\n", + "x, _ = minimize.least_squares(x0, reach_target, bounds, norm=SmoothL2(),\n", + " max_iter=1, check_derivatives=True);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "J0brs9pG0-8Y" + }, + "source": [ + "Now that we are confident of our implemetation, we can see what the solution looks like:" + ] + }, + { + "cell_type": "code", + "execution_count": 0, + "metadata": { + "id": "AICTHd-9z1rL" + }, + "outputs": [], + "source": [ + "target = (.4, -.3, 1.2)\n", + "\n", + "reach_target = lambda x: reach(x, target, T, torque_scale, traj=None)\n", + "\n", + "x, _ = minimize.least_squares(x0, reach_target, bounds, norm=SmoothL2());\n", + "\n", + "media.show_video(render_solution(x, target))" + ] } ], "metadata": { "accelerator": "GPU", "colab": { "collapsed_sections": [ - "pOyD_TXFrM_4", "zhVv8-0Tvlrl" ], "gpuType": "T4", diff --git a/python/mujoco/minimize.py b/python/mujoco/minimize.py index 857cbec3..377733f6 100644 --- a/python/mujoco/minimize.py +++ b/python/mujoco/minimize.py @@ -14,6 +14,7 @@ # ============================================================================== """Nonlinear Least Squares minimization with box bounds.""" +import abc import dataclasses import enum import time @@ -32,14 +33,14 @@ class Verbosity(enum.Enum): class Status(enum.Enum): FACTORIZATION_FAILED = enum.auto() - NO_IMPORVEMENT = enum.auto() + NO_IMPROVEMENT = enum.auto() MAX_ITER = enum.auto() DX_TOL = enum.auto() _STATUS_MESSAGE = { Status.FACTORIZATION_FAILED: 'factorization failed.', - Status.NO_IMPORVEMENT: 'insufficient reduction.', + Status.NO_IMPROVEMENT: 'insufficient reduction.', Status.MAX_ITER: 'maximum iterations reached.', Status.DX_TOL: 'norm(dx) < tol.', } @@ -68,90 +69,70 @@ class IterLog: step: Optional[np.ndarray] = None -def jacobian_fd( - residual: Callable[[np.ndarray], np.ndarray], - x: np.ndarray, - r: np.ndarray, - eps: np.float64, - central: bool, - n_res: int, - bounds: Optional[List[np.ndarray]] = None, -): - """Finite-difference Jacobian of a residual function. +class Norm(abc.ABC): + """Abstract interface for norm functions, measuring the magnitude of vectors. - Args: - residual: function that returns the residual for a given point. - x: point at which to evaluate the Jacobian. - r: residual at x. - eps: finite-difference step size. - central: whether to use central differences. - n_res: number or residual evaluations so far. - bounds: optional pair of lower and upper bounds. + Key Concepts: - Returns: - jac: Jacobian of the residual at x. - n_res: updated number of residual evaluations. + * Norm Value: The value of the norm for a given input vector. + * Gradient and Hessian: The gradient (first derivative) and Hessian (second + derivative) of the norm function with respect to the input vector. + Subclasses Must Implement: + + * `value(self, r: np.ndarray)`: Computes and returns the norm value for the + input vector `r`. + * `grad_hess(self, r: np.ndarray, proj: np.ndarray)`: Computes and returns + both the gradient and Hessian of the norm at `r`, projected onto `proj`. + The reason we ask the user to perform the projection themselves is that + norm Hessians are often large and sparse, and the "sandwich" projection + operator `proj.T @ hess @ proj` can be computed efficiently by taking the + specific norm structure into account. """ - nx = x.size - nr = r.size - jac = np.zeros((nr, nx)) - xh = x.copy() - if bounds is None: - # No bounds, simple forward or central differencing. - for i in range(nx): - xh[i] = x[i] + eps - rp = residual(xh) - if central: - xh[i] = x[i] - eps - rm = residual(xh) - jac[:, i] = (rp - rm) / (2*eps) - else: - jac[:, i] = (rp - r) / eps - xh[i] = x[i] - n_res += 2*nx if central else nx - else: - lower, upper = bounds - midpoint = 0.5 * (upper - lower) - for i in range(nx): - # Scale eps, don't cross bounds. - eps_i = eps * (upper[i] - lower[i]) - if central: - # Use central differencing if away from bounds. - if x[i] - eps_i < lower[i]: - # Near lower bound, use forward. - xh[i] = x[i] + eps_i - rp = residual(xh) - jac[:, i] = (rp - r) / eps_i - n_res += 1 - elif x[i] + eps_i > upper[i]: - # Near upper bound, use backward. - xh[i] = x[i] - eps_i - rm = residual(xh) - jac[:, i] = (r - rm) / eps_i - n_res += 1 - else: - # Use central. - xh[i] = x[i] + eps_i - rp = residual(xh) - xh[i] = x[i] - eps_i - rm = residual(xh) - jac[:, i] = (rp - rm) / (2*eps_i) - n_res += 2 - else: - # Below midpoint use forward differencing, otherwise backward. - if x[i] < midpoint[i]: - xh[i] = x[i] + eps_i - rp = residual(xh) - jac[:, i] = (rp - r) / eps_i - else: - xh[i] = x[i] - eps_i - rm = residual(xh) - jac[:, i] = (r - rm) / eps_i - n_res += 1 - # Reset. - xh[i] = x[i] - return jac, n_res + + @abc.abstractmethod + def value(self, r: np.ndarray) -> np.float64: + """Returns the value of the norm at the input vector `y = norm(r)`.""" + pass + + @abc.abstractmethod + def grad_hess(self, r: np.ndarray, proj: np.ndarray): + """Computes the projected gradient and Hessian of the norm at `r`. + + Args: + r: A NumPy column vector (nr x 1). + proj: A pre-computed projection matrix (nr x nx). + + Returns: + A tuple containing: + * Projected gradient: proj.T @ (d_norm/d_r). + * Projected Hessian: proj.T @ (d^2_norm/d_r^2) @ proj. + """ + pass + + +class Quadratic(Norm): + """Implementation of the quadratic norm.""" + + def value(self, r: np.ndarray): + """Returns the quadratic norm of `r`.""" + return 0.5 * (r.T @ r).item() + + def grad_hess(self, r: np.ndarray, proj: np.ndarray): + """Computes the projected gradient and Hessian of the quadratic norm at `r`. + + Args: + r: A NumPy column vector (nr x 1). + proj: A pre-computed projection matrix (nr x nx). + + Returns: + A tuple containing: + * Projected gradient: `proj.T @ r`. + * Projected Hessian: `proj.T @ proj`. + """ + grad = proj.T @ r + hess = proj.T @ proj # Notionally proj.T @ np.eye(r.size) @ proj + return grad, hess def least_squares( @@ -159,33 +140,38 @@ def least_squares( residual: Callable[[np.ndarray], np.ndarray], bounds: Optional[List[np.ndarray]] = None, jacobian: Optional[Callable[[np.ndarray, np.ndarray], np.ndarray]] = None, + norm: Norm = Quadratic(), eps: float = 1e-6, - central: bool = False, mu_min: float = 1e-6, mu_max: float = 1e8, mu_factor: float = 10.0**0.1, - tol: float = 1e-7, + tol: float = 1e-6, max_iter: int = 100, verbose: Union[Verbosity, int] = Verbosity.ITER, output: Optional[TextIO] = None, + iter_callback: Optional[Callable[[List[IterLog]], None]] = None, + check_derivatives: bool = False, ) -> Tuple[np.ndarray, List[IterLog]]: """Nonlinear Least Squares minimization with box bounds. Args: - x0: initial guess - residual: function that returns the residual for a given point x. - bounds: optional pair of lower and upper bounds on the solution. - jacobian: optional function that returns Jacobian of the residual at a given + x0: Initial guess + residual: Vectorized function returning the residual for 1 or more points. + bounds: Optional pair of lower and upper bounds on the solution. + jacobian: Optional function that returns Jacobian of the residual at a given point and residual. If not given, `residual` will be finite-differenced. - eps: perurbation used for automatic finite-differencing. - central: whether to use central differences. - mu_min: minimum value of the regularizer. - mu_max: maximum value of the regularizer. - mu_factor: factor increasing or decreasing the regularizer. - tol: termination tolerance on the step size. - max_iter: maximum number of iterations. - verbose: verbosity level. - output: optional file or StringIO to which to print messages. + norm: Norm object returning norm scalar or its projected gradient and + Hessian. See Norm class for detailed documentation. + eps: Perurbation used for automatic finite-differencing. + mu_min: Minimum value of the regularizer. + mu_max: Maximum value of the regularizer. + mu_factor: Factor for increasing or decreasing the regularizer. + tol: Termination tolerance on the step size. + max_iter: Maximum number of iterations. + verbose: Verbosity level. + output: Optional file or StringIO to which to print messages. + iter_callback: Optional iteration callback, takes trace argument. + check_derivatives: Compare user-defined Jacobian and norm against fin-diff. Returns: x: best solution found @@ -202,10 +188,10 @@ def least_squares( # Initialize locals. status = Status.MAX_ITER i = 0 - x = x0.astype(np.float64) - n = x.size - xnew = np.zeros((n,)) - dx = np.zeros((n,)) + n = x0.size + x = x0.astype(np.float64).reshape((n, 1)) + xnew = np.zeros((n, 1)) + dx = np.zeros((n, 1)) scratch = np.zeros((n, n + 7)) eps = np.float64(eps) mu = np.float64(0.0) # Optimistically start with no regularization. @@ -234,6 +220,8 @@ def least_squares( n_reduc = 0 # Reset n_reduc. return mu, n_reduc + # Make local copy of bounds to avoid reshaping user input. + bounds = None if bounds is None else bounds.copy() if bounds is not None: # Checks bounds. if len(bounds) != 2: @@ -244,7 +232,10 @@ def least_squares( raise ValueError('bounds must be finite.') if not np.all(bounds[0] < bounds[1]): raise ValueError('bounds[0] must be smaller than bounds[1].') - # Clip. + + # Reshape and clip. + bounds[0] = bounds[0].reshape(n, 1) + bounds[1] = bounds[1].reshape(n, 1) np.clip(x, bounds[0], bounds[1], out=x) # Check for NaNs. @@ -267,21 +258,28 @@ def least_squares( break # Get objective y. - y = 0.5 * r.dot(r) + y = norm.value(r) # Get Jacobian jac. t_start = time.time() if jacobian is None: - jac, n_res = jacobian_fd(residual, x, r, eps, central, n_res, bounds) + jac, n_res = jacobian_fd(residual, x, r, eps, n_res, bounds) t_res += time.time() - t_start else: jac = jacobian(x, r) t_jac += time.time() - t_start n_jac += 1 + # Check user-provided Jacobian + if i == 0 and check_derivatives: + n_res = check_jacobian(residual, x, r, jac, eps, n_res, bounds, output) + + # Check user-provided norm + if i == 0 and check_derivatives and not isinstance(norm, Quadratic): + check_norm(r, norm, eps, output) + # Get gradient, Gauss-Newton Hessian. - grad = jac.T @ r - hess = jac.T @ jac + grad, hess = norm.grad_hess(r, jac) # Bounds relative to x dlower = None if bounds is None else bounds[0] - x @@ -316,13 +314,13 @@ def least_squares( n_res += 1 # New objective, evaluate reduction. - ynew = 0.5 * rnew.dot(rnew) + ynew = norm.value(rnew) reduction = y - ynew - armijo = reduction + armijo_c1*grad.dot(dx) + armijo = reduction + armijo_c1 * (grad.T @ dx).item() if armijo < 0: if mu >= mu_max: - status = Status.NO_IMPORVEMENT + status = Status.NO_IMPROVEMENT break mu, n_reduc = increase_mu(mu) @@ -330,7 +328,7 @@ def least_squares( break # Compute reduction ratio. - expected_reduction = -(grad.dot(dx) + 0.5 * dx.T @ hess @ dx) + expected_reduction = -(grad.T @ dx + 0.5 * dx.T @ hess @ dx).item() reduction_ratio = 0.0 if expected_reduction <= 0: if verbose > Verbosity.SILENT.value: @@ -352,11 +350,13 @@ def least_squares( ) print(message, file=output) - # Append log to trace. + # Append log to trace, call iter_callback. log = IterLog(candidate=x, objective=y, reduction=reduction, regularizer=mu) if verbose >= Verbosity.FULLITER.value: log = dataclasses.replace(log, residual=r, jacobian=jac, step=dx) trace.append(log) + if iter_callback is not None: + iter_callback(trace) # Check for success. if dx_norm < tol: @@ -373,12 +373,14 @@ def least_squares( x = xnew r = rnew - # Append final log to trace. - # Note: unlike other iter logs, this is at the end point. - yfinal = 0.5 * r.dot(r) - red = np.float64(0.0) + # Append final log to trace, call iter_callback. + # Note: unlike other iter logs, values are computed at the end point. + yfinal = norm.value(r) + red = np.float64(0.0) # No reduction sice we didn't take a step. log = IterLog(candidate=x, objective=yfinal, reduction=red, regularizer=mu) trace.append(log) + if iter_callback is not None: + iter_callback(trace) # Print final diagnostics. if verbose > Verbosity.SILENT.value: @@ -401,4 +403,124 @@ def least_squares( message += f' Jacobian {jac_percent:<.1f}%' print(message, file=output) - return x, trace + return x.reshape(x0.shape), trace + + +def jacobian_fd( + residual: Callable[[np.ndarray], np.ndarray], + x: np.ndarray, + r: np.ndarray, + eps: np.float64, + n_res: int, + bounds: Optional[List[np.ndarray]] = None, +) -> Tuple[np.ndarray, int]: + """Finite-difference Jacobian of a residual function. + + Args: + residual: vectorized function that returns the residual of a vector array. + x: point at which to evaluate the Jacobian. + r: residual at x. + eps: finite-difference step size. + n_res: number or residual evaluations so far. + bounds: optional pair of lower and upper bounds. + + Returns: + jac: Jacobian of the residual at x. + n_res: updated number of residual evaluations (add x.size). + + """ + n = x.size + if bounds is None: + eps_vec = eps * np.ones(n) + else: + mid = 0.5 * (bounds[1] - bounds[0]) + eps_vec = np.where(x > mid, -eps, eps).flatten() + xh = x + np.diag(eps_vec) + rh = residual(xh) + jac = (rh - r) / eps_vec + return jac, n_res+n + + +def check_jacobian( + residual: Callable[[np.ndarray], np.ndarray], + x: np.ndarray, + r: np.ndarray, + jac: np.ndarray, + eps: np.float64, + n_res: int, + bounds: Optional[List[np.ndarray]] = None, + output: Optional[TextIO] = None, + name: Optional[str] = 'Jacobian', +) -> int: + """Check user-provided Jacobian against internal finite-differencing. + + Args: + residual: vectorized function that returns the residual of a vector array. + x: point at which the r and jac were evaluated. + r: residual at x. + jac: Jacobian at x. + eps: finite-difference step size. + n_res: number or residual evaluations so far. + bounds: optional pair of lower and upper bounds. + output: Optional file or StringIO to which to print messages. + name: Optional name of the function being tested. + + Returns: + n_res: updated number of residual evaluations. + + """ + jac_fd, n_res = jacobian_fd(residual, x, r, eps, n_res, bounds) + denom = np.abs(jac).sum() + np.abs(jac_fd).sum() + 1e-8 + rel_diff = np.abs(jac - jac_fd) / denom + if np.any(rel_diff > 1e-5): + raise ValueError(f'User-provided {name} does not match finite-differences ' + 'to a relative tolerance of 1e-5.') + print(f'User-provided {name} matches finite-differences.', file=output) + return n_res + + +def check_norm( + r: np.ndarray, + norm: Norm, + eps: np.float64, + output: Optional[TextIO] = None, +): + """Check user-provided norm against internal finite-differencing. + + Args: + r: residual vector. + norm: Norm function returning either the norm scalar or its gradient + and Gauss-Newton Hessian. + eps: finite-difference step size. + output: Optional file or StringIO to which to print messages. + """ + # Get norm(r) value and 1st, 2nd derivatives. + n = np.atleast_2d(norm.value(r)) # norm value as 1x1 array. + eye = np.eye(r.size) # Identity projection. + n_g, n_h = norm.grad_hess(r, eye) # Gradient and Hessian. + + # Check that Hessian is symmetric. + if not np.allclose(n_h, n_h.T): + raise ValueError('User-provided norm Hessian is not symmetric.') + + # Check that Hessian is positive-definite. + if np.any(np.linalg.eigvals(n_h) < 0): + h_min = np.min(np.linalg.eigvals(n_h)) + raise ValueError('User-provided norm Hessian is not positive definite. ' + f'Minimum eigenvalue is {h_min:<.4g}') + + # Local function returning norm values (vectorized). + def norm_vec(v): + norms = [np.atleast_2d(norm.value(v[:, i:i+1])) for i in range(v.shape[1])] + return np.hstack(norms) + + # Check the norm gradient. + check_jacobian(norm_vec, r, n, n_g.T, eps, 0, None, output, 'norm gradient') + + # Local function returning norm gradients (vectorized). + def grad_vec(v): + gradients = [norm.grad_hess(v[:, i:i+1], eye)[0] for i in range(v.shape[1])] + return np.hstack(gradients) + + # Check the norm Hessian. + check_jacobian(grad_vec, r, n_g, n_h, eps, 0, None, output, 'norm Hessian') diff --git a/python/mujoco/minimize_test.py b/python/mujoco/minimize_test.py index 4de82fab..6d96f52c 100644 --- a/python/mujoco/minimize_test.py +++ b/python/mujoco/minimize_test.py @@ -15,7 +15,6 @@ """Tests for minimize.py.""" import io -from typing import Tuple from absl.testing import absltest from mujoco import minimize @@ -25,20 +24,19 @@ import numpy as np class MinimizeTest(absltest.TestCase): def test_basic(self) -> None: - def residual(x: np.ndarray) -> np.ndarray: - return np.array([1 - x[0], 10 * (x[1] - x[0] ** 2)], dtype=np.float64) + def residual(x): + return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)]) - for central in [False, True]: - out = io.StringIO() - x0 = np.array((0.0, 0.0)) - x, _ = minimize.least_squares(x0, residual, output=out, central=central) - expected_x = np.array((1.0, 1.0)) - np.testing.assert_array_almost_equal(x, expected_x) - self.assertContainsSubsequence(out.getvalue(), 'norm(dx) < tol') + out = io.StringIO() + x0 = np.array((0.0, 0.0)) + x, _ = minimize.least_squares(x0, residual, output=out) + expected_x = np.array((1.0, 1.0)) + np.testing.assert_array_almost_equal(x, expected_x) + self.assertContainsSubsequence(out.getvalue(), 'norm(dx) < tol') def test_start_at_minimum(self) -> None: - def residual(x: np.ndarray) -> np.ndarray: - return np.array([1 - x[0], 10 * (x[1] - x[0] ** 2)]) + def residual(x): + return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)]) out = io.StringIO() x0 = np.array((1.0, 1.0)) @@ -49,33 +47,36 @@ class MinimizeTest(absltest.TestCase): self.assertContainsSubsequence(out.getvalue(), 'exact minimum found') def test_jac_callback(self) -> None: - def residual(x: np.ndarray) -> np.ndarray: - return np.array([1 - x[0], 10 * (x[1] - x[0] ** 2)]) + def residual(x): + return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)]) - def jacobian(x: np.ndarray, r: np.ndarray) -> Tuple[float, np.ndarray]: + def jacobian(x, r): del r # Unused. - return np.array([[-1, 0], [-20 * x[0], 10]]) + return np.array([[-1, 0], [-20 * x[0, 0], 10]]) x0 = np.array((0.0, 0.0)) out = io.StringIO() - x, _ = minimize.least_squares(x0, residual, jacobian=jacobian, output=out) + x, _ = minimize.least_squares(x0, residual, jacobian=jacobian, output=out, + check_derivatives=True) expected_x = np.array((1.0, 1.0)) np.testing.assert_array_almost_equal(x, expected_x) self.assertContainsSubsequence(out.getvalue(), 'norm(dx) < tol') + self.assertContainsSubsequence(out.getvalue(), 'Jacobian matches') - # Try with bad Jacobian, expect no improvement. - def jac_bad1(x: np.ndarray, r: np.ndarray) -> Tuple[float, np.ndarray]: - return -jacobian(x, r) - out1 = io.StringIO() - minimize.least_squares(x0, residual, jacobian=jac_bad1, output=out1) - self.assertContainsSubsequence(out1.getvalue(), 'insufficient reduction') + # Try with bad Jacobian, ask least_squares to check it. + def bad_jacobian(x, r): + del r # Unused. + return np.array([[-1, 0], [-20 * x[0, 0], 15]]) + with self.assertRaisesRegex(ValueError, r'\bJacobian does not match\b'): + minimize.least_squares(x0, residual, jacobian=bad_jacobian, output=out, + check_derivatives=True) def test_max_iter(self) -> None: dim = 20 # High-D Rosenbrock - def residual(x: np.ndarray) -> np.ndarray: - res0 = [1 - x[i] for i in range(dim - 1)] - res1 = [10 * (x[i] - x[i + 1] ** 2) for i in range(dim - 1)] + def residual(x): + res0 = [1 - x[i, :] for i in range(dim - 1)] + res1 = [10 * (x[i, :] - x[i + 1, :] ** 2) for i in range(dim - 1)] return np.asarray(res0 + res1) # Fail to reach minimum after 20 iterations. @@ -90,8 +91,8 @@ class MinimizeTest(absltest.TestCase): np.testing.assert_array_almost_equal(x, expected_x) def test_bounds(self) -> None: - def residual(x: np.ndarray) -> np.ndarray: - return np.array([1 - x[0], 10 * (x[1] - x[0] ** 2)]) + def residual(x): + return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)]) out = io.StringIO() x0 = np.array((0.0, 0.0)) @@ -108,32 +109,28 @@ class MinimizeTest(absltest.TestCase): self.assertContainsSubsequence(out.getvalue(), 'norm(dx) < tol') # Test different bounds conditions. - verbose = minimize.Verbosity.FULLITER - - for central in [False, True]: - for bounds in bounds_types.values(): - out = io.StringIO() - x, trace = minimize.least_squares( - x0, - residual, - bounds=bounds, - output=out, - central=central, - verbose=verbose, - ) - self.assertContainsSubsequence(out.getvalue(), ' < tol') - grad = trace[-2].jacobian.T @ trace[-2].residual - # If x_i is on the boundary, gradient points out, otherwise it is 0. - for i, xi in enumerate(x): - if xi == bounds[0][i]: - self.assertGreater(grad[i], 0) - elif xi == bounds[1][i]: - self.assertLess(grad[i], 0) - else: - self.assertAlmostEqual(grad[i], 0, places=4) + for bounds in bounds_types.values(): + out = io.StringIO() + x, trace = minimize.least_squares( + x0, + residual, + bounds=bounds, + output=out, + verbose=minimize.Verbosity.FULLITER, + ) + self.assertContainsSubsequence(out.getvalue(), ' < tol') + grad = trace[-2].jacobian.T @ trace[-2].residual + # If x_i is on the boundary, gradient points out, otherwise it is 0. + for i, xi in enumerate(x): + if xi == bounds[0][i]: + self.assertGreater(grad[i], 0) + elif xi == bounds[1][i]: + self.assertLess(grad[i], 0) + else: + self.assertAlmostEqual(grad[i].item(), 0, places=4) def test_bad_bounds(self) -> None: - def residual(x: np.ndarray) -> np.ndarray: + def residual(x): return np.array([1 - x[0], 10 * (x[1] - x[0] ** 2)]) out = io.StringIO() @@ -150,5 +147,114 @@ class MinimizeTest(absltest.TestCase): with self.assertRaises(ValueError): minimize.least_squares(x0, residual, bounds=bounds, output=out) + def test_iter_callback(self) -> None: + def residual(x): + return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)]) + + out = io.StringIO() + + def iter_callback(trace): + print(f'Hello iteration {len(trace)}!', file=out) + + x0 = np.array((0.0, 0.0)) + x, _ = minimize.least_squares(x0, residual, output=out, + iter_callback=iter_callback) + expected_x = np.array((1.0, 1.0)) + np.testing.assert_array_almost_equal(x, expected_x) + self.assertContainsSubsequence(out.getvalue(), 'Hello iteration 3!') + + def test_norm(self) -> None: + def residual(x): + return np.stack([1 - x[0, :], 10 * (x[1, :] - x[0, :] ** 2)]) + + p = 0.01 # Smoothing radius for smooth-L2 norm. + + class SmoothL2(minimize.Norm): + def value(self, r): + return np.sqrt((r.T @ r).item() + p*p) - p + + def grad_hess(self, r, proj): + s = np.sqrt((r.T @ r).item() + p*p) + y_r = r / s + grad = proj.T @ y_r + y_rr = (np.eye(r.size) - y_r @ y_r.T) / s + hess = proj.T @ y_rr @ proj + return grad, hess + + out = io.StringIO() + x0 = np.array((0.0, 0.0)) + x, _ = minimize.least_squares(x0, residual, norm=SmoothL2(), output=out, + check_derivatives=True) + expected_x = np.array((1.0, 1.0)) + np.testing.assert_array_almost_equal(x, expected_x) + self.assertContainsSubsequence(out.getvalue(), 'norm(dx) < tol') + self.assertContainsSubsequence(out.getvalue(), + 'User-provided norm gradient matches') + self.assertContainsSubsequence(out.getvalue(), + 'User-provided norm Hessian matches') + + class SmoothL2BadGrad(minimize.Norm): + def value(self, r): + return np.sqrt((r.T @ r).item() + p*p) - p + + def grad_hess(self, r, proj): + s = np.sqrt((r.T @ r).item() + p*p) + y_r = r / s + grad = proj.T @ (y_r + 0.001) # 0.001 is erronous. + y_rr = (np.eye(r.size) - y_r @ y_r.T) / s + hess = proj.T @ y_rr @ proj + return grad, hess + + with self.assertRaisesRegex(ValueError, r'\bgradient does not match\b'): + minimize.least_squares(x0, residual, norm=SmoothL2BadGrad(), output=out, + check_derivatives=True) + + class SmoothL2BadHess(minimize.Norm): + def value(self, r): + return np.sqrt((r.T @ r).item() + p*p) - p + + def grad_hess(self, r, proj): + s = np.sqrt((r.T @ r).item() + p*p) + y_r = r / s + grad = proj.T @ y_r + y_rr = (1.001 * np.eye(r.size) - y_r @ y_r.T) / s # 1.001 is erronous. + hess = proj.T @ y_rr @ proj + return grad, hess + + with self.assertRaisesRegex(ValueError, r'\bHessian does not match\b'): + minimize.least_squares(x0, residual, norm=SmoothL2BadHess(), output=out, + check_derivatives=True) + + class SmoothL2AsymHess(minimize.Norm): + def value(self, r): + return np.sqrt((r.T @ r).item() + p*p) - p + + def grad_hess(self, r, proj): + s = np.sqrt((r.T @ r).item() + p*p) + y_r = r / s + grad = proj.T @ y_r + y_rr = (np.eye(r.size) - (y_r + 0.0001) @ y_r.T) / s + hess = proj.T @ y_rr @ proj + return grad, hess + + with self.assertRaisesRegex(ValueError, r'\bnot symmetric\b'): + minimize.least_squares(x0, residual, norm=SmoothL2AsymHess(), output=out, + check_derivatives=True) + + class SmoothL2NegHess(minimize.Norm): + def value(self, r): + return np.sqrt((r.T @ r).item() + p*p) - p + + def grad_hess(self, r, proj): + s = np.sqrt((r.T @ r).item() + p*p) + y_r = r / s + grad = proj.T @ y_r + y_rr = -(np.eye(r.size) - y_r @ y_r.T) / s # Negative-definite. + hess = proj.T @ y_rr @ proj + return grad, hess + + with self.assertRaisesRegex(ValueError, r'\bnot positive definite\b'): + minimize.least_squares(x0, residual, norm=SmoothL2NegHess(), output=out, + check_derivatives=True) if __name__ == '__main__': absltest.main() From a40de1b230014cfa8164c4ef750be67f5fb55dfb Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Mon, 6 May 2024 16:35:33 -0700 Subject: [PATCH 07/62] Move notebook copyright notice into HTML comment. PiperOrigin-RevId: 631222581 Change-Id: I2fe86425677cf14cbfb72cb9d32b645682edc47f --- python/LQR.ipynb | 38 ++++++++++++++++---------------------- python/tutorial.ipynb | 38 ++++++++++++++++---------------------- 2 files changed, 32 insertions(+), 44 deletions(-) diff --git a/python/LQR.ipynb b/python/LQR.ipynb index 4c4cc402..b683444a 100644 --- a/python/LQR.ipynb +++ b/python/LQR.ipynb @@ -10,27 +10,22 @@ "\n", "#

LQR tutorial

\n", "\n", - "This notebook provides an example of an LQR controller using [**MuJoCo** physics](https://github.com/google-deepmind/mujoco#readme)." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "LBAvTJ0xHKy7" - }, - "source": [ - "### Copyright notice" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "_UbO9uhtBSX5" - }, - "source": [ - ">

Copyright 2022 DeepMind Technologies Limited

\n", - ">

Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

\n", - ">

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

" + "This notebook provides an example of an LQR controller using [**MuJoCo** physics](https://github.com/google-deepmind/mujoco#readme).\n", + "\n", + "" ] }, { @@ -935,7 +930,6 @@ "accelerator": "GPU", "colab": { "collapsed_sections": [ - "LBAvTJ0xHKy7", "QPdJNe3k62mx" ], "private_outputs": true diff --git a/python/tutorial.ipynb b/python/tutorial.ipynb index 12aa8ce7..3c6e4643 100644 --- a/python/tutorial.ipynb +++ b/python/tutorial.ipynb @@ -10,27 +10,22 @@ "\n", "#

Tutorial

\n", "\n", - "This notebook provides an introductory tutorial for [**MuJoCo** physics](https://github.com/google-deepmind/mujoco#readme), using the native Python bindings." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "xBSdkbmGN2K-" - }, - "source": [ - "### Copyright notice" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "_UbO9uhtBSX5" - }, - "source": [ - ">

Copyright 2022 DeepMind Technologies Limited.

\n", - ">

Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

\n", - ">

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

" + "This notebook provides an introductory tutorial for [**MuJoCo** physics](https://github.com/google-deepmind/mujoco#readme), using the native Python bindings.\n", + "\n", + "" ] }, { @@ -2122,7 +2117,6 @@ "accelerator": "GPU", "colab": { "collapsed_sections": [ - "xBSdkbmGN2K-", "YvyGCsgSCxHQ" ], "gpuClass": "premium", From ad0459680d07aaa4614185e7981a82ae9a2715c6 Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Tue, 7 May 2024 02:49:40 -0700 Subject: [PATCH 08/62] Enable compiler asset cache for public use, and add changelog entry. PiperOrigin-RevId: 631352810 Change-Id: If6208327499e3e4bd37cbb2a1b0cdcfb912c1056 --- doc/changelog.rst | 44 +++++++++++++++++++++++--------------------- src/user/user_api.cc | 12 +++++++++++- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/doc/changelog.rst b/doc/changelog.rst index 441c036d..a3b025ce 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -14,50 +14,52 @@ General 1. Added the :ref:`replicate` to MJCF, a :ref:`meta-element` which permits to repeat a subtree with incremental translational and rotational offsets. -2. Added ``mjModel.mesh_scale``: the scaling applied to asset vertices, as specified in the +2. Enabled an internal cache in the MuJoCo compiler resulting in recompilation speedup. Currently, processed + textures, hfields, and OBJ meshes are cached. Support for Unity environments is not yet available. +3. Added ``mjModel.mesh_scale``: the scaling applied to asset vertices, as specified in the :ref:`scale` attribute. -3. Added visual properties which are ignored by the native renderer, but can be used by external renderers: +4. Added visual properties which are ignored by the native renderer, but can be used by external renderers: - :ref:`light/bulbradius` attribute and corresponding ``mjModel.light_bulbradius`` field. - :ref:`material/metallic` attribute and corresponding ``mjModel.material_metallic`` field. - :ref:`material/roughness` attribute and corresponding ``mjModel.material_roughness`` field. -4. The type of the ``size`` argument of :ref:`mj_stackAllocNum` and :ref:`mj_stackAllocInt` was changed from ``int`` +5. The type of the ``size`` argument of :ref:`mj_stackAllocNum` and :ref:`mj_stackAllocInt` was changed from ``int`` to ``size_t``. -5. Added support for gmsh format version 2.2 surface meshes in :ref:`flexcomp`. +6. Added support for gmsh format version 2.2 surface meshes in :ref:`flexcomp`. MJX ^^^ .. admonition:: Breaking API changes :class: attention - 6. Removed deprecated ``mjx.device_get_into`` and ``mjx.device_put`` functions as they lack critical new + 7. Removed deprecated ``mjx.device_get_into`` and ``mjx.device_put`` functions as they lack critical new functionality. **Migration:** Use ``mjx.get_data_into`` instead of ``mjx.device_get_into``, and ``mjx.put_data`` instead of ``mjx.device_put``. -7. Added cylinder plane collisions. -8. Added ``efc_type`` to ``mjx.Data`` and ``dim``, ``efc_address`` to ``mjx.Contact``. -9. Added ``geom`` to ``mjx.Contact`` and marked ``geom1``, ``geom2`` deprecated. -10. Added ``ne``, ``nf``, ``nl``, ``nefc``, and ``ncon`` to ``mjx.Data`` to match ``mujoco.MjData``. -11. Given the above added fields, removed ``mjx.get_params``, ``mjx.ncon``, and ``mjx.count_constraints``. -12. Changed the way meshes are organized on device to speed up collision detection when a mesh is replicated for many +8. Added cylinder plane collisions. +9. Added ``efc_type`` to ``mjx.Data`` and ``dim``, ``efc_address`` to ``mjx.Contact``. +10. Added ``geom`` to ``mjx.Contact`` and marked ``geom1``, ``geom2`` deprecated. +11. Added ``ne``, ``nf``, ``nl``, ``nefc``, and ``ncon`` to ``mjx.Data`` to match ``mujoco.MjData``. +12. Given the above added fields, removed ``mjx.get_params``, ``mjx.ncon``, and ``mjx.count_constraints``. +13. Changed the way meshes are organized on device to speed up collision detection when a mesh is replicated for many geoms. -13. Fixed a bug where capsules might be ignored in broadphase colliision checking. -14. Added cylinder collisions using SDFs. -15. Added support for all :ref:`condim `: 1, 3, 4, 6. -16. Add support functions for ``id2name`` and ``name2id``, MJX versions of :ref:`mj_id2name` and :ref:`mj_name2id`. -17. Added support for :ref:`gravcomp` and :ref:`actuatorgravcomp`. -18. Fixed a bug in ``mjx.ray`` for sometimes allowed negative distances for ray-mesh tests. +14. Fixed a bug where capsules might be ignored in broadphase colliision checking. +15. Added cylinder collisions using SDFs. +16. Added support for all :ref:`condim `: 1, 3, 4, 6. +17. Add support functions for ``id2name`` and ``name2id``, MJX versions of :ref:`mj_id2name` and :ref:`mj_name2id`. +18. Added support for :ref:`gravcomp` and :ref:`actuatorgravcomp`. +19. Fixed a bug in ``mjx.ray`` for sometimes allowed negative distances for ray-mesh tests. Bug fixes ^^^^^^^^^ -19. Defaults of lights were not being saved, now fixed. -20. Prevent overwriting of frame names by body names when saving an XML. Bug introduced in 3.1.4. -21. Fixed bug in Python binding of :ref:`mj_saveModel`: ``buffer`` argument was documented as optional but was actually +20. Defaults of lights were not being saved, now fixed. +21. Prevent overwriting of frame names by body names when saving an XML. Bug introduced in 3.1.4. +22. Fixed bug in Python binding of :ref:`mj_saveModel`: ``buffer`` argument was documented as optional but was actually not optional. -22. Fixed bug that prevented memory allocations larger than 2.15 GB. +23. Fixed bug that prevented memory allocations larger than 2.15 GB. Version 3.1.4 (April 10th, 2024) diff --git a/src/user/user_api.cc b/src/user/user_api.cc index 2c448edd..abc6e23c 100644 --- a/src/user/user_api.cc +++ b/src/user/user_api.cc @@ -29,6 +29,9 @@ #include "user/user_cache.h" #include "xml/xml_util.h" +// global cache size in bytes (default 500MB) +static constexpr std::size_t kGlobalCacheSize = 500 * (1 << 20); + // prepend prefix template @@ -698,5 +701,12 @@ void mj_setCacheSize(mjCache cache, std::size_t size) { mjCache mj_globalCache() { - return NULL; // currently disabled + // mjCCache is not trivially destructible and so the global cache needs to + // allocated on the heap + if constexpr (kGlobalCacheSize) { + static mjCCache* cache = new(std::nothrow) mjCCache(kGlobalCacheSize); + return (mjCache) cache; + } else { + return NULL; + } } From dbb258eb69cfb9729c9f2dd163c58d424b53ec81 Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Tue, 7 May 2024 04:58:59 -0700 Subject: [PATCH 09/62] Fix compile-time `size_t` narrowing to `bool`. PiperOrigin-RevId: 631381101 Change-Id: I5188c352354573476decb8ae6bc007faf623a884 --- src/user/user_api.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user/user_api.cc b/src/user/user_api.cc index abc6e23c..158e35f1 100644 --- a/src/user/user_api.cc +++ b/src/user/user_api.cc @@ -703,7 +703,7 @@ void mj_setCacheSize(mjCache cache, std::size_t size) { mjCache mj_globalCache() { // mjCCache is not trivially destructible and so the global cache needs to // allocated on the heap - if constexpr (kGlobalCacheSize) { + if constexpr (kGlobalCacheSize != 0) { static mjCCache* cache = new(std::nothrow) mjCCache(kGlobalCacheSize); return (mjCache) cache; } else { From 4647f79c55e1881fa7f3e47d9d36d6f1b347a3ff Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Tue, 7 May 2024 06:21:38 -0700 Subject: [PATCH 10/62] Update MarchingCubeCpp to version f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d. PiperOrigin-RevId: 631401047 Change-Id: I3e82f7f1188470f8c40bd2e6ce1df2bd813c96c5 --- cmake/MujocoDependencies.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake index 44962272..06dda175 100644 --- a/cmake/MujocoDependencies.cmake +++ b/cmake/MujocoDependencies.cmake @@ -27,7 +27,7 @@ set(MUJOCO_DEP_VERSION_tinyobjloader CACHE STRING "Version of `tinyobjloader` to be fetched." ) set(MUJOCO_DEP_VERSION_MarchingCubeCpp - 5b79e5d6bded086a0abe276a4b5a69fc17ae9bf1 + f03a1b3ec29b1d7d865691ca8aea4f1eb2c2873d CACHE STRING "Version of `MarchingCubeCpp` to be fetched." ) set(MUJOCO_DEP_VERSION_ccd From 8d896529f0a17c8bf203497eeb1494690f662f41 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Tue, 7 May 2024 07:15:24 -0700 Subject: [PATCH 11/62] Replace `.copy()` with `list()` in `minimize.py` PiperOrigin-RevId: 631413376 Change-Id: I06dd3e3897078b57b0a0668b2182fa62dcd4a74e --- python/mujoco/minimize.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/python/mujoco/minimize.py b/python/mujoco/minimize.py index 377733f6..60ffae98 100644 --- a/python/mujoco/minimize.py +++ b/python/mujoco/minimize.py @@ -18,7 +18,7 @@ import abc import dataclasses import enum import time -from typing import Callable, List, Optional, TextIO, Tuple, Union +from typing import Callable, List, Optional, Sequence, TextIO, Tuple, Union import mujoco import numpy as np @@ -138,7 +138,7 @@ class Quadratic(Norm): def least_squares( x0: np.ndarray, residual: Callable[[np.ndarray], np.ndarray], - bounds: Optional[List[np.ndarray]] = None, + bounds: Optional[Sequence[np.ndarray]] = None, jacobian: Optional[Callable[[np.ndarray, np.ndarray], np.ndarray]] = None, norm: Norm = Quadratic(), eps: float = 1e-6, @@ -221,7 +221,7 @@ def least_squares( return mu, n_reduc # Make local copy of bounds to avoid reshaping user input. - bounds = None if bounds is None else bounds.copy() + bounds = None if bounds is None else list(bounds) if bounds is not None: # Checks bounds. if len(bounds) != 2: From 24bc1c8b5271b90a10d6279b151ea48f4c21b584 Mon Sep 17 00:00:00 2001 From: Erik Frey Date: Tue, 7 May 2024 09:59:32 -0700 Subject: [PATCH 12/62] Add new differentiable physics tutorial to readme. PiperOrigin-RevId: 631458983 Change-Id: Ic0ef9e93397a974be50f0616571a4a5fea6f2b21 --- README.md | 7 ++++--- doc/changelog.rst | 10 ++++++---- mjx/training_apg.ipynb | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ecd22c72..7ce14c2d 100644 --- a/README.md +++ b/README.md @@ -50,16 +50,17 @@ your machine. If you are a Python user, you might want to start with our tutorial notebooks running on Google Colab: - - The **introductory tutorial** teaches MuJoCo basics: + - The **introductory** tutorial teaches MuJoCo basics: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/tutorial.ipynb) - The **LQR** tutorial synthesizes a linear-quadratic controller, balancing a humanoid on one leg: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/LQR.ipynb) - The **least-squares** tutorial explains how to use the Python-based nonlinear least-squares solver: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/python/least_squares.ipynb) - The **MJX** tutorial provides usage examples of - [MuJoCo XLA](https://mujoco.readthedocs.io/en/stable/mjx.html), a branch of MuJoCo written in - JAX: + [MuJoCo XLA](https://mujoco.readthedocs.io/en/stable/mjx.html), a branch of MuJoCo written in JAX: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/mjx/tutorial.ipynb) + - The **differentiable physics** tutorial trains locomotion policies with analytical gradients automatically derived from MuJoCo's physics step: + [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google-deepmind/mujoco/blob/main/mjx/training_apg.ipynb) ## Installation diff --git a/doc/changelog.rst b/doc/changelog.rst index a3b025ce..07e2cc9d 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -52,14 +52,16 @@ MJX 17. Add support functions for ``id2name`` and ``name2id``, MJX versions of :ref:`mj_id2name` and :ref:`mj_name2id`. 18. Added support for :ref:`gravcomp` and :ref:`actuatorgravcomp`. 19. Fixed a bug in ``mjx.ray`` for sometimes allowed negative distances for ray-mesh tests. +20. Added a new `differentiable physics tutorial `__ that demonstrates training locomotion policies with analytical gradients + automatically derived from the MJX physics step. Contribution by :github:user:`Andrew-Luo1`. Bug fixes ^^^^^^^^^ -20. Defaults of lights were not being saved, now fixed. -21. Prevent overwriting of frame names by body names when saving an XML. Bug introduced in 3.1.4. -22. Fixed bug in Python binding of :ref:`mj_saveModel`: ``buffer`` argument was documented as optional but was actually +21. Defaults of lights were not being saved, now fixed. +22. Prevent overwriting of frame names by body names when saving an XML. Bug introduced in 3.1.4. +23. Fixed bug in Python binding of :ref:`mj_saveModel`: ``buffer`` argument was documented as optional but was actually not optional. -23. Fixed bug that prevented memory allocations larger than 2.15 GB. +24. Fixed bug that prevented memory allocations larger than 2.15 GB. Version 3.1.4 (April 10th, 2024) diff --git a/mjx/training_apg.ipynb b/mjx/training_apg.ipynb index d7cfac89..26879392 100644 --- a/mjx/training_apg.ipynb +++ b/mjx/training_apg.ipynb @@ -1,6 +1,39 @@ { "cells": [ { + "cell_type": "markdown", + "metadata": { + "id": "MpkYHwCqk7W-" + }, + "source": [ + "![MuJoCo banner](https://raw.githubusercontent.com/google-deepmind/mujoco/main/banner.png)\n", + "\n", + "#

Tutorial

\n", + "\n", + "This notebook provides a tutorial for differentiable physics for policy learning in [**MuJoCo XLA (MJX)**](https://github.com/google-deepmind/mujoco/blob/main/mjx), a JAX-based implementation of MuJoCo.\n", + "\n", + "**A Colab runtime with GPU acceleration is required.** If you're using a CPU-only runtime, you can switch using the menu \"Runtime > Change runtime type\".\n", + "\n", + "\n", + "This notebook was written by [Jing Yuan Luo](https://github.com/Andrew-Luo1).\n", + "\n", + "\u003c!-- Copyright 2021 DeepMind Technologies Limited\n", + "\n", + " Licensed under the Apache License, Version 2.0 (the \"License\");\n", + " you may not use this file except in compliance with the License.\n", + " You may obtain a copy of the License at\n", + "\n", + " http://www.apache.org/licenses/LICENSE-2.0\n", + "\n", + " Unless required by applicable law or agreed to in writing, software\n", + " distributed under the License is distributed on an \"AS IS\" BASIS,\n", + " WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", + " See the License for the specific language governing permissions and\n", + " limitations under the License.\n", + "--\u003e" + ] + }, + { "cell_type": "markdown", "metadata": {}, "source": [ From efbcd86e29602e1f5a1f882c6bdb54d7ab9da254 Mon Sep 17 00:00:00 2001 From: Meghha Dhoke Date: Tue, 7 May 2024 11:39:47 -0700 Subject: [PATCH 13/62] Update abseil to LTS 20240116.2. This is a minor update to the previous version, LTS 20240116.1. The only change is a fix for a bug in the `absl::StrFormat` function. PiperOrigin-RevId: 631495397 Change-Id: I28aec52fb526a2168900a4ee93ffc6e11650a3be --- cmake/MujocoDependencies.cmake | 2 +- python/mujoco/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake index 06dda175..4efe7c87 100644 --- a/cmake/MujocoDependencies.cmake +++ b/cmake/MujocoDependencies.cmake @@ -44,7 +44,7 @@ set(MUJOCO_DEP_VERSION_Eigen3 ) set(MUJOCO_DEP_VERSION_abseil - 2f9e432cce407ce0ae50676696666f33a77d42ac # LTS 20240116.1 + d7aaad83b488fd62bd51c81ecf16cd938532cc0a # LTS 20240116.2 CACHE STRING "Version of `abseil` to be fetched." ) diff --git a/python/mujoco/CMakeLists.txt b/python/mujoco/CMakeLists.txt index 7ebe3bdb..64a6fc91 100644 --- a/python/mujoco/CMakeLists.txt +++ b/python/mujoco/CMakeLists.txt @@ -140,7 +140,7 @@ findorfetch( GIT_REPO https://github.com/abseil/abseil-cpp GIT_TAG - 2f9e432cce407ce0ae50676696666f33a77d42ac # LTS 20240116.1 + d7aaad83b488fd62bd51c81ecf16cd938532cc0a # LTS 20240116.2 TARGETS ${MUJOCO_PYTHON_ABSL_TARGETS} EXCLUDE_FROM_ALL From e001975f083e769898811763c4c887afb52523c2 Mon Sep 17 00:00:00 2001 From: Meghha Dhoke Date: Tue, 7 May 2024 11:46:17 -0700 Subject: [PATCH 14/62] Update changelog for MuJoCo 3.1.5 PiperOrigin-RevId: 631497384 Change-Id: I04bf6d0a4e744ab61becda5212e76b30c392f5b2 --- doc/changelog.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/changelog.rst b/doc/changelog.rst index 07e2cc9d..bf37db43 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -2,8 +2,8 @@ Changelog ========= -Upcoming version (not yet released) ------------------------------------ +Version 3.1.5 (May 7, 2024) +--------------------------- General ^^^^^^^ From 4eca3b048d13cbd5d75d333a4a3502cb70d87b11 Mon Sep 17 00:00:00 2001 From: Meghha Dhoke Date: Tue, 7 May 2024 14:10:30 -0700 Subject: [PATCH 15/62] Bumping mjVERSIONSTRING from 3.1.5 to version 3.1.6 PiperOrigin-RevId: 631544334 Change-Id: Iadf8fa25e30da5b00172c8212786b1f9edb22e1a --- CMakeLists.txt | 2 +- dist/mujoco.rc | 8 ++++---- dist/simulate.rc | 8 ++++---- doc/APIreference/APIglobals.rst | 2 +- doc/unity.rst | 4 ++-- include/mujoco/mujoco.h | 2 +- mjx/pyproject.toml | 8 ++++---- python/mujoco/CMakeLists.txt | 4 ++-- python/mujoco/mjpython/Info.plist | 8 ++++---- python/pyproject.toml | 6 +++--- sample/CMakeLists.txt | 2 +- simulate/CMakeLists.txt | 2 +- src/engine/engine_support.c | 4 ++-- unity/Editor/Bindings/MujocoBinaryRetriever.cs | 4 ++-- unity/Runtime/Bindings/MjBindings.cs | 2 +- unity/package.json | 2 +- 16 files changed, 34 insertions(+), 34 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f7da3fcd..c1ac72a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ set(MSVC_INCREMENTAL_DEFAULT ON) project( mujoco - VERSION 3.1.5 + VERSION 3.1.6 DESCRIPTION "MuJoCo Physics Simulator" HOMEPAGE_URL "https://mujoco.org" ) diff --git a/dist/mujoco.rc b/dist/mujoco.rc index 51760163..6ae69239 100644 --- a/dist/mujoco.rc +++ b/dist/mujoco.rc @@ -1,6 +1,6 @@ 1 VERSIONINFO -FILEVERSION 3,1,5,0 -PRODUCTVERSION 3,1,5,0 +FILEVERSION 3,1,6,0 +PRODUCTVERSION 3,1,6,0 FILEOS 0x4 FILETYPE 0x1 { @@ -9,9 +9,9 @@ FILETYPE 0x1 BLOCK "040904b0" { VALUE "ProductName", "MuJoCo" - VALUE "ProductVersion", "3.1.5" + VALUE "ProductVersion", "3.1.6" VALUE "FileDescription", "MuJoCo" - VALUE "FileVersion", "3.1.5" + VALUE "FileVersion", "3.1.6" VALUE "InternalName", "mujoco.dll" VALUE "OriginalFilename", "mujoco.dll" VALUE "CompanyName", "Google DeepMind" diff --git a/dist/simulate.rc b/dist/simulate.rc index 636f1d2f..68633346 100644 --- a/dist/simulate.rc +++ b/dist/simulate.rc @@ -1,8 +1,8 @@ MUJOCO ICON "mujoco.ico" 1 VERSIONINFO -FILEVERSION 3,1,5,0 -PRODUCTVERSION 3,1,5,0 +FILEVERSION 3,1,6,0 +PRODUCTVERSION 3,1,6,0 FILEOS 0x4 FILETYPE 0x1 { @@ -11,9 +11,9 @@ FILETYPE 0x1 BLOCK "040904b0" { VALUE "ProductName", "MuJoCo" - VALUE "ProductVersion", "3.1.5" + VALUE "ProductVersion", "3.1.6" VALUE "FileDescription", "MuJoCo" - VALUE "FileVersion", "3.1.5" + VALUE "FileVersion", "3.1.6" VALUE "InternalName", "simulate.exe" VALUE "OriginalFilename", "simulate.exe" VALUE "CompanyName", "Google DeepMind" diff --git a/doc/APIreference/APIglobals.rst b/doc/APIreference/APIglobals.rst index 993d47f8..9f534b5a 100644 --- a/doc/APIreference/APIglobals.rst +++ b/doc/APIreference/APIglobals.rst @@ -522,7 +522,7 @@ shown in the table below. Their names are in the format ``mjKEY_XXX``. They corr - Maximum number of UI rectangles. Defined in `mjui.h `_. * - ``mjVERSION_HEADER`` - - 315 + - 316 - The version of the MuJoCo headers; changes with every release. This is an integer equal to 100x the software version, so 210 corresponds to version 2.1. Defined in mujoco.h. The API function :ref:`mj_version` returns a number with the same meaning but for the compiled library. diff --git a/doc/unity.rst b/doc/unity.rst index 823d4e91..496d9d3f 100644 --- a/doc/unity.rst +++ b/doc/unity.rst @@ -30,14 +30,14 @@ _____ The MuJoCo app needs to be run at least once before the native library can be used, in order to register the library as a trusted binary. Then, copy the dynamic library file from -``/Applications/MuJoCo.app/Contents/Frameworks/mujoco.framework/Versions/Current/libmujoco.3.1.5.dylib`` (it can be +``/Applications/MuJoCo.app/Contents/Frameworks/mujoco.framework/Versions/Current/libmujoco.3.1.6.dylib`` (it can be found by browsing the contents of ``MuJoCo.app``) and rename it as ``mujoco.dylib``. Linux _____ Expand the ``tar.gz`` archive to ``~/.mujoco``. Then copy the dynamic library from -``~/.mujoco/mujoco-3.1.5/lib/libmujoco.so.3.1.5`` and rename it as ``libmujoco.so``. +``~/.mujoco/mujoco-3.1.6/lib/libmujoco.so.3.1.6`` and rename it as ``libmujoco.so``. Windows _______ diff --git a/include/mujoco/mujoco.h b/include/mujoco/mujoco.h index 9c07ed37..ac5ed0b2 100644 --- a/include/mujoco/mujoco.h +++ b/include/mujoco/mujoco.h @@ -24,7 +24,7 @@ extern "C" { #endif // header version; should match the library version as returned by mj_version() -#define mjVERSION_HEADER 315 +#define mjVERSION_HEADER 316 // needed to define size_t, fabs and log10 #include diff --git a/mjx/pyproject.toml b/mjx/pyproject.toml index a321075d..f4fd5783 100644 --- a/mjx/pyproject.toml +++ b/mjx/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name="mujoco-mjx" -version = "3.1.5" +version = "3.1.6" authors = [ {name = "Google DeepMind", email = "mujoco@deepmind.com"}, ] @@ -31,7 +31,7 @@ dependencies = [ "etils[epath]", "jax", "jaxlib", - "mujoco>=3.1.5.dev0", + "mujoco>=3.1.6.dev0", "scipy", "trimesh", ] @@ -42,6 +42,6 @@ mjx-viewer = "mujoco.mjx.viewer:main" [project.urls] Homepage = "https://github.com/google-deepmind/mujoco/tree/main/mjx" -Documentation = "https://mujoco.readthedocs.io/en/3.1.5" +Documentation = "https://mujoco.readthedocs.io/en/3.1.6" Repository = "https://github.com/google-deepmind/mujoco/tree/main/mjx" -Changelog = "https://mujoco.readthedocs.io/en/3.1.5/changelog.html" +Changelog = "https://mujoco.readthedocs.io/en/3.1.6/changelog.html" diff --git a/python/mujoco/CMakeLists.txt b/python/mujoco/CMakeLists.txt index 64a6fc91..21ee692c 100644 --- a/python/mujoco/CMakeLists.txt +++ b/python/mujoco/CMakeLists.txt @@ -84,7 +84,7 @@ if(NOT TARGET mujoco) if(MUJOCO_FRAMEWORK) message("MuJoCo framework is at ${MUJOCO_FRAMEWORK}/mujoco.framework") set(MUJOCO_LIBRARY - ${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.1.5.dylib + ${MUJOCO_FRAMEWORK}/mujoco.framework/Versions/A/libmujoco.3.1.6.dylib ) target_compile_options(mujoco INTERFACE -F${MUJOCO_FRAMEWORK}) endif() @@ -92,7 +92,7 @@ if(NOT TARGET mujoco) if(NOT MUJOCO_FRAMEWORK) find_library( - MUJOCO_LIBRARY mujoco mujoco.3.1.5 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED + MUJOCO_LIBRARY mujoco mujoco.3.1.6 HINTS ${MUJOCO_LIBRARY_DIR} REQUIRED ) find_path(MUJOCO_INCLUDE mujoco/mujoco.h HINTS ${MUJOCO_INCLUDE_DIR} REQUIRED) message("MuJoCo is at ${MUJOCO_LIBRARY}") diff --git a/python/mujoco/mjpython/Info.plist b/python/mujoco/mjpython/Info.plist index 272f0260..c1bfaaed 100644 --- a/python/mujoco/mjpython/Info.plist +++ b/python/mujoco/mjpython/Info.plist @@ -7,13 +7,13 @@ CFBundleIdentifier org.mujoco.mjpython CFBundleVersion - 3.1.5 + 3.1.6 CFBundleGetInfoString - 3.1.5 + 3.1.6 CFBundleLongVersionString - 3.1.5 + 3.1.6 CFBundleShortVersionString - 3.1.5 + 3.1.6 CFBundleExecutable mjpython CFBundleIconFile diff --git a/python/pyproject.toml b/python/pyproject.toml index 8b6a36f0..8d134c8e 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "mujoco" -version = "3.1.5" +version = "3.1.6" authors = [ {name = "Google DeepMind", email = "mujoco@deepmind.com"}, ] @@ -36,9 +36,9 @@ dynamic = ["readme", "scripts"] [project.urls] Homepage = "https://github.com/google-deepmind/mujoco" -Documentation = "https://mujoco.readthedocs.io/en/3.1.5" +Documentation = "https://mujoco.readthedocs.io/en/3.1.6" Repository = "https://github.com/google-deepmind/mujoco" -Changelog = "https://mujoco.readthedocs.io/en/3.1.5/changelog.html" +Changelog = "https://mujoco.readthedocs.io/en/3.1.6/changelog.html" [tool.setuptools] include-package-data = false diff --git a/sample/CMakeLists.txt b/sample/CMakeLists.txt index fabb145d..6924e0a0 100644 --- a/sample/CMakeLists.txt +++ b/sample/CMakeLists.txt @@ -24,7 +24,7 @@ set(MSVC_INCREMENTAL_DEFAULT ON) project( mujoco_samples - VERSION 3.1.5 + VERSION 3.1.6 DESCRIPTION "MuJoCo samples binaries" HOMEPAGE_URL "https://mujoco.org" ) diff --git a/simulate/CMakeLists.txt b/simulate/CMakeLists.txt index 4b23bf0a..7085897b 100644 --- a/simulate/CMakeLists.txt +++ b/simulate/CMakeLists.txt @@ -29,7 +29,7 @@ set(MUJOCO_DEP_VERSION_lodepng project( mujoco_simulate - VERSION 3.1.5 + VERSION 3.1.6 DESCRIPTION "MuJoCo simulate binaries" HOMEPAGE_URL "https://mujoco.org" ) diff --git a/src/engine/engine_support.c b/src/engine/engine_support.c index e9caecba..ba2f6a8a 100644 --- a/src/engine/engine_support.c +++ b/src/engine/engine_support.c @@ -38,8 +38,8 @@ //-------------------------- Constants ------------------------------------------------------------- - #define mjVERSION 315 -#define mjVERSIONSTRING "3.1.5" + #define mjVERSION 316 +#define mjVERSIONSTRING "3.1.6" // names of disable flags const char* mjDISABLESTRING[mjNDISABLE] = { diff --git a/unity/Editor/Bindings/MujocoBinaryRetriever.cs b/unity/Editor/Bindings/MujocoBinaryRetriever.cs index e9741b75..2a5d3568 100644 --- a/unity/Editor/Bindings/MujocoBinaryRetriever.cs +++ b/unity/Editor/Bindings/MujocoBinaryRetriever.cs @@ -37,7 +37,7 @@ public class MujocoBinaryRetriever { if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/mujoco.dylib") == null) { File.Copy( "/Applications/MuJoCo.app/Contents/Frameworks" + - "/mujoco.framework/Versions/Current/libmujoco.3.1.5.dylib", + "/mujoco.framework/Versions/Current/libmujoco.3.1.6.dylib", mujocoPath + "/mujoco.dylib"); AssetDatabase.Refresh(); } @@ -45,7 +45,7 @@ public class MujocoBinaryRetriever { if (AssetDatabase.LoadMainAssetAtPath(mujocoPath + "/libmujoco.so") == null) { File.Copy( Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + - "/.mujoco/mujoco-3.1.5/lib/libmujoco.so.3.1.5", + "/.mujoco/mujoco-3.1.6/lib/libmujoco.so.3.1.6", mujocoPath + "/libmujoco.so"); AssetDatabase.Refresh(); } diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index 6990132b..79dac388 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -108,7 +108,7 @@ public const int mjMAXLINEPNT = 1000; public const int mjMAXPLANEGRID = 200; public const bool THIRD_PARTY_MUJOCO_MJXMACRO_H_ = true; public const bool THIRD_PARTY_MUJOCO_MUJOCO_H_ = true; -public const int mjVERSION_HEADER = 315; +public const int mjVERSION_HEADER = 316; // ------------------------------------Enums------------------------------------ diff --git a/unity/package.json b/unity/package.json index 0300752a..a4c0308a 100644 --- a/unity/package.json +++ b/unity/package.json @@ -1,7 +1,7 @@ { "name": "org.mujoco", "displayName": "MuJoCo", - "version": "3.1.5", + "version": "3.1.6", "description": "MuJoCo importer and runtime plug-in", "dependencies": {}, "author": { From 96844db926ae3808955607f14fbb7daa9bb3b89c Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Wed, 8 May 2024 04:12:04 -0700 Subject: [PATCH 16/62] Update BVH during fusestatic. Fixes #1069 and #1577. PiperOrigin-RevId: 631748750 Change-Id: I4e1ae01207568c90fc49bcd7d9f760f5187f1afa --- doc/changelog.rst | 9 +++++++++ src/user/user_model.cc | 8 +++++++- src/user/user_objects.cc | 27 +++++++++++++++++++-------- src/user/user_objects.h | 3 +++ test/user/user_model_test.cc | 4 ++++ 5 files changed, 42 insertions(+), 9 deletions(-) diff --git a/doc/changelog.rst b/doc/changelog.rst index bf37db43..c6473e62 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -2,6 +2,15 @@ Changelog ========= +Upcoming version (not yet released) +----------------------------------- + +Bug fixes +^^^^^^^^^ + +1. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is + often the case for URDF imports. + Version 3.1.5 (May 7, 2024) --------------------------- diff --git a/src/user/user_model.cc b/src/user/user_model.cc index ec58d4c8..cf525376 100644 --- a/src/user/user_model.cc +++ b/src/user/user_model.cc @@ -2969,12 +2969,18 @@ void mjCModel::FuseStatic(void) { // recompute parent contype, conaffinity, and margin par->contype = par->conaffinity = 0; par->margin = 0; - for (const auto& geom : geoms) { + for (const auto& geom : par->geoms) { par->contype |= geom->contype; par->conaffinity |= geom->conaffinity; par->margin = mju_max(par->margin, geom->margin); } + // recompute BVH + int nbvhfuse = body->tree.nbvh + par->tree.nbvh; + par->ComputeBVH(); + nbvhstatic += par->tree.nbvh - nbvhfuse; + nbvh += par->tree.nbvh - nbvhfuse; + //------------- delete body (without deleting children) // delete allocation diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index db747ab3..438b5e7b 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -399,6 +399,7 @@ void mjCBoundingVolumeHierarchy::Set(mjtNum ipos_element[3], mjtNum iquat_elemen void mjCBoundingVolumeHierarchy::AllocateBoundingVolumes(int nleaf) { nbvh = 0; + bvh.clear(); child.clear(); nodeid.clear(); level.clear(); @@ -1333,6 +1334,23 @@ void mjCBody::MakeInertialExplicit() { } + +// compute bounding volume hierarchy +void mjCBody::ComputeBVH() { + if (geoms.empty()) { + return; + } + + tree.Set(ipos, iquat); + tree.AllocateBoundingVolumes(geoms.size()); + for (int i=0; iSetBoundingVolume(tree.GetBoundingVolume(i)); + } + tree.CreateBVH(); +} + + + // compiler void mjCBody::Compile(void) { CopyFromSpec(); @@ -1447,14 +1465,7 @@ void mjCBody::Compile(void) { } // compute bounding volume hierarchy - if (!geoms.empty()) { - tree.Set(ipos, iquat); - tree.AllocateBoundingVolumes(geoms.size()); - for (int i=0; iSetBoundingVolume(tree.GetBoundingVolume(i)); - } - tree.CreateBVH(); - } + ComputeBVH(); // compile all joints, count dofs dofnum = 0; diff --git a/src/user/user_objects.h b/src/user/user_objects.h index 068b1502..644f8898 100644 --- a/src/user/user_objects.h +++ b/src/user/user_objects.h @@ -293,6 +293,9 @@ class mjCBody : public mjCBody_, private mjsBody { // set explicitinertial to true void MakeInertialExplicit(); + // compute the bounding volume hierarchy of the body. + void ComputeBVH(); + // variables set by user mjsBody spec; diff --git a/test/user/user_model_test.cc b/test/user/user_model_test.cc index d50b123e..22b46ec0 100644 --- a/test/user/user_model_test.cc +++ b/test/user/user_model_test.cc @@ -251,6 +251,7 @@ TEST_F(FuseStaticTest, FuseStaticEquivalent) { + @@ -273,6 +274,9 @@ TEST_F(FuseStaticTest, FuseStaticEquivalent) { EXPECT_EQ(m_fuse->body_contype[1], 1); EXPECT_EQ(m_fuse->body_conaffinity[1], 1); + EXPECT_EQ(m_no_fuse->body_bvhnum[2], 3); + EXPECT_EQ(m_fuse->body_bvhnum[1], 3); + mjData* d_fuse = mj_makeData(m_fuse); mjData* d_no_fuse = mj_makeData(m_no_fuse); From 13bf9ae6bd8f3d6d2091075622e34954bd1412db Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Wed, 8 May 2024 05:01:13 -0700 Subject: [PATCH 17/62] Encapsulate mjCModel internal lists. PiperOrigin-RevId: 631760335 Change-Id: I9b67f6ed2e65a01877de15a92a04a1b31a6b3ff4 --- src/user/user_api.cc | 10 +- src/user/user_composite.cc | 22 +- src/user/user_flexcomp.cc | 2 +- src/user/user_mesh.cc | 10 +- src/user/user_model.cc | 1194 ++++++++++++++++------------------ src/user/user_model.h | 140 ++-- src/user/user_objects.cc | 30 +- src/user/user_objects.h | 198 +++--- src/xml/xml_native_writer.cc | 24 +- 9 files changed, 809 insertions(+), 821 deletions(-) diff --git a/src/user/user_api.cc b/src/user/user_api.cc index 158e35f1..7fd88e36 100644 --- a/src/user/user_api.cc +++ b/src/user/user_api.cc @@ -429,8 +429,8 @@ mjsPlugin* mjs_addPlugin(mjSpec* s) { // add default to model mjsDefault* mjs_addDefault(mjSpec* s, const char* classname, int parentid, int* id) { mjCModel* modelC = static_cast(s->element); - *id = (int)modelC->defaults.size(); - mjCDef* def = modelC->AddDef(classname, parentid); + *id = (int)modelC->Defaults().size(); + mjCDef* def = modelC->AddDefault(classname, parentid); if (def) { return &def->spec; } else { @@ -457,7 +457,7 @@ mjsDefault* mjs_getDefault(mjElement* element) { // Find default with given name in model. mjsDefault* mjs_findDefault(mjSpec* s, const char* classname) { mjCModel* modelC = static_cast(s->element); - mjCDef* cdef = modelC->FindDef(classname); + mjCDef* cdef = modelC->FindDefault(classname); if (!cdef) { return nullptr; } @@ -469,7 +469,7 @@ mjsDefault* mjs_findDefault(mjSpec* s, const char* classname) { // get default[0] from model mjsDefault* mjs_getSpecDefault(mjSpec* s) { mjCModel* modelC = static_cast(s->element); - mjCDef* def = modelC->defaults[0]; + mjCDef* def = modelC->Defaults()[0]; if (!def) { return nullptr; } @@ -677,7 +677,7 @@ void mjs_setActivePlugins(mjSpec* s, void* activeplugins) { mjCModel* modelC = static_cast(s->element); std::vector>* active_plugins = reinterpret_cast>*>(activeplugins); - modelC->active_plugins = std::move(*active_plugins); + modelC->SetActivePlugins(std::move(*active_plugins)); } diff --git a/src/user/user_composite.cc b/src/user/user_composite.cc index 21c3cb6d..01bbcf20 100644 --- a/src/user/user_composite.cc +++ b/src/user/user_composite.cc @@ -561,7 +561,7 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjsBody* body, char* error, int // create tendon mjsTendon* ten = mjs_addTendon(&model->spec, &def[mjCOMPKIND_TENDON].spec); - mjs_setDefault(ten->element, &model->defaults[0]->spec); + mjs_setDefault(ten->element, &model->Defaults()[0]->spec); mjs_setString(ten->name, txt0); ten->group = 4; mjs_wrapSite(ten, txt1); @@ -569,7 +569,7 @@ bool mjCComposite::MakeParticle(mjCModel* model, mjsBody* body, char* error, int // add equality constraint mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec); - mjs_setDefault(eq->element, &model->defaults[0]->spec); + mjs_setDefault(eq->element, &model->Defaults()[0]->spec); eq->type = mjEQ_TENDON; mjs_setString(eq->name1, mjs_getString(ten->name)); } @@ -675,7 +675,7 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjsBody* body, char* error, int err // create tendon mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_TENDON); - ten->def = model->defaults[0]; + ten->def = model->Defaults()[0]; mju::sprintf_arr(txt, "%sT%d_%d_%d", prefix.c_str(), i, ix, iy); ten->name = txt; ten->WrapSite(txt1); @@ -683,7 +683,7 @@ bool mjCComposite::MakeGrid(mjCModel* model, mjsBody* body, char* error, int err // add equality constraint mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec); - mjs_setDefault(eq->element, &model->defaults[0]->spec); + mjs_setDefault(eq->element, &model->Defaults()[0]->spec); eq->type = mjEQ_TENDON; mjs_setString(eq->name1, ten->name.c_str()); } @@ -1045,7 +1045,7 @@ mjsBody* mjCComposite::AddRopeBody(mjCModel* model, mjsBody* body, int ix, int i // add constraint mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_TWIST].spec); - mjs_setDefault(eq->element, &model->defaults[0]->spec); + mjs_setDefault(eq->element, &model->Defaults()[0]->spec); eq->type = mjEQ_JOINT; mjs_setString(eq->name1, mjs_getString(jnt->name)); } @@ -1063,7 +1063,7 @@ mjsBody* mjCComposite::AddRopeBody(mjCModel* model, mjsBody* body, int ix, int i // add constraint mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_STRETCH].spec); - mjs_setDefault(eq->element, &model->defaults[0]->spec); + mjs_setDefault(eq->element, &model->Defaults()[0]->spec); eq->type = mjEQ_JOINT; mjs_setString(eq->name1, mjs_getString(jnt->name)); } @@ -1131,7 +1131,7 @@ bool mjCComposite::MakeBox(mjCModel* model, mjsBody* body, char* error, int erro // fixed tendon for all joints mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_TENDON); - ten->def = model->defaults[0]; + ten->def = model->Defaults()[0]; mju::sprintf_arr(txt, "%sT", prefix.c_str()); ten->name = txt; @@ -1184,7 +1184,7 @@ bool mjCComposite::MakeBox(mjCModel* model, mjsBody* body, char* error, int erro // add fix constraint mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_JOINT].spec); - mjs_setDefault(eq->element, &model->defaults[0]->spec); + mjs_setDefault(eq->element, &model->Defaults()[0]->spec); eq->type = mjEQ_JOINT; mjs_setString(eq->name1, mjs_getString(jnt->name)); @@ -1218,7 +1218,7 @@ bool mjCComposite::MakeBox(mjCModel* model, mjsBody* body, char* error, int erro // finalize fixed tendon mjsEquality* eqt = mjs_addEquality(&model->spec, &def[mjCOMPKIND_TENDON].spec); - mjs_setDefault(eqt->element, &model->defaults[0]->spec); + mjs_setDefault(eqt->element, &model->Defaults()[0]->spec); eqt->type = mjEQ_TENDON; mjs_setString(eqt->name1, ten->name.c_str()); @@ -1244,7 +1244,7 @@ void mjCComposite::MakeShear(mjCModel* model) { // create tendon mjCTendon* ten = model->AddTendon(def + mjCOMPKIND_SHEAR); - ten->def = model->defaults[0]; + ten->def = model->Defaults()[0]; ten->WrapSite(txt1); ten->WrapSite(txt2); @@ -1254,7 +1254,7 @@ void mjCComposite::MakeShear(mjCModel* model) { // equality constraint mjsEquality* eq = mjs_addEquality(&model->spec, &def[mjCOMPKIND_SHEAR].spec); - mjs_setDefault(eq->element, &model->defaults[0]->spec); + mjs_setDefault(eq->element, &model->Defaults()[0]->spec); eq->type = mjEQ_TENDON; mjs_setString(eq->name1, txt); } diff --git a/src/user/user_flexcomp.cc b/src/user/user_flexcomp.cc index 9d8bc0ca..bd5b9e53 100644 --- a/src/user/user_flexcomp.cc +++ b/src/user/user_flexcomp.cc @@ -521,7 +521,7 @@ bool mjCFlexcomp::Make(mjSpec* spec, mjsBody* body, char* error, int error_sz) { // create edge equality constraint if (equality) { mjsEquality* pe = mjs_addEquality(&model->spec, &def.spec); - mjs_setDefault(pe->element, &model->defaults[0]->spec); + mjs_setDefault(pe->element, &model->Defaults()[0]->spec); pe->type = mjEQ_FLEX; pe->active = true; mjs_setString(pe->name1, name.c_str()); diff --git a/src/user/user_mesh.cc b/src/user/user_mesh.cc index d7cb49c7..c61bbdba 100644 --- a/src/user/user_mesh.cc +++ b/src/user/user_mesh.cc @@ -151,7 +151,7 @@ mjCMesh::mjCMesh(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // in case this body is not compiled CopyFromSpec(); @@ -2560,12 +2560,12 @@ void mjCFlex::Compile(const mjVFS* vfs) { for (int i=0; i < nvert; i++) { // get body id, set vertxpos = body.xpos0 int b = rigid ? vertbodyid[0] : vertbodyid[i]; - mju_copy3(vertxpos.data()+3*i, model->bodies[b]->xpos0); + mju_copy3(vertxpos.data()+3*i, model->Bodies()[b]->xpos0); // add vertex offset within body if not centered if (!centered) { mjtNum offset[3]; - mju_rotVecQuat(offset, vert_.data()+3*i, model->bodies[b]->xquat0); + mju_rotVecQuat(offset, vert_.data()+3*i, model->Bodies()[b]->xquat0); mju_addTo3(vertxpos.data()+3*i, offset); } } @@ -2631,9 +2631,9 @@ void mjCFlex::Compile(const mjVFS* vfs) { mjXUtil::Vector2String(useredge, edgeidx); for (const auto& vbodyid : vertbodyid) { - if (model->bodies[vbodyid]->plugin.instance) { + if (model->Bodies()[vbodyid]->plugin.instance) { mjCPlugin* plugin_instance = - static_cast(model->bodies[vbodyid]->plugin.instance); + static_cast(model->Bodies()[vbodyid]->plugin.instance); plugin_instance->config_attribs["face"] = userface; plugin_instance->config_attribs["edge"] = useredge; } diff --git a/src/user/user_model.cc b/src/user/user_model.cc index cf525376..2a2e29ac 100644 --- a/src/user/user_model.cc +++ b/src/user/user_model.cc @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -102,33 +101,12 @@ mjCModel::mjCModel() { #endif nplugin = 0; - //------------------------ private variables - cameras.clear(); - lights.clear(); - flexes.clear(); - meshes.clear(); - skins.clear(); - hfields.clear(); - textures.clear(); - materials.clear(); - pairs.clear(); - excludes.clear(); - equalities.clear(); - tendons.clear(); - actuators.clear(); - numerics.clear(); - texts.clear(); - tuples.clear(); - keys.clear(); - defaults.clear(); - prefix = ""; - suffix = ""; Clear(); //------------------------ master default set - defaults.push_back(new mjCDef); + defaults_.push_back(new mjCDef); - //------------------------ world body + // world body mjCBody* world = new mjCBody(this); mjuu_zerovec(world->pos, 3); mjuu_setvec(world->quat, 1, 0, 0, 0); @@ -138,8 +116,8 @@ mjCModel::mjCModel() { world->parentid = 0; world->weldid = 0; world->name = "world"; - world->def = defaults[0]; - bodies.push_back(world); + world->def = defaults_[0]; + bodies_.push_back(world); // create mjCBase lists from children lists CreateObjectLists(); @@ -167,8 +145,8 @@ mjCModel& mjCModel::operator=(const mjCModel& other) { *static_cast(this) = static_cast(other); // the world copy constructor takes care of copying the tree - mjCBody* world = new mjCBody(*other.bodies[0], this); - bodies.push_back(world); + mjCBody* world = new mjCBody(*other.bodies_[0], this); + bodies_.push_back(world); // add everything else *this += other; @@ -228,75 +206,76 @@ static void resetlist(std::vector& list) { mjCModel& mjCModel::operator+=(const mjCModel& other) { // create global lists - MakeLists(bodies[0]); + MakeLists(bodies_[0]); CreateObjectLists(); ProcessLists(/*checkrepeat=*/false); // copy all elements not in the tree std::map def_map; - int ndefaults = (int)other.defaults.size(); + int ndefaults = (int)other.defaults_.size(); for (int i = 0; i < ndefaults; i++) { if (this != &other) { - defaults.push_back(new mjCDef(*other.defaults[i])); + defaults_.push_back(new mjCDef(*other.defaults_[i])); } - def_map[other.defaults[i]] = i; + def_map[other.defaults_[i]] = i; } + if (this != &other) { // do not copy assets for self-attach - CopyList(meshes, other.meshes, def_map, defaults); - CopyList(skins, other.skins, def_map, defaults); - CopyList(hfields, other.hfields, def_map, defaults); - CopyList(textures, other.textures, def_map, defaults); - CopyList(materials, other.materials, def_map, defaults); - CopyList(keys, other.keys, def_map, defaults); + CopyList(meshes_, other.meshes_, def_map, defaults_); + CopyList(skins_, other.skins_, def_map, defaults_); + CopyList(hfields_, other.hfields_, def_map, defaults_); + CopyList(textures_, other.textures_, def_map, defaults_); + CopyList(materials_, other.materials_, def_map, defaults_); + CopyList(keys_, other.keys_, def_map, defaults_); } - CopyList(flexes, other.flexes, def_map, defaults); - CopyList(pairs, other.pairs, def_map, defaults); - CopyList(excludes, other.excludes, def_map, defaults); - CopyList(tendons, other.tendons, def_map, defaults); - CopyList(equalities, other.equalities, def_map, defaults); - CopyList(actuators, other.actuators, def_map, defaults); - CopyList(sensors, other.sensors, def_map, defaults); - CopyList(numerics, other.numerics, def_map, defaults); - CopyList(texts, other.texts, def_map, defaults); - CopyList(tuples, other.tuples, def_map, defaults); + CopyList(flexes_, other.flexes_, def_map, defaults_); + CopyList(pairs_, other.pairs_, def_map, defaults_); + CopyList(excludes_, other.excludes_, def_map, defaults_); + CopyList(tendons_, other.tendons_, def_map, defaults_); + CopyList(equalities_, other.equalities_, def_map, defaults_); + CopyList(actuators_, other.actuators_, def_map, defaults_); + CopyList(sensors_, other.sensors_, def_map, defaults_); + CopyList(numerics_, other.numerics_, def_map, defaults_); + CopyList(texts_, other.texts_, def_map, defaults_); + CopyList(tuples_, other.tuples_, def_map, defaults_); // plugins are global - plugins = other.plugins; - active_plugins = other.active_plugins; + plugins_ = other.plugins_; + active_plugins_ = other.active_plugins_; // update defaults for the copied objects - for (int i = 1; i < other.bodies.size(); i++) { - bodies[i]->def = defaults[def_map[other.bodies[i]->def]]; + for (int i = 1; i < other.bodies_.size(); i++) { + bodies_[i]->def = defaults_[def_map[other.bodies_[i]->def]]; } - for (int i = 0; i < other.joints.size(); i++) { - joints[i]->def = defaults[def_map[other.joints[i]->def]]; + for (int i = 0; i < other.joints_.size(); i++) { + joints_[i]->def = defaults_[def_map[other.joints_[i]->def]]; } - for (int i = 0; i < other.geoms.size(); i++) { - geoms[i]->def = defaults[def_map[other.geoms[i]->def]]; + for (int i = 0; i < other.geoms_.size(); i++) { + geoms_[i]->def = defaults_[def_map[other.geoms_[i]->def]]; } - for (int i = 0; i < other.sites.size(); i++) { - sites[i]->def = defaults[def_map[other.sites[i]->def]]; + for (int i = 0; i < other.sites_.size(); i++) { + sites_[i]->def = defaults_[def_map[other.sites_[i]->def]]; } - for (int i = 0; i < other.cameras.size(); i++) { - cameras[i]->def = defaults[def_map[other.cameras[i]->def]]; + for (int i = 0; i < other.cameras_.size(); i++) { + cameras_[i]->def = defaults_[def_map[other.cameras_[i]->def]]; } - for (int i = 0; i < other.lights.size(); i++) { - lights[i]->def = defaults[def_map[other.lights[i]->def]]; + for (int i = 0; i < other.lights_.size(); i++) { + lights_[i]->def= defaults_[def_map[other.lights_[i]->def]]; } // restore to the same state as other if (!compiled) { - mjCBody* world = bodies[0]; - resetlist(bodies); - resetlist(joints); - resetlist(geoms); - resetlist(sites); - resetlist(cameras); - resetlist(lights); - resetlist(frames); + mjCBody *world = bodies_[0]; + resetlist(bodies_); + resetlist(joints_); + resetlist(geoms_); + resetlist(sites_); + resetlist(cameras_); + resetlist(lights_); + resetlist(frames_); world->id = 0; - bodies.push_back(world); + bodies_.push_back(world); } PointToLocal(); @@ -338,38 +317,38 @@ void mjCModel::RemoveFromList(std::vector& list, const mjCModel& other) { mjCModel& mjCModel::operator-=(const mjCBody& subtree) { mjCModel oldmodel(*this); - oldmodel.MakeLists(oldmodel.bodies[0]); + oldmodel.MakeLists(oldmodel.bodies_[0]); oldmodel.CreateObjectLists(); oldmodel.ProcessLists(/*checkrepeat=*/false); // remove body from tree - *bodies[0] -= subtree; + *bodies_[0] -= subtree; // create global lists - MakeLists(bodies[0]); + MakeLists(bodies_[0]); CreateObjectLists(); ProcessLists(/*checkrepeat=*/false); // check if we have to remove anything else - RemoveFromList(pairs, oldmodel); - RemoveFromList(excludes, oldmodel); - RemoveFromList(tendons, oldmodel); - RemoveFromList(equalities, oldmodel); - RemoveFromList(actuators, oldmodel); - RemoveFromList(sensors, oldmodel); + RemoveFromList(pairs_, oldmodel); + RemoveFromList(excludes_, oldmodel); + RemoveFromList(tendons_, oldmodel); + RemoveFromList(equalities_, oldmodel); + RemoveFromList(actuators_, oldmodel); + RemoveFromList(sensors_, oldmodel); // restore to the same state as before call if (!compiled) { - mjCBody* world = bodies[0]; - resetlist(bodies); - resetlist(joints); - resetlist(geoms); - resetlist(sites); - resetlist(cameras); - resetlist(lights); - resetlist(frames); + mjCBody* world = bodies_[0]; + resetlist(bodies_); + resetlist(joints_); + resetlist(geoms_); + resetlist(sites_); + resetlist(cameras_); + resetlist(lights_); + resetlist(frames_); world->id = 0; - bodies.push_back(world); + bodies_.push_back(world); } PointToLocal(); @@ -381,33 +360,33 @@ mjCModel& mjCModel::operator-=(const mjCBody& subtree) { // TODO: we should not use C-type casting with multiple C++ inheritance void mjCModel::CreateObjectLists() { for (int i = 0; i < mjNOBJECT; ++i) { - object_lists[i] = nullptr; + object_lists_[i] = nullptr; } - object_lists[mjOBJ_BODY] = (std::vector*) &bodies; - object_lists[mjOBJ_XBODY] = (std::vector*) &bodies; - object_lists[mjOBJ_JOINT] = (std::vector*) &joints; - object_lists[mjOBJ_GEOM] = (std::vector*) &geoms; - object_lists[mjOBJ_SITE] = (std::vector*) &sites; - object_lists[mjOBJ_CAMERA] = (std::vector*) &cameras; - object_lists[mjOBJ_LIGHT] = (std::vector*) &lights; - object_lists[mjOBJ_FLEX] = (std::vector*) &flexes; - object_lists[mjOBJ_MESH] = (std::vector*) &meshes; - object_lists[mjOBJ_SKIN] = (std::vector*) &skins; - object_lists[mjOBJ_HFIELD] = (std::vector*) &hfields; - object_lists[mjOBJ_TEXTURE] = (std::vector*) &textures; - object_lists[mjOBJ_MATERIAL] = (std::vector*) &materials; - object_lists[mjOBJ_PAIR] = (std::vector*) &pairs; - object_lists[mjOBJ_EXCLUDE] = (std::vector*) &excludes; - object_lists[mjOBJ_EQUALITY] = (std::vector*) &equalities; - object_lists[mjOBJ_TENDON] = (std::vector*) &tendons; - object_lists[mjOBJ_ACTUATOR] = (std::vector*) &actuators; - object_lists[mjOBJ_SENSOR] = (std::vector*) &sensors; - object_lists[mjOBJ_NUMERIC] = (std::vector*) &numerics; - object_lists[mjOBJ_TEXT] = (std::vector*) &texts; - object_lists[mjOBJ_TUPLE] = (std::vector*) &tuples; - object_lists[mjOBJ_KEY] = (std::vector*) &keys; - object_lists[mjOBJ_PLUGIN] = (std::vector*) &plugins; + object_lists_[mjOBJ_BODY] = (std::vector*) &bodies_; + object_lists_[mjOBJ_XBODY] = (std::vector*) &bodies_; + object_lists_[mjOBJ_JOINT] = (std::vector*) &joints_; + object_lists_[mjOBJ_GEOM] = (std::vector*) &geoms_; + object_lists_[mjOBJ_SITE] = (std::vector*) &sites_; + object_lists_[mjOBJ_CAMERA] = (std::vector*) &cameras_; + object_lists_[mjOBJ_LIGHT] = (std::vector*) &lights_; + object_lists_[mjOBJ_FLEX] = (std::vector*) &flexes_; + object_lists_[mjOBJ_MESH] = (std::vector*) &meshes_; + object_lists_[mjOBJ_SKIN] = (std::vector*) &skins_; + object_lists_[mjOBJ_HFIELD] = (std::vector*) &hfields_; + object_lists_[mjOBJ_TEXTURE] = (std::vector*) &textures_; + object_lists_[mjOBJ_MATERIAL] = (std::vector*) &materials_; + object_lists_[mjOBJ_PAIR] = (std::vector*) &pairs_; + object_lists_[mjOBJ_EXCLUDE] = (std::vector*) &excludes_; + object_lists_[mjOBJ_EQUALITY] = (std::vector*) &equalities_; + object_lists_[mjOBJ_TENDON] = (std::vector*) &tendons_; + object_lists_[mjOBJ_ACTUATOR] = (std::vector*) &actuators_; + object_lists_[mjOBJ_SENSOR] = (std::vector*) &sensors_; + object_lists_[mjOBJ_NUMERIC] = (std::vector*) &numerics_; + object_lists_[mjOBJ_TEXT] = (std::vector*) &texts_; + object_lists_[mjOBJ_TUPLE] = (std::vector*) &tuples_; + object_lists_[mjOBJ_KEY] = (std::vector*) &keys_; + object_lists_[mjOBJ_PLUGIN] = (std::vector*) &plugins_; } @@ -442,51 +421,31 @@ void mjCModel::CopyFromSpec() { // destructor mjCModel::~mjCModel() { // delete kinematic tree and all objects allocated in it - delete bodies[0]; + delete bodies_[0]; // delete objects allocated in mjCModel - for (int i=0; i& list, string type) { } -// add object of any type, with def parameter +// add object of any type, with default parameter template -T* mjCModel::AddObjectDef(vector& list, string type, mjCDef* def) { - T* obj = new T(this, def ? def : defaults[0]); +T* mjCModel::AddObjectDefault(vector& list, string type, mjCDef* def) { + T* obj = new T(this, def ? def : defaults_[0]); obj->id = (int)list.size(); - obj->def = def ? def : defaults[0]; + obj->def = def ? def : defaults_[0]; list.push_back(obj); return obj; } // add flex -mjCFlex* mjCModel::AddFlex(void) { - return AddObject(flexes, "flex"); +mjCFlex* mjCModel::AddFlex() { + return AddObject(flexes_, "flex"); } // add mesh mjCMesh* mjCModel::AddMesh(mjCDef* def) { - return AddObjectDef(meshes, "mesh", def); + return AddObjectDefault(meshes_, "mesh", def); } // add skin -mjCSkin* mjCModel::AddSkin(void) { - return AddObject(skins, "skin"); +mjCSkin* mjCModel::AddSkin() { + return AddObject(skins_, "skin"); } // add hfield -mjCHField* mjCModel::AddHField(void) { - return AddObject(hfields, "hfield"); +mjCHField* mjCModel::AddHField() { + return AddObject(hfields_, "hfield"); } // add texture -mjCTexture* mjCModel::AddTexture(void) { - return AddObject(textures, "texture"); +mjCTexture* mjCModel::AddTexture() { + return AddObject(textures_, "texture"); } // add material mjCMaterial* mjCModel::AddMaterial(mjCDef* def) { - return AddObjectDef(materials, "material", def); + return AddObjectDefault(materials_, "material", def); } // add geom pair to include in collisions mjCPair* mjCModel::AddPair(mjCDef* def) { - return AddObjectDef(pairs, "pair", def); + return AddObjectDefault(pairs_, "pair", def); } // add body pair to exclude from collisions -mjCBodyPair* mjCModel::AddExclude(void) { - return AddObject(excludes, "exclude"); +mjCBodyPair* mjCModel::AddExclude() { + return AddObject(excludes_, "exclude"); } // add constraint mjCEquality* mjCModel::AddEquality(mjCDef* def) { - return AddObjectDef(equalities, "equality", def); + return AddObjectDefault(equalities_, "equality", def); } // add tendon mjCTendon* mjCModel::AddTendon(mjCDef* def) { - return AddObjectDef(tendons, "tendon", def); + return AddObjectDefault(tendons_, "tendon", def); } // add actuator mjCActuator* mjCModel::AddActuator(mjCDef* def) { - return AddObjectDef(actuators, "actuator", def); + return AddObjectDefault(actuators_, "actuator", def); } // add sensor -mjCSensor* mjCModel::AddSensor(void) { - return AddObject(sensors, "sensor"); +mjCSensor* mjCModel::AddSensor() { + return AddObject(sensors_, "sensor"); } // add custom -mjCNumeric* mjCModel::AddNumeric(void) { - return AddObject(numerics, "numeric"); +mjCNumeric* mjCModel::AddNumeric() { + return AddObject(numerics_, "numeric"); } // add text -mjCText* mjCModel::AddText(void) { - return AddObject(texts, "text"); +mjCText* mjCModel::AddText() { + return AddObject(texts_, "text"); } // add tuple -mjCTuple* mjCModel::AddTuple(void) { - return AddObject(tuples, "tuple"); +mjCTuple* mjCModel::AddTuple() { + return AddObject(tuples_, "tuple"); } // add keyframe -mjCKey* mjCModel::AddKey(void) { - return AddObject(keys, "key"); +mjCKey* mjCModel::AddKey() { + return AddObject(keys_, "key"); } // add plugin instance -mjCPlugin* mjCModel::AddPlugin(void) { - return AddObject(plugins, "plugin"); +mjCPlugin* mjCModel::AddPlugin() { + return AddObject(plugins_, "plugin"); } @@ -710,10 +669,10 @@ mjCPlugin* mjCModel::AddPlugin(void) { // get number of objects of specified type int mjCModel::NumObjects(mjtObj type) { - if (!object_lists[type]) { + if (!object_lists_[type]) { return 0; } - return (int) object_lists[type]->size(); + return (int) object_lists_[type]->size(); } @@ -723,7 +682,7 @@ mjCBase* mjCModel::GetObject(mjtObj type, int id) { if (id < 0 || id >= NumObjects(type)) { return nullptr; } - return (*object_lists[type])[id]; + return (*object_lists_[type])[id]; } @@ -731,58 +690,57 @@ mjCBase* mjCModel::GetObject(mjtObj type, int id) { //------------------------ API FOR ACCESS TO PRIVATE VARIABLES ------------------------------------- // compiled flag -bool mjCModel::IsCompiled(void) const { +bool mjCModel::IsCompiled() const { return compiled; } // get reference of error object -const mjCError& mjCModel::GetError(void) const { +const mjCError& mjCModel::GetError() const { return errInfo; } // pointer to world body -mjCBody* mjCModel::GetWorld(void) const { - return bodies[0]; +mjCBody* mjCModel::GetWorld() { + return bodies_[0]; } // find default class name in array -mjCDef* mjCModel::FindDef(string name) const { - for (int i=0; i<(int)defaults.size(); i++) { - if (defaults[i]->name==name) { - return defaults[i]; +mjCDef* mjCModel::FindDefault(string name) { + for (int i=0; i<(int)defaults_.size(); i++) { + if (defaults_[i]->name == name) { + return defaults_[i]; } } - - return 0; + return nullptr; } // add default class to array -mjCDef* mjCModel::AddDef(string name, int parentid) { +mjCDef* mjCModel::AddDefault(string name, int parentid) { // check for repeated name - int thisid = (int)defaults.size(); + int thisid = (int)defaults_.size(); for (int i=0; iname==name) { + if (defaults_[i]->name==name) { return 0; } } // create new object mjCDef* def = new mjCDef; - defaults.push_back(def); + defaults_.push_back(def); // initialize contents if (parentid>=0 && parentidCopyFromSpec(); - *def = *defaults[parentid]; - defaults[parentid]->childid.push_back(thisid); + defaults_[parentid]->CopyFromSpec(); + *def = *defaults_[parentid]; + defaults_[parentid]->childid.push_back(thisid); } def->parentid = parentid; def->name = name; @@ -819,16 +777,16 @@ static T* findobject(std::string_view name, const vector& list, const mjKeyM // find object in global lists given string type and name mjCBase* mjCModel::FindObject(mjtObj type, string name) const { - if (!object_lists[type]) { + if (!object_lists_[type]) { return nullptr; } - return findobject(name, *object_lists[type], ids[type]); + return findobject(name, *object_lists_[type], ids[type]); } // find body by name -mjCBody* mjCModel::FindBody(mjCBody* body, std::string name) const { +mjCBody* mjCModel::FindBody(mjCBody* body, std::string name) { if (body->name == name) { return body; } @@ -893,20 +851,20 @@ bool mjCModel::IsNullPose(const mjtNum* pos, const mjtNum* quat) const { // make lists of objects in tree: bodies, geoms, joints, sites, cameras, lights void mjCModel::MakeLists(mjCBody* body) { // add this body if not world - if (body!=bodies[0]) { - bodies.push_back(body); + if (body != bodies_[0]) { + bodies_.push_back(body); } // add body's geoms, joints, sites, cameras, lights - for (int i=0; igeoms.size(); i++) geoms.push_back(body->geoms[i]); - for (int i=0; ijoints.size(); i++) joints.push_back(body->joints[i]); - for (int i=0; isites.size(); i++) sites.push_back(body->sites[i]); - for (int i=0; icameras.size(); i++) cameras.push_back(body->cameras[i]); - for (int i=0; ilights.size(); i++) lights.push_back(body->lights[i]); - for (int i=0; iframes.size(); i++) frames.push_back(body->frames[i]); + for (mjCGeom *geom : body->geoms) geoms_.push_back(geom); + for (mjCJoint *joint : body->joints) joints_.push_back(joint); + for (mjCSite *site : body->sites) sites_.push_back(site); + for (mjCCamera *camera : body->cameras) cameras_.push_back(camera); + for (mjCLight *light : body->lights) lights_.push_back(light); + for (mjCFrame *frame : body->frames) frames_.push_back(frame); // recursive call to all child bodies - for (int i=0; ibodies.size(); i++) MakeLists(body->bodies[i]); + for (mjCBody* body : body->bodies) MakeLists(body); } @@ -987,7 +945,7 @@ template <> void mjCModel::Delete(std::vector& elements, const std::vector& discard) { // update bodies - for (mjCBody* body : bodies) { + for (mjCBody* body : bodies_) { body->geoms.erase( std::remove_if(body->geoms.begin(), body->geoms.end(), [&discard](mjCGeom* geom) { return discard[geom->id]; }), @@ -1008,10 +966,10 @@ void mjCModel::Delete(std::vector& elements, template <> void mjCModel::DeleteAll(std::vector& elements) { - DeleteMaterial(geoms); - DeleteMaterial(skins); - DeleteMaterial(sites); - DeleteMaterial(tendons); + DeleteMaterial(geoms_); + DeleteMaterial(skins_); + DeleteMaterial(sites_); + DeleteMaterial(tendons_); for (mjCMaterial* element : elements) { delete element; } @@ -1021,7 +979,7 @@ void mjCModel::DeleteAll(std::vector& elements) { template <> void mjCModel::DeleteAll(std::vector& elements) { - DeleteTexture(materials); + DeleteTexture(materials_); for (mjCTexture* element : elements) { delete element; } @@ -1029,53 +987,53 @@ void mjCModel::DeleteAll(std::vector& elements) { } // set nuser fields -void mjCModel::SetNuser(){ +void mjCModel::SetNuser() { if (nuser_body == -1) { nuser_body = 0; - for (int i=0; ispec_userdata_.size()); + for (int i = 0; i < bodies_.size(); i++) { + nuser_body = mjMAX(nuser_body, bodies_[i]->spec_userdata_.size()); } } if (nuser_jnt == -1) { nuser_jnt = 0; - for (int i=0; ispec_userdata_.size()); + for (int i = 0; i < joints_.size(); i++) { + nuser_jnt = mjMAX(nuser_jnt, joints_[i]->spec_userdata_.size()); } } if (nuser_geom == -1) { nuser_geom = 0; - for (int i=0; ispec_userdata_.size()); + for (int i = 0; i < geoms_.size(); i++) { + nuser_geom = mjMAX(nuser_geom, geoms_[i]->spec_userdata_.size()); } } if (nuser_site == -1) { nuser_site = 0; - for (int i=0; ispec_userdata_.size()); + for (int i = 0; i < sites_.size(); i++) { + nuser_site = mjMAX(nuser_site, sites_[i]->spec_userdata_.size()); } } if (nuser_cam == -1) { nuser_cam = 0; - for (int i=0; ispec_userdata_.size()); + for (int i = 0; i < cameras_.size(); i++) { + nuser_cam = mjMAX(nuser_cam, cameras_[i]->spec_userdata_.size()); } } if (nuser_tendon == -1) { nuser_tendon = 0; - for (int i=0; ispec_userdata_.size()); + for (int i = 0; i < tendons_.size(); i++) { + nuser_tendon = mjMAX(nuser_tendon, tendons_[i]->spec_userdata_.size()); } } if (nuser_actuator == -1) { nuser_actuator = 0; - for (int i=0; ispec_userdata_.size()); + for (int i = 0; i < actuators_.size(); i++) { + nuser_actuator = mjMAX(nuser_actuator, actuators_[i]->spec_userdata_.size()); } } if (nuser_sensor == -1) { nuser_sensor = 0; - for (int i=0; ispec_userdata_.size()); + for (int i = 0; i < sensors_.size(); i++) { + nuser_sensor = mjMAX(nuser_sensor, sensors_[i]->spec_userdata_.size()); } } } @@ -1083,8 +1041,8 @@ void mjCModel::SetNuser(){ // index assets void mjCModel::IndexAssets(bool discard) { // assets referenced in geoms - for (int i=0; iget_material().empty()) { @@ -1121,8 +1079,8 @@ void mjCModel::IndexAssets(bool discard) { } // assets referenced in skins - for (int i=0; imaterial_.empty()) { @@ -1136,8 +1094,8 @@ void mjCModel::IndexAssets(bool discard) { } // materials referenced in sites - for (int i=0; imaterial_.empty()) { @@ -1151,8 +1109,8 @@ void mjCModel::IndexAssets(bool discard) { } // materials referenced in tendons - for (int i=0; imaterial_.empty()) { @@ -1166,8 +1124,8 @@ void mjCModel::IndexAssets(bool discard) { } // textures referenced in materials - for (int i=0; itexture_.empty()) { @@ -1182,16 +1140,16 @@ void mjCModel::IndexAssets(bool discard) { // discard visual meshes and geoms if (discard) { - std::vector discard_mesh(meshes.size(), false); - std::vector discard_geom(geoms.size(), false); + std::vector discard_mesh(meshes_.size(), false); + std::vector discard_geom(geoms_.size(), false); - std::transform(meshes.begin(), meshes.end(), discard_mesh.begin(), + std::transform(meshes_.begin(), meshes_.end(), discard_mesh.begin(), [](const mjCMesh* mesh) { return mesh->IsVisual(); }); - std::transform(geoms.begin(), geoms.end(), discard_geom.begin(), + std::transform(geoms_.begin(), geoms_.end(), discard_geom.begin(), [](const mjCGeom* geom) { return geom->IsVisual(); }); - Delete(meshes, discard_mesh); - Delete(geoms, discard_geom); + Delete(meshes_, discard_mesh); + Delete(geoms_, discard_geom); } } @@ -1228,30 +1186,30 @@ void mjCModel::SetDefaultNames(std::vector& assets) { // throw error if a name is missing void mjCModel::CheckEmptyNames(void) { // meshes - for (int i=0; iname.empty()) { - throw mjCError(meshes[i], "empty name in mesh"); + for (int i=0; iname.empty()) { + throw mjCError(meshes_[i], "empty name in mesh"); } } // hfields - for (int i=0; iname.empty()) { - throw mjCError(hfields[i], "empty name in height field"); + for (int i=0; iname.empty()) { + throw mjCError(hfields_[i], "empty name in height field"); } } // textures - for (int i=0; iname.empty() && textures[i]->type!=mjTEXTURE_SKYBOX) { - throw mjCError(textures[i], "empty name in texture"); + for (int i=0; i < textures_.size(); i++) { + if (textures_[i]->name.empty() && textures_[i]->type!=mjTEXTURE_SKYBOX) { + throw mjCError(textures_[i], "empty name in texture"); } } // materials - for (int i=0; iname.empty()) { - throw mjCError(materials[i], "empty name in material"); + for (int i=0; i < materials_.size(); i++) { + if (materials_[i]->name.empty()) { + throw mjCError(materials_[i], "empty name in material"); } } } @@ -1275,150 +1233,150 @@ static size_t getpathslength(std::vector list) { } // set array sizes -void mjCModel::SetSizes(void) { +void mjCModel::SetSizes() { // set from object list sizes - nbody = (int)bodies.size(); - njnt = (int)joints.size(); - ngeom = (int)geoms.size(); - nsite = (int)sites.size(); - ncam = (int)cameras.size(); - nlight = (int)lights.size(); - nflex = (int)flexes.size(); - nmesh = (int)meshes.size(); - nskin = (int)skins.size(); - nhfield = (int)hfields.size(); - ntex = (int)textures.size(); - nmat = (int)materials.size(); - npair = (int)pairs.size(); - nexclude = (int)excludes.size(); - neq = (int)equalities.size(); - ntendon = (int)tendons.size(); - nsensor = (int)sensors.size(); - nnumeric = (int)numerics.size(); - ntext = (int)texts.size(); - ntuple = (int)tuples.size(); - nkey = (int)keys.size(); - nplugin = (int)plugins.size(); + nbody = (int)bodies_.size(); + njnt = (int)joints_.size(); + ngeom = (int)geoms_.size(); + nsite = (int)sites_.size(); + ncam = (int)cameras_.size(); + nlight = (int)lights_.size(); + nflex = (int)flexes_.size(); + nmesh = (int)meshes_.size(); + nskin = (int)skins_.size(); + nhfield = (int)hfields_.size(); + ntex = (int)textures_.size(); + nmat = (int)materials_.size(); + npair = (int)pairs_.size(); + nexclude = (int)excludes_.size(); + neq = (int)equalities_.size(); + ntendon = (int)tendons_.size(); + nsensor = (int)sensors_.size(); + nnumeric = (int)numerics_.size(); + ntext = (int)texts_.size(); + ntuple = (int)tuples_.size(); + nkey = (int)keys_.size(); + nplugin = (int)plugins_.size(); // nq, nv for (int i=0; itype]; - nv += nVEL[joints[i]->type]; + nq += nPOS[joints_[i]->type]; + nv += nVEL[joints_[i]->type]; } // nu, na - for (int i=0; iactdim + actuators[i]->plugin_actdim; + na += actuators_[i]->actdim + actuators_[i]->plugin_actdim; } // nbvh, nbvhstatic, nbvhdynamic for (int i=0; itree.nbvh; + nbvhstatic += bodies_[i]->tree.nbvh; } for (int i=0; itree().nbvh; + nbvhstatic += meshes_[i]->tree().nbvh; } for (int i=0; itree.nbvh; + nbvhdynamic += flexes_[i]->tree.nbvh; } nbvh = nbvhstatic + nbvhdynamic; // flex counts for (int i=0; invert; - nflexedge += flexes[i]->nedge; - nflexelem += flexes[i]->nelem; - nflexelemdata += flexes[i]->nelem * (flexes[i]->dim + 1); - nflexshelldata += (int)flexes[i]->shell.size(); - nflexevpair += (int)flexes[i]->evpair.size()/2; + nflexvert += flexes_[i]->nvert; + nflexedge += flexes_[i]->nedge; + nflexelem += flexes_[i]->nelem; + nflexelemdata += flexes_[i]->nelem * (flexes_[i]->dim + 1); + nflexshelldata += (int)flexes_[i]->shell.size(); + nflexevpair += (int)flexes_[i]->evpair.size()/2; } // mesh counts for (int i=0; invert(); - nmeshnormal += meshes[i]->nnormal(); - nmeshface += meshes[i]->nface(); - nmeshtexcoord += (meshes[i]->HasTexcoord() ? meshes[i]->ntexcoord() : 0); - nmeshgraph += meshes[i]->szgraph(); + nmeshvert += meshes_[i]->nvert(); + nmeshnormal += meshes_[i]->nnormal(); + nmeshface += meshes_[i]->nface(); + nmeshtexcoord += (meshes_[i]->HasTexcoord() ? meshes_[i]->ntexcoord() : 0); + nmeshgraph += meshes_[i]->szgraph(); } // skin counts for (int i=0; iget_vert().size()/3; - nskintexvert += skins[i]->get_texcoord().size()/2; - nskinface += skins[i]->get_face().size()/3; - nskinbone += skins[i]->bodyid.size(); - for (int j=0; jbodyid.size(); j++) { - nskinbonevert += skins[i]->get_vertid()[j].size(); + nskinvert += skins_[i]->get_vert().size()/3; + nskintexvert += skins_[i]->get_texcoord().size()/2; + nskinface += skins_[i]->get_face().size()/3; + nskinbone += skins_[i]->bodyid.size(); + for (int j=0; jbodyid.size(); j++) { + nskinbonevert += skins_[i]->get_vertid()[j].size(); } } // nhfielddata - for (int i=0; inrow * hfields[i]->ncol; + for (int i=0; inrow * hfields_[i]->ncol; // ntexdata - for (int i=0; iwidth * textures[i]->height; + for (int i=0; iwidth * textures_[i]->height; // nwrap - for (int i=0; ipath.size(); + for (int i=0; ipath.size(); // nsensordata - for (int i=0; idim; + for (int i=0; idim; // nnumericdata - for (int i=0; isize; + for (int i=0; isize; // ntextdata - for (int i=0; idata_.size() + 1; + for (int i=0; idata_.size() + 1; // ntupledata - for (int i=0; iobjtype_.size(); + for (int i=0; iobjtype_.size(); // npluginattr - for (int i=0; iflattened_attributes.size(); + for (int i=0; iflattened_attributes.size(); // nnames nnames = (int)modelname_.size() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; - for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; + for (int i=0; iname.length() + 1; // npaths npaths = 0; - npaths += getpathslength(hfields); - npaths += getpathslength(meshes); - npaths += getpathslength(skins); - npaths += getpathslength(textures); + npaths += getpathslength(hfields_); + npaths += getpathslength(meshes_); + npaths += getpathslength(skins_); + npaths += getpathslength(textures_); if (npaths == 0) { npaths = 1; } // nemax for (int i=0; itype==mjEQ_CONNECT) { + if (equalities_[i]->type==mjEQ_CONNECT) { nemax += 3; - } else if (equalities[i]->type==mjEQ_WELD) { + } else if (equalities_[i]->type==mjEQ_WELD) { nemax += 7; } else { nemax += 1; @@ -1437,8 +1395,8 @@ void mjCModel::AutoSpringDamper(mjModel* m) { int ndim = nVEL[m->jnt_type[n]]; // get timeconst and dampratio from joint specificatin - mjtNum timeconst = (mjtNum)joints[n]->springdamper[0]; - mjtNum dampratio = (mjtNum)joints[n]->springdamper[1]; + mjtNum timeconst = (mjtNum)joints_[n]->springdamper[0]; + mjtNum dampratio = (mjtNum)joints_[n]->springdamper[1]; // skip joint if either parameter is non-positive if (timeconst<=0 || dampratio<=0) { @@ -1664,73 +1622,73 @@ void mjCModel::CopyNames(mjModel* m) { memset(m->names_map, -1, sizeof(int) * m->nnames_map); // process all lists - adr = namelist(bodies, adr, m->name_bodyadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*bodies.size(); + adr = namelist(bodies_, adr, m->name_bodyadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*bodies_.size(); - adr = namelist(joints, adr, m->name_jntadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*joints.size(); + adr = namelist(joints_, adr, m->name_jntadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*joints_.size(); - adr = namelist(geoms, adr, m->name_geomadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*geoms.size(); + adr = namelist(geoms_, adr, m->name_geomadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*geoms_.size(); - adr = namelist(sites, adr, m->name_siteadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*sites.size(); + adr = namelist(sites_, adr, m->name_siteadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*sites_.size(); - adr = namelist(cameras, adr, m->name_camadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*cameras.size(); + adr = namelist(cameras_, adr, m->name_camadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*cameras_.size(); - adr = namelist(lights, adr, m->name_lightadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*lights.size(); + adr = namelist(lights_, adr, m->name_lightadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*lights_.size(); - adr = namelist(flexes, adr, m->name_flexadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*flexes.size(); + adr = namelist(flexes_, adr, m->name_flexadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*flexes_.size(); - adr = namelist(meshes, adr, m->name_meshadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*meshes.size(); + adr = namelist(meshes_, adr, m->name_meshadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*meshes_.size(); - adr = namelist(skins, adr, m->name_skinadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*skins.size(); + adr = namelist(skins_, adr, m->name_skinadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*skins_.size(); - adr = namelist(hfields, adr, m->name_hfieldadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*hfields.size(); + adr = namelist(hfields_, adr, m->name_hfieldadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*hfields_.size(); - adr = namelist(textures, adr, m->name_texadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*textures.size(); + adr = namelist(textures_, adr, m->name_texadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*textures_.size(); - adr = namelist(materials, adr, m->name_matadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*materials.size(); + adr = namelist(materials_, adr, m->name_matadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*materials_.size(); - adr = namelist(pairs, adr, m->name_pairadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*pairs.size(); + adr = namelist(pairs_, adr, m->name_pairadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*pairs_.size(); - adr = namelist(excludes, adr, m->name_excludeadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*excludes.size(); + adr = namelist(excludes_, adr, m->name_excludeadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*excludes_.size(); - adr = namelist(equalities, adr, m->name_eqadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*equalities.size(); + adr = namelist(equalities_, adr, m->name_eqadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*equalities_.size(); - adr = namelist(tendons, adr, m->name_tendonadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*tendons.size(); + adr = namelist(tendons_, adr, m->name_tendonadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*tendons_.size(); - adr = namelist(actuators, adr, m->name_actuatoradr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*actuators.size(); + adr = namelist(actuators_, adr, m->name_actuatoradr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*actuators_.size(); - adr = namelist(sensors, adr, m->name_sensoradr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*sensors.size(); + adr = namelist(sensors_, adr, m->name_sensoradr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*sensors_.size(); - adr = namelist(numerics, adr, m->name_numericadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*numerics.size(); + adr = namelist(numerics_, adr, m->name_numericadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*numerics_.size(); - adr = namelist(texts, adr, m->name_textadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*texts.size(); + adr = namelist(texts_, adr, m->name_textadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*texts_.size(); - adr = namelist(tuples, adr, m->name_tupleadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*tuples.size(); + adr = namelist(tuples_, adr, m->name_tupleadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*tuples_.size(); - adr = namelist(keys, adr, m->name_keyadr, m->names, map_adr); - map_adr += mjLOAD_MULTIPLE*keys.size(); + adr = namelist(keys_, adr, m->name_keyadr, m->names, map_adr); + map_adr += mjLOAD_MULTIPLE*keys_.size(); - adr = namelist(plugins, adr, m->name_pluginadr, m->names, map_adr); + adr = namelist(plugins_, adr, m->name_pluginadr, m->names, map_adr); // check size, SHOULD NOT OCCUR if (adr != nnames) { @@ -1756,10 +1714,10 @@ void mjCModel::CopyPaths(mjModel* m) { // start with 0 address, unlike m->names m->paths might be empty size_t adr = 0; m->paths[0] = 0; - adr = pathlist(hfields, adr, m->hfield_pathadr, m->paths); - adr = pathlist(meshes, adr, m->mesh_pathadr, m->paths); - adr = pathlist(skins, adr, m->skin_pathadr, m->paths); - adr = pathlist(textures, adr, m->tex_pathadr, m->paths); + adr = pathlist(hfields_, adr, m->hfield_pathadr, m->paths); + adr = pathlist(meshes_, adr, m->mesh_pathadr, m->paths); + adr = pathlist(skins_, adr, m->skin_pathadr, m->paths); + adr = pathlist(textures_, adr, m->tex_pathadr, m->paths); } @@ -1774,8 +1732,8 @@ void mjCModel::CopyTree(mjModel* m) { // main loop over bodies for (int i=0; iparentid]; + mjCBody* pb = bodies_[i]; + mjCBody* par = bodies_[pb->parentid]; // set body fields m->body_parentid[i] = pb->parentid; @@ -2141,14 +2099,14 @@ void mjCModel::CopyTree(mjModel* m) { // compute subtreedofs in backward pass over bodies for (int i = nbody - 1; i > 0; i--) { // add body dofs to self count - bodies[i]->subtreedofs += bodies[i]->dofnum; + bodies_[i]->subtreedofs += bodies_[i]->dofnum; // add to parent count - bodies[bodies[i]->parentid]->subtreedofs += bodies[i]->subtreedofs; + bodies_[bodies_[i]->parentid]->subtreedofs += bodies_[i]->subtreedofs; } // make sure all dofs are in world "subtree", SHOULD NOT OCCUR - if (bodies[0]->subtreedofs != nv) { + if (bodies_[0]->subtreedofs != nv) { throw mjCError(0, "all DOFs should be in world subtree"); } @@ -2156,13 +2114,13 @@ void mjCModel::CopyTree(mjModel* m) { nB = 0; for (int i = 0; i < nbody; i++) { // add subtree dofs (including self) - nB += bodies[i]->subtreedofs; + nB += bodies_[i]->subtreedofs; // add dofs in ancestor bodies - int j = bodies[i]->parentid; + int j = bodies_[i]->parentid; while (j > 0) { - nB += bodies[j]->dofnum; - j = bodies[j]->parentid; + nB += bodies_[j]->dofnum; + j = bodies_[j]->parentid; } } m->nB = nB; @@ -2209,7 +2167,7 @@ void mjCModel::CopyObjects(mjModel* m) { graph_adr = 0; for (int i=0; imesh_vertadr[i] = vert_adr; @@ -2271,7 +2229,7 @@ void mjCModel::CopyObjects(mjModel* m) { texcoord_adr = 0; for (int i=0; iflex_contype[i] = pfl->contype; @@ -2333,8 +2291,8 @@ void mjCModel::CopyObjects(mjModel* m) { // find equality constraint referencing this flex m->flex_edgeequality[i] = 0; - for (int k=0; k<(int)equalities.size(); k++) { - if (equalities[k]->type==mjEQ_FLEX && equalities[k]->name1_==pfl->name) { + for (int k=0; k<(int)equalities_.size(); k++) { + if (equalities_[k]->type==mjEQ_FLEX && equalities_[k]->name1_==pfl->name) { m->flex_edgeequality[i] = 1; break; } @@ -2378,7 +2336,7 @@ void mjCModel::CopyObjects(mjModel* m) { // check if vertex body weldids are the same int b1 = pfl->vertbodyid[pfl->edge[k].first]; int b2 = pfl->vertbodyid[pfl->edge[k].second]; - m->flexedge_rigid[edge_adr+k] = (bodies[b1]->weldid == bodies[b2]->weldid); + m->flexedge_rigid[edge_adr+k] = (bodies_[b1]->weldid == bodies_[b2]->weldid); } } @@ -2401,7 +2359,7 @@ void mjCModel::CopyObjects(mjModel* m) { bonevert_adr = 0; for (int i=0; iskin_matid[i] = psk->matid; @@ -2458,7 +2416,7 @@ void mjCModel::CopyObjects(mjModel* m) { data_adr = 0; for (int i=0; ihfield_size+4*i, phf->size, 4); @@ -2477,7 +2435,7 @@ void mjCModel::CopyObjects(mjModel* m) { data_adr = 0; for (int i=0; itex_type[i] = ptex->type; @@ -2495,7 +2453,7 @@ void mjCModel::CopyObjects(mjModel* m) { // materials for (int i=0; imat_texid[i] = pmat->texid; @@ -2512,27 +2470,27 @@ void mjCModel::CopyObjects(mjModel* m) { // geom pairs to include for (int i=0; ipair_dim[i] = pairs[i]->condim; - m->pair_geom1[i] = pairs[i]->geom1->id; - m->pair_geom2[i] = pairs[i]->geom2->id; - m->pair_signature[i] = pairs[i]->signature; - copyvec(m->pair_solref+mjNREF*i, pairs[i]->solref, mjNREF); - copyvec(m->pair_solreffriction+mjNREF*i, pairs[i]->solreffriction, mjNREF); - copyvec(m->pair_solimp+mjNIMP*i, pairs[i]->solimp, mjNIMP); - m->pair_margin[i] = (mjtNum)pairs[i]->margin; - m->pair_gap[i] = (mjtNum)pairs[i]->gap; - copyvec(m->pair_friction+5*i, pairs[i]->friction, 5); + m->pair_dim[i] = pairs_[i]->condim; + m->pair_geom1[i] = pairs_[i]->geom1->id; + m->pair_geom2[i] = pairs_[i]->geom2->id; + m->pair_signature[i] = pairs_[i]->signature; + copyvec(m->pair_solref+mjNREF*i, pairs_[i]->solref, mjNREF); + copyvec(m->pair_solreffriction+mjNREF*i, pairs_[i]->solreffriction, mjNREF); + copyvec(m->pair_solimp+mjNIMP*i, pairs_[i]->solimp, mjNIMP); + m->pair_margin[i] = (mjtNum)pairs_[i]->margin; + m->pair_gap[i] = (mjtNum)pairs_[i]->gap; + copyvec(m->pair_friction+5*i, pairs_[i]->friction, 5); } // body pairs to exclude for (int i=0; iexclude_signature[i] = excludes[i]->signature; + m->exclude_signature[i] = excludes_[i]->signature; } // equality constraints for (int i=0; ieq_type[i] = peq->type; @@ -2548,7 +2506,7 @@ void mjCModel::CopyObjects(mjModel* m) { adr = 0; for (int i=0; itendon_adr[i] = adr; @@ -2590,7 +2548,7 @@ void mjCModel::CopyObjects(mjModel* m) { adr = 0; for (int i=0; iactuator_trntype[i] = pac->trntype; @@ -2623,7 +2581,7 @@ void mjCModel::CopyObjects(mjModel* m) { adr = 0; for (int i=0; isensor_type[i] = psen->type; @@ -2647,7 +2605,7 @@ void mjCModel::CopyObjects(mjModel* m) { adr = 0; for (int i=0; inumeric_adr[i] = adr; @@ -2667,7 +2625,7 @@ void mjCModel::CopyObjects(mjModel* m) { adr = 0; for (int i=0; itext_adr[i] = adr; @@ -2682,7 +2640,7 @@ void mjCModel::CopyObjects(mjModel* m) { adr = 0; for (int i=0; ituple_adr[i] = adr; @@ -2700,15 +2658,15 @@ void mjCModel::CopyObjects(mjModel* m) { // copy keyframe data for (int i=0; ikey_time[i] = (mjtNum)keys[i]->time; - copyvec(m->key_qpos+i*nq, keys[i]->qpos_.data(), nq); - copyvec(m->key_qvel+i*nv, keys[i]->qvel_.data(), nv); + m->key_time[i] = (mjtNum)keys_[i]->time; + copyvec(m->key_qpos+i*nq, keys_[i]->qpos_.data(), nq); + copyvec(m->key_qvel+i*nv, keys_[i]->qvel_.data(), nv); if (na) { - copyvec(m->key_act+i*na, keys[i]->act_.data(), na); + copyvec(m->key_act+i*na, keys_[i]->act_.data(), na); } if (nmocap) { - copyvec(m->key_mpos + i*3*nmocap, keys[i]->mpos_.data(), 3*nmocap); - copyvec(m->key_mquat + i*4*nmocap, keys[i]->mquat_.data(), 4*nmocap); + copyvec(m->key_mpos + i*3*nmocap, keys_[i]->mpos_.data(), 3*nmocap); + copyvec(m->key_mquat + i*4*nmocap, keys_[i]->mquat_.data(), 4*nmocap); } // normalize quaternions in m->key_qpos @@ -2723,7 +2681,7 @@ void mjCModel::CopyObjects(mjModel* m) { mju_normalize4(m->key_mquat+i*4*nmocap+4*j); } - copyvec(m->key_ctrl+i*nu, keys[i]->ctrl_.data(), nu); + copyvec(m->key_ctrl+i*nu, keys_[i]->ctrl_.data(), nu); } // save qpos0 in user model (to recognize changed key_qpos in write) @@ -2765,9 +2723,9 @@ void mjCModel::FuseReindex(mjCBody* body) { body->bodies[i]->id : body->weldid); } - makelistid(joints, body->joints); - makelistid(geoms, body->geoms); - makelistid(sites, body->sites); + makelistid(joints_, body->joints); + makelistid(geoms_, body->geoms); + makelistid(sites_, body->sites); // process children recursively for (int i=0; ibodies.size(); i++) { @@ -2780,24 +2738,24 @@ void mjCModel::FuseReindex(mjCBody* body) { // fuse static bodies with their parent void mjCModel::FuseStatic(void) { // skip if model has potential to reference elements with changed ids - if (!skins.empty() || - !pairs.empty() || - !excludes.empty() || - !equalities.empty() || - !tendons.empty() || - !actuators.empty() || - !sensors.empty() || - !tuples.empty() || - !cameras.empty() || - !lights.empty()) { + if (!skins_.empty() || + !pairs_.empty() || + !excludes_.empty() || + !equalities_.empty() || + !tendons_.empty() || + !actuators_.empty() || + !sensors_.empty() || + !tuples_.empty() || + !cameras_.empty() || + !lights_.empty()) { return; } // process fusable bodies - for (int i=1; iparentid]; + mjCBody* body = bodies_[i]; + mjCBody* par = bodies_[body->parentid]; // skip if body has joints or mocap if (!body->joints.empty() || body->mocap) { @@ -2938,9 +2896,9 @@ void mjCModel::FuseStatic(void) { // find in global and erase found = false; - for (auto iter=bodies.begin(); iter!=bodies.end(); iter++) { + for (auto iter=bodies_.begin(); iter!=bodies_.end(); iter++) { if (*iter==body) { - bodies.erase(iter); + bodies_.erase(iter); found = true; break; } @@ -2956,15 +2914,15 @@ void mjCModel::FuseStatic(void) { //------------- re-index bodies, joints, geoms, sites // body ids - for (int j=0; jid = j; + for (int j=0; jid = j; } // everything else - joints.clear(); - geoms.clear(); - sites.clear(); - FuseReindex(bodies[0]); + joints_.clear(); + geoms_.clear(); + sites_.clear(); + FuseReindex(bodies_[0]); // recompute parent contype, conaffinity, and margin par->contype = par->conaffinity = 0; @@ -3063,14 +3021,14 @@ static void processlist(mjListKeyMap& ids, vector& list, // set object ids, check for repeated names void mjCModel::ProcessLists(bool checkrepeat) { for (int i = 0; i < mjNOBJECT; i++) { - if (i != mjOBJ_XBODY && object_lists[i]) { + if (i != mjOBJ_XBODY && object_lists_[i]) { ids[i].clear(); - processlist(ids, *object_lists[i], (mjtObj) i, checkrepeat); + processlist(ids, *object_lists_[i], (mjtObj) i, checkrepeat); } } // check repeated names in meta elements - processlist(ids, frames, mjOBJ_FRAME, checkrepeat); + processlist(ids, frames_, mjOBJ_FRAME, checkrepeat); } @@ -3095,12 +3053,12 @@ static void warninghandler(const char* msg) { mjModel* mjCModel::Compile(const mjVFS* vfs) { if (compiled) { // clear kinematic tree - for (int i=0; isubtreedofs = 0; + for (int i=0; isubtreedofs = 0; } - mjCBody* world = bodies[0]; + mjCBody* world = bodies_[0]; Clear(); - bodies.push_back(world); + bodies_.push_back(world); } CopyFromSpec(); @@ -3140,9 +3098,9 @@ mjModel* mjCModel::Compile(const mjVFS* vfs) { // deallocate everything allocated in Compile mj_deleteModel(m); mj_deleteData(data); - mjCBody* world = bodies[0]; + mjCBody* world = bodies_[0]; Clear(); - bodies.push_back(world); + bodies_.push_back(world); // save error info errInfo = err; @@ -3169,12 +3127,12 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { } // check for joints in world body - if (!bodies[0]->joints.empty()) { + if (!bodies_[0]->joints.empty()) { throw mjCError(0, "joint found in world body"); } // check for too many body+flex - if (bodies.size()+flexes.size()>=65534) { + if (bodies_.size()+flexes_.size()>=65534) { throw mjCError(0, "number of bodies plus flexes must be less than 65534"); } @@ -3193,18 +3151,18 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { } // add missing keyframes - for (int i=keys.size(); imesh && - (geoms[i]->spec.type==mjGEOM_MESH || geoms[i]->spec.type==mjGEOM_SDF) && - (geoms[i]->spec.contype || geoms[i]->spec.conaffinity)) { - geoms[i]->mesh->set_needhull(true); + for (int i=0; imesh && + (geoms_[i]->spec.type==mjGEOM_MESH || geoms_[i]->spec.type==mjGEOM_SDF) && + (geoms_[i]->spec.contype || geoms_[i]->spec.conaffinity)) { + geoms_[i]->mesh->set_needhull(true); } } @@ -3234,42 +3192,42 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { SetNuser(); // compile meshes (needed for geom compilation) - for (int i=0; iCompile(vfs); + for (int i=0; iCompile(vfs); } // compile objects in kinematic tree - for (int i=0; iCompile(); // also compiles joints, geoms, sites, cameras, lights, frames + for (int i=0; iCompile(); // also compiles joints, geoms, sites, cameras, lights, frames } // compile all other objects except for keyframes - for (int i=0; iCompile(vfs); - for (int i=0; iCompile(vfs); - for (int i=0; iCompile(vfs); - for (int i=0; iCompile(vfs); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); - for (int i=0; iCompile(); + for (auto flex : flexes_) flex->Compile(vfs); + for (auto skin : skins_) skin->Compile(vfs); + for (auto hfield : hfields_) hfield->Compile(vfs); + for (auto texture : textures_) texture->Compile(vfs); + for (auto material : materials_) material->Compile(); + for (auto pair : pairs_) pair->Compile(); + for (auto exclude : excludes_) exclude->Compile(); + for (auto equality : equalities_) equality->Compile(); + for (auto tendon : tendons_) tendon->Compile(); + for (auto actuator : actuators_) actuator->Compile(); + for (auto sensor : sensors_) sensor->Compile(); + for (auto numeric : numerics_) numeric->Compile(); + for (auto text : texts_) text->Compile(); + for (auto tuple : tuples_) tuple->Compile(); + for (auto plugin : plugins_) plugin->Compile(); - // compile defaults: to enforce userdata length for writer - for (int i=0; iCompile(this); + // compile def: to enforce userdata length for writer + for (mjCDef* def : defaults_) { + def->Compile(this); } // sort pair, exclude in increasing signature order; reassign ids - std::stable_sort(pairs.begin(), pairs.end(), comparePair); - std::stable_sort(excludes.begin(), excludes.end(), compareBodyPair); - reassignid(pairs); - reassignid(excludes); + std::stable_sort(pairs_.begin(), pairs_.end(), comparePair); + std::stable_sort(excludes_.begin(), excludes_.end(), compareBodyPair); + reassignid(pairs_); + reassignid(excludes_); // resolve asset references, compute sizes IndexAssets(discardvisual); @@ -3280,18 +3238,18 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { } // set nmocap and body.mocapid - for (int i=0; imocap) { - bodies[i]->mocapid = nmocap; + for (mjCBody* body : bodies_) { + if (body->mocap) { + body->mocapid = nmocap; nmocap++; } else { - bodies[i]->mocapid = -1; + body->mocapid = -1; } } // check body mass and inertia - for (int i=1; ijoints.empty() && @@ -3345,10 +3303,10 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { { int adr = 0; for (int i = 0; i < nplugin; ++i) { - m->plugin[i] = plugins[i]->spec.plugin_slot; - const int size = plugins[i]->flattened_attributes.size(); + m->plugin[i] = plugins_[i]->spec.plugin_slot; + const int size = plugins_[i]->flattened_attributes.size(); std::memcpy(m->plugin_attr + adr, - plugins[i]->flattened_attributes.data(), size); + plugins_[i]->flattened_attributes.data(), size); m->plugin_attradr[i] = adr; adr += size; } @@ -3359,8 +3317,8 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { // set actuator_plugin to the plugin instance ID std::vector> plugin_to_actuators(nplugin); for (int i = 0; i < nu; ++i) { - if (actuators[i]->plugin.active) { - int actuator_plugin = static_cast(actuators[i]->plugin.instance)->id; + if (actuators_[i]->plugin.active) { + int actuator_plugin = static_cast(actuators_[i]->plugin.instance)->id; m->actuator_plugin[i] = actuator_plugin; plugin_to_actuators[actuator_plugin].push_back(i); } else { @@ -3369,16 +3327,16 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { } for (int i = 0; i < nbody; ++i) { - if (bodies[i]->plugin.active) { - m->body_plugin[i] = static_cast(bodies[i]->plugin.instance)->id; + if (bodies_[i]->plugin.active) { + m->body_plugin[i] = static_cast(bodies_[i]->plugin.instance)->id; } else { m->body_plugin[i] = -1; } } for (int i = 0; i < ngeom; ++i) { - if (geoms[i]->plugin.active) { - m->geom_plugin[i] = static_cast(geoms[i]->plugin.instance)->id; + if (geoms_[i]->plugin.active) { + m->geom_plugin[i] = static_cast(geoms_[i]->plugin.instance)->id; } else { m->geom_plugin[i] = -1; } @@ -3386,8 +3344,8 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { std::vector> plugin_to_sensors(nplugin); for (int i = 0; i < nsensor; ++i) { - if (sensors[i]->type == mjSENS_PLUGIN) { - int sensor_plugin = static_cast(sensors[i]->plugin.instance)->id; + if (sensors_[i]->type == mjSENS_PLUGIN) { + int sensor_plugin = static_cast(sensors_[i]->plugin.instance)->id; m->sensor_plugin[i] = sensor_plugin; plugin_to_sensors[sensor_plugin].push_back(i); } else { @@ -3413,8 +3371,8 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { mju_error("`nsensordata` is null for plugin at slot %d", m->plugin[i]); } int nsensordata = plugin->nsensordata(m, i, sensor_id); - sensors[sensor_id]->dim = nsensordata; - sensors[sensor_id]->needstage = + sensors_[sensor_id]->dim = nsensordata; + sensors_[sensor_id]->needstage = static_cast(plugin->needstage); this->nsensordata += nsensordata; } @@ -3422,7 +3380,7 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { if ((plugin->capabilityflags & mjPLUGIN_ACTUATOR) && plugin->actuator_actdim) { for (int actuator_id : plugin_to_actuators[i]) { int plugin_actdim = plugin->actuator_actdim(m, i, actuator_id); - actuators[actuator_id]->plugin_actdim = plugin_actdim; + actuators_[actuator_id]->plugin_actdim = plugin_actdim; this->na += plugin_actdim; } } @@ -3431,8 +3389,8 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { } // keyframe compilation needs access to nq, nv, na, nmocap, qpos0 - for (int i=0; iCompile(m); + for (int i=0; iCompile(m); } // copy objects outsite kinematic tree (including keyframes) @@ -3598,16 +3556,16 @@ bool mjCModel::CopyBack(const mjModel* m) { // qpos0, qpos_spring for (int i=0; itype) { + switch (joints_[i]->type) { case mjJNT_FREE: - copyvec(bodies[m->jnt_bodyid[i]]->pos, m->qpos0+m->jnt_qposadr[i], 3); - copyvec(bodies[m->jnt_bodyid[i]]->quat, m->qpos0+m->jnt_qposadr[i]+3, 4); + copyvec(bodies_[m->jnt_bodyid[i]]->pos, m->qpos0+m->jnt_qposadr[i], 3); + copyvec(bodies_[m->jnt_bodyid[i]]->quat, m->qpos0+m->jnt_qposadr[i]+3, 4); break; case mjJNT_SLIDE: case mjJNT_HINGE: - joints[i]->ref = (double)m->qpos0[m->jnt_qposadr[i]]; - joints[i]->springref = (double)m->qpos_spring[m->jnt_qposadr[i]]; + joints_[i]->ref = (double)m->qpos0[m->jnt_qposadr[i]]; + joints_[i]->springref = (double)m->qpos_spring[m->jnt_qposadr[i]]; break; case mjJNT_BALL: @@ -3620,7 +3578,7 @@ bool mjCModel::CopyBack(const mjModel* m) { // body mjCBody* pb; for (int i=0; ipos, m->body_pos+3*i, 3); copyvec(pb->quat, m->body_quat+4*i, 4); @@ -3637,7 +3595,7 @@ bool mjCModel::CopyBack(const mjModel* m) { // joint and dof mjCJoint* pj; for (int i=0; ipos, m->jnt_pos+3*i, 3); @@ -3664,7 +3622,7 @@ bool mjCModel::CopyBack(const mjModel* m) { // geom mjCGeom* pg; for (int i=0; isize, m->geom_size+3*i, 3); copyvec(pg->pos, m->geom_pos+3*i, 3); @@ -3685,7 +3643,7 @@ bool mjCModel::CopyBack(const mjModel* m) { // mesh mjCMesh* pm; for (int i=0; iGetOffsetPosPtr(), m->mesh_pos+3*i, 3); copyvec(pm->GetOffsetQuatPtr(), m->mesh_quat+4*i, 4); } @@ -3693,7 +3651,7 @@ bool mjCModel::CopyBack(const mjModel* m) { // heightfield mjCHField* phf; for (int i=0; iget_userdata().size(); if (size) { int nrow = m->hfield_nrow[i]; @@ -3710,92 +3668,92 @@ bool mjCModel::CopyBack(const mjModel* m) { // sites for (int i=0; isize, m->site_size + 3 * i, 3); - copyvec(sites[i]->pos, m->site_pos+3*i, 3); - copyvec(sites[i]->quat, m->site_quat+4*i, 4); - copyvec(sites[i]->rgba, m->site_rgba+4*i, 4); + copyvec(sites_[i]->size, m->site_size + 3 * i, 3); + copyvec(sites_[i]->pos, m->site_pos+3*i, 3); + copyvec(sites_[i]->quat, m->site_quat+4*i, 4); + copyvec(sites_[i]->rgba, m->site_rgba+4*i, 4); if (nuser_site) { - copyvec(sites[i]->userdata_.data(), m->site_user + nuser_site*i, nuser_site); + copyvec(sites_[i]->userdata_.data(), m->site_user + nuser_site*i, nuser_site); } } // cameras for (int i=0; ipos, m->cam_pos+3*i, 3); - copyvec(cameras[i]->quat, m->cam_quat+4*i, 4); - cameras[i]->fovy = (double)m->cam_fovy[i]; - cameras[i]->ipd = (double)m->cam_ipd[i]; - copyvec(cameras[i]->resolution, m->cam_resolution+2*i, 2); - copyvec(cameras[i]->intrinsic, m->cam_intrinsic+4*i, 4); + copyvec(cameras_[i]->pos, m->cam_pos+3*i, 3); + copyvec(cameras_[i]->quat, m->cam_quat+4*i, 4); + cameras_[i]->fovy = (double)m->cam_fovy[i]; + cameras_[i]->ipd = (double)m->cam_ipd[i]; + copyvec(cameras_[i]->resolution, m->cam_resolution+2*i, 2); + copyvec(cameras_[i]->intrinsic, m->cam_intrinsic+4*i, 4); if (nuser_cam) { - copyvec(cameras[i]->userdata_.data(), m->cam_user + nuser_cam*i, nuser_cam); + copyvec(cameras_[i]->userdata_.data(), m->cam_user + nuser_cam*i, nuser_cam); } } // lights for (int i=0; ipos, m->light_pos+3*i, 3); - copyvec(lights[i]->dir, m->light_dir+3*i, 3); - copyvec(lights[i]->attenuation, m->light_attenuation+3*i, 3); - lights[i]->cutoff = m->light_cutoff[i]; - lights[i]->exponent = m->light_exponent[i]; - copyvec(lights[i]->ambient, m->light_ambient+3*i, 3); - copyvec(lights[i]->diffuse, m->light_diffuse+3*i, 3); - copyvec(lights[i]->specular, m->light_specular+3*i, 3); + copyvec(lights_[i]->pos, m->light_pos+3*i, 3); + copyvec(lights_[i]->dir, m->light_dir+3*i, 3); + copyvec(lights_[i]->attenuation, m->light_attenuation+3*i, 3); + lights_[i]->cutoff = m->light_cutoff[i]; + lights_[i]->exponent = m->light_exponent[i]; + copyvec(lights_[i]->ambient, m->light_ambient+3*i, 3); + copyvec(lights_[i]->diffuse, m->light_diffuse+3*i, 3); + copyvec(lights_[i]->specular, m->light_specular+3*i, 3); } // materials for (int i=0; itexrepeat, m->mat_texrepeat+2*i, 2); - materials[i]->emission = m->mat_emission[i]; - materials[i]->specular = m->mat_specular[i]; - materials[i]->shininess = m->mat_shininess[i]; - materials[i]->reflectance = m->mat_reflectance[i]; - copyvec(materials[i]->rgba, m->mat_rgba+4*i, 4); + copyvec(materials_[i]->texrepeat, m->mat_texrepeat+2*i, 2); + materials_[i]->emission = m->mat_emission[i]; + materials_[i]->specular = m->mat_specular[i]; + materials_[i]->shininess = m->mat_shininess[i]; + materials_[i]->reflectance = m->mat_reflectance[i]; + copyvec(materials_[i]->rgba, m->mat_rgba+4*i, 4); } // pairs for (int i=0; isolref, m->pair_solref+mjNREF*i, mjNREF); - copyvec(pairs[i]->solreffriction, m->pair_solreffriction+mjNREF*i, mjNREF); - copyvec(pairs[i]->solimp, m->pair_solimp+mjNIMP*i, mjNIMP); - pairs[i]->margin = (double)m->pair_margin[i]; - pairs[i]->gap = (double)m->pair_gap[i]; - copyvec(pairs[i]->friction, m->pair_friction+5*i, 5); + copyvec(pairs_[i]->solref, m->pair_solref+mjNREF*i, mjNREF); + copyvec(pairs_[i]->solreffriction, m->pair_solreffriction+mjNREF*i, mjNREF); + copyvec(pairs_[i]->solimp, m->pair_solimp+mjNIMP*i, mjNIMP); + pairs_[i]->margin = (double)m->pair_margin[i]; + pairs_[i]->gap = (double)m->pair_gap[i]; + copyvec(pairs_[i]->friction, m->pair_friction+5*i, 5); } // equality constraints for (int i=0; idata, m->eq_data+mjNEQDATA*i, mjNEQDATA); - copyvec(equalities[i]->solref, m->eq_solref+mjNREF*i, mjNREF); - copyvec(equalities[i]->solimp, m->eq_solimp+mjNIMP*i, mjNIMP); + copyvec(equalities_[i]->data, m->eq_data+mjNEQDATA*i, mjNEQDATA); + copyvec(equalities_[i]->solref, m->eq_solref+mjNREF*i, mjNREF); + copyvec(equalities_[i]->solimp, m->eq_solimp+mjNIMP*i, mjNIMP); } // tendons for (int i=0; irange, m->tendon_range+2*i, 2); - copyvec(tendons[i]->solref_limit, m->tendon_solref_lim+mjNREF*i, mjNREF); - copyvec(tendons[i]->solimp_limit, m->tendon_solimp_lim+mjNIMP*i, mjNIMP); - copyvec(tendons[i]->solref_friction, m->tendon_solref_fri+mjNREF*i, mjNREF); - copyvec(tendons[i]->solimp_friction, m->tendon_solimp_fri+mjNIMP*i, mjNIMP); - copyvec(tendons[i]->rgba, m->tendon_rgba+4*i, 4); - tendons[i]->width = (double)m->tendon_width[i]; - tendons[i]->margin = (double)m->tendon_margin[i]; - tendons[i]->stiffness = (double)m->tendon_stiffness[i]; - tendons[i]->damping = (double)m->tendon_damping[i]; - tendons[i]->frictionloss = (double)m->tendon_frictionloss[i]; + copyvec(tendons_[i]->range, m->tendon_range+2*i, 2); + copyvec(tendons_[i]->solref_limit, m->tendon_solref_lim+mjNREF*i, mjNREF); + copyvec(tendons_[i]->solimp_limit, m->tendon_solimp_lim+mjNIMP*i, mjNIMP); + copyvec(tendons_[i]->solref_friction, m->tendon_solref_fri+mjNREF*i, mjNREF); + copyvec(tendons_[i]->solimp_friction, m->tendon_solimp_fri+mjNIMP*i, mjNIMP); + copyvec(tendons_[i]->rgba, m->tendon_rgba+4*i, 4); + tendons_[i]->width = (double)m->tendon_width[i]; + tendons_[i]->margin = (double)m->tendon_margin[i]; + tendons_[i]->stiffness = (double)m->tendon_stiffness[i]; + tendons_[i]->damping = (double)m->tendon_damping[i]; + tendons_[i]->frictionloss = (double)m->tendon_frictionloss[i]; if (nuser_tendon) { - copyvec(tendons[i]->userdata_.data(), m->tendon_user + nuser_tendon*i, nuser_tendon); + copyvec(tendons_[i]->userdata_.data(), m->tendon_user + nuser_tendon*i, nuser_tendon); } } // actuators mjCActuator* pa; for (int i=0; idynprm, m->actuator_dynprm+i*mjNDYN, mjNDYN); copyvec(pa->gainprm, m->actuator_gainprm+i*mjNGAIN, mjNGAIN); @@ -3814,31 +3772,31 @@ bool mjCModel::CopyBack(const mjModel* m) { // sensors for (int i=0; icutoff = (double)m->sensor_cutoff[i]; - sensors[i]->noise = (double)m->sensor_noise[i]; + sensors_[i]->cutoff = (double)m->sensor_cutoff[i]; + sensors_[i]->noise = (double)m->sensor_noise[i]; if (nuser_sensor) { - copyvec(sensors[i]->userdata_.data(), m->sensor_user + nuser_sensor*i, nuser_sensor); + copyvec(sensors_[i]->userdata_.data(), m->sensor_user + nuser_sensor*i, nuser_sensor); } } // numeric data for (int i=0; inumeric_size[i]; j++) { - numerics[i]->data_[j] = (double)m->numeric_data[m->numeric_adr[i]+j]; + numerics_[i]->data_[j] = (double)m->numeric_data[m->numeric_adr[i]+j]; } } // tuple data for (int i=0; ituple_size[i]; j++) { - tuples[i]->objprm_[j] = (double)m->tuple_objprm[m->tuple_adr[i]+j]; + tuples_[i]->objprm_[j] = (double)m->tuple_objprm[m->tuple_adr[i]+j]; } } // keyframes for (int i=0; inkey; i++) { - mjCKey* pk = keys[i]; + mjCKey* pk = keys_[i]; pk->time = (double)m->key_time[i]; copyvec(pk->qpos_.data(), m->key_qpos + i*nq, nq); @@ -3864,9 +3822,9 @@ void mjCModel::ResolvePlugin(mjCBase* obj, const std::string& plugin_name, // (in XML, active plugins are those declared as ) int plugin_slot = -1; if (!plugin_name.empty()) { - for (int i = 0; i < active_plugins.size(); ++i) { - if (active_plugins[i].first->name == plugin_name) { - plugin_slot = active_plugins[i].second; + for (int i = 0; i < active_plugins_.size(); ++i) { + if (active_plugins_[i].first->name == plugin_name) { + plugin_slot = active_plugins_[i].second; break; } } diff --git a/src/user/user_model.h b/src/user/user_model.h index 61511d4f..1138bc45 100644 --- a/src/user/user_model.h +++ b/src/user/user_model.h @@ -192,14 +192,6 @@ class mjCModel : public mjCModel_, private mjSpec { mjCKey* AddKey(); mjCPlugin* AddPlugin(); - // copy vector of elements to this model - template void CopyList(std::vector& dest, - const std::vector& source, - std::map& def_map, - const std::vector& defaults); - - // delete from list the elements that are compatible with other but not this model - template void RemoveFromList(std::vector& list, const mjCModel& other); // delete elements marked as discard=true template void Delete(std::vector& elements, @@ -214,43 +206,58 @@ class mjCModel : public mjCModel_, private mjSpec { // API for access to other variables bool IsCompiled() const; // is model already compiled - const mjCError& GetError(void) const; // get reference of error object - mjCBody* GetWorld() const; // pointer to world body - mjCDef* FindDef(std::string name) const; // find default class name - mjCDef* AddDef(std::string name, int parentid); // add default class to array + const mjCError& GetError() const; // get reference of error object + mjCBody* GetWorld(); // pointer to world body + mjCDef* FindDefault(std::string name); // find defaults class name + mjCDef* AddDefault(std::string name, int parentid); // add defaults class to array mjCBase* FindObject(mjtObj type, std::string name) const; // find object given type and name - mjCBody* FindBody(mjCBody* body, std::string name) const; // find body given name + mjCBody* FindBody(mjCBody* body, std::string name); // find body given name mjCFrame* FindFrame(mjCBody* body, std::string name) const; // find frame given name bool IsNullPose(const mjtNum* pos, const mjtNum* quat) const; // detect null pose + void SetActivePlugins(const std::vector>&& active_plugins) { + active_plugins_ = std::move(active_plugins); + } // accessors - std::string get_meshdir(void) const { return meshdir_; } - std::string get_texturedir(void) const { return texturedir_; } + std::string get_meshdir() const { return meshdir_; } + std::string get_texturedir() const { return texturedir_; } + + const std::vector& Defaults() const { return defaults_; } + + const std::vector>& ActivePlugins() const { + return active_plugins_; + }; + + const std::vector& Flexes() const { return flexes_; } + const std::vector& Meshes() const {return meshes_; } + const std::vector& Skins() const { return skins_; } + const std::vector& HFields() const { return hfields_; } + const std::vector& Textures() const { return textures_; } + const std::vector& Materials() const { return materials_; } + const std::vector& Pairs() const { return pairs_; } + const std::vector& Excludes() const { return excludes_; } + const std::vector& Equalities() const { return equalities_; } + const std::vector& Tendons() const { return tendons_; } + const std::vector& Actuators() const { return actuators_; } + const std::vector& Sensors() const { return sensors_; } + const std::vector& Numerics() const { return numerics_; } + const std::vector& Texts() const { return texts_; } + const std::vector& Tuples() const { return tuples_; } + const std::vector& Keys() const { return keys_; } + const std::vector& Plugins() const { return plugins_; } + const std::vector& Bodies() const { return bodies_; } + const std::vector& Geoms() const { return geoms_; } // resolve plugin instance, create a new one if needed void ResolvePlugin(mjCBase* obj, const std::string& plugin_name, const std::string& plugin_instance_name, mjCPlugin** plugin_instance); - // settings for each defaults class - std::vector defaults; - - // list of active plugins - std::vector> active_plugins; - - private: void TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs); mjModel* _Compile(const mjVFS* vfs); // clear objects allocated by Compile - void Clear(void); - - // add object of any type - template T* AddObject(std::vector& list, std::string type); - - // add object of any type, with def parameter - template T* AddObjectDef(std::vector& list, std::string type, - mjCDef* def); + void Clear(); // if asset name is missing, set to filename template void SetDefaultNames(std::vector& assets); @@ -259,6 +266,13 @@ class mjCModel : public mjCModel_, private mjSpec { template void DeleteMaterial(std::vector& list, std::string_view name = ""); + private: + // settings for each defaults class + std::vector defaults_; + + // list of active plugins + std::vector> active_plugins_; + // compile phases void MakeLists(mjCBody* body); // make lists of bodies, geoms, joints, sites void SetNuser(); // set nuser fields @@ -273,35 +287,51 @@ class mjCModel : public mjCModel_, private mjSpec { void CopyTree(mjModel*); // copy objects inside kinematic tree // objects created here - std::vector flexes; // list of flexes - std::vector meshes; // list of meshes - std::vector skins; // list of skins - std::vector hfields; // list of height fields - std::vector textures; // list of textures - std::vector materials; // list of materials - std::vector pairs; // list of geom pairs to include - std::vector excludes; // list of body pairs to exclude - std::vector equalities; // list of equality constraints - std::vector tendons; // list of tendons - std::vector actuators; // list of actuators - std::vector sensors; // list of sensors - std::vector numerics; // list of numeric fields - std::vector texts; // list of text fields - std::vector tuples; // list of tuple fields - std::vector keys; // list of keyframe fields - std::vector plugins; // list of plugin instances + std::vector flexes_; // list of flexes + std::vector meshes_; // list of meshes + std::vector skins_; // list of skins + std::vector hfields_; // list of height fields + std::vector textures_; // list of textures + std::vector materials_; // list of materials + std::vector pairs_; // list of geom pairs to include + std::vector excludes_; // list of body pairs to exclude + std::vector equalities_; // list of equality constraints + std::vector tendons_; // list of tendons + std::vector actuators_; // list of actuators + std::vector sensors_; // list of sensors + std::vector numerics_; // list of numeric fields + std::vector texts_; // list of text fields + std::vector tuples_; // list of tuple fields + std::vector keys_; // list of keyframe fields + std::vector plugins_; // list of plugin instances // pointers to objects created inside kinematic tree - std::vector bodies; // list of bodies - std::vector joints; // list of joints allowing motion relative to parent - std::vector geoms; // list of geoms attached to this body - std::vector sites; // list of sites attached to this body - std::vector cameras; // list of cameras - std::vector lights; // list of lights - std::vector frames; // list of frames + std::vector bodies_; // list of bodies + std::vector joints_; // list of joints allowing motion relative to parent + std::vector geoms_; // list of geoms attached to this body + std::vector sites_; // list of sites attached to this body + std::vector cameras_; // list of cameras + std::vector lights_; // list of lights + std::vector frames_; // list of frames // array of pointers to each object list (enumerated by type) - std::array*, mjNOBJECT> object_lists; + std::array*, mjNOBJECT> object_lists_; + + // add object of any type + template T* AddObject(std::vector& list, std::string type); + + // add object of any type, with defaults parameter + template T* AddObjectDefault(std::vector& list, std::string type, + mjCDef* def); + + // copy vector of elements to this model + template void CopyList(std::vector& dest, + const std::vector& sources, + std::map& def_map, + const std::vector& defaults); + + // delete from list the elements that are compatible with other but not this model + template void RemoveFromList(std::vector& list, const mjCModel& other); // create mjCBase lists from children lists void CreateObjectLists(); diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index 438b5e7b..8a27ed76 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -1497,7 +1497,7 @@ void mjCBody::Compile(void) { // compute body global pose (no joint transformations in qpos0) if (id>0) { - mjCBody* par = model->bodies[parentid]; + mjCBody* par = model->Bodies()[parentid]; mju_rotVecQuat(xpos0, pos, par->xquat0); mju_addTo3(xpos0, par->xpos0); mju_mulQuat(xquat0, par->xquat0, quat); @@ -1679,7 +1679,7 @@ mjCJoint::mjCJoint(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // point to local PointToLocal(); @@ -1883,7 +1883,7 @@ mjCGeom::mjCGeom(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // point to local PointToLocal(); @@ -1969,7 +1969,7 @@ double mjCGeom::GetVolume(void) { // get from mesh if (type==mjGEOM_MESH || type==mjGEOM_SDF) { - if (mesh->id<0 || !((std::size_t) mesh->id <= model->meshes.size())) { + if (mesh->id<0 || !((std::size_t) mesh->id <= model->Meshes().size())) { throw mjCError(this, "invalid mesh id in mesh geom"); } @@ -2022,7 +2022,7 @@ void mjCGeom::SetInertia(void) { // get from mesh if (type==mjGEOM_MESH || type==mjGEOM_SDF) { - if (mesh->id<0 || !((std::size_t) mesh->id <= model->meshes.size())) { + if (mesh->id<0 || !((std::size_t) mesh->id <= model->Meshes().size())) { throw mjCError(this, "invalid mesh id in mesh geom"); } @@ -2523,7 +2523,7 @@ mjCSite::mjCSite(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); } @@ -2669,7 +2669,7 @@ mjCCamera::mjCCamera(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // point to local PointToLocal(); @@ -2823,7 +2823,7 @@ mjCLight::mjCLight(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); PointToLocal(); CopyFromSpec(); @@ -3860,7 +3860,7 @@ mjCMaterial::mjCMaterial(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // point to local PointToLocal(); @@ -3948,7 +3948,7 @@ mjCPair::mjCPair(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // point to local PointToLocal(); @@ -4309,7 +4309,7 @@ mjCEquality::mjCEquality(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // point to local PointToLocal(); @@ -4444,7 +4444,7 @@ void mjCEquality::Compile(void) { ResolveReferences(model); // make sure flex is not rigid - if (type==mjEQ_FLEX && model->flexes[obj1id]->rigid) { + if (type==mjEQ_FLEX && model->Flexes()[obj1id]->rigid) { throw mjCError(this, "rigid flex '%s' in equality constraint %d", name1_.c_str(), id); } } @@ -4471,7 +4471,7 @@ mjCTendon::mjCTendon(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // point to local PointToLocal(); @@ -4763,7 +4763,7 @@ void mjCTendon::Compile(void) { } // mark geoms as non visual - model->geoms[path[i]->obj->id]->SetNotVisual(); + model->Geoms()[path[i]->obj->id]->SetNotVisual(); break; case mjWRAP_JOINT: @@ -4950,7 +4950,7 @@ mjCActuator::mjCActuator(mjCModel* _model, mjCDef* _def) { // set model, def model = _model; - def = (_def ? _def : (_model ? _model->defaults[0] : 0)); + def = (_def ? _def : (_model ? _model->Defaults()[0] : 0)); // in case this actuator is not compiled CopyFromSpec(); diff --git a/src/user/user_objects.h b/src/user/user_objects.h index 644f8898..f6df07b6 100644 --- a/src/user/user_objects.h +++ b/src/user/user_objects.h @@ -107,8 +107,8 @@ class mjCBoundingVolume { void SetId(int val) { idval_ = val; } private: - int idval_; // local id copy for nodes not storing their id's (e.g. faces) - const int* id_; // pointer to object id + int idval_; // local id copy for nodes not storing their id's (e.g. faces) + const int* id_; // pointer to object id }; @@ -354,6 +354,10 @@ class mjCFrame : public mjCFrame_, private mjsFrame { friend class mjCModel; public: + mjCFrame(mjCModel* = 0, mjCFrame* = 0); + mjCFrame(const mjCFrame& other); + mjCFrame& operator=(const mjCFrame& other); + mjsFrame spec; using mjCBase::name; using mjCBase::classname; @@ -368,9 +372,6 @@ class mjCFrame : public mjCFrame_, private mjsFrame { bool IsAncestor(const mjCFrame* child) const; // true if child is contained in this frame private: - mjCFrame(mjCModel* = 0, mjCFrame* = 0); // constructor - mjCFrame(const mjCFrame& other); // copy constructor - mjCFrame& operator=(const mjCFrame& other); // copy assignment void Compile(void); // compiler mjCBody* body; // body that owns the frame @@ -400,6 +401,10 @@ class mjCJoint : public mjCJoint_, private mjsJoint { friend class mjXURDF; public: + mjCJoint(mjCModel* = nullptr, mjCDef* = nullptr); + mjCJoint(const mjCJoint& other); + mjCJoint& operator=(const mjCJoint& other); + mjsJoint spec; using mjCBase::name; using mjCBase::classname; @@ -416,10 +421,6 @@ class mjCJoint : public mjCJoint_, private mjsJoint { private: - mjCJoint(mjCModel* = 0, mjCDef* = 0); - mjCJoint(const mjCJoint& other); // copy constructor - mjCJoint& operator=(const mjCJoint& other); // copy assignment - int Compile(void); // compiler; return dofnum void PointToLocal(void); }; @@ -468,6 +469,10 @@ class mjCGeom : public mjCGeom_, private mjsGeom { friend class mjXURDF; public: + mjCGeom(mjCModel* = nullptr, mjCDef* = nullptr); + mjCGeom(const mjCGeom& other); + mjCGeom& operator=(const mjCGeom& other); + using mjCBase::name; mjsGeom spec; // variables set by user double GetVolume(void); // compute geom volume @@ -491,10 +496,6 @@ class mjCGeom : public mjCGeom_, private mjsGeom { void del_material() { spec_material_.clear(); } private: - mjCGeom(mjCModel* = 0, mjCDef* = 0); - mjCGeom(const mjCGeom& other); // copy constructor - mjCGeom& operator=(const mjCGeom& other); // copy assignment - void Compile(void); // compiler double GetRBound(void); // compute bounding sphere radius void ComputeAABB(void); // compute axis-aligned bounding box @@ -533,6 +534,10 @@ class mjCSite : public mjCSite_, private mjsSite { friend class mjXURDF; public: + mjCSite(mjCModel* = nullptr, mjCDef* = nullptr); + mjCSite(const mjCSite& other); + mjCSite& operator=(const mjCSite& other); + mjsSite spec; // variables set by user // use strings from mjCBase rather than mjStrings from mjsSite @@ -546,10 +551,6 @@ class mjCSite : public mjCSite_, private mjsSite { void del_material() { material_.clear(); } private: - mjCSite(mjCModel* = 0, mjCDef* = 0); // constructor - mjCSite(const mjCSite& other); // copy constructor - mjCSite& operator=(const mjCSite& other); // copy assignment - void Compile(void); // compiler void CopyFromSpec(); // copy spec into attributes void PointToLocal(void); @@ -578,6 +579,10 @@ class mjCCamera : public mjCCamera_, private mjsCamera { friend class mjXWriter; public: + mjCCamera(mjCModel* = nullptr, mjCDef* = nullptr); + mjCCamera(const mjCCamera& other); + mjCCamera& operator=(const mjCCamera& other); + mjsCamera spec; using mjCBase::name; using mjCBase::classname; @@ -588,10 +593,6 @@ class mjCCamera : public mjCCamera_, private mjsCamera { const std::vector& get_userdata() { return userdata_; } private: - mjCCamera(mjCModel* = 0, mjCDef* = 0); // constructor - mjCCamera(const mjCCamera& other); // copy constructor - mjCCamera& operator=(const mjCCamera& other); // copy assignment - void Compile(void); // compiler void CopyFromSpec(void); void PointToLocal(void); @@ -618,6 +619,10 @@ class mjCLight : public mjCLight_, private mjsLight { friend class mjXWriter; public: + mjCLight(mjCModel* = nullptr, mjCDef* = nullptr); + mjCLight(const mjCLight& other); + mjCLight& operator=(const mjCLight& other); + mjsLight spec; using mjCBase::name; using mjCBase::classname; @@ -627,10 +632,6 @@ class mjCLight : public mjCLight_, private mjsLight { const std::string& get_targetbody() { return targetbody_; } private: - mjCLight(mjCModel* = 0, mjCDef* = 0); // constructor - mjCLight(const mjCLight& other); // copy constructor - mjCLight& operator=(const mjCLight& other); // copy assignment - void Compile(void); // compiler void CopyFromSpec(void); void PointToLocal(void); @@ -681,6 +682,10 @@ class mjCFlex: public mjCFlex_, private mjsFlex { friend class mjXWriter; public: + mjCFlex(mjCModel* = nullptr); + mjCFlex(const mjCFlex& other); + mjCFlex& operator=(const mjCFlex& other); + mjsFlex spec; using mjCBase::name; using mjCBase::classname; @@ -703,10 +708,6 @@ class mjCFlex: public mjCFlex_, private mjsFlex { void DelTexcoord(); // delete texcoord private: - mjCFlex(mjCModel* = 0); - mjCFlex(const mjCFlex& other); // copy constructor - mjCFlex& operator=(const mjCFlex& other); // copy assignment - void Compile(const mjVFS* vfs); // compiler void CreateBVH(void); // create flex BVH void CreateShellPair(void); // create shells and evpairs @@ -779,9 +780,9 @@ class mjCMesh: public mjCMesh_, private mjsMesh { friend class mjCFlexcomp; friend class mjXWriter; public: - mjCMesh(mjCModel* = 0, mjCDef* = 0); - mjCMesh(const mjCMesh& other); // copy constructor - mjCMesh& operator=(const mjCMesh& other); // copy assignment + mjCMesh(mjCModel* = nullptr, mjCDef* = nullptr); + mjCMesh(const mjCMesh& other); + mjCMesh& operator=(const mjCMesh& other); ~mjCMesh(); mjsMesh spec; @@ -910,6 +911,11 @@ class mjCSkin: public mjCSkin_, private mjsSkin { friend class mjXWriter; public: + mjCSkin(mjCModel* = nullptr); + mjCSkin(const mjCSkin& other); + mjCSkin& operator=(const mjCSkin& other); + ~mjCSkin(); + mjsSkin spec; using mjCBase::name; using mjCBase::classname; @@ -931,11 +937,6 @@ class mjCSkin: public mjCSkin_, private mjsSkin { void PointToLocal(); private: - mjCSkin(mjCModel* = 0); // constructor - mjCSkin(const mjCSkin& other); // copy constructor - mjCSkin& operator=(const mjCSkin& other); // copy assignment - ~mjCSkin(); // destructor - void ResolveReferences(const mjCModel* m); void NameSpace(const mjCModel* m); void Compile(const mjVFS* vfs); // compiler @@ -965,6 +966,11 @@ class mjCHField : public mjCHField_, private mjsHField { friend class mjXWriter; public: + mjCHField(mjCModel* model); + mjCHField(const mjCHField& other); + mjCHField& operator=(const mjCHField& other); + ~mjCHField(); + mjsHField spec; using mjCBase::name; using mjCBase::info; @@ -978,11 +984,6 @@ class mjCHField : public mjCHField_, private mjsHField { std::vector& get_userdata() { return userdata_; } private: - mjCHField(mjCModel* model); // constructor - mjCHField(const mjCHField& other); // copy constructor - mjCHField& operator=(const mjCHField& other); // copy assignment - ~mjCHField(); // destructor - void Compile(const mjVFS* vfs); // compiler void LoadCustom(mjResource* resource); // load from custom format @@ -1012,7 +1013,10 @@ class mjCTexture : public mjCTexture_, private mjsTexture { friend class mjXWriter; public: - ~mjCTexture(); // destructor + mjCTexture(mjCModel*); + mjCTexture(const mjCTexture& other); + mjCTexture& operator=(const mjCTexture& other); + ~mjCTexture(); mjsTexture spec; using mjCBase::name; @@ -1027,10 +1031,6 @@ class mjCTexture : public mjCTexture_, private mjsTexture { std::vector get_cubefiles() const { return cubefiles_; } private: - mjCTexture(mjCModel*); // constructor - mjCTexture(const mjCTexture& other); // copy constructor - mjCTexture& operator=(const mjCTexture& other); // copy assignment - void Compile(const mjVFS* vfs); // compiler void Builtin2D(void); // make builtin 2D @@ -1069,6 +1069,10 @@ class mjCMaterial : public mjCMaterial_, private mjsMaterial { friend class mjXWriter; public: + mjCMaterial(mjCModel* = nullptr, mjCDef* = nullptr); + mjCMaterial(const mjCMaterial& other); + mjCMaterial& operator=(const mjCMaterial& other); + mjsMaterial spec; using mjCBase::name; using mjCBase::classname; @@ -1082,10 +1086,6 @@ class mjCMaterial : public mjCMaterial_, private mjsMaterial { void del_texture() { texture_.clear(); } private: - mjCMaterial(mjCModel* = 0, mjCDef* = 0); // constructor - mjCMaterial(const mjCMaterial& other); // copy constructor - mjCMaterial& operator=(const mjCMaterial& other); // copy assignment - void Compile(void); // compiler }; @@ -1110,6 +1110,10 @@ class mjCPair : public mjCPair_, private mjsPair { friend class mjXWriter; public: + mjCPair(mjCModel* = nullptr, mjCDef* = nullptr); + mjCPair(const mjCPair& other); + mjCPair& operator=(const mjCPair& other); + mjsPair spec; using mjCBase::name; using mjCBase::classname; @@ -1128,10 +1132,6 @@ class mjCPair : public mjCPair_, private mjsPair { } private: - mjCPair(mjCModel* = 0, mjCDef* = 0); // constructor - mjCPair(const mjCPair& other); // copy constructor - mjCPair& operator=(const mjCPair& other); // copy assignment - void Compile(void); // compiler mjCGeom* geom1; // geom1 @@ -1160,6 +1160,10 @@ class mjCBodyPair : public mjCBodyPair_, private mjsExclude { friend class mjCModel; public: + mjCBodyPair(mjCModel*); + mjCBodyPair(const mjCBodyPair& other); + mjCBodyPair& operator=(const mjCBodyPair& other); + mjsExclude spec; using mjCBase::name; using mjCBase::info; @@ -1177,9 +1181,6 @@ class mjCBodyPair : public mjCBodyPair_, private mjsExclude { } private: - mjCBodyPair(mjCModel*); // constructor - mjCBodyPair(const mjCBodyPair& other); // copy constructor - mjCBodyPair& operator=(const mjCBodyPair& other); // copy assignment void Compile(void); // compiler }; @@ -1206,6 +1207,10 @@ class mjCEquality : public mjCEquality_, private mjsEquality { friend class mjXWriter; public: + mjCEquality(mjCModel* = 0, mjCDef* = 0); + mjCEquality(const mjCEquality& other); + mjCEquality& operator=(const mjCEquality& other); + mjsEquality spec; using mjCBase::name; using mjCBase::classname; @@ -1217,10 +1222,6 @@ class mjCEquality : public mjCEquality_, private mjsEquality { void NameSpace(const mjCModel* m); private: - mjCEquality(mjCModel* = 0, mjCDef* = 0); // constructor - mjCEquality(const mjCEquality& other); // copy constructor - mjCEquality& operator=(const mjCEquality& other); // copy assignment - void Compile(void); // compiler }; @@ -1246,6 +1247,11 @@ class mjCTendon : public mjCTendon_, private mjsTendon { friend class mjXWriter; public: + mjCTendon(mjCModel* = nullptr, mjCDef* = nullptr); + mjCTendon(const mjCTendon& other); + mjCTendon& operator=(const mjCTendon& other); + ~mjCTendon(); + mjsTendon spec; using mjCBase::name; using mjCBase::classname; @@ -1279,11 +1285,6 @@ class mjCTendon : public mjCTendon_, private mjsTendon { bool is_limited() const; private: - mjCTendon(mjCModel* = 0, mjCDef* = 0); // constructor - mjCTendon(const mjCTendon& other); // copy constructor - mjCTendon& operator=(const mjCTendon& other); // copy assignment - ~mjCTendon(); // destructor - void Compile(void); // compiler }; @@ -1342,14 +1343,13 @@ class mjCPlugin : public mjCPlugin_ { friend class mjXWriter; public: + mjCPlugin(mjCModel*); + mjCPlugin(const mjCPlugin& other); + mjCPlugin& operator=(const mjCPlugin& other); mjsPlugin spec; mjCBase* parent; // parent object (only used when generating error message) - mjCPlugin(const mjCPlugin& other); // copy constructor private: - mjCPlugin(mjCModel*); // constructor - mjCPlugin& operator=(const mjCPlugin& other); // copy assignment - void Compile(void); // compiler }; @@ -1381,6 +1381,10 @@ class mjCActuator : public mjCActuator_, private mjsActuator { friend class mjXWriter; public: + mjCActuator(mjCModel* = nullptr, mjCDef* = nullptr); + mjCActuator(const mjCActuator& other); + mjCActuator& operator=(const mjCActuator& other); + mjsActuator spec; using mjCBase::name; using mjCBase::classname; @@ -1397,10 +1401,6 @@ class mjCActuator : public mjCActuator_, private mjsActuator { bool is_actlimited() const; private: - mjCActuator(mjCModel* = 0, mjCDef* = 0); // constructor - mjCActuator(const mjCActuator& other); // copy constructor - mjCActuator& operator=(const mjCActuator& other); // copy assignment - void Compile(void); // compiler void CopyFromSpec(); void PointToLocal(); @@ -1436,6 +1436,10 @@ class mjCSensor : public mjCSensor_, private mjsSensor { friend class mjXWriter; public: + mjCSensor(mjCModel*); + mjCSensor(const mjCSensor& other); + mjCSensor& operator=(const mjCSensor& other); + mjsSensor spec; using mjCBase::name; using mjCBase::classname; @@ -1447,10 +1451,6 @@ class mjCSensor : public mjCSensor_, private mjsSensor { const std::string& get_refname() { return spec_refname_; } private: - mjCSensor(mjCModel*); // constructor - mjCSensor(const mjCSensor& other); // copy constructor - mjCSensor& operator=(const mjCSensor& other); // copy assignment - void Compile(void); // compiler void CopyFromSpec(); void PointToLocal(); @@ -1477,6 +1477,11 @@ class mjCNumeric : public mjCNumeric_, private mjsNumeric { friend class mjXWriter; public: + mjCNumeric(mjCModel*); + mjCNumeric(const mjCNumeric& other); + mjCNumeric& operator=(const mjCNumeric& other); + ~mjCNumeric(); + mjsNumeric spec; using mjCBase::name; using mjCBase::info; @@ -1485,11 +1490,6 @@ class mjCNumeric : public mjCNumeric_, private mjsNumeric { void CopyFromSpec(); private: - mjCNumeric(mjCModel*); // constructor - mjCNumeric(const mjCNumeric& other); // copy constructor - mjCNumeric& operator=(const mjCNumeric& other); // copy assignment - ~mjCNumeric(); // destructor - void Compile(void); // compiler }; @@ -1509,6 +1509,11 @@ class mjCText : public mjCText_, private mjsText { friend class mjXWriter; public: + mjCText(mjCModel*); + mjCText(const mjCText& other); + mjCText& operator=(const mjCText& other); + ~mjCText(); + mjsText spec; using mjCBase::name; using mjCBase::info; @@ -1517,11 +1522,6 @@ class mjCText : public mjCText_, private mjsText { void CopyFromSpec(); private: - mjCText(mjCModel*); // constructor - mjCText(const mjCText& other); // copy constructor - mjCText& operator=(const mjCText& other); // copy assignment - ~mjCText(); // destructor - void Compile(void); // compiler }; @@ -1546,6 +1546,11 @@ class mjCTuple : public mjCTuple_, private mjsTuple { friend class mjXWriter; public: + mjCTuple(mjCModel*); + mjCTuple(const mjCTuple& other); + mjCTuple& operator=(const mjCTuple& other); + ~mjCTuple(); + mjsTuple spec; using mjCBase::name; using mjCBase::info; @@ -1556,11 +1561,6 @@ class mjCTuple : public mjCTuple_, private mjsTuple { void NameSpace(const mjCModel* m); private: - mjCTuple(mjCModel*); // constructor - mjCTuple(const mjCTuple& other); // copy constructor - mjCTuple& operator=(const mjCTuple& other); // copy assignment - ~mjCTuple(); // destructor - void Compile(void); // compiler }; @@ -1590,6 +1590,11 @@ class mjCKey : public mjCKey_, private mjsKey { friend class mjXWriter; public: + mjCKey(mjCModel*); + mjCKey(const mjCKey& other); + mjCKey& operator=(const mjCKey& other); + ~mjCKey(); + mjsKey spec; using mjCBase::name; using mjCBase::info; @@ -1598,11 +1603,6 @@ class mjCKey : public mjCKey_, private mjsKey { void CopyFromSpec(); private: - mjCKey(mjCModel*); // constructor - mjCKey(const mjCKey& other); // copy constructor - mjCKey& operator=(const mjCKey& other); // copy assignment - ~mjCKey(); // destructor - void Compile(const mjModel* m); // compiler }; diff --git a/src/xml/xml_native_writer.cc b/src/xml/xml_native_writer.cc index b24a6824..3ebc2718 100644 --- a/src/xml/xml_native_writer.cc +++ b/src/xml/xml_native_writer.cc @@ -806,7 +806,7 @@ string mjXWriter::Write(char *error, size_t error_sz) { Visual(root); Statistic(root); writingdefaults = true; - Default(root, model->defaults[0]); + Default(root, model->Defaults()[0]); writingdefaults = false; Extension(root); Custom(root); @@ -1136,7 +1136,7 @@ void mjXWriter::Default(XMLElement* root, mjCDef* def) { // pointer to parent defaults mjCDef* par; if (def->parentid>=0) { - par = model->defaults[def->parentid]; + par = model->Defaults()[def->parentid]; } else { par = new mjCDef; } @@ -1209,7 +1209,7 @@ void mjXWriter::Default(XMLElement* root, mjCDef* def) { // add children recursively for (int i=0; i<(int)def->childid.size(); i++) { - Default(section, model->defaults[def->childid[i]]); + Default(section, model->Defaults()[def->childid[i]]); } // delete parent defaults if allocated here @@ -1223,7 +1223,7 @@ void mjXWriter::Default(XMLElement* root, mjCDef* def) { // extension section void mjXWriter::Extension(XMLElement* root) { // skip section if there is no required plugin - if (model->active_plugins.empty()) { + if (model->ActivePlugins().empty()) { return; } @@ -1236,7 +1236,7 @@ void mjXWriter::Extension(XMLElement* root) { // write all plugins const mjpPlugin* last_plugin = nullptr; XMLElement* plugin_elem = nullptr; - for (int i = 0; i < model->plugins.size(); ++i) { + for (int i = 0; i < model->Plugins().size(); ++i) { mjCPlugin* pp = static_cast(model->GetObject(mjOBJ_PLUGIN, i)); if (pp->name.empty()) { @@ -1273,7 +1273,7 @@ void mjXWriter::Extension(XMLElement* root) { } // write elements for plugins without explicit instances - for (const auto& [plugin, slot] : model->active_plugins) { + for (const auto& [plugin, slot] : model->ActivePlugins()) { if (seen_plugins.find(plugin) == seen_plugins.end()) { plugin_elem = InsertEnd(section, "plugin"); WriteAttrTxt(plugin_elem, "plugin", plugin->name); @@ -1755,7 +1755,7 @@ void mjXWriter::Sensor(XMLElement* root) { // write all sensors for (int i=0; isensors[i]; + mjCSensor* psen = model->Sensors()[i]; std::string instance_name = ""; std::string plugin_name = ""; @@ -1994,7 +1994,7 @@ void mjXWriter::Keyframe(XMLElement* root) { XMLElement* elem = InsertEnd(section, "key"); bool change = false; - mjCKey* pk = model->keys[i]; + mjCKey* pk = model->Keys()[i]; // check name and write if (!pk->name.empty()) { @@ -2038,8 +2038,8 @@ void mjXWriter::Keyframe(XMLElement* root) { // check mpos and write if (model->nmocap) { for (int j=0; jnbody; j++) { - if (model->bodies[j]->mocap) { - mjCBody* pb = model->bodies[j]; + if (model->Bodies()[j]->mocap) { + mjCBody* pb = model->Bodies()[j]; int id = pb->mocapid; if (pb->pos[0] != pk->mpos_[3*id] || pb->pos[1] != pk->mpos_[3*id+1] || @@ -2055,8 +2055,8 @@ void mjXWriter::Keyframe(XMLElement* root) { // check mquat and write if (model->nmocap) { for (int j=0; jnbody; j++) { - if (model->bodies[j]->mocap) { - mjCBody* pb = model->bodies[j]; + if (model->Bodies()[j]->mocap) { + mjCBody* pb = model->Bodies()[j]; int id = pb->mocapid; if (pb->quat[0] != pk->mquat_[4*id] || pb->quat[1] != pk->mquat_[4*id+1] || From d6bc8c7781c00c6ac413aa984156322ef79d2ce1 Mon Sep 17 00:00:00 2001 From: Mohammad Hamid Date: Wed, 8 May 2024 06:14:13 -0700 Subject: [PATCH 18/62] BEGIN_PUBLIC Replaced "shark" test models with lighter models to speed up tests. END_PUBLIC. - procedurally generated light cube - replaced shark GMSH with cube for all tests with extension GMSH - Reduced size of shark model used for tests with extension Ftetwild PiperOrigin-RevId: 631776421 Change-Id: I66f6b4058b86338a10d06c39bc93bef1c6fbdab6 --- test/sample/testspeed_test.sh | 8 +- .../testdata/cube_22_ascii_vol_gmshApp.msh | 47 + ...hApp.xml => cube_22_ascii_vol_gmshApp.xml} | 3 +- .../testdata/cube_22_binary_vol_gmshApp.msh | Bin 0 -> 1440 bytes ...App.xml => cube_22_binary_vol_gmshApp.xml} | 3 +- .../testdata/cube_41_ascii_vol_gmshApp.msh | 67 + ...hApp.xml => cube_41_ascii_vol_gmshApp.xml} | 3 +- .../testdata/cube_41_binary_vol_gmshApp.msh | Bin 0 -> 1718 bytes ...App.xml => cube_41_binary_vol_gmshApp.xml} | 3 +- ...alformed_cube_22_ascii_missing_element.msh | 46 + ...lformed_cube_22_ascii_missing_element.xml} | 3 +- .../malformed_cube_22_ascii_missing_node.msh | 46 + ... malformed_cube_22_ascii_missing_node.xml} | 4 +- ...med_cube_22_ascii_missing_num_elements.msh | 46 + ...med_cube_22_ascii_missing_num_elements.xml | 27 + ...formed_cube_22_ascii_missing_num_nodes.msh | 46 + ...formed_cube_22_ascii_missing_num_nodes.xml | 27 + ...alformed_cube_41_ascii_missing_element.msh | 66 + ...lformed_cube_41_ascii_missing_element.xml} | 4 +- ...d_cube_41_ascii_missing_element_header.msh | 65 + ...d_cube_41_ascii_missing_element_header.xml | 27 + .../malformed_cube_41_ascii_missing_node.msh | 66 + ...rmed_cube_41_ascii_missing_node_header.msh | 65 + ...med_cube_41_ascii_missing_node_header.xml} | 4 +- ...ormed_cube_41_ascii_missing_node_index.msh | 66 + ...rmed_cube_41_ascii_missing_node_index.xml} | 4 +- ..._shark_41_ascii_missing_element_header.xml | 27 - ...med_shark_41_ascii_missing_node_header.xml | 27 - ...rmed_shark_41_ascii_missing_node_index.xml | 27 - .../user/testdata/shark_22_ascii_fTetWild.msh | 6531 +++++++---------- test/user/testdata/shark_22_ascii_gmshApp.msh | 2315 ------ .../shark_22_ascii_missing_element.msh | 3978 ---------- .../testdata/shark_22_ascii_missing_node.msh | 3978 ---------- .../shark_22_ascii_missing_num_elements.msh | 3978 ---------- .../shark_22_ascii_missing_num_nodes.msh | 3978 ---------- .../testdata/shark_22_binary_fTetWild.msh | Bin 70508 -> 46504 bytes .../user/testdata/shark_22_binary_gmshApp.msh | Bin 83523 -> 0 bytes test/user/testdata/shark_41_ascii_gmshApp.msh | 2973 -------- .../shark_41_ascii_missing_element.msh | 2972 -------- .../shark_41_ascii_missing_element_header.msh | 2972 -------- .../shark_41_ascii_missing_node_header.msh | 2972 -------- .../shark_41_ascii_missing_node_index.msh | 2972 -------- .../user/testdata/shark_41_binary_gmshApp.msh | Bin 87334 -> 0 bytes test/user/user_flex_test.cc | 46 +- 44 files changed, 3318 insertions(+), 37174 deletions(-) create mode 100644 test/user/testdata/cube_22_ascii_vol_gmshApp.msh rename test/user/testdata/{shark_22_binary_gmshApp.xml => cube_22_ascii_vol_gmshApp.xml} (84%) create mode 100644 test/user/testdata/cube_22_binary_vol_gmshApp.msh rename test/user/testdata/{shark_22_ascii_gmshApp.xml => cube_22_binary_vol_gmshApp.xml} (90%) create mode 100644 test/user/testdata/cube_41_ascii_vol_gmshApp.msh rename test/user/testdata/{shark_41_ascii_gmshApp.xml => cube_41_ascii_vol_gmshApp.xml} (90%) create mode 100644 test/user/testdata/cube_41_binary_vol_gmshApp.msh rename test/user/testdata/{shark_41_binary_gmshApp.xml => cube_41_binary_vol_gmshApp.xml} (90%) create mode 100644 test/user/testdata/malformed_cube_22_ascii_missing_element.msh rename test/user/testdata/{malformed_shark_22_ascii_missing_element.xml => malformed_cube_22_ascii_missing_element.xml} (84%) create mode 100644 test/user/testdata/malformed_cube_22_ascii_missing_node.msh rename test/user/testdata/{malformed_shark_41_ascii_missing_element.xml => malformed_cube_22_ascii_missing_node.xml} (84%) create mode 100644 test/user/testdata/malformed_cube_22_ascii_missing_num_elements.msh create mode 100644 test/user/testdata/malformed_cube_22_ascii_missing_num_elements.xml create mode 100644 test/user/testdata/malformed_cube_22_ascii_missing_num_nodes.msh create mode 100644 test/user/testdata/malformed_cube_22_ascii_missing_num_nodes.xml create mode 100644 test/user/testdata/malformed_cube_41_ascii_missing_element.msh rename test/user/testdata/{malformed_shark_22_ascii_missing_node.xml => malformed_cube_41_ascii_missing_element.xml} (84%) create mode 100644 test/user/testdata/malformed_cube_41_ascii_missing_element_header.msh create mode 100644 test/user/testdata/malformed_cube_41_ascii_missing_element_header.xml create mode 100644 test/user/testdata/malformed_cube_41_ascii_missing_node.msh create mode 100644 test/user/testdata/malformed_cube_41_ascii_missing_node_header.msh rename test/user/testdata/{malformed_shark_22_ascii_missing_num_nodes.xml => malformed_cube_41_ascii_missing_node_header.xml} (84%) create mode 100644 test/user/testdata/malformed_cube_41_ascii_missing_node_index.msh rename test/user/testdata/{malformed_shark_22_ascii_missing_num_elements.xml => malformed_cube_41_ascii_missing_node_index.xml} (84%) delete mode 100644 test/user/testdata/malformed_shark_41_ascii_missing_element_header.xml delete mode 100644 test/user/testdata/malformed_shark_41_ascii_missing_node_header.xml delete mode 100644 test/user/testdata/malformed_shark_41_ascii_missing_node_index.xml delete mode 100644 test/user/testdata/shark_22_ascii_gmshApp.msh delete mode 100644 test/user/testdata/shark_22_ascii_missing_element.msh delete mode 100644 test/user/testdata/shark_22_ascii_missing_node.msh delete mode 100644 test/user/testdata/shark_22_ascii_missing_num_elements.msh delete mode 100644 test/user/testdata/shark_22_ascii_missing_num_nodes.msh delete mode 100644 test/user/testdata/shark_22_binary_gmshApp.msh delete mode 100644 test/user/testdata/shark_41_ascii_gmshApp.msh delete mode 100644 test/user/testdata/shark_41_ascii_missing_element.msh delete mode 100644 test/user/testdata/shark_41_ascii_missing_element_header.msh delete mode 100644 test/user/testdata/shark_41_ascii_missing_node_header.msh delete mode 100644 test/user/testdata/shark_41_ascii_missing_node_index.msh delete mode 100644 test/user/testdata/shark_41_binary_gmshApp.msh diff --git a/test/sample/testspeed_test.sh b/test/sample/testspeed_test.sh index 10ec878d..bb5fe53c 100755 --- a/test/sample/testspeed_test.sh +++ b/test/sample/testspeed_test.sh @@ -34,12 +34,8 @@ test_model() { fi if [[ "$model" == */benchmark/testdata/humanoid200.xml || "$model" == */engine/testdata/collision_convex/stacked_boxes.xml || - "$model" == */user/testdata/shark_41_ascii_gmshApp.xml || "$model" == */user/testdata/shark_22_ascii_fTetWild.xml || - "$model" == */user/testdata/shark_22_ascii_gmshApp.xml || - "$model" == */user/testdata/shark_22_binary_fTetWild.xml || - "$model" == */user/testdata/shark_41_binary_gmshApp.xml || - "$model" == */user/testdata/shark_22_binary_gmshApp.xml + "$model" == */user/testdata/shark_22_binary_fTetWild.xml ]]; then iterations=2 fi @@ -74,7 +70,7 @@ for model_dir in ${MODEL_DIRS[@]}; do echo "Skipping $model" >&2 continue fi - if [[ $(basename $model) == shark* ]]; then + if [[ $(basename $model) == malformed* ]]; then echo "Skipping $model" >&2 continue fi diff --git a/test/user/testdata/cube_22_ascii_vol_gmshApp.msh b/test/user/testdata/cube_22_ascii_vol_gmshApp.msh new file mode 100644 index 00000000..2f26c4d0 --- /dev/null +++ b/test/user/testdata/cube_22_ascii_vol_gmshApp.msh @@ -0,0 +1,47 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$Nodes +14 +1 -0.5 -0.5 0 +2 0.5 -0.5 0 +3 0.5 0.5 0 +4 -0.5 0.5 0 +5 -0.5 -0.5 1 +6 0.5 -0.5 1 +7 0.5 0.5 1 +8 -0.5 0.5 1 +9 0 0 0 +10 0 -0.5 0.5 +11 0.5 0 0.5 +12 0 0.5 0.5 +13 -0.5 0 0.5 +14 0 0 1 +$EndNodes +$Elements +24 +1 4 2 0 1 10 9 12 11 +2 4 2 0 1 10 12 13 14 +3 4 2 0 1 9 10 12 13 +4 4 2 0 1 10 12 14 11 +5 4 2 0 1 9 10 1 2 +6 4 2 0 1 7 11 12 3 +7 4 2 0 1 4 1 9 13 +8 4 2 0 1 13 12 4 8 +9 4 2 0 1 1 10 13 5 +10 4 2 0 1 13 8 5 14 +11 4 2 0 1 12 8 14 7 +12 4 2 0 1 14 5 10 6 +13 4 2 0 1 14 6 11 7 +14 4 2 0 1 9 4 12 3 +15 4 2 0 1 3 11 9 2 +16 4 2 0 1 11 6 10 2 +17 4 2 0 1 6 10 14 11 +18 4 2 0 1 1 10 9 13 +19 4 2 0 1 12 4 9 13 +20 4 2 0 1 5 10 13 14 +21 4 2 0 1 8 13 12 14 +22 4 2 0 1 12 14 11 7 +23 4 2 0 1 9 12 11 3 +24 4 2 0 1 10 9 11 2 +$EndElements diff --git a/test/user/testdata/shark_22_binary_gmshApp.xml b/test/user/testdata/cube_22_ascii_vol_gmshApp.xml similarity index 84% rename from test/user/testdata/shark_22_binary_gmshApp.xml rename to test/user/testdata/cube_22_ascii_vol_gmshApp.xml index 30d2bf3a..06ea6d32 100644 --- a/test/user/testdata/shark_22_binary_gmshApp.xml +++ b/test/user/testdata/cube_22_ascii_vol_gmshApp.xml @@ -18,7 +18,8 @@ - + diff --git a/test/user/testdata/cube_22_binary_vol_gmshApp.msh b/test/user/testdata/cube_22_binary_vol_gmshApp.msh new file mode 100644 index 0000000000000000000000000000000000000000..4bb829f10e446cbe415101c390059fe18e055e93 GIT binary patch literal 1440 zcmZvbIc~!+5Jj0iVfH5@AHuz(b?4Me_QuA(F82;r0Tr3vK$4AS$T z{|q^F_Fj}4j zwCz_hRk$2-T`x*h;Y!=lT8Cyr?NqYGcd;tg+tTMV&s{P>X2D7{6OAipqZfL$oaQDD zhQ6q8In59bFYZIE<=7L}53jVYW^4V}(~tGjoY9yoKGdZj%W39t%F`!j(RaKxe>gO} z(8*g)Zvl=E=Y^+l%jsRn4zHa|9d=b?GnVZexys6GJcj#-8IYekb7g;I(UR_c2evXlA>( zhlXl7-5qyDZCm%zaLht)A?2P7M_rvEz2|4c(HAUdP2cH@;dE9w?yvb@_kZX=Dn>+$ literal 0 HcmV?d00001 diff --git a/test/user/testdata/shark_22_ascii_gmshApp.xml b/test/user/testdata/cube_22_binary_vol_gmshApp.xml similarity index 90% rename from test/user/testdata/shark_22_ascii_gmshApp.xml rename to test/user/testdata/cube_22_binary_vol_gmshApp.xml index a7946939..e9b1927f 100644 --- a/test/user/testdata/shark_22_ascii_gmshApp.xml +++ b/test/user/testdata/cube_22_binary_vol_gmshApp.xml @@ -18,7 +18,8 @@ - + diff --git a/test/user/testdata/cube_41_ascii_vol_gmshApp.msh b/test/user/testdata/cube_41_ascii_vol_gmshApp.msh new file mode 100644 index 00000000..958dadba --- /dev/null +++ b/test/user/testdata/cube_41_ascii_vol_gmshApp.msh @@ -0,0 +1,67 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$Entities +0 0 0 1 +1 -0.5 -0.5 0 0.5 0.5 1 0 0 +$EndEntities +$Nodes +1 14 1 14 +3 1 0 14 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +-0.5 -0.5 0 +0.5 -0.5 0 +0.5 0.5 0 +-0.5 0.5 0 +-0.5 -0.5 1 +0.5 -0.5 1 +0.5 0.5 1 +-0.5 0.5 1 +0 0 0 +0 -0.5 0.5 +0.5 0 0.5 +0 0.5 0.5 +-0.5 0 0.5 +0 0 1 +$EndNodes +$Elements +1 24 1 24 +3 1 4 24 +1 10 9 12 11 +2 10 12 13 14 +3 9 10 12 13 +4 10 12 14 11 +5 9 10 1 2 +6 7 11 12 3 +7 4 1 9 13 +8 13 12 4 8 +9 1 10 13 5 +10 13 8 5 14 +11 12 8 14 7 +12 14 5 10 6 +13 14 6 11 7 +14 9 4 12 3 +15 3 11 9 2 +16 11 6 10 2 +17 6 10 14 11 +18 1 10 9 13 +19 12 4 9 13 +20 5 10 13 14 +21 8 13 12 14 +22 12 14 11 7 +23 9 12 11 3 +24 10 9 11 2 +$EndElements diff --git a/test/user/testdata/shark_41_ascii_gmshApp.xml b/test/user/testdata/cube_41_ascii_vol_gmshApp.xml similarity index 90% rename from test/user/testdata/shark_41_ascii_gmshApp.xml rename to test/user/testdata/cube_41_ascii_vol_gmshApp.xml index 97ba9c3d..4f73878a 100644 --- a/test/user/testdata/shark_41_ascii_gmshApp.xml +++ b/test/user/testdata/cube_41_ascii_vol_gmshApp.xml @@ -18,7 +18,8 @@ - + diff --git a/test/user/testdata/cube_41_binary_vol_gmshApp.msh b/test/user/testdata/cube_41_binary_vol_gmshApp.msh new file mode 100644 index 0000000000000000000000000000000000000000..12baff2e612015180046db701a3866adacc79109 GIT binary patch literal 1718 zcmZ|PNlwFH3Oa%F2|#Jr*i)L>ZtmWMe+UBSja}J z>`!42xd_Q0+1rf0*V(X2jQAvQS>LMc*+$=tm>N^R?M4(kA$LRWh1?H$5K`BNp&x}j z4ymR_)i4>LRpT+3KlU^T@dno7Bc9&?;nv!Nzs2K8c6ruG{B6F7hiA_^yZG#7jneGtkC9}a;q{UjK#X1x?{=8_1gl8Szp=G~=k=G$+K6R@r zAF6nDs>>nEj|abg96BA3IDT<>^dnCF*)EVRW6AAJ1!(WgA- zcN(`v$0N=@&H~3TulnH51DE~k5q}Z5JZE|Jc^No$>m%c?0+;88NB--;*#kd*xSN!h cUH#^K8#wjgfiqX%r+LA{ncwn9(Eb5_07JG?BLDyZ literal 0 HcmV?d00001 diff --git a/test/user/testdata/shark_41_binary_gmshApp.xml b/test/user/testdata/cube_41_binary_vol_gmshApp.xml similarity index 90% rename from test/user/testdata/shark_41_binary_gmshApp.xml rename to test/user/testdata/cube_41_binary_vol_gmshApp.xml index 9261a2f0..6fc82f80 100644 --- a/test/user/testdata/shark_41_binary_gmshApp.xml +++ b/test/user/testdata/cube_41_binary_vol_gmshApp.xml @@ -18,7 +18,8 @@ - + diff --git a/test/user/testdata/malformed_cube_22_ascii_missing_element.msh b/test/user/testdata/malformed_cube_22_ascii_missing_element.msh new file mode 100644 index 00000000..4e27d068 --- /dev/null +++ b/test/user/testdata/malformed_cube_22_ascii_missing_element.msh @@ -0,0 +1,46 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$Nodes +14 +1 -0.5 -0.5 0 +2 0.5 -0.5 0 +3 0.5 0.5 0 +4 -0.5 0.5 0 +5 -0.5 -0.5 1 +6 0.5 -0.5 1 +7 0.5 0.5 1 +8 -0.5 0.5 1 +9 0 0 0 +10 0 -0.5 0.5 +11 0.5 0 0.5 +12 0 0.5 0.5 +13 -0.5 0 0.5 +14 0 0 1 +$EndNodes +$Elements +24 +2 4 2 0 1 10 12 13 14 +3 4 2 0 1 9 10 12 13 +4 4 2 0 1 10 12 14 11 +5 4 2 0 1 9 10 1 2 +6 4 2 0 1 7 11 12 3 +7 4 2 0 1 4 1 9 13 +8 4 2 0 1 13 12 4 8 +9 4 2 0 1 1 10 13 5 +10 4 2 0 1 13 8 5 14 +11 4 2 0 1 12 8 14 7 +12 4 2 0 1 14 5 10 6 +13 4 2 0 1 14 6 11 7 +14 4 2 0 1 9 4 12 3 +15 4 2 0 1 3 11 9 2 +16 4 2 0 1 11 6 10 2 +17 4 2 0 1 6 10 14 11 +18 4 2 0 1 1 10 9 13 +19 4 2 0 1 12 4 9 13 +20 4 2 0 1 5 10 13 14 +21 4 2 0 1 8 13 12 14 +22 4 2 0 1 12 14 11 7 +23 4 2 0 1 9 12 11 3 +24 4 2 0 1 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_shark_22_ascii_missing_element.xml b/test/user/testdata/malformed_cube_22_ascii_missing_element.xml similarity index 84% rename from test/user/testdata/malformed_shark_22_ascii_missing_element.xml rename to test/user/testdata/malformed_cube_22_ascii_missing_element.xml index dfa66bc6..f47d3e4b 100644 --- a/test/user/testdata/malformed_shark_22_ascii_missing_element.xml +++ b/test/user/testdata/malformed_cube_22_ascii_missing_element.xml @@ -18,7 +18,8 @@ - + diff --git a/test/user/testdata/malformed_cube_22_ascii_missing_node.msh b/test/user/testdata/malformed_cube_22_ascii_missing_node.msh new file mode 100644 index 00000000..b1dbb95a --- /dev/null +++ b/test/user/testdata/malformed_cube_22_ascii_missing_node.msh @@ -0,0 +1,46 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$Nodes +14 +2 0.5 -0.5 0 +3 0.5 0.5 0 +4 -0.5 0.5 0 +5 -0.5 -0.5 1 +6 0.5 -0.5 1 +7 0.5 0.5 1 +8 -0.5 0.5 1 +9 0 0 0 +10 0 -0.5 0.5 +11 0.5 0 0.5 +12 0 0.5 0.5 +13 -0.5 0 0.5 +14 0 0 1 +$EndNodes +$Elements +24 +1 4 2 0 1 10 9 12 11 +2 4 2 0 1 10 12 13 14 +3 4 2 0 1 9 10 12 13 +4 4 2 0 1 10 12 14 11 +5 4 2 0 1 9 10 1 2 +6 4 2 0 1 7 11 12 3 +7 4 2 0 1 4 1 9 13 +8 4 2 0 1 13 12 4 8 +9 4 2 0 1 1 10 13 5 +10 4 2 0 1 13 8 5 14 +11 4 2 0 1 12 8 14 7 +12 4 2 0 1 14 5 10 6 +13 4 2 0 1 14 6 11 7 +14 4 2 0 1 9 4 12 3 +15 4 2 0 1 3 11 9 2 +16 4 2 0 1 11 6 10 2 +17 4 2 0 1 6 10 14 11 +18 4 2 0 1 1 10 9 13 +19 4 2 0 1 12 4 9 13 +20 4 2 0 1 5 10 13 14 +21 4 2 0 1 8 13 12 14 +22 4 2 0 1 12 14 11 7 +23 4 2 0 1 9 12 11 3 +24 4 2 0 1 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_shark_41_ascii_missing_element.xml b/test/user/testdata/malformed_cube_22_ascii_missing_node.xml similarity index 84% rename from test/user/testdata/malformed_shark_41_ascii_missing_element.xml rename to test/user/testdata/malformed_cube_22_ascii_missing_node.xml index 2a32b08f..7e3d1210 100644 --- a/test/user/testdata/malformed_shark_41_ascii_missing_element.xml +++ b/test/user/testdata/malformed_cube_22_ascii_missing_node.xml @@ -19,8 +19,8 @@ - + diff --git a/test/user/testdata/malformed_cube_22_ascii_missing_num_elements.msh b/test/user/testdata/malformed_cube_22_ascii_missing_num_elements.msh new file mode 100644 index 00000000..017bed52 --- /dev/null +++ b/test/user/testdata/malformed_cube_22_ascii_missing_num_elements.msh @@ -0,0 +1,46 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$Nodes +14 +1 -0.5 -0.5 0 +2 0.5 -0.5 0 +3 0.5 0.5 0 +4 -0.5 0.5 0 +5 -0.5 -0.5 1 +6 0.5 -0.5 1 +7 0.5 0.5 1 +8 -0.5 0.5 1 +9 0 0 0 +10 0 -0.5 0.5 +11 0.5 0 0.5 +12 0 0.5 0.5 +13 -0.5 0 0.5 +14 0 0 1 +$EndNodes +$Elements +1 4 2 0 1 10 9 12 11 +2 4 2 0 1 10 12 13 14 +3 4 2 0 1 9 10 12 13 +4 4 2 0 1 10 12 14 11 +5 4 2 0 1 9 10 1 2 +6 4 2 0 1 7 11 12 3 +7 4 2 0 1 4 1 9 13 +8 4 2 0 1 13 12 4 8 +9 4 2 0 1 1 10 13 5 +10 4 2 0 1 13 8 5 14 +11 4 2 0 1 12 8 14 7 +12 4 2 0 1 14 5 10 6 +13 4 2 0 1 14 6 11 7 +14 4 2 0 1 9 4 12 3 +15 4 2 0 1 3 11 9 2 +16 4 2 0 1 11 6 10 2 +17 4 2 0 1 6 10 14 11 +18 4 2 0 1 1 10 9 13 +19 4 2 0 1 12 4 9 13 +20 4 2 0 1 5 10 13 14 +21 4 2 0 1 8 13 12 14 +22 4 2 0 1 12 14 11 7 +23 4 2 0 1 9 12 11 3 +24 4 2 0 1 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_cube_22_ascii_missing_num_elements.xml b/test/user/testdata/malformed_cube_22_ascii_missing_num_elements.xml new file mode 100644 index 00000000..22b464d6 --- /dev/null +++ b/test/user/testdata/malformed_cube_22_ascii_missing_num_elements.xml @@ -0,0 +1,27 @@ + + diff --git a/test/user/testdata/malformed_cube_22_ascii_missing_num_nodes.msh b/test/user/testdata/malformed_cube_22_ascii_missing_num_nodes.msh new file mode 100644 index 00000000..62f4cc19 --- /dev/null +++ b/test/user/testdata/malformed_cube_22_ascii_missing_num_nodes.msh @@ -0,0 +1,46 @@ +$MeshFormat +2.2 0 8 +$EndMeshFormat +$Nodes +1 -0.5 -0.5 0 +2 0.5 -0.5 0 +3 0.5 0.5 0 +4 -0.5 0.5 0 +5 -0.5 -0.5 1 +6 0.5 -0.5 1 +7 0.5 0.5 1 +8 -0.5 0.5 1 +9 0 0 0 +10 0 -0.5 0.5 +11 0.5 0 0.5 +12 0 0.5 0.5 +13 -0.5 0 0.5 +14 0 0 1 +$EndNodes +$Elements +24 +1 4 2 0 1 10 9 12 11 +2 4 2 0 1 10 12 13 14 +3 4 2 0 1 9 10 12 13 +4 4 2 0 1 10 12 14 11 +5 4 2 0 1 9 10 1 2 +6 4 2 0 1 7 11 12 3 +7 4 2 0 1 4 1 9 13 +8 4 2 0 1 13 12 4 8 +9 4 2 0 1 1 10 13 5 +10 4 2 0 1 13 8 5 14 +11 4 2 0 1 12 8 14 7 +12 4 2 0 1 14 5 10 6 +13 4 2 0 1 14 6 11 7 +14 4 2 0 1 9 4 12 3 +15 4 2 0 1 3 11 9 2 +16 4 2 0 1 11 6 10 2 +17 4 2 0 1 6 10 14 11 +18 4 2 0 1 1 10 9 13 +19 4 2 0 1 12 4 9 13 +20 4 2 0 1 5 10 13 14 +21 4 2 0 1 8 13 12 14 +22 4 2 0 1 12 14 11 7 +23 4 2 0 1 9 12 11 3 +24 4 2 0 1 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_cube_22_ascii_missing_num_nodes.xml b/test/user/testdata/malformed_cube_22_ascii_missing_num_nodes.xml new file mode 100644 index 00000000..17c32d6f --- /dev/null +++ b/test/user/testdata/malformed_cube_22_ascii_missing_num_nodes.xml @@ -0,0 +1,27 @@ + + diff --git a/test/user/testdata/malformed_cube_41_ascii_missing_element.msh b/test/user/testdata/malformed_cube_41_ascii_missing_element.msh new file mode 100644 index 00000000..96fc021c --- /dev/null +++ b/test/user/testdata/malformed_cube_41_ascii_missing_element.msh @@ -0,0 +1,66 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$Entities +0 0 0 1 +1 -0.5 -0.5 0 0.5 0.5 1 0 0 +$EndEntities +$Nodes +1 14 1 14 +3 1 0 14 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +-0.5 -0.5 0 +0.5 -0.5 0 +0.5 0.5 0 +-0.5 0.5 0 +-0.5 -0.5 1 +0.5 -0.5 1 +0.5 0.5 1 +-0.5 0.5 1 +0 0 0 +0 -0.5 0.5 +0.5 0 0.5 +0 0.5 0.5 +-0.5 0 0.5 +0 0 1 +$EndNodes +$Elements +1 24 1 24 +3 1 4 24 +2 10 12 13 14 +3 9 10 12 13 +4 10 12 14 11 +5 9 10 1 2 +6 7 11 12 3 +7 4 1 9 13 +8 13 12 4 8 +9 1 10 13 5 +10 13 8 5 14 +11 12 8 14 7 +12 14 5 10 6 +13 14 6 11 7 +14 9 4 12 3 +15 3 11 9 2 +16 11 6 10 2 +17 6 10 14 11 +18 1 10 9 13 +19 12 4 9 13 +20 5 10 13 14 +21 8 13 12 14 +22 12 14 11 7 +23 9 12 11 3 +24 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_shark_22_ascii_missing_node.xml b/test/user/testdata/malformed_cube_41_ascii_missing_element.xml similarity index 84% rename from test/user/testdata/malformed_shark_22_ascii_missing_node.xml rename to test/user/testdata/malformed_cube_41_ascii_missing_element.xml index 0d615899..bacce6a1 100644 --- a/test/user/testdata/malformed_shark_22_ascii_missing_node.xml +++ b/test/user/testdata/malformed_cube_41_ascii_missing_element.xml @@ -19,8 +19,8 @@ - + diff --git a/test/user/testdata/malformed_cube_41_ascii_missing_element_header.msh b/test/user/testdata/malformed_cube_41_ascii_missing_element_header.msh new file mode 100644 index 00000000..9386eefe --- /dev/null +++ b/test/user/testdata/malformed_cube_41_ascii_missing_element_header.msh @@ -0,0 +1,65 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$Entities +0 0 0 1 +1 -0.5 -0.5 0 0.5 0.5 1 0 0 +$EndEntities +$Nodes +1 14 1 14 +3 1 0 14 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +-0.5 -0.5 0 +0.5 -0.5 0 +0.5 0.5 0 +-0.5 0.5 0 +-0.5 -0.5 1 +0.5 -0.5 1 +0.5 0.5 1 +-0.5 0.5 1 +0 0 0 +0 -0.5 0.5 +0.5 0 0.5 +0 0.5 0.5 +-0.5 0 0.5 +0 0 1 +$EndNodes +$Elements +1 10 9 12 11 +2 10 12 13 14 +3 9 10 12 13 +4 10 12 14 11 +5 9 10 1 2 +6 7 11 12 3 +7 4 1 9 13 +8 13 12 4 8 +9 1 10 13 5 +10 13 8 5 14 +11 12 8 14 7 +12 14 5 10 6 +13 14 6 11 7 +14 9 4 12 3 +15 3 11 9 2 +16 11 6 10 2 +17 6 10 14 11 +18 1 10 9 13 +19 12 4 9 13 +20 5 10 13 14 +21 8 13 12 14 +22 12 14 11 7 +23 9 12 11 3 +24 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_cube_41_ascii_missing_element_header.xml b/test/user/testdata/malformed_cube_41_ascii_missing_element_header.xml new file mode 100644 index 00000000..0a19ddf7 --- /dev/null +++ b/test/user/testdata/malformed_cube_41_ascii_missing_element_header.xml @@ -0,0 +1,27 @@ + + diff --git a/test/user/testdata/malformed_cube_41_ascii_missing_node.msh b/test/user/testdata/malformed_cube_41_ascii_missing_node.msh new file mode 100644 index 00000000..d5cad329 --- /dev/null +++ b/test/user/testdata/malformed_cube_41_ascii_missing_node.msh @@ -0,0 +1,66 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$Entities +0 0 0 1 +1 -0.5 -0.5 0 0.5 0.5 1 0 0 +$EndEntities +$Nodes +1 14 1 14 +3 1 0 14 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +0.5 -0.5 0 +0.5 0.5 0 +-0.5 0.5 0 +-0.5 -0.5 1 +0.5 -0.5 1 +0.5 0.5 1 +-0.5 0.5 1 +0 0 0 +0 -0.5 0.5 +0.5 0 0.5 +0 0.5 0.5 +-0.5 0 0.5 +0 0 1 +$EndNodes +$Elements +1 24 1 24 +3 1 4 24 +1 10 9 12 11 +2 10 12 13 14 +3 9 10 12 13 +4 10 12 14 11 +5 9 10 1 2 +6 7 11 12 3 +7 4 1 9 13 +8 13 12 4 8 +9 1 10 13 5 +10 13 8 5 14 +11 12 8 14 7 +12 14 5 10 6 +13 14 6 11 7 +14 9 4 12 3 +15 3 11 9 2 +16 11 6 10 2 +17 6 10 14 11 +18 1 10 9 13 +19 12 4 9 13 +20 5 10 13 14 +21 8 13 12 14 +22 12 14 11 7 +23 9 12 11 3 +24 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_cube_41_ascii_missing_node_header.msh b/test/user/testdata/malformed_cube_41_ascii_missing_node_header.msh new file mode 100644 index 00000000..9db97fc1 --- /dev/null +++ b/test/user/testdata/malformed_cube_41_ascii_missing_node_header.msh @@ -0,0 +1,65 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$Entities +0 0 0 1 +1 -0.5 -0.5 0 0.5 0.5 1 0 0 +$EndEntities +$Nodes +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +-0.5 -0.5 0 +0.5 -0.5 0 +0.5 0.5 0 +-0.5 0.5 0 +-0.5 -0.5 1 +0.5 -0.5 1 +0.5 0.5 1 +-0.5 0.5 1 +0 0 0 +0 -0.5 0.5 +0.5 0 0.5 +0 0.5 0.5 +-0.5 0 0.5 +0 0 1 +$EndNodes +$Elements +1 24 1 24 +3 1 4 24 +1 10 9 12 11 +2 10 12 13 14 +3 9 10 12 13 +4 10 12 14 11 +5 9 10 1 2 +6 7 11 12 3 +7 4 1 9 13 +8 13 12 4 8 +9 1 10 13 5 +10 13 8 5 14 +11 12 8 14 7 +12 14 5 10 6 +13 14 6 11 7 +14 9 4 12 3 +15 3 11 9 2 +16 11 6 10 2 +17 6 10 14 11 +18 1 10 9 13 +19 12 4 9 13 +20 5 10 13 14 +21 8 13 12 14 +22 12 14 11 7 +23 9 12 11 3 +24 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_shark_22_ascii_missing_num_nodes.xml b/test/user/testdata/malformed_cube_41_ascii_missing_node_header.xml similarity index 84% rename from test/user/testdata/malformed_shark_22_ascii_missing_num_nodes.xml rename to test/user/testdata/malformed_cube_41_ascii_missing_node_header.xml index f29ea403..7f10b533 100644 --- a/test/user/testdata/malformed_shark_22_ascii_missing_num_nodes.xml +++ b/test/user/testdata/malformed_cube_41_ascii_missing_node_header.xml @@ -19,8 +19,8 @@ - + diff --git a/test/user/testdata/malformed_cube_41_ascii_missing_node_index.msh b/test/user/testdata/malformed_cube_41_ascii_missing_node_index.msh new file mode 100644 index 00000000..deda5abf --- /dev/null +++ b/test/user/testdata/malformed_cube_41_ascii_missing_node_index.msh @@ -0,0 +1,66 @@ +$MeshFormat +4.1 0 8 +$EndMeshFormat +$Entities +0 0 0 1 +1 -0.5 -0.5 0 0.5 0.5 1 0 0 +$EndEntities +$Nodes +1 14 1 14 +3 1 0 14 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +-0.5 -0.5 0 +0.5 -0.5 0 +0.5 0.5 0 +-0.5 0.5 0 +-0.5 -0.5 1 +0.5 -0.5 1 +0.5 0.5 1 +-0.5 0.5 1 +0 0 0 +0 -0.5 0.5 +0.5 0 0.5 +0 0.5 0.5 +-0.5 0 0.5 +0 0 1 +$EndNodes +$Elements +1 24 1 24 +3 1 4 24 +1 10 9 12 11 +2 10 12 13 14 +3 9 10 12 13 +4 10 12 14 11 +5 9 10 1 2 +6 7 11 12 3 +7 4 1 9 13 +8 13 12 4 8 +9 1 10 13 5 +10 13 8 5 14 +11 12 8 14 7 +12 14 5 10 6 +13 14 6 11 7 +14 9 4 12 3 +15 3 11 9 2 +16 11 6 10 2 +17 6 10 14 11 +18 1 10 9 13 +19 12 4 9 13 +20 5 10 13 14 +21 8 13 12 14 +22 12 14 11 7 +23 9 12 11 3 +24 10 9 11 2 +$EndElements diff --git a/test/user/testdata/malformed_shark_22_ascii_missing_num_elements.xml b/test/user/testdata/malformed_cube_41_ascii_missing_node_index.xml similarity index 84% rename from test/user/testdata/malformed_shark_22_ascii_missing_num_elements.xml rename to test/user/testdata/malformed_cube_41_ascii_missing_node_index.xml index 61015b92..1a758409 100644 --- a/test/user/testdata/malformed_shark_22_ascii_missing_num_elements.xml +++ b/test/user/testdata/malformed_cube_41_ascii_missing_node_index.xml @@ -19,8 +19,8 @@ - + diff --git a/test/user/testdata/malformed_shark_41_ascii_missing_element_header.xml b/test/user/testdata/malformed_shark_41_ascii_missing_element_header.xml deleted file mode 100644 index 9d462cda..00000000 --- a/test/user/testdata/malformed_shark_41_ascii_missing_element_header.xml +++ /dev/null @@ -1,27 +0,0 @@ - - diff --git a/test/user/testdata/malformed_shark_41_ascii_missing_node_header.xml b/test/user/testdata/malformed_shark_41_ascii_missing_node_header.xml deleted file mode 100644 index a54cda88..00000000 --- a/test/user/testdata/malformed_shark_41_ascii_missing_node_header.xml +++ /dev/null @@ -1,27 +0,0 @@ - - diff --git a/test/user/testdata/malformed_shark_41_ascii_missing_node_index.xml b/test/user/testdata/malformed_shark_41_ascii_missing_node_index.xml deleted file mode 100644 index b3ac3664..00000000 --- a/test/user/testdata/malformed_shark_41_ascii_missing_node_index.xml +++ /dev/null @@ -1,27 +0,0 @@ - - diff --git a/test/user/testdata/shark_22_ascii_fTetWild.msh b/test/user/testdata/shark_22_ascii_fTetWild.msh index 323ae997..b5778d94 100644 --- a/test/user/testdata/shark_22_ascii_fTetWild.msh +++ b/test/user/testdata/shark_22_ascii_fTetWild.msh @@ -2,2316 +2,1505 @@ $MeshFormat 2.2 0 8 $EndMeshFormat $Nodes -652 -1 -0.0733436 0.0816748 0.056402 -2 -0.0729126 0.0537921 0.00170478 -3 -0.072634 0.0799069 0.0578949 -4 -0.0715817 0.0520377 0.00292576 -5 -0.0701949 0.0802569 0.0450431 -6 -0.0687698 0.060971 0.00326551 -7 -0.06778 0.060358 0.00473741 -8 -0.0672796 0.0809249 0.0425553 -9 -0.0658074 0.0806443 0.0552302 -10 -0.064933 0.0788176 0.0453762 -11 -0.0636555 0.0610198 0.00141989 -12 -0.0636111 0.0566004 -0.000556663 -13 -0.0636791 0.0819076 0.0524468 -14 -0.0623445 0.0580268 0.00335683 -15 -0.0624856 0.0671058 0.00581638 -16 -0.0601398 0.0781111 0.0317589 -17 -0.0599443 0.0685632 0.00992449 -18 -0.0592787 0.0571239 0.00105116 -19 -0.0587906 0.0719999 0.0117948 -20 -0.0575605 0.0730663 0.016213 -21 -0.057624 0.0811803 0.0403639 -22 -0.0572339 0.0769387 0.0223219 -23 -0.0559974 0.0749629 0.0235691 -24 -0.0542321 0.0763209 0.0344665 -25 -0.0540672 0.0649483 0.00821813 -26 -0.0541685 0.0661135 0.00437935 -27 -0.0532966 0.0805356 0.0466758 -28 -0.0517252 0.0761185 0.0183218 -29 -0.0505257 0.068877 0.0152572 -30 -0.0503803 0.0772638 0.0406423 -31 -0.0472855 0.0641041 0.00381053 -32 -0.0469016 0.0648796 0.00821733 -33 -0.0474599 0.0727268 0.0265623 -34 -0.0464733 0.070912 0.0103373 -35 -0.0444756 0.0755674 0.0221683 -36 -0.0440208 0.0774313 0.0371107 -37 -0.0434135 0.0685101 0.0213943 -38 -0.0425401 0.0668787 0.0159114 -39 -0.0405353 0.0730163 0.0309862 -40 -0.0386417 0.073548 0.0160682 -41 -0.037401 0.0664899 0.0122191 -42 -0.0358693 0.0689445 0.0243885 -43 -0.0351058 0.0687771 0.0124837 -44 -0.0333614 0.071165 0.0238503 -45 -0.0325564 0.0696271 0.024504 -46 -0.032455 0.0625178 0.0200737 -47 -0.0305469 0.0729973 0.0173921 -48 -0.0276941 0.0652386 0.0128238 -49 -0.0272717 0.0628782 0.0141328 -50 -0.0263428 0.00735496 0.00505748 -51 -0.0256055 0.00658056 0.00327552 -52 -0.0252856 0.0610141 0.0227762 -53 -0.0250237 -0.00678856 0.00359213 -54 -0.0242889 -0.00589458 0.00589675 -55 -0.0216872 0.0639735 0.0255561 -56 -0.0215721 -0.0119744 0.00619585 -57 -0.0195136 0.0542304 0.0216195 -58 -0.0168343 0.0649534 0.0236547 -59 -0.0161373 -0.00420129 0.00881529 -60 -0.0148726 0.0585475 0.0106707 -61 -0.0140647 0.0517836 0.0159197 -62 -0.0142986 0.0543801 0.0051496 -63 -0.0139611 -0.0178642 0.00651265 -64 -0.0139803 0.0554055 0.0115694 -65 -0.0124373 0.0606817 0.0122622 -66 -0.0127423 0.0580719 0.0285553 -67 -0.0127412 -0.0704232 0.0234664 -68 -0.0126173 -0.0801905 0.022154 -69 -0.0125269 0.0592002 0.0346418 -70 -0.0122498 -0.080596 0.0191154 -71 -0.0121442 -0.0691943 0.0191352 -72 -0.0123618 0.0658492 0.0197519 -73 -0.0121018 -0.063334 0.0245151 -74 -0.0118539 0.0462485 0.0243954 -75 -0.0111067 0.0637388 0.0161162 -76 -0.0110042 -0.0624802 0.0276395 -77 -0.0109072 0.046219 0.0183571 -78 -0.0107037 -0.000325242 0.00950432 -79 -0.010183 -0.0121386 0.00674337 -80 -0.00977442 -0.0638147 0.0162637 -81 -0.0097669 -0.0699334 0.0156591 -82 -0.00942656 -0.0836042 0.0182705 -83 -0.009321 -0.0852334 0.0216727 -84 -0.00803502 0.0401179 0.0263407 -85 -0.00857808 -0.0579335 0.0163943 -86 -0.00793158 -0.0190616 0.0121625 -87 -0.00782675 0.0573514 0.028038 -88 -0.00773028 -0.0620746 0.0302044 -89 -0.00764665 0.0537773 0.00961295 -90 -0.00721562 -0.0507362 0.0224357 -91 -0.00717408 -0.0528249 0.0179333 -92 -0.00651588 -0.00739691 0.013024 -93 -0.00691116 -0.00014073 0.00823716 -94 -0.00661131 0.044183 0.0123 -95 -0.00658663 0.0535365 0.0326225 -96 -0.00630954 -0.0850657 0.0194796 -97 -0.00616497 -0.0797841 0.0261073 -98 -0.00582999 -0.0494502 0.0287705 -99 -0.00563359 0.0476479 0.00934546 -100 -0.00506609 -0.0425596 0.0250833 -101 -0.00453974 -0.0405694 0.0173853 -102 -0.00447266 0.0319291 0.0205877 -103 -0.00434886 0.0267225 0.00648417 -104 -0.00418386 0.0253438 0.00842196 -105 -0.0041733 -0.0606038 0.0122716 -106 -0.00385183 0.0479538 0.00869149 -107 -0.00333705 0.051389 0.031593 -108 -0.00333565 -0.0693881 0.0119551 -109 -0.00333748 -0.0650683 0.0110291 -110 -0.00292457 0.0475597 0.0319288 -111 -0.00280471 -0.0353375 0.0238411 -112 -0.00273019 -0.0493159 0.0135756 -113 -0.00255346 -0.0452657 0.0126112 -114 -0.00249178 -0.0598565 0.010934 -115 -0.00247351 -0.0533955 0.0149632 -116 -0.00280465 0.0288144 0.0300227 -117 -0.00225175 -0.030519 0.0236922 -118 -0.00205777 -0.0595101 0.00715068 -119 -0.0018581 -0.0627033 0.0116048 -120 -0.00150112 -0.0384203 0.0313885 -121 -0.00143547 -0.0337232 0.0176227 -122 -0.00136747 -0.062725 0.0150152 -123 -0.000884775 -0.0587825 0.0143119 -124 -0.000624659 -0.0247814 0.0257906 -125 -0.000489974 0.0225414 0.0188523 -126 -6.05566e-05 0.0171338 0.0234086 -127 0.00150381 0.0360475 0.00675461 -128 0.000282178 -0.0241462 0.0174969 -129 0.000347869 -0.0675237 0.0324883 -130 0.000429839 -0.0422219 0.0349169 -131 0.00028168 -0.0273698 0.0312235 -132 0.000952705 -0.0267391 0.0143612 -133 0.00105244 0.0186951 0.00689988 -134 0.0011109 -0.0779453 0.014663 -135 0.00137887 0.00842564 0.0258445 -136 0.00107238 -0.0462225 0.00980545 -137 0.00158113 -0.0561697 0.005809 -138 0.00165921 -0.0142314 0.0114909 -139 0.00169065 -0.00330978 0.027848 -140 0.0017282 0.0264299 0.00972258 -141 0.00196109 -0.062067 0.0125082 -142 0.00198494 -0.0249792 0.0122768 -143 0.00206797 -0.0322322 0.0125632 -144 0.00219287 -0.00991015 0.0199027 -145 0.00223228 -0.065619 0.00972103 -146 0.00226787 -0.06664 0.0139131 -147 0.00233081 0.00970751 0.0349608 -148 0.0023033 -0.0550711 0.0357611 -149 0.00284591 -0.0695874 0.0109337 -150 0.00313658 0.0123831 0.0152878 -151 0.00325266 -0.000639164 0.0164744 -152 0.00354678 -0.0651674 0.00553443 -153 0.00434877 0.0392681 0.00656793 -154 0.0034004 -0.0624097 0.0143354 -155 0.00410027 0.052311 0.0146156 -156 0.00425687 -0.0110681 0.0377954 -157 0.0043501 -0.0020508 0.015115 -158 0.00444422 -0.0785667 0.0168482 -159 0.00471578 -0.00872746 0.0133588 -160 0.00486541 0.0192794 0.0102326 -161 0.00475235 0.0259901 0.00777948 -162 0.00497525 -0.0797755 0.0244877 -163 0.0052286 0.0545416 0.0234287 -164 0.00513856 -0.0361953 0.00904286 -165 0.00543656 -0.016404 0.0117933 -166 0.00521097 0.0361763 0.0357574 -167 0.00563068 0.0458779 0.0101474 -168 0.00602624 -0.0598053 0.00448538 -169 0.00669265 -0.0730234 0.0300997 -170 0.00671975 -0.0647944 0.0149968 -171 0.00743572 0.0219428 0.00498754 -172 0.00806977 -0.0676622 0.0106835 -173 0.00858002 0.0185363 0.00804532 -174 0.00900922 -0.0527441 0.0382868 -175 0.00967438 -0.0310472 0.0412759 -176 0.00969027 -0.0470756 0.00574739 -177 0.00982547 -0.0777201 0.0238208 -178 0.010337 -0.0646559 0.00738197 -179 0.0103691 -0.0715108 0.0301524 -180 0.0108524 -0.0651923 0.0107074 -181 0.0112352 0.0223598 0.00496048 -182 0.0115762 0.0360388 0.034027 -183 0.011811 0.0150563 0.0411225 -184 0.0119389 -0.0710873 0.0142927 -185 0.011481 0.000850754 0.00890493 -186 0.0122581 0.0177891 0.00726338 -187 0.0126044 0.0285097 0.0071727 -188 0.0126077 -0.0410848 0.00487059 -189 0.01325 0.0245576 0.00385279 -190 0.0133342 -0.0301914 0.00695184 -191 0.0134526 -0.00467313 0.044297 -192 0.0140263 0.0415073 0.0128325 -193 0.0139319 -0.0627506 0.0126489 -194 0.0144402 0.0213321 0.0408733 -195 0.0145153 -0.0120242 0.00709154 -196 0.0145254 0.0314471 0.00762861 -197 0.0143606 -0.0539791 0.00638859 -198 0.0153705 -0.0588177 0.00913193 -199 0.0158483 0.0424843 0.0267153 -200 0.0161677 0.0082135 0.0752128 -201 0.0160709 -0.0693691 0.0267104 -202 0.0163112 0.021127 0.00658374 -203 0.0163956 0.0418119 0.0180916 -204 0.0166653 0.00513625 0.0449469 -205 0.0171438 -0.00939438 0.0462661 -206 0.0174416 -0.0497054 0.0373642 -207 0.0174198 -0.0656937 0.0159871 -208 0.0177387 0.0346114 0.0053358 -209 0.0178439 0.0247259 0.00729322 -210 0.018247 0.0346901 0.00258831 -211 0.0182074 -0.0318958 0.0424624 -212 0.0183988 -0.00142899 0.0496692 -213 0.0188182 -0.018825 0.0447569 -214 0.0188285 0.0147456 0.0461032 -215 0.0188626 0.015416 0.041072 -216 0.0190811 -0.00419709 0.0686858 -217 0.0195945 0.0084326 0.064095 -218 0.0197498 -0.00217441 0.0583864 -219 0.0198208 0.00539755 0.0587622 -220 0.0200137 0.0324539 0.00354185 -221 0.020151 -0.0145671 0.0500049 -222 0.0203386 -0.00326709 0.0702447 -223 0.0209148 0.00523036 0.0681576 -224 0.0208447 0.0121045 0.0546374 -225 0.0209724 0.00970633 0.0633876 -226 0.020604 -0.0121123 0.00591309 -227 0.0212498 -0.0289526 0.00565549 -228 0.0216078 -0.0380775 0.00479088 -229 0.0216875 -0.00997672 0.0619769 -230 0.0220658 0.00705093 0.0456869 -231 0.0223002 -0.0558455 0.0110476 -232 0.0223137 -0.0154618 0.0494217 -233 0.0229336 0.00417573 0.0589573 -234 0.0231427 0.0278288 0.0125965 -235 0.0231751 0.027241 0.0309726 -236 0.0233259 0.0160686 0.00756079 -237 0.0234095 0.0318943 0.0199392 -238 0.0234462 -0.00393483 0.0583985 -239 0.0235915 -0.0597066 0.0170609 -240 0.0240196 -0.0108777 0.0466362 -241 0.024123 -0.00330273 0.0464733 -242 0.0242099 -0.0321428 0.0398591 -243 0.0244244 0.00347947 0.0416421 -244 0.024564 -0.0175604 0.0433407 -245 0.0253979 -0.0453083 0.0344803 -246 0.0256103 0.0267734 0.0284514 -247 0.0259312 -0.0445208 0.00878379 -248 0.025959 -0.0133125 0.00624018 -249 0.0265967 -0.0369666 0.00635268 -250 0.0273245 -0.0066598 0.0412078 -251 0.0277597 -0.0467651 0.0304517 -252 0.0275944 -0.0515878 0.0207552 -253 0.0282687 0.0208205 0.0174814 -254 0.0290859 0.0112094 0.012597 -255 0.0293048 -0.0474855 0.0256026 -256 0.0296506 -0.0466043 0.0156453 -257 0.0304236 0.0134394 0.031696 -258 0.0304518 -0.0291908 0.00746031 -259 0.03126 -0.044124 0.016095 -260 0.0321715 -0.043346 0.0242104 -261 0.0322352 -0.0402733 0.0141242 -262 0.0323149 0.01052 0.0200521 -263 0.0324768 -0.0397188 0.0271188 -264 0.0325431 -0.0291932 0.0340382 -265 0.0332479 -0.0329826 0.0117351 -266 0.0338676 -0.0346121 0.0252676 -267 0.0341522 -0.00293196 0.033596 -268 0.0341882 -0.0361716 0.0179088 -269 0.0344969 -0.0256263 0.0309923 -270 0.0345138 -0.00958586 0.0123416 -271 0.0348872 -0.0128566 0.0339912 -272 0.0349524 -0.0273994 0.0177976 -273 0.0349556 -0.000677158 0.0209767 -274 0.0350004 -0.028049 0.00876142 -275 0.0353194 -0.0100316 0.0154749 -276 0.0354214 -0.0195455 0.0173172 -277 0.0355775 -0.0309821 0.0107592 -278 0.0360305 -0.0150581 0.0232372 -279 0.0363938 -0.0285041 0.0132933 -280 0.0374738 -0.00607371 0.0123945 -281 0.041317 -0.0210454 0.0131228 -282 0.0425886 -0.0120136 0.0129537 -283 0.0475164 -0.00753527 0.00853843 -284 0.0492593 -0.00704914 0.00938067 -285 0.0496752 -0.0170405 0.0106038 -286 0.0498676 -0.0259318 0.00619626 -287 0.052402 -0.022331 0.00866719 -288 0.0516897 -0.011391 0.0103437 -289 0.0559595 -0.0106346 0.00698866 -290 0.0596531 -0.0214295 0.0059579 -291 0.066312 -0.0158462 0.00759335 -292 0.0672852 -0.00331292 0.00667068 -293 0.0687074 -0.0027598 0.00829441 -294 0.0687083 -0.0084515 0.00881385 -295 0.0702857 -0.00694567 0.00665748 -296 0.02471 0.00101921 0.00688758 -297 0.00641783 -0.0341512 0.0233596 -298 0.024018 0.00854392 0.00722419 -299 0.0251696 0.00942127 0.00784613 -300 -0.019815 0.0686939 0.0189821 -301 0.0416697 -0.017118 0.00864259 -302 -0.00440288 -0.0698432 0.0205811 -303 -0.0033606 0.0600219 0.0217676 -304 0.0268544 0.00322876 0.0080825 -305 0.00855449 0.0107052 0.00928038 -306 0.0219179 0.00585482 0.0121236 -307 0.0199208 0.0175811 0.0336776 -308 0.0210521 -0.0362113 0.0256186 -309 0.0339797 -0.00194129 0.0163861 -310 0.03202 0.000337126 0.0126992 -311 0.0119633 0.0163586 0.0147908 -312 0.0248778 0.0056119 0.0321775 -313 0.00892971 -0.0563678 0.0287948 -314 0.0174837 0.027107 0.0210333 -315 -0.0170518 0.00346089 0.00554363 -316 0.0144974 -0.0120686 0.0314959 -317 0.00336155 -0.00103205 0.0364574 -318 0.00707711 -0.0204903 0.0185209 -319 0.010517 -0.00309481 0.0232445 -320 -0.00559352 0.0373259 0.0172753 -321 -0.00523735 -0.0230725 0.0111224 -322 0.0151072 -0.0538804 0.0213778 -323 0.0347571 -0.0188174 0.0105515 -324 0.0278657 -0.0183642 0.0156758 -325 -0.00338013 -0.0543805 0.0329679 -326 -0.0196332 0.0593213 0.0251138 -327 0.0648163 -0.0143432 0.00627944 -328 -0.00336175 -0.0187472 0.00979996 -329 -0.0059938 -0.0214388 0.00941436 -330 0.0204933 0.0262773 0.00994486 -331 0.0153554 0.00838654 0.0105168 -332 -0.064082 0.064994 0.00682263 -333 -0.0406296 0.0703091 0.0249838 -334 -0.0197677 0.0563929 0.0156108 -335 -0.0506931 0.0781816 0.0304629 -336 0.0171972 -0.00100568 0.011485 -337 0.0314619 -0.0225976 0.00774901 -338 -0.00980694 0.0515267 0.0104574 -339 -0.00435185 0.0493969 0.0137744 -340 0.0449063 -0.0117353 0.00859937 -341 0.00159087 -0.0450385 0.027858 -342 -0.00469537 -0.0637251 0.0233918 -343 0.0424219 -0.0285632 0.00857374 -344 0.0603894 -0.00835109 0.00935053 -345 -0.0147113 -0.0156046 0.00918376 -346 -0.0528157 0.0611754 0.00480955 -347 -0.0173765 -0.00887149 0.00520522 -348 0.0108104 0.02268 0.0130558 -349 -0.00899905 -0.0208443 0.00915416 -350 -0.0449914 0.0768094 0.0302276 -351 -0.0408502 0.06658 0.00836849 -352 -0.0199988 -0.0118916 0.004906 -353 0.00337131 0.0455887 0.0238561 -354 0.00477413 -0.0721541 0.0211645 -355 -0.00344193 -0.049333 0.032475 -356 0.0427245 -0.0268877 0.00738607 -357 0.0272704 -0.0238375 0.00669928 -358 -0.00610544 -0.0476638 0.0181008 -359 -0.00760153 0.0503529 0.00747858 -360 0.0131109 -0.0422224 0.0405109 -361 0.00214561 -0.0490294 0.0151357 -362 -0.0598224 0.0805424 0.0511855 -363 -0.0204542 0.0588165 0.013102 -364 0.059357 -0.0190886 0.00813027 -365 -0.00100716 0.0422264 0.0325724 -366 0.0325535 -0.0244764 0.012522 -367 -0.000431427 -0.0574818 0.0137747 -368 0.0114251 0.0275734 0.00440942 -369 0.00337666 -0.0559724 0.0148659 -370 -0.0262911 0.0586227 0.0207785 -371 -0.0699467 0.0813567 0.0499003 -372 0.0494602 -0.0133111 0.00757754 -373 0.00758285 0.0333008 0.0104911 -374 0.00657287 0.032122 0.00603963 -375 0.000332803 -0.0511328 0.0180756 -376 -0.021764 0.0620607 0.0118108 -377 -0.0454672 0.075167 0.035911 -378 0.00139884 0.045926 0.0128133 -379 0.0176314 0.0311493 0.00370344 -380 -0.0159418 -0.0158578 0.00793814 -381 -0.0229387 0.0691641 0.0166572 -382 -0.00133409 -0.0449329 0.0187829 -383 -0.0538019 0.0611146 0.00198764 -384 0.0305208 -0.00256491 0.0101919 -385 0.0623596 -0.00697151 0.00683979 -386 0.0236819 -0.00777996 0.0526871 -387 0.0118138 -0.0144241 0.0430193 -388 0.0137156 -0.00365078 0.00732253 -389 -0.0257884 0.0686739 0.0150694 -390 -0.0530331 0.060812 0.00248197 -391 -0.000421194 -0.0523335 0.00879177 -392 0.0193846 -0.00072024 0.0649221 -393 0.00485856 0.0133946 0.0114741 -394 -0.0053823 -0.0743714 0.0141262 -395 0.016958 0.0166471 0.00740593 -396 0.0429338 -0.0266961 0.0110582 -397 -0.0650475 0.05473 0.00191127 -398 0.00924818 0.0356698 0.00715588 -399 -0.042468 0.0652669 0.00790867 -400 0.00699205 0.0348997 0.00576165 -401 -0.012123 0.00171435 0.00688121 -402 0.017741 0.00126373 0.0717161 -403 -0.00477874 -0.0228765 0.0123522 -404 -0.05496 0.0793832 0.0329037 -405 -0.0253736 -0.000654191 0.00342534 -406 0.0220159 -0.0128389 0.0555838 -407 0.0187915 0.00366305 0.0653901 -408 -0.0635923 0.0794618 0.0351284 -409 0.0187293 0.00901455 0.0689246 -410 -0.0507436 0.0790633 0.0364811 -411 0.00440962 0.0291856 0.00589534 -412 -0.0610541 0.0815764 0.0467801 -413 -0.0264169 0.0641898 0.0180225 -414 0.0590681 -0.0129818 0.00969293 -415 0.0316732 -0.013669 0.00892731 -416 -0.0368828 0.0732351 0.028231 -417 0.0147007 -0.0293577 0.0425282 -418 -0.00226105 0.042112 0.00818422 -419 -0.022404 0.068624 0.0211714 -420 0.018834 0.0296379 0.0101126 -421 0.0545664 -0.023882 0.00596013 -422 -0.0610274 0.0626039 0.00623226 -423 0.0209345 -0.0123916 0.0558755 -424 -0.064258 0.0639612 0.00701622 -425 -0.0530259 0.0709966 0.0104874 -426 -0.000350232 0.0328643 0.00950357 -427 0.0179821 0.0260225 0.00525665 -428 -0.071629 0.0809096 0.0500374 -429 0.0431333 -0.00662611 0.0109755 -430 -0.0367738 0.072104 0.0272887 -431 -0.00147996 0.0424733 0.00778004 -432 -0.0489442 0.0792518 0.0424775 -433 0.0178184 0.00830923 0.0698262 -434 -0.00256208 -0.0518644 0.0119693 -435 -0.0024457 0.0347988 0.0115191 -436 -0.0226391 0.067054 0.0236986 -437 -0.0250562 0.070839 0.0181046 -438 0.0157661 -0.010775 0.0444953 -439 -0.0587069 0.0610686 0.00549325 -440 -0.0561989 0.0607157 0.00436391 -441 0.0028322 0.0311045 0.0076099 -442 -0.061857 0.079748 0.0514834 -443 -0.0580072 0.0744854 0.0170926 -444 0.017366 0.0281829 0.00449304 -445 0.0175246 0.0303053 0.00632184 -446 -0.0583716 0.0812348 0.0494755 -447 -0.0627638 0.0811059 0.0418948 -448 0.00958337 0.0391723 0.00889538 -449 0.0164997 0.0327763 0.00400793 -450 -0.0100537 -0.019407 0.0104569 -451 0.0535082 -0.023589 0.00757618 -452 -0.0184567 0.0672393 0.0165986 -453 -0.0660887 0.0639515 0.00557639 -454 -0.0085005 0.0591911 0.0132991 -455 0.0527123 -0.00658592 0.00801901 -456 0.00664445 0.0147496 0.00979726 -457 -0.0323364 0.0646841 0.013176 -458 -0.0684981 0.0817682 0.0541475 -459 0.0424951 -0.00680449 0.0104665 -460 -0.01583 0.0638299 0.0140017 -461 -0.0408586 0.0747808 0.0276312 -462 -0.0213675 0.00505684 0.00440033 -463 -0.0609542 0.0784149 0.029815 -464 0.0458286 -0.0196104 0.0115924 -465 0.0619857 -0.0044448 0.00717137 -466 -0.0549453 0.0736446 0.0144159 -467 -0.0660739 0.0797747 0.0511232 -468 -0.0150243 -0.0138696 0.00597473 -469 -0.0208919 0.0664273 0.014553 -470 -0.0583912 0.0766731 0.0277458 -471 -0.00499489 -0.0492059 0.0154875 -472 -0.0177596 -0.0149926 0.00640227 -473 -0.0656257 0.0638276 0.00437301 -474 -0.00111824 -0.0505712 0.010634 -475 -0.0234714 0.0595273 0.0150887 -476 -0.0117477 -0.00786715 0.0107629 -477 -0.0329423 0.0662408 0.012525 -478 -0.0588644 0.0778049 0.0265316 -479 -0.038272 0.0710121 0.0277124 -480 0.0147178 0.0228905 0.00513556 -481 -0.00242697 -0.0228032 0.0106496 -482 -0.00998317 -0.0196685 0.00798312 -483 0.00194711 0.0338412 0.00734265 -484 -0.0101071 0.0571173 0.0108272 -485 -0.000192036 0.0305177 0.010316 -486 -0.0662236 0.0609953 0.00234663 -487 -0.0383437 0.071981 0.0290737 -488 0.0464353 -0.0271448 0.00729223 -489 -0.0113654 0.0558876 0.00985606 -490 -0.0600686 0.0581853 0.00037707 -491 0.0184892 0.00651809 0.072001 -492 -0.0272353 0.0661385 0.0125002 -493 0.0386787 -0.00939756 0.0110365 -494 -0.00702298 -0.0554164 0.0301677 -495 -0.0387296 0.0725599 0.0291973 -496 -0.0195884 -0.00971304 0.00731553 -497 0.000980398 0.0340005 0.00831153 -498 -0.00251349 -0.0493306 0.0137872 -499 -0.0208118 0.00468072 0.00662791 -500 0.0145465 0.0247675 0.00685396 -501 0.0539643 -0.00601143 0.00911787 -502 0.0615879 -0.00432066 0.00875869 -503 -0.0649217 0.0800024 0.0383643 -504 0.00460493 0.00849738 0.0127005 -505 -0.0606311 0.0803611 0.0379233 -506 -0.00316884 0.0400824 0.00969248 -507 -0.0308482 0.067467 0.0126012 -508 0.0120049 0.00511369 0.00824306 -509 0.0117314 0.0134932 0.00784586 -510 0.0067401 0.0222359 0.00786688 -511 0.000365941 0.0444987 0.0334101 -512 0.00589042 0.0427357 0.0325284 -513 0.0134556 0.013691 0.0071386 -514 0.0155774 0.00572549 0.00675779 -515 -0.0442054 0.0654197 0.00607699 -516 0.00863004 0.0184766 0.00878081 -517 -0.0111016 -0.0170398 0.0107756 -518 -0.0162643 0.06208 0.0123266 -519 -0.0670643 0.0628756 0.0047451 -520 -0.0673064 0.0791769 0.0489333 -521 -0.0566743 0.0588231 0.00264455 -522 -0.0713841 0.080001 0.0523997 -523 -0.0690781 0.0794039 0.0521145 -524 -0.0589744 0.0702988 0.0123753 -525 -0.0108026 0.05228 0.00636676 -526 -0.0113486 0.0541547 0.00728553 -527 -0.0299136 0.0686241 0.0165753 -528 0.0505332 -0.0225927 0.00635398 -529 0.0180077 0.0031318 0.0704387 -530 -0.0235313 0.0640143 0.012641 -531 -0.0235569 0.00584404 0.00381922 -532 0.0384718 -0.0113423 0.0144484 -533 0.0182407 0.00232532 0.0728388 -534 -0.0235752 0.00407866 0.00373027 -535 -0.011585 0.0522432 0.00647843 -536 0.0400312 -0.00904366 0.0126741 -537 -0.0178591 -0.000359808 0.00797485 -538 -0.067167 0.0625514 0.00392853 -539 -0.0596438 0.0779391 0.0290601 -540 0.0013543 0.0302152 0.00901705 -541 0.0168301 0.00522322 0.0737244 -542 0.0174324 0.00448014 0.0738384 -543 -0.0618546 0.0649931 0.00590465 -544 0.0194429 0.0304209 0.00452872 -545 -0.0236633 0.0648084 0.0124456 -546 -0.00249493 -0.0562542 0.012985 -547 -0.0025263 -0.0246783 0.0125409 -548 -0.0396392 0.0718092 0.02876 -549 -0.0158083 -0.0164708 0.00645267 -550 0.016879 0.0245859 0.0055459 -551 -0.0688499 0.0811361 0.0461884 -552 0.0290982 -0.00647478 0.00827907 -553 -0.041817 0.0761358 0.0343691 -554 -0.0642688 0.0653922 0.00517065 -555 -0.0162175 0.00239503 0.00694561 -556 0.00467524 0.0360758 0.00643588 -557 -0.0222973 0.0035638 0.00646752 -558 -0.0708092 0.0801688 0.0482801 -559 -0.0549524 0.0787083 0.0296023 -560 -0.0631054 0.0672415 0.00811831 -561 -0.0155444 -0.0163359 0.0060847 -562 -0.0574097 0.0788047 0.0473507 -563 -0.0558952 0.0591814 0.001764 -564 -0.0177409 0.0619627 0.0144786 -565 -0.00178349 -0.0487397 0.0125937 -566 -0.0111058 0.0522074 0.00829904 -567 -0.0260139 0.00360897 0.00461987 -568 -0.0204566 0.00423454 0.00564674 -569 0.00612936 0.0370467 0.00680554 -570 0.010446 0.0313554 0.00705031 -571 -0.0569353 0.05965 0.00118235 -572 -0.0506685 0.0625792 0.00279292 -573 -0.0249761 0.00485573 0.00443819 -574 0.0172421 0.00725128 0.0738262 -575 -0.0219613 0.0643004 0.0138184 -576 -0.00260185 -0.0513557 0.0142694 -577 -0.0167422 0.00259292 0.00779623 -578 0.00214524 0.0341103 0.00650831 -579 -0.0236765 0.00572293 0.004305 -580 -0.0616879 0.0784644 0.0353636 -581 -0.0125522 0.0533024 0.00573952 -582 -0.00373263 -0.048886 0.014509 -583 -0.00253347 -0.0472982 0.0131992 -584 -0.0128746 -0.017623 0.00940414 -585 -5.43548e-05 0.0393803 0.00728201 -586 -0.0258702 0.00405717 0.00525282 -587 0.0183599 0.0265636 0.00640112 -588 0.0459896 -0.0257989 0.0100883 -589 -0.0295424 0.0680594 0.0247957 -590 -0.0245383 0.0634107 0.0123732 -591 0.0066096 0.0377811 0.00691952 -592 -0.0450015 0.0646553 0.00575343 -593 -0.0622505 0.0661482 0.00839783 -594 -0.0256248 0.0608105 0.0161665 -595 0.017488 0.00853314 0.0720965 -596 -0.0596734 0.0705097 0.00992485 -597 -0.0665798 0.0628689 0.00493615 -598 -0.0624322 0.0664941 0.0080812 -599 0.0436037 -0.00911409 0.00950451 -600 -0.0258241 0.00183578 0.00455937 -601 -0.0702703 0.0796913 0.0546337 -602 -0.027947 0.0630495 0.0231884 -603 -0.0601839 0.0704633 0.0106076 -604 -0.019796 -0.0130118 0.0069497 -605 -0.0183149 0.0630548 0.012418 -606 -0.0302535 0.0701272 0.02364 -607 -0.0574291 0.0790851 0.0314511 -608 -0.0506885 0.0650762 0.00396145 -609 -0.021101 0.0616869 0.0137094 -610 -0.0331684 0.0670427 0.023997 -611 0.0134393 0.00644533 0.00718965 -612 -0.0111807 -0.0194906 0.00818236 -613 -0.0255718 0.00304117 0.00332801 -614 -0.0126697 -0.015488 0.00653208 -615 -0.0247074 0.00660999 0.00551935 -616 0.0173416 0.0031807 0.0727906 -617 0.0172416 0.0236783 0.00588169 -618 0.0190309 0.0293428 0.00437137 -619 0.016715 0.00646681 0.0747173 -620 -0.0362286 0.072292 0.023504 -621 -0.0193589 -0.00042516 0.00470745 -622 -0.0218861 0.0643631 0.0125137 -623 -0.0102557 0.0512168 0.00711881 -624 0.0404202 -0.00631757 0.0116411 -625 0.0462272 -0.00679819 0.0101561 -626 -0.0259792 0.0656558 0.0150971 -627 0.0162732 0.0229634 0.00624384 -628 0.00353474 0.0364474 0.00843339 -629 4.6368e-06 0.0388726 0.00973083 -630 -0.0216501 0.0633078 0.012475 -631 -0.0653553 0.0635995 0.0060088 -632 -0.0129397 0.0533345 0.00604151 -633 -0.00189413 -0.0244631 0.013557 -634 -0.0610974 0.0673557 0.00916116 -635 0.0169636 0.00823874 0.0726305 -636 -0.0262169 0.00566462 0.00486021 -637 -0.00105663 -0.050339 0.013034 -638 -0.0522352 0.0618469 0.00239028 -639 -0.0658611 0.0623674 0.00600767 -640 -0.0308719 0.0671807 0.0240148 -641 -0.0271033 0.0631674 0.0232081 -642 0.000463176 0.0377435 0.00713404 -643 0.0197653 -0.0105149 0.0573133 -644 -0.0261272 0.00574879 0.00514751 -645 -0.0256133 0.00236555 0.00535812 -646 0.0395658 -0.00664927 0.0115095 -647 -0.0346515 0.0704144 0.0260764 -648 -0.0676857 0.0619198 0.00410476 -649 -0.0352382 0.0722683 0.0261851 -650 -0.0489272 0.0632235 0.00329626 -651 -0.0514659 0.0617489 0.00295197 -652 -0.070483 0.0805389 0.0464472 +425 +1 -0.0728363 -0.056865 0.0808183 +2 -0.0721621 -0.00154577 0.0517562 +3 -0.0678858 -0.0429189 0.080376 +4 -0.0637814 -0.005376 0.0670019 +5 -0.0569087 -0.0251296 0.0763977 +6 -0.0517851 -0.00144452 0.0621592 +7 -0.049483 -0.0430692 0.0793982 +8 -0.0400248 -0.0124658 0.0665267 +9 -0.0396431 -0.0145027 0.0741478 +10 -0.0328409 -0.0245911 0.0700669 +11 -0.0215371 -0.00462861 -0.0129422 +12 -0.0181592 -0.0208975 0.0550669 +13 -0.0147414 -0.00975246 0.0571947 +14 -0.0142555 -0.0226884 -0.0704441 +15 -0.0119955 -0.0216962 -0.0848117 +16 -0.0114235 -0.02991 0.0583558 +17 -0.00930334 -0.0105483 -0.00165622 +18 -0.00703847 -0.017392 0.0635723 +19 -0.00677243 -0.0181888 -0.0853747 +20 -0.00464315 -0.031778 0.0517583 +21 -0.00434693 -0.0146154 -0.0520853 +22 -0.00344682 -0.0109797 -0.0647473 +23 -0.00319236 -0.0216693 -0.0340456 +24 -0.00279791 -0.00777763 0.0461641 +25 -0.00234116 -0.00747539 -0.0630415 +26 -0.000672831 -0.00877312 0.0268524 +27 -0.00087822 -0.0300193 0.0194994 +28 0.000450005 -0.0139791 -0.0271519 +29 0.000526702 -0.0149872 -0.0616189 +30 0.0014216 -0.0201404 -0.0116831 +31 0.00236634 -0.0359419 -0.0337111 +32 0.00381878 -0.0144234 -0.00138981 +33 0.00568699 -0.00470995 -0.0655576 +34 0.00586017 -0.00898053 0.0167681 +35 0.00769359 -0.00635762 0.0205741 +36 0.00955683 -0.0111341 -0.0661377 +37 0.0102465 -0.025953 -0.0775612 +38 0.0124599 -0.0414656 -0.044554 +39 0.0139461 -0.0046486 0.0236292 +40 0.015625 -0.00608832 0.0334885 +41 0.0179137 -0.0466795 -0.014648 +42 0.0185017 -0.0438262 0.0149269 +43 0.0186001 -0.0061278 0.0232909 +44 0.0193402 -0.00497139 -0.0481151 +45 0.0200702 -0.0277642 0.037727 +46 0.0202235 -0.0161136 -0.0638338 +47 0.0204694 -0.0629464 0.00915227 +48 0.0205308 -0.0618139 -0.00989564 +49 0.0207995 -0.0143445 0.0363816 +50 0.0249978 -0.0463018 -0.0137251 +51 0.0320294 -0.0307982 -0.0409803 +52 0.0338409 -0.0197469 -0.0414338 +53 0.03492 -0.00942332 -0.0309416 +54 0.0349673 -0.0311186 0.00119197 +55 0.0350622 -0.0135762 -0.00740049 +56 0.0366465 -0.0149831 -0.0202668 +57 0.0525438 -0.00798137 -0.0066761 +58 0.0636508 -0.00590893 -0.0202568 +59 0.0694258 -0.00817892 -0.00249425 +60 0.0217779 -0.0348148 -0.00882238 +61 0.0149497 -0.0208345 -0.0534504 +62 0.0140856 -0.0195644 -0.0348105 +63 0.0154256 -0.0218098 -0.00234099 +64 0.0126826 -0.0292741 0.0105251 +65 0.000621631 -0.0328016 -0.00578837 +66 0.0112744 -0.0114602 0.0401387 +67 0.00273608 -0.00929342 0.0438443 +68 -0.00187962 -0.031483 0.0352389 +69 0.0138252 -0.00823807 -0.0328329 +70 0.019291 -0.00520052 -0.0353296 +71 0.0187065 -0.00596154 0.013025 +72 0.0190961 -0.00535273 -0.024568 +73 0.0188655 -0.00571318 -0.00231103 +74 0.0241997 -0.0139033 0.0261483 +75 0.00628009 -0.0153628 -0.0531077 +76 0.00145765 -0.00738741 0.0432362 +77 0.0160366 -0.044885 -0.024941 +78 -0.0288113 -0.022006 0.0609072 +79 0.0453415 -0.00857199 -0.0164953 +80 0.0191754 -0.0353017 0.0271562 +81 0.00774943 -0.0295008 0.0451187 +82 0.00869221 -0.0387198 0.0305372 +83 0.000812778 -0.0346181 0.0430761 +84 -0.0502001 -0.0105111 0.0710225 +85 -0.0584712 -0.049051 0.080155 +86 0.0343101 -0.0234822 -0.029364 +87 0.0222359 -0.0346073 0.0180596 +88 -0.0542938 -0.0316791 0.0777997 +89 -0.0483968 -0.0260198 0.0765467 +90 -0.0428782 -0.0236383 0.0758779 +91 0.0351621 -0.0171142 -0.0313583 +92 0.0349663 -0.0114752 -0.0192022 +93 0.0266098 -0.00774521 -0.00332591 +94 0.0235892 -0.00712512 0.00617618 +95 0.0217548 -0.00677413 0.0128616 +96 0.0310363 -0.00863907 -0.0180356 +97 -0.0417064 -0.0346157 0.0750352 +98 0.00191046 -0.0289111 -0.0241466 +99 0.0266594 -0.015439 -0.022421 +100 0.00211872 -0.0141991 -0.0143907 +101 0.0169244 -0.0274384 -0.0663467 +102 0.0121434 -0.0325488 -0.00893719 +103 0.00275025 -0.00680257 0.0391239 +104 0.00840961 -0.00570484 0.0306221 +105 0.009189 -0.019748 -0.0230423 +106 0.0229732 -0.0248112 -0.0249009 +107 -0.0449112 -0.0247642 0.0732097 +108 0.0122291 -0.0427403 -0.0214142 +109 -0.00678571 -0.0220003 -0.045868 +110 -0.0518388 -0.00894006 0.066763 +111 0.000602698 -0.0234575 -0.00224705 +112 0.0281475 -0.0213364 -0.0130237 +113 -0.000136271 -0.0267873 0.00946372 +114 0.0237341 -0.014326 -0.0314588 +115 0.010216 -0.0398873 -0.00116094 +116 0.00985963 -0.0213129 0.0379516 +117 -0.000874527 -0.0238246 -0.0811864 +118 -5.31364e-06 -0.0316386 0.00478204 +119 0.0271301 -0.00719735 -0.0395283 +120 0.018982 -0.00553109 -0.0135545 +121 -0.0127731 -0.0237648 0.0442177 +122 -0.00859683 -0.0259371 0.0354746 +123 0.00711472 -0.00983053 0.034276 +124 -0.0126399 -0.00888054 0.00276153 +125 -0.0131104 -0.00790752 -0.0087635 +126 0.00105112 -0.0280331 0.0508646 +127 0.0288739 -0.0184217 -0.0496042 +128 0.0468582 -0.00796303 -0.0265019 +129 0.0471975 -0.0114377 -0.0202629 +130 -0.00204678 -0.014459 -0.0398813 +131 -0.0149503 -0.00906428 -0.0129973 +132 -0.00615225 -0.0149964 -0.0123473 +133 -0.00136238 -0.00938651 -0.0522949 +134 0.00699742 -0.0124995 -0.00980463 +135 0.0103109 -0.00927693 -0.038095 +136 0.0224348 -0.0558977 -0.000749106 +137 0.022008 -0.0451624 -0.000537959 +138 0.012604 -0.0422909 -0.00995036 +139 -0.000460713 -0.0207641 -0.0208061 +140 -0.0103791 -0.0223313 -0.0576904 +141 0.011416 -0.0350242 -0.0584152 +142 0.0236023 -0.0289238 -0.0551322 +143 0.0136881 -0.0224356 -0.0442601 +144 0.0280628 -0.0141316 0.0143803 +145 0.00384797 -0.0215328 -0.0702798 +146 0.0314943 -0.0137583 0.00365432 +147 0.0244452 -0.00877247 0.0123935 +148 0.0303279 -0.0114341 0.00142608 +149 0.00188964 -0.0144465 -0.0751702 +150 -0.0185484 -0.0206033 0.0664694 +151 0.0172222 -0.0148228 -0.0167546 +152 -0.0306187 -0.0138705 0.0656843 +153 -0.0208087 -0.0153355 0.0648056 +154 -0.0204917 -0.0161998 0.0679359 +155 0.00194658 -0.0211684 0.0184579 +156 0.0181976 -0.0453016 -0.000365513 +157 0.0194212 -0.0441508 -0.0274374 +158 -0.00216525 -0.0323277 -0.0438801 +159 -0.00992976 -0.0261153 -0.0613225 +160 0.00319152 -0.0339732 -0.0598114 +161 -0.00325095 -0.0302643 -0.060798 +162 -0.061007 -0.00533617 0.0568832 +163 -0.0528409 -0.00811097 0.0606364 +164 -0.00180886 -0.00791376 0.0428242 +165 0.00364331 -0.00867253 0.0242948 +166 0.0116743 -0.0244724 0.0457278 +167 0.00841563 -0.0156841 0.0484768 +168 -0.00151886 -0.0219526 0.0290708 +169 0.00163932 -0.0162951 0.0548958 +170 0.00271067 -0.0211222 0.0542775 +171 -0.0683923 -0.0481786 0.0794739 +172 0.0258787 -0.0289219 0.0234897 +173 0.0297243 -0.0300299 0.0138429 +174 0.0268975 -0.0219664 0.0213734 +175 0.0303319 -0.0255376 0.0128017 +176 0.0435641 -0.0119245 -0.0142999 +177 0.0454283 -0.0131602 -0.0155054 +178 0.00383772 -0.0178727 -0.077226 +179 -0.031372 -0.0158024 0.0619918 +180 -0.0252203 -0.010877 0.0610624 +181 0.00284883 -0.0235969 -0.05629 +182 0.0328832 -0.0305119 -0.0297847 +183 0.0298433 -0.0389223 -0.00647498 +184 0.0337169 -0.0306454 -0.0176971 +185 0.0283448 -0.0389223 -0.0266982 +186 -0.0613866 -0.00149223 0.0572574 +187 0.0230393 -0.0158441 0.00405693 +188 -0.00860363 -0.00873759 0.051526 +189 0.0156573 -0.027134 0.0241034 +190 0.0216619 -0.0356454 -0.0444417 +191 -0.0093012 -0.0186519 -0.0612647 +192 0.0240603 -0.0265416 0.00538933 +193 0.0115453 -0.00482212 -0.0580734 +194 0.00888886 -0.0189694 0.0088502 +195 -0.0104786 -0.0143376 0.0506155 +196 0.0264224 -0.0125364 -0.0454006 +197 0.0123514 -0.0339843 -0.0292963 +198 0.0105532 -0.0165397 -0.0712104 +199 0.0144485 -0.00805273 -0.0571264 +200 0.00899435 -0.00737642 -0.0492155 +201 -0.0255001 -0.0227443 0.0625669 +202 0.0111023 -0.0306701 -0.0672966 +203 -0.017885 -0.00744677 0.0030315 +204 -0.0535164 -0.0335822 0.0777869 +205 -0.0612731 -0.0340211 0.0775811 +206 0.00776834 -0.00680875 0.0388942 +207 -0.0479803 -0.0194226 0.0751658 +208 0.0611209 -0.00990282 -0.00699707 +209 0.00173701 -0.0220709 -0.081468 +210 0.0142483 -0.0431753 -0.0347475 +211 0.021286 -0.0307593 -0.0337452 +212 0.0122407 -0.031066 -0.0488767 +213 0.0173359 -0.0154217 0.0249811 +214 0.0204251 -0.0627914 -0.000394298 +215 0.0152526 -0.0208533 -0.0705698 +216 0.0153836 -0.0188257 0.0159983 +217 -0.00673659 -0.0109278 -0.0226656 +218 -0.0472175 -0.0239214 0.070999 +219 0.000917224 -0.00829314 0.0335595 +220 0.0197818 -0.0105425 -0.0559744 +221 0.0343657 -0.0309288 -0.00842183 +222 0.0667806 -0.00699365 -0.0112442 +223 0.00483948 -0.0117019 0.00768915 +224 0.00800637 -0.027878 0.00129815 +225 -0.00474666 -0.0111854 -0.00428029 +226 0.0159406 -0.0428082 -0.0359957 +227 0.0436507 -0.0108191 -0.00701758 +228 -0.00233881 -0.00814394 0.0403267 +229 0.0158067 -0.0137147 -0.0470992 +230 -0.00766266 -0.0251988 -0.0776791 +231 0.0118356 -0.0296835 -0.0201566 +232 0.00177476 -0.0349406 -0.0252303 +233 -0.0593773 -0.043626 0.0800845 +234 -0.00583534 -0.0112894 0.000839972 +235 -0.00388599 -0.0153707 -0.00675514 +236 -0.0105139 -0.0204386 -0.0779094 +237 -0.0657892 -0.0532314 0.0804117 +238 -0.0701914 -0.0492614 0.0805791 +239 0.00118885 -0.00955494 0.0385098 +240 0.0183881 -0.0447347 0.00758507 +241 -0.0264138 -0.0262278 0.0665665 +242 -0.0199786 -0.00665535 0.00381361 +243 -0.0635756 -0.0435728 0.080234 +244 0.0159454 -0.0428219 0.00812093 +245 0.00548347 -0.0352672 0.011545 +246 -0.0494091 -0.0305983 0.0759314 +247 -0.00483293 -0.0197247 0.0456926 +248 -0.0174567 -0.00714645 -0.00280428 +249 0.0233012 -0.0399189 0.00399087 +250 0.0202548 -0.0444943 0.00719449 +251 -0.0026874 -0.0125121 -0.00160851 +252 -0.00540922 -0.0202118 0.0368218 +253 -0.0535231 -0.0292405 0.0773423 +254 0.0193016 -0.0509856 0.00552783 +255 -0.0540619 -0.0229129 0.0747044 +256 -0.0567557 -0.0301448 0.0772623 +257 -0.0611002 -0.0410373 0.0797347 +258 -0.0457107 -0.0385935 0.0771313 +259 -0.0198937 -0.0057909 -0.0129324 +260 -0.00924631 -0.0101853 0.00160006 +261 -0.0602249 -0.0302859 0.0775493 +262 -0.0547631 -0.0301272 0.0775533 +263 -0.0532111 -0.0417464 0.0792232 +264 -0.016066 -0.00741448 -0.0084293 +265 -0.0199013 -0.00633698 0.00319032 +266 -0.0509463 -0.0248508 0.0747811 +267 0.00228741 -0.0089825 0.02185 +268 -0.000604957 -0.0127586 -0.00466183 +269 -0.0708247 -0.0516701 0.0806476 +270 -0.0464309 -0.0341095 0.0777712 +271 -0.0136958 -0.00847675 -0.0059931 +272 0.0155788 -0.0078234 0.0182462 +273 -0.00218356 -0.00826781 0.0383527 +274 0.00559448 -0.00662078 0.0261387 +275 -0.0557439 -0.0283785 0.0771009 +276 -0.0197442 -0.00550978 -0.00942949 +277 -0.052766 -0.0272062 0.0758809 +278 -0.0193314 -0.0066875 0.000961961 +279 -0.0614697 -0.0436343 0.0791028 +280 -0.0506819 -0.0353089 0.078259 +281 -0.0478445 -0.0376627 0.0785338 +282 -0.0154504 -0.00777625 0.00121513 +283 -0.00124243 -0.00866868 0.0302406 +284 -0.058316 -0.0205096 0.0742631 +285 -0.0543755 -0.0457216 0.0797972 +286 -0.015772 -0.00787584 0.00426761 +287 -0.0170557 -0.0063587 -0.0109152 +288 -0.00594049 -0.0115565 -0.00171786 +289 -0.0107712 -0.0102075 -0.00481079 +290 -0.0187152 -0.00625561 -0.00839308 +291 -0.00176674 -0.00828582 0.0365165 +292 -0.0520799 -0.0244274 0.073665 +293 -0.0194253 -0.00675989 0.00232196 +294 -0.0539381 -0.0347391 0.0783122 +295 -0.0647 -0.0479129 0.0803567 +296 -0.0157254 -0.00749431 -0.00142208 +297 -0.0617053 -0.032727 0.0780955 +298 -0.0550819 -0.0300242 0.0772322 +299 -0.00250976 -0.0111321 0.0421666 +300 -0.062894 -0.0488134 0.0798554 +301 -0.0488898 -0.038772 0.0779948 +302 -0.065653 -0.0494464 0.0798156 +303 -0.0137614 -0.00894323 0.000726333 +304 -0.019258 -0.00604608 -0.00422645 +305 -0.0110851 -0.00927095 0.000465552 +306 -0.0636764 -0.0385909 0.0781866 +307 -0.0592461 -0.0295312 0.076969 +308 0.0190286 -0.0485585 0.0133193 +309 -0.0585668 -0.0277077 0.0769735 +310 -0.05247 -0.0325946 0.0778731 +311 -0.00375903 -0.010705 0.0511951 +312 -0.0522524 -0.0351986 0.0783131 +313 -0.0554377 -0.0329501 0.0780728 +314 8.01184e-05 -0.00876042 0.0452398 +315 -0.0584595 -0.0358141 0.0787087 +316 -0.00230339 -0.00784569 0.0444942 +317 -0.0591082 -0.0377716 0.0782891 +318 -0.0178204 -0.00666854 -0.00261226 +319 -0.0519744 -0.0408649 0.0792798 +320 -0.0513632 -0.0368546 0.078558 +321 -0.0545064 -0.0387768 0.0786598 +322 -0.0546049 -0.0404573 0.0789467 +323 -0.0206071 -0.00621504 0.00155868 +324 -0.000445818 -0.00810345 0.0381919 +325 0.00228027 -0.00848284 0.0289272 +326 -0.00257158 -0.00795821 0.0432864 +327 -0.0575695 -0.0307065 0.0776778 +328 -0.0629439 -0.0472243 0.0795997 +329 -0.00500198 -0.0112902 -0.00148859 +330 -0.0658568 -0.0395731 0.0796274 +331 -0.0194715 -0.0063072 0.00058745 +332 -0.0182017 -0.00605996 -0.0155083 +333 0.000209217 -0.0148349 -0.003852 +334 -0.0560331 -0.0417741 0.079626 +335 -0.0674359 -0.0507662 0.079935 +336 -0.0507722 -0.0343214 0.0772816 +337 -0.0590278 -0.0459926 0.0801169 +338 -0.0504216 -0.0324786 0.0777576 +339 -0.053403 -0.0378679 0.0788282 +340 -0.0567615 -0.0376288 0.0789433 +341 -0.0543607 -0.0408651 0.079391 +342 -0.0172782 -0.00709435 -0.00433956 +343 -0.0202763 -0.00622126 -2.42715e-05 +344 -0.0123732 -0.00909168 -0.0044135 +345 -0.0603943 -0.0474082 0.0801928 +346 -0.0544323 -0.0435469 0.079858 +347 -0.0659905 -0.0506211 0.0804544 +348 -0.0507173 -0.0368605 0.0779499 +349 -0.068832 -0.053212 0.0806054 +350 -0.00896363 -0.0095307 -0.00656927 +351 -0.0142454 -0.00845353 -0.00286006 +352 -0.0526878 -0.0361626 0.0783044 +353 -0.0604586 -0.0448782 0.080147 +354 -0.00703154 -0.0104841 -0.00273008 +355 -0.000575656 -0.00740366 0.0422968 +356 -0.0181302 -0.0069835 -0.0130553 +357 -0.0129025 -0.00819808 -0.00566342 +358 -0.0581446 -0.0292892 0.0773437 +359 -0.0593565 -0.0327226 0.0781222 +360 -0.0170533 -0.00705296 -0.0059758 +361 -0.0545952 -0.0237141 0.0760982 +362 -0.062833 -0.0507302 0.080164 +363 -0.0695797 -0.0551851 0.0806697 +364 -0.000488014 -0.00765999 0.0383829 +365 -0.0188168 -0.00605435 -0.010789 +366 0.00258328 -0.00700212 0.0340396 +367 0.0011008 -0.00721267 0.0374456 +368 -0.0552664 -0.0356448 0.0781461 +369 -0.0543314 -0.0432147 0.0794 +370 -0.00259587 -0.00926749 0.0441465 +371 -0.0192182 -0.00553883 -0.012343 +372 -0.0566482 -0.0471279 0.0799054 +373 -0.0571003 -0.0442457 0.0794231 +374 -0.0158317 -0.00819192 0.00188366 +375 -0.0603784 -0.0318281 0.0772772 +376 -0.0570718 -0.0332625 0.0776744 +377 -0.0178305 -0.00699253 0.00207024 +378 -0.000530948 -0.00756976 0.0446044 +379 -0.0189272 -0.00680036 0.00487917 +380 -0.0154427 -0.00741455 -0.00399411 +381 -0.0696011 -0.0508287 0.0798345 +382 -0.0568013 -0.0449227 0.0800168 +383 -0.0137965 -0.00851264 -0.00438564 +384 -0.0571804 -0.0395474 0.0786704 +385 -0.017007 -0.00717504 0.000506807 +386 -0.0014623 -0.00792445 0.0392993 +387 -0.0175953 -0.00664733 -0.00405596 +388 -0.0571704 -0.0420062 0.0790627 +389 -0.0177305 -0.00715669 -0.00130551 +390 -0.0682075 -0.0526543 0.0801965 +391 -0.00159094 -0.00757891 0.0439704 +392 -0.000314411 -0.00743859 0.0401681 +393 -0.00364144 -0.0120629 -0.000192525 +394 -0.0111893 -0.0096955 -0.00293607 +395 -0.0522189 -0.0432389 0.0797016 +396 -0.0164832 -0.00761976 -0.00187495 +397 -0.0562123 -0.0354907 0.0785481 +398 -0.0544109 -0.0315002 0.0774568 +399 -0.0598002 -0.047295 0.0797713 +400 -0.0674171 -0.0532529 0.0805555 +401 -0.0669549 -0.052318 0.0805212 +402 -0.016341 -0.00755286 -0.00340936 +403 -0.0548044 -0.0371885 0.078776 +404 -0.0153149 -0.00736763 -0.00531246 +405 -0.0118834 -0.00871203 -0.00347982 +406 -0.0159658 -0.00744242 -0.00664758 +407 -0.0164169 -0.00702082 -0.00468698 +408 -0.0545651 -0.0385387 0.0789983 +409 -0.0166079 -0.00770098 -0.000252079 +410 -0.059056 -0.0449726 0.0794392 +411 -0.0532897 -0.0406611 0.0791132 +412 -0.0190046 -0.006399 -0.00210104 +413 -0.00146476 -0.00776779 0.0414074 +414 -0.0019465 -0.012416 -0.000876483 +415 -0.0171508 -0.00660512 -0.00691101 +416 -0.00243228 -0.0121003 -0.00313079 +417 -0.0182484 -0.00648038 -0.00490205 +418 -0.0597382 -0.0486015 0.0799826 +419 -0.0191922 -0.00641772 -0.000883024 +420 -0.0621349 -0.0496481 0.0802114 +421 -0.0585338 -0.0285572 0.0768501 +422 -0.000786579 -0.00805603 0.03935 +423 -0.0710733 -0.0538381 0.0802389 +424 -0.000553302 -0.00748671 0.0434506 +425 -0.00170822 -0.00768591 0.0428922 $EndNodes $Elements -1654 -1 4 0 26 15 543 25 -2 4 0 227 308 190 188 -3 4 0 203 353 199 163 -4 4 0 331 305 504 150 -5 4 0 142 328 128 138 -6 4 0 490 439 18 571 -7 4 0 364 289 287 414 -8 4 0 296 336 304 298 -9 4 0 564 419 300 381 -10 4 0 398 569 373 591 -11 4 0 486 473 639 422 -12 4 0 338 89 566 489 -13 4 0 332 554 543 424 -14 4 0 80 67 71 302 -15 4 0 149 146 109 108 -16 4 0 98 90 375 342 -17 4 0 341 308 325 313 -18 4 0 147 314 126 116 -19 4 0 124 318 156 131 -20 4 0 245 322 206 308 -21 4 0 348 311 516 186 -22 4 0 135 150 319 151 -23 4 0 147 314 307 311 -24 4 0 464 588 301 528 -25 4 0 461 33 35 333 -26 4 0 196 192 373 314 -27 4 0 108 81 302 122 -28 4 0 366 258 227 357 -29 4 0 511 107 512 353 -30 4 0 146 170 354 172 -31 4 0 297 175 156 130 -32 4 0 130 297 175 308 -33 4 0 318 159 319 195 -34 4 0 154 123 122 342 -35 4 0 261 308 259 260 -36 4 0 132 142 128 318 -37 4 0 241 250 240 205 -38 4 0 226 227 248 324 -39 4 0 575 609 475 49 -40 4 0 375 91 123 90 -41 4 0 260 308 255 251 -42 4 0 517 612 63 482 -43 4 0 120 117 131 297 -44 4 0 318 131 297 156 -45 4 0 147 319 311 307 -46 4 0 131 120 297 130 -47 4 0 120 297 111 117 -48 4 0 308 174 206 360 -49 4 0 148 313 325 175 -50 4 0 148 313 175 174 -51 4 0 302 80 122 81 -52 4 0 107 353 511 110 -53 4 0 322 231 198 197 -54 4 0 61 58 564 57 -55 4 0 240 386 212 221 -56 4 0 121 297 143 117 -57 4 0 121 297 117 111 -58 4 0 307 235 314 182 -59 4 0 307 314 166 182 -60 4 0 417 308 175 316 -61 4 0 308 175 360 417 -62 4 0 601 9 458 1 -63 4 0 459 429 536 599 -64 4 0 211 242 206 308 -65 4 0 528 588 301 356 -66 4 0 316 297 308 175 -67 4 0 197 188 308 228 -68 4 0 231 308 228 197 -69 4 0 231 197 322 308 -70 4 0 188 197 308 361 -71 4 0 322 361 308 197 -72 4 0 259 308 256 255 -73 4 0 298 306 304 299 -74 4 0 302 342 146 122 -75 4 0 251 322 245 308 -76 4 0 298 306 299 236 -77 4 0 342 302 169 129 -78 4 0 157 319 331 150 -79 4 0 190 195 324 227 -80 4 0 146 342 354 154 -81 4 0 190 297 308 324 -82 4 0 236 254 306 299 -83 4 0 354 179 201 322 -84 4 0 308 297 188 361 -85 4 0 361 188 164 297 -86 4 0 195 165 190 318 -87 4 0 307 215 257 235 -88 4 0 194 235 215 307 -89 4 0 174 129 148 313 -90 4 0 169 313 129 174 -91 4 0 322 255 251 201 -92 4 0 366 265 308 258 -93 4 0 227 308 258 366 -94 4 0 258 308 249 265 -95 4 0 227 308 228 258 -96 4 0 448 192 373 196 -97 4 0 228 308 249 258 -98 4 0 296 298 514 336 -99 4 0 125 150 348 126 -100 4 0 125 160 348 150 -101 4 0 244 264 242 316 -102 4 0 264 316 244 271 -103 4 0 224 233 225 219 -104 4 0 107 353 163 199 -105 4 0 217 223 219 225 -106 4 0 308 174 313 206 -107 4 0 206 313 179 174 -108 4 0 241 230 212 233 -109 4 0 241 233 212 218 -110 4 0 267 278 312 273 -111 4 0 267 312 262 273 -112 4 0 206 179 322 245 -113 4 0 242 245 206 308 -114 4 0 144 319 159 157 -115 4 0 265 308 266 272 -116 4 0 218 219 392 233 -117 4 0 264 324 316 271 -118 4 0 324 308 264 316 -119 4 0 297 318 117 131 -120 4 0 128 117 318 124 -121 4 0 354 207 201 177 -122 4 0 207 177 354 184 -123 4 0 155 163 353 203 -124 4 0 131 297 156 130 -125 4 0 395 330 236 202 -126 4 0 164 142 318 190 -127 4 0 253 314 234 311 -128 4 0 307 314 147 166 -129 4 0 331 234 253 254 -130 4 0 306 236 298 331 -131 4 0 156 297 316 175 -132 4 0 324 319 318 316 -133 4 0 297 324 316 308 -134 4 0 373 314 102 125 -135 4 0 167 155 378 192 -136 4 0 278 324 272 269 -137 4 0 278 276 272 324 -138 4 0 319 159 157 336 -139 4 0 267 257 312 243 -140 4 0 307 215 243 257 -141 4 0 156 297 318 316 -142 4 0 207 354 170 184 -143 4 0 124 144 139 156 -144 4 0 267 312 250 243 -145 4 0 144 151 139 319 -146 4 0 318 316 319 144 -147 4 0 316 139 319 144 -148 4 0 139 144 316 156 -149 4 0 316 191 312 319 -150 4 0 316 191 317 156 -151 4 0 313 308 175 174 -152 4 0 253 234 331 311 -153 4 0 331 395 234 236 -154 4 0 272 265 308 366 -155 4 0 103 140 133 510 -156 4 0 235 199 246 314 -157 4 0 246 237 314 199 -158 4 0 144 151 319 157 -159 4 0 92 157 151 144 -160 4 0 92 159 157 144 -161 4 0 395 234 236 330 -162 4 0 395 330 202 348 -163 4 0 348 330 202 209 -164 4 0 324 312 316 271 -165 4 0 266 308 324 272 -166 4 0 324 366 308 227 -167 4 0 242 264 245 308 -168 4 0 272 266 269 324 -169 4 0 135 151 319 139 -170 4 0 40 35 28 29 -171 4 0 88 148 129 342 -172 4 0 325 342 148 88 -173 4 0 314 116 147 166 -174 4 0 77 353 320 94 -175 4 0 331 262 319 306 -176 4 0 319 317 139 316 -177 4 0 450 329 482 328 -178 4 0 183 307 147 166 -179 4 0 188 361 176 197 -180 4 0 169 179 313 174 -181 4 0 314 196 348 373 -182 4 0 102 84 116 353 -183 4 0 102 77 84 353 -184 4 0 191 147 319 317 -185 4 0 307 262 257 312 -186 4 0 307 257 246 235 -187 4 0 307 257 262 246 -188 4 0 128 318 144 124 -189 4 0 246 314 237 253 -190 4 0 314 203 237 234 -191 4 0 142 128 318 138 -192 4 0 253 237 234 314 -193 4 0 306 319 331 336 -194 4 0 307 314 235 246 -195 4 0 316 250 312 191 -196 4 0 450 403 349 329 -197 4 0 121 297 101 143 -198 4 0 382 164 101 297 -199 4 0 369 198 322 193 -200 4 0 264 266 324 269 -201 4 0 322 354 170 207 -202 4 0 322 170 193 207 -203 4 0 353 84 116 110 -204 4 0 70 302 68 83 -205 4 0 331 311 234 395 -206 4 0 323 493 282 301 -207 4 0 269 278 324 271 -208 4 0 278 312 324 271 -209 4 0 207 170 180 184 -210 4 0 207 170 193 180 -211 4 0 325 130 175 308 -212 4 0 146 354 170 154 -213 4 0 354 302 342 146 -214 4 0 161 348 510 181 -215 4 0 182 314 199 235 -216 4 0 322 354 369 170 -217 4 0 231 207 322 198 -218 4 0 313 322 375 341 -219 4 0 375 361 341 322 -220 4 0 322 207 193 198 -221 4 0 297 143 164 101 -222 4 0 221 213 240 232 -223 4 0 190 188 308 297 -224 4 0 341 361 375 382 -225 4 0 341 308 313 322 -226 4 0 134 158 184 354 -227 4 0 247 308 261 249 -228 4 0 263 308 260 251 -229 4 0 318 319 159 144 -230 4 0 309 262 306 319 -231 4 0 250 204 243 312 -232 4 0 448 192 167 378 -233 4 0 37 333 620 35 -234 4 0 37 33 333 35 -235 4 0 297 318 316 324 -236 4 0 167 448 378 153 -237 4 0 212 218 233 219 -238 4 0 88 325 342 494 -239 4 0 246 307 314 253 -240 4 0 307 253 246 262 -241 4 0 126 311 150 348 -242 4 0 388 611 336 514 -243 4 0 348 234 420 314 -244 4 0 236 254 331 306 -245 4 0 348 314 311 234 -246 4 0 211 308 360 417 -247 4 0 373 102 320 125 -248 4 0 316 250 191 438 -249 4 0 250 205 191 438 -250 4 0 254 262 306 309 -251 4 0 254 309 306 310 -252 4 0 299 254 306 310 -253 4 0 331 262 306 254 -254 4 0 292 294 295 293 -255 4 0 194 307 215 204 -256 4 0 304 306 384 299 -257 4 0 267 312 257 262 -258 4 0 353 192 378 155 -259 4 0 319 159 336 195 -260 4 0 353 192 373 378 -261 4 0 336 185 388 195 -262 4 0 312 250 271 267 -263 4 0 271 250 312 316 -264 4 0 261 249 308 265 -265 4 0 268 308 265 261 -266 4 0 247 308 249 228 -267 4 0 227 195 324 226 -268 4 0 366 324 415 337 -269 4 0 337 366 324 357 -270 4 0 190 195 318 324 -271 4 0 156 318 124 144 -272 4 0 263 266 308 264 -273 4 0 251 263 308 264 -274 4 0 197 198 322 369 -275 4 0 154 354 369 342 -276 4 0 188 308 228 227 -277 4 0 79 328 138 92 -278 4 0 316 317 139 156 -279 4 0 360 175 308 174 -280 4 0 255 251 308 322 -281 4 0 255 256 252 308 -282 4 0 247 228 231 308 -283 4 0 247 308 231 256 -284 4 0 134 149 394 354 -285 4 0 83 162 96 302 -286 4 0 161 373 140 348 -287 4 0 88 67 302 68 -288 4 0 302 97 88 68 -289 4 0 512 166 314 182 -290 4 0 420 192 314 234 -291 4 0 348 330 420 234 -292 4 0 192 314 234 203 -293 4 0 91 123 105 115 -294 4 0 394 70 302 81 -295 4 0 309 273 262 319 -296 4 0 319 262 312 273 -297 4 0 67 302 68 70 -298 4 0 271 278 312 267 -299 4 0 66 57 326 58 -300 4 0 188 136 176 361 -301 4 0 157 331 185 504 -302 4 0 136 361 188 164 -303 4 0 244 250 271 316 -304 4 0 71 302 67 70 -305 4 0 244 213 232 240 -306 4 0 81 302 71 70 -307 4 0 354 149 108 146 -308 4 0 314 237 203 199 -309 4 0 506 378 435 629 -310 4 0 244 438 316 213 -311 4 0 97 302 169 162 -312 4 0 244 316 438 250 -313 4 0 313 129 342 169 -314 4 0 382 113 101 164 -315 4 0 506 435 378 94 -316 4 0 91 123 85 105 -317 4 0 308 264 245 251 -318 4 0 242 264 308 316 -319 4 0 450 349 482 329 -320 4 0 314 373 348 125 -321 4 0 92 138 159 144 -322 4 0 395 311 234 348 -323 4 0 278 273 324 312 -324 4 0 373 378 435 320 -325 4 0 147 311 319 135 -326 4 0 126 311 135 150 -327 4 0 126 135 311 147 -328 4 0 314 348 311 126 -329 4 0 83 302 82 70 -330 4 0 378 435 629 373 -331 4 0 195 159 165 318 -332 4 0 316 312 324 319 -333 4 0 156 175 316 387 -334 4 0 336 298 514 331 -335 4 0 88 342 129 302 -336 4 0 319 307 331 311 -337 4 0 253 314 311 307 -338 4 0 311 331 253 307 -339 4 0 297 341 308 130 -340 4 0 314 348 126 125 -341 4 0 147 314 311 126 -342 4 0 61 339 99 338 -343 4 0 250 204 312 191 -344 4 0 305 185 508 331 -345 4 0 211 242 308 316 -346 4 0 211 308 417 316 -347 4 0 213 316 211 417 -348 4 0 214 215 230 204 -349 4 0 244 316 242 211 -350 4 0 244 211 213 316 -351 4 0 465 501 344 502 -352 4 0 108 354 302 394 -353 4 0 313 129 148 342 -354 4 0 337 324 415 248 -355 4 0 337 258 366 357 -356 4 0 121 101 297 111 -357 4 0 382 101 111 297 -358 4 0 157 159 185 336 -359 4 0 226 336 195 324 -360 4 0 307 262 331 253 -361 4 0 307 262 319 331 -362 4 0 331 254 253 262 -363 4 0 248 336 552 296 -364 4 0 319 324 195 336 -365 4 0 248 296 226 336 -366 4 0 324 248 336 552 -367 4 0 147 183 191 307 -368 4 0 282 281 276 323 -369 4 0 281 323 282 301 -370 4 0 109 119 105 122 -371 4 0 297 143 117 318 -372 4 0 109 122 105 80 -373 4 0 308 366 324 272 -374 4 0 297 318 324 190 -375 4 0 297 190 164 318 -376 4 0 214 204 230 212 -377 4 0 224 212 214 230 -378 4 0 297 143 318 164 -379 4 0 264 308 324 266 -380 4 0 264 269 324 271 -381 4 0 132 117 143 318 -382 4 0 130 297 341 120 -383 4 0 341 130 120 98 -384 4 0 277 343 356 279 -385 4 0 325 308 175 313 -386 4 0 109 81 108 122 -387 4 0 109 122 108 146 -388 4 0 348 234 395 330 -389 4 0 341 111 120 297 -390 4 0 341 100 98 120 -391 4 0 341 111 100 120 -392 4 0 226 336 324 248 -393 4 0 318 319 324 195 -394 4 0 275 270 324 309 -395 4 0 309 336 324 319 -396 4 0 552 270 336 324 -397 4 0 273 309 275 324 -398 4 0 403 328 329 450 -399 4 0 382 111 341 297 -400 4 0 361 322 308 341 -401 4 0 361 341 308 297 -402 4 0 342 85 73 90 -403 4 0 342 73 85 80 -404 4 0 323 324 366 276 -405 4 0 361 297 164 382 -406 4 0 96 82 83 302 -407 4 0 45 647 44 42 -408 4 0 179 354 201 177 -409 4 0 53 621 54 347 -410 4 0 117 124 131 318 -411 4 0 156 144 316 318 -412 4 0 369 198 193 141 -413 4 0 342 302 88 67 -414 4 0 67 80 342 302 -415 4 0 73 80 342 67 -416 4 0 342 73 67 76 -417 4 0 372 528 289 285 -418 4 0 285 528 289 287 -419 4 0 355 98 325 494 -420 4 0 122 119 105 123 -421 4 0 394 82 134 302 -422 4 0 494 88 76 342 -423 4 0 109 81 122 80 -424 4 0 447 580 503 505 -425 4 0 114 118 141 145 -426 4 0 311 150 319 135 -427 4 0 108 122 302 146 -428 4 0 204 307 183 194 -429 4 0 191 204 307 183 -430 4 0 382 101 100 111 -431 4 0 382 111 100 341 -432 4 0 318 159 138 144 -433 4 0 588 281 301 356 -434 4 0 87 61 77 57 -435 4 0 318 159 165 138 -436 4 0 7 12 2 486 -437 4 0 316 191 319 317 -438 4 0 208 196 449 445 -439 4 0 322 369 354 313 -440 4 0 354 158 177 162 -441 4 0 354 169 162 179 -442 4 0 313 369 354 342 -443 4 0 179 162 354 177 -444 4 0 130 98 341 355 -445 4 0 325 130 341 355 -446 4 0 337 357 324 248 -447 4 0 324 357 227 248 -448 4 0 588 281 464 301 -449 4 0 375 341 382 98 -450 4 0 454 75 61 155 -451 4 0 353 77 84 74 -452 4 0 331 305 185 504 -453 4 0 311 331 319 150 -454 4 0 378 339 167 106 -455 4 0 318 190 142 165 -456 4 0 138 142 165 318 -457 4 0 18 12 397 14 -458 4 0 298 514 331 513 -459 4 0 118 137 141 168 -460 4 0 298 331 236 395 -461 4 0 395 298 331 513 -462 4 0 93 157 92 159 -463 4 0 354 158 184 177 -464 4 0 151 157 92 93 -465 4 0 78 93 151 92 -466 4 0 378 448 629 153 -467 4 0 102 314 126 125 -468 4 0 126 116 314 102 -469 4 0 61 72 303 75 -470 4 0 39 461 350 553 -471 4 0 350 39 33 461 -472 4 0 311 331 513 395 -473 4 0 311 331 305 509 -474 4 0 353 102 314 116 -475 4 0 204 215 243 307 -476 4 0 106 153 167 378 -477 4 0 97 162 83 302 -478 4 0 107 353 199 512 -479 4 0 297 188 164 190 -480 4 0 147 319 139 135 -481 4 0 77 353 87 74 -482 4 0 353 203 199 314 -483 4 0 512 314 353 199 -484 4 0 37 38 29 35 -485 4 0 485 140 373 125 -486 4 0 398 448 373 196 -487 4 0 196 570 373 398 -488 4 0 324 248 552 415 -489 4 0 415 270 552 324 -490 4 0 52 57 594 564 -491 4 0 285 289 414 287 -492 4 0 438 250 205 240 -493 4 0 524 425 25 17 -494 4 0 29 25 524 425 -495 4 0 87 77 61 353 -496 4 0 93 92 138 159 -497 4 0 93 92 79 138 -498 4 0 203 192 353 155 -499 4 0 192 353 314 203 -500 4 0 88 302 129 97 -501 4 0 169 342 354 302 -502 4 0 147 319 317 139 -503 4 0 435 426 629 373 -504 4 0 197 168 369 176 -505 4 0 369 176 361 197 -506 4 0 157 151 319 150 -507 4 0 307 319 312 191 -508 4 0 312 307 191 204 -509 4 0 628 373 441 374 -510 4 0 513 331 311 509 -511 4 0 49 594 413 46 -512 4 0 303 163 87 61 -513 4 0 146 342 154 122 -514 4 0 274 366 415 337 -515 4 0 274 258 366 337 -516 4 0 87 57 74 66 -517 4 0 304 306 336 384 -518 4 0 204 250 205 191 -519 4 0 110 74 66 87 -520 4 0 163 87 61 353 -521 4 0 204 205 250 241 -522 4 0 387 438 213 316 -523 4 0 150 160 348 311 -524 4 0 313 369 342 375 -525 4 0 313 322 369 375 -526 4 0 97 129 169 302 -527 4 0 504 305 393 150 -528 4 0 181 348 500 187 -529 4 0 610 527 42 44 -530 4 0 44 527 42 620 -531 4 0 311 305 456 509 -532 4 0 311 509 456 516 -533 4 0 365 512 166 116 -534 4 0 116 512 166 314 -535 4 0 509 305 508 331 -536 4 0 322 369 193 170 -537 4 0 535 526 581 632 -538 4 0 182 314 512 199 -539 4 0 497 441 373 540 -540 4 0 37 42 46 527 -541 4 0 500 209 187 348 -542 4 0 312 257 307 243 -543 4 0 323 366 281 276 -544 4 0 348 420 209 196 -545 4 0 366 279 276 272 -546 4 0 202 500 186 348 -547 4 0 386 406 221 232 -548 4 0 64 526 62 489 -549 4 0 336 159 185 195 -550 4 0 404 24 559 335 -551 4 0 404 24 607 559 -552 4 0 384 336 552 270 -553 4 0 244 240 438 213 -554 4 0 244 438 240 250 -555 4 0 430 461 620 333 -556 4 0 461 333 35 620 -557 4 0 61 564 64 334 -558 4 0 381 437 47 413 -559 4 0 279 277 265 258 -560 4 0 279 277 258 274 -561 4 0 186 500 181 348 -562 4 0 140 510 348 160 -563 4 0 377 410 36 350 -564 4 0 202 330 236 209 -565 4 0 380 345 614 468 -566 4 0 99 339 378 106 -567 4 0 378 106 418 99 -568 4 0 378 448 373 629 -569 4 0 194 235 307 182 -570 4 0 194 307 166 182 -571 4 0 194 307 183 166 -572 4 0 353 373 320 378 -573 4 0 68 97 83 302 -574 4 0 347 496 604 476 -575 4 0 161 181 411 373 -576 4 0 570 374 400 368 -577 4 0 40 38 35 29 -578 4 0 364 289 327 528 -579 4 0 324 309 319 273 -580 4 0 353 378 320 94 -581 4 0 358 91 471 375 -582 4 0 134 394 302 354 -583 4 0 394 149 108 354 -584 4 0 172 354 146 149 -585 4 0 382 358 471 375 -586 4 0 101 382 90 358 -587 4 0 651 346 638 390 -588 4 0 382 90 100 101 -589 4 0 334 594 564 475 -590 4 0 369 361 375 322 -591 4 0 322 197 369 361 -592 4 0 342 325 98 494 -593 4 0 325 313 148 342 -594 4 0 342 325 375 98 -595 4 0 115 369 123 367 -596 4 0 342 98 76 494 -597 4 0 369 375 576 115 -598 4 0 353 512 116 314 -599 4 0 336 304 552 296 -600 4 0 336 306 304 298 -601 4 0 226 514 336 296 -602 4 0 108 302 81 394 -603 4 0 181 411 373 374 -604 4 0 26 440 571 383 -605 4 0 26 383 346 440 -606 4 0 211 360 308 206 -607 4 0 87 74 57 77 -608 4 0 358 113 101 382 -609 4 0 195 388 336 226 -610 4 0 241 233 218 238 -611 4 0 155 339 378 353 -612 4 0 345 79 468 476 -613 4 0 213 316 417 175 -614 4 0 387 316 213 175 -615 4 0 312 307 262 319 -616 4 0 435 485 426 373 -617 4 0 435 373 125 485 -618 4 0 299 310 306 384 -619 4 0 26 425 25 34 -620 4 0 118 114 367 434 -621 4 0 26 34 25 608 -622 4 0 223 222 529 392 -623 4 0 527 38 37 35 -624 4 0 37 527 46 38 -625 4 0 342 123 90 375 -626 4 0 342 123 85 90 -627 4 0 335 350 33 35 -628 4 0 350 461 33 35 -629 4 0 85 91 90 123 -630 4 0 259 247 308 261 -631 4 0 629 628 448 373 -632 4 0 633 142 328 128 -633 4 0 629 497 628 373 -634 4 0 303 61 87 72 -635 4 0 236 254 234 331 -636 4 0 341 98 325 355 -637 4 0 373 570 400 569 -638 4 0 398 570 373 569 -639 4 0 49 413 527 46 -640 4 0 49 46 527 457 -641 4 0 49 626 48 527 -642 4 0 241 204 243 250 -643 4 0 49 527 48 457 -644 4 0 392 218 233 238 -645 4 0 233 392 238 223 -646 4 0 178 198 197 141 -647 4 0 198 197 141 369 -648 4 0 364 290 287 528 -649 4 0 419 381 564 413 -650 4 0 92 78 79 59 -651 4 0 192 373 314 353 -652 4 0 386 406 238 423 -653 4 0 367 369 137 391 -654 4 0 437 413 419 606 -655 4 0 413 437 47 606 -656 4 0 239 252 322 255 -657 4 0 454 61 339 155 -658 4 0 34 466 425 29 -659 4 0 221 386 232 240 -660 4 0 60 64 489 484 -661 4 0 484 65 60 64 -662 4 0 212 386 218 221 -663 4 0 241 240 386 212 -664 4 0 241 205 240 212 -665 4 0 607 24 16 470 -666 4 0 620 42 37 527 -667 4 0 37 333 42 620 -668 4 0 95 87 66 69 -669 4 0 113 164 382 361 -670 4 0 410 30 432 21 -671 4 0 371 1 522 458 -672 4 0 527 47 43 40 -673 4 0 596 425 17 15 -674 4 0 393 456 160 311 -675 4 0 110 95 87 66 -676 4 0 160 311 456 516 -677 4 0 512 511 365 166 -678 4 0 353 511 365 512 -679 4 0 128 144 318 138 -680 4 0 341 130 325 308 -681 4 0 87 61 57 58 -682 4 0 419 58 564 72 -683 4 0 414 289 327 364 -684 4 0 320 378 435 94 -685 4 0 364 528 287 289 -686 4 0 212 221 205 240 -687 4 0 134 172 149 354 -688 4 0 134 172 354 184 -689 4 0 319 147 191 307 -690 4 0 589 641 606 436 -691 4 0 347 79 59 476 -692 4 0 345 79 476 92 -693 4 0 92 138 144 328 -694 4 0 86 92 144 328 -695 4 0 32 399 34 38 -696 4 0 306 309 336 310 -697 4 0 347 604 468 476 -698 4 0 347 468 79 476 -699 4 0 614 345 79 468 -700 4 0 384 310 336 270 -701 4 0 439 25 26 422 -702 4 0 196 192 314 420 -703 4 0 348 420 196 314 -704 4 0 132 143 142 318 -705 4 0 164 142 143 318 -706 4 0 386 406 423 221 -707 4 0 35 527 38 40 -708 4 0 158 354 96 162 -709 4 0 169 302 354 162 -710 4 0 334 475 564 363 -711 4 0 155 61 303 75 -712 4 0 94 353 378 339 -713 4 0 224 233 219 212 -714 4 0 214 215 204 194 -715 4 0 204 243 230 241 -716 4 0 204 230 212 241 -717 4 0 391 474 369 136 -718 4 0 286 588 528 356 -719 4 0 35 620 527 47 -720 4 0 136 474 361 565 -721 4 0 566 526 632 64 -722 4 0 490 439 11 14 -723 4 0 209 330 420 348 -724 4 0 35 527 40 47 -725 4 0 76 342 73 98 -726 4 0 77 353 102 320 -727 4 0 268 308 261 260 -728 4 0 167 155 339 378 -729 4 0 465 289 385 344 -730 4 0 255 308 260 259 -731 4 0 335 24 470 33 -732 4 0 559 24 470 335 -733 4 0 522 1 371 428 -734 4 0 347 53 496 54 -735 4 0 559 24 607 470 -736 4 0 476 347 496 54 -737 4 0 312 204 243 307 -738 4 0 230 215 243 204 -739 4 0 241 218 212 386 -740 4 0 241 238 218 386 -741 4 0 29 33 28 23 -742 4 0 23 335 559 470 -743 4 0 297 382 361 341 -744 4 0 336 611 185 331 -745 4 0 388 185 336 611 -746 4 0 353 373 102 320 -747 4 0 373 102 314 353 -748 4 0 44 527 606 610 -749 4 0 74 110 84 353 -750 4 0 610 527 606 413 -751 4 0 325 341 375 98 -752 4 0 369 136 137 391 -753 4 0 169 354 342 313 -754 4 0 274 366 279 281 -755 4 0 281 366 279 276 -756 4 0 322 313 206 308 -757 4 0 414 289 344 385 -758 4 0 114 546 367 434 -759 4 0 367 391 434 369 -760 4 0 155 163 303 61 -761 4 0 47 620 527 44 -762 4 0 384 304 552 336 -763 4 0 384 310 306 336 -764 4 0 99 378 339 94 -765 4 0 506 94 378 99 -766 4 0 365 353 512 116 -767 4 0 378 99 418 506 -768 4 0 478 23 559 470 -769 4 0 328 86 633 128 -770 4 0 265 308 268 266 -771 4 0 268 308 263 266 -772 4 0 564 419 436 58 -773 4 0 460 75 564 65 -774 4 0 339 61 99 94 -775 4 0 518 564 65 460 -776 4 0 643 216 229 392 -777 4 0 342 88 76 67 -778 4 0 26 422 11 439 -779 4 0 26 440 439 571 -780 4 0 411 161 373 441 -781 4 0 442 467 412 10 -782 4 0 350 377 24 33 -783 4 0 225 409 217 223 -784 4 0 410 377 24 350 -785 4 0 24 350 33 335 -786 4 0 371 522 523 458 -787 4 0 278 324 273 276 -788 4 0 273 324 275 276 -789 4 0 170 354 172 184 -790 4 0 169 179 354 313 -791 4 0 607 16 24 580 -792 4 0 367 391 137 118 -793 4 0 35 620 37 527 -794 4 0 548 33 461 333 -795 4 0 414 385 344 294 -796 4 0 414 289 288 344 -797 4 0 65 64 484 454 -798 4 0 93 79 78 401 -799 4 0 375 382 358 90 -800 4 0 413 575 564 594 -801 4 0 187 181 368 189 -802 4 0 358 375 90 91 -803 4 0 275 276 324 323 -804 4 0 493 270 323 275 -805 4 0 532 323 276 275 -806 4 0 324 270 323 415 -807 4 0 275 323 324 270 -808 4 0 157 331 319 336 -809 4 0 454 339 61 338 -810 4 0 527 47 507 43 -811 4 0 74 87 110 353 -812 4 0 61 353 339 155 -813 4 0 444 445 618 379 -814 4 0 173 133 160 510 -815 4 0 352 604 468 347 -816 4 0 161 181 373 348 -817 4 0 23 335 470 33 -818 4 0 181 187 374 373 -819 4 0 29 35 28 33 -820 4 0 348 187 181 373 -821 4 0 562 10 412 447 -822 4 0 10 580 503 447 -823 4 0 399 351 34 38 -824 4 0 515 592 399 32 -825 4 0 434 112 637 474 -826 4 0 134 82 96 302 -827 4 0 224 230 233 212 -828 4 0 134 302 96 354 -829 4 0 302 354 162 96 -830 4 0 376 64 60 564 -831 4 0 606 640 589 45 -832 4 0 369 137 168 141 -833 4 0 113 361 583 136 -834 4 0 197 369 168 141 -835 4 0 12 7 4 14 -836 4 0 510 181 173 171 -837 4 0 61 339 353 94 -838 4 0 369 154 170 354 -839 4 0 404 607 24 21 -840 4 0 411 374 578 441 -841 4 0 500 186 189 480 -842 4 0 535 526 632 566 -843 4 0 628 441 497 483 -844 4 0 478 23 28 559 -845 4 0 28 335 559 23 -846 4 0 93 92 78 79 -847 4 0 554 473 631 453 -848 4 0 198 178 193 141 -849 4 0 187 444 209 500 -850 4 0 226 388 336 514 -851 4 0 287 464 285 528 -852 4 0 528 301 285 372 -853 4 0 497 629 426 373 -854 4 0 394 302 70 82 -855 4 0 64 61 454 75 -856 4 0 444 587 618 445 -857 4 0 467 458 371 523 -858 4 0 371 523 520 467 -859 4 0 371 520 551 467 -860 4 0 385 465 294 292 -861 4 0 468 604 345 476 -862 4 0 584 517 63 345 -863 4 0 176 136 137 369 -864 4 0 439 440 18 571 -865 4 0 490 26 11 439 -866 4 0 324 366 227 357 -867 4 0 606 413 419 436 -868 4 0 527 48 477 507 -869 4 0 527 477 48 457 -870 4 0 527 492 48 507 -871 4 0 527 626 48 492 -872 4 0 134 354 96 158 -873 4 0 62 64 489 60 -874 4 0 52 57 370 594 -875 4 0 326 52 55 564 -876 4 0 524 425 17 19 -877 4 0 373 441 161 540 -878 4 0 373 161 140 540 -879 4 0 66 326 55 58 -880 4 0 58 326 55 564 -881 4 0 310 309 336 270 -882 4 0 324 270 336 309 -883 4 0 157 336 185 331 -884 4 0 181 411 171 161 -885 4 0 640 589 641 606 -886 4 0 537 557 621 54 -887 4 0 282 285 340 288 -888 4 0 372 285 288 340 -889 4 0 382 100 98 341 -890 4 0 502 294 465 292 -891 4 0 43 34 351 38 -892 4 0 221 240 213 205 -893 4 0 438 240 205 213 -894 4 0 425 466 524 29 -895 4 0 354 302 146 108 -896 4 0 435 426 506 629 -897 4 0 497 506 426 629 -898 4 0 187 181 374 368 -899 4 0 517 79 614 345 -900 4 0 342 90 73 98 -901 4 0 180 141 178 152 -902 4 0 178 152 141 168 -903 4 0 193 180 141 178 -904 4 0 140 161 348 510 -905 4 0 9 442 13 362 -906 4 0 442 9 13 467 -907 4 0 408 505 503 580 -908 4 0 607 580 408 16 -909 4 0 327 289 414 385 -910 4 0 372 284 283 340 -911 4 0 359 89 526 566 -912 4 0 607 539 478 470 -913 4 0 140 373 125 348 -914 4 0 328 86 92 517 -915 4 0 527 47 44 606 -916 4 0 155 163 61 353 -917 4 0 367 391 118 434 -918 4 0 338 64 61 454 -919 4 0 64 338 484 454 -920 4 0 359 89 566 338 -921 4 0 489 526 566 64 -922 4 0 448 192 378 373 -923 4 0 350 39 377 33 -924 4 0 369 137 176 168 -925 4 0 377 350 553 39 -926 4 0 325 313 375 341 -927 4 0 340 288 625 282 -928 4 0 342 313 375 325 -929 4 0 524 466 19 20 -930 4 0 425 466 19 524 -931 4 0 348 395 186 202 -932 4 0 610 44 42 45 -933 4 0 409 433 217 223 -934 4 0 217 433 529 223 -935 4 0 582 375 471 115 -936 4 0 434 474 637 369 -937 4 0 382 375 471 582 -938 4 0 98 90 382 375 -939 4 0 382 100 90 98 -940 4 0 123 105 122 85 -941 4 0 122 85 105 80 -942 4 0 43 40 34 38 -943 4 0 369 474 361 136 -944 4 0 469 452 564 460 -945 4 0 46 41 527 457 -946 4 0 415 366 274 323 -947 4 0 191 387 316 438 -948 4 0 191 387 156 316 -949 4 0 434 391 474 369 -950 4 0 502 294 344 465 -951 4 0 502 294 292 293 -952 4 0 476 59 92 79 -953 4 0 306 309 319 336 -954 4 0 528 301 464 285 -955 4 0 301 282 464 285 -956 4 0 208 449 210 379 -957 4 0 210 379 220 208 -958 4 0 551 520 10 467 -959 4 0 359 89 339 106 -960 4 0 110 353 365 116 -961 4 0 353 511 110 365 -962 4 0 118 141 145 152 -963 4 0 34 28 466 29 -964 4 0 621 347 59 54 -965 4 0 59 621 79 347 -966 4 0 342 80 122 302 -967 4 0 369 123 154 342 -968 4 0 123 85 122 342 -969 4 0 122 342 85 80 -970 4 0 450 349 612 482 -971 4 0 564 55 436 413 -972 4 0 40 38 29 34 -973 4 0 606 641 413 436 -974 4 0 28 35 335 33 -975 4 0 34 25 32 29 -976 4 0 487 548 495 479 -977 4 0 187 209 196 348 -978 4 0 461 479 430 495 -979 4 0 311 513 509 186 -980 4 0 395 311 348 186 -981 4 0 187 196 209 444 -982 4 0 485 540 426 373 -983 4 0 21 580 24 447 -984 4 0 412 447 21 562 -985 4 0 412 562 21 446 -986 4 0 447 580 24 10 -987 4 0 46 527 610 413 -988 4 0 229 392 216 222 -989 4 0 323 281 366 274 -990 4 0 281 301 274 323 -991 4 0 599 625 429 282 -992 4 0 608 25 32 34 -993 4 0 372 288 284 340 -994 4 0 227 324 190 308 -995 4 0 373 196 348 187 -996 4 0 425 25 34 29 -997 4 0 628 448 373 591 -998 4 0 591 448 373 398 -999 4 0 477 43 41 527 -1000 4 0 80 71 81 302 -1001 4 0 457 477 41 527 -1002 4 0 647 487 430 479 -1003 4 0 628 373 497 441 -1004 4 0 578 628 441 374 -1005 4 0 410 24 335 350 -1006 4 0 393 311 160 150 -1007 4 0 367 118 137 141 -1008 4 0 343 488 356 396 -1009 4 0 87 72 61 58 -1010 4 0 488 588 356 396 -1011 4 0 476 54 59 347 -1012 4 0 94 353 61 77 -1013 4 0 110 353 87 107 -1014 4 0 251 245 322 201 -1015 4 0 245 179 322 201 -1016 4 0 11 422 486 14 -1017 4 0 287 588 464 528 -1018 4 0 10 467 412 551 -1019 4 0 13 551 412 467 -1020 4 0 371 467 551 13 -1021 4 0 551 10 8 412 -1022 4 0 113 164 361 136 -1023 4 0 425 25 15 26 -1024 4 0 140 348 125 160 -1025 4 0 451 588 528 286 -1026 4 0 180 152 145 141 -1027 4 0 607 16 539 470 -1028 4 0 374 570 400 373 -1029 4 0 373 374 556 400 -1030 4 0 374 373 556 628 -1031 4 0 441 628 578 483 -1032 4 0 497 642 418 629 -1033 4 0 167 89 106 339 -1034 4 0 346 440 390 521 -1035 4 0 369 123 342 375 -1036 4 0 583 382 498 361 -1037 4 0 564 75 72 61 -1038 4 0 564 61 64 75 -1039 4 0 345 517 79 92 -1040 4 0 533 529 223 222 -1041 4 0 498 582 576 375 -1042 4 0 575 376 609 49 -1043 4 0 412 10 8 447 -1044 4 0 561 472 549 468 -1045 4 0 239 322 252 231 -1046 4 0 397 12 4 14 -1047 4 0 367 369 434 576 -1048 4 0 206 313 322 179 -1049 4 0 322 179 313 354 -1050 4 0 12 2 4 7 -1051 4 0 346 638 26 608 -1052 4 0 66 87 57 58 -1053 4 0 72 58 564 61 -1054 4 0 322 207 231 239 -1055 4 0 201 354 322 207 -1056 4 0 239 255 322 201 -1057 4 0 533 402 529 222 -1058 4 0 60 518 564 65 -1059 4 0 11 486 12 14 -1060 4 0 118 168 141 152 -1061 4 0 60 376 564 518 -1062 4 0 576 375 582 115 -1063 4 0 515 34 399 351 -1064 4 0 334 564 64 363 -1065 4 0 311 331 150 305 -1066 4 0 473 538 597 519 -1067 4 0 564 594 575 475 -1068 4 0 36 30 432 410 -1069 4 0 343 396 356 279 -1070 4 0 281 279 356 396 -1071 4 0 281 274 301 356 -1072 4 0 486 7 14 422 -1073 4 0 642 153 585 629 -1074 4 0 153 642 628 629 -1075 4 0 503 447 8 10 -1076 4 0 461 430 620 416 -1077 4 0 493 270 275 280 -1078 4 0 275 493 532 323 -1079 4 0 532 493 282 323 -1080 4 0 461 495 430 416 -1081 4 0 493 532 280 275 -1082 4 0 389 381 47 413 -1083 4 0 49 413 626 527 -1084 4 0 500 189 186 181 -1085 4 0 498 382 582 375 -1086 4 0 410 30 24 377 -1087 4 0 30 410 36 377 -1088 4 0 366 265 279 272 -1089 4 0 608 34 32 31 -1090 4 0 527 40 43 38 -1091 4 0 46 527 41 38 -1092 4 0 43 527 38 41 -1093 4 0 597 639 7 486 -1094 4 0 306 298 336 331 -1095 4 0 11 26 15 543 -1096 4 0 554 11 15 543 -1097 4 0 416 430 620 649 -1098 4 0 291 290 364 327 -1099 4 0 637 498 375 361 -1100 4 0 39 548 33 461 -1101 4 0 422 634 25 543 -1102 4 0 583 582 382 113 -1103 4 0 367 114 118 141 -1104 4 0 473 422 11 554 -1105 4 0 178 197 168 141 -1106 4 0 375 369 123 115 -1107 4 0 91 123 115 375 -1108 4 0 377 350 36 553 -1109 4 0 173 181 516 186 -1110 4 0 110 95 107 87 -1111 4 0 353 107 163 87 -1112 4 0 46 527 42 610 -1113 4 0 500 209 348 202 -1114 4 0 334 61 564 57 -1115 4 0 510 103 140 161 -1116 4 0 160 104 140 133 -1117 4 0 486 11 473 422 -1118 4 0 336 611 331 514 -1119 4 0 576 434 637 369 -1120 4 0 29 466 524 20 -1121 4 0 366 279 265 258 -1122 4 0 366 279 258 274 -1123 4 0 89 484 338 454 -1124 4 0 462 621 568 534 -1125 4 0 133 104 140 103 -1126 4 0 462 534 568 531 -1127 4 0 521 440 390 563 -1128 4 0 383 440 563 390 -1129 4 0 141 154 170 369 -1130 4 0 141 193 369 170 -1131 4 0 173 181 510 516 -1132 4 0 348 510 181 516 -1133 4 0 324 366 276 272 -1134 4 0 415 324 366 323 -1135 4 0 477 527 507 43 -1136 4 0 26 25 440 346 -1137 4 0 430 333 42 479 -1138 4 0 460 452 564 75 -1139 4 0 31 515 32 592 -1140 4 0 181 189 187 500 -1141 4 0 389 527 413 47 -1142 4 0 413 389 626 527 -1143 4 0 376 590 49 575 -1144 4 0 331 611 185 508 -1145 4 0 223 392 407 219 -1146 4 0 223 233 392 219 -1147 4 0 538 648 597 519 -1148 4 0 597 648 538 486 -1149 4 0 557 537 568 499 -1150 4 0 553 39 461 416 -1151 4 0 290 528 451 287 -1152 4 0 554 453 332 560 -1153 4 0 601 467 458 9 -1154 4 0 623 525 535 566 -1155 4 0 566 525 535 526 -1156 4 0 378 106 431 418 -1157 4 0 53 496 352 347 -1158 4 0 564 300 419 72 -1159 4 0 564 452 300 72 -1160 4 0 2 6 7 486 -1161 4 0 421 451 528 286 -1162 4 0 451 528 588 287 -1163 4 0 409 595 433 491 -1164 4 0 79 621 78 401 -1165 4 0 401 621 78 555 -1166 4 0 78 537 555 621 -1167 4 0 599 340 282 301 -1168 4 0 493 599 282 301 -1169 4 0 430 620 42 333 -1170 4 0 565 498 112 637 -1171 4 0 583 498 112 565 -1172 4 0 599 429 536 282 -1173 4 0 599 625 459 429 -1174 4 0 543 554 332 15 -1175 4 0 474 112 637 565 -1176 4 0 364 290 528 327 -1177 4 0 548 461 479 333 -1178 4 0 461 333 430 479 -1179 4 0 383 390 346 440 -1180 4 0 65 60 64 564 -1181 4 0 65 64 75 564 -1182 4 0 383 638 346 390 -1183 4 0 380 468 614 549 -1184 4 0 532 282 276 323 -1185 4 0 157 331 504 150 -1186 4 0 89 454 338 339 -1187 4 0 167 454 89 339 -1188 4 0 8 5 10 551 -1189 4 0 5 520 10 551 -1190 4 0 492 626 545 389 -1191 4 0 389 626 545 469 -1192 4 0 37 33 35 29 -1193 4 0 615 568 499 557 -1194 4 0 500 186 480 202 -1195 4 0 54 56 53 496 -1196 4 0 294 295 291 385 -1197 4 0 295 291 385 327 -1198 4 0 295 294 292 385 -1199 4 0 474 637 361 565 -1200 4 0 497 373 426 540 -1201 4 0 40 29 28 34 -1202 4 0 535 525 581 526 -1203 4 0 328 92 79 517 -1204 4 0 496 56 352 604 -1205 4 0 459 536 646 493 -1206 4 0 459 429 624 536 -1207 4 0 493 536 280 532 -1208 4 0 25 346 26 608 -1209 4 0 351 399 41 38 -1210 4 0 43 41 38 351 -1211 4 0 527 413 47 606 -1212 4 0 308 252 322 231 -1213 4 0 308 255 322 252 -1214 4 0 256 231 252 308 -1215 4 0 256 308 259 247 -1216 4 0 21 30 24 410 -1217 4 0 21 30 562 24 -1218 4 0 315 621 555 568 -1219 4 0 217 219 223 407 -1220 4 0 225 223 219 233 -1221 4 0 407 217 529 223 -1222 4 0 381 452 300 564 -1223 4 0 595 635 433 491 -1224 4 0 414 385 291 327 -1225 4 0 416 39 461 495 -1226 4 0 461 39 548 495 -1227 4 0 461 548 479 495 -1228 4 0 301 282 281 464 -1229 4 0 301 282 285 340 -1230 4 0 315 621 568 462 -1231 4 0 372 289 288 285 -1232 4 0 289 288 285 414 -1233 4 0 431 153 106 378 -1234 4 0 55 641 589 436 -1235 4 0 651 572 638 608 -1236 4 0 564 452 72 75 -1237 4 0 573 534 567 613 -1238 4 0 567 645 600 534 -1239 4 0 499 568 577 537 -1240 4 0 414 327 291 364 -1241 4 0 561 549 614 468 -1242 4 0 338 489 566 64 -1243 4 0 89 484 489 338 -1244 4 0 385 294 465 344 -1245 4 0 445 196 444 209 -1246 4 0 209 550 444 427 -1247 4 0 490 14 11 12 -1248 4 0 490 18 14 12 -1249 4 0 597 648 486 7 -1250 4 0 486 639 7 422 -1251 4 0 639 473 597 631 -1252 4 0 529 491 616 533 -1253 4 0 435 320 125 373 -1254 4 0 616 491 529 541 -1255 4 0 497 628 642 629 -1256 4 0 46 52 413 602 -1257 4 0 623 359 566 338 -1258 4 0 497 506 629 418 -1259 4 0 99 359 623 338 -1260 4 0 65 64 454 75 -1261 4 0 209 617 550 427 -1262 4 0 86 328 144 128 -1263 4 0 570 187 374 368 -1264 4 0 403 86 633 328 -1265 4 0 601 522 458 523 -1266 4 0 604 352 472 56 -1267 4 0 273 312 319 324 -1268 4 0 380 614 63 549 -1269 4 0 561 549 63 614 -1270 4 0 623 525 566 359 -1271 4 0 359 525 566 526 -1272 4 0 566 89 526 489 -1273 4 0 113 382 358 471 -1274 4 0 582 471 382 113 -1275 4 0 523 467 458 601 -1276 4 0 268 308 260 263 -1277 4 0 374 628 556 578 -1278 4 0 498 582 382 583 -1279 4 0 586 645 534 557 -1280 4 0 361 176 369 136 -1281 4 0 277 356 274 279 -1282 4 0 576 637 375 369 -1283 4 0 637 375 369 361 -1284 4 0 373 556 569 400 -1285 4 0 556 373 569 628 -1286 4 0 447 562 24 21 -1287 4 0 47 492 527 507 -1288 4 0 495 39 548 487 -1289 4 0 572 608 651 650 -1290 4 0 541 619 542 574 -1291 4 0 27 562 21 30 -1292 4 0 21 446 562 27 -1293 4 0 517 328 614 79 -1294 4 0 545 530 622 575 -1295 4 0 522 371 523 558 -1296 4 0 523 371 520 558 -1297 4 0 471 91 115 375 -1298 4 0 578 127 628 556 -1299 4 0 127 153 628 556 -1300 4 0 641 413 55 52 -1301 4 0 55 564 436 58 -1302 4 0 564 334 57 594 -1303 4 0 55 641 436 413 -1304 4 0 575 413 49 594 -1305 4 0 15 17 596 560 -1306 4 0 521 440 563 571 -1307 4 0 632 581 62 526 -1308 4 0 285 372 301 340 -1309 4 0 290 451 528 421 -1310 4 0 326 57 564 58 -1311 4 0 205 212 241 204 -1312 4 0 564 452 469 381 -1313 4 0 239 322 207 201 -1314 4 0 223 392 529 407 -1315 4 0 381 564 413 469 -1316 4 0 395 513 311 186 -1317 4 0 389 469 413 626 -1318 4 0 136 361 583 565 -1319 4 0 586 645 567 534 -1320 4 0 32 25 608 346 -1321 4 0 369 367 137 141 -1322 4 0 469 575 545 622 -1323 4 0 593 543 634 422 -1324 4 0 373 569 628 591 -1325 4 0 556 569 153 628 -1326 4 0 196 187 373 570 -1327 4 0 167 454 339 155 -1328 4 0 590 626 575 530 -1329 4 0 536 493 282 532 -1330 4 0 133 140 160 510 -1331 4 0 376 363 64 564 -1332 4 0 209 427 444 587 -1333 4 0 571 440 563 383 -1334 4 0 498 375 576 637 -1335 4 0 531 534 568 579 -1336 4 0 534 568 557 621 -1337 4 0 218 392 643 238 -1338 4 0 568 555 577 537 -1339 4 0 475 609 363 49 -1340 4 0 363 609 475 564 -1341 4 0 393 311 150 305 -1342 4 0 19 425 17 596 -1343 4 0 596 17 603 560 -1344 4 0 522 428 371 558 -1345 4 0 127 628 497 483 -1346 4 0 492 48 545 626 -1347 4 0 21 607 24 580 -1348 4 0 132 117 318 128 -1349 4 0 633 132 547 142 -1350 4 0 437 381 419 413 -1351 4 0 419 381 437 300 -1352 4 0 173 181 186 171 -1353 4 0 405 613 600 534 -1354 4 0 632 526 62 64 -1355 4 0 489 484 64 338 -1356 4 0 600 54 53 621 -1357 4 0 29 20 28 466 -1358 4 0 20 28 466 443 -1359 4 0 49 48 626 590 -1360 4 0 63 345 614 380 -1361 4 0 584 345 63 380 -1362 4 0 470 607 559 478 -1363 4 0 28 23 22 20 -1364 4 0 478 23 22 28 -1365 4 0 473 422 554 631 -1366 4 0 555 537 568 621 -1367 4 0 18 490 14 439 -1368 4 0 596 17 19 603 -1369 4 0 571 440 18 521 -1370 4 0 542 491 616 541 -1371 4 0 534 568 615 557 -1372 4 0 534 568 579 615 -1373 4 0 392 222 229 238 -1374 4 0 626 48 530 590 -1375 4 0 238 406 229 423 -1376 4 0 629 585 642 418 -1377 4 0 418 506 629 378 -1378 4 0 378 431 629 418 -1379 4 0 153 448 628 591 -1380 4 0 591 569 628 153 -1381 4 0 550 209 500 627 -1382 4 0 515 31 32 34 -1383 4 0 209 627 550 617 -1384 4 0 569 556 153 400 -1385 4 0 645 621 557 54 -1386 4 0 529 491 533 223 -1387 4 0 601 1 458 522 -1388 4 0 522 601 1 3 -1389 4 0 359 339 99 106 -1390 4 0 338 99 359 339 -1391 4 0 49 575 626 413 -1392 4 0 473 597 631 453 -1393 4 0 605 564 518 460 -1394 4 0 222 392 402 529 -1395 4 0 113 382 583 361 -1396 4 0 33 335 28 23 -1397 4 0 370 52 594 46 -1398 4 0 408 505 580 607 -1399 4 0 413 640 602 641 -1400 4 0 630 376 564 609 -1401 4 0 49 376 609 363 -1402 4 0 363 376 609 564 -1403 4 0 393 456 311 305 -1404 4 0 218 221 386 643 -1405 4 0 643 386 423 221 -1406 4 0 141 123 369 367 -1407 4 0 498 382 375 361 -1408 4 0 474 637 369 361 -1409 4 0 558 371 520 551 -1410 4 0 558 428 371 551 -1411 4 0 374 441 411 373 -1412 4 0 422 25 26 543 -1413 4 0 25 17 15 634 -1414 4 0 606 44 610 45 -1415 4 0 367 115 369 576 -1416 4 0 367 576 546 115 -1417 4 0 636 573 567 613 -1418 4 0 615 51 579 573 -1419 4 0 50 51 615 636 -1420 4 0 55 413 564 52 -1421 4 0 594 52 413 46 -1422 4 0 564 326 52 57 -1423 4 0 367 434 546 576 -1424 4 0 208 449 379 445 -1425 4 0 379 445 544 208 -1426 4 0 26 439 440 25 -1427 4 0 622 575 605 469 -1428 4 0 636 586 567 573 -1429 4 0 573 586 567 534 -1430 4 0 599 625 340 283 -1431 4 0 605 630 518 564 -1432 4 0 171 510 181 161 -1433 4 0 32 29 38 34 -1434 4 0 402 216 392 222 -1435 4 0 223 222 392 238 -1436 4 0 389 492 527 47 -1437 4 0 389 492 626 527 -1438 4 0 577 555 78 537 -1439 4 0 315 621 401 555 -1440 4 0 15 598 634 560 -1441 4 0 634 17 15 560 -1442 4 0 481 142 328 633 -1443 4 0 128 328 144 138 -1444 4 0 413 610 640 606 -1445 4 0 640 606 610 45 -1446 4 0 379 449 444 445 -1447 4 0 187 449 196 444 -1448 4 0 445 449 444 196 -1449 4 0 605 564 460 469 -1450 4 0 575 564 605 469 -1451 4 0 541 200 619 574 -1452 4 0 564 436 419 413 -1453 4 0 517 482 63 614 -1454 4 0 154 369 141 123 -1455 4 0 583 498 565 361 -1456 4 0 498 361 637 565 -1457 4 0 622 530 630 575 -1458 4 0 21 30 432 27 -1459 4 0 173 510 160 516 -1460 4 0 311 160 348 516 -1461 4 0 485 140 540 373 -1462 4 0 21 505 580 447 -1463 4 0 490 26 439 571 -1464 4 0 379 544 220 208 -1465 4 0 348 516 181 186 -1466 4 0 186 509 311 516 -1467 4 0 209 202 627 617 -1468 4 0 433 635 529 491 -1469 4 0 430 42 620 44 -1470 4 0 649 430 620 44 -1471 4 0 529 635 541 491 -1472 4 0 404 24 410 21 -1473 4 0 404 410 24 335 -1474 4 0 89 338 359 339 -1475 4 0 450 328 482 517 -1476 4 0 517 328 482 614 -1477 4 0 78 59 537 621 -1478 4 0 588 396 281 356 -1479 4 0 286 488 588 356 -1480 4 0 424 543 593 422 -1481 4 0 463 607 408 16 -1482 4 0 389 381 413 469 -1483 4 0 413 469 575 626 -1484 4 0 626 469 575 545 -1485 4 0 554 11 543 422 -1486 4 0 459 624 646 536 -1487 4 0 332 543 593 424 -1488 4 0 631 554 424 422 -1489 4 0 153 431 629 378 -1490 4 0 545 48 530 626 -1491 4 0 626 530 545 575 -1492 4 0 59 621 78 79 -1493 4 0 160 510 348 516 -1494 4 0 626 590 575 49 -1495 4 0 576 434 112 637 -1496 4 0 498 576 112 637 -1497 4 0 346 651 638 608 -1498 4 0 13 442 412 362 -1499 4 0 13 467 412 442 -1500 4 0 132 142 633 128 -1501 4 0 184 180 172 170 -1502 4 0 631 332 424 554 -1503 4 0 531 573 579 51 -1504 4 0 521 571 563 18 -1505 4 0 599 625 282 340 -1506 4 0 622 630 605 575 -1507 4 0 562 442 362 412 -1508 4 0 193 180 170 141 -1509 4 0 50 644 636 615 -1510 4 0 443 466 20 19 -1511 4 0 616 542 533 491 -1512 4 0 413 594 564 52 -1513 4 0 621 53 600 405 -1514 4 0 362 562 446 27 -1515 4 0 403 547 321 481 -1516 4 0 403 481 321 329 -1517 4 0 562 442 412 10 -1518 4 0 493 459 536 599 -1519 4 0 493 599 536 282 -1520 4 0 450 86 328 517 -1521 4 0 413 602 610 46 -1522 4 0 29 23 28 20 -1523 4 0 223 409 433 491 -1524 4 0 621 59 537 54 -1525 4 0 13 362 412 446 -1526 4 0 439 422 11 14 -1527 4 0 639 473 631 422 -1528 4 0 450 612 584 517 -1529 4 0 450 482 612 517 -1530 4 0 413 641 602 52 -1531 4 0 447 10 24 562 -1532 4 0 531 573 534 579 -1533 4 0 380 345 468 604 -1534 4 0 587 427 444 618 -1535 4 0 613 567 600 534 -1536 4 0 218 386 238 643 -1537 4 0 643 238 423 386 -1538 4 0 347 496 352 604 -1539 4 0 63 345 517 614 -1540 4 0 584 612 63 517 -1541 4 0 629 431 585 418 -1542 4 0 153 431 585 629 -1543 4 0 463 539 478 607 -1544 4 0 463 539 607 16 -1545 4 0 564 609 475 575 -1546 4 0 533 529 402 616 -1547 4 0 376 630 564 518 -1548 4 0 645 54 600 621 -1549 4 0 380 468 472 604 -1550 4 0 604 468 472 352 -1551 4 0 380 468 549 472 -1552 4 0 570 187 373 374 -1553 4 0 606 413 641 640 -1554 4 0 413 610 602 640 -1555 4 0 458 467 13 9 -1556 4 0 467 458 13 371 -1557 4 0 11 422 26 543 -1558 4 0 25 17 425 15 -1559 4 0 646 536 280 493 -1560 4 0 646 624 280 536 -1561 4 0 647 430 44 42 -1562 4 0 618 544 220 379 -1563 4 0 648 6 486 7 -1564 4 0 648 6 538 486 -1565 4 0 403 633 547 481 -1566 4 0 403 328 633 481 -1567 4 0 483 127 628 578 -1568 4 0 486 7 12 14 -1569 4 0 53 56 352 496 -1570 4 0 340 288 284 625 -1571 4 0 283 340 284 625 -1572 4 0 561 352 472 468 -1573 4 0 86 450 328 403 -1574 4 0 329 403 481 328 -1575 4 0 455 288 284 372 -1576 4 0 501 288 284 455 -1577 4 0 376 530 575 630 -1578 4 0 630 376 609 575 -1579 4 0 430 479 42 647 -1580 4 0 621 405 600 534 -1581 4 0 22 28 20 443 -1582 4 0 643 238 229 423 -1583 4 0 481 633 547 142 -1584 4 0 558 428 551 652 -1585 4 0 509 611 331 508 -1586 4 0 513 514 331 611 -1587 4 0 509 513 331 611 -1588 4 0 601 9 1 3 -1589 4 0 289 288 344 501 -1590 4 0 515 32 399 34 -1591 4 0 403 321 349 329 -1592 4 0 392 229 643 238 -1593 4 0 618 445 544 379 -1594 4 0 618 587 544 445 -1595 4 0 531 613 534 573 -1596 4 0 629 153 448 628 -1597 4 0 538 473 597 486 -1598 4 0 597 473 639 486 -1599 4 0 650 31 608 346 -1600 4 0 607 505 580 21 -1601 4 0 288 455 289 372 -1602 4 0 289 455 288 501 -1603 4 0 376 530 590 575 -1604 4 0 49 594 475 575 -1605 4 0 356 279 281 274 -1606 4 0 550 209 444 500 -1607 4 0 362 412 446 562 -1608 4 0 529 433 491 223 -1609 4 0 455 372 284 283 -1610 4 0 465 501 455 289 -1611 4 0 465 289 344 501 -1612 4 0 445 209 444 587 -1613 4 0 153 642 127 628 -1614 4 0 294 385 291 414 -1615 4 0 283 625 459 599 -1616 4 0 613 531 51 573 -1617 4 0 636 573 613 51 -1618 4 0 557 621 568 537 -1619 4 0 558 551 520 5 -1620 4 0 500 209 202 627 -1621 4 0 635 200 541 574 -1622 4 0 595 200 635 574 -1623 4 0 558 652 551 5 -1624 4 0 534 579 573 615 -1625 4 0 605 575 630 564 -1626 4 0 31 346 32 608 -1627 4 0 631 424 639 422 -1628 4 0 383 346 638 26 -1629 4 0 469 575 564 413 -1630 4 0 15 560 332 598 -1631 4 0 15 554 332 560 -1632 4 0 586 557 534 615 -1633 4 0 573 586 534 615 -1634 4 0 332 543 598 593 -1635 4 0 543 332 598 15 -1636 4 0 609 575 564 630 -1637 4 0 554 631 332 453 -1638 4 0 424 554 543 422 -1639 4 0 608 346 651 650 -1640 4 0 487 495 430 479 -1641 4 0 645 621 534 557 -1642 4 0 645 621 600 534 -1643 4 0 542 491 541 574 -1644 4 0 541 635 574 491 -1645 4 0 636 644 586 573 -1646 4 0 573 586 615 644 -1647 4 0 543 634 598 593 -1648 4 0 497 127 642 628 -1649 4 0 598 543 15 634 -1650 4 0 25 15 543 634 -1651 4 0 473 519 597 453 -1652 4 0 595 574 635 491 -1653 4 0 636 51 615 573 -1654 4 0 644 573 636 615 +1070 +1 4 0 55 54 192 112 +2 4 0 62 130 28 133 +3 4 0 140 181 21 109 +4 4 0 91 53 114 99 +5 4 0 60 112 192 54 +6 4 0 216 147 144 187 +7 4 0 18 12 126 16 +8 4 0 192 249 87 64 +9 4 0 160 181 161 38 +10 4 0 181 145 29 61 +11 4 0 161 14 29 145 +12 4 0 272 43 147 95 +13 4 0 123 239 366 219 +14 4 0 416 251 329 288 +15 4 0 79 53 56 92 +16 4 0 151 120 134 73 +17 4 0 122 20 252 121 +18 4 0 105 28 62 23 +19 4 0 100 125 217 132 +20 4 0 108 77 50 41 +21 4 0 116 45 213 49 +22 4 0 122 168 68 27 +23 4 0 27 168 68 82 +24 4 0 123 66 40 206 +25 4 0 325 213 123 116 +26 4 0 231 98 105 62 +27 4 0 325 116 168 155 +28 4 0 116 219 325 168 +29 4 0 128 56 79 53 +30 4 0 114 53 72 99 +31 4 0 53 114 72 119 +32 4 0 96 99 72 53 +33 4 0 46 199 61 220 +34 4 0 20 247 12 126 +35 4 0 121 20 247 12 +36 4 0 226 211 51 190 +37 4 0 231 232 138 102 +38 4 0 213 123 116 66 +39 4 0 166 170 167 116 +40 4 0 184 86 182 106 +41 4 0 156 41 138 60 +42 4 0 252 116 68 168 +43 4 0 98 105 62 23 +44 4 0 28 62 135 69 +45 4 0 69 28 62 105 +46 4 0 113 111 32 224 +47 4 0 64 87 189 42 +48 4 0 75 61 143 212 +49 4 0 212 158 197 143 +50 4 0 174 87 216 173 +51 4 0 216 87 192 173 +52 4 0 175 216 144 192 +53 4 0 138 65 115 102 +54 4 0 202 145 198 37 +55 4 0 151 69 134 72 +56 4 0 168 82 27 155 +57 4 0 100 217 28 30 +58 4 0 134 28 105 100 +59 4 0 30 139 28 105 +60 4 0 100 30 28 105 +61 4 0 127 61 220 46 +62 4 0 133 62 75 200 +63 4 0 133 28 62 135 +64 4 0 108 231 232 138 +65 4 0 8 84 9 6 +66 4 0 6 163 8 110 +67 4 0 110 6 84 8 +68 4 0 153 12 13 18 +69 4 0 163 162 4 6 +70 4 0 153 150 12 18 +71 4 0 302 347 362 295 +72 4 0 96 93 120 151 +73 4 0 174 213 189 45 +74 4 0 121 247 252 195 +75 4 0 272 34 194 216 +76 4 0 272 194 187 216 +77 4 0 55 176 56 79 +78 4 0 150 16 12 18 +79 4 0 106 114 151 99 +80 4 0 127 143 142 51 +81 4 0 142 143 190 51 +82 4 0 69 114 229 44 +83 4 0 114 69 70 44 +84 4 0 133 21 29 75 +85 4 0 130 75 62 23 +86 4 0 75 61 199 229 +87 4 0 134 105 69 151 +88 4 0 135 62 229 69 +89 4 0 69 114 62 229 +90 4 0 75 200 62 229 +91 4 0 122 252 20 68 +92 4 0 127 61 142 143 +93 4 0 8 207 9 84 +94 4 0 118 65 224 115 +95 4 0 179 78 10 218 +96 4 0 62 114 69 105 +97 4 0 106 114 62 105 +98 4 0 179 12 201 78 +99 4 0 81 20 252 68 +100 4 0 65 102 224 115 +101 4 0 65 111 224 102 +102 4 0 6 110 4 163 +103 4 0 87 64 189 216 +104 4 0 72 114 70 119 +105 4 0 91 86 114 52 +106 4 0 79 55 92 56 +107 4 0 105 114 69 151 +108 4 0 106 114 105 151 +109 4 0 134 105 30 100 +110 4 0 139 28 105 23 +111 4 0 184 86 99 56 +112 4 0 96 151 120 72 +113 4 0 60 138 115 102 +114 4 0 156 50 41 60 +115 4 0 136 254 48 214 +116 4 0 239 206 66 123 +117 4 0 122 252 68 168 +118 4 0 118 111 224 65 +119 4 0 106 86 182 211 +120 4 0 162 186 4 6 +121 4 0 93 120 151 73 +122 4 0 96 151 99 112 +123 4 0 75 61 36 199 +124 4 0 133 75 29 193 +125 4 0 75 193 36 29 +126 4 0 155 216 34 213 +127 4 0 198 36 29 61 +128 4 0 174 74 144 213 +129 4 0 218 8 207 9 +130 4 0 53 91 114 52 +131 4 0 92 56 99 53 +132 4 0 96 92 99 53 +133 4 0 173 192 175 54 +134 4 0 184 112 221 56 +135 4 0 96 93 112 55 +136 4 0 106 184 112 231 +137 4 0 197 231 108 185 +138 4 0 91 99 86 56 +139 4 0 53 114 119 52 +140 4 0 83 68 81 82 +141 4 0 68 116 81 82 +142 4 0 166 81 116 45 +143 4 0 177 79 57 129 +144 4 0 119 52 114 196 +145 4 0 119 114 70 44 +146 4 0 151 134 120 72 +147 4 0 177 79 176 57 +148 4 0 195 13 311 188 +149 4 0 170 126 247 81 +150 4 0 227 57 176 79 +151 4 0 79 129 56 128 +152 4 0 28 130 62 23 +153 4 0 135 62 133 200 +154 4 0 133 75 193 200 +155 4 0 75 130 62 133 +156 4 0 136 254 308 250 +157 4 0 133 193 29 25 +158 4 0 133 29 21 25 +159 4 0 75 193 200 199 +160 4 0 30 105 151 231 +161 4 0 245 64 244 224 +162 4 0 224 249 64 244 +163 4 0 245 224 244 115 +164 4 0 115 249 224 244 +165 4 0 187 148 146 55 +166 4 0 174 213 45 49 +167 4 0 153 180 179 152 +168 4 0 154 153 150 201 +169 4 0 150 12 241 201 +170 4 0 150 153 154 18 +171 4 0 153 12 179 180 +172 4 0 153 150 201 12 +173 4 0 180 13 153 12 +174 4 0 118 111 113 224 +175 4 0 113 118 245 27 +176 4 0 56 184 112 99 +177 4 0 137 249 60 156 +178 4 0 123 40 66 213 +179 4 0 66 213 40 49 +180 4 0 135 229 44 69 +181 4 0 198 46 61 215 +182 4 0 198 46 36 61 +183 4 0 202 198 61 215 +184 4 0 145 181 161 160 +185 4 0 18 247 170 126 +186 4 0 123 104 40 213 +187 4 0 170 116 81 247 +188 4 0 170 247 167 116 +189 4 0 166 81 170 116 +190 4 0 167 170 169 247 +191 4 0 158 75 143 212 +192 4 0 75 229 143 61 +193 4 0 231 151 30 102 +194 4 0 111 32 224 102 +195 4 0 174 189 172 45 +196 4 0 212 61 142 141 +197 4 0 174 172 87 173 +198 4 0 111 30 32 102 +199 4 0 102 151 30 32 +200 4 0 151 30 32 134 +201 4 0 61 127 142 101 +202 4 0 57 208 177 129 +203 4 0 129 177 79 56 +204 4 0 192 54 173 249 +205 4 0 231 60 112 102 +206 4 0 108 60 231 138 +207 4 0 231 112 151 102 +208 4 0 179 152 180 8 +209 4 0 373 372 285 382 +210 4 0 148 187 93 55 +211 4 0 93 187 112 55 +212 4 0 98 62 197 23 +213 4 0 139 105 98 23 +214 4 0 61 46 127 101 +215 4 0 72 99 151 114 +216 4 0 20 126 12 16 +217 4 0 181 75 21 109 +218 4 0 23 21 75 109 +219 4 0 140 159 29 181 +220 4 0 181 75 109 158 +221 4 0 23 109 75 158 +222 4 0 108 138 41 60 +223 4 0 211 185 182 106 +224 4 0 142 61 212 143 +225 4 0 82 116 45 189 +226 4 0 92 112 99 56 +227 4 0 92 96 112 55 +228 4 0 96 112 99 92 +229 4 0 175 192 146 54 +230 4 0 60 63 249 192 +231 4 0 119 196 114 44 +232 4 0 127 61 143 196 +233 4 0 114 229 44 196 +234 4 0 91 53 99 56 +235 4 0 61 101 202 215 +236 4 0 46 36 61 199 +237 4 0 200 199 193 44 +238 4 0 179 201 10 78 +239 4 0 154 201 150 10 +240 4 0 150 201 241 10 +241 4 0 153 179 12 201 +242 4 0 153 154 152 201 +243 4 0 21 133 130 75 +244 4 0 75 130 21 23 +245 4 0 82 116 81 45 +246 4 0 197 211 143 62 +247 4 0 211 143 51 190 +248 4 0 127 143 51 52 +249 4 0 62 143 114 211 +250 4 0 127 143 52 196 +251 4 0 114 143 196 52 +252 4 0 18 247 126 12 +253 4 0 106 86 114 99 +254 4 0 114 86 51 52 +255 4 0 114 143 52 51 +256 4 0 211 143 114 51 +257 4 0 45 87 80 189 +258 4 0 226 190 197 211 +259 4 0 211 182 51 86 +260 4 0 197 190 143 211 +261 4 0 72 151 69 114 +262 4 0 107 9 218 207 +263 4 0 32 73 151 134 +264 4 0 169 170 18 247 +265 4 0 92 56 55 112 +266 4 0 181 61 29 75 +267 4 0 75 36 193 199 +268 4 0 82 116 155 168 +269 4 0 116 155 189 82 +270 4 0 123 103 206 104 +271 4 0 247 311 18 169 +272 4 0 230 145 160 202 +273 4 0 50 249 183 60 +274 4 0 165 213 274 325 +275 4 0 220 61 127 196 +276 4 0 136 254 214 47 +277 4 0 202 198 215 37 +278 4 0 215 101 202 37 +279 4 0 272 34 216 213 +280 4 0 174 213 144 216 +281 4 0 100 217 30 132 +282 4 0 8 218 207 255 +283 4 0 55 187 192 146 +284 4 0 60 249 183 54 +285 4 0 99 184 112 106 +286 4 0 220 199 61 229 +287 4 0 221 60 183 54 +288 4 0 25 36 193 29 +289 4 0 181 61 75 212 +290 4 0 58 57 208 222 +291 4 0 121 12 247 195 +292 4 0 42 155 27 82 +293 4 0 134 28 69 105 +294 4 0 247 126 20 81 +295 4 0 151 187 112 93 +296 4 0 194 224 113 32 +297 4 0 113 224 245 118 +298 4 0 184 86 106 99 +299 4 0 213 274 123 104 +300 4 0 55 227 176 79 +301 4 0 366 104 103 123 +302 4 0 135 229 62 200 +303 4 0 75 229 199 200 +304 4 0 220 229 196 44 +305 4 0 220 199 229 44 +306 4 0 230 14 236 15 +307 4 0 151 72 96 99 +308 4 0 222 57 208 59 +309 4 0 113 194 223 155 +310 4 0 55 192 54 146 +311 4 0 56 221 54 112 +312 4 0 232 197 108 31 +313 4 0 162 2 4 186 +314 4 0 229 143 196 114 +315 4 0 62 143 229 114 +316 4 0 50 156 136 137 +317 4 0 56 176 177 79 +318 4 0 82 45 80 189 +319 4 0 74 147 144 213 +320 4 0 174 216 144 175 +321 4 0 174 74 213 49 +322 4 0 193 33 36 25 +323 4 0 45 87 189 172 +324 4 0 116 213 45 189 +325 4 0 79 58 129 128 +326 4 0 235 100 350 225 +327 4 0 116 123 219 239 +328 4 0 153 179 201 152 +329 4 0 87 173 249 192 +330 4 0 135 229 200 44 +331 4 0 200 229 199 44 +332 4 0 208 58 129 57 +333 4 0 79 129 58 57 +334 4 0 185 77 108 197 +335 4 0 350 132 100 235 +336 4 0 132 125 131 271 +337 4 0 197 143 190 212 +338 4 0 142 143 212 190 +339 4 0 108 60 41 50 +340 4 0 138 102 60 231 +341 4 0 116 213 189 155 +342 4 0 114 86 106 211 +343 4 0 114 86 211 51 +344 4 0 154 152 201 10 +345 4 0 174 173 216 175 +346 4 0 174 172 189 87 +347 4 0 245 27 42 155 +348 4 0 181 75 29 21 +349 4 0 184 60 183 221 +350 4 0 184 185 183 60 +351 4 0 29 61 36 75 +352 4 0 181 212 75 158 +353 4 0 112 99 106 151 +354 4 0 102 112 151 63 +355 4 0 185 231 60 184 +356 4 0 60 112 54 221 +357 4 0 63 187 192 112 +358 4 0 60 112 221 184 +359 4 0 231 112 60 184 +360 4 0 272 32 194 223 +361 4 0 32 73 272 187 +362 4 0 181 158 109 159 +363 4 0 50 137 249 60 +364 4 0 125 332 217 131 +365 4 0 123 104 206 40 +366 4 0 197 158 62 143 +367 4 0 23 62 197 158 +368 4 0 75 62 23 158 +369 4 0 158 75 62 143 +370 4 0 98 197 31 23 +371 4 0 141 61 142 101 +372 4 0 141 61 101 202 +373 4 0 215 61 101 46 +374 4 0 87 189 174 216 +375 4 0 64 155 189 216 +376 4 0 110 84 6 4 +377 4 0 84 4 110 284 +378 4 0 299 67 116 239 +379 4 0 167 67 116 299 +380 4 0 167 299 311 67 +381 4 0 251 235 416 333 +382 4 0 416 235 268 333 +383 4 0 195 188 311 24 +384 4 0 150 241 12 16 +385 4 0 76 239 103 206 +386 4 0 167 169 311 247 +387 4 0 56 112 54 55 +388 4 0 70 72 69 114 +389 4 0 125 332 131 287 +390 4 0 231 106 184 185 +391 4 0 185 50 183 60 +392 4 0 108 50 185 60 +393 4 0 49 66 116 167 +394 4 0 245 64 113 155 +395 4 0 113 64 194 155 +396 4 0 166 45 116 49 +397 4 0 65 98 30 102 +398 4 0 141 160 61 202 +399 4 0 161 230 145 160 +400 4 0 152 9 10 154 +401 4 0 151 187 93 73 +402 4 0 54 60 249 192 +403 4 0 112 187 192 55 +404 4 0 314 370 299 311 +405 4 0 370 314 299 164 +406 4 0 333 235 100 30 +407 4 0 270 107 90 97 +408 4 0 270 107 89 90 +409 4 0 158 197 31 38 +410 4 0 287 332 131 356 +411 4 0 66 116 213 49 +412 4 0 106 151 105 231 +413 4 0 106 112 151 231 +414 4 0 195 12 18 13 +415 4 0 195 13 18 311 +416 4 0 247 12 18 195 +417 4 0 247 195 18 311 +418 4 0 250 240 308 42 +419 4 0 145 209 178 37 +420 4 0 140 21 29 191 +421 4 0 191 21 29 22 +422 4 0 140 181 29 21 +423 4 0 106 197 231 62 +424 4 0 23 197 31 158 +425 4 0 144 187 146 192 +426 4 0 175 144 146 192 +427 4 0 144 216 187 192 +428 4 0 159 140 29 14 +429 4 0 140 14 191 29 +430 4 0 160 181 212 61 +431 4 0 30 105 231 98 +432 4 0 139 105 30 98 +433 4 0 216 272 213 147 +434 4 0 102 151 32 63 +435 4 0 224 32 63 102 +436 4 0 171 295 243 238 +437 4 0 171 328 279 243 +438 4 0 270 97 336 246 +439 4 0 136 308 254 47 +440 4 0 8 110 207 84 +441 4 0 8 110 255 207 +442 4 0 134 30 105 151 +443 4 0 371 332 356 259 +444 4 0 187 194 63 192 +445 4 0 100 125 132 350 +446 4 0 167 166 116 49 +447 4 0 116 167 299 247 +448 4 0 160 141 212 38 +449 4 0 138 232 65 102 +450 4 0 73 94 187 93 +451 4 0 226 210 197 38 +452 4 0 212 38 197 158 +453 4 0 245 64 224 113 +454 4 0 224 64 194 113 +455 4 0 198 202 61 145 +456 4 0 38 197 226 190 +457 4 0 197 212 190 38 +458 4 0 167 66 116 67 +459 4 0 239 67 116 66 +460 4 0 67 206 66 239 +461 4 0 252 116 299 247 +462 4 0 252 299 195 247 +463 4 0 102 231 232 98 +464 4 0 60 112 63 192 +465 4 0 29 14 191 22 +466 4 0 161 159 29 14 +467 4 0 68 116 82 168 +468 4 0 224 102 63 60 +469 4 0 63 224 64 194 +470 4 0 63 64 192 194 +471 4 0 179 218 10 8 +472 4 0 218 8 9 10 +473 4 0 10 8 9 152 +474 4 0 179 8 10 152 +475 4 0 155 216 194 34 +476 4 0 224 63 249 60 +477 4 0 102 60 112 63 +478 4 0 185 184 182 106 +479 4 0 113 223 194 32 +480 4 0 50 41 48 156 +481 4 0 48 136 50 156 +482 4 0 210 31 197 38 +483 4 0 145 209 236 178 +484 4 0 250 42 87 244 +485 4 0 212 160 61 141 +486 4 0 40 213 39 43 +487 4 0 40 43 49 213 +488 4 0 213 116 325 155 +489 4 0 151 63 112 187 +490 4 0 165 213 325 155 +491 4 0 274 366 123 104 +492 4 0 325 366 219 123 +493 4 0 274 366 325 123 +494 4 0 29 159 161 181 +495 4 0 159 181 140 109 +496 4 0 211 185 51 182 +497 4 0 216 87 64 192 +498 4 0 194 64 192 216 +499 4 0 32 187 194 63 +500 4 0 187 216 194 192 +501 4 0 211 185 197 226 +502 4 0 29 149 36 198 +503 4 0 157 197 210 77 +504 4 0 197 108 210 77 +505 4 0 149 22 29 36 +506 4 0 74 43 213 49 +507 4 0 74 43 147 213 +508 4 0 230 37 145 202 +509 4 0 145 149 29 198 +510 4 0 111 65 30 102 +511 4 0 65 232 98 102 +512 4 0 212 38 141 190 +513 4 0 219 325 283 366 +514 4 0 102 30 231 98 +515 4 0 90 97 107 10 +516 4 0 299 311 195 247 +517 4 0 161 145 29 181 +518 4 0 252 247 20 81 +519 4 0 288 235 225 416 +520 4 0 145 178 149 198 +521 4 0 145 37 178 198 +522 4 0 68 252 81 116 +523 4 0 272 223 194 34 +524 4 0 155 216 213 189 +525 4 0 116 219 168 299 +526 4 0 334 233 257 388 +527 4 0 257 233 279 388 +528 4 0 236 15 19 209 +529 4 0 35 39 274 213 +530 4 0 213 39 274 104 +531 4 0 198 61 29 145 +532 4 0 118 245 115 224 +533 4 0 216 155 194 64 +534 4 0 174 189 213 216 +535 4 0 42 155 64 245 +536 4 0 64 155 42 189 +537 4 0 124 282 374 286 +538 4 0 124 282 305 303 +539 4 0 124 282 303 374 +540 4 0 341 263 369 322 +541 4 0 341 411 263 322 +542 4 0 249 224 64 63 +543 4 0 249 64 192 63 +544 4 0 341 395 263 319 +545 4 0 76 239 355 103 +546 4 0 178 149 236 145 +547 4 0 385 419 389 278 +548 4 0 189 87 80 42 +549 4 0 80 42 82 189 +550 4 0 219 283 291 366 +551 4 0 145 14 236 230 +552 4 0 230 117 145 37 +553 4 0 230 117 236 145 +554 4 0 250 156 254 240 +555 4 0 165 35 34 267 +556 4 0 213 35 34 165 +557 4 0 165 213 155 34 +558 4 0 165 213 35 274 +559 4 0 110 284 207 84 +560 4 0 240 250 244 42 +561 4 0 187 94 148 93 +562 4 0 187 194 272 32 +563 4 0 20 247 252 121 +564 4 0 149 29 236 145 +565 4 0 225 235 354 350 +566 4 0 197 31 210 108 +567 4 0 116 123 239 66 +568 4 0 273 386 324 364 +569 4 0 246 270 338 336 +570 4 0 160 181 38 212 +571 4 0 357 271 344 383 +572 4 0 194 63 224 32 +573 4 0 100 32 30 134 +574 4 0 245 244 64 42 +575 4 0 270 258 336 97 +576 4 0 327 313 376 256 +577 4 0 355 299 413 239 +578 4 0 76 299 355 239 +579 4 0 187 94 95 147 +580 4 0 71 95 187 73 +581 4 0 94 73 187 95 +582 4 0 77 50 185 108 +583 4 0 114 106 62 211 +584 4 0 211 62 197 106 +585 4 0 67 314 299 311 +586 4 0 106 231 105 62 +587 4 0 299 314 67 76 +588 4 0 76 299 314 355 +589 4 0 147 95 187 272 +590 4 0 272 34 213 43 +591 4 0 151 32 187 73 +592 4 0 371 332 259 11 +593 4 0 259 371 11 276 +594 4 0 116 123 325 219 +595 4 0 211 197 185 106 +596 4 0 51 226 185 211 +597 4 0 255 284 5 361 +598 4 0 81 116 252 247 +599 4 0 155 34 194 223 +600 4 0 161 181 158 38 +601 4 0 272 43 213 147 +602 4 0 145 117 236 209 +603 4 0 327 262 256 275 +604 4 0 131 287 356 264 +605 4 0 377 331 293 265 +606 4 0 160 145 181 61 +607 4 0 245 155 113 27 +608 4 0 63 187 151 32 +609 4 0 115 224 249 60 +610 4 0 115 138 60 156 +611 4 0 60 115 224 102 +612 4 0 61 143 196 229 +613 4 0 220 61 196 229 +614 4 0 260 303 124 305 +615 4 0 125 131 217 132 +616 4 0 327 262 313 256 +617 4 0 313 368 397 376 +618 4 0 96 93 151 112 +619 4 0 195 311 370 24 +620 4 0 216 272 147 187 +621 4 0 213 147 144 216 +622 4 0 167 299 247 311 +623 4 0 252 299 116 168 +624 4 0 201 179 10 152 +625 4 0 338 246 89 270 +626 4 0 253 246 89 338 +627 4 0 95 71 187 272 +628 4 0 292 266 207 255 +629 4 0 253 277 361 89 +630 4 0 145 29 236 14 +631 4 0 165 35 267 26 +632 4 0 281 320 280 348 +633 4 0 270 246 107 97 +634 4 0 270 246 89 107 +635 4 0 281 320 348 301 +636 4 0 50 137 60 156 +637 4 0 77 157 185 50 +638 4 0 181 158 159 161 +639 4 0 335 401 237 347 +640 4 0 279 328 399 353 +641 4 0 98 197 232 31 +642 4 0 232 231 108 197 +643 4 0 270 281 338 336 +644 4 0 270 281 336 258 +645 4 0 175 173 216 192 +646 4 0 103 206 239 123 +647 4 0 306 171 279 243 +648 4 0 330 243 171 306 +649 4 0 205 315 306 317 +650 4 0 306 315 257 317 +651 4 0 354 235 17 289 +652 4 0 350 235 354 289 +653 4 0 244 156 249 250 +654 4 0 156 250 244 240 +655 4 0 156 137 249 250 +656 4 0 331 343 278 323 +657 4 0 317 368 340 321 +658 4 0 35 26 165 274 +659 4 0 348 352 339 320 +660 4 0 98 62 231 197 +661 4 0 98 197 231 232 +662 4 0 103 239 392 364 +663 4 0 392 239 422 364 +664 4 0 187 144 146 147 +665 4 0 89 107 207 90 +666 4 0 67 206 239 76 +667 4 0 312 352 204 336 +668 4 0 352 204 294 312 +669 4 0 358 275 256 421 +670 4 0 327 275 256 358 +671 4 0 100 333 30 32 +672 4 0 235 30 132 100 +673 4 0 367 239 219 366 +674 4 0 239 103 366 367 +675 4 0 350 405 289 354 +676 4 0 377 293 203 265 +677 4 0 377 278 203 293 +678 4 0 107 218 9 10 +679 4 0 90 107 207 9 +680 4 0 10 107 90 9 +681 4 0 294 352 368 204 +682 4 0 255 284 361 207 +683 4 0 340 257 317 384 +684 4 0 413 299 422 239 +685 4 0 187 146 148 147 +686 4 0 148 147 94 187 +687 4 0 213 43 34 35 +688 4 0 125 350 357 271 +689 4 0 271 357 344 289 +690 4 0 350 289 357 271 +691 4 0 213 35 39 43 +692 4 0 132 125 271 350 +693 4 0 381 349 335 238 +694 4 0 178 236 149 19 +695 4 0 103 239 366 123 +696 4 0 295 347 238 171 +697 4 0 262 313 256 398 +698 4 0 110 284 255 207 +699 4 0 398 313 256 376 +700 4 0 249 87 64 244 +701 4 0 244 64 42 87 +702 4 0 230 15 236 117 +703 4 0 236 22 29 149 +704 4 0 253 398 246 310 +705 4 0 294 204 88 310 +706 4 0 67 299 76 239 +707 4 0 204 368 313 376 +708 4 0 88 313 262 398 +709 4 0 75 229 62 143 +710 4 0 338 281 280 336 +711 4 0 185 197 231 106 +712 4 0 195 311 299 370 +713 4 0 281 7 301 258 +714 4 0 281 301 336 258 +715 4 0 384 279 257 317 +716 4 0 384 334 257 388 +717 4 0 145 209 37 117 +718 4 0 156 249 60 115 +719 4 0 315 340 257 317 +720 4 0 236 14 29 22 +721 4 0 161 14 145 230 +722 4 0 305 303 296 405 +723 4 0 107 218 266 207 +724 4 0 246 107 266 89 +725 4 0 107 266 89 207 +726 4 0 327 256 307 358 +727 4 0 320 352 312 348 +728 4 0 249 250 87 244 +729 4 0 292 218 255 207 +730 4 0 354 17 260 305 +731 4 0 253 246 277 89 +732 4 0 17 235 354 288 +733 4 0 277 266 361 89 +734 4 0 266 292 5 255 +735 4 0 234 17 354 288 +736 4 0 251 235 288 416 +737 4 0 205 315 330 306 +738 4 0 157 197 226 210 +739 4 0 197 185 157 226 +740 4 0 185 77 197 157 +741 4 0 178 209 236 19 +742 4 0 340 321 408 384 +743 4 0 340 403 408 321 +744 4 0 213 104 40 39 +745 4 0 423 1 363 269 +746 4 0 354 394 405 289 +747 4 0 225 235 100 268 +748 4 0 416 268 32 333 +749 4 0 333 251 414 416 +750 4 0 325 26 283 274 +751 4 0 136 254 156 48 +752 4 0 19 149 22 236 +753 4 0 76 314 378 424 +754 4 0 378 314 391 424 +755 4 0 339 411 408 321 +756 4 0 274 325 213 123 +757 4 0 349 401 335 238 +758 4 0 331 323 293 265 +759 4 0 331 278 293 323 +760 4 0 346 395 285 369 +761 4 0 164 314 299 355 +762 4 0 392 413 422 239 +763 4 0 244 115 249 156 +764 4 0 165 26 325 274 +765 4 0 164 425 391 424 +766 4 0 32 268 100 333 +767 4 0 362 302 295 300 +768 4 0 160 202 145 61 +769 4 0 420 362 295 300 +770 4 0 371 332 287 356 +771 4 0 351 383 402 380 +772 4 0 71 43 272 95 +773 4 0 164 424 314 355 +774 4 0 137 156 136 250 +775 4 0 250 156 136 254 +776 4 0 358 275 421 309 +777 4 0 405 357 344 383 +778 4 0 295 300 302 328 +779 4 0 171 381 335 238 +780 4 0 236 15 209 117 +781 4 0 305 296 303 282 +782 4 0 346 341 369 334 +783 4 0 259 371 276 365 +784 4 0 164 391 314 424 +785 4 0 370 316 314 164 +786 4 0 250 240 254 308 +787 4 0 316 391 314 164 +788 4 0 408 411 341 322 +789 4 0 381 349 390 335 +790 4 0 370 24 314 316 +791 4 0 378 314 24 391 +792 4 0 364 239 324 367 +793 4 0 315 368 317 205 +794 4 0 187 71 73 272 +795 4 0 368 340 321 403 +796 4 0 164 413 425 355 +797 4 0 76 314 424 355 +798 4 0 88 204 313 398 +799 4 0 281 348 280 336 +800 4 0 310 398 246 336 +801 4 0 312 204 310 336 +802 4 0 281 348 336 301 +803 4 0 393 288 234 329 +804 4 0 255 266 207 361 +805 4 0 266 5 361 255 +806 4 0 423 363 390 349 +807 4 0 132 350 271 289 +808 4 0 357 405 344 289 +809 4 0 336 312 352 348 +810 4 0 356 287 365 264 +811 4 0 356 371 259 365 +812 4 0 171 335 347 238 +813 4 0 171 238 243 3 +814 4 0 290 287 264 365 +815 4 0 354 305 405 394 +816 4 0 354 17 305 394 +817 4 0 409 385 389 278 +818 4 0 407 402 342 360 +819 4 0 268 235 100 333 +820 4 0 271 131 264 125 +821 4 0 315 205 359 376 +822 4 0 291 273 324 364 +823 4 0 364 386 422 392 +824 4 0 266 218 292 207 +825 4 0 116 239 219 299 +826 4 0 313 294 397 368 +827 4 0 338 280 312 336 +828 4 0 260 17 303 305 +829 4 0 266 361 89 207 +830 4 0 373 285 346 382 +831 4 0 357 271 383 404 +832 4 0 405 357 383 404 +833 4 0 369 285 346 373 +834 4 0 369 373 346 334 +835 4 0 88 294 313 204 +836 4 0 384 408 340 334 +837 4 0 416 251 414 329 +838 4 0 350 289 405 357 +839 4 0 281 7 319 301 +840 4 0 402 404 380 383 +841 4 0 330 315 205 297 +842 4 0 125 287 131 264 +843 4 0 277 266 5 361 +844 4 0 373 382 346 334 +845 4 0 233 382 373 334 +846 4 0 302 347 295 171 +847 4 0 261 327 307 358 +848 4 0 313 359 327 376 +849 4 0 327 359 307 376 +850 4 0 296 385 318 389 +851 4 0 303 296 396 409 +852 4 0 418 399 328 345 +853 4 0 330 315 257 306 +854 4 0 233 373 410 388 +855 4 0 233 410 279 388 +856 4 0 286 377 203 379 +857 4 0 286 282 374 377 +858 4 0 374 377 203 286 +859 4 0 334 369 388 322 +860 4 0 234 17 260 354 +861 4 0 325 283 366 274 +862 4 0 279 328 353 243 +863 4 0 243 328 353 295 +864 4 0 335 401 347 238 +865 4 0 282 409 374 385 +866 4 0 303 296 409 282 +867 4 0 350 132 235 289 +868 4 0 289 394 405 344 +869 4 0 327 359 261 307 +870 4 0 335 390 237 401 +871 4 0 390 349 400 401 +872 4 0 380 407 402 387 +873 4 0 416 235 225 268 +874 4 0 257 279 233 353 +875 4 0 353 399 279 410 +876 4 0 164 326 316 391 +877 4 0 396 296 318 389 +878 4 0 341 334 408 322 +879 4 0 281 319 320 301 +880 4 0 397 315 313 376 +881 4 0 330 171 243 3 +882 4 0 289 17 354 394 +883 4 0 277 246 266 89 +884 4 0 257 279 306 317 +885 4 0 303 282 409 374 +886 4 0 125 357 404 271 +887 4 0 305 394 303 405 +888 4 0 345 337 399 353 +889 4 0 317 340 384 321 +890 4 0 303 351 396 296 +891 4 0 261 359 297 375 +892 4 0 307 359 261 375 +893 4 0 235 288 225 354 +894 4 0 340 257 384 334 +895 4 0 384 257 279 388 +896 4 0 233 334 373 388 +897 4 0 373 410 372 382 +898 4 0 315 359 205 297 +899 4 0 315 368 340 317 +900 4 0 399 85 410 337 +901 4 0 408 411 322 321 +902 4 0 364 239 367 103 +903 4 0 390 363 400 349 +904 4 0 262 398 253 88 +905 4 0 257 306 279 243 +906 4 0 334 369 373 388 +907 4 0 310 336 246 338 +908 4 0 327 256 376 307 +909 4 0 237 390 400 401 +910 4 0 297 359 205 375 +911 4 0 399 337 410 353 +912 4 0 382 410 337 233 +913 4 0 373 410 382 233 +914 4 0 417 407 342 360 +915 4 0 402 380 318 296 +916 4 0 219 366 291 367 +917 4 0 291 364 324 367 +918 4 0 368 403 352 294 +919 4 0 257 279 353 243 +920 4 0 330 243 306 257 +921 4 0 262 398 256 298 +922 4 0 288 354 234 329 +923 4 0 335 349 390 401 +924 4 0 403 339 321 352 +925 4 0 275 277 361 253 +926 4 0 251 288 393 329 +927 4 0 416 288 329 225 +928 4 0 385 419 278 331 +929 4 0 331 419 278 343 +930 4 0 405 394 351 344 +931 4 0 405 394 303 351 +932 4 0 384 321 408 322 +933 4 0 408 334 384 322 +934 4 0 384 334 388 322 +935 4 0 233 353 279 410 +936 4 0 353 337 410 233 +937 4 0 404 271 402 406 +938 4 0 271 125 264 406 +939 4 0 334 341 369 322 +940 4 0 410 85 372 337 +941 4 0 382 410 372 337 +942 4 0 407 417 342 387 +943 4 0 403 339 408 321 +944 4 0 125 264 415 287 +945 4 0 409 296 385 282 +946 4 0 351 405 344 383 +947 4 0 404 380 407 402 +948 4 0 181 212 158 38 +949 4 0 381 423 349 269 +950 4 0 381 423 390 349 +951 4 0 320 339 348 301 +952 4 0 42 189 155 82 +953 4 0 419 412 318 389 +954 4 0 68 81 20 83 +955 4 0 389 318 248 412 +956 4 0 86 91 114 99 +957 4 0 316 24 314 391 +958 4 0 142 212 141 190 +959 4 0 397 340 368 403 +960 4 0 225 288 329 354 +961 4 0 298 398 253 262 +962 4 0 275 277 5 361 +963 4 0 422 386 413 392 +964 4 0 376 359 307 375 +965 4 0 108 231 60 185 +966 4 0 402 342 248 387 +967 4 0 296 303 351 405 +968 4 0 314 24 370 311 +969 4 0 356 287 371 365 +970 4 0 409 385 278 374 +971 4 0 312 204 294 310 +972 4 0 253 398 277 246 +973 4 0 305 17 303 394 +974 4 0 399 85 337 345 +975 4 0 358 421 256 307 +976 4 0 296 385 389 409 +977 4 0 417 290 415 360 +978 4 0 415 407 417 360 +979 4 0 404 402 271 383 +980 4 0 385 331 278 377 +981 4 0 171 328 295 302 +982 4 0 171 328 243 295 +983 4 0 422 299 324 239 +984 4 0 313 315 359 376 +985 4 0 351 405 380 296 +986 4 0 351 405 383 380 +987 4 0 248 304 412 318 +988 4 0 387 342 248 304 +989 4 0 318 387 248 304 +990 4 0 125 404 406 271 +991 4 0 290 415 264 287 +992 4 0 204 376 313 398 +993 4 0 315 397 368 376 +994 4 0 277 398 253 298 +995 4 0 414 251 393 329 +996 4 0 246 310 338 253 +997 4 0 345 420 295 300 +998 4 0 261 358 307 309 +999 4 0 328 345 399 353 +1000 4 0 355 164 413 299 +1001 4 0 324 239 219 367 +1002 4 0 239 299 324 219 +1003 4 0 219 291 324 367 +1004 4 0 310 204 398 336 +1005 4 0 374 377 278 203 +1006 4 0 290 287 365 276 +1007 4 0 341 319 263 411 +1008 4 0 375 376 359 205 +1009 4 0 409 296 396 389 +1010 4 0 397 340 315 368 +1011 4 0 315 376 368 205 +1012 4 0 379 377 203 265 +1013 4 0 351 380 402 296 +1014 4 0 265 293 203 242 +1015 4 0 422 228 413 386 +1016 4 0 335 237 302 347 +1017 4 0 335 347 302 171 +1018 4 0 341 395 369 263 +1019 4 0 346 395 369 341 +1020 4 0 294 397 368 403 +1021 4 0 368 403 321 352 +1022 4 0 355 239 392 103 +1023 4 0 164 326 391 425 +1024 4 0 204 294 313 368 +1025 4 0 381 269 349 238 +1026 4 0 415 290 264 360 +1027 4 0 415 264 406 360 +1028 4 0 125 406 415 264 +1029 4 0 402 407 342 387 +1030 4 0 379 265 203 242 +1031 4 0 406 402 404 360 +1032 4 0 360 404 407 402 +1033 4 0 125 404 415 406 +1034 4 0 88 398 253 310 +1035 4 0 88 204 398 310 +1036 4 0 406 404 415 360 +1037 4 0 320 319 339 301 +1038 4 0 164 425 424 355 +1039 4 0 380 405 383 404 +1040 4 0 302 237 362 347 +1041 4 0 399 418 85 345 +1042 4 0 418 300 345 328 +1043 4 0 418 420 345 300 +1044 4 0 396 318 248 389 +1045 4 0 396 402 248 318 +1046 4 0 402 387 248 318 +1047 4 0 277 298 253 275 +1048 4 0 328 345 353 295 +1049 4 0 345 300 295 328 +1050 4 0 312 336 310 338 +1051 4 0 387 342 304 417 +1052 4 0 423 269 363 349 +1053 4 0 282 385 374 377 +1054 4 0 374 385 278 377 +1055 4 0 371 276 365 287 +1056 4 0 396 402 318 296 +1057 4 0 351 402 396 296 +1058 4 0 415 404 407 360 +1059 4 0 320 348 312 280 +1060 4 0 280 312 336 348 +1061 4 0 331 278 377 293 +1062 4 0 422 239 324 364 +1063 4 0 364 386 324 422 +1064 4 0 402 387 318 380 +1065 4 0 262 298 256 275 +1066 4 0 275 298 253 262 +1067 4 0 355 413 392 239 +1068 4 0 318 419 389 385 +1069 4 0 309 358 307 421 +1070 4 0 416 333 32 414 $EndElements $ElementData 1 @@ -2321,1659 +1510,1075 @@ $ElementData 3 0 1 -1654 -1 7.56199 -2 4.86806 -3 4.40144 -4 6.42934 -5 4.22059 -6 5.73014 -7 6.38728 -8 6.65278 -9 6.11566 -10 8.59831 -11 4.59846 -12 3.75402 -13 4.81655 -14 5.303 -15 4.23688 -16 4.44352 -17 9.61146 -18 4.02007 -19 6.55381 -20 4.32183 -21 3.77651 -22 4.28126 -23 4.67035 -24 4.25302 -25 3.24949 -26 3.81682 -27 3.6786 -28 5.26567 -29 5.75883 -30 4.40013 -31 4.8604 -32 3.88159 -33 3.62912 -34 6.09732 -35 6.23606 -36 6.81931 -37 3.98474 -38 5.09313 -39 7.92162 -40 5.91342 -41 5.89822 -42 7.79576 -43 3.26766 -44 6.40478 -45 3.30998 -46 5.75804 -47 4.44341 -48 5.56712 -49 7.92901 -50 7.32341 -51 4.11488 -52 7.27876 -53 4.46523 -54 4.41017 -55 4.24074 -56 5.18865 -57 3.67411 -58 3.93323 -59 6.27803 -60 5.7046 -61 5.43246 -62 6.62422 -63 6.87791 -64 4.8315 -65 4.41484 -66 3.44597 -67 4.80585 -68 4.76576 -69 5.09151 -70 3.90176 -71 3.98978 -72 7.05842 -73 5.79771 -74 5.72113 -75 5.39406 -76 8.36837 -77 6.57885 -78 3.81664 -79 5.04602 -80 5.13045 -81 4.17786 -82 4.12193 -83 5.498 -84 3.9477 -85 4.17729 -86 4.53085 -87 4.87674 -88 5.63865 -89 4.91132 -90 5.42233 -91 7.2101 -92 6.62552 -93 5.99626 -94 5.99827 -95 4.64279 -96 4.40763 -97 7.74874 -98 4.60244 -99 4.55322 -100 3.87632 -101 4.43066 -102 3.5908 -103 4.4961 -104 4.6942 -105 6.85876 -106 6.09827 -107 5.34771 -108 3.88554 -109 4.99917 -110 5.07909 -111 5.16529 -112 6.2445 -113 4.05386 -114 4.0937 -115 4.62717 -116 4.31849 -117 3.26285 -118 3.35407 -119 3.68025 -120 5.5668 -121 4.22251 -122 4.99967 -123 4.02172 -124 7.95474 -125 6.88951 -126 5.11647 -127 3.62751 -128 3.75947 -129 5.71937 -130 4.65378 -131 4.22097 -132 3.54665 -133 4.0164 -134 4.14403 -135 5.88228 -136 3.88365 -137 4.9027 -138 3.88649 -139 3.94684 -140 5.61741 -141 4.86852 -142 4.25794 -143 7.6941 -144 4.73617 -145 3.12373 -146 4.88928 -147 3.62576 -148 4.16485 -149 3.9426 -150 3.46852 -151 6.77747 -152 5.33702 -153 6.56503 -154 5.80932 -155 6.15413 -156 6.85355 -157 4.14906 -158 6.14933 -159 6.69641 -160 3.64734 -161 9.61926 -162 4.84044 -163 6.90865 -164 3.44809 -165 7.79131 -166 4.2801 -167 3.52051 -168 5.45391 -169 3.39718 -170 4.71838 -171 3.97902 -172 6.18658 -173 4.17284 -174 3.92603 -175 6.61929 -176 4.47741 -177 5.4168 -178 4.66072 -179 6.78272 -180 8.92575 -181 3.81346 -182 3.82779 -183 3.59616 -184 4.4729 -185 4.12509 -186 9.13405 -187 4.3469 -188 4.17304 -189 3.37722 -190 4.22285 -191 3.89981 -192 3.56114 -193 5.07249 -194 5.73119 -195 3.31977 -196 7.91262 -197 4.91172 -198 4.3087 -199 4.15402 -200 7.6821 -201 4.41955 -202 4.64581 -203 4.16326 -204 7.51723 -205 6.23256 -206 4.63327 -207 4.85318 -208 6.48807 -209 3.61821 -210 5.09043 -211 8.53276 -212 6.52094 -213 3.90421 -214 4.42601 -215 3.83625 -216 5.54714 -217 3.51603 -218 3.84227 -219 5.7805 -220 5.82631 -221 4.20829 -222 5.28021 -223 4.00498 -224 6.02503 -225 5.06898 -226 5.05237 -227 4.69681 -228 4.59421 -229 4.21961 -230 4.26009 -231 5.25661 -232 6.12045 -233 4.26478 -234 3.42011 -235 3.96254 -236 5.39782 -237 5.34452 -238 5.57074 -239 3.58786 -240 5.48832 -241 5.04805 -242 6.99507 -243 4.86669 -244 8.67723 -245 4.42583 -246 6.08779 -247 8.30081 -248 4.11458 -249 7.33372 -250 4.37632 -251 6.55974 -252 4.06411 -253 7.65217 -254 4.98446 -255 7.00166 -256 9.18261 -257 3.97417 -258 3.76504 -259 4.45173 -260 3.78705 -261 8.85178 -262 5.99438 -263 3.68369 -264 4.64732 -265 5.79147 -266 6.364 -267 5.03453 -268 4.96944 -269 4.75356 -270 3.20622 -271 4.24018 -272 4.41709 -273 4.21315 -274 4.38612 -275 6.51163 -276 5.01322 -277 5.46653 -278 3.97587 -279 6.44458 -280 4.97667 -281 5.55967 -282 5.85158 -283 5.0027 -284 3.48534 -285 6.58618 -286 4.80285 -287 5.94949 -288 4.82903 -289 7.5367 -290 5.70127 -291 7.09932 -292 5.78603 -293 5.97275 -294 3.8847 -295 7.18803 -296 4.24715 -297 6.96264 -298 7.0952 -299 4.63648 -300 6.55609 -301 5.16808 -302 5.24241 -303 3.54707 -304 4.3924 -305 4.0213 -306 4.62658 -307 4.81065 -308 4.56642 -309 6.50736 -310 4.75308 -311 3.8215 -312 3.41325 -313 4.08294 -314 4.91393 -315 5.30757 -316 7.02954 -317 5.24187 -318 4.13738 -319 6.58547 -320 3.70239 -321 3.67817 -322 4.58162 -323 5.24492 -324 4.86733 -325 4.91221 -326 4.2757 -327 5.39939 -328 4.61598 -329 8.42673 -330 6.14168 -331 4.57608 -332 3.81451 -333 4.29124 -334 4.12792 -335 5.02872 -336 5.23399 -337 3.38677 -338 4.50817 -339 5.28311 -340 5.64442 -341 4.71327 -342 6.09192 -343 4.17098 -344 7.35127 -345 5.55052 -346 8.62264 -347 7.92427 -348 4.62414 -349 5.61806 -350 5.34776 -351 6.86714 -352 4.07043 -353 3.76518 -354 3.52133 -355 4.0364 -356 4.23061 -357 5.51497 -358 5.34338 -359 5.2446 -360 3.66377 -361 3.61536 -362 4.93218 -363 5.91732 -364 3.99037 -365 6.86673 -366 4.57754 -367 4.54417 -368 3.49705 -369 3.68222 -370 4.05441 -371 3.28484 -372 3.86728 -373 6.47469 -374 3.8287 -375 4.21948 -376 6.50072 -377 5.2599 -378 5.46621 -379 3.90163 -380 8.20664 -381 5.20216 -382 5.3226 -383 4.03878 -384 8.93219 -385 6.79859 -386 5.0444 -387 4.38992 -388 6.97679 -389 3.69486 -390 3.64051 -391 3.67985 -392 6.23422 -393 3.30838 -394 7.50667 -395 3.94216 -396 6.5134 -397 8.60865 -398 4.39139 -399 3.46463 -400 3.90001 -401 4.26802 -402 3.71403 -403 3.59913 -404 3.15595 -405 4.92885 -406 9.80662 -407 3.63884 -408 3.80748 -409 5.15094 -410 6.35325 -411 4.20196 -412 5.86833 -413 5.91247 -414 3.313 -415 3.37645 -416 4.89339 -417 5.19552 -418 6.53485 -419 7.98558 -420 3.6091 -421 4.05488 -422 4.29978 -423 4.68265 -424 8.03386 -425 5.59842 -426 4.70185 -427 3.61697 -428 5.69205 -429 7.16982 -430 4.13106 -431 3.56492 -432 4.22082 -433 4.55629 -434 4.58142 -435 5.53457 -436 6.93426 -437 4.80377 -438 3.84526 -439 3.94317 -440 3.45505 -441 5.16289 -442 3.25289 -443 3.95152 -444 5.40892 -445 6.95209 -446 4.15315 -447 5.02186 -448 4.01812 -449 3.96462 -450 7.14857 -451 4.97123 -452 4.79327 -453 4.80934 -454 7.58936 -455 4.07601 -456 4.83387 -457 4.20561 -458 4.19693 -459 4.28828 -460 6.64926 -461 6.10328 -462 5.14523 -463 3.29956 -464 7.82612 -465 6.51338 -466 5.14228 -467 6.36966 -468 4.00039 -469 5.25401 -470 4.90217 -471 3.91685 -472 4.04775 -473 3.71452 -474 4.00893 -475 6.15397 -476 4.73995 -477 4.49103 -478 6.01817 -479 4.51129 -480 4.45673 -481 4.53029 -482 4.39765 -483 4.84946 -484 4.41482 -485 5.22789 -486 4.83751 -487 4.52841 -488 4.37907 -489 4.53931 -490 3.94812 -491 5.60107 -492 7.82411 -493 6.10887 -494 3.61105 -495 6.22222 -496 5.87689 -497 4.37764 -498 5.74756 -499 5.41576 -500 3.94004 -501 5.49027 -502 4.62278 -503 5.90077 -504 3.72543 -505 8.58284 -506 9.99379 -507 3.93429 -508 7.00354 -509 3.34162 -510 6.26251 -511 4.5708 -512 4.61934 -513 6.10199 -514 7.60203 -515 3.49142 -516 6.17078 -517 5.25425 -518 6.30042 -519 5.72046 -520 4.47283 -521 4.83221 -522 4.41013 -523 5.97733 -524 3.99931 -525 4.76894 -526 3.74452 -527 6.2368 -528 4.09343 -529 6.26363 -530 6.83661 -531 3.96425 -532 3.43579 -533 5.77657 -534 5.34581 -535 4.68041 -536 4.37814 -537 5.99737 -538 5.3648 -539 5.4205 -540 4.22935 -541 5.82056 -542 3.98684 -543 3.28936 -544 4.1958 -545 4.33791 -546 4.85201 -547 5.22988 -548 6.51603 -549 4.38544 -550 4.03691 -551 4.28065 -552 7.54771 -553 5.3477 -554 3.98013 -555 3.65612 -556 3.6305 -557 4.96827 -558 7.0639 -559 5.12306 -560 5.26116 -561 3.98468 -562 4.06433 -563 4.43174 -564 9.65465 -565 4.48661 -566 7.06711 -567 6.01908 -568 5.78751 -569 6.07332 -570 8.58829 -571 7.11434 -572 3.46196 -573 5.46102 -574 6.3086 -575 5.34819 -576 6.91082 -577 4.47437 -578 7.81942 -579 6.82906 -580 4.72318 -581 4.06215 -582 9.60519 -583 5.3436 -584 4.7691 -585 4.475 -586 5.84693 -587 5.8161 -588 4.01326 -589 8.52049 -590 6.06203 -591 3.94 -592 6.42148 -593 6.28834 -594 4.88767 -595 7.62703 -596 7.56987 -597 5.54109 -598 4.11926 -599 6.37613 -600 4.92981 -601 4.80206 -602 3.26213 -603 6.37042 -604 5.17572 -605 3.76555 -606 5.26092 -607 4.19725 -608 3.19057 -609 5.88572 -610 5.22575 -611 3.782 -612 4.38116 -613 8.53952 -614 4.30787 -615 4.10562 -616 7.62857 -617 5.65392 -618 5.96086 -619 4.91053 -620 6.14863 -621 5.91276 -622 4.27409 -623 5.55369 -624 4.8645 -625 4.77293 -626 3.55957 -627 4.11882 -628 3.68402 -629 6.55336 -630 5.93665 -631 6.29134 -632 5.06148 -633 6.32722 -634 3.56814 -635 4.97852 -636 5.319 -637 7.67988 -638 4.9724 -639 3.58948 -640 3.2273 -641 4.94275 -642 6.132 -643 4.23477 -644 3.8824 -645 6.47761 -646 5.83872 -647 6.52367 -648 9.09261 -649 4.02275 -650 4.5423 -651 3.77518 -652 9.34733 -653 4.29857 -654 3.53165 -655 3.69875 -656 8.91855 -657 8.27777 -658 4.2927 -659 5.44146 -660 4.88306 -661 4.61662 -662 4.66585 -663 4.08773 -664 5.47614 -665 4.82537 -666 5.34588 -667 5.09433 -668 4.74203 -669 4.80349 -670 5.17033 -671 5.55982 -672 5.85245 -673 8.50255 -674 5.05679 -675 8.2833 -676 4.20019 -677 6.65706 -678 5.50201 -679 3.83497 -680 8.04853 -681 3.98407 -682 4.14575 -683 4.40359 -684 3.83137 -685 7.5115 -686 4.55691 -687 5.02113 -688 4.10109 -689 3.2165 -690 6.76792 -691 7.39527 -692 5.09019 -693 4.66208 -694 4.89628 -695 3.82454 -696 7.89338 -697 4.34543 -698 4.53367 -699 4.2245 -700 7.97378 -701 5.36364 -702 5.48083 -703 5.18437 -704 7.54515 -705 8.01303 -706 6.9711 -707 5.10957 -708 4.65648 -709 4.17603 -710 3.95182 -711 4.30453 -712 4.83791 -713 5.75603 -714 6.26297 -715 4.26312 -716 4.92191 -717 6.49723 -718 5.39117 -719 7.63936 -720 3.8902 -721 5.26165 -722 3.56636 -723 5.80111 -724 8.11139 -725 6.99287 -726 6.0905 -727 4.48145 -728 6.29626 -729 6.41609 -730 4.82834 -731 4.30295 -732 5.95249 -733 9.1162 -734 7.17952 -735 4.41636 -736 7.00516 -737 5.38428 -738 4.57018 -739 5.16323 -740 6.21328 -741 3.84546 -742 8.92755 -743 4.95277 -744 5.60229 -745 4.74588 -746 4.39131 -747 3.53583 -748 4.71464 -749 3.85774 -750 4.32924 -751 4.21807 -752 5.56949 -753 3.92575 -754 4.08047 -755 4.19341 -756 5.43269 -757 5.08675 -758 7.55608 -759 4.60229 -760 5.26588 -761 6.53396 -762 6.09301 -763 8.49182 -764 3.65278 -765 3.7977 -766 4.72003 -767 5.07267 -768 5.39706 -769 5.74691 -770 7.17011 -771 4.60288 -772 6.53685 -773 5.03197 -774 4.75913 -775 5.21044 -776 8.20214 -777 5.1994 -778 5.72262 -779 5.56165 -780 5.11548 -781 4.91619 -782 4.4872 -783 5.68936 -784 4.47124 -785 5.13239 -786 3.56721 -787 6.21762 -788 7.03673 -789 4.75488 -790 6.58105 -791 6.02163 -792 4.0573 -793 5.61253 -794 4.57518 -795 6.37637 -796 4.44356 -797 4.71151 -798 7.569 -799 4.14096 -800 5.59666 -801 4.97895 -802 3.58641 -803 3.31542 -804 5.39692 -805 4.83649 -806 3.97031 -807 5.44832 -808 4.02433 -809 3.60805 -810 5.34786 -811 3.58587 -812 6.69862 -813 3.32895 -814 4.09119 -815 4.58371 -816 3.80674 -817 6.44114 -818 6.223 -819 4.0441 -820 4.80123 -821 4.30222 -822 6.44328 -823 5.35506 -824 6.92359 -825 3.89947 -826 6.49231 -827 4.93294 -828 4.30558 -829 6.36489 -830 6.66548 -831 4.33778 -832 4.17984 -833 5.47755 -834 6.30491 -835 4.8866 -836 3.97457 -837 5.46085 -838 9.49042 -839 5.90533 -840 4.86468 -841 6.77968 -842 4.50722 -843 6.47377 -844 6.71684 -845 7.28311 -846 4.96895 -847 4.62845 -848 4.76509 -849 4.94072 -850 6.06047 -851 5.03461 -852 4.02971 -853 6.54434 -854 6.22769 -855 4.93337 -856 3.68803 -857 3.53863 -858 3.91408 -859 5.65137 -860 7.37176 -861 4.59552 -862 6.93334 -863 3.44661 -864 6.33348 -865 5.02479 -866 5.35196 -867 4.49256 -868 4.90908 -869 5.13244 -870 6.53011 -871 6.74559 -872 6.30754 -873 4.22522 -874 5.22566 -875 4.48669 -876 6.19697 -877 5.32891 -878 5.90513 -879 5.26841 -880 4.69307 -881 6.53259 -882 5.37303 -883 4.84613 -884 6.84862 -885 8.57067 -886 4.51242 -887 4.09543 -888 3.96732 -889 3.54212 -890 7.13459 -891 3.96056 -892 3.53356 -893 7.88643 -894 3.71017 -895 4.50089 -896 6.13237 -897 9.12911 -898 5.99732 -899 4.20221 -900 5.07845 -901 7.39265 -902 3.4358 -903 6.92631 -904 6.19262 -905 8.37263 -906 3.90019 -907 5.27365 -908 8.43827 -909 4.30468 -910 7.89174 -911 4.55601 -912 5.99339 -913 3.9157 -914 6.4819 -915 5.12264 -916 4.56214 -917 4.68284 -918 3.62525 -919 5.50492 -920 3.3911 -921 5.44747 -922 5.1212 -923 3.91631 -924 4.09731 -925 3.90953 -926 3.24567 -927 3.84614 -928 3.16043 -929 5.57228 -930 5.27177 -931 4.70165 -932 6.21956 -933 6.82471 -934 4.75076 -935 5.36529 -936 7.32308 -937 5.56332 -938 4.4607 -939 4.55218 -940 4.41271 -941 4.16343 -942 3.60628 -943 5.64808 -944 5.0414 -945 4.07399 -946 8.06578 -947 5.13059 -948 3.32765 -949 6.87378 -950 6.8715 -951 5.34151 -952 7.4087 -953 4.97386 -954 4.34552 -955 4.26796 -956 4.19602 -957 3.42375 -958 5.85754 -959 5.66926 -960 8.16791 -961 5.85989 -962 5.27303 -963 4.04843 -964 3.73455 -965 6.69521 -966 3.19527 -967 5.41381 -968 4.9373 -969 3.34371 -970 5.277 -971 5.14515 -972 4.27359 -973 3.45159 -974 4.18209 -975 3.97173 -976 6.6748 -977 5.48345 -978 5.03449 -979 6.2847 -980 4.28563 -981 4.42304 -982 8.30151 -983 8.10918 -984 5.2181 -985 6.07928 -986 7.4987 -987 3.86094 -988 7.79415 -989 4.1437 -990 4.22013 -991 4.84238 -992 4.18954 -993 4.63546 -994 5.03533 -995 5.68754 -996 3.66053 -997 4.99215 -998 3.9023 -999 6.64228 -1000 3.66927 -1001 7.59005 -1002 7.84943 -1003 6.12621 -1004 4.28124 -1005 5.25678 -1006 4.49358 -1007 3.83982 -1008 4.1934 -1009 4.15133 -1010 5.9278 -1011 6.99563 -1012 5.9841 -1013 8.90109 -1014 7.652 -1015 7.06981 -1016 4.2989 -1017 4.43713 -1018 3.94864 -1019 5.25543 -1020 5.67571 -1021 4.55211 -1022 5.55705 -1023 4.35115 -1024 3.53053 -1025 4.95254 -1026 5.0626 -1027 5.91199 -1028 3.64351 -1029 4.37971 -1030 6.08977 -1031 8.17508 -1032 9.08688 -1033 6.27308 -1034 5.95361 -1035 5.76509 -1036 4.96722 -1037 5.54433 -1038 4.46812 -1039 5.33303 -1040 6.1708 -1041 6.72636 -1042 5.29678 -1043 4.55251 -1044 8.94976 -1045 3.51383 -1046 9.65923 -1047 5.82992 -1048 4.65022 -1049 4.9202 -1050 5.80657 -1051 3.98189 -1052 5.41173 -1053 4.62405 -1054 3.74779 -1055 3.72462 -1056 4.19243 -1057 8.98073 -1058 5.19122 -1059 4.03261 -1060 3.37577 -1061 5.38447 -1062 7.73223 -1063 8.13835 -1064 4.25916 -1065 4.74505 -1066 7.41008 -1067 7.34217 -1068 4.67887 -1069 7.30568 -1070 4.68001 -1071 4.1343 -1072 4.30236 -1073 4.91304 -1074 3.81816 -1075 4.33604 -1076 7.30661 -1077 3.71466 -1078 5.48295 -1079 5.02695 -1080 5.64749 -1081 4.97985 -1082 5.0635 -1083 4.18982 -1084 6.63653 -1085 6.50817 -1086 4.06997 -1087 4.6217 -1088 3.9456 -1089 5.86381 -1090 4.34958 -1091 4.72955 -1092 7.68562 -1093 4.76352 -1094 4.38867 -1095 7.24025 -1096 8.56583 -1097 7.12327 -1098 7.63126 -1099 4.98995 -1100 5.51299 -1101 6.22274 -1102 8.55485 -1103 4.67541 -1104 5.56093 -1105 4.11592 -1106 5.39012 -1107 4.91738 -1108 4.55802 -1109 9.81191 -1110 9.03824 -1111 4.91096 -1112 5.68686 -1113 5.43295 -1114 4.5376 -1115 7.76145 -1116 6.56722 -1117 5.56414 -1118 6.48512 -1119 7.08636 -1120 4.86379 -1121 5.06374 -1122 4.43781 -1123 6.37562 -1124 8.00607 -1125 5.72785 -1126 7.44421 -1127 8.55665 -1128 5.86133 -1129 9.30702 -1130 5.39706 -1131 9.72751 -1132 3.48947 -1133 4.01753 -1134 6.24749 -1135 5.18517 -1136 3.7291 -1137 5.12041 -1138 5.72019 -1139 8.40329 -1140 4.29092 -1141 6.32703 -1142 4.81643 -1143 6.2805 -1144 8.28778 -1145 6.11067 -1146 4.67958 -1147 6.84822 -1148 6.91117 -1149 8.73063 -1150 5.19026 -1151 8.76106 -1152 7.46817 -1153 4.01789 -1154 4.79286 -1155 4.32607 -1156 8.23324 -1157 4.8066 -1158 6.2838 -1159 6.4227 -1160 9.33195 -1161 4.68307 -1162 6.92146 -1163 6.30771 -1164 7.57291 -1165 7.22122 -1166 6.39772 -1167 5.60827 -1168 3.81708 -1169 3.25156 -1170 8.08526 -1171 7.77888 -1172 4.56788 -1173 8.09687 -1174 3.49101 -1175 4.88315 -1176 9.9666 -1177 5.09136 -1178 4.89489 -1179 8.84418 -1180 4.97986 -1181 5.33513 -1182 5.84621 -1183 3.85303 -1184 4.81127 -1185 7.16765 -1186 5.06141 -1187 7.20188 -1188 4.7328 -1189 5.06946 -1190 3.66104 -1191 4.29874 -1192 3.89884 -1193 6.80851 -1194 5.53224 -1195 7.4339 -1196 5.48488 -1197 8.32916 -1198 5.44496 -1199 5.953 -1200 7.10064 -1201 4.28803 -1202 5.27418 -1203 3.79067 -1204 3.44724 -1205 4.17183 -1206 7.19842 -1207 4.32375 -1208 3.51299 -1209 7.615 -1210 5.69386 -1211 6.73423 -1212 4.51568 -1213 6.08616 -1214 5.21758 -1215 8.14411 -1216 4.06477 -1217 5.22976 -1218 5.07475 -1219 5.92439 -1220 4.9689 -1221 5.09276 -1222 7.43835 -1223 6.71407 -1224 7.02283 -1225 6.5295 -1226 4.40292 -1227 5.83422 -1228 3.70634 -1229 3.52758 -1230 6.0864 -1231 4.79487 -1232 5.2648 -1233 6.60461 -1234 4.95882 -1235 9.41937 -1236 5.13095 -1237 5.28013 -1238 5.44854 -1239 7.71878 -1240 5.56885 -1241 8.76006 -1242 4.56393 -1243 5.90289 -1244 6.17245 -1245 5.47762 -1246 6.85481 -1247 3.17205 -1248 4.86204 -1249 4.43452 -1250 6.97671 -1251 5.3337 -1252 5.43708 -1253 5.01141 -1254 7.23168 -1255 3.70348 -1256 4.66871 -1257 8.66635 -1258 7.63642 -1259 6.58896 -1260 5.63525 -1261 5.18847 -1262 4.60493 -1263 8.295 -1264 7.64526 -1265 3.59029 -1266 8.30829 -1267 5.61988 -1268 4.40627 -1269 8.59727 -1270 7.237 -1271 5.90024 -1272 4.03286 -1273 4.8429 -1274 7.10562 -1275 6.50655 -1276 4.64487 -1277 4.69878 -1278 7.97432 -1279 4.02501 -1280 5.38605 -1281 4.92341 -1282 5.07646 -1283 3.75685 -1284 5.31243 -1285 5.7707 -1286 5.68964 -1287 5.96062 -1288 7.85077 -1289 8.21576 -1290 6.68323 -1291 4.30884 -1292 4.784 -1293 5.21908 -1294 4.82005 -1295 4.40245 -1296 4.02024 -1297 3.62885 -1298 3.78701 -1299 3.55008 -1300 4.66264 -1301 5.58137 -1302 4.33701 -1303 4.93396 -1304 3.52374 -1305 7.13144 -1306 5.36387 -1307 8.97625 -1308 5.18498 -1309 9.05048 -1310 8.19838 -1311 4.42885 -1312 8.34232 -1313 3.94079 -1314 4.41342 -1315 7.69708 -1316 4.03687 -1317 4.88914 -1318 4.97387 -1319 5.60074 -1320 3.64249 -1321 3.99359 -1322 5.05358 -1323 7.22987 -1324 9.02307 -1325 3.92924 -1326 5.90228 -1327 6.68582 -1328 9.38571 -1329 4.23719 -1330 3.91918 -1331 6.00412 -1332 8.07751 -1333 4.80956 -1334 5.50254 -1335 9.28165 -1336 4.67539 -1337 4.8626 -1338 6.60907 -1339 6.82969 -1340 5.02785 -1341 4.99683 -1342 7.89183 -1343 9.24249 -1344 5.19206 -1345 4.25973 -1346 5.32035 -1347 4.13126 -1348 5.9532 -1349 6.48769 -1350 3.89076 -1351 5.66956 -1352 7.52047 -1353 5.81182 -1354 7.64656 -1355 5.39628 -1356 5.38481 -1357 4.57187 -1358 7.85941 -1359 3.19563 -1360 4.16723 -1361 7.58062 -1362 5.43379 -1363 4.5491 -1364 9.55822 -1365 5.41463 -1366 3.93709 -1367 5.58151 -1368 7.63004 -1369 7.19653 -1370 6.21067 -1371 4.16437 -1372 7.03794 -1373 6.03681 -1374 7.32543 -1375 8.75148 -1376 9.85852 -1377 5.51133 -1378 8.69481 -1379 5.56414 -1380 6.99819 -1381 3.55529 -1382 5.3928 -1383 4.84586 -1384 7.9864 -1385 6.53059 -1386 4.99042 -1387 4.16435 -1388 6.80177 -1389 5.45811 -1390 5.63078 -1391 3.96717 -1392 3.86136 -1393 3.20475 -1394 8.36851 -1395 5.32051 -1396 4.09927 -1397 4.30378 -1398 6.53894 -1399 9.57378 -1400 6.55006 -1401 6.34936 -1402 4.66909 -1403 4.92672 -1404 6.29711 -1405 6.13071 -1406 7.07983 -1407 3.38745 -1408 6.19644 -1409 3.70599 -1410 8.72514 -1411 5.01474 -1412 6.35499 -1413 8.51238 -1414 6.1006 -1415 8.31744 -1416 8.69373 -1417 5.3837 -1418 3.29415 -1419 3.17415 -1420 4.65337 -1421 3.77393 -1422 3.8875 -1423 7.11242 -1424 4.79596 -1425 4.074 -1426 4.91429 -1427 5.40041 -1428 4.50152 -1429 6.82147 -1430 7.03258 -1431 9.84567 -1432 5.28303 -1433 3.28496 -1434 5.3585 -1435 5.80604 -1436 6.24381 -1437 3.80452 -1438 8.7948 -1439 6.69635 -1440 5.38362 -1441 8.19043 -1442 6.65785 -1443 5.14952 -1444 8.66002 -1445 6.98012 -1446 5.82976 -1447 4.7057 -1448 4.19243 -1449 4.46766 -1450 4.94058 -1451 8.7967 -1452 5.51495 -1453 4.0043 -1454 5.16481 -1455 6.42095 -1456 6.01744 -1457 3.71544 -1458 5.73042 -1459 8.12425 -1460 3.95837 -1461 7.51813 -1462 9.24805 -1463 7.61923 -1464 4.43411 -1465 3.83737 -1466 3.95716 -1467 7.15998 -1468 5.65757 -1469 3.42947 -1470 7.66079 -1471 5.68317 -1472 4.17696 -1473 3.43991 -1474 4.08425 -1475 6.28225 -1476 5.03584 -1477 5.6927 -1478 4.82533 -1479 7.60644 -1480 3.80633 -1481 7.85466 -1482 4.0313 -1483 5.53088 -1484 4.79008 -1485 6.91984 -1486 7.05097 -1487 5.06758 -1488 5.28323 -1489 3.97634 -1490 7.07548 -1491 6.99741 -1492 5.39725 -1493 3.70965 -1494 5.20786 -1495 3.35697 -1496 8.30445 -1497 6.24412 -1498 5.02406 -1499 4.3192 -1500 3.75267 -1501 3.75419 -1502 6.70461 -1503 7.29339 -1504 7.25608 -1505 4.67025 -1506 7.00533 -1507 4.95845 -1508 5.9428 -1509 8.22798 -1510 6.09413 -1511 6.69181 -1512 4.68312 -1513 8.54909 -1514 9.17576 -1515 4.67904 -1516 5.70206 -1517 3.82361 -1518 4.83649 -1519 4.49647 -1520 6.62776 -1521 3.87563 -1522 3.82749 -1523 7.136 -1524 5.46372 -1525 7.49927 -1526 4.77056 -1527 6.99557 -1528 5.41681 -1529 5.67049 -1530 9.09783 -1531 6.2033 -1532 5.7676 -1533 6.10859 -1534 5.64874 -1535 4.25459 -1536 4.24224 -1537 7.54998 -1538 4.6898 -1539 3.65217 -1540 6.77849 -1541 7.38216 -1542 5.01269 -1543 9.63731 -1544 5.93312 -1545 6.67582 -1546 4.31103 -1547 7.11233 -1548 9.36116 -1549 5.26081 -1550 5.69302 -1551 3.48767 -1552 6.63839 -1553 6.58539 -1554 7.28664 -1555 3.81367 -1556 4.57632 -1557 5.76642 -1558 5.47675 -1559 4.10006 -1560 7.47012 -1561 4.71169 -1562 7.33109 -1563 3.61097 -1564 7.2049 -1565 5.17177 -1566 5.69784 -1567 5.66136 -1568 5.26364 -1569 5.80611 -1570 6.17947 -1571 7.04854 -1572 8.77365 -1573 4.85623 -1574 3.77604 -1575 4.3199 -1576 5.59875 -1577 7.20581 -1578 8.22279 -1579 6.75557 -1580 6.15071 -1581 8.40391 -1582 5.84813 -1583 6.71808 -1584 9.4805 -1585 5.78575 -1586 5.53995 -1587 6.22247 -1588 6.41044 -1589 4.20686 -1590 5.13741 -1591 9.43675 -1592 4.7142 -1593 3.98455 -1594 7.70331 -1595 5.7983 -1596 5.38736 -1597 6.27297 -1598 5.693 -1599 7.78512 -1600 9.5604 -1601 3.88507 -1602 5.01882 -1603 7.63484 -1604 5.06804 -1605 4.18197 -1606 4.43359 -1607 4.34535 -1608 4.02395 -1609 7.2371 -1610 8.47037 -1611 4.49746 -1612 8.23039 -1613 4.43065 -1614 4.82179 -1615 7.15842 -1616 4.60424 -1617 4.60142 -1618 4.98153 -1619 4.82699 -1620 6.48302 -1621 5.81494 -1622 9.77863 -1623 9.18164 -1624 8.97711 -1625 6.39388 -1626 4.3432 -1627 8.33951 -1628 5.09327 -1629 5.99447 -1630 4.3455 -1631 6.29698 -1632 3.33295 -1633 6.59657 -1634 6.95084 -1635 3.19532 -1636 5.517 -1637 5.79544 -1638 5.11606 -1639 5.09728 -1640 6.96594 -1641 4.43697 -1642 8.62959 -1643 6.33994 -1644 4.6679 -1645 6.9788 -1646 4.62802 -1647 9.58879 -1648 4.3363 -1649 5.16264 -1650 7.16104 -1651 5.92186 -1652 7.45343 -1653 3.24729 -1654 9.37208 +1070 +1 3.91738 +2 7.55237 +3 3.18562 +4 3.5852 +5 3.34479 +6 3.73128 +7 3.77138 +8 3.19082 +9 7.51361 +10 4.04468 +11 3.36627 +12 7.87989 +13 5.05816 +14 8.84447 +15 5.41757 +16 4.16136 +17 4.84435 +18 4.02347 +19 4.9301 +20 7.94423 +21 3.44768 +22 4.34158 +23 4.3478 +24 3.60096 +25 4.84349 +26 3.96906 +27 3.88233 +28 5.28742 +29 5.43455 +30 3.48461 +31 3.59103 +32 3.45245 +33 3.9935 +34 6.50947 +35 3.73577 +36 4.662 +37 5.18023 +38 4.19423 +39 4.77983 +40 3.61769 +41 3.51109 +42 3.45271 +43 4.01533 +44 4.09724 +45 3.71644 +46 3.89469 +47 4.39414 +48 4.00442 +49 3.88147 +50 4.03378 +51 4.13034 +52 3.98938 +53 3.69209 +54 3.49476 +55 5.33922 +56 4.82279 +57 5.40666 +58 6.79099 +59 4.62599 +60 4.85644 +61 3.46601 +62 5.48982 +63 4.5338 +64 3.97146 +65 7.7189 +66 5.01283 +67 6.94638 +68 3.11996 +69 3.78781 +70 4.00492 +71 5.92212 +72 3.64592 +73 3.49202 +74 4.36965 +75 4.83947 +76 3.77228 +77 6.53088 +78 3.21591 +79 3.65074 +80 3.23874 +81 3.54739 +82 4.09072 +83 5.16083 +84 3.59035 +85 5.04317 +86 3.21313 +87 4.23988 +88 4.59938 +89 3.40027 +90 4.88608 +91 5.00226 +92 3.72866 +93 4.0959 +94 3.28367 +95 6.13169 +96 3.5005 +97 3.62952 +98 6.80301 +99 3.50828 +100 3.05818 +101 4.01934 +102 4.10224 +103 3.91963 +104 4.64641 +105 3.99536 +106 4.90056 +107 3.81607 +108 3.41513 +109 4.46578 +110 3.71995 +111 3.44521 +112 3.25778 +113 3.50023 +114 3.79012 +115 7.61952 +116 3.82268 +117 3.94652 +118 3.11413 +119 4.4573 +120 4.68162 +121 4.72637 +122 3.53324 +123 3.58513 +124 3.39159 +125 4.3084 +126 3.64847 +127 4.3647 +128 3.96477 +129 5.47603 +130 3.96583 +131 4.62013 +132 4.41683 +133 4.58155 +134 4.41476 +135 3.42305 +136 4.1761 +137 3.73469 +138 3.76651 +139 3.15357 +140 4.22003 +141 3.51662 +142 4.05849 +143 6.45324 +144 4.17121 +145 4.72585 +146 4.32074 +147 7.71819 +148 5.39753 +149 4.1236 +150 6.47151 +151 4.80758 +152 3.69728 +153 6.22716 +154 3.55543 +155 7.51878 +156 9.50646 +157 3.57993 +158 4.74281 +159 4.65614 +160 3.60788 +161 3.71183 +162 4.56901 +163 4.10871 +164 4.41994 +165 6.81075 +166 4.03509 +167 4.45056 +168 5.20029 +169 6.2745 +170 7.35114 +171 4.17523 +172 3.6251 +173 3.57591 +174 3.6414 +175 5.28596 +176 3.82407 +177 5.65158 +178 4.20842 +179 3.77811 +180 5.43321 +181 5.18625 +182 4.49976 +183 4.97178 +184 3.84276 +185 4.46627 +186 4.51902 +187 3.8899 +188 4.36916 +189 4.75552 +190 4.16856 +191 4.06548 +192 3.33294 +193 3.48239 +194 4.93251 +195 4.3728 +196 3.41397 +197 4.83119 +198 4.38339 +199 3.5889 +200 5.91061 +201 4.49185 +202 8.17731 +203 4.73179 +204 3.18202 +205 4.56911 +206 4.04473 +207 4.07401 +208 6.54126 +209 6.69524 +210 4.66486 +211 4.13868 +212 4.50834 +213 3.55396 +214 3.98831 +215 3.94324 +216 7.08896 +217 4.18558 +218 5.90884 +219 4.87332 +220 4.82005 +221 3.99091 +222 3.97785 +223 3.39326 +224 3.8328 +225 3.3308 +226 4.94912 +227 4.41611 +228 4.49345 +229 3.41196 +230 4.74057 +231 4.64235 +232 4.83891 +233 4.16951 +234 3.50746 +235 4.99458 +236 3.45719 +237 4.683 +238 5.28641 +239 5.61788 +240 5.61522 +241 3.79746 +242 4.87237 +243 4.08485 +244 5.90698 +245 3.5431 +246 4.07318 +247 3.66563 +248 4.5551 +249 4.14573 +250 4.54048 +251 3.5992 +252 3.97861 +253 3.26077 +254 3.93997 +255 4.12929 +256 3.47243 +257 5.87743 +258 5.07752 +259 4.00828 +260 3.9362 +261 3.75665 +262 5.97135 +263 5.84328 +264 4.9672 +265 5.32813 +266 4.4521 +267 4.55898 +268 4.16993 +269 3.40048 +270 4.419 +271 3.87867 +272 4.91362 +273 3.85167 +274 9.0892 +275 4.09411 +276 6.15069 +277 4.2166 +278 5.34287 +279 3.7576 +280 3.50546 +281 5.31717 +282 7.44153 +283 5.04086 +284 3.71382 +285 4.12136 +286 3.98997 +287 4.07837 +288 4.04532 +289 4.77052 +290 8.27474 +291 5.24709 +292 5.27004 +293 3.94602 +294 5.43868 +295 3.88948 +296 3.3666 +297 3.57047 +298 3.43554 +299 5.63913 +300 6.94933 +301 4.78564 +302 6.76646 +303 3.14232 +304 3.13465 +305 3.64729 +306 5.5816 +307 3.57949 +308 7.49792 +309 3.91438 +310 4.64724 +311 6.70326 +312 4.17163 +313 5.64432 +314 4.49448 +315 5.39907 +316 5.65307 +317 6.76122 +318 3.59349 +319 5.70452 +320 3.48566 +321 4.70847 +322 4.17714 +323 5.15087 +324 3.61501 +325 6.62949 +326 6.1972 +327 6.62959 +328 5.2226 +329 3.76699 +330 3.29453 +331 3.13512 +332 5.65628 +333 7.04874 +334 5.51347 +335 4.63142 +336 8.56072 +337 4.08195 +338 3.52342 +339 5.50069 +340 3.74775 +341 3.36591 +342 3.41916 +343 3.77132 +344 3.51926 +345 5.86771 +346 4.31784 +347 6.83761 +348 3.10445 +349 4.22768 +350 4.17305 +351 4.9844 +352 4.17336 +353 3.21244 +354 3.55883 +355 3.90087 +356 4.15263 +357 3.65506 +358 3.40736 +359 3.68842 +360 7.03764 +361 3.55745 +362 3.57935 +363 7.35656 +364 8.52301 +365 4.00378 +366 4.61333 +367 3.68717 +368 3.53922 +369 4.7888 +370 4.07485 +371 3.15544 +372 5.07119 +373 4.79565 +374 3.49631 +375 3.18232 +376 6.95276 +377 6.30144 +378 6.13813 +379 5.50115 +380 4.68716 +381 5.67375 +382 4.51342 +383 4.42579 +384 3.74818 +385 5.07376 +386 3.64618 +387 4.9824 +388 3.45698 +389 8.04085 +390 4.0331 +391 4.20109 +392 3.29223 +393 4.14502 +394 4.02792 +395 3.34143 +396 3.73637 +397 3.46102 +398 4.14516 +399 5.66763 +400 4.61187 +401 4.28971 +402 3.20221 +403 4.65484 +404 7.21708 +405 4.17936 +406 4.13321 +407 6.02093 +408 5.45983 +409 5.07391 +410 5.68338 +411 3.77818 +412 3.71082 +413 3.57219 +414 3.2867 +415 3.88622 +416 4.11163 +417 4.20116 +418 6.2444 +419 4.00852 +420 5.26633 +421 3.85156 +422 3.2121 +423 3.65007 +424 5.03468 +425 3.72218 +426 3.96678 +427 3.41402 +428 5.43723 +429 7.48029 +430 4.43692 +431 3.39487 +432 3.94282 +433 3.71951 +434 3.80379 +435 4.2047 +436 9.55896 +437 8.89414 +438 6.85417 +439 8.98058 +440 6.11093 +441 6.83507 +442 5.67934 +443 5.76844 +444 3.39898 +445 8.1634 +446 4.03546 +447 3.61318 +448 4.63373 +449 3.97636 +450 3.43932 +451 8.68304 +452 3.56202 +453 3.50059 +454 3.09297 +455 4.35654 +456 4.13972 +457 3.71373 +458 3.69475 +459 4.84808 +460 4.2085 +461 3.76856 +462 4.39596 +463 5.91887 +464 3.32415 +465 5.87664 +466 5.00442 +467 3.82894 +468 4.69313 +469 3.46917 +470 3.98574 +471 5.65608 +472 3.57291 +473 4.0683 +474 4.65558 +475 3.22937 +476 4.2787 +477 4.50257 +478 3.26286 +479 4.20436 +480 4.04642 +481 4.86033 +482 4.29968 +483 4.89217 +484 5.50604 +485 4.44984 +486 4.24023 +487 4.59551 +488 3.16628 +489 4.0757 +490 5.65043 +491 4.18797 +492 5.20735 +493 4.80821 +494 5.59219 +495 6.17683 +496 3.78345 +497 3.26474 +498 3.70674 +499 3.99374 +500 3.78124 +501 3.55039 +502 4.12185 +503 4.66323 +504 5.63059 +505 4.25073 +506 3.84935 +507 4.0509 +508 4.48564 +509 3.52281 +510 3.94489 +511 5.48341 +512 3.88264 +513 7.25298 +514 4.55006 +515 5.26364 +516 3.7434 +517 4.04069 +518 4.44375 +519 4.73974 +520 3.86839 +521 3.20217 +522 3.90926 +523 4.74632 +524 3.61522 +525 3.59702 +526 7.89714 +527 5.01995 +528 4.96779 +529 4.56918 +530 4.54958 +531 4.38031 +532 3.55304 +533 3.32456 +534 3.11799 +535 5.69488 +536 5.11266 +537 7.49023 +538 7.58861 +539 6.84873 +540 7.76601 +541 6.31956 +542 4.25074 +543 3.7225 +544 8.97622 +545 4.73498 +546 5.33959 +547 8.01571 +548 4.95785 +549 4.1107 +550 7.95354 +551 5.2333 +552 6.35177 +553 5.16681 +554 5.55464 +555 7.81677 +556 5.69744 +557 3.7317 +558 6.99511 +559 7.1344 +560 8.43019 +561 3.46235 +562 4.08409 +563 4.44638 +564 4.06135 +565 5.65873 +566 3.49033 +567 4.07254 +568 6.169 +569 5.12606 +570 7.54365 +571 4.90841 +572 3.23677 +573 5.13756 +574 4.48408 +575 6.03298 +576 8.27358 +577 5.69798 +578 4.63704 +579 6.20678 +580 7.15427 +581 5.57024 +582 5.41772 +583 3.89091 +584 3.35938 +585 7.58838 +586 4.00751 +587 4.56115 +588 5.47358 +589 8.57675 +590 5.45976 +591 3.47822 +592 8.21953 +593 7.93863 +594 7.19249 +595 3.52268 +596 3.64874 +597 7.13099 +598 4.60634 +599 4.18461 +600 4.36724 +601 4.2294 +602 7.3886 +603 9.24021 +604 6.80262 +605 7.51836 +606 3.9252 +607 4.06416 +608 4.07917 +609 3.5599 +610 3.47922 +611 4.12273 +612 4.21432 +613 3.75102 +614 9.0125 +615 6.22589 +616 9.54799 +617 6.77477 +618 3.14672 +619 8.12051 +620 5.22005 +621 4.38863 +622 3.33393 +623 4.7056 +624 4.80698 +625 6.28505 +626 5.41011 +627 9.07656 +628 7.33285 +629 6.28756 +630 5.4201 +631 9.9129 +632 7.3044 +633 7.39513 +634 6.03248 +635 7.91728 +636 5.64966 +637 9.0611 +638 4.56809 +639 7.20948 +640 5.84123 +641 4.12376 +642 3.12146 +643 7.69069 +644 5.37986 +645 5.64197 +646 6.18753 +647 7.99942 +648 8.2794 +649 8.51425 +650 7.4321 +651 7.55473 +652 5.66774 +653 3.98353 +654 9.40049 +655 4.50279 +656 6.32621 +657 7.27075 +658 9.0416 +659 7.04504 +660 3.72643 +661 4.31384 +662 3.73415 +663 5.59389 +664 3.79965 +665 3.66578 +666 4.79654 +667 7.1365 +668 8.72554 +669 8.01942 +670 9.92923 +671 5.9152 +672 3.72678 +673 5.76192 +674 4.9948 +675 5.07356 +676 7.20352 +677 8.56616 +678 6.38388 +679 5.38313 +680 5.45651 +681 7.66012 +682 9.06826 +683 7.11167 +684 6.24949 +685 5.15223 +686 3.95378 +687 6.56125 +688 9.07553 +689 7.85376 +690 9.15768 +691 7.51175 +692 8.11991 +693 5.78963 +694 5.81751 +695 4.06869 +696 6.56785 +697 7.69183 +698 9.23402 +699 7.89469 +700 3.59375 +701 6.2257 +702 4.36727 +703 5.09939 +704 6.90278 +705 8.38041 +706 4.11079 +707 7.6595 +708 9.63738 +709 4.89219 +710 9.00464 +711 3.9846 +712 8.64244 +713 7.32211 +714 6.86834 +715 7.88121 +716 7.55419 +717 6.04332 +718 3.80333 +719 8.11514 +720 6.49019 +721 4.20692 +722 8.85572 +723 3.69571 +724 4.42937 +725 4.04154 +726 7.0111 +727 6.44705 +728 5.83984 +729 9.03959 +730 7.76447 +731 5.01853 +732 9.38383 +733 5.0684 +734 7.08387 +735 6.47662 +736 6.41813 +737 8.69777 +738 6.87701 +739 4.03821 +740 7.03044 +741 4.798 +742 9.94971 +743 8.11067 +744 3.72053 +745 9.41844 +746 7.63128 +747 6.03551 +748 6.29266 +749 8.46532 +750 9.46826 +751 8.37447 +752 7.22681 +753 5.40029 +754 5.47316 +755 8.24761 +756 6.89344 +757 8.63635 +758 7.50483 +759 7.71848 +760 7.44538 +761 5.15159 +762 7.08838 +763 3.71796 +764 5.71059 +765 7.99654 +766 8.72605 +767 6.51425 +768 3.62095 +769 9.11473 +770 5.68545 +771 7.45047 +772 8.05071 +773 8.04036 +774 5.02478 +775 5.82261 +776 8.89011 +777 4.92923 +778 6.31438 +779 4.96618 +780 8.49532 +781 8.58033 +782 7.57812 +783 9.38657 +784 5.7485 +785 3.92081 +786 5.48514 +787 6.79212 +788 7.18365 +789 9.55776 +790 4.15582 +791 5.62394 +792 7.96665 +793 7.42844 +794 7.87113 +795 7.31753 +796 8.99198 +797 7.0081 +798 7.51652 +799 7.40407 +800 7.75685 +801 5.41255 +802 9.60714 +803 6.19067 +804 7.08149 +805 7.44784 +806 8.7182 +807 8.9139 +808 6.16695 +809 7.66196 +810 6.9707 +811 5.62023 +812 6.54932 +813 9.16858 +814 9.66961 +815 7.42824 +816 7.18322 +817 8.36919 +818 8.56526 +819 6.52432 +820 6.82222 +821 5.67187 +822 6.46807 +823 5.14649 +824 5.47163 +825 8.88862 +826 7.39699 +827 5.30778 +828 8.81393 +829 5.40132 +830 6.6407 +831 5.01861 +832 7.77048 +833 7.49633 +834 6.98006 +835 9.95224 +836 7.33097 +837 7.58834 +838 5.04426 +839 7.88145 +840 7.48511 +841 9.88795 +842 5.09012 +843 9.91689 +844 7.22846 +845 6.53512 +846 6.70696 +847 7.06755 +848 7.37495 +849 6.95163 +850 8.04446 +851 9.91635 +852 9.00361 +853 7.06779 +854 6.24566 +855 5.4922 +856 7.59973 +857 6.56581 +858 6.5848 +859 5.83098 +860 7.69067 +861 8.13635 +862 4.49008 +863 7.50638 +864 8.14792 +865 6.05405 +866 6.48721 +867 6.57088 +868 5.66667 +869 8.4648 +870 7.75167 +871 7.00912 +872 8.21035 +873 5.32159 +874 6.63386 +875 5.64986 +876 9.47542 +877 6.81807 +878 9.00315 +879 6.75571 +880 9.6152 +881 8.63138 +882 7.75182 +883 5.13177 +884 6.05928 +885 6.25013 +886 6.93017 +887 7.31037 +888 7.23314 +889 9.06237 +890 8.24918 +891 4.95504 +892 6.70297 +893 7.72804 +894 7.64767 +895 8.52754 +896 5.90919 +897 6.9748 +898 7.21757 +899 6.05393 +900 9.80054 +901 8.74655 +902 3.83803 +903 9.68042 +904 9.62494 +905 5.39496 +906 6.57681 +907 5.42501 +908 8.81985 +909 7.94299 +910 4.16733 +911 4.9529 +912 4.86062 +913 5.59461 +914 5.87755 +915 6.77045 +916 9.08622 +917 7.41524 +918 6.90708 +919 4.55533 +920 6.18523 +921 8.94331 +922 6.64697 +923 9.10383 +924 8.20323 +925 7.49072 +926 7.54272 +927 7.49078 +928 9.12582 +929 6.89183 +930 5.73517 +931 7.85361 +932 8.39903 +933 6.48097 +934 6.25044 +935 4.03875 +936 4.55292 +937 7.33609 +938 9.18658 +939 6.96883 +940 7.99932 +941 5.91885 +942 6.23618 +943 5.83757 +944 7.7807 +945 6.25864 +946 7.24783 +947 7.41943 +948 6.28265 +949 5.0322 +950 8.73487 +951 9.88193 +952 3.93303 +953 9.57342 +954 4.76717 +955 6.71731 +956 4.16248 +957 7.94636 +958 3.89684 +959 7.48092 +960 5.79365 +961 7.66599 +962 8.57272 +963 6.78685 +964 7.06392 +965 3.30771 +966 6.61762 +967 7.57868 +968 5.90212 +969 4.69431 +970 8.22296 +971 8.40689 +972 7.24465 +973 8.68647 +974 7.02668 +975 7.74402 +976 5.70809 +977 9.32647 +978 6.87185 +979 9.7396 +980 9.05184 +981 8.0489 +982 7.50792 +983 9.23393 +984 7.49812 +985 7.73212 +986 6.70682 +987 8.34251 +988 8.08583 +989 8.2124 +990 7.32018 +991 7.18277 +992 7.48247 +993 9.34303 +994 9.28875 +995 8.46528 +996 7.0117 +997 8.59771 +998 7.40031 +999 7.13226 +1000 6.87561 +1001 4.98883 +1002 8.21809 +1003 8.01119 +1004 8.94152 +1005 8.6532 +1006 8.36953 +1007 8.6758 +1008 6.45712 +1009 6.09722 +1010 9.42396 +1011 9.85359 +1012 7.98878 +1013 5.65571 +1014 8.4793 +1015 8.81998 +1016 7.46009 +1017 7.86872 +1018 8.3357 +1019 7.46395 +1020 6.32018 +1021 7.7025 +1022 5.18141 +1023 7.43043 +1024 6.97826 +1025 6.41853 +1026 7.59202 +1027 8.71365 +1028 9.32541 +1029 5.46223 +1030 7.26274 +1031 9.2891 +1032 7.24669 +1033 9.91561 +1034 9.93819 +1035 8.67467 +1036 6.40029 +1037 9.85221 +1038 8.36583 +1039 9.78713 +1040 7.82337 +1041 8.49838 +1042 9.92674 +1043 9.36289 +1044 6.78269 +1045 7.83592 +1046 7.82182 +1047 6.69416 +1048 7.85819 +1049 6.86977 +1050 5.40738 +1051 9.6232 +1052 8.8957 +1053 7.20182 +1054 8.02521 +1055 8.5933 +1056 6.48142 +1057 7.35396 +1058 8.11056 +1059 5.44143 +1060 4.5369 +1061 8.40759 +1062 8.98179 +1063 5.98854 +1064 7.69316 +1065 7.96175 +1066 8.07101 +1067 7.66336 +1068 7.91126 +1069 7.40687 +1070 6.78572 $EndElementData diff --git a/test/user/testdata/shark_22_ascii_gmshApp.msh b/test/user/testdata/shark_22_ascii_gmshApp.msh deleted file mode 100644 index 9cf34972..00000000 --- a/test/user/testdata/shark_22_ascii_gmshApp.msh +++ /dev/null @@ -1,2315 +0,0 @@ -$MeshFormat -2.2 0 8 -$EndMeshFormat -$Nodes -652 -1 -0.07334359999999999 0.08167480000000001 0.056402 -2 -0.07291259999999999 0.0537921 0.00170478 -3 -0.072634 0.0799069 0.0578949 -4 -0.0715817 0.0520377 0.00292576 -5 -0.0701949 0.08025690000000001 0.0450431 -6 -0.06876980000000001 0.060971 0.00326551 -7 -0.06778000000000001 0.060358 0.00473741 -8 -0.06727959999999999 0.08092489999999999 0.0425553 -9 -0.0658074 0.0806443 0.0552302 -10 -0.064933 0.0788176 0.0453762 -11 -0.0636555 0.0610198 0.00141989 -12 -0.0636111 0.0566004 -0.000556663 -13 -0.0636791 0.0819076 0.0524468 -14 -0.0623445 0.0580268 0.00335683 -15 -0.0624856 0.06710579999999999 0.00581638 -16 -0.0601398 0.0781111 0.0317589 -17 -0.0599443 0.0685632 0.009924489999999999 -18 -0.0592787 0.0571239 0.00105116 -19 -0.0587906 0.07199990000000001 0.0117948 -20 -0.0575605 0.0730663 0.016213 -21 -0.057624 0.0811803 0.0403639 -22 -0.0572339 0.0769387 0.0223219 -23 -0.0559974 0.0749629 0.0235691 -24 -0.0542321 0.0763209 0.0344665 -25 -0.0540672 0.0649483 0.008218130000000001 -26 -0.0541685 0.06611350000000001 0.00437935 -27 -0.0532966 0.0805356 0.0466758 -28 -0.0517252 0.07611850000000001 0.0183218 -29 -0.0505257 0.06887699999999999 0.0152572 -30 -0.0503803 0.07726379999999999 0.0406423 -31 -0.0472855 0.0641041 0.00381053 -32 -0.0469016 0.0648796 0.00821733 -33 -0.0474599 0.07272679999999999 0.0265623 -34 -0.0464733 0.070912 0.0103373 -35 -0.0444756 0.07556740000000001 0.0221683 -36 -0.0440208 0.07743129999999999 0.0371107 -37 -0.0434135 0.0685101 0.0213943 -38 -0.0425401 0.0668787 0.0159114 -39 -0.0405353 0.07301630000000001 0.0309862 -40 -0.0386417 0.073548 0.0160682 -41 -0.037401 0.0664899 0.0122191 -42 -0.0358693 0.06894450000000001 0.0243885 -43 -0.0351058 0.06877709999999999 0.0124837 -44 -0.0333614 0.07116500000000001 0.0238503 -45 -0.0325564 0.0696271 0.024504 -46 -0.032455 0.0625178 0.0200737 -47 -0.0305469 0.0729973 0.0173921 -48 -0.0276941 0.06523859999999999 0.0128238 -49 -0.0272717 0.0628782 0.0141328 -50 -0.0263428 0.00735496 0.00505748 -51 -0.0256055 0.00658056 0.00327552 -52 -0.0252856 0.0610141 0.0227762 -53 -0.0250237 -0.00678856 0.00359213 -54 -0.0242889 -0.00589458 0.00589675 -55 -0.0216872 0.0639735 0.0255561 -56 -0.0215721 -0.0119744 0.00619585 -57 -0.0195136 0.0542304 0.0216195 -58 -0.0168343 0.06495339999999999 0.0236547 -59 -0.0161373 -0.00420129 0.00881529 -60 -0.0148726 0.0585475 0.0106707 -61 -0.0140647 0.0517836 0.0159197 -62 -0.0142986 0.0543801 0.0051496 -63 -0.0139611 -0.0178642 0.00651265 -64 -0.0139803 0.0554055 0.0115694 -65 -0.0124373 0.0606817 0.0122622 -66 -0.0127423 0.0580719 0.0285553 -67 -0.0127412 -0.07042320000000001 0.0234664 -68 -0.0126173 -0.0801905 0.022154 -69 -0.0125269 0.0592002 0.0346418 -70 -0.0122498 -0.080596 0.0191154 -71 -0.0121442 -0.0691943 0.0191352 -72 -0.0123618 0.0658492 0.0197519 -73 -0.0121018 -0.063334 0.0245151 -74 -0.0118539 0.0462485 0.0243954 -75 -0.0111067 0.0637388 0.0161162 -76 -0.0110042 -0.0624802 0.0276395 -77 -0.0109072 0.046219 0.0183571 -78 -0.0107037 -0.000325242 0.00950432 -79 -0.010183 -0.0121386 0.00674337 -80 -0.009774420000000001 -0.0638147 0.0162637 -81 -0.0097669 -0.06993340000000001 0.0156591 -82 -0.00942656 -0.0836042 0.0182705 -83 -0.009320999999999999 -0.0852334 0.0216727 -84 -0.00803502 0.0401179 0.0263407 -85 -0.00857808 -0.0579335 0.0163943 -86 -0.007931580000000001 -0.0190616 0.0121625 -87 -0.00782675 0.0573514 0.028038 -88 -0.00773028 -0.0620746 0.0302044 -89 -0.00764665 0.0537773 0.00961295 -90 -0.00721562 -0.0507362 0.0224357 -91 -0.00717408 -0.0528249 0.0179333 -92 -0.00651588 -0.00739691 0.013024 -93 -0.00691116 -0.00014073 0.00823716 -94 -0.00661131 0.044183 0.0123 -95 -0.00658663 0.0535365 0.0326225 -96 -0.00630954 -0.08506569999999999 0.0194796 -97 -0.00616497 -0.0797841 0.0261073 -98 -0.00582999 -0.0494502 0.0287705 -99 -0.00563359 0.0476479 0.00934546 -100 -0.00506609 -0.0425596 0.0250833 -101 -0.00453974 -0.0405694 0.0173853 -102 -0.00447266 0.0319291 0.0205877 -103 -0.00434886 0.0267225 0.00648417 -104 -0.00418386 0.0253438 0.008421959999999999 -105 -0.0041733 -0.0606038 0.0122716 -106 -0.00385183 0.0479538 0.00869149 -107 -0.00333705 0.051389 0.031593 -108 -0.00333565 -0.06938809999999999 0.0119551 -109 -0.00333748 -0.0650683 0.0110291 -110 -0.00292457 0.0475597 0.0319288 -111 -0.00280471 -0.0353375 0.0238411 -112 -0.00273019 -0.0493159 0.0135756 -113 -0.00255346 -0.0452657 0.0126112 -114 -0.00249178 -0.0598565 0.010934 -115 -0.00247351 -0.0533955 0.0149632 -116 -0.00280465 0.0288144 0.0300227 -117 -0.00225175 -0.030519 0.0236922 -118 -0.00205777 -0.0595101 0.00715068 -119 -0.0018581 -0.0627033 0.0116048 -120 -0.00150112 -0.0384203 0.0313885 -121 -0.00143547 -0.0337232 0.0176227 -122 -0.00136747 -0.062725 0.0150152 -123 -0.000884775 -0.0587825 0.0143119 -124 -0.000624659 -0.0247814 0.0257906 -125 -0.000489974 0.0225414 0.0188523 -126 -6.05566e-05 0.0171338 0.0234086 -127 0.00150381 0.0360475 0.00675461 -128 0.000282178 -0.0241462 0.0174969 -129 0.000347869 -0.06752370000000001 0.0324883 -130 0.000429839 -0.0422219 0.0349169 -131 0.00028168 -0.0273698 0.0312235 -132 0.000952705 -0.0267391 0.0143612 -133 0.00105244 0.0186951 0.00689988 -134 0.0011109 -0.0779453 0.014663 -135 0.00137887 0.00842564 0.0258445 -136 0.00107238 -0.0462225 0.00980545 -137 0.00158113 -0.0561697 0.005809 -138 0.00165921 -0.0142314 0.0114909 -139 0.00169065 -0.00330978 0.027848 -140 0.0017282 0.0264299 0.00972258 -141 0.00196109 -0.062067 0.0125082 -142 0.00198494 -0.0249792 0.0122768 -143 0.00206797 -0.0322322 0.0125632 -144 0.00219287 -0.00991015 0.0199027 -145 0.00223228 -0.065619 0.00972103 -146 0.00226787 -0.06664 0.0139131 -147 0.00233081 0.009707510000000001 0.0349608 -148 0.0023033 -0.0550711 0.0357611 -149 0.00284591 -0.06958739999999999 0.0109337 -150 0.00313658 0.0123831 0.0152878 -151 0.00325266 -0.000639164 0.0164744 -152 0.00354678 -0.0651674 0.00553443 -153 0.00434877 0.0392681 0.00656793 -154 0.0034004 -0.0624097 0.0143354 -155 0.00410027 0.052311 0.0146156 -156 0.00425687 -0.0110681 0.0377954 -157 0.0043501 -0.0020508 0.015115 -158 0.00444422 -0.0785667 0.0168482 -159 0.00471578 -0.008727459999999999 0.0133588 -160 0.00486541 0.0192794 0.0102326 -161 0.00475235 0.0259901 0.00777948 -162 0.00497525 -0.0797755 0.0244877 -163 0.0052286 0.0545416 0.0234287 -164 0.00513856 -0.0361953 0.00904286 -165 0.00543656 -0.016404 0.0117933 -166 0.00521097 0.0361763 0.0357574 -167 0.00563068 0.0458779 0.0101474 -168 0.00602624 -0.0598053 0.00448538 -169 0.00669265 -0.0730234 0.0300997 -170 0.00671975 -0.0647944 0.0149968 -171 0.00743572 0.0219428 0.00498754 -172 0.00806977 -0.06766220000000001 0.0106835 -173 0.008580020000000001 0.0185363 0.00804532 -174 0.00900922 -0.0527441 0.0382868 -175 0.00967438 -0.0310472 0.0412759 -176 0.009690270000000001 -0.0470756 0.00574739 -177 0.009825469999999999 -0.0777201 0.0238208 -178 0.010337 -0.0646559 0.00738197 -179 0.0103691 -0.0715108 0.0301524 -180 0.0108524 -0.06519229999999999 0.0107074 -181 0.0112352 0.0223598 0.00496048 -182 0.0115762 0.0360388 0.034027 -183 0.011811 0.0150563 0.0411225 -184 0.0119389 -0.07108730000000001 0.0142927 -185 0.011481 0.000850754 0.00890493 -186 0.0122581 0.0177891 0.00726338 -187 0.0126044 0.0285097 0.0071727 -188 0.0126077 -0.0410848 0.00487059 -189 0.01325 0.0245576 0.00385279 -190 0.0133342 -0.0301914 0.00695184 -191 0.0134526 -0.00467313 0.044297 -192 0.0140263 0.0415073 0.0128325 -193 0.0139319 -0.0627506 0.0126489 -194 0.0144402 0.0213321 0.0408733 -195 0.0145153 -0.0120242 0.00709154 -196 0.0145254 0.0314471 0.00762861 -197 0.0143606 -0.0539791 0.00638859 -198 0.0153705 -0.0588177 0.00913193 -199 0.0158483 0.0424843 0.0267153 -200 0.0161677 0.0082135 0.0752128 -201 0.0160709 -0.0693691 0.0267104 -202 0.0163112 0.021127 0.00658374 -203 0.0163956 0.0418119 0.0180916 -204 0.0166653 0.00513625 0.0449469 -205 0.0171438 -0.009394380000000001 0.0462661 -206 0.0174416 -0.0497054 0.0373642 -207 0.0174198 -0.06569369999999999 0.0159871 -208 0.0177387 0.0346114 0.0053358 -209 0.0178439 0.0247259 0.00729322 -210 0.018247 0.0346901 0.00258831 -211 0.0182074 -0.0318958 0.0424624 -212 0.0183988 -0.00142899 0.0496692 -213 0.0188182 -0.018825 0.0447569 -214 0.0188285 0.0147456 0.0461032 -215 0.0188626 0.015416 0.041072 -216 0.0190811 -0.00419709 0.06868580000000001 -217 0.0195945 0.0084326 0.064095 -218 0.0197498 -0.00217441 0.0583864 -219 0.0198208 0.00539755 0.0587622 -220 0.0200137 0.0324539 0.00354185 -221 0.020151 -0.0145671 0.0500049 -222 0.0203386 -0.00326709 0.07024469999999999 -223 0.0209148 0.00523036 0.0681576 -224 0.0208447 0.0121045 0.0546374 -225 0.0209724 0.009706330000000001 0.0633876 -226 0.020604 -0.0121123 0.00591309 -227 0.0212498 -0.0289526 0.00565549 -228 0.0216078 -0.0380775 0.00479088 -229 0.0216875 -0.00997672 0.0619769 -230 0.0220658 0.00705093 0.0456869 -231 0.0223002 -0.0558455 0.0110476 -232 0.0223137 -0.0154618 0.0494217 -233 0.0229336 0.00417573 0.0589573 -234 0.0231427 0.0278288 0.0125965 -235 0.0231751 0.027241 0.0309726 -236 0.0233259 0.0160686 0.00756079 -237 0.0234095 0.0318943 0.0199392 -238 0.0234462 -0.00393483 0.0583985 -239 0.0235915 -0.0597066 0.0170609 -240 0.0240196 -0.0108777 0.0466362 -241 0.024123 -0.00330273 0.0464733 -242 0.0242099 -0.0321428 0.0398591 -243 0.0244244 0.00347947 0.0416421 -244 0.024564 -0.0175604 0.0433407 -245 0.0253979 -0.0453083 0.0344803 -246 0.0256103 0.0267734 0.0284514 -247 0.0259312 -0.0445208 0.00878379 -248 0.025959 -0.0133125 0.00624018 -249 0.0265967 -0.0369666 0.00635268 -250 0.0273245 -0.0066598 0.0412078 -251 0.0277597 -0.0467651 0.0304517 -252 0.0275944 -0.0515878 0.0207552 -253 0.0282687 0.0208205 0.0174814 -254 0.0290859 0.0112094 0.012597 -255 0.0293048 -0.0474855 0.0256026 -256 0.0296506 -0.0466043 0.0156453 -257 0.0304236 0.0134394 0.031696 -258 0.0304518 -0.0291908 0.00746031 -259 0.03126 -0.044124 0.016095 -260 0.0321715 -0.043346 0.0242104 -261 0.0322352 -0.0402733 0.0141242 -262 0.0323149 0.01052 0.0200521 -263 0.0324768 -0.0397188 0.0271188 -264 0.0325431 -0.0291932 0.0340382 -265 0.0332479 -0.0329826 0.0117351 -266 0.0338676 -0.0346121 0.0252676 -267 0.0341522 -0.00293196 0.033596 -268 0.0341882 -0.0361716 0.0179088 -269 0.0344969 -0.0256263 0.0309923 -270 0.0345138 -0.00958586 0.0123416 -271 0.0348872 -0.0128566 0.0339912 -272 0.0349524 -0.0273994 0.0177976 -273 0.0349556 -0.000677158 0.0209767 -274 0.0350004 -0.028049 0.008761420000000001 -275 0.0353194 -0.0100316 0.0154749 -276 0.0354214 -0.0195455 0.0173172 -277 0.0355775 -0.0309821 0.0107592 -278 0.0360305 -0.0150581 0.0232372 -279 0.0363938 -0.0285041 0.0132933 -280 0.0374738 -0.00607371 0.0123945 -281 0.041317 -0.0210454 0.0131228 -282 0.0425886 -0.0120136 0.0129537 -283 0.0475164 -0.00753527 0.00853843 -284 0.0492593 -0.00704914 0.009380670000000001 -285 0.0496752 -0.0170405 0.0106038 -286 0.0498676 -0.0259318 0.00619626 -287 0.052402 -0.022331 0.00866719 -288 0.0516897 -0.011391 0.0103437 -289 0.0559595 -0.0106346 0.00698866 -290 0.0596531 -0.0214295 0.0059579 -291 0.066312 -0.0158462 0.00759335 -292 0.0672852 -0.00331292 0.00667068 -293 0.0687074 -0.0027598 0.00829441 -294 0.0687083 -0.008451500000000001 0.00881385 -295 0.07028570000000001 -0.00694567 0.00665748 -296 0.02471 0.00101921 0.00688758 -297 0.00641783 -0.0341512 0.0233596 -298 0.024018 0.00854392 0.00722419 -299 0.0251696 0.009421270000000001 0.00784613 -300 -0.019815 0.0686939 0.0189821 -301 0.0416697 -0.017118 0.00864259 -302 -0.00440288 -0.06984319999999999 0.0205811 -303 -0.0033606 0.0600219 0.0217676 -304 0.0268544 0.00322876 0.008082499999999999 -305 0.00855449 0.0107052 0.00928038 -306 0.0219179 0.00585482 0.0121236 -307 0.0199208 0.0175811 0.0336776 -308 0.0210521 -0.0362113 0.0256186 -309 0.0339797 -0.00194129 0.0163861 -310 0.03202 0.000337126 0.0126992 -311 0.0119633 0.0163586 0.0147908 -312 0.0248778 0.0056119 0.0321775 -313 0.00892971 -0.0563678 0.0287948 -314 0.0174837 0.027107 0.0210333 -315 -0.0170518 0.00346089 0.00554363 -316 0.0144974 -0.0120686 0.0314959 -317 0.00336155 -0.00103205 0.0364574 -318 0.00707711 -0.0204903 0.0185209 -319 0.010517 -0.00309481 0.0232445 -320 -0.00559352 0.0373259 0.0172753 -321 -0.00523735 -0.0230725 0.0111224 -322 0.0151072 -0.0538804 0.0213778 -323 0.0347571 -0.0188174 0.0105515 -324 0.0278657 -0.0183642 0.0156758 -325 -0.00338013 -0.0543805 0.0329679 -326 -0.0196332 0.0593213 0.0251138 -327 0.06481629999999999 -0.0143432 0.00627944 -328 -0.00336175 -0.0187472 0.00979996 -329 -0.0059938 -0.0214388 0.00941436 -330 0.0204933 0.0262773 0.00994486 -331 0.0153554 0.00838654 0.0105168 -332 -0.064082 0.064994 0.00682263 -333 -0.0406296 0.0703091 0.0249838 -334 -0.0197677 0.0563929 0.0156108 -335 -0.0506931 0.0781816 0.0304629 -336 0.0171972 -0.00100568 0.011485 -337 0.0314619 -0.0225976 0.00774901 -338 -0.00980694 0.0515267 0.0104574 -339 -0.00435185 0.0493969 0.0137744 -340 0.0449063 -0.0117353 0.00859937 -341 0.00159087 -0.0450385 0.027858 -342 -0.00469537 -0.06372510000000001 0.0233918 -343 0.0424219 -0.0285632 0.00857374 -344 0.0603894 -0.00835109 0.009350529999999999 -345 -0.0147113 -0.0156046 0.009183759999999999 -346 -0.0528157 0.0611754 0.00480955 -347 -0.0173765 -0.008871489999999999 0.00520522 -348 0.0108104 0.02268 0.0130558 -349 -0.00899905 -0.0208443 0.00915416 -350 -0.0449914 0.0768094 0.0302276 -351 -0.0408502 0.06658 0.008368489999999999 -352 -0.0199988 -0.0118916 0.004906 -353 0.00337131 0.0455887 0.0238561 -354 0.00477413 -0.0721541 0.0211645 -355 -0.00344193 -0.049333 0.032475 -356 0.0427245 -0.0268877 0.00738607 -357 0.0272704 -0.0238375 0.00669928 -358 -0.00610544 -0.0476638 0.0181008 -359 -0.00760153 0.0503529 0.00747858 -360 0.0131109 -0.0422224 0.0405109 -361 0.00214561 -0.0490294 0.0151357 -362 -0.0598224 0.0805424 0.0511855 -363 -0.0204542 0.0588165 0.013102 -364 0.059357 -0.0190886 0.00813027 -365 -0.00100716 0.0422264 0.0325724 -366 0.0325535 -0.0244764 0.012522 -367 -0.000431427 -0.0574818 0.0137747 -368 0.0114251 0.0275734 0.00440942 -369 0.00337666 -0.0559724 0.0148659 -370 -0.0262911 0.0586227 0.0207785 -371 -0.0699467 0.0813567 0.0499003 -372 0.0494602 -0.0133111 0.00757754 -373 0.00758285 0.0333008 0.0104911 -374 0.00657287 0.032122 0.00603963 -375 0.000332803 -0.0511328 0.0180756 -376 -0.021764 0.0620607 0.0118108 -377 -0.0454672 0.075167 0.035911 -378 0.00139884 0.045926 0.0128133 -379 0.0176314 0.0311493 0.00370344 -380 -0.0159418 -0.0158578 0.00793814 -381 -0.0229387 0.06916410000000001 0.0166572 -382 -0.00133409 -0.0449329 0.0187829 -383 -0.0538019 0.0611146 0.00198764 -384 0.0305208 -0.00256491 0.0101919 -385 0.0623596 -0.00697151 0.00683979 -386 0.0236819 -0.00777996 0.0526871 -387 0.0118138 -0.0144241 0.0430193 -388 0.0137156 -0.00365078 0.00732253 -389 -0.0257884 0.0686739 0.0150694 -390 -0.0530331 0.060812 0.00248197 -391 -0.000421194 -0.0523335 0.008791770000000001 -392 0.0193846 -0.00072024 0.0649221 -393 0.00485856 0.0133946 0.0114741 -394 -0.0053823 -0.0743714 0.0141262 -395 0.016958 0.0166471 0.00740593 -396 0.0429338 -0.0266961 0.0110582 -397 -0.06504749999999999 0.05473 0.00191127 -398 0.00924818 0.0356698 0.00715588 -399 -0.042468 0.0652669 0.00790867 -400 0.00699205 0.0348997 0.00576165 -401 -0.012123 0.00171435 0.00688121 -402 0.017741 0.00126373 0.0717161 -403 -0.00477874 -0.0228765 0.0123522 -404 -0.05496 0.0793832 0.0329037 -405 -0.0253736 -0.000654191 0.00342534 -406 0.0220159 -0.0128389 0.0555838 -407 0.0187915 0.00366305 0.06539010000000001 -408 -0.0635923 0.0794618 0.0351284 -409 0.0187293 0.00901455 0.0689246 -410 -0.0507436 0.0790633 0.0364811 -411 0.00440962 0.0291856 0.00589534 -412 -0.0610541 0.08157639999999999 0.0467801 -413 -0.0264169 0.06418980000000001 0.0180225 -414 0.0590681 -0.0129818 0.009692930000000001 -415 0.0316732 -0.013669 0.008927310000000001 -416 -0.0368828 0.0732351 0.028231 -417 0.0147007 -0.0293577 0.0425282 -418 -0.00226105 0.042112 0.008184220000000001 -419 -0.022404 0.068624 0.0211714 -420 0.018834 0.0296379 0.0101126 -421 0.0545664 -0.023882 0.00596013 -422 -0.0610274 0.0626039 0.00623226 -423 0.0209345 -0.0123916 0.0558755 -424 -0.064258 0.0639612 0.00701622 -425 -0.0530259 0.07099660000000001 0.0104874 -426 -0.000350232 0.0328643 0.009503569999999999 -427 0.0179821 0.0260225 0.00525665 -428 -0.071629 0.0809096 0.0500374 -429 0.0431333 -0.00662611 0.0109755 -430 -0.0367738 0.072104 0.0272887 -431 -0.00147996 0.0424733 0.00778004 -432 -0.0489442 0.0792518 0.0424775 -433 0.0178184 0.008309230000000001 0.0698262 -434 -0.00256208 -0.0518644 0.0119693 -435 -0.0024457 0.0347988 0.0115191 -436 -0.0226391 0.067054 0.0236986 -437 -0.0250562 0.070839 0.0181046 -438 0.0157661 -0.010775 0.0444953 -439 -0.0587069 0.0610686 0.00549325 -440 -0.0561989 0.0607157 0.00436391 -441 0.0028322 0.0311045 0.0076099 -442 -0.061857 0.079748 0.0514834 -443 -0.0580072 0.07448539999999999 0.0170926 -444 0.017366 0.0281829 0.00449304 -445 0.0175246 0.0303053 0.00632184 -446 -0.0583716 0.0812348 0.0494755 -447 -0.06276379999999999 0.08110589999999999 0.0418948 -448 0.009583370000000001 0.0391723 0.00889538 -449 0.0164997 0.0327763 0.00400793 -450 -0.0100537 -0.019407 0.0104569 -451 0.0535082 -0.023589 0.00757618 -452 -0.0184567 0.0672393 0.0165986 -453 -0.0660887 0.06395149999999999 0.00557639 -454 -0.008500499999999999 0.0591911 0.0132991 -455 0.0527123 -0.00658592 0.00801901 -456 0.00664445 0.0147496 0.00979726 -457 -0.0323364 0.06468409999999999 0.013176 -458 -0.06849810000000001 0.0817682 0.0541475 -459 0.0424951 -0.00680449 0.0104665 -460 -0.01583 0.06382989999999999 0.0140017 -461 -0.0408586 0.07478079999999999 0.0276312 -462 -0.0213675 0.00505684 0.00440033 -463 -0.0609542 0.0784149 0.029815 -464 0.0458286 -0.0196104 0.0115924 -465 0.0619857 -0.0044448 0.00717137 -466 -0.0549453 0.0736446 0.0144159 -467 -0.0660739 0.0797747 0.0511232 -468 -0.0150243 -0.0138696 0.00597473 -469 -0.0208919 0.06642729999999999 0.014553 -470 -0.0583912 0.07667309999999999 0.0277458 -471 -0.00499489 -0.0492059 0.0154875 -472 -0.0177596 -0.0149926 0.00640227 -473 -0.0656257 0.0638276 0.00437301 -474 -0.00111824 -0.0505712 0.010634 -475 -0.0234714 0.0595273 0.0150887 -476 -0.0117477 -0.00786715 0.0107629 -477 -0.0329423 0.0662408 0.012525 -478 -0.0588644 0.0778049 0.0265316 -479 -0.038272 0.07101209999999999 0.0277124 -480 0.0147178 0.0228905 0.00513556 -481 -0.00242697 -0.0228032 0.0106496 -482 -0.00998317 -0.0196685 0.00798312 -483 0.00194711 0.0338412 0.00734265 -484 -0.0101071 0.0571173 0.0108272 -485 -0.000192036 0.0305177 0.010316 -486 -0.06622359999999999 0.0609953 0.00234663 -487 -0.0383437 0.071981 0.0290737 -488 0.0464353 -0.0271448 0.00729223 -489 -0.0113654 0.0558876 0.00985606 -490 -0.0600686 0.0581853 0.00037707 -491 0.0184892 0.00651809 0.072001 -492 -0.0272353 0.0661385 0.0125002 -493 0.0386787 -0.009397559999999999 0.0110365 -494 -0.00702298 -0.0554164 0.0301677 -495 -0.0387296 0.0725599 0.0291973 -496 -0.0195884 -0.009713039999999999 0.00731553 -497 0.0009803979999999999 0.0340005 0.008311529999999999 -498 -0.00251349 -0.0493306 0.0137872 -499 -0.0208118 0.00468072 0.00662791 -500 0.0145465 0.0247675 0.00685396 -501 0.0539643 -0.00601143 0.00911787 -502 0.0615879 -0.00432066 0.00875869 -503 -0.0649217 0.0800024 0.0383643 -504 0.00460493 0.008497380000000001 0.0127005 -505 -0.0606311 0.0803611 0.0379233 -506 -0.00316884 0.0400824 0.00969248 -507 -0.0308482 0.067467 0.0126012 -508 0.0120049 0.00511369 0.00824306 -509 0.0117314 0.0134932 0.00784586 -510 0.0067401 0.0222359 0.00786688 -511 0.000365941 0.0444987 0.0334101 -512 0.00589042 0.0427357 0.0325284 -513 0.0134556 0.013691 0.0071386 -514 0.0155774 0.00572549 0.00675779 -515 -0.0442054 0.0654197 0.00607699 -516 0.00863004 0.0184766 0.00878081 -517 -0.0111016 -0.0170398 0.0107756 -518 -0.0162643 0.06208 0.0123266 -519 -0.06706429999999999 0.0628756 0.0047451 -520 -0.0673064 0.07917689999999999 0.0489333 -521 -0.0566743 0.0588231 0.00264455 -522 -0.07138410000000001 0.080001 0.0523997 -523 -0.0690781 0.0794039 0.0521145 -524 -0.0589744 0.07029879999999999 0.0123753 -525 -0.0108026 0.05228 0.00636676 -526 -0.0113486 0.0541547 0.00728553 -527 -0.0299136 0.06862409999999999 0.0165753 -528 0.0505332 -0.0225927 0.00635398 -529 0.0180077 0.0031318 0.07043870000000001 -530 -0.0235313 0.0640143 0.012641 -531 -0.0235569 0.00584404 0.00381922 -532 0.0384718 -0.0113423 0.0144484 -533 0.0182407 0.00232532 0.0728388 -534 -0.0235752 0.00407866 0.00373027 -535 -0.011585 0.0522432 0.00647843 -536 0.0400312 -0.00904366 0.0126741 -537 -0.0178591 -0.000359808 0.00797485 -538 -0.067167 0.06255139999999999 0.00392853 -539 -0.0596438 0.0779391 0.0290601 -540 0.0013543 0.0302152 0.00901705 -541 0.0168301 0.00522322 0.0737244 -542 0.0174324 0.00448014 0.0738384 -543 -0.0618546 0.0649931 0.00590465 -544 0.0194429 0.0304209 0.00452872 -545 -0.0236633 0.0648084 0.0124456 -546 -0.00249493 -0.0562542 0.012985 -547 -0.0025263 -0.0246783 0.0125409 -548 -0.0396392 0.0718092 0.02876 -549 -0.0158083 -0.0164708 0.00645267 -550 0.016879 0.0245859 0.0055459 -551 -0.06884990000000001 0.0811361 0.0461884 -552 0.0290982 -0.00647478 0.008279069999999999 -553 -0.041817 0.0761358 0.0343691 -554 -0.0642688 0.0653922 0.00517065 -555 -0.0162175 0.00239503 0.00694561 -556 0.00467524 0.0360758 0.00643588 -557 -0.0222973 0.0035638 0.00646752 -558 -0.0708092 0.0801688 0.0482801 -559 -0.0549524 0.07870829999999999 0.0296023 -560 -0.06310540000000001 0.0672415 0.00811831 -561 -0.0155444 -0.0163359 0.0060847 -562 -0.0574097 0.07880470000000001 0.0473507 -563 -0.0558952 0.0591814 0.001764 -564 -0.0177409 0.0619627 0.0144786 -565 -0.00178349 -0.0487397 0.0125937 -566 -0.0111058 0.0522074 0.008299040000000001 -567 -0.0260139 0.00360897 0.00461987 -568 -0.0204566 0.00423454 0.00564674 -569 0.00612936 0.0370467 0.00680554 -570 0.010446 0.0313554 0.00705031 -571 -0.0569353 0.05965 0.00118235 -572 -0.0506685 0.0625792 0.00279292 -573 -0.0249761 0.00485573 0.00443819 -574 0.0172421 0.00725128 0.07382619999999999 -575 -0.0219613 0.06430039999999999 0.0138184 -576 -0.00260185 -0.0513557 0.0142694 -577 -0.0167422 0.00259292 0.00779623 -578 0.00214524 0.0341103 0.00650831 -579 -0.0236765 0.00572293 0.004305 -580 -0.0616879 0.0784644 0.0353636 -581 -0.0125522 0.0533024 0.00573952 -582 -0.00373263 -0.048886 0.014509 -583 -0.00253347 -0.0472982 0.0131992 -584 -0.0128746 -0.017623 0.00940414 -585 -5.43548e-05 0.0393803 0.00728201 -586 -0.0258702 0.00405717 0.00525282 -587 0.0183599 0.0265636 0.00640112 -588 0.0459896 -0.0257989 0.0100883 -589 -0.0295424 0.06805940000000001 0.0247957 -590 -0.0245383 0.0634107 0.0123732 -591 0.0066096 0.0377811 0.00691952 -592 -0.0450015 0.0646553 0.00575343 -593 -0.0622505 0.0661482 0.00839783 -594 -0.0256248 0.0608105 0.0161665 -595 0.017488 0.00853314 0.07209649999999999 -596 -0.0596734 0.07050969999999999 0.009924850000000001 -597 -0.06657979999999999 0.06286890000000001 0.00493615 -598 -0.0624322 0.0664941 0.0080812 -599 0.0436037 -0.00911409 0.009504510000000001 -600 -0.0258241 0.00183578 0.00455937 -601 -0.07027029999999999 0.07969130000000001 0.0546337 -602 -0.027947 0.06304949999999999 0.0231884 -603 -0.0601839 0.07046330000000001 0.0106076 -604 -0.019796 -0.0130118 0.0069497 -605 -0.0183149 0.06305479999999999 0.012418 -606 -0.0302535 0.0701272 0.02364 -607 -0.0574291 0.07908510000000001 0.0314511 -608 -0.0506885 0.0650762 0.00396145 -609 -0.021101 0.0616869 0.0137094 -610 -0.0331684 0.0670427 0.023997 -611 0.0134393 0.00644533 0.00718965 -612 -0.0111807 -0.0194906 0.00818236 -613 -0.0255718 0.00304117 0.00332801 -614 -0.0126697 -0.015488 0.00653208 -615 -0.0247074 0.00660999 0.00551935 -616 0.0173416 0.0031807 0.0727906 -617 0.0172416 0.0236783 0.00588169 -618 0.0190309 0.0293428 0.00437137 -619 0.016715 0.00646681 0.0747173 -620 -0.0362286 0.072292 0.023504 -621 -0.0193589 -0.00042516 0.00470745 -622 -0.0218861 0.06436310000000001 0.0125137 -623 -0.0102557 0.0512168 0.00711881 -624 0.0404202 -0.00631757 0.0116411 -625 0.0462272 -0.00679819 0.0101561 -626 -0.0259792 0.0656558 0.0150971 -627 0.0162732 0.0229634 0.00624384 -628 0.00353474 0.0364474 0.008433390000000001 -629 4.6368e-06 0.0388726 0.009730829999999999 -630 -0.0216501 0.0633078 0.012475 -631 -0.06535530000000001 0.0635995 0.0060088 -632 -0.0129397 0.0533345 0.00604151 -633 -0.00189413 -0.0244631 0.013557 -634 -0.0610974 0.0673557 0.00916116 -635 0.0169636 0.00823874 0.0726305 -636 -0.0262169 0.00566462 0.00486021 -637 -0.00105663 -0.050339 0.013034 -638 -0.0522352 0.0618469 0.00239028 -639 -0.06586110000000001 0.0623674 0.00600767 -640 -0.0308719 0.0671807 0.0240148 -641 -0.0271033 0.0631674 0.0232081 -642 0.000463176 0.0377435 0.00713404 -643 0.0197653 -0.0105149 0.0573133 -644 -0.0261272 0.00574879 0.00514751 -645 -0.0256133 0.00236555 0.00535812 -646 0.0395658 -0.00664927 0.0115095 -647 -0.0346515 0.0704144 0.0260764 -648 -0.0676857 0.0619198 0.00410476 -649 -0.0352382 0.07226829999999999 0.0261851 -650 -0.0489272 0.0632235 0.00329626 -651 -0.0514659 0.0617489 0.00295197 -652 -0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1654 -1 4 2 0 0 26 15 543 25 -2 4 2 0 0 227 308 190 188 -3 4 2 0 0 203 353 199 163 -4 4 2 0 0 331 305 504 150 -5 4 2 0 0 142 328 128 138 -6 4 2 0 0 490 439 18 571 -7 4 2 0 0 364 289 287 414 -8 4 2 0 0 296 336 304 298 -9 4 2 0 0 564 419 300 381 -10 4 2 0 0 398 569 373 591 -11 4 2 0 0 486 473 639 422 -12 4 2 0 0 338 89 566 489 -13 4 2 0 0 332 554 543 424 -14 4 2 0 0 80 67 71 302 -15 4 2 0 0 149 146 109 108 -16 4 2 0 0 98 90 375 342 -17 4 2 0 0 341 308 325 313 -18 4 2 0 0 147 314 126 116 -19 4 2 0 0 124 318 156 131 -20 4 2 0 0 245 322 206 308 -21 4 2 0 0 348 311 516 186 -22 4 2 0 0 135 150 319 151 -23 4 2 0 0 147 314 307 311 -24 4 2 0 0 464 588 301 528 -25 4 2 0 0 461 33 35 333 -26 4 2 0 0 196 192 373 314 -27 4 2 0 0 108 81 302 122 -28 4 2 0 0 366 258 227 357 -29 4 2 0 0 511 107 512 353 -30 4 2 0 0 146 170 354 172 -31 4 2 0 0 297 175 156 130 -32 4 2 0 0 130 297 175 308 -33 4 2 0 0 318 159 319 195 -34 4 2 0 0 154 123 122 342 -35 4 2 0 0 261 308 259 260 -36 4 2 0 0 132 142 128 318 -37 4 2 0 0 241 250 240 205 -38 4 2 0 0 226 227 248 324 -39 4 2 0 0 575 609 475 49 -40 4 2 0 0 375 91 123 90 -41 4 2 0 0 260 308 255 251 -42 4 2 0 0 517 612 63 482 -43 4 2 0 0 120 117 131 297 -44 4 2 0 0 318 131 297 156 -45 4 2 0 0 147 319 311 307 -46 4 2 0 0 131 120 297 130 -47 4 2 0 0 120 297 111 117 -48 4 2 0 0 308 174 206 360 -49 4 2 0 0 148 313 325 175 -50 4 2 0 0 148 313 175 174 -51 4 2 0 0 302 80 122 81 -52 4 2 0 0 107 353 511 110 -53 4 2 0 0 322 231 198 197 -54 4 2 0 0 61 58 564 57 -55 4 2 0 0 240 386 212 221 -56 4 2 0 0 121 297 143 117 -57 4 2 0 0 121 297 117 111 -58 4 2 0 0 307 235 314 182 -59 4 2 0 0 307 314 166 182 -60 4 2 0 0 417 308 175 316 -61 4 2 0 0 308 175 360 417 -62 4 2 0 0 601 9 458 1 -63 4 2 0 0 459 429 536 599 -64 4 2 0 0 211 242 206 308 -65 4 2 0 0 528 588 301 356 -66 4 2 0 0 316 297 308 175 -67 4 2 0 0 197 188 308 228 -68 4 2 0 0 231 308 228 197 -69 4 2 0 0 231 197 322 308 -70 4 2 0 0 188 197 308 361 -71 4 2 0 0 322 361 308 197 -72 4 2 0 0 259 308 256 255 -73 4 2 0 0 298 306 304 299 -74 4 2 0 0 302 342 146 122 -75 4 2 0 0 251 322 245 308 -76 4 2 0 0 298 306 299 236 -77 4 2 0 0 342 302 169 129 -78 4 2 0 0 157 319 331 150 -79 4 2 0 0 190 195 324 227 -80 4 2 0 0 146 342 354 154 -81 4 2 0 0 190 297 308 324 -82 4 2 0 0 236 254 306 299 -83 4 2 0 0 354 179 201 322 -84 4 2 0 0 308 297 188 361 -85 4 2 0 0 361 188 164 297 -86 4 2 0 0 195 165 190 318 -87 4 2 0 0 307 215 257 235 -88 4 2 0 0 194 235 215 307 -89 4 2 0 0 174 129 148 313 -90 4 2 0 0 169 313 129 174 -91 4 2 0 0 322 255 251 201 -92 4 2 0 0 366 265 308 258 -93 4 2 0 0 227 308 258 366 -94 4 2 0 0 258 308 249 265 -95 4 2 0 0 227 308 228 258 -96 4 2 0 0 448 192 373 196 -97 4 2 0 0 228 308 249 258 -98 4 2 0 0 296 298 514 336 -99 4 2 0 0 125 150 348 126 -100 4 2 0 0 125 160 348 150 -101 4 2 0 0 244 264 242 316 -102 4 2 0 0 264 316 244 271 -103 4 2 0 0 224 233 225 219 -104 4 2 0 0 107 353 163 199 -105 4 2 0 0 217 223 219 225 -106 4 2 0 0 308 174 313 206 -107 4 2 0 0 206 313 179 174 -108 4 2 0 0 241 230 212 233 -109 4 2 0 0 241 233 212 218 -110 4 2 0 0 267 278 312 273 -111 4 2 0 0 267 312 262 273 -112 4 2 0 0 206 179 322 245 -113 4 2 0 0 242 245 206 308 -114 4 2 0 0 144 319 159 157 -115 4 2 0 0 265 308 266 272 -116 4 2 0 0 218 219 392 233 -117 4 2 0 0 264 324 316 271 -118 4 2 0 0 324 308 264 316 -119 4 2 0 0 297 318 117 131 -120 4 2 0 0 128 117 318 124 -121 4 2 0 0 354 207 201 177 -122 4 2 0 0 207 177 354 184 -123 4 2 0 0 155 163 353 203 -124 4 2 0 0 131 297 156 130 -125 4 2 0 0 395 330 236 202 -126 4 2 0 0 164 142 318 190 -127 4 2 0 0 253 314 234 311 -128 4 2 0 0 307 314 147 166 -129 4 2 0 0 331 234 253 254 -130 4 2 0 0 306 236 298 331 -131 4 2 0 0 156 297 316 175 -132 4 2 0 0 324 319 318 316 -133 4 2 0 0 297 324 316 308 -134 4 2 0 0 373 314 102 125 -135 4 2 0 0 167 155 378 192 -136 4 2 0 0 278 324 272 269 -137 4 2 0 0 278 276 272 324 -138 4 2 0 0 319 159 157 336 -139 4 2 0 0 267 257 312 243 -140 4 2 0 0 307 215 243 257 -141 4 2 0 0 156 297 318 316 -142 4 2 0 0 207 354 170 184 -143 4 2 0 0 124 144 139 156 -144 4 2 0 0 267 312 250 243 -145 4 2 0 0 144 151 139 319 -146 4 2 0 0 318 316 319 144 -147 4 2 0 0 316 139 319 144 -148 4 2 0 0 139 144 316 156 -149 4 2 0 0 316 191 312 319 -150 4 2 0 0 316 191 317 156 -151 4 2 0 0 313 308 175 174 -152 4 2 0 0 253 234 331 311 -153 4 2 0 0 331 395 234 236 -154 4 2 0 0 272 265 308 366 -155 4 2 0 0 103 140 133 510 -156 4 2 0 0 235 199 246 314 -157 4 2 0 0 246 237 314 199 -158 4 2 0 0 144 151 319 157 -159 4 2 0 0 92 157 151 144 -160 4 2 0 0 92 159 157 144 -161 4 2 0 0 395 234 236 330 -162 4 2 0 0 395 330 202 348 -163 4 2 0 0 348 330 202 209 -164 4 2 0 0 324 312 316 271 -165 4 2 0 0 266 308 324 272 -166 4 2 0 0 324 366 308 227 -167 4 2 0 0 242 264 245 308 -168 4 2 0 0 272 266 269 324 -169 4 2 0 0 135 151 319 139 -170 4 2 0 0 40 35 28 29 -171 4 2 0 0 88 148 129 342 -172 4 2 0 0 325 342 148 88 -173 4 2 0 0 314 116 147 166 -174 4 2 0 0 77 353 320 94 -175 4 2 0 0 331 262 319 306 -176 4 2 0 0 319 317 139 316 -177 4 2 0 0 450 329 482 328 -178 4 2 0 0 183 307 147 166 -179 4 2 0 0 188 361 176 197 -180 4 2 0 0 169 179 313 174 -181 4 2 0 0 314 196 348 373 -182 4 2 0 0 102 84 116 353 -183 4 2 0 0 102 77 84 353 -184 4 2 0 0 191 147 319 317 -185 4 2 0 0 307 262 257 312 -186 4 2 0 0 307 257 246 235 -187 4 2 0 0 307 257 262 246 -188 4 2 0 0 128 318 144 124 -189 4 2 0 0 246 314 237 253 -190 4 2 0 0 314 203 237 234 -191 4 2 0 0 142 128 318 138 -192 4 2 0 0 253 237 234 314 -193 4 2 0 0 306 319 331 336 -194 4 2 0 0 307 314 235 246 -195 4 2 0 0 316 250 312 191 -196 4 2 0 0 450 403 349 329 -197 4 2 0 0 121 297 101 143 -198 4 2 0 0 382 164 101 297 -199 4 2 0 0 369 198 322 193 -200 4 2 0 0 264 266 324 269 -201 4 2 0 0 322 354 170 207 -202 4 2 0 0 322 170 193 207 -203 4 2 0 0 353 84 116 110 -204 4 2 0 0 70 302 68 83 -205 4 2 0 0 331 311 234 395 -206 4 2 0 0 323 493 282 301 -207 4 2 0 0 269 278 324 271 -208 4 2 0 0 278 312 324 271 -209 4 2 0 0 207 170 180 184 -210 4 2 0 0 207 170 193 180 -211 4 2 0 0 325 130 175 308 -212 4 2 0 0 146 354 170 154 -213 4 2 0 0 354 302 342 146 -214 4 2 0 0 161 348 510 181 -215 4 2 0 0 182 314 199 235 -216 4 2 0 0 322 354 369 170 -217 4 2 0 0 231 207 322 198 -218 4 2 0 0 313 322 375 341 -219 4 2 0 0 375 361 341 322 -220 4 2 0 0 322 207 193 198 -221 4 2 0 0 297 143 164 101 -222 4 2 0 0 221 213 240 232 -223 4 2 0 0 190 188 308 297 -224 4 2 0 0 341 361 375 382 -225 4 2 0 0 341 308 313 322 -226 4 2 0 0 134 158 184 354 -227 4 2 0 0 247 308 261 249 -228 4 2 0 0 263 308 260 251 -229 4 2 0 0 318 319 159 144 -230 4 2 0 0 309 262 306 319 -231 4 2 0 0 250 204 243 312 -232 4 2 0 0 448 192 167 378 -233 4 2 0 0 37 333 620 35 -234 4 2 0 0 37 33 333 35 -235 4 2 0 0 297 318 316 324 -236 4 2 0 0 167 448 378 153 -237 4 2 0 0 212 218 233 219 -238 4 2 0 0 88 325 342 494 -239 4 2 0 0 246 307 314 253 -240 4 2 0 0 307 253 246 262 -241 4 2 0 0 126 311 150 348 -242 4 2 0 0 388 611 336 514 -243 4 2 0 0 348 234 420 314 -244 4 2 0 0 236 254 331 306 -245 4 2 0 0 348 314 311 234 -246 4 2 0 0 211 308 360 417 -247 4 2 0 0 373 102 320 125 -248 4 2 0 0 316 250 191 438 -249 4 2 0 0 250 205 191 438 -250 4 2 0 0 254 262 306 309 -251 4 2 0 0 254 309 306 310 -252 4 2 0 0 299 254 306 310 -253 4 2 0 0 331 262 306 254 -254 4 2 0 0 292 294 295 293 -255 4 2 0 0 194 307 215 204 -256 4 2 0 0 304 306 384 299 -257 4 2 0 0 267 312 257 262 -258 4 2 0 0 353 192 378 155 -259 4 2 0 0 319 159 336 195 -260 4 2 0 0 353 192 373 378 -261 4 2 0 0 336 185 388 195 -262 4 2 0 0 312 250 271 267 -263 4 2 0 0 271 250 312 316 -264 4 2 0 0 261 249 308 265 -265 4 2 0 0 268 308 265 261 -266 4 2 0 0 247 308 249 228 -267 4 2 0 0 227 195 324 226 -268 4 2 0 0 366 324 415 337 -269 4 2 0 0 337 366 324 357 -270 4 2 0 0 190 195 318 324 -271 4 2 0 0 156 318 124 144 -272 4 2 0 0 263 266 308 264 -273 4 2 0 0 251 263 308 264 -274 4 2 0 0 197 198 322 369 -275 4 2 0 0 154 354 369 342 -276 4 2 0 0 188 308 228 227 -277 4 2 0 0 79 328 138 92 -278 4 2 0 0 316 317 139 156 -279 4 2 0 0 360 175 308 174 -280 4 2 0 0 255 251 308 322 -281 4 2 0 0 255 256 252 308 -282 4 2 0 0 247 228 231 308 -283 4 2 0 0 247 308 231 256 -284 4 2 0 0 134 149 394 354 -285 4 2 0 0 83 162 96 302 -286 4 2 0 0 161 373 140 348 -287 4 2 0 0 88 67 302 68 -288 4 2 0 0 302 97 88 68 -289 4 2 0 0 512 166 314 182 -290 4 2 0 0 420 192 314 234 -291 4 2 0 0 348 330 420 234 -292 4 2 0 0 192 314 234 203 -293 4 2 0 0 91 123 105 115 -294 4 2 0 0 394 70 302 81 -295 4 2 0 0 309 273 262 319 -296 4 2 0 0 319 262 312 273 -297 4 2 0 0 67 302 68 70 -298 4 2 0 0 271 278 312 267 -299 4 2 0 0 66 57 326 58 -300 4 2 0 0 188 136 176 361 -301 4 2 0 0 157 331 185 504 -302 4 2 0 0 136 361 188 164 -303 4 2 0 0 244 250 271 316 -304 4 2 0 0 71 302 67 70 -305 4 2 0 0 244 213 232 240 -306 4 2 0 0 81 302 71 70 -307 4 2 0 0 354 149 108 146 -308 4 2 0 0 314 237 203 199 -309 4 2 0 0 506 378 435 629 -310 4 2 0 0 244 438 316 213 -311 4 2 0 0 97 302 169 162 -312 4 2 0 0 244 316 438 250 -313 4 2 0 0 313 129 342 169 -314 4 2 0 0 382 113 101 164 -315 4 2 0 0 506 435 378 94 -316 4 2 0 0 91 123 85 105 -317 4 2 0 0 308 264 245 251 -318 4 2 0 0 242 264 308 316 -319 4 2 0 0 450 349 482 329 -320 4 2 0 0 314 373 348 125 -321 4 2 0 0 92 138 159 144 -322 4 2 0 0 395 311 234 348 -323 4 2 0 0 278 273 324 312 -324 4 2 0 0 373 378 435 320 -325 4 2 0 0 147 311 319 135 -326 4 2 0 0 126 311 135 150 -327 4 2 0 0 126 135 311 147 -328 4 2 0 0 314 348 311 126 -329 4 2 0 0 83 302 82 70 -330 4 2 0 0 378 435 629 373 -331 4 2 0 0 195 159 165 318 -332 4 2 0 0 316 312 324 319 -333 4 2 0 0 156 175 316 387 -334 4 2 0 0 336 298 514 331 -335 4 2 0 0 88 342 129 302 -336 4 2 0 0 319 307 331 311 -337 4 2 0 0 253 314 311 307 -338 4 2 0 0 311 331 253 307 -339 4 2 0 0 297 341 308 130 -340 4 2 0 0 314 348 126 125 -341 4 2 0 0 147 314 311 126 -342 4 2 0 0 61 339 99 338 -343 4 2 0 0 250 204 312 191 -344 4 2 0 0 305 185 508 331 -345 4 2 0 0 211 242 308 316 -346 4 2 0 0 211 308 417 316 -347 4 2 0 0 213 316 211 417 -348 4 2 0 0 214 215 230 204 -349 4 2 0 0 244 316 242 211 -350 4 2 0 0 244 211 213 316 -351 4 2 0 0 465 501 344 502 -352 4 2 0 0 108 354 302 394 -353 4 2 0 0 313 129 148 342 -354 4 2 0 0 337 324 415 248 -355 4 2 0 0 337 258 366 357 -356 4 2 0 0 121 101 297 111 -357 4 2 0 0 382 101 111 297 -358 4 2 0 0 157 159 185 336 -359 4 2 0 0 226 336 195 324 -360 4 2 0 0 307 262 331 253 -361 4 2 0 0 307 262 319 331 -362 4 2 0 0 331 254 253 262 -363 4 2 0 0 248 336 552 296 -364 4 2 0 0 319 324 195 336 -365 4 2 0 0 248 296 226 336 -366 4 2 0 0 324 248 336 552 -367 4 2 0 0 147 183 191 307 -368 4 2 0 0 282 281 276 323 -369 4 2 0 0 281 323 282 301 -370 4 2 0 0 109 119 105 122 -371 4 2 0 0 297 143 117 318 -372 4 2 0 0 109 122 105 80 -373 4 2 0 0 308 366 324 272 -374 4 2 0 0 297 318 324 190 -375 4 2 0 0 297 190 164 318 -376 4 2 0 0 214 204 230 212 -377 4 2 0 0 224 212 214 230 -378 4 2 0 0 297 143 318 164 -379 4 2 0 0 264 308 324 266 -380 4 2 0 0 264 269 324 271 -381 4 2 0 0 132 117 143 318 -382 4 2 0 0 130 297 341 120 -383 4 2 0 0 341 130 120 98 -384 4 2 0 0 277 343 356 279 -385 4 2 0 0 325 308 175 313 -386 4 2 0 0 109 81 108 122 -387 4 2 0 0 109 122 108 146 -388 4 2 0 0 348 234 395 330 -389 4 2 0 0 341 111 120 297 -390 4 2 0 0 341 100 98 120 -391 4 2 0 0 341 111 100 120 -392 4 2 0 0 226 336 324 248 -393 4 2 0 0 318 319 324 195 -394 4 2 0 0 275 270 324 309 -395 4 2 0 0 309 336 324 319 -396 4 2 0 0 552 270 336 324 -397 4 2 0 0 273 309 275 324 -398 4 2 0 0 403 328 329 450 -399 4 2 0 0 382 111 341 297 -400 4 2 0 0 361 322 308 341 -401 4 2 0 0 361 341 308 297 -402 4 2 0 0 342 85 73 90 -403 4 2 0 0 342 73 85 80 -404 4 2 0 0 323 324 366 276 -405 4 2 0 0 361 297 164 382 -406 4 2 0 0 96 82 83 302 -407 4 2 0 0 45 647 44 42 -408 4 2 0 0 179 354 201 177 -409 4 2 0 0 53 621 54 347 -410 4 2 0 0 117 124 131 318 -411 4 2 0 0 156 144 316 318 -412 4 2 0 0 369 198 193 141 -413 4 2 0 0 342 302 88 67 -414 4 2 0 0 67 80 342 302 -415 4 2 0 0 73 80 342 67 -416 4 2 0 0 342 73 67 76 -417 4 2 0 0 372 528 289 285 -418 4 2 0 0 285 528 289 287 -419 4 2 0 0 355 98 325 494 -420 4 2 0 0 122 119 105 123 -421 4 2 0 0 394 82 134 302 -422 4 2 0 0 494 88 76 342 -423 4 2 0 0 109 81 122 80 -424 4 2 0 0 447 580 503 505 -425 4 2 0 0 114 118 141 145 -426 4 2 0 0 311 150 319 135 -427 4 2 0 0 108 122 302 146 -428 4 2 0 0 204 307 183 194 -429 4 2 0 0 191 204 307 183 -430 4 2 0 0 382 101 100 111 -431 4 2 0 0 382 111 100 341 -432 4 2 0 0 318 159 138 144 -433 4 2 0 0 588 281 301 356 -434 4 2 0 0 87 61 77 57 -435 4 2 0 0 318 159 165 138 -436 4 2 0 0 7 12 2 486 -437 4 2 0 0 316 191 319 317 -438 4 2 0 0 208 196 449 445 -439 4 2 0 0 322 369 354 313 -440 4 2 0 0 354 158 177 162 -441 4 2 0 0 354 169 162 179 -442 4 2 0 0 313 369 354 342 -443 4 2 0 0 179 162 354 177 -444 4 2 0 0 130 98 341 355 -445 4 2 0 0 325 130 341 355 -446 4 2 0 0 337 357 324 248 -447 4 2 0 0 324 357 227 248 -448 4 2 0 0 588 281 464 301 -449 4 2 0 0 375 341 382 98 -450 4 2 0 0 454 75 61 155 -451 4 2 0 0 353 77 84 74 -452 4 2 0 0 331 305 185 504 -453 4 2 0 0 311 331 319 150 -454 4 2 0 0 378 339 167 106 -455 4 2 0 0 318 190 142 165 -456 4 2 0 0 138 142 165 318 -457 4 2 0 0 18 12 397 14 -458 4 2 0 0 298 514 331 513 -459 4 2 0 0 118 137 141 168 -460 4 2 0 0 298 331 236 395 -461 4 2 0 0 395 298 331 513 -462 4 2 0 0 93 157 92 159 -463 4 2 0 0 354 158 184 177 -464 4 2 0 0 151 157 92 93 -465 4 2 0 0 78 93 151 92 -466 4 2 0 0 378 448 629 153 -467 4 2 0 0 102 314 126 125 -468 4 2 0 0 126 116 314 102 -469 4 2 0 0 61 72 303 75 -470 4 2 0 0 39 461 350 553 -471 4 2 0 0 350 39 33 461 -472 4 2 0 0 311 331 513 395 -473 4 2 0 0 311 331 305 509 -474 4 2 0 0 353 102 314 116 -475 4 2 0 0 204 215 243 307 -476 4 2 0 0 106 153 167 378 -477 4 2 0 0 97 162 83 302 -478 4 2 0 0 107 353 199 512 -479 4 2 0 0 297 188 164 190 -480 4 2 0 0 147 319 139 135 -481 4 2 0 0 77 353 87 74 -482 4 2 0 0 353 203 199 314 -483 4 2 0 0 512 314 353 199 -484 4 2 0 0 37 38 29 35 -485 4 2 0 0 485 140 373 125 -486 4 2 0 0 398 448 373 196 -487 4 2 0 0 196 570 373 398 -488 4 2 0 0 324 248 552 415 -489 4 2 0 0 415 270 552 324 -490 4 2 0 0 52 57 594 564 -491 4 2 0 0 285 289 414 287 -492 4 2 0 0 438 250 205 240 -493 4 2 0 0 524 425 25 17 -494 4 2 0 0 29 25 524 425 -495 4 2 0 0 87 77 61 353 -496 4 2 0 0 93 92 138 159 -497 4 2 0 0 93 92 79 138 -498 4 2 0 0 203 192 353 155 -499 4 2 0 0 192 353 314 203 -500 4 2 0 0 88 302 129 97 -501 4 2 0 0 169 342 354 302 -502 4 2 0 0 147 319 317 139 -503 4 2 0 0 435 426 629 373 -504 4 2 0 0 197 168 369 176 -505 4 2 0 0 369 176 361 197 -506 4 2 0 0 157 151 319 150 -507 4 2 0 0 307 319 312 191 -508 4 2 0 0 312 307 191 204 -509 4 2 0 0 628 373 441 374 -510 4 2 0 0 513 331 311 509 -511 4 2 0 0 49 594 413 46 -512 4 2 0 0 303 163 87 61 -513 4 2 0 0 146 342 154 122 -514 4 2 0 0 274 366 415 337 -515 4 2 0 0 274 258 366 337 -516 4 2 0 0 87 57 74 66 -517 4 2 0 0 304 306 336 384 -518 4 2 0 0 204 250 205 191 -519 4 2 0 0 110 74 66 87 -520 4 2 0 0 163 87 61 353 -521 4 2 0 0 204 205 250 241 -522 4 2 0 0 387 438 213 316 -523 4 2 0 0 150 160 348 311 -524 4 2 0 0 313 369 342 375 -525 4 2 0 0 313 322 369 375 -526 4 2 0 0 97 129 169 302 -527 4 2 0 0 504 305 393 150 -528 4 2 0 0 181 348 500 187 -529 4 2 0 0 610 527 42 44 -530 4 2 0 0 44 527 42 620 -531 4 2 0 0 311 305 456 509 -532 4 2 0 0 311 509 456 516 -533 4 2 0 0 365 512 166 116 -534 4 2 0 0 116 512 166 314 -535 4 2 0 0 509 305 508 331 -536 4 2 0 0 322 369 193 170 -537 4 2 0 0 535 526 581 632 -538 4 2 0 0 182 314 512 199 -539 4 2 0 0 497 441 373 540 -540 4 2 0 0 37 42 46 527 -541 4 2 0 0 500 209 187 348 -542 4 2 0 0 312 257 307 243 -543 4 2 0 0 323 366 281 276 -544 4 2 0 0 348 420 209 196 -545 4 2 0 0 366 279 276 272 -546 4 2 0 0 202 500 186 348 -547 4 2 0 0 386 406 221 232 -548 4 2 0 0 64 526 62 489 -549 4 2 0 0 336 159 185 195 -550 4 2 0 0 404 24 559 335 -551 4 2 0 0 404 24 607 559 -552 4 2 0 0 384 336 552 270 -553 4 2 0 0 244 240 438 213 -554 4 2 0 0 244 438 240 250 -555 4 2 0 0 430 461 620 333 -556 4 2 0 0 461 333 35 620 -557 4 2 0 0 61 564 64 334 -558 4 2 0 0 381 437 47 413 -559 4 2 0 0 279 277 265 258 -560 4 2 0 0 279 277 258 274 -561 4 2 0 0 186 500 181 348 -562 4 2 0 0 140 510 348 160 -563 4 2 0 0 377 410 36 350 -564 4 2 0 0 202 330 236 209 -565 4 2 0 0 380 345 614 468 -566 4 2 0 0 99 339 378 106 -567 4 2 0 0 378 106 418 99 -568 4 2 0 0 378 448 373 629 -569 4 2 0 0 194 235 307 182 -570 4 2 0 0 194 307 166 182 -571 4 2 0 0 194 307 183 166 -572 4 2 0 0 353 373 320 378 -573 4 2 0 0 68 97 83 302 -574 4 2 0 0 347 496 604 476 -575 4 2 0 0 161 181 411 373 -576 4 2 0 0 570 374 400 368 -577 4 2 0 0 40 38 35 29 -578 4 2 0 0 364 289 327 528 -579 4 2 0 0 324 309 319 273 -580 4 2 0 0 353 378 320 94 -581 4 2 0 0 358 91 471 375 -582 4 2 0 0 134 394 302 354 -583 4 2 0 0 394 149 108 354 -584 4 2 0 0 172 354 146 149 -585 4 2 0 0 382 358 471 375 -586 4 2 0 0 101 382 90 358 -587 4 2 0 0 651 346 638 390 -588 4 2 0 0 382 90 100 101 -589 4 2 0 0 334 594 564 475 -590 4 2 0 0 369 361 375 322 -591 4 2 0 0 322 197 369 361 -592 4 2 0 0 342 325 98 494 -593 4 2 0 0 325 313 148 342 -594 4 2 0 0 342 325 375 98 -595 4 2 0 0 115 369 123 367 -596 4 2 0 0 342 98 76 494 -597 4 2 0 0 369 375 576 115 -598 4 2 0 0 353 512 116 314 -599 4 2 0 0 336 304 552 296 -600 4 2 0 0 336 306 304 298 -601 4 2 0 0 226 514 336 296 -602 4 2 0 0 108 302 81 394 -603 4 2 0 0 181 411 373 374 -604 4 2 0 0 26 440 571 383 -605 4 2 0 0 26 383 346 440 -606 4 2 0 0 211 360 308 206 -607 4 2 0 0 87 74 57 77 -608 4 2 0 0 358 113 101 382 -609 4 2 0 0 195 388 336 226 -610 4 2 0 0 241 233 218 238 -611 4 2 0 0 155 339 378 353 -612 4 2 0 0 345 79 468 476 -613 4 2 0 0 213 316 417 175 -614 4 2 0 0 387 316 213 175 -615 4 2 0 0 312 307 262 319 -616 4 2 0 0 435 485 426 373 -617 4 2 0 0 435 373 125 485 -618 4 2 0 0 299 310 306 384 -619 4 2 0 0 26 425 25 34 -620 4 2 0 0 118 114 367 434 -621 4 2 0 0 26 34 25 608 -622 4 2 0 0 223 222 529 392 -623 4 2 0 0 527 38 37 35 -624 4 2 0 0 37 527 46 38 -625 4 2 0 0 342 123 90 375 -626 4 2 0 0 342 123 85 90 -627 4 2 0 0 335 350 33 35 -628 4 2 0 0 350 461 33 35 -629 4 2 0 0 85 91 90 123 -630 4 2 0 0 259 247 308 261 -631 4 2 0 0 629 628 448 373 -632 4 2 0 0 633 142 328 128 -633 4 2 0 0 629 497 628 373 -634 4 2 0 0 303 61 87 72 -635 4 2 0 0 236 254 234 331 -636 4 2 0 0 341 98 325 355 -637 4 2 0 0 373 570 400 569 -638 4 2 0 0 398 570 373 569 -639 4 2 0 0 49 413 527 46 -640 4 2 0 0 49 46 527 457 -641 4 2 0 0 49 626 48 527 -642 4 2 0 0 241 204 243 250 -643 4 2 0 0 49 527 48 457 -644 4 2 0 0 392 218 233 238 -645 4 2 0 0 233 392 238 223 -646 4 2 0 0 178 198 197 141 -647 4 2 0 0 198 197 141 369 -648 4 2 0 0 364 290 287 528 -649 4 2 0 0 419 381 564 413 -650 4 2 0 0 92 78 79 59 -651 4 2 0 0 192 373 314 353 -652 4 2 0 0 386 406 238 423 -653 4 2 0 0 367 369 137 391 -654 4 2 0 0 437 413 419 606 -655 4 2 0 0 413 437 47 606 -656 4 2 0 0 239 252 322 255 -657 4 2 0 0 454 61 339 155 -658 4 2 0 0 34 466 425 29 -659 4 2 0 0 221 386 232 240 -660 4 2 0 0 60 64 489 484 -661 4 2 0 0 484 65 60 64 -662 4 2 0 0 212 386 218 221 -663 4 2 0 0 241 240 386 212 -664 4 2 0 0 241 205 240 212 -665 4 2 0 0 607 24 16 470 -666 4 2 0 0 620 42 37 527 -667 4 2 0 0 37 333 42 620 -668 4 2 0 0 95 87 66 69 -669 4 2 0 0 113 164 382 361 -670 4 2 0 0 410 30 432 21 -671 4 2 0 0 371 1 522 458 -672 4 2 0 0 527 47 43 40 -673 4 2 0 0 596 425 17 15 -674 4 2 0 0 393 456 160 311 -675 4 2 0 0 110 95 87 66 -676 4 2 0 0 160 311 456 516 -677 4 2 0 0 512 511 365 166 -678 4 2 0 0 353 511 365 512 -679 4 2 0 0 128 144 318 138 -680 4 2 0 0 341 130 325 308 -681 4 2 0 0 87 61 57 58 -682 4 2 0 0 419 58 564 72 -683 4 2 0 0 414 289 327 364 -684 4 2 0 0 320 378 435 94 -685 4 2 0 0 364 528 287 289 -686 4 2 0 0 212 221 205 240 -687 4 2 0 0 134 172 149 354 -688 4 2 0 0 134 172 354 184 -689 4 2 0 0 319 147 191 307 -690 4 2 0 0 589 641 606 436 -691 4 2 0 0 347 79 59 476 -692 4 2 0 0 345 79 476 92 -693 4 2 0 0 92 138 144 328 -694 4 2 0 0 86 92 144 328 -695 4 2 0 0 32 399 34 38 -696 4 2 0 0 306 309 336 310 -697 4 2 0 0 347 604 468 476 -698 4 2 0 0 347 468 79 476 -699 4 2 0 0 614 345 79 468 -700 4 2 0 0 384 310 336 270 -701 4 2 0 0 439 25 26 422 -702 4 2 0 0 196 192 314 420 -703 4 2 0 0 348 420 196 314 -704 4 2 0 0 132 143 142 318 -705 4 2 0 0 164 142 143 318 -706 4 2 0 0 386 406 423 221 -707 4 2 0 0 35 527 38 40 -708 4 2 0 0 158 354 96 162 -709 4 2 0 0 169 302 354 162 -710 4 2 0 0 334 475 564 363 -711 4 2 0 0 155 61 303 75 -712 4 2 0 0 94 353 378 339 -713 4 2 0 0 224 233 219 212 -714 4 2 0 0 214 215 204 194 -715 4 2 0 0 204 243 230 241 -716 4 2 0 0 204 230 212 241 -717 4 2 0 0 391 474 369 136 -718 4 2 0 0 286 588 528 356 -719 4 2 0 0 35 620 527 47 -720 4 2 0 0 136 474 361 565 -721 4 2 0 0 566 526 632 64 -722 4 2 0 0 490 439 11 14 -723 4 2 0 0 209 330 420 348 -724 4 2 0 0 35 527 40 47 -725 4 2 0 0 76 342 73 98 -726 4 2 0 0 77 353 102 320 -727 4 2 0 0 268 308 261 260 -728 4 2 0 0 167 155 339 378 -729 4 2 0 0 465 289 385 344 -730 4 2 0 0 255 308 260 259 -731 4 2 0 0 335 24 470 33 -732 4 2 0 0 559 24 470 335 -733 4 2 0 0 522 1 371 428 -734 4 2 0 0 347 53 496 54 -735 4 2 0 0 559 24 607 470 -736 4 2 0 0 476 347 496 54 -737 4 2 0 0 312 204 243 307 -738 4 2 0 0 230 215 243 204 -739 4 2 0 0 241 218 212 386 -740 4 2 0 0 241 238 218 386 -741 4 2 0 0 29 33 28 23 -742 4 2 0 0 23 335 559 470 -743 4 2 0 0 297 382 361 341 -744 4 2 0 0 336 611 185 331 -745 4 2 0 0 388 185 336 611 -746 4 2 0 0 353 373 102 320 -747 4 2 0 0 373 102 314 353 -748 4 2 0 0 44 527 606 610 -749 4 2 0 0 74 110 84 353 -750 4 2 0 0 610 527 606 413 -751 4 2 0 0 325 341 375 98 -752 4 2 0 0 369 136 137 391 -753 4 2 0 0 169 354 342 313 -754 4 2 0 0 274 366 279 281 -755 4 2 0 0 281 366 279 276 -756 4 2 0 0 322 313 206 308 -757 4 2 0 0 414 289 344 385 -758 4 2 0 0 114 546 367 434 -759 4 2 0 0 367 391 434 369 -760 4 2 0 0 155 163 303 61 -761 4 2 0 0 47 620 527 44 -762 4 2 0 0 384 304 552 336 -763 4 2 0 0 384 310 306 336 -764 4 2 0 0 99 378 339 94 -765 4 2 0 0 506 94 378 99 -766 4 2 0 0 365 353 512 116 -767 4 2 0 0 378 99 418 506 -768 4 2 0 0 478 23 559 470 -769 4 2 0 0 328 86 633 128 -770 4 2 0 0 265 308 268 266 -771 4 2 0 0 268 308 263 266 -772 4 2 0 0 564 419 436 58 -773 4 2 0 0 460 75 564 65 -774 4 2 0 0 339 61 99 94 -775 4 2 0 0 518 564 65 460 -776 4 2 0 0 643 216 229 392 -777 4 2 0 0 342 88 76 67 -778 4 2 0 0 26 422 11 439 -779 4 2 0 0 26 440 439 571 -780 4 2 0 0 411 161 373 441 -781 4 2 0 0 442 467 412 10 -782 4 2 0 0 350 377 24 33 -783 4 2 0 0 225 409 217 223 -784 4 2 0 0 410 377 24 350 -785 4 2 0 0 24 350 33 335 -786 4 2 0 0 371 522 523 458 -787 4 2 0 0 278 324 273 276 -788 4 2 0 0 273 324 275 276 -789 4 2 0 0 170 354 172 184 -790 4 2 0 0 169 179 354 313 -791 4 2 0 0 607 16 24 580 -792 4 2 0 0 367 391 137 118 -793 4 2 0 0 35 620 37 527 -794 4 2 0 0 548 33 461 333 -795 4 2 0 0 414 385 344 294 -796 4 2 0 0 414 289 288 344 -797 4 2 0 0 65 64 484 454 -798 4 2 0 0 93 79 78 401 -799 4 2 0 0 375 382 358 90 -800 4 2 0 0 413 575 564 594 -801 4 2 0 0 187 181 368 189 -802 4 2 0 0 358 375 90 91 -803 4 2 0 0 275 276 324 323 -804 4 2 0 0 493 270 323 275 -805 4 2 0 0 532 323 276 275 -806 4 2 0 0 324 270 323 415 -807 4 2 0 0 275 323 324 270 -808 4 2 0 0 157 331 319 336 -809 4 2 0 0 454 339 61 338 -810 4 2 0 0 527 47 507 43 -811 4 2 0 0 74 87 110 353 -812 4 2 0 0 61 353 339 155 -813 4 2 0 0 444 445 618 379 -814 4 2 0 0 173 133 160 510 -815 4 2 0 0 352 604 468 347 -816 4 2 0 0 161 181 373 348 -817 4 2 0 0 23 335 470 33 -818 4 2 0 0 181 187 374 373 -819 4 2 0 0 29 35 28 33 -820 4 2 0 0 348 187 181 373 -821 4 2 0 0 562 10 412 447 -822 4 2 0 0 10 580 503 447 -823 4 2 0 0 399 351 34 38 -824 4 2 0 0 515 592 399 32 -825 4 2 0 0 434 112 637 474 -826 4 2 0 0 134 82 96 302 -827 4 2 0 0 224 230 233 212 -828 4 2 0 0 134 302 96 354 -829 4 2 0 0 302 354 162 96 -830 4 2 0 0 376 64 60 564 -831 4 2 0 0 606 640 589 45 -832 4 2 0 0 369 137 168 141 -833 4 2 0 0 113 361 583 136 -834 4 2 0 0 197 369 168 141 -835 4 2 0 0 12 7 4 14 -836 4 2 0 0 510 181 173 171 -837 4 2 0 0 61 339 353 94 -838 4 2 0 0 369 154 170 354 -839 4 2 0 0 404 607 24 21 -840 4 2 0 0 411 374 578 441 -841 4 2 0 0 500 186 189 480 -842 4 2 0 0 535 526 632 566 -843 4 2 0 0 628 441 497 483 -844 4 2 0 0 478 23 28 559 -845 4 2 0 0 28 335 559 23 -846 4 2 0 0 93 92 78 79 -847 4 2 0 0 554 473 631 453 -848 4 2 0 0 198 178 193 141 -849 4 2 0 0 187 444 209 500 -850 4 2 0 0 226 388 336 514 -851 4 2 0 0 287 464 285 528 -852 4 2 0 0 528 301 285 372 -853 4 2 0 0 497 629 426 373 -854 4 2 0 0 394 302 70 82 -855 4 2 0 0 64 61 454 75 -856 4 2 0 0 444 587 618 445 -857 4 2 0 0 467 458 371 523 -858 4 2 0 0 371 523 520 467 -859 4 2 0 0 371 520 551 467 -860 4 2 0 0 385 465 294 292 -861 4 2 0 0 468 604 345 476 -862 4 2 0 0 584 517 63 345 -863 4 2 0 0 176 136 137 369 -864 4 2 0 0 439 440 18 571 -865 4 2 0 0 490 26 11 439 -866 4 2 0 0 324 366 227 357 -867 4 2 0 0 606 413 419 436 -868 4 2 0 0 527 48 477 507 -869 4 2 0 0 527 477 48 457 -870 4 2 0 0 527 492 48 507 -871 4 2 0 0 527 626 48 492 -872 4 2 0 0 134 354 96 158 -873 4 2 0 0 62 64 489 60 -874 4 2 0 0 52 57 370 594 -875 4 2 0 0 326 52 55 564 -876 4 2 0 0 524 425 17 19 -877 4 2 0 0 373 441 161 540 -878 4 2 0 0 373 161 140 540 -879 4 2 0 0 66 326 55 58 -880 4 2 0 0 58 326 55 564 -881 4 2 0 0 310 309 336 270 -882 4 2 0 0 324 270 336 309 -883 4 2 0 0 157 336 185 331 -884 4 2 0 0 181 411 171 161 -885 4 2 0 0 640 589 641 606 -886 4 2 0 0 537 557 621 54 -887 4 2 0 0 282 285 340 288 -888 4 2 0 0 372 285 288 340 -889 4 2 0 0 382 100 98 341 -890 4 2 0 0 502 294 465 292 -891 4 2 0 0 43 34 351 38 -892 4 2 0 0 221 240 213 205 -893 4 2 0 0 438 240 205 213 -894 4 2 0 0 425 466 524 29 -895 4 2 0 0 354 302 146 108 -896 4 2 0 0 435 426 506 629 -897 4 2 0 0 497 506 426 629 -898 4 2 0 0 187 181 374 368 -899 4 2 0 0 517 79 614 345 -900 4 2 0 0 342 90 73 98 -901 4 2 0 0 180 141 178 152 -902 4 2 0 0 178 152 141 168 -903 4 2 0 0 193 180 141 178 -904 4 2 0 0 140 161 348 510 -905 4 2 0 0 9 442 13 362 -906 4 2 0 0 442 9 13 467 -907 4 2 0 0 408 505 503 580 -908 4 2 0 0 607 580 408 16 -909 4 2 0 0 327 289 414 385 -910 4 2 0 0 372 284 283 340 -911 4 2 0 0 359 89 526 566 -912 4 2 0 0 607 539 478 470 -913 4 2 0 0 140 373 125 348 -914 4 2 0 0 328 86 92 517 -915 4 2 0 0 527 47 44 606 -916 4 2 0 0 155 163 61 353 -917 4 2 0 0 367 391 118 434 -918 4 2 0 0 338 64 61 454 -919 4 2 0 0 64 338 484 454 -920 4 2 0 0 359 89 566 338 -921 4 2 0 0 489 526 566 64 -922 4 2 0 0 448 192 378 373 -923 4 2 0 0 350 39 377 33 -924 4 2 0 0 369 137 176 168 -925 4 2 0 0 377 350 553 39 -926 4 2 0 0 325 313 375 341 -927 4 2 0 0 340 288 625 282 -928 4 2 0 0 342 313 375 325 -929 4 2 0 0 524 466 19 20 -930 4 2 0 0 425 466 19 524 -931 4 2 0 0 348 395 186 202 -932 4 2 0 0 610 44 42 45 -933 4 2 0 0 409 433 217 223 -934 4 2 0 0 217 433 529 223 -935 4 2 0 0 582 375 471 115 -936 4 2 0 0 434 474 637 369 -937 4 2 0 0 382 375 471 582 -938 4 2 0 0 98 90 382 375 -939 4 2 0 0 382 100 90 98 -940 4 2 0 0 123 105 122 85 -941 4 2 0 0 122 85 105 80 -942 4 2 0 0 43 40 34 38 -943 4 2 0 0 369 474 361 136 -944 4 2 0 0 469 452 564 460 -945 4 2 0 0 46 41 527 457 -946 4 2 0 0 415 366 274 323 -947 4 2 0 0 191 387 316 438 -948 4 2 0 0 191 387 156 316 -949 4 2 0 0 434 391 474 369 -950 4 2 0 0 502 294 344 465 -951 4 2 0 0 502 294 292 293 -952 4 2 0 0 476 59 92 79 -953 4 2 0 0 306 309 319 336 -954 4 2 0 0 528 301 464 285 -955 4 2 0 0 301 282 464 285 -956 4 2 0 0 208 449 210 379 -957 4 2 0 0 210 379 220 208 -958 4 2 0 0 551 520 10 467 -959 4 2 0 0 359 89 339 106 -960 4 2 0 0 110 353 365 116 -961 4 2 0 0 353 511 110 365 -962 4 2 0 0 118 141 145 152 -963 4 2 0 0 34 28 466 29 -964 4 2 0 0 621 347 59 54 -965 4 2 0 0 59 621 79 347 -966 4 2 0 0 342 80 122 302 -967 4 2 0 0 369 123 154 342 -968 4 2 0 0 123 85 122 342 -969 4 2 0 0 122 342 85 80 -970 4 2 0 0 450 349 612 482 -971 4 2 0 0 564 55 436 413 -972 4 2 0 0 40 38 29 34 -973 4 2 0 0 606 641 413 436 -974 4 2 0 0 28 35 335 33 -975 4 2 0 0 34 25 32 29 -976 4 2 0 0 487 548 495 479 -977 4 2 0 0 187 209 196 348 -978 4 2 0 0 461 479 430 495 -979 4 2 0 0 311 513 509 186 -980 4 2 0 0 395 311 348 186 -981 4 2 0 0 187 196 209 444 -982 4 2 0 0 485 540 426 373 -983 4 2 0 0 21 580 24 447 -984 4 2 0 0 412 447 21 562 -985 4 2 0 0 412 562 21 446 -986 4 2 0 0 447 580 24 10 -987 4 2 0 0 46 527 610 413 -988 4 2 0 0 229 392 216 222 -989 4 2 0 0 323 281 366 274 -990 4 2 0 0 281 301 274 323 -991 4 2 0 0 599 625 429 282 -992 4 2 0 0 608 25 32 34 -993 4 2 0 0 372 288 284 340 -994 4 2 0 0 227 324 190 308 -995 4 2 0 0 373 196 348 187 -996 4 2 0 0 425 25 34 29 -997 4 2 0 0 628 448 373 591 -998 4 2 0 0 591 448 373 398 -999 4 2 0 0 477 43 41 527 -1000 4 2 0 0 80 71 81 302 -1001 4 2 0 0 457 477 41 527 -1002 4 2 0 0 647 487 430 479 -1003 4 2 0 0 628 373 497 441 -1004 4 2 0 0 578 628 441 374 -1005 4 2 0 0 410 24 335 350 -1006 4 2 0 0 393 311 160 150 -1007 4 2 0 0 367 118 137 141 -1008 4 2 0 0 343 488 356 396 -1009 4 2 0 0 87 72 61 58 -1010 4 2 0 0 488 588 356 396 -1011 4 2 0 0 476 54 59 347 -1012 4 2 0 0 94 353 61 77 -1013 4 2 0 0 110 353 87 107 -1014 4 2 0 0 251 245 322 201 -1015 4 2 0 0 245 179 322 201 -1016 4 2 0 0 11 422 486 14 -1017 4 2 0 0 287 588 464 528 -1018 4 2 0 0 10 467 412 551 -1019 4 2 0 0 13 551 412 467 -1020 4 2 0 0 371 467 551 13 -1021 4 2 0 0 551 10 8 412 -1022 4 2 0 0 113 164 361 136 -1023 4 2 0 0 425 25 15 26 -1024 4 2 0 0 140 348 125 160 -1025 4 2 0 0 451 588 528 286 -1026 4 2 0 0 180 152 145 141 -1027 4 2 0 0 607 16 539 470 -1028 4 2 0 0 374 570 400 373 -1029 4 2 0 0 373 374 556 400 -1030 4 2 0 0 374 373 556 628 -1031 4 2 0 0 441 628 578 483 -1032 4 2 0 0 497 642 418 629 -1033 4 2 0 0 167 89 106 339 -1034 4 2 0 0 346 440 390 521 -1035 4 2 0 0 369 123 342 375 -1036 4 2 0 0 583 382 498 361 -1037 4 2 0 0 564 75 72 61 -1038 4 2 0 0 564 61 64 75 -1039 4 2 0 0 345 517 79 92 -1040 4 2 0 0 533 529 223 222 -1041 4 2 0 0 498 582 576 375 -1042 4 2 0 0 575 376 609 49 -1043 4 2 0 0 412 10 8 447 -1044 4 2 0 0 561 472 549 468 -1045 4 2 0 0 239 322 252 231 -1046 4 2 0 0 397 12 4 14 -1047 4 2 0 0 367 369 434 576 -1048 4 2 0 0 206 313 322 179 -1049 4 2 0 0 322 179 313 354 -1050 4 2 0 0 12 2 4 7 -1051 4 2 0 0 346 638 26 608 -1052 4 2 0 0 66 87 57 58 -1053 4 2 0 0 72 58 564 61 -1054 4 2 0 0 322 207 231 239 -1055 4 2 0 0 201 354 322 207 -1056 4 2 0 0 239 255 322 201 -1057 4 2 0 0 533 402 529 222 -1058 4 2 0 0 60 518 564 65 -1059 4 2 0 0 11 486 12 14 -1060 4 2 0 0 118 168 141 152 -1061 4 2 0 0 60 376 564 518 -1062 4 2 0 0 576 375 582 115 -1063 4 2 0 0 515 34 399 351 -1064 4 2 0 0 334 564 64 363 -1065 4 2 0 0 311 331 150 305 -1066 4 2 0 0 473 538 597 519 -1067 4 2 0 0 564 594 575 475 -1068 4 2 0 0 36 30 432 410 -1069 4 2 0 0 343 396 356 279 -1070 4 2 0 0 281 279 356 396 -1071 4 2 0 0 281 274 301 356 -1072 4 2 0 0 486 7 14 422 -1073 4 2 0 0 642 153 585 629 -1074 4 2 0 0 153 642 628 629 -1075 4 2 0 0 503 447 8 10 -1076 4 2 0 0 461 430 620 416 -1077 4 2 0 0 493 270 275 280 -1078 4 2 0 0 275 493 532 323 -1079 4 2 0 0 532 493 282 323 -1080 4 2 0 0 461 495 430 416 -1081 4 2 0 0 493 532 280 275 -1082 4 2 0 0 389 381 47 413 -1083 4 2 0 0 49 413 626 527 -1084 4 2 0 0 500 189 186 181 -1085 4 2 0 0 498 382 582 375 -1086 4 2 0 0 410 30 24 377 -1087 4 2 0 0 30 410 36 377 -1088 4 2 0 0 366 265 279 272 -1089 4 2 0 0 608 34 32 31 -1090 4 2 0 0 527 40 43 38 -1091 4 2 0 0 46 527 41 38 -1092 4 2 0 0 43 527 38 41 -1093 4 2 0 0 597 639 7 486 -1094 4 2 0 0 306 298 336 331 -1095 4 2 0 0 11 26 15 543 -1096 4 2 0 0 554 11 15 543 -1097 4 2 0 0 416 430 620 649 -1098 4 2 0 0 291 290 364 327 -1099 4 2 0 0 637 498 375 361 -1100 4 2 0 0 39 548 33 461 -1101 4 2 0 0 422 634 25 543 -1102 4 2 0 0 583 582 382 113 -1103 4 2 0 0 367 114 118 141 -1104 4 2 0 0 473 422 11 554 -1105 4 2 0 0 178 197 168 141 -1106 4 2 0 0 375 369 123 115 -1107 4 2 0 0 91 123 115 375 -1108 4 2 0 0 377 350 36 553 -1109 4 2 0 0 173 181 516 186 -1110 4 2 0 0 110 95 107 87 -1111 4 2 0 0 353 107 163 87 -1112 4 2 0 0 46 527 42 610 -1113 4 2 0 0 500 209 348 202 -1114 4 2 0 0 334 61 564 57 -1115 4 2 0 0 510 103 140 161 -1116 4 2 0 0 160 104 140 133 -1117 4 2 0 0 486 11 473 422 -1118 4 2 0 0 336 611 331 514 -1119 4 2 0 0 576 434 637 369 -1120 4 2 0 0 29 466 524 20 -1121 4 2 0 0 366 279 265 258 -1122 4 2 0 0 366 279 258 274 -1123 4 2 0 0 89 484 338 454 -1124 4 2 0 0 462 621 568 534 -1125 4 2 0 0 133 104 140 103 -1126 4 2 0 0 462 534 568 531 -1127 4 2 0 0 521 440 390 563 -1128 4 2 0 0 383 440 563 390 -1129 4 2 0 0 141 154 170 369 -1130 4 2 0 0 141 193 369 170 -1131 4 2 0 0 173 181 510 516 -1132 4 2 0 0 348 510 181 516 -1133 4 2 0 0 324 366 276 272 -1134 4 2 0 0 415 324 366 323 -1135 4 2 0 0 477 527 507 43 -1136 4 2 0 0 26 25 440 346 -1137 4 2 0 0 430 333 42 479 -1138 4 2 0 0 460 452 564 75 -1139 4 2 0 0 31 515 32 592 -1140 4 2 0 0 181 189 187 500 -1141 4 2 0 0 389 527 413 47 -1142 4 2 0 0 413 389 626 527 -1143 4 2 0 0 376 590 49 575 -1144 4 2 0 0 331 611 185 508 -1145 4 2 0 0 223 392 407 219 -1146 4 2 0 0 223 233 392 219 -1147 4 2 0 0 538 648 597 519 -1148 4 2 0 0 597 648 538 486 -1149 4 2 0 0 557 537 568 499 -1150 4 2 0 0 553 39 461 416 -1151 4 2 0 0 290 528 451 287 -1152 4 2 0 0 554 453 332 560 -1153 4 2 0 0 601 467 458 9 -1154 4 2 0 0 623 525 535 566 -1155 4 2 0 0 566 525 535 526 -1156 4 2 0 0 378 106 431 418 -1157 4 2 0 0 53 496 352 347 -1158 4 2 0 0 564 300 419 72 -1159 4 2 0 0 564 452 300 72 -1160 4 2 0 0 2 6 7 486 -1161 4 2 0 0 421 451 528 286 -1162 4 2 0 0 451 528 588 287 -1163 4 2 0 0 409 595 433 491 -1164 4 2 0 0 79 621 78 401 -1165 4 2 0 0 401 621 78 555 -1166 4 2 0 0 78 537 555 621 -1167 4 2 0 0 599 340 282 301 -1168 4 2 0 0 493 599 282 301 -1169 4 2 0 0 430 620 42 333 -1170 4 2 0 0 565 498 112 637 -1171 4 2 0 0 583 498 112 565 -1172 4 2 0 0 599 429 536 282 -1173 4 2 0 0 599 625 459 429 -1174 4 2 0 0 543 554 332 15 -1175 4 2 0 0 474 112 637 565 -1176 4 2 0 0 364 290 528 327 -1177 4 2 0 0 548 461 479 333 -1178 4 2 0 0 461 333 430 479 -1179 4 2 0 0 383 390 346 440 -1180 4 2 0 0 65 60 64 564 -1181 4 2 0 0 65 64 75 564 -1182 4 2 0 0 383 638 346 390 -1183 4 2 0 0 380 468 614 549 -1184 4 2 0 0 532 282 276 323 -1185 4 2 0 0 157 331 504 150 -1186 4 2 0 0 89 454 338 339 -1187 4 2 0 0 167 454 89 339 -1188 4 2 0 0 8 5 10 551 -1189 4 2 0 0 5 520 10 551 -1190 4 2 0 0 492 626 545 389 -1191 4 2 0 0 389 626 545 469 -1192 4 2 0 0 37 33 35 29 -1193 4 2 0 0 615 568 499 557 -1194 4 2 0 0 500 186 480 202 -1195 4 2 0 0 54 56 53 496 -1196 4 2 0 0 294 295 291 385 -1197 4 2 0 0 295 291 385 327 -1198 4 2 0 0 295 294 292 385 -1199 4 2 0 0 474 637 361 565 -1200 4 2 0 0 497 373 426 540 -1201 4 2 0 0 40 29 28 34 -1202 4 2 0 0 535 525 581 526 -1203 4 2 0 0 328 92 79 517 -1204 4 2 0 0 496 56 352 604 -1205 4 2 0 0 459 536 646 493 -1206 4 2 0 0 459 429 624 536 -1207 4 2 0 0 493 536 280 532 -1208 4 2 0 0 25 346 26 608 -1209 4 2 0 0 351 399 41 38 -1210 4 2 0 0 43 41 38 351 -1211 4 2 0 0 527 413 47 606 -1212 4 2 0 0 308 252 322 231 -1213 4 2 0 0 308 255 322 252 -1214 4 2 0 0 256 231 252 308 -1215 4 2 0 0 256 308 259 247 -1216 4 2 0 0 21 30 24 410 -1217 4 2 0 0 21 30 562 24 -1218 4 2 0 0 315 621 555 568 -1219 4 2 0 0 217 219 223 407 -1220 4 2 0 0 225 223 219 233 -1221 4 2 0 0 407 217 529 223 -1222 4 2 0 0 381 452 300 564 -1223 4 2 0 0 595 635 433 491 -1224 4 2 0 0 414 385 291 327 -1225 4 2 0 0 416 39 461 495 -1226 4 2 0 0 461 39 548 495 -1227 4 2 0 0 461 548 479 495 -1228 4 2 0 0 301 282 281 464 -1229 4 2 0 0 301 282 285 340 -1230 4 2 0 0 315 621 568 462 -1231 4 2 0 0 372 289 288 285 -1232 4 2 0 0 289 288 285 414 -1233 4 2 0 0 431 153 106 378 -1234 4 2 0 0 55 641 589 436 -1235 4 2 0 0 651 572 638 608 -1236 4 2 0 0 564 452 72 75 -1237 4 2 0 0 573 534 567 613 -1238 4 2 0 0 567 645 600 534 -1239 4 2 0 0 499 568 577 537 -1240 4 2 0 0 414 327 291 364 -1241 4 2 0 0 561 549 614 468 -1242 4 2 0 0 338 489 566 64 -1243 4 2 0 0 89 484 489 338 -1244 4 2 0 0 385 294 465 344 -1245 4 2 0 0 445 196 444 209 -1246 4 2 0 0 209 550 444 427 -1247 4 2 0 0 490 14 11 12 -1248 4 2 0 0 490 18 14 12 -1249 4 2 0 0 597 648 486 7 -1250 4 2 0 0 486 639 7 422 -1251 4 2 0 0 639 473 597 631 -1252 4 2 0 0 529 491 616 533 -1253 4 2 0 0 435 320 125 373 -1254 4 2 0 0 616 491 529 541 -1255 4 2 0 0 497 628 642 629 -1256 4 2 0 0 46 52 413 602 -1257 4 2 0 0 623 359 566 338 -1258 4 2 0 0 497 506 629 418 -1259 4 2 0 0 99 359 623 338 -1260 4 2 0 0 65 64 454 75 -1261 4 2 0 0 209 617 550 427 -1262 4 2 0 0 86 328 144 128 -1263 4 2 0 0 570 187 374 368 -1264 4 2 0 0 403 86 633 328 -1265 4 2 0 0 601 522 458 523 -1266 4 2 0 0 604 352 472 56 -1267 4 2 0 0 273 312 319 324 -1268 4 2 0 0 380 614 63 549 -1269 4 2 0 0 561 549 63 614 -1270 4 2 0 0 623 525 566 359 -1271 4 2 0 0 359 525 566 526 -1272 4 2 0 0 566 89 526 489 -1273 4 2 0 0 113 382 358 471 -1274 4 2 0 0 582 471 382 113 -1275 4 2 0 0 523 467 458 601 -1276 4 2 0 0 268 308 260 263 -1277 4 2 0 0 374 628 556 578 -1278 4 2 0 0 498 582 382 583 -1279 4 2 0 0 586 645 534 557 -1280 4 2 0 0 361 176 369 136 -1281 4 2 0 0 277 356 274 279 -1282 4 2 0 0 576 637 375 369 -1283 4 2 0 0 637 375 369 361 -1284 4 2 0 0 373 556 569 400 -1285 4 2 0 0 556 373 569 628 -1286 4 2 0 0 447 562 24 21 -1287 4 2 0 0 47 492 527 507 -1288 4 2 0 0 495 39 548 487 -1289 4 2 0 0 572 608 651 650 -1290 4 2 0 0 541 619 542 574 -1291 4 2 0 0 27 562 21 30 -1292 4 2 0 0 21 446 562 27 -1293 4 2 0 0 517 328 614 79 -1294 4 2 0 0 545 530 622 575 -1295 4 2 0 0 522 371 523 558 -1296 4 2 0 0 523 371 520 558 -1297 4 2 0 0 471 91 115 375 -1298 4 2 0 0 578 127 628 556 -1299 4 2 0 0 127 153 628 556 -1300 4 2 0 0 641 413 55 52 -1301 4 2 0 0 55 564 436 58 -1302 4 2 0 0 564 334 57 594 -1303 4 2 0 0 55 641 436 413 -1304 4 2 0 0 575 413 49 594 -1305 4 2 0 0 15 17 596 560 -1306 4 2 0 0 521 440 563 571 -1307 4 2 0 0 632 581 62 526 -1308 4 2 0 0 285 372 301 340 -1309 4 2 0 0 290 451 528 421 -1310 4 2 0 0 326 57 564 58 -1311 4 2 0 0 205 212 241 204 -1312 4 2 0 0 564 452 469 381 -1313 4 2 0 0 239 322 207 201 -1314 4 2 0 0 223 392 529 407 -1315 4 2 0 0 381 564 413 469 -1316 4 2 0 0 395 513 311 186 -1317 4 2 0 0 389 469 413 626 -1318 4 2 0 0 136 361 583 565 -1319 4 2 0 0 586 645 567 534 -1320 4 2 0 0 32 25 608 346 -1321 4 2 0 0 369 367 137 141 -1322 4 2 0 0 469 575 545 622 -1323 4 2 0 0 593 543 634 422 -1324 4 2 0 0 373 569 628 591 -1325 4 2 0 0 556 569 153 628 -1326 4 2 0 0 196 187 373 570 -1327 4 2 0 0 167 454 339 155 -1328 4 2 0 0 590 626 575 530 -1329 4 2 0 0 536 493 282 532 -1330 4 2 0 0 133 140 160 510 -1331 4 2 0 0 376 363 64 564 -1332 4 2 0 0 209 427 444 587 -1333 4 2 0 0 571 440 563 383 -1334 4 2 0 0 498 375 576 637 -1335 4 2 0 0 531 534 568 579 -1336 4 2 0 0 534 568 557 621 -1337 4 2 0 0 218 392 643 238 -1338 4 2 0 0 568 555 577 537 -1339 4 2 0 0 475 609 363 49 -1340 4 2 0 0 363 609 475 564 -1341 4 2 0 0 393 311 150 305 -1342 4 2 0 0 19 425 17 596 -1343 4 2 0 0 596 17 603 560 -1344 4 2 0 0 522 428 371 558 -1345 4 2 0 0 127 628 497 483 -1346 4 2 0 0 492 48 545 626 -1347 4 2 0 0 21 607 24 580 -1348 4 2 0 0 132 117 318 128 -1349 4 2 0 0 633 132 547 142 -1350 4 2 0 0 437 381 419 413 -1351 4 2 0 0 419 381 437 300 -1352 4 2 0 0 173 181 186 171 -1353 4 2 0 0 405 613 600 534 -1354 4 2 0 0 632 526 62 64 -1355 4 2 0 0 489 484 64 338 -1356 4 2 0 0 600 54 53 621 -1357 4 2 0 0 29 20 28 466 -1358 4 2 0 0 20 28 466 443 -1359 4 2 0 0 49 48 626 590 -1360 4 2 0 0 63 345 614 380 -1361 4 2 0 0 584 345 63 380 -1362 4 2 0 0 470 607 559 478 -1363 4 2 0 0 28 23 22 20 -1364 4 2 0 0 478 23 22 28 -1365 4 2 0 0 473 422 554 631 -1366 4 2 0 0 555 537 568 621 -1367 4 2 0 0 18 490 14 439 -1368 4 2 0 0 596 17 19 603 -1369 4 2 0 0 571 440 18 521 -1370 4 2 0 0 542 491 616 541 -1371 4 2 0 0 534 568 615 557 -1372 4 2 0 0 534 568 579 615 -1373 4 2 0 0 392 222 229 238 -1374 4 2 0 0 626 48 530 590 -1375 4 2 0 0 238 406 229 423 -1376 4 2 0 0 629 585 642 418 -1377 4 2 0 0 418 506 629 378 -1378 4 2 0 0 378 431 629 418 -1379 4 2 0 0 153 448 628 591 -1380 4 2 0 0 591 569 628 153 -1381 4 2 0 0 550 209 500 627 -1382 4 2 0 0 515 31 32 34 -1383 4 2 0 0 209 627 550 617 -1384 4 2 0 0 569 556 153 400 -1385 4 2 0 0 645 621 557 54 -1386 4 2 0 0 529 491 533 223 -1387 4 2 0 0 601 1 458 522 -1388 4 2 0 0 522 601 1 3 -1389 4 2 0 0 359 339 99 106 -1390 4 2 0 0 338 99 359 339 -1391 4 2 0 0 49 575 626 413 -1392 4 2 0 0 473 597 631 453 -1393 4 2 0 0 605 564 518 460 -1394 4 2 0 0 222 392 402 529 -1395 4 2 0 0 113 382 583 361 -1396 4 2 0 0 33 335 28 23 -1397 4 2 0 0 370 52 594 46 -1398 4 2 0 0 408 505 580 607 -1399 4 2 0 0 413 640 602 641 -1400 4 2 0 0 630 376 564 609 -1401 4 2 0 0 49 376 609 363 -1402 4 2 0 0 363 376 609 564 -1403 4 2 0 0 393 456 311 305 -1404 4 2 0 0 218 221 386 643 -1405 4 2 0 0 643 386 423 221 -1406 4 2 0 0 141 123 369 367 -1407 4 2 0 0 498 382 375 361 -1408 4 2 0 0 474 637 369 361 -1409 4 2 0 0 558 371 520 551 -1410 4 2 0 0 558 428 371 551 -1411 4 2 0 0 374 441 411 373 -1412 4 2 0 0 422 25 26 543 -1413 4 2 0 0 25 17 15 634 -1414 4 2 0 0 606 44 610 45 -1415 4 2 0 0 367 115 369 576 -1416 4 2 0 0 367 576 546 115 -1417 4 2 0 0 636 573 567 613 -1418 4 2 0 0 615 51 579 573 -1419 4 2 0 0 50 51 615 636 -1420 4 2 0 0 55 413 564 52 -1421 4 2 0 0 594 52 413 46 -1422 4 2 0 0 564 326 52 57 -1423 4 2 0 0 367 434 546 576 -1424 4 2 0 0 208 449 379 445 -1425 4 2 0 0 379 445 544 208 -1426 4 2 0 0 26 439 440 25 -1427 4 2 0 0 622 575 605 469 -1428 4 2 0 0 636 586 567 573 -1429 4 2 0 0 573 586 567 534 -1430 4 2 0 0 599 625 340 283 -1431 4 2 0 0 605 630 518 564 -1432 4 2 0 0 171 510 181 161 -1433 4 2 0 0 32 29 38 34 -1434 4 2 0 0 402 216 392 222 -1435 4 2 0 0 223 222 392 238 -1436 4 2 0 0 389 492 527 47 -1437 4 2 0 0 389 492 626 527 -1438 4 2 0 0 577 555 78 537 -1439 4 2 0 0 315 621 401 555 -1440 4 2 0 0 15 598 634 560 -1441 4 2 0 0 634 17 15 560 -1442 4 2 0 0 481 142 328 633 -1443 4 2 0 0 128 328 144 138 -1444 4 2 0 0 413 610 640 606 -1445 4 2 0 0 640 606 610 45 -1446 4 2 0 0 379 449 444 445 -1447 4 2 0 0 187 449 196 444 -1448 4 2 0 0 445 449 444 196 -1449 4 2 0 0 605 564 460 469 -1450 4 2 0 0 575 564 605 469 -1451 4 2 0 0 541 200 619 574 -1452 4 2 0 0 564 436 419 413 -1453 4 2 0 0 517 482 63 614 -1454 4 2 0 0 154 369 141 123 -1455 4 2 0 0 583 498 565 361 -1456 4 2 0 0 498 361 637 565 -1457 4 2 0 0 622 530 630 575 -1458 4 2 0 0 21 30 432 27 -1459 4 2 0 0 173 510 160 516 -1460 4 2 0 0 311 160 348 516 -1461 4 2 0 0 485 140 540 373 -1462 4 2 0 0 21 505 580 447 -1463 4 2 0 0 490 26 439 571 -1464 4 2 0 0 379 544 220 208 -1465 4 2 0 0 348 516 181 186 -1466 4 2 0 0 186 509 311 516 -1467 4 2 0 0 209 202 627 617 -1468 4 2 0 0 433 635 529 491 -1469 4 2 0 0 430 42 620 44 -1470 4 2 0 0 649 430 620 44 -1471 4 2 0 0 529 635 541 491 -1472 4 2 0 0 404 24 410 21 -1473 4 2 0 0 404 410 24 335 -1474 4 2 0 0 89 338 359 339 -1475 4 2 0 0 450 328 482 517 -1476 4 2 0 0 517 328 482 614 -1477 4 2 0 0 78 59 537 621 -1478 4 2 0 0 588 396 281 356 -1479 4 2 0 0 286 488 588 356 -1480 4 2 0 0 424 543 593 422 -1481 4 2 0 0 463 607 408 16 -1482 4 2 0 0 389 381 413 469 -1483 4 2 0 0 413 469 575 626 -1484 4 2 0 0 626 469 575 545 -1485 4 2 0 0 554 11 543 422 -1486 4 2 0 0 459 624 646 536 -1487 4 2 0 0 332 543 593 424 -1488 4 2 0 0 631 554 424 422 -1489 4 2 0 0 153 431 629 378 -1490 4 2 0 0 545 48 530 626 -1491 4 2 0 0 626 530 545 575 -1492 4 2 0 0 59 621 78 79 -1493 4 2 0 0 160 510 348 516 -1494 4 2 0 0 626 590 575 49 -1495 4 2 0 0 576 434 112 637 -1496 4 2 0 0 498 576 112 637 -1497 4 2 0 0 346 651 638 608 -1498 4 2 0 0 13 442 412 362 -1499 4 2 0 0 13 467 412 442 -1500 4 2 0 0 132 142 633 128 -1501 4 2 0 0 184 180 172 170 -1502 4 2 0 0 631 332 424 554 -1503 4 2 0 0 531 573 579 51 -1504 4 2 0 0 521 571 563 18 -1505 4 2 0 0 599 625 282 340 -1506 4 2 0 0 622 630 605 575 -1507 4 2 0 0 562 442 362 412 -1508 4 2 0 0 193 180 170 141 -1509 4 2 0 0 50 644 636 615 -1510 4 2 0 0 443 466 20 19 -1511 4 2 0 0 616 542 533 491 -1512 4 2 0 0 413 594 564 52 -1513 4 2 0 0 621 53 600 405 -1514 4 2 0 0 362 562 446 27 -1515 4 2 0 0 403 547 321 481 -1516 4 2 0 0 403 481 321 329 -1517 4 2 0 0 562 442 412 10 -1518 4 2 0 0 493 459 536 599 -1519 4 2 0 0 493 599 536 282 -1520 4 2 0 0 450 86 328 517 -1521 4 2 0 0 413 602 610 46 -1522 4 2 0 0 29 23 28 20 -1523 4 2 0 0 223 409 433 491 -1524 4 2 0 0 621 59 537 54 -1525 4 2 0 0 13 362 412 446 -1526 4 2 0 0 439 422 11 14 -1527 4 2 0 0 639 473 631 422 -1528 4 2 0 0 450 612 584 517 -1529 4 2 0 0 450 482 612 517 -1530 4 2 0 0 413 641 602 52 -1531 4 2 0 0 447 10 24 562 -1532 4 2 0 0 531 573 534 579 -1533 4 2 0 0 380 345 468 604 -1534 4 2 0 0 587 427 444 618 -1535 4 2 0 0 613 567 600 534 -1536 4 2 0 0 218 386 238 643 -1537 4 2 0 0 643 238 423 386 -1538 4 2 0 0 347 496 352 604 -1539 4 2 0 0 63 345 517 614 -1540 4 2 0 0 584 612 63 517 -1541 4 2 0 0 629 431 585 418 -1542 4 2 0 0 153 431 585 629 -1543 4 2 0 0 463 539 478 607 -1544 4 2 0 0 463 539 607 16 -1545 4 2 0 0 564 609 475 575 -1546 4 2 0 0 533 529 402 616 -1547 4 2 0 0 376 630 564 518 -1548 4 2 0 0 645 54 600 621 -1549 4 2 0 0 380 468 472 604 -1550 4 2 0 0 604 468 472 352 -1551 4 2 0 0 380 468 549 472 -1552 4 2 0 0 570 187 373 374 -1553 4 2 0 0 606 413 641 640 -1554 4 2 0 0 413 610 602 640 -1555 4 2 0 0 458 467 13 9 -1556 4 2 0 0 467 458 13 371 -1557 4 2 0 0 11 422 26 543 -1558 4 2 0 0 25 17 425 15 -1559 4 2 0 0 646 536 280 493 -1560 4 2 0 0 646 624 280 536 -1561 4 2 0 0 647 430 44 42 -1562 4 2 0 0 618 544 220 379 -1563 4 2 0 0 648 6 486 7 -1564 4 2 0 0 648 6 538 486 -1565 4 2 0 0 403 633 547 481 -1566 4 2 0 0 403 328 633 481 -1567 4 2 0 0 483 127 628 578 -1568 4 2 0 0 486 7 12 14 -1569 4 2 0 0 53 56 352 496 -1570 4 2 0 0 340 288 284 625 -1571 4 2 0 0 283 340 284 625 -1572 4 2 0 0 561 352 472 468 -1573 4 2 0 0 86 450 328 403 -1574 4 2 0 0 329 403 481 328 -1575 4 2 0 0 455 288 284 372 -1576 4 2 0 0 501 288 284 455 -1577 4 2 0 0 376 530 575 630 -1578 4 2 0 0 630 376 609 575 -1579 4 2 0 0 430 479 42 647 -1580 4 2 0 0 621 405 600 534 -1581 4 2 0 0 22 28 20 443 -1582 4 2 0 0 643 238 229 423 -1583 4 2 0 0 481 633 547 142 -1584 4 2 0 0 558 428 551 652 -1585 4 2 0 0 509 611 331 508 -1586 4 2 0 0 513 514 331 611 -1587 4 2 0 0 509 513 331 611 -1588 4 2 0 0 601 9 1 3 -1589 4 2 0 0 289 288 344 501 -1590 4 2 0 0 515 32 399 34 -1591 4 2 0 0 403 321 349 329 -1592 4 2 0 0 392 229 643 238 -1593 4 2 0 0 618 445 544 379 -1594 4 2 0 0 618 587 544 445 -1595 4 2 0 0 531 613 534 573 -1596 4 2 0 0 629 153 448 628 -1597 4 2 0 0 538 473 597 486 -1598 4 2 0 0 597 473 639 486 -1599 4 2 0 0 650 31 608 346 -1600 4 2 0 0 607 505 580 21 -1601 4 2 0 0 288 455 289 372 -1602 4 2 0 0 289 455 288 501 -1603 4 2 0 0 376 530 590 575 -1604 4 2 0 0 49 594 475 575 -1605 4 2 0 0 356 279 281 274 -1606 4 2 0 0 550 209 444 500 -1607 4 2 0 0 362 412 446 562 -1608 4 2 0 0 529 433 491 223 -1609 4 2 0 0 455 372 284 283 -1610 4 2 0 0 465 501 455 289 -1611 4 2 0 0 465 289 344 501 -1612 4 2 0 0 445 209 444 587 -1613 4 2 0 0 153 642 127 628 -1614 4 2 0 0 294 385 291 414 -1615 4 2 0 0 283 625 459 599 -1616 4 2 0 0 613 531 51 573 -1617 4 2 0 0 636 573 613 51 -1618 4 2 0 0 557 621 568 537 -1619 4 2 0 0 558 551 520 5 -1620 4 2 0 0 500 209 202 627 -1621 4 2 0 0 635 200 541 574 -1622 4 2 0 0 595 200 635 574 -1623 4 2 0 0 558 652 551 5 -1624 4 2 0 0 534 579 573 615 -1625 4 2 0 0 605 575 630 564 -1626 4 2 0 0 31 346 32 608 -1627 4 2 0 0 631 424 639 422 -1628 4 2 0 0 383 346 638 26 -1629 4 2 0 0 469 575 564 413 -1630 4 2 0 0 15 560 332 598 -1631 4 2 0 0 15 554 332 560 -1632 4 2 0 0 586 557 534 615 -1633 4 2 0 0 573 586 534 615 -1634 4 2 0 0 332 543 598 593 -1635 4 2 0 0 543 332 598 15 -1636 4 2 0 0 609 575 564 630 -1637 4 2 0 0 554 631 332 453 -1638 4 2 0 0 424 554 543 422 -1639 4 2 0 0 608 346 651 650 -1640 4 2 0 0 487 495 430 479 -1641 4 2 0 0 645 621 534 557 -1642 4 2 0 0 645 621 600 534 -1643 4 2 0 0 542 491 541 574 -1644 4 2 0 0 541 635 574 491 -1645 4 2 0 0 636 644 586 573 -1646 4 2 0 0 573 586 615 644 -1647 4 2 0 0 543 634 598 593 -1648 4 2 0 0 497 127 642 628 -1649 4 2 0 0 598 543 15 634 -1650 4 2 0 0 25 15 543 634 -1651 4 2 0 0 473 519 597 453 -1652 4 2 0 0 595 574 635 491 -1653 4 2 0 0 636 51 615 573 -1654 4 2 0 0 644 573 636 615 -$EndElements diff --git a/test/user/testdata/shark_22_ascii_missing_element.msh b/test/user/testdata/shark_22_ascii_missing_element.msh deleted file mode 100644 index d768cd12..00000000 --- a/test/user/testdata/shark_22_ascii_missing_element.msh +++ /dev/null @@ -1,3978 +0,0 @@ -$MeshFormat -2.2 0 8 -$EndMeshFormat -$Nodes -652 -1 -0.0733436 0.0816748 0.056402 -2 -0.0729126 0.0537921 0.00170478 -3 -0.072634 0.0799069 0.0578949 -4 -0.0715817 0.0520377 0.00292576 -5 -0.0701949 0.0802569 0.0450431 -6 -0.0687698 0.060971 0.00326551 -7 -0.06778 0.060358 0.00473741 -8 -0.0672796 0.0809249 0.0425553 -9 -0.0658074 0.0806443 0.0552302 -10 -0.064933 0.0788176 0.0453762 -11 -0.0636555 0.0610198 0.00141989 -12 -0.0636111 0.0566004 -0.000556663 -13 -0.0636791 0.0819076 0.0524468 -14 -0.0623445 0.0580268 0.00335683 -15 -0.0624856 0.0671058 0.00581638 -16 -0.0601398 0.0781111 0.0317589 -17 -0.0599443 0.0685632 0.00992449 -18 -0.0592787 0.0571239 0.00105116 -19 -0.0587906 0.0719999 0.0117948 -20 -0.0575605 0.0730663 0.016213 -21 -0.057624 0.0811803 0.0403639 -22 -0.0572339 0.0769387 0.0223219 -23 -0.0559974 0.0749629 0.0235691 -24 -0.0542321 0.0763209 0.0344665 -25 -0.0540672 0.0649483 0.00821813 -26 -0.0541685 0.0661135 0.00437935 -27 -0.0532966 0.0805356 0.0466758 -28 -0.0517252 0.0761185 0.0183218 -29 -0.0505257 0.068877 0.0152572 -30 -0.0503803 0.0772638 0.0406423 -31 -0.0472855 0.0641041 0.00381053 -32 -0.0469016 0.0648796 0.00821733 -33 -0.0474599 0.0727268 0.0265623 -34 -0.0464733 0.070912 0.0103373 -35 -0.0444756 0.0755674 0.0221683 -36 -0.0440208 0.0774313 0.0371107 -37 -0.0434135 0.0685101 0.0213943 -38 -0.0425401 0.0668787 0.0159114 -39 -0.0405353 0.0730163 0.0309862 -40 -0.0386417 0.073548 0.0160682 -41 -0.037401 0.0664899 0.0122191 -42 -0.0358693 0.0689445 0.0243885 -43 -0.0351058 0.0687771 0.0124837 -44 -0.0333614 0.071165 0.0238503 -45 -0.0325564 0.0696271 0.024504 -46 -0.032455 0.0625178 0.0200737 -47 -0.0305469 0.0729973 0.0173921 -48 -0.0276941 0.0652386 0.0128238 -49 -0.0272717 0.0628782 0.0141328 -50 -0.0263428 0.00735496 0.00505748 -51 -0.0256055 0.00658056 0.00327552 -52 -0.0252856 0.0610141 0.0227762 -53 -0.0250237 -0.00678856 0.00359213 -54 -0.0242889 -0.00589458 0.00589675 -55 -0.0216872 0.0639735 0.0255561 -56 -0.0215721 -0.0119744 0.00619585 -57 -0.0195136 0.0542304 0.0216195 -58 -0.0168343 0.0649534 0.0236547 -59 -0.0161373 -0.00420129 0.00881529 -60 -0.0148726 0.0585475 0.0106707 -61 -0.0140647 0.0517836 0.0159197 -62 -0.0142986 0.0543801 0.0051496 -63 -0.0139611 -0.0178642 0.00651265 -64 -0.0139803 0.0554055 0.0115694 -65 -0.0124373 0.0606817 0.0122622 -66 -0.0127423 0.0580719 0.0285553 -67 -0.0127412 -0.0704232 0.0234664 -68 -0.0126173 -0.0801905 0.022154 -69 -0.0125269 0.0592002 0.0346418 -70 -0.0122498 -0.080596 0.0191154 -71 -0.0121442 -0.0691943 0.0191352 -72 -0.0123618 0.0658492 0.0197519 -73 -0.0121018 -0.063334 0.0245151 -74 -0.0118539 0.0462485 0.0243954 -75 -0.0111067 0.0637388 0.0161162 -76 -0.0110042 -0.0624802 0.0276395 -77 -0.0109072 0.046219 0.0183571 -78 -0.0107037 -0.000325242 0.00950432 -79 -0.010183 -0.0121386 0.00674337 -80 -0.00977442 -0.0638147 0.0162637 -81 -0.0097669 -0.0699334 0.0156591 -82 -0.00942656 -0.0836042 0.0182705 -83 -0.009321 -0.0852334 0.0216727 -84 -0.00803502 0.0401179 0.0263407 -85 -0.00857808 -0.0579335 0.0163943 -86 -0.00793158 -0.0190616 0.0121625 -87 -0.00782675 0.0573514 0.028038 -88 -0.00773028 -0.0620746 0.0302044 -89 -0.00764665 0.0537773 0.00961295 -90 -0.00721562 -0.0507362 0.0224357 -91 -0.00717408 -0.0528249 0.0179333 -92 -0.00651588 -0.00739691 0.013024 -93 -0.00691116 -0.00014073 0.00823716 -94 -0.00661131 0.044183 0.0123 -95 -0.00658663 0.0535365 0.0326225 -96 -0.00630954 -0.0850657 0.0194796 -97 -0.00616497 -0.0797841 0.0261073 -98 -0.00582999 -0.0494502 0.0287705 -99 -0.00563359 0.0476479 0.00934546 -100 -0.00506609 -0.0425596 0.0250833 -101 -0.00453974 -0.0405694 0.0173853 -102 -0.00447266 0.0319291 0.0205877 -103 -0.00434886 0.0267225 0.00648417 -104 -0.00418386 0.0253438 0.00842196 -105 -0.0041733 -0.0606038 0.0122716 -106 -0.00385183 0.0479538 0.00869149 -107 -0.00333705 0.051389 0.031593 -108 -0.00333565 -0.0693881 0.0119551 -109 -0.00333748 -0.0650683 0.0110291 -110 -0.00292457 0.0475597 0.0319288 -111 -0.00280471 -0.0353375 0.0238411 -112 -0.00273019 -0.0493159 0.0135756 -113 -0.00255346 -0.0452657 0.0126112 -114 -0.00249178 -0.0598565 0.010934 -115 -0.00247351 -0.0533955 0.0149632 -116 -0.00280465 0.0288144 0.0300227 -117 -0.00225175 -0.030519 0.0236922 -118 -0.00205777 -0.0595101 0.00715068 -119 -0.0018581 -0.0627033 0.0116048 -120 -0.00150112 -0.0384203 0.0313885 -121 -0.00143547 -0.0337232 0.0176227 -122 -0.00136747 -0.062725 0.0150152 -123 -0.000884775 -0.0587825 0.0143119 -124 -0.000624659 -0.0247814 0.0257906 -125 -0.000489974 0.0225414 0.0188523 -126 -6.05566e-05 0.0171338 0.0234086 -127 0.00150381 0.0360475 0.00675461 -128 0.000282178 -0.0241462 0.0174969 -129 0.000347869 -0.0675237 0.0324883 -130 0.000429839 -0.0422219 0.0349169 -131 0.00028168 -0.0273698 0.0312235 -132 0.000952705 -0.0267391 0.0143612 -133 0.00105244 0.0186951 0.00689988 -134 0.0011109 -0.0779453 0.014663 -135 0.00137887 0.00842564 0.0258445 -136 0.00107238 -0.0462225 0.00980545 -137 0.00158113 -0.0561697 0.005809 -138 0.00165921 -0.0142314 0.0114909 -139 0.00169065 -0.00330978 0.027848 -140 0.0017282 0.0264299 0.00972258 -141 0.00196109 -0.062067 0.0125082 -142 0.00198494 -0.0249792 0.0122768 -143 0.00206797 -0.0322322 0.0125632 -144 0.00219287 -0.00991015 0.0199027 -145 0.00223228 -0.065619 0.00972103 -146 0.00226787 -0.06664 0.0139131 -147 0.00233081 0.00970751 0.0349608 -148 0.0023033 -0.0550711 0.0357611 -149 0.00284591 -0.0695874 0.0109337 -150 0.00313658 0.0123831 0.0152878 -151 0.00325266 -0.000639164 0.0164744 -152 0.00354678 -0.0651674 0.00553443 -153 0.00434877 0.0392681 0.00656793 -154 0.0034004 -0.0624097 0.0143354 -155 0.00410027 0.052311 0.0146156 -156 0.00425687 -0.0110681 0.0377954 -157 0.0043501 -0.0020508 0.015115 -158 0.00444422 -0.0785667 0.0168482 -159 0.00471578 -0.00872746 0.0133588 -160 0.00486541 0.0192794 0.0102326 -161 0.00475235 0.0259901 0.00777948 -162 0.00497525 -0.0797755 0.0244877 -163 0.0052286 0.0545416 0.0234287 -164 0.00513856 -0.0361953 0.00904286 -165 0.00543656 -0.016404 0.0117933 -166 0.00521097 0.0361763 0.0357574 -167 0.00563068 0.0458779 0.0101474 -168 0.00602624 -0.0598053 0.00448538 -169 0.00669265 -0.0730234 0.0300997 -170 0.00671975 -0.0647944 0.0149968 -171 0.00743572 0.0219428 0.00498754 -172 0.00806977 -0.0676622 0.0106835 -173 0.00858002 0.0185363 0.00804532 -174 0.00900922 -0.0527441 0.0382868 -175 0.00967438 -0.0310472 0.0412759 -176 0.00969027 -0.0470756 0.00574739 -177 0.00982547 -0.0777201 0.0238208 -178 0.010337 -0.0646559 0.00738197 -179 0.0103691 -0.0715108 0.0301524 -180 0.0108524 -0.0651923 0.0107074 -181 0.0112352 0.0223598 0.00496048 -182 0.0115762 0.0360388 0.034027 -183 0.011811 0.0150563 0.0411225 -184 0.0119389 -0.0710873 0.0142927 -185 0.011481 0.000850754 0.00890493 -186 0.0122581 0.0177891 0.00726338 -187 0.0126044 0.0285097 0.0071727 -188 0.0126077 -0.0410848 0.00487059 -189 0.01325 0.0245576 0.00385279 -190 0.0133342 -0.0301914 0.00695184 -191 0.0134526 -0.00467313 0.044297 -192 0.0140263 0.0415073 0.0128325 -193 0.0139319 -0.0627506 0.0126489 -194 0.0144402 0.0213321 0.0408733 -195 0.0145153 -0.0120242 0.00709154 -196 0.0145254 0.0314471 0.00762861 -197 0.0143606 -0.0539791 0.00638859 -198 0.0153705 -0.0588177 0.00913193 -199 0.0158483 0.0424843 0.0267153 -200 0.0161677 0.0082135 0.0752128 -201 0.0160709 -0.0693691 0.0267104 -202 0.0163112 0.021127 0.00658374 -203 0.0163956 0.0418119 0.0180916 -204 0.0166653 0.00513625 0.0449469 -205 0.0171438 -0.00939438 0.0462661 -206 0.0174416 -0.0497054 0.0373642 -207 0.0174198 -0.0656937 0.0159871 -208 0.0177387 0.0346114 0.0053358 -209 0.0178439 0.0247259 0.00729322 -210 0.018247 0.0346901 0.00258831 -211 0.0182074 -0.0318958 0.0424624 -212 0.0183988 -0.00142899 0.0496692 -213 0.0188182 -0.018825 0.0447569 -214 0.0188285 0.0147456 0.0461032 -215 0.0188626 0.015416 0.041072 -216 0.0190811 -0.00419709 0.0686858 -217 0.0195945 0.0084326 0.064095 -218 0.0197498 -0.00217441 0.0583864 -219 0.0198208 0.00539755 0.0587622 -220 0.0200137 0.0324539 0.00354185 -221 0.020151 -0.0145671 0.0500049 -222 0.0203386 -0.00326709 0.0702447 -223 0.0209148 0.00523036 0.0681576 -224 0.0208447 0.0121045 0.0546374 -225 0.0209724 0.00970633 0.0633876 -226 0.020604 -0.0121123 0.00591309 -227 0.0212498 -0.0289526 0.00565549 -228 0.0216078 -0.0380775 0.00479088 -229 0.0216875 -0.00997672 0.0619769 -230 0.0220658 0.00705093 0.0456869 -231 0.0223002 -0.0558455 0.0110476 -232 0.0223137 -0.0154618 0.0494217 -233 0.0229336 0.00417573 0.0589573 -234 0.0231427 0.0278288 0.0125965 -235 0.0231751 0.027241 0.0309726 -236 0.0233259 0.0160686 0.00756079 -237 0.0234095 0.0318943 0.0199392 -238 0.0234462 -0.00393483 0.0583985 -239 0.0235915 -0.0597066 0.0170609 -240 0.0240196 -0.0108777 0.0466362 -241 0.024123 -0.00330273 0.0464733 -242 0.0242099 -0.0321428 0.0398591 -243 0.0244244 0.00347947 0.0416421 -244 0.024564 -0.0175604 0.0433407 -245 0.0253979 -0.0453083 0.0344803 -246 0.0256103 0.0267734 0.0284514 -247 0.0259312 -0.0445208 0.00878379 -248 0.025959 -0.0133125 0.00624018 -249 0.0265967 -0.0369666 0.00635268 -250 0.0273245 -0.0066598 0.0412078 -251 0.0277597 -0.0467651 0.0304517 -252 0.0275944 -0.0515878 0.0207552 -253 0.0282687 0.0208205 0.0174814 -254 0.0290859 0.0112094 0.012597 -255 0.0293048 -0.0474855 0.0256026 -256 0.0296506 -0.0466043 0.0156453 -257 0.0304236 0.0134394 0.031696 -258 0.0304518 -0.0291908 0.00746031 -259 0.03126 -0.044124 0.016095 -260 0.0321715 -0.043346 0.0242104 -261 0.0322352 -0.0402733 0.0141242 -262 0.0323149 0.01052 0.0200521 -263 0.0324768 -0.0397188 0.0271188 -264 0.0325431 -0.0291932 0.0340382 -265 0.0332479 -0.0329826 0.0117351 -266 0.0338676 -0.0346121 0.0252676 -267 0.0341522 -0.00293196 0.033596 -268 0.0341882 -0.0361716 0.0179088 -269 0.0344969 -0.0256263 0.0309923 -270 0.0345138 -0.00958586 0.0123416 -271 0.0348872 -0.0128566 0.0339912 -272 0.0349524 -0.0273994 0.0177976 -273 0.0349556 -0.000677158 0.0209767 -274 0.0350004 -0.028049 0.00876142 -275 0.0353194 -0.0100316 0.0154749 -276 0.0354214 -0.0195455 0.0173172 -277 0.0355775 -0.0309821 0.0107592 -278 0.0360305 -0.0150581 0.0232372 -279 0.0363938 -0.0285041 0.0132933 -280 0.0374738 -0.00607371 0.0123945 -281 0.041317 -0.0210454 0.0131228 -282 0.0425886 -0.0120136 0.0129537 -283 0.0475164 -0.00753527 0.00853843 -284 0.0492593 -0.00704914 0.00938067 -285 0.0496752 -0.0170405 0.0106038 -286 0.0498676 -0.0259318 0.00619626 -287 0.052402 -0.022331 0.00866719 -288 0.0516897 -0.011391 0.0103437 -289 0.0559595 -0.0106346 0.00698866 -290 0.0596531 -0.0214295 0.0059579 -291 0.066312 -0.0158462 0.00759335 -292 0.0672852 -0.00331292 0.00667068 -293 0.0687074 -0.0027598 0.00829441 -294 0.0687083 -0.0084515 0.00881385 -295 0.0702857 -0.00694567 0.00665748 -296 0.02471 0.00101921 0.00688758 -297 0.00641783 -0.0341512 0.0233596 -298 0.024018 0.00854392 0.00722419 -299 0.0251696 0.00942127 0.00784613 -300 -0.019815 0.0686939 0.0189821 -301 0.0416697 -0.017118 0.00864259 -302 -0.00440288 -0.0698432 0.0205811 -303 -0.0033606 0.0600219 0.0217676 -304 0.0268544 0.00322876 0.0080825 -305 0.00855449 0.0107052 0.00928038 -306 0.0219179 0.00585482 0.0121236 -307 0.0199208 0.0175811 0.0336776 -308 0.0210521 -0.0362113 0.0256186 -309 0.0339797 -0.00194129 0.0163861 -310 0.03202 0.000337126 0.0126992 -311 0.0119633 0.0163586 0.0147908 -312 0.0248778 0.0056119 0.0321775 -313 0.00892971 -0.0563678 0.0287948 -314 0.0174837 0.027107 0.0210333 -315 -0.0170518 0.00346089 0.00554363 -316 0.0144974 -0.0120686 0.0314959 -317 0.00336155 -0.00103205 0.0364574 -318 0.00707711 -0.0204903 0.0185209 -319 0.010517 -0.00309481 0.0232445 -320 -0.00559352 0.0373259 0.0172753 -321 -0.00523735 -0.0230725 0.0111224 -322 0.0151072 -0.0538804 0.0213778 -323 0.0347571 -0.0188174 0.0105515 -324 0.0278657 -0.0183642 0.0156758 -325 -0.00338013 -0.0543805 0.0329679 -326 -0.0196332 0.0593213 0.0251138 -327 0.0648163 -0.0143432 0.00627944 -328 -0.00336175 -0.0187472 0.00979996 -329 -0.0059938 -0.0214388 0.00941436 -330 0.0204933 0.0262773 0.00994486 -331 0.0153554 0.00838654 0.0105168 -332 -0.064082 0.064994 0.00682263 -333 -0.0406296 0.0703091 0.0249838 -334 -0.0197677 0.0563929 0.0156108 -335 -0.0506931 0.0781816 0.0304629 -336 0.0171972 -0.00100568 0.011485 -337 0.0314619 -0.0225976 0.00774901 -338 -0.00980694 0.0515267 0.0104574 -339 -0.00435185 0.0493969 0.0137744 -340 0.0449063 -0.0117353 0.00859937 -341 0.00159087 -0.0450385 0.027858 -342 -0.00469537 -0.0637251 0.0233918 -343 0.0424219 -0.0285632 0.00857374 -344 0.0603894 -0.00835109 0.00935053 -345 -0.0147113 -0.0156046 0.00918376 -346 -0.0528157 0.0611754 0.00480955 -347 -0.0173765 -0.00887149 0.00520522 -348 0.0108104 0.02268 0.0130558 -349 -0.00899905 -0.0208443 0.00915416 -350 -0.0449914 0.0768094 0.0302276 -351 -0.0408502 0.06658 0.00836849 -352 -0.0199988 -0.0118916 0.004906 -353 0.00337131 0.0455887 0.0238561 -354 0.00477413 -0.0721541 0.0211645 -355 -0.00344193 -0.049333 0.032475 -356 0.0427245 -0.0268877 0.00738607 -357 0.0272704 -0.0238375 0.00669928 -358 -0.00610544 -0.0476638 0.0181008 -359 -0.00760153 0.0503529 0.00747858 -360 0.0131109 -0.0422224 0.0405109 -361 0.00214561 -0.0490294 0.0151357 -362 -0.0598224 0.0805424 0.0511855 -363 -0.0204542 0.0588165 0.013102 -364 0.059357 -0.0190886 0.00813027 -365 -0.00100716 0.0422264 0.0325724 -366 0.0325535 -0.0244764 0.012522 -367 -0.000431427 -0.0574818 0.0137747 -368 0.0114251 0.0275734 0.00440942 -369 0.00337666 -0.0559724 0.0148659 -370 -0.0262911 0.0586227 0.0207785 -371 -0.0699467 0.0813567 0.0499003 -372 0.0494602 -0.0133111 0.00757754 -373 0.00758285 0.0333008 0.0104911 -374 0.00657287 0.032122 0.00603963 -375 0.000332803 -0.0511328 0.0180756 -376 -0.021764 0.0620607 0.0118108 -377 -0.0454672 0.075167 0.035911 -378 0.00139884 0.045926 0.0128133 -379 0.0176314 0.0311493 0.00370344 -380 -0.0159418 -0.0158578 0.00793814 -381 -0.0229387 0.0691641 0.0166572 -382 -0.00133409 -0.0449329 0.0187829 -383 -0.0538019 0.0611146 0.00198764 -384 0.0305208 -0.00256491 0.0101919 -385 0.0623596 -0.00697151 0.00683979 -386 0.0236819 -0.00777996 0.0526871 -387 0.0118138 -0.0144241 0.0430193 -388 0.0137156 -0.00365078 0.00732253 -389 -0.0257884 0.0686739 0.0150694 -390 -0.0530331 0.060812 0.00248197 -391 -0.000421194 -0.0523335 0.00879177 -392 0.0193846 -0.00072024 0.0649221 -393 0.00485856 0.0133946 0.0114741 -394 -0.0053823 -0.0743714 0.0141262 -395 0.016958 0.0166471 0.00740593 -396 0.0429338 -0.0266961 0.0110582 -397 -0.0650475 0.05473 0.00191127 -398 0.00924818 0.0356698 0.00715588 -399 -0.042468 0.0652669 0.00790867 -400 0.00699205 0.0348997 0.00576165 -401 -0.012123 0.00171435 0.00688121 -402 0.017741 0.00126373 0.0717161 -403 -0.00477874 -0.0228765 0.0123522 -404 -0.05496 0.0793832 0.0329037 -405 -0.0253736 -0.000654191 0.00342534 -406 0.0220159 -0.0128389 0.0555838 -407 0.0187915 0.00366305 0.0653901 -408 -0.0635923 0.0794618 0.0351284 -409 0.0187293 0.00901455 0.0689246 -410 -0.0507436 0.0790633 0.0364811 -411 0.00440962 0.0291856 0.00589534 -412 -0.0610541 0.0815764 0.0467801 -413 -0.0264169 0.0641898 0.0180225 -414 0.0590681 -0.0129818 0.00969293 -415 0.0316732 -0.013669 0.00892731 -416 -0.0368828 0.0732351 0.028231 -417 0.0147007 -0.0293577 0.0425282 -418 -0.00226105 0.042112 0.00818422 -419 -0.022404 0.068624 0.0211714 -420 0.018834 0.0296379 0.0101126 -421 0.0545664 -0.023882 0.00596013 -422 -0.0610274 0.0626039 0.00623226 -423 0.0209345 -0.0123916 0.0558755 -424 -0.064258 0.0639612 0.00701622 -425 -0.0530259 0.0709966 0.0104874 -426 -0.000350232 0.0328643 0.00950357 -427 0.0179821 0.0260225 0.00525665 -428 -0.071629 0.0809096 0.0500374 -429 0.0431333 -0.00662611 0.0109755 -430 -0.0367738 0.072104 0.0272887 -431 -0.00147996 0.0424733 0.00778004 -432 -0.0489442 0.0792518 0.0424775 -433 0.0178184 0.00830923 0.0698262 -434 -0.00256208 -0.0518644 0.0119693 -435 -0.0024457 0.0347988 0.0115191 -436 -0.0226391 0.067054 0.0236986 -437 -0.0250562 0.070839 0.0181046 -438 0.0157661 -0.010775 0.0444953 -439 -0.0587069 0.0610686 0.00549325 -440 -0.0561989 0.0607157 0.00436391 -441 0.0028322 0.0311045 0.0076099 -442 -0.061857 0.079748 0.0514834 -443 -0.0580072 0.0744854 0.0170926 -444 0.017366 0.0281829 0.00449304 -445 0.0175246 0.0303053 0.00632184 -446 -0.0583716 0.0812348 0.0494755 -447 -0.0627638 0.0811059 0.0418948 -448 0.00958337 0.0391723 0.00889538 -449 0.0164997 0.0327763 0.00400793 -450 -0.0100537 -0.019407 0.0104569 -451 0.0535082 -0.023589 0.00757618 -452 -0.0184567 0.0672393 0.0165986 -453 -0.0660887 0.0639515 0.00557639 -454 -0.0085005 0.0591911 0.0132991 -455 0.0527123 -0.00658592 0.00801901 -456 0.00664445 0.0147496 0.00979726 -457 -0.0323364 0.0646841 0.013176 -458 -0.0684981 0.0817682 0.0541475 -459 0.0424951 -0.00680449 0.0104665 -460 -0.01583 0.0638299 0.0140017 -461 -0.0408586 0.0747808 0.0276312 -462 -0.0213675 0.00505684 0.00440033 -463 -0.0609542 0.0784149 0.029815 -464 0.0458286 -0.0196104 0.0115924 -465 0.0619857 -0.0044448 0.00717137 -466 -0.0549453 0.0736446 0.0144159 -467 -0.0660739 0.0797747 0.0511232 -468 -0.0150243 -0.0138696 0.00597473 -469 -0.0208919 0.0664273 0.014553 -470 -0.0583912 0.0766731 0.0277458 -471 -0.00499489 -0.0492059 0.0154875 -472 -0.0177596 -0.0149926 0.00640227 -473 -0.0656257 0.0638276 0.00437301 -474 -0.00111824 -0.0505712 0.010634 -475 -0.0234714 0.0595273 0.0150887 -476 -0.0117477 -0.00786715 0.0107629 -477 -0.0329423 0.0662408 0.012525 -478 -0.0588644 0.0778049 0.0265316 -479 -0.038272 0.0710121 0.0277124 -480 0.0147178 0.0228905 0.00513556 -481 -0.00242697 -0.0228032 0.0106496 -482 -0.00998317 -0.0196685 0.00798312 -483 0.00194711 0.0338412 0.00734265 -484 -0.0101071 0.0571173 0.0108272 -485 -0.000192036 0.0305177 0.010316 -486 -0.0662236 0.0609953 0.00234663 -487 -0.0383437 0.071981 0.0290737 -488 0.0464353 -0.0271448 0.00729223 -489 -0.0113654 0.0558876 0.00985606 -490 -0.0600686 0.0581853 0.00037707 -491 0.0184892 0.00651809 0.072001 -492 -0.0272353 0.0661385 0.0125002 -493 0.0386787 -0.00939756 0.0110365 -494 -0.00702298 -0.0554164 0.0301677 -495 -0.0387296 0.0725599 0.0291973 -496 -0.0195884 -0.00971304 0.00731553 -497 0.000980398 0.0340005 0.00831153 -498 -0.00251349 -0.0493306 0.0137872 -499 -0.0208118 0.00468072 0.00662791 -500 0.0145465 0.0247675 0.00685396 -501 0.0539643 -0.00601143 0.00911787 -502 0.0615879 -0.00432066 0.00875869 -503 -0.0649217 0.0800024 0.0383643 -504 0.00460493 0.00849738 0.0127005 -505 -0.0606311 0.0803611 0.0379233 -506 -0.00316884 0.0400824 0.00969248 -507 -0.0308482 0.067467 0.0126012 -508 0.0120049 0.00511369 0.00824306 -509 0.0117314 0.0134932 0.00784586 -510 0.0067401 0.0222359 0.00786688 -511 0.000365941 0.0444987 0.0334101 -512 0.00589042 0.0427357 0.0325284 -513 0.0134556 0.013691 0.0071386 -514 0.0155774 0.00572549 0.00675779 -515 -0.0442054 0.0654197 0.00607699 -516 0.00863004 0.0184766 0.00878081 -517 -0.0111016 -0.0170398 0.0107756 -518 -0.0162643 0.06208 0.0123266 -519 -0.0670643 0.0628756 0.0047451 -520 -0.0673064 0.0791769 0.0489333 -521 -0.0566743 0.0588231 0.00264455 -522 -0.0713841 0.080001 0.0523997 -523 -0.0690781 0.0794039 0.0521145 -524 -0.0589744 0.0702988 0.0123753 -525 -0.0108026 0.05228 0.00636676 -526 -0.0113486 0.0541547 0.00728553 -527 -0.0299136 0.0686241 0.0165753 -528 0.0505332 -0.0225927 0.00635398 -529 0.0180077 0.0031318 0.0704387 -530 -0.0235313 0.0640143 0.012641 -531 -0.0235569 0.00584404 0.00381922 -532 0.0384718 -0.0113423 0.0144484 -533 0.0182407 0.00232532 0.0728388 -534 -0.0235752 0.00407866 0.00373027 -535 -0.011585 0.0522432 0.00647843 -536 0.0400312 -0.00904366 0.0126741 -537 -0.0178591 -0.000359808 0.00797485 -538 -0.067167 0.0625514 0.00392853 -539 -0.0596438 0.0779391 0.0290601 -540 0.0013543 0.0302152 0.00901705 -541 0.0168301 0.00522322 0.0737244 -542 0.0174324 0.00448014 0.0738384 -543 -0.0618546 0.0649931 0.00590465 -544 0.0194429 0.0304209 0.00452872 -545 -0.0236633 0.0648084 0.0124456 -546 -0.00249493 -0.0562542 0.012985 -547 -0.0025263 -0.0246783 0.0125409 -548 -0.0396392 0.0718092 0.02876 -549 -0.0158083 -0.0164708 0.00645267 -550 0.016879 0.0245859 0.0055459 -551 -0.0688499 0.0811361 0.0461884 -552 0.0290982 -0.00647478 0.00827907 -553 -0.041817 0.0761358 0.0343691 -554 -0.0642688 0.0653922 0.00517065 -555 -0.0162175 0.00239503 0.00694561 -556 0.00467524 0.0360758 0.00643588 -557 -0.0222973 0.0035638 0.00646752 -558 -0.0708092 0.0801688 0.0482801 -559 -0.0549524 0.0787083 0.0296023 -560 -0.0631054 0.0672415 0.00811831 -561 -0.0155444 -0.0163359 0.0060847 -562 -0.0574097 0.0788047 0.0473507 -563 -0.0558952 0.0591814 0.001764 -564 -0.0177409 0.0619627 0.0144786 -565 -0.00178349 -0.0487397 0.0125937 -566 -0.0111058 0.0522074 0.00829904 -567 -0.0260139 0.00360897 0.00461987 -568 -0.0204566 0.00423454 0.00564674 -569 0.00612936 0.0370467 0.00680554 -570 0.010446 0.0313554 0.00705031 -571 -0.0569353 0.05965 0.00118235 -572 -0.0506685 0.0625792 0.00279292 -573 -0.0249761 0.00485573 0.00443819 -574 0.0172421 0.00725128 0.0738262 -575 -0.0219613 0.0643004 0.0138184 -576 -0.00260185 -0.0513557 0.0142694 -577 -0.0167422 0.00259292 0.00779623 -578 0.00214524 0.0341103 0.00650831 -579 -0.0236765 0.00572293 0.004305 -580 -0.0616879 0.0784644 0.0353636 -581 -0.0125522 0.0533024 0.00573952 -582 -0.00373263 -0.048886 0.014509 -583 -0.00253347 -0.0472982 0.0131992 -584 -0.0128746 -0.017623 0.00940414 -585 -5.43548e-05 0.0393803 0.00728201 -586 -0.0258702 0.00405717 0.00525282 -587 0.0183599 0.0265636 0.00640112 -588 0.0459896 -0.0257989 0.0100883 -589 -0.0295424 0.0680594 0.0247957 -590 -0.0245383 0.0634107 0.0123732 -591 0.0066096 0.0377811 0.00691952 -592 -0.0450015 0.0646553 0.00575343 -593 -0.0622505 0.0661482 0.00839783 -594 -0.0256248 0.0608105 0.0161665 -595 0.017488 0.00853314 0.0720965 -596 -0.0596734 0.0705097 0.00992485 -597 -0.0665798 0.0628689 0.00493615 -598 -0.0624322 0.0664941 0.0080812 -599 0.0436037 -0.00911409 0.00950451 -600 -0.0258241 0.00183578 0.00455937 -601 -0.0702703 0.0796913 0.0546337 -602 -0.027947 0.0630495 0.0231884 -603 -0.0601839 0.0704633 0.0106076 -604 -0.019796 -0.0130118 0.0069497 -605 -0.0183149 0.0630548 0.012418 -606 -0.0302535 0.0701272 0.02364 -607 -0.0574291 0.0790851 0.0314511 -608 -0.0506885 0.0650762 0.00396145 -609 -0.021101 0.0616869 0.0137094 -610 -0.0331684 0.0670427 0.023997 -611 0.0134393 0.00644533 0.00718965 -612 -0.0111807 -0.0194906 0.00818236 -613 -0.0255718 0.00304117 0.00332801 -614 -0.0126697 -0.015488 0.00653208 -615 -0.0247074 0.00660999 0.00551935 -616 0.0173416 0.0031807 0.0727906 -617 0.0172416 0.0236783 0.00588169 -618 0.0190309 0.0293428 0.00437137 -619 0.016715 0.00646681 0.0747173 -620 -0.0362286 0.072292 0.023504 -621 -0.0193589 -0.00042516 0.00470745 -622 -0.0218861 0.0643631 0.0125137 -623 -0.0102557 0.0512168 0.00711881 -624 0.0404202 -0.00631757 0.0116411 -625 0.0462272 -0.00679819 0.0101561 -626 -0.0259792 0.0656558 0.0150971 -627 0.0162732 0.0229634 0.00624384 -628 0.00353474 0.0364474 0.00843339 -629 4.6368e-06 0.0388726 0.00973083 -630 -0.0216501 0.0633078 0.012475 -631 -0.0653553 0.0635995 0.0060088 -632 -0.0129397 0.0533345 0.00604151 -633 -0.00189413 -0.0244631 0.013557 -634 -0.0610974 0.0673557 0.00916116 -635 0.0169636 0.00823874 0.0726305 -636 -0.0262169 0.00566462 0.00486021 -637 -0.00105663 -0.050339 0.013034 -638 -0.0522352 0.0618469 0.00239028 -639 -0.0658611 0.0623674 0.00600767 -640 -0.0308719 0.0671807 0.0240148 -641 -0.0271033 0.0631674 0.0232081 -642 0.000463176 0.0377435 0.00713404 -643 0.0197653 -0.0105149 0.0573133 -644 -0.0261272 0.00574879 0.00514751 -645 -0.0256133 0.00236555 0.00535812 -646 0.0395658 -0.00664927 0.0115095 -647 -0.0346515 0.0704144 0.0260764 -648 -0.0676857 0.0619198 0.00410476 -649 -0.0352382 0.0722683 0.0261851 -650 -0.0489272 0.0632235 0.00329626 -651 -0.0514659 0.0617489 0.00295197 -652 -0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1654 -2 4 0 227 308 190 188 -3 4 0 203 353 199 163 -4 4 0 331 305 504 150 -5 4 0 142 328 128 138 -6 4 0 490 439 18 571 -7 4 0 364 289 287 414 -8 4 0 296 336 304 298 -9 4 0 564 419 300 381 -10 4 0 398 569 373 591 -11 4 0 486 473 639 422 -12 4 0 338 89 566 489 -13 4 0 332 554 543 424 -14 4 0 80 67 71 302 -15 4 0 149 146 109 108 -16 4 0 98 90 375 342 -17 4 0 341 308 325 313 -18 4 0 147 314 126 116 -19 4 0 124 318 156 131 -20 4 0 245 322 206 308 -21 4 0 348 311 516 186 -22 4 0 135 150 319 151 -23 4 0 147 314 307 311 -24 4 0 464 588 301 528 -25 4 0 461 33 35 333 -26 4 0 196 192 373 314 -27 4 0 108 81 302 122 -28 4 0 366 258 227 357 -29 4 0 511 107 512 353 -30 4 0 146 170 354 172 -31 4 0 297 175 156 130 -32 4 0 130 297 175 308 -33 4 0 318 159 319 195 -34 4 0 154 123 122 342 -35 4 0 261 308 259 260 -36 4 0 132 142 128 318 -37 4 0 241 250 240 205 -38 4 0 226 227 248 324 -39 4 0 575 609 475 49 -40 4 0 375 91 123 90 -41 4 0 260 308 255 251 -42 4 0 517 612 63 482 -43 4 0 120 117 131 297 -44 4 0 318 131 297 156 -45 4 0 147 319 311 307 -46 4 0 131 120 297 130 -47 4 0 120 297 111 117 -48 4 0 308 174 206 360 -49 4 0 148 313 325 175 -50 4 0 148 313 175 174 -51 4 0 302 80 122 81 -52 4 0 107 353 511 110 -53 4 0 322 231 198 197 -54 4 0 61 58 564 57 -55 4 0 240 386 212 221 -56 4 0 121 297 143 117 -57 4 0 121 297 117 111 -58 4 0 307 235 314 182 -59 4 0 307 314 166 182 -60 4 0 417 308 175 316 -61 4 0 308 175 360 417 -62 4 0 601 9 458 1 -63 4 0 459 429 536 599 -64 4 0 211 242 206 308 -65 4 0 528 588 301 356 -66 4 0 316 297 308 175 -67 4 0 197 188 308 228 -68 4 0 231 308 228 197 -69 4 0 231 197 322 308 -70 4 0 188 197 308 361 -71 4 0 322 361 308 197 -72 4 0 259 308 256 255 -73 4 0 298 306 304 299 -74 4 0 302 342 146 122 -75 4 0 251 322 245 308 -76 4 0 298 306 299 236 -77 4 0 342 302 169 129 -78 4 0 157 319 331 150 -79 4 0 190 195 324 227 -80 4 0 146 342 354 154 -81 4 0 190 297 308 324 -82 4 0 236 254 306 299 -83 4 0 354 179 201 322 -84 4 0 308 297 188 361 -85 4 0 361 188 164 297 -86 4 0 195 165 190 318 -87 4 0 307 215 257 235 -88 4 0 194 235 215 307 -89 4 0 174 129 148 313 -90 4 0 169 313 129 174 -91 4 0 322 255 251 201 -92 4 0 366 265 308 258 -93 4 0 227 308 258 366 -94 4 0 258 308 249 265 -95 4 0 227 308 228 258 -96 4 0 448 192 373 196 -97 4 0 228 308 249 258 -98 4 0 296 298 514 336 -99 4 0 125 150 348 126 -100 4 0 125 160 348 150 -101 4 0 244 264 242 316 -102 4 0 264 316 244 271 -103 4 0 224 233 225 219 -104 4 0 107 353 163 199 -105 4 0 217 223 219 225 -106 4 0 308 174 313 206 -107 4 0 206 313 179 174 -108 4 0 241 230 212 233 -109 4 0 241 233 212 218 -110 4 0 267 278 312 273 -111 4 0 267 312 262 273 -112 4 0 206 179 322 245 -113 4 0 242 245 206 308 -114 4 0 144 319 159 157 -115 4 0 265 308 266 272 -116 4 0 218 219 392 233 -117 4 0 264 324 316 271 -118 4 0 324 308 264 316 -119 4 0 297 318 117 131 -120 4 0 128 117 318 124 -121 4 0 354 207 201 177 -122 4 0 207 177 354 184 -123 4 0 155 163 353 203 -124 4 0 131 297 156 130 -125 4 0 395 330 236 202 -126 4 0 164 142 318 190 -127 4 0 253 314 234 311 -128 4 0 307 314 147 166 -129 4 0 331 234 253 254 -130 4 0 306 236 298 331 -131 4 0 156 297 316 175 -132 4 0 324 319 318 316 -133 4 0 297 324 316 308 -134 4 0 373 314 102 125 -135 4 0 167 155 378 192 -136 4 0 278 324 272 269 -137 4 0 278 276 272 324 -138 4 0 319 159 157 336 -139 4 0 267 257 312 243 -140 4 0 307 215 243 257 -141 4 0 156 297 318 316 -142 4 0 207 354 170 184 -143 4 0 124 144 139 156 -144 4 0 267 312 250 243 -145 4 0 144 151 139 319 -146 4 0 318 316 319 144 -147 4 0 316 139 319 144 -148 4 0 139 144 316 156 -149 4 0 316 191 312 319 -150 4 0 316 191 317 156 -151 4 0 313 308 175 174 -152 4 0 253 234 331 311 -153 4 0 331 395 234 236 -154 4 0 272 265 308 366 -155 4 0 103 140 133 510 -156 4 0 235 199 246 314 -157 4 0 246 237 314 199 -158 4 0 144 151 319 157 -159 4 0 92 157 151 144 -160 4 0 92 159 157 144 -161 4 0 395 234 236 330 -162 4 0 395 330 202 348 -163 4 0 348 330 202 209 -164 4 0 324 312 316 271 -165 4 0 266 308 324 272 -166 4 0 324 366 308 227 -167 4 0 242 264 245 308 -168 4 0 272 266 269 324 -169 4 0 135 151 319 139 -170 4 0 40 35 28 29 -171 4 0 88 148 129 342 -172 4 0 325 342 148 88 -173 4 0 314 116 147 166 -174 4 0 77 353 320 94 -175 4 0 331 262 319 306 -176 4 0 319 317 139 316 -177 4 0 450 329 482 328 -178 4 0 183 307 147 166 -179 4 0 188 361 176 197 -180 4 0 169 179 313 174 -181 4 0 314 196 348 373 -182 4 0 102 84 116 353 -183 4 0 102 77 84 353 -184 4 0 191 147 319 317 -185 4 0 307 262 257 312 -186 4 0 307 257 246 235 -187 4 0 307 257 262 246 -188 4 0 128 318 144 124 -189 4 0 246 314 237 253 -190 4 0 314 203 237 234 -191 4 0 142 128 318 138 -192 4 0 253 237 234 314 -193 4 0 306 319 331 336 -194 4 0 307 314 235 246 -195 4 0 316 250 312 191 -196 4 0 450 403 349 329 -197 4 0 121 297 101 143 -198 4 0 382 164 101 297 -199 4 0 369 198 322 193 -200 4 0 264 266 324 269 -201 4 0 322 354 170 207 -202 4 0 322 170 193 207 -203 4 0 353 84 116 110 -204 4 0 70 302 68 83 -205 4 0 331 311 234 395 -206 4 0 323 493 282 301 -207 4 0 269 278 324 271 -208 4 0 278 312 324 271 -209 4 0 207 170 180 184 -210 4 0 207 170 193 180 -211 4 0 325 130 175 308 -212 4 0 146 354 170 154 -213 4 0 354 302 342 146 -214 4 0 161 348 510 181 -215 4 0 182 314 199 235 -216 4 0 322 354 369 170 -217 4 0 231 207 322 198 -218 4 0 313 322 375 341 -219 4 0 375 361 341 322 -220 4 0 322 207 193 198 -221 4 0 297 143 164 101 -222 4 0 221 213 240 232 -223 4 0 190 188 308 297 -224 4 0 341 361 375 382 -225 4 0 341 308 313 322 -226 4 0 134 158 184 354 -227 4 0 247 308 261 249 -228 4 0 263 308 260 251 -229 4 0 318 319 159 144 -230 4 0 309 262 306 319 -231 4 0 250 204 243 312 -232 4 0 448 192 167 378 -233 4 0 37 333 620 35 -234 4 0 37 33 333 35 -235 4 0 297 318 316 324 -236 4 0 167 448 378 153 -237 4 0 212 218 233 219 -238 4 0 88 325 342 494 -239 4 0 246 307 314 253 -240 4 0 307 253 246 262 -241 4 0 126 311 150 348 -242 4 0 388 611 336 514 -243 4 0 348 234 420 314 -244 4 0 236 254 331 306 -245 4 0 348 314 311 234 -246 4 0 211 308 360 417 -247 4 0 373 102 320 125 -248 4 0 316 250 191 438 -249 4 0 250 205 191 438 -250 4 0 254 262 306 309 -251 4 0 254 309 306 310 -252 4 0 299 254 306 310 -253 4 0 331 262 306 254 -254 4 0 292 294 295 293 -255 4 0 194 307 215 204 -256 4 0 304 306 384 299 -257 4 0 267 312 257 262 -258 4 0 353 192 378 155 -259 4 0 319 159 336 195 -260 4 0 353 192 373 378 -261 4 0 336 185 388 195 -262 4 0 312 250 271 267 -263 4 0 271 250 312 316 -264 4 0 261 249 308 265 -265 4 0 268 308 265 261 -266 4 0 247 308 249 228 -267 4 0 227 195 324 226 -268 4 0 366 324 415 337 -269 4 0 337 366 324 357 -270 4 0 190 195 318 324 -271 4 0 156 318 124 144 -272 4 0 263 266 308 264 -273 4 0 251 263 308 264 -274 4 0 197 198 322 369 -275 4 0 154 354 369 342 -276 4 0 188 308 228 227 -277 4 0 79 328 138 92 -278 4 0 316 317 139 156 -279 4 0 360 175 308 174 -280 4 0 255 251 308 322 -281 4 0 255 256 252 308 -282 4 0 247 228 231 308 -283 4 0 247 308 231 256 -284 4 0 134 149 394 354 -285 4 0 83 162 96 302 -286 4 0 161 373 140 348 -287 4 0 88 67 302 68 -288 4 0 302 97 88 68 -289 4 0 512 166 314 182 -290 4 0 420 192 314 234 -291 4 0 348 330 420 234 -292 4 0 192 314 234 203 -293 4 0 91 123 105 115 -294 4 0 394 70 302 81 -295 4 0 309 273 262 319 -296 4 0 319 262 312 273 -297 4 0 67 302 68 70 -298 4 0 271 278 312 267 -299 4 0 66 57 326 58 -300 4 0 188 136 176 361 -301 4 0 157 331 185 504 -302 4 0 136 361 188 164 -303 4 0 244 250 271 316 -304 4 0 71 302 67 70 -305 4 0 244 213 232 240 -306 4 0 81 302 71 70 -307 4 0 354 149 108 146 -308 4 0 314 237 203 199 -309 4 0 506 378 435 629 -310 4 0 244 438 316 213 -311 4 0 97 302 169 162 -312 4 0 244 316 438 250 -313 4 0 313 129 342 169 -314 4 0 382 113 101 164 -315 4 0 506 435 378 94 -316 4 0 91 123 85 105 -317 4 0 308 264 245 251 -318 4 0 242 264 308 316 -319 4 0 450 349 482 329 -320 4 0 314 373 348 125 -321 4 0 92 138 159 144 -322 4 0 395 311 234 348 -323 4 0 278 273 324 312 -324 4 0 373 378 435 320 -325 4 0 147 311 319 135 -326 4 0 126 311 135 150 -327 4 0 126 135 311 147 -328 4 0 314 348 311 126 -329 4 0 83 302 82 70 -330 4 0 378 435 629 373 -331 4 0 195 159 165 318 -332 4 0 316 312 324 319 -333 4 0 156 175 316 387 -334 4 0 336 298 514 331 -335 4 0 88 342 129 302 -336 4 0 319 307 331 311 -337 4 0 253 314 311 307 -338 4 0 311 331 253 307 -339 4 0 297 341 308 130 -340 4 0 314 348 126 125 -341 4 0 147 314 311 126 -342 4 0 61 339 99 338 -343 4 0 250 204 312 191 -344 4 0 305 185 508 331 -345 4 0 211 242 308 316 -346 4 0 211 308 417 316 -347 4 0 213 316 211 417 -348 4 0 214 215 230 204 -349 4 0 244 316 242 211 -350 4 0 244 211 213 316 -351 4 0 465 501 344 502 -352 4 0 108 354 302 394 -353 4 0 313 129 148 342 -354 4 0 337 324 415 248 -355 4 0 337 258 366 357 -356 4 0 121 101 297 111 -357 4 0 382 101 111 297 -358 4 0 157 159 185 336 -359 4 0 226 336 195 324 -360 4 0 307 262 331 253 -361 4 0 307 262 319 331 -362 4 0 331 254 253 262 -363 4 0 248 336 552 296 -364 4 0 319 324 195 336 -365 4 0 248 296 226 336 -366 4 0 324 248 336 552 -367 4 0 147 183 191 307 -368 4 0 282 281 276 323 -369 4 0 281 323 282 301 -370 4 0 109 119 105 122 -371 4 0 297 143 117 318 -372 4 0 109 122 105 80 -373 4 0 308 366 324 272 -374 4 0 297 318 324 190 -375 4 0 297 190 164 318 -376 4 0 214 204 230 212 -377 4 0 224 212 214 230 -378 4 0 297 143 318 164 -379 4 0 264 308 324 266 -380 4 0 264 269 324 271 -381 4 0 132 117 143 318 -382 4 0 130 297 341 120 -383 4 0 341 130 120 98 -384 4 0 277 343 356 279 -385 4 0 325 308 175 313 -386 4 0 109 81 108 122 -387 4 0 109 122 108 146 -388 4 0 348 234 395 330 -389 4 0 341 111 120 297 -390 4 0 341 100 98 120 -391 4 0 341 111 100 120 -392 4 0 226 336 324 248 -393 4 0 318 319 324 195 -394 4 0 275 270 324 309 -395 4 0 309 336 324 319 -396 4 0 552 270 336 324 -397 4 0 273 309 275 324 -398 4 0 403 328 329 450 -399 4 0 382 111 341 297 -400 4 0 361 322 308 341 -401 4 0 361 341 308 297 -402 4 0 342 85 73 90 -403 4 0 342 73 85 80 -404 4 0 323 324 366 276 -405 4 0 361 297 164 382 -406 4 0 96 82 83 302 -407 4 0 45 647 44 42 -408 4 0 179 354 201 177 -409 4 0 53 621 54 347 -410 4 0 117 124 131 318 -411 4 0 156 144 316 318 -412 4 0 369 198 193 141 -413 4 0 342 302 88 67 -414 4 0 67 80 342 302 -415 4 0 73 80 342 67 -416 4 0 342 73 67 76 -417 4 0 372 528 289 285 -418 4 0 285 528 289 287 -419 4 0 355 98 325 494 -420 4 0 122 119 105 123 -421 4 0 394 82 134 302 -422 4 0 494 88 76 342 -423 4 0 109 81 122 80 -424 4 0 447 580 503 505 -425 4 0 114 118 141 145 -426 4 0 311 150 319 135 -427 4 0 108 122 302 146 -428 4 0 204 307 183 194 -429 4 0 191 204 307 183 -430 4 0 382 101 100 111 -431 4 0 382 111 100 341 -432 4 0 318 159 138 144 -433 4 0 588 281 301 356 -434 4 0 87 61 77 57 -435 4 0 318 159 165 138 -436 4 0 7 12 2 486 -437 4 0 316 191 319 317 -438 4 0 208 196 449 445 -439 4 0 322 369 354 313 -440 4 0 354 158 177 162 -441 4 0 354 169 162 179 -442 4 0 313 369 354 342 -443 4 0 179 162 354 177 -444 4 0 130 98 341 355 -445 4 0 325 130 341 355 -446 4 0 337 357 324 248 -447 4 0 324 357 227 248 -448 4 0 588 281 464 301 -449 4 0 375 341 382 98 -450 4 0 454 75 61 155 -451 4 0 353 77 84 74 -452 4 0 331 305 185 504 -453 4 0 311 331 319 150 -454 4 0 378 339 167 106 -455 4 0 318 190 142 165 -456 4 0 138 142 165 318 -457 4 0 18 12 397 14 -458 4 0 298 514 331 513 -459 4 0 118 137 141 168 -460 4 0 298 331 236 395 -461 4 0 395 298 331 513 -462 4 0 93 157 92 159 -463 4 0 354 158 184 177 -464 4 0 151 157 92 93 -465 4 0 78 93 151 92 -466 4 0 378 448 629 153 -467 4 0 102 314 126 125 -468 4 0 126 116 314 102 -469 4 0 61 72 303 75 -470 4 0 39 461 350 553 -471 4 0 350 39 33 461 -472 4 0 311 331 513 395 -473 4 0 311 331 305 509 -474 4 0 353 102 314 116 -475 4 0 204 215 243 307 -476 4 0 106 153 167 378 -477 4 0 97 162 83 302 -478 4 0 107 353 199 512 -479 4 0 297 188 164 190 -480 4 0 147 319 139 135 -481 4 0 77 353 87 74 -482 4 0 353 203 199 314 -483 4 0 512 314 353 199 -484 4 0 37 38 29 35 -485 4 0 485 140 373 125 -486 4 0 398 448 373 196 -487 4 0 196 570 373 398 -488 4 0 324 248 552 415 -489 4 0 415 270 552 324 -490 4 0 52 57 594 564 -491 4 0 285 289 414 287 -492 4 0 438 250 205 240 -493 4 0 524 425 25 17 -494 4 0 29 25 524 425 -495 4 0 87 77 61 353 -496 4 0 93 92 138 159 -497 4 0 93 92 79 138 -498 4 0 203 192 353 155 -499 4 0 192 353 314 203 -500 4 0 88 302 129 97 -501 4 0 169 342 354 302 -502 4 0 147 319 317 139 -503 4 0 435 426 629 373 -504 4 0 197 168 369 176 -505 4 0 369 176 361 197 -506 4 0 157 151 319 150 -507 4 0 307 319 312 191 -508 4 0 312 307 191 204 -509 4 0 628 373 441 374 -510 4 0 513 331 311 509 -511 4 0 49 594 413 46 -512 4 0 303 163 87 61 -513 4 0 146 342 154 122 -514 4 0 274 366 415 337 -515 4 0 274 258 366 337 -516 4 0 87 57 74 66 -517 4 0 304 306 336 384 -518 4 0 204 250 205 191 -519 4 0 110 74 66 87 -520 4 0 163 87 61 353 -521 4 0 204 205 250 241 -522 4 0 387 438 213 316 -523 4 0 150 160 348 311 -524 4 0 313 369 342 375 -525 4 0 313 322 369 375 -526 4 0 97 129 169 302 -527 4 0 504 305 393 150 -528 4 0 181 348 500 187 -529 4 0 610 527 42 44 -530 4 0 44 527 42 620 -531 4 0 311 305 456 509 -532 4 0 311 509 456 516 -533 4 0 365 512 166 116 -534 4 0 116 512 166 314 -535 4 0 509 305 508 331 -536 4 0 322 369 193 170 -537 4 0 535 526 581 632 -538 4 0 182 314 512 199 -539 4 0 497 441 373 540 -540 4 0 37 42 46 527 -541 4 0 500 209 187 348 -542 4 0 312 257 307 243 -543 4 0 323 366 281 276 -544 4 0 348 420 209 196 -545 4 0 366 279 276 272 -546 4 0 202 500 186 348 -547 4 0 386 406 221 232 -548 4 0 64 526 62 489 -549 4 0 336 159 185 195 -550 4 0 404 24 559 335 -551 4 0 404 24 607 559 -552 4 0 384 336 552 270 -553 4 0 244 240 438 213 -554 4 0 244 438 240 250 -555 4 0 430 461 620 333 -556 4 0 461 333 35 620 -557 4 0 61 564 64 334 -558 4 0 381 437 47 413 -559 4 0 279 277 265 258 -560 4 0 279 277 258 274 -561 4 0 186 500 181 348 -562 4 0 140 510 348 160 -563 4 0 377 410 36 350 -564 4 0 202 330 236 209 -565 4 0 380 345 614 468 -566 4 0 99 339 378 106 -567 4 0 378 106 418 99 -568 4 0 378 448 373 629 -569 4 0 194 235 307 182 -570 4 0 194 307 166 182 -571 4 0 194 307 183 166 -572 4 0 353 373 320 378 -573 4 0 68 97 83 302 -574 4 0 347 496 604 476 -575 4 0 161 181 411 373 -576 4 0 570 374 400 368 -577 4 0 40 38 35 29 -578 4 0 364 289 327 528 -579 4 0 324 309 319 273 -580 4 0 353 378 320 94 -581 4 0 358 91 471 375 -582 4 0 134 394 302 354 -583 4 0 394 149 108 354 -584 4 0 172 354 146 149 -585 4 0 382 358 471 375 -586 4 0 101 382 90 358 -587 4 0 651 346 638 390 -588 4 0 382 90 100 101 -589 4 0 334 594 564 475 -590 4 0 369 361 375 322 -591 4 0 322 197 369 361 -592 4 0 342 325 98 494 -593 4 0 325 313 148 342 -594 4 0 342 325 375 98 -595 4 0 115 369 123 367 -596 4 0 342 98 76 494 -597 4 0 369 375 576 115 -598 4 0 353 512 116 314 -599 4 0 336 304 552 296 -600 4 0 336 306 304 298 -601 4 0 226 514 336 296 -602 4 0 108 302 81 394 -603 4 0 181 411 373 374 -604 4 0 26 440 571 383 -605 4 0 26 383 346 440 -606 4 0 211 360 308 206 -607 4 0 87 74 57 77 -608 4 0 358 113 101 382 -609 4 0 195 388 336 226 -610 4 0 241 233 218 238 -611 4 0 155 339 378 353 -612 4 0 345 79 468 476 -613 4 0 213 316 417 175 -614 4 0 387 316 213 175 -615 4 0 312 307 262 319 -616 4 0 435 485 426 373 -617 4 0 435 373 125 485 -618 4 0 299 310 306 384 -619 4 0 26 425 25 34 -620 4 0 118 114 367 434 -621 4 0 26 34 25 608 -622 4 0 223 222 529 392 -623 4 0 527 38 37 35 -624 4 0 37 527 46 38 -625 4 0 342 123 90 375 -626 4 0 342 123 85 90 -627 4 0 335 350 33 35 -628 4 0 350 461 33 35 -629 4 0 85 91 90 123 -630 4 0 259 247 308 261 -631 4 0 629 628 448 373 -632 4 0 633 142 328 128 -633 4 0 629 497 628 373 -634 4 0 303 61 87 72 -635 4 0 236 254 234 331 -636 4 0 341 98 325 355 -637 4 0 373 570 400 569 -638 4 0 398 570 373 569 -639 4 0 49 413 527 46 -640 4 0 49 46 527 457 -641 4 0 49 626 48 527 -642 4 0 241 204 243 250 -643 4 0 49 527 48 457 -644 4 0 392 218 233 238 -645 4 0 233 392 238 223 -646 4 0 178 198 197 141 -647 4 0 198 197 141 369 -648 4 0 364 290 287 528 -649 4 0 419 381 564 413 -650 4 0 92 78 79 59 -651 4 0 192 373 314 353 -652 4 0 386 406 238 423 -653 4 0 367 369 137 391 -654 4 0 437 413 419 606 -655 4 0 413 437 47 606 -656 4 0 239 252 322 255 -657 4 0 454 61 339 155 -658 4 0 34 466 425 29 -659 4 0 221 386 232 240 -660 4 0 60 64 489 484 -661 4 0 484 65 60 64 -662 4 0 212 386 218 221 -663 4 0 241 240 386 212 -664 4 0 241 205 240 212 -665 4 0 607 24 16 470 -666 4 0 620 42 37 527 -667 4 0 37 333 42 620 -668 4 0 95 87 66 69 -669 4 0 113 164 382 361 -670 4 0 410 30 432 21 -671 4 0 371 1 522 458 -672 4 0 527 47 43 40 -673 4 0 596 425 17 15 -674 4 0 393 456 160 311 -675 4 0 110 95 87 66 -676 4 0 160 311 456 516 -677 4 0 512 511 365 166 -678 4 0 353 511 365 512 -679 4 0 128 144 318 138 -680 4 0 341 130 325 308 -681 4 0 87 61 57 58 -682 4 0 419 58 564 72 -683 4 0 414 289 327 364 -684 4 0 320 378 435 94 -685 4 0 364 528 287 289 -686 4 0 212 221 205 240 -687 4 0 134 172 149 354 -688 4 0 134 172 354 184 -689 4 0 319 147 191 307 -690 4 0 589 641 606 436 -691 4 0 347 79 59 476 -692 4 0 345 79 476 92 -693 4 0 92 138 144 328 -694 4 0 86 92 144 328 -695 4 0 32 399 34 38 -696 4 0 306 309 336 310 -697 4 0 347 604 468 476 -698 4 0 347 468 79 476 -699 4 0 614 345 79 468 -700 4 0 384 310 336 270 -701 4 0 439 25 26 422 -702 4 0 196 192 314 420 -703 4 0 348 420 196 314 -704 4 0 132 143 142 318 -705 4 0 164 142 143 318 -706 4 0 386 406 423 221 -707 4 0 35 527 38 40 -708 4 0 158 354 96 162 -709 4 0 169 302 354 162 -710 4 0 334 475 564 363 -711 4 0 155 61 303 75 -712 4 0 94 353 378 339 -713 4 0 224 233 219 212 -714 4 0 214 215 204 194 -715 4 0 204 243 230 241 -716 4 0 204 230 212 241 -717 4 0 391 474 369 136 -718 4 0 286 588 528 356 -719 4 0 35 620 527 47 -720 4 0 136 474 361 565 -721 4 0 566 526 632 64 -722 4 0 490 439 11 14 -723 4 0 209 330 420 348 -724 4 0 35 527 40 47 -725 4 0 76 342 73 98 -726 4 0 77 353 102 320 -727 4 0 268 308 261 260 -728 4 0 167 155 339 378 -729 4 0 465 289 385 344 -730 4 0 255 308 260 259 -731 4 0 335 24 470 33 -732 4 0 559 24 470 335 -733 4 0 522 1 371 428 -734 4 0 347 53 496 54 -735 4 0 559 24 607 470 -736 4 0 476 347 496 54 -737 4 0 312 204 243 307 -738 4 0 230 215 243 204 -739 4 0 241 218 212 386 -740 4 0 241 238 218 386 -741 4 0 29 33 28 23 -742 4 0 23 335 559 470 -743 4 0 297 382 361 341 -744 4 0 336 611 185 331 -745 4 0 388 185 336 611 -746 4 0 353 373 102 320 -747 4 0 373 102 314 353 -748 4 0 44 527 606 610 -749 4 0 74 110 84 353 -750 4 0 610 527 606 413 -751 4 0 325 341 375 98 -752 4 0 369 136 137 391 -753 4 0 169 354 342 313 -754 4 0 274 366 279 281 -755 4 0 281 366 279 276 -756 4 0 322 313 206 308 -757 4 0 414 289 344 385 -758 4 0 114 546 367 434 -759 4 0 367 391 434 369 -760 4 0 155 163 303 61 -761 4 0 47 620 527 44 -762 4 0 384 304 552 336 -763 4 0 384 310 306 336 -764 4 0 99 378 339 94 -765 4 0 506 94 378 99 -766 4 0 365 353 512 116 -767 4 0 378 99 418 506 -768 4 0 478 23 559 470 -769 4 0 328 86 633 128 -770 4 0 265 308 268 266 -771 4 0 268 308 263 266 -772 4 0 564 419 436 58 -773 4 0 460 75 564 65 -774 4 0 339 61 99 94 -775 4 0 518 564 65 460 -776 4 0 643 216 229 392 -777 4 0 342 88 76 67 -778 4 0 26 422 11 439 -779 4 0 26 440 439 571 -780 4 0 411 161 373 441 -781 4 0 442 467 412 10 -782 4 0 350 377 24 33 -783 4 0 225 409 217 223 -784 4 0 410 377 24 350 -785 4 0 24 350 33 335 -786 4 0 371 522 523 458 -787 4 0 278 324 273 276 -788 4 0 273 324 275 276 -789 4 0 170 354 172 184 -790 4 0 169 179 354 313 -791 4 0 607 16 24 580 -792 4 0 367 391 137 118 -793 4 0 35 620 37 527 -794 4 0 548 33 461 333 -795 4 0 414 385 344 294 -796 4 0 414 289 288 344 -797 4 0 65 64 484 454 -798 4 0 93 79 78 401 -799 4 0 375 382 358 90 -800 4 0 413 575 564 594 -801 4 0 187 181 368 189 -802 4 0 358 375 90 91 -803 4 0 275 276 324 323 -804 4 0 493 270 323 275 -805 4 0 532 323 276 275 -806 4 0 324 270 323 415 -807 4 0 275 323 324 270 -808 4 0 157 331 319 336 -809 4 0 454 339 61 338 -810 4 0 527 47 507 43 -811 4 0 74 87 110 353 -812 4 0 61 353 339 155 -813 4 0 444 445 618 379 -814 4 0 173 133 160 510 -815 4 0 352 604 468 347 -816 4 0 161 181 373 348 -817 4 0 23 335 470 33 -818 4 0 181 187 374 373 -819 4 0 29 35 28 33 -820 4 0 348 187 181 373 -821 4 0 562 10 412 447 -822 4 0 10 580 503 447 -823 4 0 399 351 34 38 -824 4 0 515 592 399 32 -825 4 0 434 112 637 474 -826 4 0 134 82 96 302 -827 4 0 224 230 233 212 -828 4 0 134 302 96 354 -829 4 0 302 354 162 96 -830 4 0 376 64 60 564 -831 4 0 606 640 589 45 -832 4 0 369 137 168 141 -833 4 0 113 361 583 136 -834 4 0 197 369 168 141 -835 4 0 12 7 4 14 -836 4 0 510 181 173 171 -837 4 0 61 339 353 94 -838 4 0 369 154 170 354 -839 4 0 404 607 24 21 -840 4 0 411 374 578 441 -841 4 0 500 186 189 480 -842 4 0 535 526 632 566 -843 4 0 628 441 497 483 -844 4 0 478 23 28 559 -845 4 0 28 335 559 23 -846 4 0 93 92 78 79 -847 4 0 554 473 631 453 -848 4 0 198 178 193 141 -849 4 0 187 444 209 500 -850 4 0 226 388 336 514 -851 4 0 287 464 285 528 -852 4 0 528 301 285 372 -853 4 0 497 629 426 373 -854 4 0 394 302 70 82 -855 4 0 64 61 454 75 -856 4 0 444 587 618 445 -857 4 0 467 458 371 523 -858 4 0 371 523 520 467 -859 4 0 371 520 551 467 -860 4 0 385 465 294 292 -861 4 0 468 604 345 476 -862 4 0 584 517 63 345 -863 4 0 176 136 137 369 -864 4 0 439 440 18 571 -865 4 0 490 26 11 439 -866 4 0 324 366 227 357 -867 4 0 606 413 419 436 -868 4 0 527 48 477 507 -869 4 0 527 477 48 457 -870 4 0 527 492 48 507 -871 4 0 527 626 48 492 -872 4 0 134 354 96 158 -873 4 0 62 64 489 60 -874 4 0 52 57 370 594 -875 4 0 326 52 55 564 -876 4 0 524 425 17 19 -877 4 0 373 441 161 540 -878 4 0 373 161 140 540 -879 4 0 66 326 55 58 -880 4 0 58 326 55 564 -881 4 0 310 309 336 270 -882 4 0 324 270 336 309 -883 4 0 157 336 185 331 -884 4 0 181 411 171 161 -885 4 0 640 589 641 606 -886 4 0 537 557 621 54 -887 4 0 282 285 340 288 -888 4 0 372 285 288 340 -889 4 0 382 100 98 341 -890 4 0 502 294 465 292 -891 4 0 43 34 351 38 -892 4 0 221 240 213 205 -893 4 0 438 240 205 213 -894 4 0 425 466 524 29 -895 4 0 354 302 146 108 -896 4 0 435 426 506 629 -897 4 0 497 506 426 629 -898 4 0 187 181 374 368 -899 4 0 517 79 614 345 -900 4 0 342 90 73 98 -901 4 0 180 141 178 152 -902 4 0 178 152 141 168 -903 4 0 193 180 141 178 -904 4 0 140 161 348 510 -905 4 0 9 442 13 362 -906 4 0 442 9 13 467 -907 4 0 408 505 503 580 -908 4 0 607 580 408 16 -909 4 0 327 289 414 385 -910 4 0 372 284 283 340 -911 4 0 359 89 526 566 -912 4 0 607 539 478 470 -913 4 0 140 373 125 348 -914 4 0 328 86 92 517 -915 4 0 527 47 44 606 -916 4 0 155 163 61 353 -917 4 0 367 391 118 434 -918 4 0 338 64 61 454 -919 4 0 64 338 484 454 -920 4 0 359 89 566 338 -921 4 0 489 526 566 64 -922 4 0 448 192 378 373 -923 4 0 350 39 377 33 -924 4 0 369 137 176 168 -925 4 0 377 350 553 39 -926 4 0 325 313 375 341 -927 4 0 340 288 625 282 -928 4 0 342 313 375 325 -929 4 0 524 466 19 20 -930 4 0 425 466 19 524 -931 4 0 348 395 186 202 -932 4 0 610 44 42 45 -933 4 0 409 433 217 223 -934 4 0 217 433 529 223 -935 4 0 582 375 471 115 -936 4 0 434 474 637 369 -937 4 0 382 375 471 582 -938 4 0 98 90 382 375 -939 4 0 382 100 90 98 -940 4 0 123 105 122 85 -941 4 0 122 85 105 80 -942 4 0 43 40 34 38 -943 4 0 369 474 361 136 -944 4 0 469 452 564 460 -945 4 0 46 41 527 457 -946 4 0 415 366 274 323 -947 4 0 191 387 316 438 -948 4 0 191 387 156 316 -949 4 0 434 391 474 369 -950 4 0 502 294 344 465 -951 4 0 502 294 292 293 -952 4 0 476 59 92 79 -953 4 0 306 309 319 336 -954 4 0 528 301 464 285 -955 4 0 301 282 464 285 -956 4 0 208 449 210 379 -957 4 0 210 379 220 208 -958 4 0 551 520 10 467 -959 4 0 359 89 339 106 -960 4 0 110 353 365 116 -961 4 0 353 511 110 365 -962 4 0 118 141 145 152 -963 4 0 34 28 466 29 -964 4 0 621 347 59 54 -965 4 0 59 621 79 347 -966 4 0 342 80 122 302 -967 4 0 369 123 154 342 -968 4 0 123 85 122 342 -969 4 0 122 342 85 80 -970 4 0 450 349 612 482 -971 4 0 564 55 436 413 -972 4 0 40 38 29 34 -973 4 0 606 641 413 436 -974 4 0 28 35 335 33 -975 4 0 34 25 32 29 -976 4 0 487 548 495 479 -977 4 0 187 209 196 348 -978 4 0 461 479 430 495 -979 4 0 311 513 509 186 -980 4 0 395 311 348 186 -981 4 0 187 196 209 444 -982 4 0 485 540 426 373 -983 4 0 21 580 24 447 -984 4 0 412 447 21 562 -985 4 0 412 562 21 446 -986 4 0 447 580 24 10 -987 4 0 46 527 610 413 -988 4 0 229 392 216 222 -989 4 0 323 281 366 274 -990 4 0 281 301 274 323 -991 4 0 599 625 429 282 -992 4 0 608 25 32 34 -993 4 0 372 288 284 340 -994 4 0 227 324 190 308 -995 4 0 373 196 348 187 -996 4 0 425 25 34 29 -997 4 0 628 448 373 591 -998 4 0 591 448 373 398 -999 4 0 477 43 41 527 -1000 4 0 80 71 81 302 -1001 4 0 457 477 41 527 -1002 4 0 647 487 430 479 -1003 4 0 628 373 497 441 -1004 4 0 578 628 441 374 -1005 4 0 410 24 335 350 -1006 4 0 393 311 160 150 -1007 4 0 367 118 137 141 -1008 4 0 343 488 356 396 -1009 4 0 87 72 61 58 -1010 4 0 488 588 356 396 -1011 4 0 476 54 59 347 -1012 4 0 94 353 61 77 -1013 4 0 110 353 87 107 -1014 4 0 251 245 322 201 -1015 4 0 245 179 322 201 -1016 4 0 11 422 486 14 -1017 4 0 287 588 464 528 -1018 4 0 10 467 412 551 -1019 4 0 13 551 412 467 -1020 4 0 371 467 551 13 -1021 4 0 551 10 8 412 -1022 4 0 113 164 361 136 -1023 4 0 425 25 15 26 -1024 4 0 140 348 125 160 -1025 4 0 451 588 528 286 -1026 4 0 180 152 145 141 -1027 4 0 607 16 539 470 -1028 4 0 374 570 400 373 -1029 4 0 373 374 556 400 -1030 4 0 374 373 556 628 -1031 4 0 441 628 578 483 -1032 4 0 497 642 418 629 -1033 4 0 167 89 106 339 -1034 4 0 346 440 390 521 -1035 4 0 369 123 342 375 -1036 4 0 583 382 498 361 -1037 4 0 564 75 72 61 -1038 4 0 564 61 64 75 -1039 4 0 345 517 79 92 -1040 4 0 533 529 223 222 -1041 4 0 498 582 576 375 -1042 4 0 575 376 609 49 -1043 4 0 412 10 8 447 -1044 4 0 561 472 549 468 -1045 4 0 239 322 252 231 -1046 4 0 397 12 4 14 -1047 4 0 367 369 434 576 -1048 4 0 206 313 322 179 -1049 4 0 322 179 313 354 -1050 4 0 12 2 4 7 -1051 4 0 346 638 26 608 -1052 4 0 66 87 57 58 -1053 4 0 72 58 564 61 -1054 4 0 322 207 231 239 -1055 4 0 201 354 322 207 -1056 4 0 239 255 322 201 -1057 4 0 533 402 529 222 -1058 4 0 60 518 564 65 -1059 4 0 11 486 12 14 -1060 4 0 118 168 141 152 -1061 4 0 60 376 564 518 -1062 4 0 576 375 582 115 -1063 4 0 515 34 399 351 -1064 4 0 334 564 64 363 -1065 4 0 311 331 150 305 -1066 4 0 473 538 597 519 -1067 4 0 564 594 575 475 -1068 4 0 36 30 432 410 -1069 4 0 343 396 356 279 -1070 4 0 281 279 356 396 -1071 4 0 281 274 301 356 -1072 4 0 486 7 14 422 -1073 4 0 642 153 585 629 -1074 4 0 153 642 628 629 -1075 4 0 503 447 8 10 -1076 4 0 461 430 620 416 -1077 4 0 493 270 275 280 -1078 4 0 275 493 532 323 -1079 4 0 532 493 282 323 -1080 4 0 461 495 430 416 -1081 4 0 493 532 280 275 -1082 4 0 389 381 47 413 -1083 4 0 49 413 626 527 -1084 4 0 500 189 186 181 -1085 4 0 498 382 582 375 -1086 4 0 410 30 24 377 -1087 4 0 30 410 36 377 -1088 4 0 366 265 279 272 -1089 4 0 608 34 32 31 -1090 4 0 527 40 43 38 -1091 4 0 46 527 41 38 -1092 4 0 43 527 38 41 -1093 4 0 597 639 7 486 -1094 4 0 306 298 336 331 -1095 4 0 11 26 15 543 -1096 4 0 554 11 15 543 -1097 4 0 416 430 620 649 -1098 4 0 291 290 364 327 -1099 4 0 637 498 375 361 -1100 4 0 39 548 33 461 -1101 4 0 422 634 25 543 -1102 4 0 583 582 382 113 -1103 4 0 367 114 118 141 -1104 4 0 473 422 11 554 -1105 4 0 178 197 168 141 -1106 4 0 375 369 123 115 -1107 4 0 91 123 115 375 -1108 4 0 377 350 36 553 -1109 4 0 173 181 516 186 -1110 4 0 110 95 107 87 -1111 4 0 353 107 163 87 -1112 4 0 46 527 42 610 -1113 4 0 500 209 348 202 -1114 4 0 334 61 564 57 -1115 4 0 510 103 140 161 -1116 4 0 160 104 140 133 -1117 4 0 486 11 473 422 -1118 4 0 336 611 331 514 -1119 4 0 576 434 637 369 -1120 4 0 29 466 524 20 -1121 4 0 366 279 265 258 -1122 4 0 366 279 258 274 -1123 4 0 89 484 338 454 -1124 4 0 462 621 568 534 -1125 4 0 133 104 140 103 -1126 4 0 462 534 568 531 -1127 4 0 521 440 390 563 -1128 4 0 383 440 563 390 -1129 4 0 141 154 170 369 -1130 4 0 141 193 369 170 -1131 4 0 173 181 510 516 -1132 4 0 348 510 181 516 -1133 4 0 324 366 276 272 -1134 4 0 415 324 366 323 -1135 4 0 477 527 507 43 -1136 4 0 26 25 440 346 -1137 4 0 430 333 42 479 -1138 4 0 460 452 564 75 -1139 4 0 31 515 32 592 -1140 4 0 181 189 187 500 -1141 4 0 389 527 413 47 -1142 4 0 413 389 626 527 -1143 4 0 376 590 49 575 -1144 4 0 331 611 185 508 -1145 4 0 223 392 407 219 -1146 4 0 223 233 392 219 -1147 4 0 538 648 597 519 -1148 4 0 597 648 538 486 -1149 4 0 557 537 568 499 -1150 4 0 553 39 461 416 -1151 4 0 290 528 451 287 -1152 4 0 554 453 332 560 -1153 4 0 601 467 458 9 -1154 4 0 623 525 535 566 -1155 4 0 566 525 535 526 -1156 4 0 378 106 431 418 -1157 4 0 53 496 352 347 -1158 4 0 564 300 419 72 -1159 4 0 564 452 300 72 -1160 4 0 2 6 7 486 -1161 4 0 421 451 528 286 -1162 4 0 451 528 588 287 -1163 4 0 409 595 433 491 -1164 4 0 79 621 78 401 -1165 4 0 401 621 78 555 -1166 4 0 78 537 555 621 -1167 4 0 599 340 282 301 -1168 4 0 493 599 282 301 -1169 4 0 430 620 42 333 -1170 4 0 565 498 112 637 -1171 4 0 583 498 112 565 -1172 4 0 599 429 536 282 -1173 4 0 599 625 459 429 -1174 4 0 543 554 332 15 -1175 4 0 474 112 637 565 -1176 4 0 364 290 528 327 -1177 4 0 548 461 479 333 -1178 4 0 461 333 430 479 -1179 4 0 383 390 346 440 -1180 4 0 65 60 64 564 -1181 4 0 65 64 75 564 -1182 4 0 383 638 346 390 -1183 4 0 380 468 614 549 -1184 4 0 532 282 276 323 -1185 4 0 157 331 504 150 -1186 4 0 89 454 338 339 -1187 4 0 167 454 89 339 -1188 4 0 8 5 10 551 -1189 4 0 5 520 10 551 -1190 4 0 492 626 545 389 -1191 4 0 389 626 545 469 -1192 4 0 37 33 35 29 -1193 4 0 615 568 499 557 -1194 4 0 500 186 480 202 -1195 4 0 54 56 53 496 -1196 4 0 294 295 291 385 -1197 4 0 295 291 385 327 -1198 4 0 295 294 292 385 -1199 4 0 474 637 361 565 -1200 4 0 497 373 426 540 -1201 4 0 40 29 28 34 -1202 4 0 535 525 581 526 -1203 4 0 328 92 79 517 -1204 4 0 496 56 352 604 -1205 4 0 459 536 646 493 -1206 4 0 459 429 624 536 -1207 4 0 493 536 280 532 -1208 4 0 25 346 26 608 -1209 4 0 351 399 41 38 -1210 4 0 43 41 38 351 -1211 4 0 527 413 47 606 -1212 4 0 308 252 322 231 -1213 4 0 308 255 322 252 -1214 4 0 256 231 252 308 -1215 4 0 256 308 259 247 -1216 4 0 21 30 24 410 -1217 4 0 21 30 562 24 -1218 4 0 315 621 555 568 -1219 4 0 217 219 223 407 -1220 4 0 225 223 219 233 -1221 4 0 407 217 529 223 -1222 4 0 381 452 300 564 -1223 4 0 595 635 433 491 -1224 4 0 414 385 291 327 -1225 4 0 416 39 461 495 -1226 4 0 461 39 548 495 -1227 4 0 461 548 479 495 -1228 4 0 301 282 281 464 -1229 4 0 301 282 285 340 -1230 4 0 315 621 568 462 -1231 4 0 372 289 288 285 -1232 4 0 289 288 285 414 -1233 4 0 431 153 106 378 -1234 4 0 55 641 589 436 -1235 4 0 651 572 638 608 -1236 4 0 564 452 72 75 -1237 4 0 573 534 567 613 -1238 4 0 567 645 600 534 -1239 4 0 499 568 577 537 -1240 4 0 414 327 291 364 -1241 4 0 561 549 614 468 -1242 4 0 338 489 566 64 -1243 4 0 89 484 489 338 -1244 4 0 385 294 465 344 -1245 4 0 445 196 444 209 -1246 4 0 209 550 444 427 -1247 4 0 490 14 11 12 -1248 4 0 490 18 14 12 -1249 4 0 597 648 486 7 -1250 4 0 486 639 7 422 -1251 4 0 639 473 597 631 -1252 4 0 529 491 616 533 -1253 4 0 435 320 125 373 -1254 4 0 616 491 529 541 -1255 4 0 497 628 642 629 -1256 4 0 46 52 413 602 -1257 4 0 623 359 566 338 -1258 4 0 497 506 629 418 -1259 4 0 99 359 623 338 -1260 4 0 65 64 454 75 -1261 4 0 209 617 550 427 -1262 4 0 86 328 144 128 -1263 4 0 570 187 374 368 -1264 4 0 403 86 633 328 -1265 4 0 601 522 458 523 -1266 4 0 604 352 472 56 -1267 4 0 273 312 319 324 -1268 4 0 380 614 63 549 -1269 4 0 561 549 63 614 -1270 4 0 623 525 566 359 -1271 4 0 359 525 566 526 -1272 4 0 566 89 526 489 -1273 4 0 113 382 358 471 -1274 4 0 582 471 382 113 -1275 4 0 523 467 458 601 -1276 4 0 268 308 260 263 -1277 4 0 374 628 556 578 -1278 4 0 498 582 382 583 -1279 4 0 586 645 534 557 -1280 4 0 361 176 369 136 -1281 4 0 277 356 274 279 -1282 4 0 576 637 375 369 -1283 4 0 637 375 369 361 -1284 4 0 373 556 569 400 -1285 4 0 556 373 569 628 -1286 4 0 447 562 24 21 -1287 4 0 47 492 527 507 -1288 4 0 495 39 548 487 -1289 4 0 572 608 651 650 -1290 4 0 541 619 542 574 -1291 4 0 27 562 21 30 -1292 4 0 21 446 562 27 -1293 4 0 517 328 614 79 -1294 4 0 545 530 622 575 -1295 4 0 522 371 523 558 -1296 4 0 523 371 520 558 -1297 4 0 471 91 115 375 -1298 4 0 578 127 628 556 -1299 4 0 127 153 628 556 -1300 4 0 641 413 55 52 -1301 4 0 55 564 436 58 -1302 4 0 564 334 57 594 -1303 4 0 55 641 436 413 -1304 4 0 575 413 49 594 -1305 4 0 15 17 596 560 -1306 4 0 521 440 563 571 -1307 4 0 632 581 62 526 -1308 4 0 285 372 301 340 -1309 4 0 290 451 528 421 -1310 4 0 326 57 564 58 -1311 4 0 205 212 241 204 -1312 4 0 564 452 469 381 -1313 4 0 239 322 207 201 -1314 4 0 223 392 529 407 -1315 4 0 381 564 413 469 -1316 4 0 395 513 311 186 -1317 4 0 389 469 413 626 -1318 4 0 136 361 583 565 -1319 4 0 586 645 567 534 -1320 4 0 32 25 608 346 -1321 4 0 369 367 137 141 -1322 4 0 469 575 545 622 -1323 4 0 593 543 634 422 -1324 4 0 373 569 628 591 -1325 4 0 556 569 153 628 -1326 4 0 196 187 373 570 -1327 4 0 167 454 339 155 -1328 4 0 590 626 575 530 -1329 4 0 536 493 282 532 -1330 4 0 133 140 160 510 -1331 4 0 376 363 64 564 -1332 4 0 209 427 444 587 -1333 4 0 571 440 563 383 -1334 4 0 498 375 576 637 -1335 4 0 531 534 568 579 -1336 4 0 534 568 557 621 -1337 4 0 218 392 643 238 -1338 4 0 568 555 577 537 -1339 4 0 475 609 363 49 -1340 4 0 363 609 475 564 -1341 4 0 393 311 150 305 -1342 4 0 19 425 17 596 -1343 4 0 596 17 603 560 -1344 4 0 522 428 371 558 -1345 4 0 127 628 497 483 -1346 4 0 492 48 545 626 -1347 4 0 21 607 24 580 -1348 4 0 132 117 318 128 -1349 4 0 633 132 547 142 -1350 4 0 437 381 419 413 -1351 4 0 419 381 437 300 -1352 4 0 173 181 186 171 -1353 4 0 405 613 600 534 -1354 4 0 632 526 62 64 -1355 4 0 489 484 64 338 -1356 4 0 600 54 53 621 -1357 4 0 29 20 28 466 -1358 4 0 20 28 466 443 -1359 4 0 49 48 626 590 -1360 4 0 63 345 614 380 -1361 4 0 584 345 63 380 -1362 4 0 470 607 559 478 -1363 4 0 28 23 22 20 -1364 4 0 478 23 22 28 -1365 4 0 473 422 554 631 -1366 4 0 555 537 568 621 -1367 4 0 18 490 14 439 -1368 4 0 596 17 19 603 -1369 4 0 571 440 18 521 -1370 4 0 542 491 616 541 -1371 4 0 534 568 615 557 -1372 4 0 534 568 579 615 -1373 4 0 392 222 229 238 -1374 4 0 626 48 530 590 -1375 4 0 238 406 229 423 -1376 4 0 629 585 642 418 -1377 4 0 418 506 629 378 -1378 4 0 378 431 629 418 -1379 4 0 153 448 628 591 -1380 4 0 591 569 628 153 -1381 4 0 550 209 500 627 -1382 4 0 515 31 32 34 -1383 4 0 209 627 550 617 -1384 4 0 569 556 153 400 -1385 4 0 645 621 557 54 -1386 4 0 529 491 533 223 -1387 4 0 601 1 458 522 -1388 4 0 522 601 1 3 -1389 4 0 359 339 99 106 -1390 4 0 338 99 359 339 -1391 4 0 49 575 626 413 -1392 4 0 473 597 631 453 -1393 4 0 605 564 518 460 -1394 4 0 222 392 402 529 -1395 4 0 113 382 583 361 -1396 4 0 33 335 28 23 -1397 4 0 370 52 594 46 -1398 4 0 408 505 580 607 -1399 4 0 413 640 602 641 -1400 4 0 630 376 564 609 -1401 4 0 49 376 609 363 -1402 4 0 363 376 609 564 -1403 4 0 393 456 311 305 -1404 4 0 218 221 386 643 -1405 4 0 643 386 423 221 -1406 4 0 141 123 369 367 -1407 4 0 498 382 375 361 -1408 4 0 474 637 369 361 -1409 4 0 558 371 520 551 -1410 4 0 558 428 371 551 -1411 4 0 374 441 411 373 -1412 4 0 422 25 26 543 -1413 4 0 25 17 15 634 -1414 4 0 606 44 610 45 -1415 4 0 367 115 369 576 -1416 4 0 367 576 546 115 -1417 4 0 636 573 567 613 -1418 4 0 615 51 579 573 -1419 4 0 50 51 615 636 -1420 4 0 55 413 564 52 -1421 4 0 594 52 413 46 -1422 4 0 564 326 52 57 -1423 4 0 367 434 546 576 -1424 4 0 208 449 379 445 -1425 4 0 379 445 544 208 -1426 4 0 26 439 440 25 -1427 4 0 622 575 605 469 -1428 4 0 636 586 567 573 -1429 4 0 573 586 567 534 -1430 4 0 599 625 340 283 -1431 4 0 605 630 518 564 -1432 4 0 171 510 181 161 -1433 4 0 32 29 38 34 -1434 4 0 402 216 392 222 -1435 4 0 223 222 392 238 -1436 4 0 389 492 527 47 -1437 4 0 389 492 626 527 -1438 4 0 577 555 78 537 -1439 4 0 315 621 401 555 -1440 4 0 15 598 634 560 -1441 4 0 634 17 15 560 -1442 4 0 481 142 328 633 -1443 4 0 128 328 144 138 -1444 4 0 413 610 640 606 -1445 4 0 640 606 610 45 -1446 4 0 379 449 444 445 -1447 4 0 187 449 196 444 -1448 4 0 445 449 444 196 -1449 4 0 605 564 460 469 -1450 4 0 575 564 605 469 -1451 4 0 541 200 619 574 -1452 4 0 564 436 419 413 -1453 4 0 517 482 63 614 -1454 4 0 154 369 141 123 -1455 4 0 583 498 565 361 -1456 4 0 498 361 637 565 -1457 4 0 622 530 630 575 -1458 4 0 21 30 432 27 -1459 4 0 173 510 160 516 -1460 4 0 311 160 348 516 -1461 4 0 485 140 540 373 -1462 4 0 21 505 580 447 -1463 4 0 490 26 439 571 -1464 4 0 379 544 220 208 -1465 4 0 348 516 181 186 -1466 4 0 186 509 311 516 -1467 4 0 209 202 627 617 -1468 4 0 433 635 529 491 -1469 4 0 430 42 620 44 -1470 4 0 649 430 620 44 -1471 4 0 529 635 541 491 -1472 4 0 404 24 410 21 -1473 4 0 404 410 24 335 -1474 4 0 89 338 359 339 -1475 4 0 450 328 482 517 -1476 4 0 517 328 482 614 -1477 4 0 78 59 537 621 -1478 4 0 588 396 281 356 -1479 4 0 286 488 588 356 -1480 4 0 424 543 593 422 -1481 4 0 463 607 408 16 -1482 4 0 389 381 413 469 -1483 4 0 413 469 575 626 -1484 4 0 626 469 575 545 -1485 4 0 554 11 543 422 -1486 4 0 459 624 646 536 -1487 4 0 332 543 593 424 -1488 4 0 631 554 424 422 -1489 4 0 153 431 629 378 -1490 4 0 545 48 530 626 -1491 4 0 626 530 545 575 -1492 4 0 59 621 78 79 -1493 4 0 160 510 348 516 -1494 4 0 626 590 575 49 -1495 4 0 576 434 112 637 -1496 4 0 498 576 112 637 -1497 4 0 346 651 638 608 -1498 4 0 13 442 412 362 -1499 4 0 13 467 412 442 -1500 4 0 132 142 633 128 -1501 4 0 184 180 172 170 -1502 4 0 631 332 424 554 -1503 4 0 531 573 579 51 -1504 4 0 521 571 563 18 -1505 4 0 599 625 282 340 -1506 4 0 622 630 605 575 -1507 4 0 562 442 362 412 -1508 4 0 193 180 170 141 -1509 4 0 50 644 636 615 -1510 4 0 443 466 20 19 -1511 4 0 616 542 533 491 -1512 4 0 413 594 564 52 -1513 4 0 621 53 600 405 -1514 4 0 362 562 446 27 -1515 4 0 403 547 321 481 -1516 4 0 403 481 321 329 -1517 4 0 562 442 412 10 -1518 4 0 493 459 536 599 -1519 4 0 493 599 536 282 -1520 4 0 450 86 328 517 -1521 4 0 413 602 610 46 -1522 4 0 29 23 28 20 -1523 4 0 223 409 433 491 -1524 4 0 621 59 537 54 -1525 4 0 13 362 412 446 -1526 4 0 439 422 11 14 -1527 4 0 639 473 631 422 -1528 4 0 450 612 584 517 -1529 4 0 450 482 612 517 -1530 4 0 413 641 602 52 -1531 4 0 447 10 24 562 -1532 4 0 531 573 534 579 -1533 4 0 380 345 468 604 -1534 4 0 587 427 444 618 -1535 4 0 613 567 600 534 -1536 4 0 218 386 238 643 -1537 4 0 643 238 423 386 -1538 4 0 347 496 352 604 -1539 4 0 63 345 517 614 -1540 4 0 584 612 63 517 -1541 4 0 629 431 585 418 -1542 4 0 153 431 585 629 -1543 4 0 463 539 478 607 -1544 4 0 463 539 607 16 -1545 4 0 564 609 475 575 -1546 4 0 533 529 402 616 -1547 4 0 376 630 564 518 -1548 4 0 645 54 600 621 -1549 4 0 380 468 472 604 -1550 4 0 604 468 472 352 -1551 4 0 380 468 549 472 -1552 4 0 570 187 373 374 -1553 4 0 606 413 641 640 -1554 4 0 413 610 602 640 -1555 4 0 458 467 13 9 -1556 4 0 467 458 13 371 -1557 4 0 11 422 26 543 -1558 4 0 25 17 425 15 -1559 4 0 646 536 280 493 -1560 4 0 646 624 280 536 -1561 4 0 647 430 44 42 -1562 4 0 618 544 220 379 -1563 4 0 648 6 486 7 -1564 4 0 648 6 538 486 -1565 4 0 403 633 547 481 -1566 4 0 403 328 633 481 -1567 4 0 483 127 628 578 -1568 4 0 486 7 12 14 -1569 4 0 53 56 352 496 -1570 4 0 340 288 284 625 -1571 4 0 283 340 284 625 -1572 4 0 561 352 472 468 -1573 4 0 86 450 328 403 -1574 4 0 329 403 481 328 -1575 4 0 455 288 284 372 -1576 4 0 501 288 284 455 -1577 4 0 376 530 575 630 -1578 4 0 630 376 609 575 -1579 4 0 430 479 42 647 -1580 4 0 621 405 600 534 -1581 4 0 22 28 20 443 -1582 4 0 643 238 229 423 -1583 4 0 481 633 547 142 -1584 4 0 558 428 551 652 -1585 4 0 509 611 331 508 -1586 4 0 513 514 331 611 -1587 4 0 509 513 331 611 -1588 4 0 601 9 1 3 -1589 4 0 289 288 344 501 -1590 4 0 515 32 399 34 -1591 4 0 403 321 349 329 -1592 4 0 392 229 643 238 -1593 4 0 618 445 544 379 -1594 4 0 618 587 544 445 -1595 4 0 531 613 534 573 -1596 4 0 629 153 448 628 -1597 4 0 538 473 597 486 -1598 4 0 597 473 639 486 -1599 4 0 650 31 608 346 -1600 4 0 607 505 580 21 -1601 4 0 288 455 289 372 -1602 4 0 289 455 288 501 -1603 4 0 376 530 590 575 -1604 4 0 49 594 475 575 -1605 4 0 356 279 281 274 -1606 4 0 550 209 444 500 -1607 4 0 362 412 446 562 -1608 4 0 529 433 491 223 -1609 4 0 455 372 284 283 -1610 4 0 465 501 455 289 -1611 4 0 465 289 344 501 -1612 4 0 445 209 444 587 -1613 4 0 153 642 127 628 -1614 4 0 294 385 291 414 -1615 4 0 283 625 459 599 -1616 4 0 613 531 51 573 -1617 4 0 636 573 613 51 -1618 4 0 557 621 568 537 -1619 4 0 558 551 520 5 -1620 4 0 500 209 202 627 -1621 4 0 635 200 541 574 -1622 4 0 595 200 635 574 -1623 4 0 558 652 551 5 -1624 4 0 534 579 573 615 -1625 4 0 605 575 630 564 -1626 4 0 31 346 32 608 -1627 4 0 631 424 639 422 -1628 4 0 383 346 638 26 -1629 4 0 469 575 564 413 -1630 4 0 15 560 332 598 -1631 4 0 15 554 332 560 -1632 4 0 586 557 534 615 -1633 4 0 573 586 534 615 -1634 4 0 332 543 598 593 -1635 4 0 543 332 598 15 -1636 4 0 609 575 564 630 -1637 4 0 554 631 332 453 -1638 4 0 424 554 543 422 -1639 4 0 608 346 651 650 -1640 4 0 487 495 430 479 -1641 4 0 645 621 534 557 -1642 4 0 645 621 600 534 -1643 4 0 542 491 541 574 -1644 4 0 541 635 574 491 -1645 4 0 636 644 586 573 -1646 4 0 573 586 615 644 -1647 4 0 543 634 598 593 -1648 4 0 497 127 642 628 -1649 4 0 598 543 15 634 -1650 4 0 25 15 543 634 -1651 4 0 473 519 597 453 -1652 4 0 595 574 635 491 -1653 4 0 636 51 615 573 -1654 4 0 644 573 636 615 -$EndElements -$ElementData -1 -"color" -1 -0.0 -3 -0 -1 -1654 -1 7.56199 -2 4.86806 -3 4.40144 -4 6.42934 -5 4.22059 -6 5.73014 -7 6.38728 -8 6.65278 -9 6.11566 -10 8.59831 -11 4.59846 -12 3.75402 -13 4.81655 -14 5.303 -15 4.23688 -16 4.44352 -17 9.61146 -18 4.02007 -19 6.55381 -20 4.32183 -21 3.77651 -22 4.28126 -23 4.67035 -24 4.25302 -25 3.24949 -26 3.81682 -27 3.6786 -28 5.26567 -29 5.75883 -30 4.40013 -31 4.8604 -32 3.88159 -33 3.62912 -34 6.09732 -35 6.23606 -36 6.81931 -37 3.98474 -38 5.09313 -39 7.92162 -40 5.91342 -41 5.89822 -42 7.79576 -43 3.26766 -44 6.40478 -45 3.30998 -46 5.75804 -47 4.44341 -48 5.56712 -49 7.92901 -50 7.32341 -51 4.11488 -52 7.27876 -53 4.46523 -54 4.41017 -55 4.24074 -56 5.18865 -57 3.67411 -58 3.93323 -59 6.27803 -60 5.7046 -61 5.43246 -62 6.62422 -63 6.87791 -64 4.8315 -65 4.41484 -66 3.44597 -67 4.80585 -68 4.76576 -69 5.09151 -70 3.90176 -71 3.98978 -72 7.05842 -73 5.79771 -74 5.72113 -75 5.39406 -76 8.36837 -77 6.57885 -78 3.81664 -79 5.04602 -80 5.13045 -81 4.17786 -82 4.12193 -83 5.498 -84 3.9477 -85 4.17729 -86 4.53085 -87 4.87674 -88 5.63865 -89 4.91132 -90 5.42233 -91 7.2101 -92 6.62552 -93 5.99626 -94 5.99827 -95 4.64279 -96 4.40763 -97 7.74874 -98 4.60244 -99 4.55322 -100 3.87632 -101 4.43066 -102 3.5908 -103 4.4961 -104 4.6942 -105 6.85876 -106 6.09827 -107 5.34771 -108 3.88554 -109 4.99917 -110 5.07909 -111 5.16529 -112 6.2445 -113 4.05386 -114 4.0937 -115 4.62717 -116 4.31849 -117 3.26285 -118 3.35407 -119 3.68025 -120 5.5668 -121 4.22251 -122 4.99967 -123 4.02172 -124 7.95474 -125 6.88951 -126 5.11647 -127 3.62751 -128 3.75947 -129 5.71937 -130 4.65378 -131 4.22097 -132 3.54665 -133 4.0164 -134 4.14403 -135 5.88228 -136 3.88365 -137 4.9027 -138 3.88649 -139 3.94684 -140 5.61741 -141 4.86852 -142 4.25794 -143 7.6941 -144 4.73617 -145 3.12373 -146 4.88928 -147 3.62576 -148 4.16485 -149 3.9426 -150 3.46852 -151 6.77747 -152 5.33702 -153 6.56503 -154 5.80932 -155 6.15413 -156 6.85355 -157 4.14906 -158 6.14933 -159 6.69641 -160 3.64734 -161 9.61926 -162 4.84044 -163 6.90865 -164 3.44809 -165 7.79131 -166 4.2801 -167 3.52051 -168 5.45391 -169 3.39718 -170 4.71838 -171 3.97902 -172 6.18658 -173 4.17284 -174 3.92603 -175 6.61929 -176 4.47741 -177 5.4168 -178 4.66072 -179 6.78272 -180 8.92575 -181 3.81346 -182 3.82779 -183 3.59616 -184 4.4729 -185 4.12509 -186 9.13405 -187 4.3469 -188 4.17304 -189 3.37722 -190 4.22285 -191 3.89981 -192 3.56114 -193 5.07249 -194 5.73119 -195 3.31977 -196 7.91262 -197 4.91172 -198 4.3087 -199 4.15402 -200 7.6821 -201 4.41955 -202 4.64581 -203 4.16326 -204 7.51723 -205 6.23256 -206 4.63327 -207 4.85318 -208 6.48807 -209 3.61821 -210 5.09043 -211 8.53276 -212 6.52094 -213 3.90421 -214 4.42601 -215 3.83625 -216 5.54714 -217 3.51603 -218 3.84227 -219 5.7805 -220 5.82631 -221 4.20829 -222 5.28021 -223 4.00498 -224 6.02503 -225 5.06898 -226 5.05237 -227 4.69681 -228 4.59421 -229 4.21961 -230 4.26009 -231 5.25661 -232 6.12045 -233 4.26478 -234 3.42011 -235 3.96254 -236 5.39782 -237 5.34452 -238 5.57074 -239 3.58786 -240 5.48832 -241 5.04805 -242 6.99507 -243 4.86669 -244 8.67723 -245 4.42583 -246 6.08779 -247 8.30081 -248 4.11458 -249 7.33372 -250 4.37632 -251 6.55974 -252 4.06411 -253 7.65217 -254 4.98446 -255 7.00166 -256 9.18261 -257 3.97417 -258 3.76504 -259 4.45173 -260 3.78705 -261 8.85178 -262 5.99438 -263 3.68369 -264 4.64732 -265 5.79147 -266 6.364 -267 5.03453 -268 4.96944 -269 4.75356 -270 3.20622 -271 4.24018 -272 4.41709 -273 4.21315 -274 4.38612 -275 6.51163 -276 5.01322 -277 5.46653 -278 3.97587 -279 6.44458 -280 4.97667 -281 5.55967 -282 5.85158 -283 5.0027 -284 3.48534 -285 6.58618 -286 4.80285 -287 5.94949 -288 4.82903 -289 7.5367 -290 5.70127 -291 7.09932 -292 5.78603 -293 5.97275 -294 3.8847 -295 7.18803 -296 4.24715 -297 6.96264 -298 7.0952 -299 4.63648 -300 6.55609 -301 5.16808 -302 5.24241 -303 3.54707 -304 4.3924 -305 4.0213 -306 4.62658 -307 4.81065 -308 4.56642 -309 6.50736 -310 4.75308 -311 3.8215 -312 3.41325 -313 4.08294 -314 4.91393 -315 5.30757 -316 7.02954 -317 5.24187 -318 4.13738 -319 6.58547 -320 3.70239 -321 3.67817 -322 4.58162 -323 5.24492 -324 4.86733 -325 4.91221 -326 4.2757 -327 5.39939 -328 4.61598 -329 8.42673 -330 6.14168 -331 4.57608 -332 3.81451 -333 4.29124 -334 4.12792 -335 5.02872 -336 5.23399 -337 3.38677 -338 4.50817 -339 5.28311 -340 5.64442 -341 4.71327 -342 6.09192 -343 4.17098 -344 7.35127 -345 5.55052 -346 8.62264 -347 7.92427 -348 4.62414 -349 5.61806 -350 5.34776 -351 6.86714 -352 4.07043 -353 3.76518 -354 3.52133 -355 4.0364 -356 4.23061 -357 5.51497 -358 5.34338 -359 5.2446 -360 3.66377 -361 3.61536 -362 4.93218 -363 5.91732 -364 3.99037 -365 6.86673 -366 4.57754 -367 4.54417 -368 3.49705 -369 3.68222 -370 4.05441 -371 3.28484 -372 3.86728 -373 6.47469 -374 3.8287 -375 4.21948 -376 6.50072 -377 5.2599 -378 5.46621 -379 3.90163 -380 8.20664 -381 5.20216 -382 5.3226 -383 4.03878 -384 8.93219 -385 6.79859 -386 5.0444 -387 4.38992 -388 6.97679 -389 3.69486 -390 3.64051 -391 3.67985 -392 6.23422 -393 3.30838 -394 7.50667 -395 3.94216 -396 6.5134 -397 8.60865 -398 4.39139 -399 3.46463 -400 3.90001 -401 4.26802 -402 3.71403 -403 3.59913 -404 3.15595 -405 4.92885 -406 9.80662 -407 3.63884 -408 3.80748 -409 5.15094 -410 6.35325 -411 4.20196 -412 5.86833 -413 5.91247 -414 3.313 -415 3.37645 -416 4.89339 -417 5.19552 -418 6.53485 -419 7.98558 -420 3.6091 -421 4.05488 -422 4.29978 -423 4.68265 -424 8.03386 -425 5.59842 -426 4.70185 -427 3.61697 -428 5.69205 -429 7.16982 -430 4.13106 -431 3.56492 -432 4.22082 -433 4.55629 -434 4.58142 -435 5.53457 -436 6.93426 -437 4.80377 -438 3.84526 -439 3.94317 -440 3.45505 -441 5.16289 -442 3.25289 -443 3.95152 -444 5.40892 -445 6.95209 -446 4.15315 -447 5.02186 -448 4.01812 -449 3.96462 -450 7.14857 -451 4.97123 -452 4.79327 -453 4.80934 -454 7.58936 -455 4.07601 -456 4.83387 -457 4.20561 -458 4.19693 -459 4.28828 -460 6.64926 -461 6.10328 -462 5.14523 -463 3.29956 -464 7.82612 -465 6.51338 -466 5.14228 -467 6.36966 -468 4.00039 -469 5.25401 -470 4.90217 -471 3.91685 -472 4.04775 -473 3.71452 -474 4.00893 -475 6.15397 -476 4.73995 -477 4.49103 -478 6.01817 -479 4.51129 -480 4.45673 -481 4.53029 -482 4.39765 -483 4.84946 -484 4.41482 -485 5.22789 -486 4.83751 -487 4.52841 -488 4.37907 -489 4.53931 -490 3.94812 -491 5.60107 -492 7.82411 -493 6.10887 -494 3.61105 -495 6.22222 -496 5.87689 -497 4.37764 -498 5.74756 -499 5.41576 -500 3.94004 -501 5.49027 -502 4.62278 -503 5.90077 -504 3.72543 -505 8.58284 -506 9.99379 -507 3.93429 -508 7.00354 -509 3.34162 -510 6.26251 -511 4.5708 -512 4.61934 -513 6.10199 -514 7.60203 -515 3.49142 -516 6.17078 -517 5.25425 -518 6.30042 -519 5.72046 -520 4.47283 -521 4.83221 -522 4.41013 -523 5.97733 -524 3.99931 -525 4.76894 -526 3.74452 -527 6.2368 -528 4.09343 -529 6.26363 -530 6.83661 -531 3.96425 -532 3.43579 -533 5.77657 -534 5.34581 -535 4.68041 -536 4.37814 -537 5.99737 -538 5.3648 -539 5.4205 -540 4.22935 -541 5.82056 -542 3.98684 -543 3.28936 -544 4.1958 -545 4.33791 -546 4.85201 -547 5.22988 -548 6.51603 -549 4.38544 -550 4.03691 -551 4.28065 -552 7.54771 -553 5.3477 -554 3.98013 -555 3.65612 -556 3.6305 -557 4.96827 -558 7.0639 -559 5.12306 -560 5.26116 -561 3.98468 -562 4.06433 -563 4.43174 -564 9.65465 -565 4.48661 -566 7.06711 -567 6.01908 -568 5.78751 -569 6.07332 -570 8.58829 -571 7.11434 -572 3.46196 -573 5.46102 -574 6.3086 -575 5.34819 -576 6.91082 -577 4.47437 -578 7.81942 -579 6.82906 -580 4.72318 -581 4.06215 -582 9.60519 -583 5.3436 -584 4.7691 -585 4.475 -586 5.84693 -587 5.8161 -588 4.01326 -589 8.52049 -590 6.06203 -591 3.94 -592 6.42148 -593 6.28834 -594 4.88767 -595 7.62703 -596 7.56987 -597 5.54109 -598 4.11926 -599 6.37613 -600 4.92981 -601 4.80206 -602 3.26213 -603 6.37042 -604 5.17572 -605 3.76555 -606 5.26092 -607 4.19725 -608 3.19057 -609 5.88572 -610 5.22575 -611 3.782 -612 4.38116 -613 8.53952 -614 4.30787 -615 4.10562 -616 7.62857 -617 5.65392 -618 5.96086 -619 4.91053 -620 6.14863 -621 5.91276 -622 4.27409 -623 5.55369 -624 4.8645 -625 4.77293 -626 3.55957 -627 4.11882 -628 3.68402 -629 6.55336 -630 5.93665 -631 6.29134 -632 5.06148 -633 6.32722 -634 3.56814 -635 4.97852 -636 5.319 -637 7.67988 -638 4.9724 -639 3.58948 -640 3.2273 -641 4.94275 -642 6.132 -643 4.23477 -644 3.8824 -645 6.47761 -646 5.83872 -647 6.52367 -648 9.09261 -649 4.02275 -650 4.5423 -651 3.77518 -652 9.34733 -653 4.29857 -654 3.53165 -655 3.69875 -656 8.91855 -657 8.27777 -658 4.2927 -659 5.44146 -660 4.88306 -661 4.61662 -662 4.66585 -663 4.08773 -664 5.47614 -665 4.82537 -666 5.34588 -667 5.09433 -668 4.74203 -669 4.80349 -670 5.17033 -671 5.55982 -672 5.85245 -673 8.50255 -674 5.05679 -675 8.2833 -676 4.20019 -677 6.65706 -678 5.50201 -679 3.83497 -680 8.04853 -681 3.98407 -682 4.14575 -683 4.40359 -684 3.83137 -685 7.5115 -686 4.55691 -687 5.02113 -688 4.10109 -689 3.2165 -690 6.76792 -691 7.39527 -692 5.09019 -693 4.66208 -694 4.89628 -695 3.82454 -696 7.89338 -697 4.34543 -698 4.53367 -699 4.2245 -700 7.97378 -701 5.36364 -702 5.48083 -703 5.18437 -704 7.54515 -705 8.01303 -706 6.9711 -707 5.10957 -708 4.65648 -709 4.17603 -710 3.95182 -711 4.30453 -712 4.83791 -713 5.75603 -714 6.26297 -715 4.26312 -716 4.92191 -717 6.49723 -718 5.39117 -719 7.63936 -720 3.8902 -721 5.26165 -722 3.56636 -723 5.80111 -724 8.11139 -725 6.99287 -726 6.0905 -727 4.48145 -728 6.29626 -729 6.41609 -730 4.82834 -731 4.30295 -732 5.95249 -733 9.1162 -734 7.17952 -735 4.41636 -736 7.00516 -737 5.38428 -738 4.57018 -739 5.16323 -740 6.21328 -741 3.84546 -742 8.92755 -743 4.95277 -744 5.60229 -745 4.74588 -746 4.39131 -747 3.53583 -748 4.71464 -749 3.85774 -750 4.32924 -751 4.21807 -752 5.56949 -753 3.92575 -754 4.08047 -755 4.19341 -756 5.43269 -757 5.08675 -758 7.55608 -759 4.60229 -760 5.26588 -761 6.53396 -762 6.09301 -763 8.49182 -764 3.65278 -765 3.7977 -766 4.72003 -767 5.07267 -768 5.39706 -769 5.74691 -770 7.17011 -771 4.60288 -772 6.53685 -773 5.03197 -774 4.75913 -775 5.21044 -776 8.20214 -777 5.1994 -778 5.72262 -779 5.56165 -780 5.11548 -781 4.91619 -782 4.4872 -783 5.68936 -784 4.47124 -785 5.13239 -786 3.56721 -787 6.21762 -788 7.03673 -789 4.75488 -790 6.58105 -791 6.02163 -792 4.0573 -793 5.61253 -794 4.57518 -795 6.37637 -796 4.44356 -797 4.71151 -798 7.569 -799 4.14096 -800 5.59666 -801 4.97895 -802 3.58641 -803 3.31542 -804 5.39692 -805 4.83649 -806 3.97031 -807 5.44832 -808 4.02433 -809 3.60805 -810 5.34786 -811 3.58587 -812 6.69862 -813 3.32895 -814 4.09119 -815 4.58371 -816 3.80674 -817 6.44114 -818 6.223 -819 4.0441 -820 4.80123 -821 4.30222 -822 6.44328 -823 5.35506 -824 6.92359 -825 3.89947 -826 6.49231 -827 4.93294 -828 4.30558 -829 6.36489 -830 6.66548 -831 4.33778 -832 4.17984 -833 5.47755 -834 6.30491 -835 4.8866 -836 3.97457 -837 5.46085 -838 9.49042 -839 5.90533 -840 4.86468 -841 6.77968 -842 4.50722 -843 6.47377 -844 6.71684 -845 7.28311 -846 4.96895 -847 4.62845 -848 4.76509 -849 4.94072 -850 6.06047 -851 5.03461 -852 4.02971 -853 6.54434 -854 6.22769 -855 4.93337 -856 3.68803 -857 3.53863 -858 3.91408 -859 5.65137 -860 7.37176 -861 4.59552 -862 6.93334 -863 3.44661 -864 6.33348 -865 5.02479 -866 5.35196 -867 4.49256 -868 4.90908 -869 5.13244 -870 6.53011 -871 6.74559 -872 6.30754 -873 4.22522 -874 5.22566 -875 4.48669 -876 6.19697 -877 5.32891 -878 5.90513 -879 5.26841 -880 4.69307 -881 6.53259 -882 5.37303 -883 4.84613 -884 6.84862 -885 8.57067 -886 4.51242 -887 4.09543 -888 3.96732 -889 3.54212 -890 7.13459 -891 3.96056 -892 3.53356 -893 7.88643 -894 3.71017 -895 4.50089 -896 6.13237 -897 9.12911 -898 5.99732 -899 4.20221 -900 5.07845 -901 7.39265 -902 3.4358 -903 6.92631 -904 6.19262 -905 8.37263 -906 3.90019 -907 5.27365 -908 8.43827 -909 4.30468 -910 7.89174 -911 4.55601 -912 5.99339 -913 3.9157 -914 6.4819 -915 5.12264 -916 4.56214 -917 4.68284 -918 3.62525 -919 5.50492 -920 3.3911 -921 5.44747 -922 5.1212 -923 3.91631 -924 4.09731 -925 3.90953 -926 3.24567 -927 3.84614 -928 3.16043 -929 5.57228 -930 5.27177 -931 4.70165 -932 6.21956 -933 6.82471 -934 4.75076 -935 5.36529 -936 7.32308 -937 5.56332 -938 4.4607 -939 4.55218 -940 4.41271 -941 4.16343 -942 3.60628 -943 5.64808 -944 5.0414 -945 4.07399 -946 8.06578 -947 5.13059 -948 3.32765 -949 6.87378 -950 6.8715 -951 5.34151 -952 7.4087 -953 4.97386 -954 4.34552 -955 4.26796 -956 4.19602 -957 3.42375 -958 5.85754 -959 5.66926 -960 8.16791 -961 5.85989 -962 5.27303 -963 4.04843 -964 3.73455 -965 6.69521 -966 3.19527 -967 5.41381 -968 4.9373 -969 3.34371 -970 5.277 -971 5.14515 -972 4.27359 -973 3.45159 -974 4.18209 -975 3.97173 -976 6.6748 -977 5.48345 -978 5.03449 -979 6.2847 -980 4.28563 -981 4.42304 -982 8.30151 -983 8.10918 -984 5.2181 -985 6.07928 -986 7.4987 -987 3.86094 -988 7.79415 -989 4.1437 -990 4.22013 -991 4.84238 -992 4.18954 -993 4.63546 -994 5.03533 -995 5.68754 -996 3.66053 -997 4.99215 -998 3.9023 -999 6.64228 -1000 3.66927 -1001 7.59005 -1002 7.84943 -1003 6.12621 -1004 4.28124 -1005 5.25678 -1006 4.49358 -1007 3.83982 -1008 4.1934 -1009 4.15133 -1010 5.9278 -1011 6.99563 -1012 5.9841 -1013 8.90109 -1014 7.652 -1015 7.06981 -1016 4.2989 -1017 4.43713 -1018 3.94864 -1019 5.25543 -1020 5.67571 -1021 4.55211 -1022 5.55705 -1023 4.35115 -1024 3.53053 -1025 4.95254 -1026 5.0626 -1027 5.91199 -1028 3.64351 -1029 4.37971 -1030 6.08977 -1031 8.17508 -1032 9.08688 -1033 6.27308 -1034 5.95361 -1035 5.76509 -1036 4.96722 -1037 5.54433 -1038 4.46812 -1039 5.33303 -1040 6.1708 -1041 6.72636 -1042 5.29678 -1043 4.55251 -1044 8.94976 -1045 3.51383 -1046 9.65923 -1047 5.82992 -1048 4.65022 -1049 4.9202 -1050 5.80657 -1051 3.98189 -1052 5.41173 -1053 4.62405 -1054 3.74779 -1055 3.72462 -1056 4.19243 -1057 8.98073 -1058 5.19122 -1059 4.03261 -1060 3.37577 -1061 5.38447 -1062 7.73223 -1063 8.13835 -1064 4.25916 -1065 4.74505 -1066 7.41008 -1067 7.34217 -1068 4.67887 -1069 7.30568 -1070 4.68001 -1071 4.1343 -1072 4.30236 -1073 4.91304 -1074 3.81816 -1075 4.33604 -1076 7.30661 -1077 3.71466 -1078 5.48295 -1079 5.02695 -1080 5.64749 -1081 4.97985 -1082 5.0635 -1083 4.18982 -1084 6.63653 -1085 6.50817 -1086 4.06997 -1087 4.6217 -1088 3.9456 -1089 5.86381 -1090 4.34958 -1091 4.72955 -1092 7.68562 -1093 4.76352 -1094 4.38867 -1095 7.24025 -1096 8.56583 -1097 7.12327 -1098 7.63126 -1099 4.98995 -1100 5.51299 -1101 6.22274 -1102 8.55485 -1103 4.67541 -1104 5.56093 -1105 4.11592 -1106 5.39012 -1107 4.91738 -1108 4.55802 -1109 9.81191 -1110 9.03824 -1111 4.91096 -1112 5.68686 -1113 5.43295 -1114 4.5376 -1115 7.76145 -1116 6.56722 -1117 5.56414 -1118 6.48512 -1119 7.08636 -1120 4.86379 -1121 5.06374 -1122 4.43781 -1123 6.37562 -1124 8.00607 -1125 5.72785 -1126 7.44421 -1127 8.55665 -1128 5.86133 -1129 9.30702 -1130 5.39706 -1131 9.72751 -1132 3.48947 -1133 4.01753 -1134 6.24749 -1135 5.18517 -1136 3.7291 -1137 5.12041 -1138 5.72019 -1139 8.40329 -1140 4.29092 -1141 6.32703 -1142 4.81643 -1143 6.2805 -1144 8.28778 -1145 6.11067 -1146 4.67958 -1147 6.84822 -1148 6.91117 -1149 8.73063 -1150 5.19026 -1151 8.76106 -1152 7.46817 -1153 4.01789 -1154 4.79286 -1155 4.32607 -1156 8.23324 -1157 4.8066 -1158 6.2838 -1159 6.4227 -1160 9.33195 -1161 4.68307 -1162 6.92146 -1163 6.30771 -1164 7.57291 -1165 7.22122 -1166 6.39772 -1167 5.60827 -1168 3.81708 -1169 3.25156 -1170 8.08526 -1171 7.77888 -1172 4.56788 -1173 8.09687 -1174 3.49101 -1175 4.88315 -1176 9.9666 -1177 5.09136 -1178 4.89489 -1179 8.84418 -1180 4.97986 -1181 5.33513 -1182 5.84621 -1183 3.85303 -1184 4.81127 -1185 7.16765 -1186 5.06141 -1187 7.20188 -1188 4.7328 -1189 5.06946 -1190 3.66104 -1191 4.29874 -1192 3.89884 -1193 6.80851 -1194 5.53224 -1195 7.4339 -1196 5.48488 -1197 8.32916 -1198 5.44496 -1199 5.953 -1200 7.10064 -1201 4.28803 -1202 5.27418 -1203 3.79067 -1204 3.44724 -1205 4.17183 -1206 7.19842 -1207 4.32375 -1208 3.51299 -1209 7.615 -1210 5.69386 -1211 6.73423 -1212 4.51568 -1213 6.08616 -1214 5.21758 -1215 8.14411 -1216 4.06477 -1217 5.22976 -1218 5.07475 -1219 5.92439 -1220 4.9689 -1221 5.09276 -1222 7.43835 -1223 6.71407 -1224 7.02283 -1225 6.5295 -1226 4.40292 -1227 5.83422 -1228 3.70634 -1229 3.52758 -1230 6.0864 -1231 4.79487 -1232 5.2648 -1233 6.60461 -1234 4.95882 -1235 9.41937 -1236 5.13095 -1237 5.28013 -1238 5.44854 -1239 7.71878 -1240 5.56885 -1241 8.76006 -1242 4.56393 -1243 5.90289 -1244 6.17245 -1245 5.47762 -1246 6.85481 -1247 3.17205 -1248 4.86204 -1249 4.43452 -1250 6.97671 -1251 5.3337 -1252 5.43708 -1253 5.01141 -1254 7.23168 -1255 3.70348 -1256 4.66871 -1257 8.66635 -1258 7.63642 -1259 6.58896 -1260 5.63525 -1261 5.18847 -1262 4.60493 -1263 8.295 -1264 7.64526 -1265 3.59029 -1266 8.30829 -1267 5.61988 -1268 4.40627 -1269 8.59727 -1270 7.237 -1271 5.90024 -1272 4.03286 -1273 4.8429 -1274 7.10562 -1275 6.50655 -1276 4.64487 -1277 4.69878 -1278 7.97432 -1279 4.02501 -1280 5.38605 -1281 4.92341 -1282 5.07646 -1283 3.75685 -1284 5.31243 -1285 5.7707 -1286 5.68964 -1287 5.96062 -1288 7.85077 -1289 8.21576 -1290 6.68323 -1291 4.30884 -1292 4.784 -1293 5.21908 -1294 4.82005 -1295 4.40245 -1296 4.02024 -1297 3.62885 -1298 3.78701 -1299 3.55008 -1300 4.66264 -1301 5.58137 -1302 4.33701 -1303 4.93396 -1304 3.52374 -1305 7.13144 -1306 5.36387 -1307 8.97625 -1308 5.18498 -1309 9.05048 -1310 8.19838 -1311 4.42885 -1312 8.34232 -1313 3.94079 -1314 4.41342 -1315 7.69708 -1316 4.03687 -1317 4.88914 -1318 4.97387 -1319 5.60074 -1320 3.64249 -1321 3.99359 -1322 5.05358 -1323 7.22987 -1324 9.02307 -1325 3.92924 -1326 5.90228 -1327 6.68582 -1328 9.38571 -1329 4.23719 -1330 3.91918 -1331 6.00412 -1332 8.07751 -1333 4.80956 -1334 5.50254 -1335 9.28165 -1336 4.67539 -1337 4.8626 -1338 6.60907 -1339 6.82969 -1340 5.02785 -1341 4.99683 -1342 7.89183 -1343 9.24249 -1344 5.19206 -1345 4.25973 -1346 5.32035 -1347 4.13126 -1348 5.9532 -1349 6.48769 -1350 3.89076 -1351 5.66956 -1352 7.52047 -1353 5.81182 -1354 7.64656 -1355 5.39628 -1356 5.38481 -1357 4.57187 -1358 7.85941 -1359 3.19563 -1360 4.16723 -1361 7.58062 -1362 5.43379 -1363 4.5491 -1364 9.55822 -1365 5.41463 -1366 3.93709 -1367 5.58151 -1368 7.63004 -1369 7.19653 -1370 6.21067 -1371 4.16437 -1372 7.03794 -1373 6.03681 -1374 7.32543 -1375 8.75148 -1376 9.85852 -1377 5.51133 -1378 8.69481 -1379 5.56414 -1380 6.99819 -1381 3.55529 -1382 5.3928 -1383 4.84586 -1384 7.9864 -1385 6.53059 -1386 4.99042 -1387 4.16435 -1388 6.80177 -1389 5.45811 -1390 5.63078 -1391 3.96717 -1392 3.86136 -1393 3.20475 -1394 8.36851 -1395 5.32051 -1396 4.09927 -1397 4.30378 -1398 6.53894 -1399 9.57378 -1400 6.55006 -1401 6.34936 -1402 4.66909 -1403 4.92672 -1404 6.29711 -1405 6.13071 -1406 7.07983 -1407 3.38745 -1408 6.19644 -1409 3.70599 -1410 8.72514 -1411 5.01474 -1412 6.35499 -1413 8.51238 -1414 6.1006 -1415 8.31744 -1416 8.69373 -1417 5.3837 -1418 3.29415 -1419 3.17415 -1420 4.65337 -1421 3.77393 -1422 3.8875 -1423 7.11242 -1424 4.79596 -1425 4.074 -1426 4.91429 -1427 5.40041 -1428 4.50152 -1429 6.82147 -1430 7.03258 -1431 9.84567 -1432 5.28303 -1433 3.28496 -1434 5.3585 -1435 5.80604 -1436 6.24381 -1437 3.80452 -1438 8.7948 -1439 6.69635 -1440 5.38362 -1441 8.19043 -1442 6.65785 -1443 5.14952 -1444 8.66002 -1445 6.98012 -1446 5.82976 -1447 4.7057 -1448 4.19243 -1449 4.46766 -1450 4.94058 -1451 8.7967 -1452 5.51495 -1453 4.0043 -1454 5.16481 -1455 6.42095 -1456 6.01744 -1457 3.71544 -1458 5.73042 -1459 8.12425 -1460 3.95837 -1461 7.51813 -1462 9.24805 -1463 7.61923 -1464 4.43411 -1465 3.83737 -1466 3.95716 -1467 7.15998 -1468 5.65757 -1469 3.42947 -1470 7.66079 -1471 5.68317 -1472 4.17696 -1473 3.43991 -1474 4.08425 -1475 6.28225 -1476 5.03584 -1477 5.6927 -1478 4.82533 -1479 7.60644 -1480 3.80633 -1481 7.85466 -1482 4.0313 -1483 5.53088 -1484 4.79008 -1485 6.91984 -1486 7.05097 -1487 5.06758 -1488 5.28323 -1489 3.97634 -1490 7.07548 -1491 6.99741 -1492 5.39725 -1493 3.70965 -1494 5.20786 -1495 3.35697 -1496 8.30445 -1497 6.24412 -1498 5.02406 -1499 4.3192 -1500 3.75267 -1501 3.75419 -1502 6.70461 -1503 7.29339 -1504 7.25608 -1505 4.67025 -1506 7.00533 -1507 4.95845 -1508 5.9428 -1509 8.22798 -1510 6.09413 -1511 6.69181 -1512 4.68312 -1513 8.54909 -1514 9.17576 -1515 4.67904 -1516 5.70206 -1517 3.82361 -1518 4.83649 -1519 4.49647 -1520 6.62776 -1521 3.87563 -1522 3.82749 -1523 7.136 -1524 5.46372 -1525 7.49927 -1526 4.77056 -1527 6.99557 -1528 5.41681 -1529 5.67049 -1530 9.09783 -1531 6.2033 -1532 5.7676 -1533 6.10859 -1534 5.64874 -1535 4.25459 -1536 4.24224 -1537 7.54998 -1538 4.6898 -1539 3.65217 -1540 6.77849 -1541 7.38216 -1542 5.01269 -1543 9.63731 -1544 5.93312 -1545 6.67582 -1546 4.31103 -1547 7.11233 -1548 9.36116 -1549 5.26081 -1550 5.69302 -1551 3.48767 -1552 6.63839 -1553 6.58539 -1554 7.28664 -1555 3.81367 -1556 4.57632 -1557 5.76642 -1558 5.47675 -1559 4.10006 -1560 7.47012 -1561 4.71169 -1562 7.33109 -1563 3.61097 -1564 7.2049 -1565 5.17177 -1566 5.69784 -1567 5.66136 -1568 5.26364 -1569 5.80611 -1570 6.17947 -1571 7.04854 -1572 8.77365 -1573 4.85623 -1574 3.77604 -1575 4.3199 -1576 5.59875 -1577 7.20581 -1578 8.22279 -1579 6.75557 -1580 6.15071 -1581 8.40391 -1582 5.84813 -1583 6.71808 -1584 9.4805 -1585 5.78575 -1586 5.53995 -1587 6.22247 -1588 6.41044 -1589 4.20686 -1590 5.13741 -1591 9.43675 -1592 4.7142 -1593 3.98455 -1594 7.70331 -1595 5.7983 -1596 5.38736 -1597 6.27297 -1598 5.693 -1599 7.78512 -1600 9.5604 -1601 3.88507 -1602 5.01882 -1603 7.63484 -1604 5.06804 -1605 4.18197 -1606 4.43359 -1607 4.34535 -1608 4.02395 -1609 7.2371 -1610 8.47037 -1611 4.49746 -1612 8.23039 -1613 4.43065 -1614 4.82179 -1615 7.15842 -1616 4.60424 -1617 4.60142 -1618 4.98153 -1619 4.82699 -1620 6.48302 -1621 5.81494 -1622 9.77863 -1623 9.18164 -1624 8.97711 -1625 6.39388 -1626 4.3432 -1627 8.33951 -1628 5.09327 -1629 5.99447 -1630 4.3455 -1631 6.29698 -1632 3.33295 -1633 6.59657 -1634 6.95084 -1635 3.19532 -1636 5.517 -1637 5.79544 -1638 5.11606 -1639 5.09728 -1640 6.96594 -1641 4.43697 -1642 8.62959 -1643 6.33994 -1644 4.6679 -1645 6.9788 -1646 4.62802 -1647 9.58879 -1648 4.3363 -1649 5.16264 -1650 7.16104 -1651 5.92186 -1652 7.45343 -1653 3.24729 -1654 9.37208 -$EndElementData diff --git a/test/user/testdata/shark_22_ascii_missing_node.msh b/test/user/testdata/shark_22_ascii_missing_node.msh deleted file mode 100644 index e13b4a10..00000000 --- a/test/user/testdata/shark_22_ascii_missing_node.msh +++ /dev/null @@ -1,3978 +0,0 @@ -$MeshFormat -2.2 0 8 -$EndMeshFormat -$Nodes -652 -2 -0.0729126 0.0537921 0.00170478 -3 -0.072634 0.0799069 0.0578949 -4 -0.0715817 0.0520377 0.00292576 -5 -0.0701949 0.0802569 0.0450431 -6 -0.0687698 0.060971 0.00326551 -7 -0.06778 0.060358 0.00473741 -8 -0.0672796 0.0809249 0.0425553 -9 -0.0658074 0.0806443 0.0552302 -10 -0.064933 0.0788176 0.0453762 -11 -0.0636555 0.0610198 0.00141989 -12 -0.0636111 0.0566004 -0.000556663 -13 -0.0636791 0.0819076 0.0524468 -14 -0.0623445 0.0580268 0.00335683 -15 -0.0624856 0.0671058 0.00581638 -16 -0.0601398 0.0781111 0.0317589 -17 -0.0599443 0.0685632 0.00992449 -18 -0.0592787 0.0571239 0.00105116 -19 -0.0587906 0.0719999 0.0117948 -20 -0.0575605 0.0730663 0.016213 -21 -0.057624 0.0811803 0.0403639 -22 -0.0572339 0.0769387 0.0223219 -23 -0.0559974 0.0749629 0.0235691 -24 -0.0542321 0.0763209 0.0344665 -25 -0.0540672 0.0649483 0.00821813 -26 -0.0541685 0.0661135 0.00437935 -27 -0.0532966 0.0805356 0.0466758 -28 -0.0517252 0.0761185 0.0183218 -29 -0.0505257 0.068877 0.0152572 -30 -0.0503803 0.0772638 0.0406423 -31 -0.0472855 0.0641041 0.00381053 -32 -0.0469016 0.0648796 0.00821733 -33 -0.0474599 0.0727268 0.0265623 -34 -0.0464733 0.070912 0.0103373 -35 -0.0444756 0.0755674 0.0221683 -36 -0.0440208 0.0774313 0.0371107 -37 -0.0434135 0.0685101 0.0213943 -38 -0.0425401 0.0668787 0.0159114 -39 -0.0405353 0.0730163 0.0309862 -40 -0.0386417 0.073548 0.0160682 -41 -0.037401 0.0664899 0.0122191 -42 -0.0358693 0.0689445 0.0243885 -43 -0.0351058 0.0687771 0.0124837 -44 -0.0333614 0.071165 0.0238503 -45 -0.0325564 0.0696271 0.024504 -46 -0.032455 0.0625178 0.0200737 -47 -0.0305469 0.0729973 0.0173921 -48 -0.0276941 0.0652386 0.0128238 -49 -0.0272717 0.0628782 0.0141328 -50 -0.0263428 0.00735496 0.00505748 -51 -0.0256055 0.00658056 0.00327552 -52 -0.0252856 0.0610141 0.0227762 -53 -0.0250237 -0.00678856 0.00359213 -54 -0.0242889 -0.00589458 0.00589675 -55 -0.0216872 0.0639735 0.0255561 -56 -0.0215721 -0.0119744 0.00619585 -57 -0.0195136 0.0542304 0.0216195 -58 -0.0168343 0.0649534 0.0236547 -59 -0.0161373 -0.00420129 0.00881529 -60 -0.0148726 0.0585475 0.0106707 -61 -0.0140647 0.0517836 0.0159197 -62 -0.0142986 0.0543801 0.0051496 -63 -0.0139611 -0.0178642 0.00651265 -64 -0.0139803 0.0554055 0.0115694 -65 -0.0124373 0.0606817 0.0122622 -66 -0.0127423 0.0580719 0.0285553 -67 -0.0127412 -0.0704232 0.0234664 -68 -0.0126173 -0.0801905 0.022154 -69 -0.0125269 0.0592002 0.0346418 -70 -0.0122498 -0.080596 0.0191154 -71 -0.0121442 -0.0691943 0.0191352 -72 -0.0123618 0.0658492 0.0197519 -73 -0.0121018 -0.063334 0.0245151 -74 -0.0118539 0.0462485 0.0243954 -75 -0.0111067 0.0637388 0.0161162 -76 -0.0110042 -0.0624802 0.0276395 -77 -0.0109072 0.046219 0.0183571 -78 -0.0107037 -0.000325242 0.00950432 -79 -0.010183 -0.0121386 0.00674337 -80 -0.00977442 -0.0638147 0.0162637 -81 -0.0097669 -0.0699334 0.0156591 -82 -0.00942656 -0.0836042 0.0182705 -83 -0.009321 -0.0852334 0.0216727 -84 -0.00803502 0.0401179 0.0263407 -85 -0.00857808 -0.0579335 0.0163943 -86 -0.00793158 -0.0190616 0.0121625 -87 -0.00782675 0.0573514 0.028038 -88 -0.00773028 -0.0620746 0.0302044 -89 -0.00764665 0.0537773 0.00961295 -90 -0.00721562 -0.0507362 0.0224357 -91 -0.00717408 -0.0528249 0.0179333 -92 -0.00651588 -0.00739691 0.013024 -93 -0.00691116 -0.00014073 0.00823716 -94 -0.00661131 0.044183 0.0123 -95 -0.00658663 0.0535365 0.0326225 -96 -0.00630954 -0.0850657 0.0194796 -97 -0.00616497 -0.0797841 0.0261073 -98 -0.00582999 -0.0494502 0.0287705 -99 -0.00563359 0.0476479 0.00934546 -100 -0.00506609 -0.0425596 0.0250833 -101 -0.00453974 -0.0405694 0.0173853 -102 -0.00447266 0.0319291 0.0205877 -103 -0.00434886 0.0267225 0.00648417 -104 -0.00418386 0.0253438 0.00842196 -105 -0.0041733 -0.0606038 0.0122716 -106 -0.00385183 0.0479538 0.00869149 -107 -0.00333705 0.051389 0.031593 -108 -0.00333565 -0.0693881 0.0119551 -109 -0.00333748 -0.0650683 0.0110291 -110 -0.00292457 0.0475597 0.0319288 -111 -0.00280471 -0.0353375 0.0238411 -112 -0.00273019 -0.0493159 0.0135756 -113 -0.00255346 -0.0452657 0.0126112 -114 -0.00249178 -0.0598565 0.010934 -115 -0.00247351 -0.0533955 0.0149632 -116 -0.00280465 0.0288144 0.0300227 -117 -0.00225175 -0.030519 0.0236922 -118 -0.00205777 -0.0595101 0.00715068 -119 -0.0018581 -0.0627033 0.0116048 -120 -0.00150112 -0.0384203 0.0313885 -121 -0.00143547 -0.0337232 0.0176227 -122 -0.00136747 -0.062725 0.0150152 -123 -0.000884775 -0.0587825 0.0143119 -124 -0.000624659 -0.0247814 0.0257906 -125 -0.000489974 0.0225414 0.0188523 -126 -6.05566e-05 0.0171338 0.0234086 -127 0.00150381 0.0360475 0.00675461 -128 0.000282178 -0.0241462 0.0174969 -129 0.000347869 -0.0675237 0.0324883 -130 0.000429839 -0.0422219 0.0349169 -131 0.00028168 -0.0273698 0.0312235 -132 0.000952705 -0.0267391 0.0143612 -133 0.00105244 0.0186951 0.00689988 -134 0.0011109 -0.0779453 0.014663 -135 0.00137887 0.00842564 0.0258445 -136 0.00107238 -0.0462225 0.00980545 -137 0.00158113 -0.0561697 0.005809 -138 0.00165921 -0.0142314 0.0114909 -139 0.00169065 -0.00330978 0.027848 -140 0.0017282 0.0264299 0.00972258 -141 0.00196109 -0.062067 0.0125082 -142 0.00198494 -0.0249792 0.0122768 -143 0.00206797 -0.0322322 0.0125632 -144 0.00219287 -0.00991015 0.0199027 -145 0.00223228 -0.065619 0.00972103 -146 0.00226787 -0.06664 0.0139131 -147 0.00233081 0.00970751 0.0349608 -148 0.0023033 -0.0550711 0.0357611 -149 0.00284591 -0.0695874 0.0109337 -150 0.00313658 0.0123831 0.0152878 -151 0.00325266 -0.000639164 0.0164744 -152 0.00354678 -0.0651674 0.00553443 -153 0.00434877 0.0392681 0.00656793 -154 0.0034004 -0.0624097 0.0143354 -155 0.00410027 0.052311 0.0146156 -156 0.00425687 -0.0110681 0.0377954 -157 0.0043501 -0.0020508 0.015115 -158 0.00444422 -0.0785667 0.0168482 -159 0.00471578 -0.00872746 0.0133588 -160 0.00486541 0.0192794 0.0102326 -161 0.00475235 0.0259901 0.00777948 -162 0.00497525 -0.0797755 0.0244877 -163 0.0052286 0.0545416 0.0234287 -164 0.00513856 -0.0361953 0.00904286 -165 0.00543656 -0.016404 0.0117933 -166 0.00521097 0.0361763 0.0357574 -167 0.00563068 0.0458779 0.0101474 -168 0.00602624 -0.0598053 0.00448538 -169 0.00669265 -0.0730234 0.0300997 -170 0.00671975 -0.0647944 0.0149968 -171 0.00743572 0.0219428 0.00498754 -172 0.00806977 -0.0676622 0.0106835 -173 0.00858002 0.0185363 0.00804532 -174 0.00900922 -0.0527441 0.0382868 -175 0.00967438 -0.0310472 0.0412759 -176 0.00969027 -0.0470756 0.00574739 -177 0.00982547 -0.0777201 0.0238208 -178 0.010337 -0.0646559 0.00738197 -179 0.0103691 -0.0715108 0.0301524 -180 0.0108524 -0.0651923 0.0107074 -181 0.0112352 0.0223598 0.00496048 -182 0.0115762 0.0360388 0.034027 -183 0.011811 0.0150563 0.0411225 -184 0.0119389 -0.0710873 0.0142927 -185 0.011481 0.000850754 0.00890493 -186 0.0122581 0.0177891 0.00726338 -187 0.0126044 0.0285097 0.0071727 -188 0.0126077 -0.0410848 0.00487059 -189 0.01325 0.0245576 0.00385279 -190 0.0133342 -0.0301914 0.00695184 -191 0.0134526 -0.00467313 0.044297 -192 0.0140263 0.0415073 0.0128325 -193 0.0139319 -0.0627506 0.0126489 -194 0.0144402 0.0213321 0.0408733 -195 0.0145153 -0.0120242 0.00709154 -196 0.0145254 0.0314471 0.00762861 -197 0.0143606 -0.0539791 0.00638859 -198 0.0153705 -0.0588177 0.00913193 -199 0.0158483 0.0424843 0.0267153 -200 0.0161677 0.0082135 0.0752128 -201 0.0160709 -0.0693691 0.0267104 -202 0.0163112 0.021127 0.00658374 -203 0.0163956 0.0418119 0.0180916 -204 0.0166653 0.00513625 0.0449469 -205 0.0171438 -0.00939438 0.0462661 -206 0.0174416 -0.0497054 0.0373642 -207 0.0174198 -0.0656937 0.0159871 -208 0.0177387 0.0346114 0.0053358 -209 0.0178439 0.0247259 0.00729322 -210 0.018247 0.0346901 0.00258831 -211 0.0182074 -0.0318958 0.0424624 -212 0.0183988 -0.00142899 0.0496692 -213 0.0188182 -0.018825 0.0447569 -214 0.0188285 0.0147456 0.0461032 -215 0.0188626 0.015416 0.041072 -216 0.0190811 -0.00419709 0.0686858 -217 0.0195945 0.0084326 0.064095 -218 0.0197498 -0.00217441 0.0583864 -219 0.0198208 0.00539755 0.0587622 -220 0.0200137 0.0324539 0.00354185 -221 0.020151 -0.0145671 0.0500049 -222 0.0203386 -0.00326709 0.0702447 -223 0.0209148 0.00523036 0.0681576 -224 0.0208447 0.0121045 0.0546374 -225 0.0209724 0.00970633 0.0633876 -226 0.020604 -0.0121123 0.00591309 -227 0.0212498 -0.0289526 0.00565549 -228 0.0216078 -0.0380775 0.00479088 -229 0.0216875 -0.00997672 0.0619769 -230 0.0220658 0.00705093 0.0456869 -231 0.0223002 -0.0558455 0.0110476 -232 0.0223137 -0.0154618 0.0494217 -233 0.0229336 0.00417573 0.0589573 -234 0.0231427 0.0278288 0.0125965 -235 0.0231751 0.027241 0.0309726 -236 0.0233259 0.0160686 0.00756079 -237 0.0234095 0.0318943 0.0199392 -238 0.0234462 -0.00393483 0.0583985 -239 0.0235915 -0.0597066 0.0170609 -240 0.0240196 -0.0108777 0.0466362 -241 0.024123 -0.00330273 0.0464733 -242 0.0242099 -0.0321428 0.0398591 -243 0.0244244 0.00347947 0.0416421 -244 0.024564 -0.0175604 0.0433407 -245 0.0253979 -0.0453083 0.0344803 -246 0.0256103 0.0267734 0.0284514 -247 0.0259312 -0.0445208 0.00878379 -248 0.025959 -0.0133125 0.00624018 -249 0.0265967 -0.0369666 0.00635268 -250 0.0273245 -0.0066598 0.0412078 -251 0.0277597 -0.0467651 0.0304517 -252 0.0275944 -0.0515878 0.0207552 -253 0.0282687 0.0208205 0.0174814 -254 0.0290859 0.0112094 0.012597 -255 0.0293048 -0.0474855 0.0256026 -256 0.0296506 -0.0466043 0.0156453 -257 0.0304236 0.0134394 0.031696 -258 0.0304518 -0.0291908 0.00746031 -259 0.03126 -0.044124 0.016095 -260 0.0321715 -0.043346 0.0242104 -261 0.0322352 -0.0402733 0.0141242 -262 0.0323149 0.01052 0.0200521 -263 0.0324768 -0.0397188 0.0271188 -264 0.0325431 -0.0291932 0.0340382 -265 0.0332479 -0.0329826 0.0117351 -266 0.0338676 -0.0346121 0.0252676 -267 0.0341522 -0.00293196 0.033596 -268 0.0341882 -0.0361716 0.0179088 -269 0.0344969 -0.0256263 0.0309923 -270 0.0345138 -0.00958586 0.0123416 -271 0.0348872 -0.0128566 0.0339912 -272 0.0349524 -0.0273994 0.0177976 -273 0.0349556 -0.000677158 0.0209767 -274 0.0350004 -0.028049 0.00876142 -275 0.0353194 -0.0100316 0.0154749 -276 0.0354214 -0.0195455 0.0173172 -277 0.0355775 -0.0309821 0.0107592 -278 0.0360305 -0.0150581 0.0232372 -279 0.0363938 -0.0285041 0.0132933 -280 0.0374738 -0.00607371 0.0123945 -281 0.041317 -0.0210454 0.0131228 -282 0.0425886 -0.0120136 0.0129537 -283 0.0475164 -0.00753527 0.00853843 -284 0.0492593 -0.00704914 0.00938067 -285 0.0496752 -0.0170405 0.0106038 -286 0.0498676 -0.0259318 0.00619626 -287 0.052402 -0.022331 0.00866719 -288 0.0516897 -0.011391 0.0103437 -289 0.0559595 -0.0106346 0.00698866 -290 0.0596531 -0.0214295 0.0059579 -291 0.066312 -0.0158462 0.00759335 -292 0.0672852 -0.00331292 0.00667068 -293 0.0687074 -0.0027598 0.00829441 -294 0.0687083 -0.0084515 0.00881385 -295 0.0702857 -0.00694567 0.00665748 -296 0.02471 0.00101921 0.00688758 -297 0.00641783 -0.0341512 0.0233596 -298 0.024018 0.00854392 0.00722419 -299 0.0251696 0.00942127 0.00784613 -300 -0.019815 0.0686939 0.0189821 -301 0.0416697 -0.017118 0.00864259 -302 -0.00440288 -0.0698432 0.0205811 -303 -0.0033606 0.0600219 0.0217676 -304 0.0268544 0.00322876 0.0080825 -305 0.00855449 0.0107052 0.00928038 -306 0.0219179 0.00585482 0.0121236 -307 0.0199208 0.0175811 0.0336776 -308 0.0210521 -0.0362113 0.0256186 -309 0.0339797 -0.00194129 0.0163861 -310 0.03202 0.000337126 0.0126992 -311 0.0119633 0.0163586 0.0147908 -312 0.0248778 0.0056119 0.0321775 -313 0.00892971 -0.0563678 0.0287948 -314 0.0174837 0.027107 0.0210333 -315 -0.0170518 0.00346089 0.00554363 -316 0.0144974 -0.0120686 0.0314959 -317 0.00336155 -0.00103205 0.0364574 -318 0.00707711 -0.0204903 0.0185209 -319 0.010517 -0.00309481 0.0232445 -320 -0.00559352 0.0373259 0.0172753 -321 -0.00523735 -0.0230725 0.0111224 -322 0.0151072 -0.0538804 0.0213778 -323 0.0347571 -0.0188174 0.0105515 -324 0.0278657 -0.0183642 0.0156758 -325 -0.00338013 -0.0543805 0.0329679 -326 -0.0196332 0.0593213 0.0251138 -327 0.0648163 -0.0143432 0.00627944 -328 -0.00336175 -0.0187472 0.00979996 -329 -0.0059938 -0.0214388 0.00941436 -330 0.0204933 0.0262773 0.00994486 -331 0.0153554 0.00838654 0.0105168 -332 -0.064082 0.064994 0.00682263 -333 -0.0406296 0.0703091 0.0249838 -334 -0.0197677 0.0563929 0.0156108 -335 -0.0506931 0.0781816 0.0304629 -336 0.0171972 -0.00100568 0.011485 -337 0.0314619 -0.0225976 0.00774901 -338 -0.00980694 0.0515267 0.0104574 -339 -0.00435185 0.0493969 0.0137744 -340 0.0449063 -0.0117353 0.00859937 -341 0.00159087 -0.0450385 0.027858 -342 -0.00469537 -0.0637251 0.0233918 -343 0.0424219 -0.0285632 0.00857374 -344 0.0603894 -0.00835109 0.00935053 -345 -0.0147113 -0.0156046 0.00918376 -346 -0.0528157 0.0611754 0.00480955 -347 -0.0173765 -0.00887149 0.00520522 -348 0.0108104 0.02268 0.0130558 -349 -0.00899905 -0.0208443 0.00915416 -350 -0.0449914 0.0768094 0.0302276 -351 -0.0408502 0.06658 0.00836849 -352 -0.0199988 -0.0118916 0.004906 -353 0.00337131 0.0455887 0.0238561 -354 0.00477413 -0.0721541 0.0211645 -355 -0.00344193 -0.049333 0.032475 -356 0.0427245 -0.0268877 0.00738607 -357 0.0272704 -0.0238375 0.00669928 -358 -0.00610544 -0.0476638 0.0181008 -359 -0.00760153 0.0503529 0.00747858 -360 0.0131109 -0.0422224 0.0405109 -361 0.00214561 -0.0490294 0.0151357 -362 -0.0598224 0.0805424 0.0511855 -363 -0.0204542 0.0588165 0.013102 -364 0.059357 -0.0190886 0.00813027 -365 -0.00100716 0.0422264 0.0325724 -366 0.0325535 -0.0244764 0.012522 -367 -0.000431427 -0.0574818 0.0137747 -368 0.0114251 0.0275734 0.00440942 -369 0.00337666 -0.0559724 0.0148659 -370 -0.0262911 0.0586227 0.0207785 -371 -0.0699467 0.0813567 0.0499003 -372 0.0494602 -0.0133111 0.00757754 -373 0.00758285 0.0333008 0.0104911 -374 0.00657287 0.032122 0.00603963 -375 0.000332803 -0.0511328 0.0180756 -376 -0.021764 0.0620607 0.0118108 -377 -0.0454672 0.075167 0.035911 -378 0.00139884 0.045926 0.0128133 -379 0.0176314 0.0311493 0.00370344 -380 -0.0159418 -0.0158578 0.00793814 -381 -0.0229387 0.0691641 0.0166572 -382 -0.00133409 -0.0449329 0.0187829 -383 -0.0538019 0.0611146 0.00198764 -384 0.0305208 -0.00256491 0.0101919 -385 0.0623596 -0.00697151 0.00683979 -386 0.0236819 -0.00777996 0.0526871 -387 0.0118138 -0.0144241 0.0430193 -388 0.0137156 -0.00365078 0.00732253 -389 -0.0257884 0.0686739 0.0150694 -390 -0.0530331 0.060812 0.00248197 -391 -0.000421194 -0.0523335 0.00879177 -392 0.0193846 -0.00072024 0.0649221 -393 0.00485856 0.0133946 0.0114741 -394 -0.0053823 -0.0743714 0.0141262 -395 0.016958 0.0166471 0.00740593 -396 0.0429338 -0.0266961 0.0110582 -397 -0.0650475 0.05473 0.00191127 -398 0.00924818 0.0356698 0.00715588 -399 -0.042468 0.0652669 0.00790867 -400 0.00699205 0.0348997 0.00576165 -401 -0.012123 0.00171435 0.00688121 -402 0.017741 0.00126373 0.0717161 -403 -0.00477874 -0.0228765 0.0123522 -404 -0.05496 0.0793832 0.0329037 -405 -0.0253736 -0.000654191 0.00342534 -406 0.0220159 -0.0128389 0.0555838 -407 0.0187915 0.00366305 0.0653901 -408 -0.0635923 0.0794618 0.0351284 -409 0.0187293 0.00901455 0.0689246 -410 -0.0507436 0.0790633 0.0364811 -411 0.00440962 0.0291856 0.00589534 -412 -0.0610541 0.0815764 0.0467801 -413 -0.0264169 0.0641898 0.0180225 -414 0.0590681 -0.0129818 0.00969293 -415 0.0316732 -0.013669 0.00892731 -416 -0.0368828 0.0732351 0.028231 -417 0.0147007 -0.0293577 0.0425282 -418 -0.00226105 0.042112 0.00818422 -419 -0.022404 0.068624 0.0211714 -420 0.018834 0.0296379 0.0101126 -421 0.0545664 -0.023882 0.00596013 -422 -0.0610274 0.0626039 0.00623226 -423 0.0209345 -0.0123916 0.0558755 -424 -0.064258 0.0639612 0.00701622 -425 -0.0530259 0.0709966 0.0104874 -426 -0.000350232 0.0328643 0.00950357 -427 0.0179821 0.0260225 0.00525665 -428 -0.071629 0.0809096 0.0500374 -429 0.0431333 -0.00662611 0.0109755 -430 -0.0367738 0.072104 0.0272887 -431 -0.00147996 0.0424733 0.00778004 -432 -0.0489442 0.0792518 0.0424775 -433 0.0178184 0.00830923 0.0698262 -434 -0.00256208 -0.0518644 0.0119693 -435 -0.0024457 0.0347988 0.0115191 -436 -0.0226391 0.067054 0.0236986 -437 -0.0250562 0.070839 0.0181046 -438 0.0157661 -0.010775 0.0444953 -439 -0.0587069 0.0610686 0.00549325 -440 -0.0561989 0.0607157 0.00436391 -441 0.0028322 0.0311045 0.0076099 -442 -0.061857 0.079748 0.0514834 -443 -0.0580072 0.0744854 0.0170926 -444 0.017366 0.0281829 0.00449304 -445 0.0175246 0.0303053 0.00632184 -446 -0.0583716 0.0812348 0.0494755 -447 -0.0627638 0.0811059 0.0418948 -448 0.00958337 0.0391723 0.00889538 -449 0.0164997 0.0327763 0.00400793 -450 -0.0100537 -0.019407 0.0104569 -451 0.0535082 -0.023589 0.00757618 -452 -0.0184567 0.0672393 0.0165986 -453 -0.0660887 0.0639515 0.00557639 -454 -0.0085005 0.0591911 0.0132991 -455 0.0527123 -0.00658592 0.00801901 -456 0.00664445 0.0147496 0.00979726 -457 -0.0323364 0.0646841 0.013176 -458 -0.0684981 0.0817682 0.0541475 -459 0.0424951 -0.00680449 0.0104665 -460 -0.01583 0.0638299 0.0140017 -461 -0.0408586 0.0747808 0.0276312 -462 -0.0213675 0.00505684 0.00440033 -463 -0.0609542 0.0784149 0.029815 -464 0.0458286 -0.0196104 0.0115924 -465 0.0619857 -0.0044448 0.00717137 -466 -0.0549453 0.0736446 0.0144159 -467 -0.0660739 0.0797747 0.0511232 -468 -0.0150243 -0.0138696 0.00597473 -469 -0.0208919 0.0664273 0.014553 -470 -0.0583912 0.0766731 0.0277458 -471 -0.00499489 -0.0492059 0.0154875 -472 -0.0177596 -0.0149926 0.00640227 -473 -0.0656257 0.0638276 0.00437301 -474 -0.00111824 -0.0505712 0.010634 -475 -0.0234714 0.0595273 0.0150887 -476 -0.0117477 -0.00786715 0.0107629 -477 -0.0329423 0.0662408 0.012525 -478 -0.0588644 0.0778049 0.0265316 -479 -0.038272 0.0710121 0.0277124 -480 0.0147178 0.0228905 0.00513556 -481 -0.00242697 -0.0228032 0.0106496 -482 -0.00998317 -0.0196685 0.00798312 -483 0.00194711 0.0338412 0.00734265 -484 -0.0101071 0.0571173 0.0108272 -485 -0.000192036 0.0305177 0.010316 -486 -0.0662236 0.0609953 0.00234663 -487 -0.0383437 0.071981 0.0290737 -488 0.0464353 -0.0271448 0.00729223 -489 -0.0113654 0.0558876 0.00985606 -490 -0.0600686 0.0581853 0.00037707 -491 0.0184892 0.00651809 0.072001 -492 -0.0272353 0.0661385 0.0125002 -493 0.0386787 -0.00939756 0.0110365 -494 -0.00702298 -0.0554164 0.0301677 -495 -0.0387296 0.0725599 0.0291973 -496 -0.0195884 -0.00971304 0.00731553 -497 0.000980398 0.0340005 0.00831153 -498 -0.00251349 -0.0493306 0.0137872 -499 -0.0208118 0.00468072 0.00662791 -500 0.0145465 0.0247675 0.00685396 -501 0.0539643 -0.00601143 0.00911787 -502 0.0615879 -0.00432066 0.00875869 -503 -0.0649217 0.0800024 0.0383643 -504 0.00460493 0.00849738 0.0127005 -505 -0.0606311 0.0803611 0.0379233 -506 -0.00316884 0.0400824 0.00969248 -507 -0.0308482 0.067467 0.0126012 -508 0.0120049 0.00511369 0.00824306 -509 0.0117314 0.0134932 0.00784586 -510 0.0067401 0.0222359 0.00786688 -511 0.000365941 0.0444987 0.0334101 -512 0.00589042 0.0427357 0.0325284 -513 0.0134556 0.013691 0.0071386 -514 0.0155774 0.00572549 0.00675779 -515 -0.0442054 0.0654197 0.00607699 -516 0.00863004 0.0184766 0.00878081 -517 -0.0111016 -0.0170398 0.0107756 -518 -0.0162643 0.06208 0.0123266 -519 -0.0670643 0.0628756 0.0047451 -520 -0.0673064 0.0791769 0.0489333 -521 -0.0566743 0.0588231 0.00264455 -522 -0.0713841 0.080001 0.0523997 -523 -0.0690781 0.0794039 0.0521145 -524 -0.0589744 0.0702988 0.0123753 -525 -0.0108026 0.05228 0.00636676 -526 -0.0113486 0.0541547 0.00728553 -527 -0.0299136 0.0686241 0.0165753 -528 0.0505332 -0.0225927 0.00635398 -529 0.0180077 0.0031318 0.0704387 -530 -0.0235313 0.0640143 0.012641 -531 -0.0235569 0.00584404 0.00381922 -532 0.0384718 -0.0113423 0.0144484 -533 0.0182407 0.00232532 0.0728388 -534 -0.0235752 0.00407866 0.00373027 -535 -0.011585 0.0522432 0.00647843 -536 0.0400312 -0.00904366 0.0126741 -537 -0.0178591 -0.000359808 0.00797485 -538 -0.067167 0.0625514 0.00392853 -539 -0.0596438 0.0779391 0.0290601 -540 0.0013543 0.0302152 0.00901705 -541 0.0168301 0.00522322 0.0737244 -542 0.0174324 0.00448014 0.0738384 -543 -0.0618546 0.0649931 0.00590465 -544 0.0194429 0.0304209 0.00452872 -545 -0.0236633 0.0648084 0.0124456 -546 -0.00249493 -0.0562542 0.012985 -547 -0.0025263 -0.0246783 0.0125409 -548 -0.0396392 0.0718092 0.02876 -549 -0.0158083 -0.0164708 0.00645267 -550 0.016879 0.0245859 0.0055459 -551 -0.0688499 0.0811361 0.0461884 -552 0.0290982 -0.00647478 0.00827907 -553 -0.041817 0.0761358 0.0343691 -554 -0.0642688 0.0653922 0.00517065 -555 -0.0162175 0.00239503 0.00694561 -556 0.00467524 0.0360758 0.00643588 -557 -0.0222973 0.0035638 0.00646752 -558 -0.0708092 0.0801688 0.0482801 -559 -0.0549524 0.0787083 0.0296023 -560 -0.0631054 0.0672415 0.00811831 -561 -0.0155444 -0.0163359 0.0060847 -562 -0.0574097 0.0788047 0.0473507 -563 -0.0558952 0.0591814 0.001764 -564 -0.0177409 0.0619627 0.0144786 -565 -0.00178349 -0.0487397 0.0125937 -566 -0.0111058 0.0522074 0.00829904 -567 -0.0260139 0.00360897 0.00461987 -568 -0.0204566 0.00423454 0.00564674 -569 0.00612936 0.0370467 0.00680554 -570 0.010446 0.0313554 0.00705031 -571 -0.0569353 0.05965 0.00118235 -572 -0.0506685 0.0625792 0.00279292 -573 -0.0249761 0.00485573 0.00443819 -574 0.0172421 0.00725128 0.0738262 -575 -0.0219613 0.0643004 0.0138184 -576 -0.00260185 -0.0513557 0.0142694 -577 -0.0167422 0.00259292 0.00779623 -578 0.00214524 0.0341103 0.00650831 -579 -0.0236765 0.00572293 0.004305 -580 -0.0616879 0.0784644 0.0353636 -581 -0.0125522 0.0533024 0.00573952 -582 -0.00373263 -0.048886 0.014509 -583 -0.00253347 -0.0472982 0.0131992 -584 -0.0128746 -0.017623 0.00940414 -585 -5.43548e-05 0.0393803 0.00728201 -586 -0.0258702 0.00405717 0.00525282 -587 0.0183599 0.0265636 0.00640112 -588 0.0459896 -0.0257989 0.0100883 -589 -0.0295424 0.0680594 0.0247957 -590 -0.0245383 0.0634107 0.0123732 -591 0.0066096 0.0377811 0.00691952 -592 -0.0450015 0.0646553 0.00575343 -593 -0.0622505 0.0661482 0.00839783 -594 -0.0256248 0.0608105 0.0161665 -595 0.017488 0.00853314 0.0720965 -596 -0.0596734 0.0705097 0.00992485 -597 -0.0665798 0.0628689 0.00493615 -598 -0.0624322 0.0664941 0.0080812 -599 0.0436037 -0.00911409 0.00950451 -600 -0.0258241 0.00183578 0.00455937 -601 -0.0702703 0.0796913 0.0546337 -602 -0.027947 0.0630495 0.0231884 -603 -0.0601839 0.0704633 0.0106076 -604 -0.019796 -0.0130118 0.0069497 -605 -0.0183149 0.0630548 0.012418 -606 -0.0302535 0.0701272 0.02364 -607 -0.0574291 0.0790851 0.0314511 -608 -0.0506885 0.0650762 0.00396145 -609 -0.021101 0.0616869 0.0137094 -610 -0.0331684 0.0670427 0.023997 -611 0.0134393 0.00644533 0.00718965 -612 -0.0111807 -0.0194906 0.00818236 -613 -0.0255718 0.00304117 0.00332801 -614 -0.0126697 -0.015488 0.00653208 -615 -0.0247074 0.00660999 0.00551935 -616 0.0173416 0.0031807 0.0727906 -617 0.0172416 0.0236783 0.00588169 -618 0.0190309 0.0293428 0.00437137 -619 0.016715 0.00646681 0.0747173 -620 -0.0362286 0.072292 0.023504 -621 -0.0193589 -0.00042516 0.00470745 -622 -0.0218861 0.0643631 0.0125137 -623 -0.0102557 0.0512168 0.00711881 -624 0.0404202 -0.00631757 0.0116411 -625 0.0462272 -0.00679819 0.0101561 -626 -0.0259792 0.0656558 0.0150971 -627 0.0162732 0.0229634 0.00624384 -628 0.00353474 0.0364474 0.00843339 -629 4.6368e-06 0.0388726 0.00973083 -630 -0.0216501 0.0633078 0.012475 -631 -0.0653553 0.0635995 0.0060088 -632 -0.0129397 0.0533345 0.00604151 -633 -0.00189413 -0.0244631 0.013557 -634 -0.0610974 0.0673557 0.00916116 -635 0.0169636 0.00823874 0.0726305 -636 -0.0262169 0.00566462 0.00486021 -637 -0.00105663 -0.050339 0.013034 -638 -0.0522352 0.0618469 0.00239028 -639 -0.0658611 0.0623674 0.00600767 -640 -0.0308719 0.0671807 0.0240148 -641 -0.0271033 0.0631674 0.0232081 -642 0.000463176 0.0377435 0.00713404 -643 0.0197653 -0.0105149 0.0573133 -644 -0.0261272 0.00574879 0.00514751 -645 -0.0256133 0.00236555 0.00535812 -646 0.0395658 -0.00664927 0.0115095 -647 -0.0346515 0.0704144 0.0260764 -648 -0.0676857 0.0619198 0.00410476 -649 -0.0352382 0.0722683 0.0261851 -650 -0.0489272 0.0632235 0.00329626 -651 -0.0514659 0.0617489 0.00295197 -652 -0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1654 -1 4 0 26 15 543 25 -2 4 0 227 308 190 188 -3 4 0 203 353 199 163 -4 4 0 331 305 504 150 -5 4 0 142 328 128 138 -6 4 0 490 439 18 571 -7 4 0 364 289 287 414 -8 4 0 296 336 304 298 -9 4 0 564 419 300 381 -10 4 0 398 569 373 591 -11 4 0 486 473 639 422 -12 4 0 338 89 566 489 -13 4 0 332 554 543 424 -14 4 0 80 67 71 302 -15 4 0 149 146 109 108 -16 4 0 98 90 375 342 -17 4 0 341 308 325 313 -18 4 0 147 314 126 116 -19 4 0 124 318 156 131 -20 4 0 245 322 206 308 -21 4 0 348 311 516 186 -22 4 0 135 150 319 151 -23 4 0 147 314 307 311 -24 4 0 464 588 301 528 -25 4 0 461 33 35 333 -26 4 0 196 192 373 314 -27 4 0 108 81 302 122 -28 4 0 366 258 227 357 -29 4 0 511 107 512 353 -30 4 0 146 170 354 172 -31 4 0 297 175 156 130 -32 4 0 130 297 175 308 -33 4 0 318 159 319 195 -34 4 0 154 123 122 342 -35 4 0 261 308 259 260 -36 4 0 132 142 128 318 -37 4 0 241 250 240 205 -38 4 0 226 227 248 324 -39 4 0 575 609 475 49 -40 4 0 375 91 123 90 -41 4 0 260 308 255 251 -42 4 0 517 612 63 482 -43 4 0 120 117 131 297 -44 4 0 318 131 297 156 -45 4 0 147 319 311 307 -46 4 0 131 120 297 130 -47 4 0 120 297 111 117 -48 4 0 308 174 206 360 -49 4 0 148 313 325 175 -50 4 0 148 313 175 174 -51 4 0 302 80 122 81 -52 4 0 107 353 511 110 -53 4 0 322 231 198 197 -54 4 0 61 58 564 57 -55 4 0 240 386 212 221 -56 4 0 121 297 143 117 -57 4 0 121 297 117 111 -58 4 0 307 235 314 182 -59 4 0 307 314 166 182 -60 4 0 417 308 175 316 -61 4 0 308 175 360 417 -62 4 0 601 9 458 1 -63 4 0 459 429 536 599 -64 4 0 211 242 206 308 -65 4 0 528 588 301 356 -66 4 0 316 297 308 175 -67 4 0 197 188 308 228 -68 4 0 231 308 228 197 -69 4 0 231 197 322 308 -70 4 0 188 197 308 361 -71 4 0 322 361 308 197 -72 4 0 259 308 256 255 -73 4 0 298 306 304 299 -74 4 0 302 342 146 122 -75 4 0 251 322 245 308 -76 4 0 298 306 299 236 -77 4 0 342 302 169 129 -78 4 0 157 319 331 150 -79 4 0 190 195 324 227 -80 4 0 146 342 354 154 -81 4 0 190 297 308 324 -82 4 0 236 254 306 299 -83 4 0 354 179 201 322 -84 4 0 308 297 188 361 -85 4 0 361 188 164 297 -86 4 0 195 165 190 318 -87 4 0 307 215 257 235 -88 4 0 194 235 215 307 -89 4 0 174 129 148 313 -90 4 0 169 313 129 174 -91 4 0 322 255 251 201 -92 4 0 366 265 308 258 -93 4 0 227 308 258 366 -94 4 0 258 308 249 265 -95 4 0 227 308 228 258 -96 4 0 448 192 373 196 -97 4 0 228 308 249 258 -98 4 0 296 298 514 336 -99 4 0 125 150 348 126 -100 4 0 125 160 348 150 -101 4 0 244 264 242 316 -102 4 0 264 316 244 271 -103 4 0 224 233 225 219 -104 4 0 107 353 163 199 -105 4 0 217 223 219 225 -106 4 0 308 174 313 206 -107 4 0 206 313 179 174 -108 4 0 241 230 212 233 -109 4 0 241 233 212 218 -110 4 0 267 278 312 273 -111 4 0 267 312 262 273 -112 4 0 206 179 322 245 -113 4 0 242 245 206 308 -114 4 0 144 319 159 157 -115 4 0 265 308 266 272 -116 4 0 218 219 392 233 -117 4 0 264 324 316 271 -118 4 0 324 308 264 316 -119 4 0 297 318 117 131 -120 4 0 128 117 318 124 -121 4 0 354 207 201 177 -122 4 0 207 177 354 184 -123 4 0 155 163 353 203 -124 4 0 131 297 156 130 -125 4 0 395 330 236 202 -126 4 0 164 142 318 190 -127 4 0 253 314 234 311 -128 4 0 307 314 147 166 -129 4 0 331 234 253 254 -130 4 0 306 236 298 331 -131 4 0 156 297 316 175 -132 4 0 324 319 318 316 -133 4 0 297 324 316 308 -134 4 0 373 314 102 125 -135 4 0 167 155 378 192 -136 4 0 278 324 272 269 -137 4 0 278 276 272 324 -138 4 0 319 159 157 336 -139 4 0 267 257 312 243 -140 4 0 307 215 243 257 -141 4 0 156 297 318 316 -142 4 0 207 354 170 184 -143 4 0 124 144 139 156 -144 4 0 267 312 250 243 -145 4 0 144 151 139 319 -146 4 0 318 316 319 144 -147 4 0 316 139 319 144 -148 4 0 139 144 316 156 -149 4 0 316 191 312 319 -150 4 0 316 191 317 156 -151 4 0 313 308 175 174 -152 4 0 253 234 331 311 -153 4 0 331 395 234 236 -154 4 0 272 265 308 366 -155 4 0 103 140 133 510 -156 4 0 235 199 246 314 -157 4 0 246 237 314 199 -158 4 0 144 151 319 157 -159 4 0 92 157 151 144 -160 4 0 92 159 157 144 -161 4 0 395 234 236 330 -162 4 0 395 330 202 348 -163 4 0 348 330 202 209 -164 4 0 324 312 316 271 -165 4 0 266 308 324 272 -166 4 0 324 366 308 227 -167 4 0 242 264 245 308 -168 4 0 272 266 269 324 -169 4 0 135 151 319 139 -170 4 0 40 35 28 29 -171 4 0 88 148 129 342 -172 4 0 325 342 148 88 -173 4 0 314 116 147 166 -174 4 0 77 353 320 94 -175 4 0 331 262 319 306 -176 4 0 319 317 139 316 -177 4 0 450 329 482 328 -178 4 0 183 307 147 166 -179 4 0 188 361 176 197 -180 4 0 169 179 313 174 -181 4 0 314 196 348 373 -182 4 0 102 84 116 353 -183 4 0 102 77 84 353 -184 4 0 191 147 319 317 -185 4 0 307 262 257 312 -186 4 0 307 257 246 235 -187 4 0 307 257 262 246 -188 4 0 128 318 144 124 -189 4 0 246 314 237 253 -190 4 0 314 203 237 234 -191 4 0 142 128 318 138 -192 4 0 253 237 234 314 -193 4 0 306 319 331 336 -194 4 0 307 314 235 246 -195 4 0 316 250 312 191 -196 4 0 450 403 349 329 -197 4 0 121 297 101 143 -198 4 0 382 164 101 297 -199 4 0 369 198 322 193 -200 4 0 264 266 324 269 -201 4 0 322 354 170 207 -202 4 0 322 170 193 207 -203 4 0 353 84 116 110 -204 4 0 70 302 68 83 -205 4 0 331 311 234 395 -206 4 0 323 493 282 301 -207 4 0 269 278 324 271 -208 4 0 278 312 324 271 -209 4 0 207 170 180 184 -210 4 0 207 170 193 180 -211 4 0 325 130 175 308 -212 4 0 146 354 170 154 -213 4 0 354 302 342 146 -214 4 0 161 348 510 181 -215 4 0 182 314 199 235 -216 4 0 322 354 369 170 -217 4 0 231 207 322 198 -218 4 0 313 322 375 341 -219 4 0 375 361 341 322 -220 4 0 322 207 193 198 -221 4 0 297 143 164 101 -222 4 0 221 213 240 232 -223 4 0 190 188 308 297 -224 4 0 341 361 375 382 -225 4 0 341 308 313 322 -226 4 0 134 158 184 354 -227 4 0 247 308 261 249 -228 4 0 263 308 260 251 -229 4 0 318 319 159 144 -230 4 0 309 262 306 319 -231 4 0 250 204 243 312 -232 4 0 448 192 167 378 -233 4 0 37 333 620 35 -234 4 0 37 33 333 35 -235 4 0 297 318 316 324 -236 4 0 167 448 378 153 -237 4 0 212 218 233 219 -238 4 0 88 325 342 494 -239 4 0 246 307 314 253 -240 4 0 307 253 246 262 -241 4 0 126 311 150 348 -242 4 0 388 611 336 514 -243 4 0 348 234 420 314 -244 4 0 236 254 331 306 -245 4 0 348 314 311 234 -246 4 0 211 308 360 417 -247 4 0 373 102 320 125 -248 4 0 316 250 191 438 -249 4 0 250 205 191 438 -250 4 0 254 262 306 309 -251 4 0 254 309 306 310 -252 4 0 299 254 306 310 -253 4 0 331 262 306 254 -254 4 0 292 294 295 293 -255 4 0 194 307 215 204 -256 4 0 304 306 384 299 -257 4 0 267 312 257 262 -258 4 0 353 192 378 155 -259 4 0 319 159 336 195 -260 4 0 353 192 373 378 -261 4 0 336 185 388 195 -262 4 0 312 250 271 267 -263 4 0 271 250 312 316 -264 4 0 261 249 308 265 -265 4 0 268 308 265 261 -266 4 0 247 308 249 228 -267 4 0 227 195 324 226 -268 4 0 366 324 415 337 -269 4 0 337 366 324 357 -270 4 0 190 195 318 324 -271 4 0 156 318 124 144 -272 4 0 263 266 308 264 -273 4 0 251 263 308 264 -274 4 0 197 198 322 369 -275 4 0 154 354 369 342 -276 4 0 188 308 228 227 -277 4 0 79 328 138 92 -278 4 0 316 317 139 156 -279 4 0 360 175 308 174 -280 4 0 255 251 308 322 -281 4 0 255 256 252 308 -282 4 0 247 228 231 308 -283 4 0 247 308 231 256 -284 4 0 134 149 394 354 -285 4 0 83 162 96 302 -286 4 0 161 373 140 348 -287 4 0 88 67 302 68 -288 4 0 302 97 88 68 -289 4 0 512 166 314 182 -290 4 0 420 192 314 234 -291 4 0 348 330 420 234 -292 4 0 192 314 234 203 -293 4 0 91 123 105 115 -294 4 0 394 70 302 81 -295 4 0 309 273 262 319 -296 4 0 319 262 312 273 -297 4 0 67 302 68 70 -298 4 0 271 278 312 267 -299 4 0 66 57 326 58 -300 4 0 188 136 176 361 -301 4 0 157 331 185 504 -302 4 0 136 361 188 164 -303 4 0 244 250 271 316 -304 4 0 71 302 67 70 -305 4 0 244 213 232 240 -306 4 0 81 302 71 70 -307 4 0 354 149 108 146 -308 4 0 314 237 203 199 -309 4 0 506 378 435 629 -310 4 0 244 438 316 213 -311 4 0 97 302 169 162 -312 4 0 244 316 438 250 -313 4 0 313 129 342 169 -314 4 0 382 113 101 164 -315 4 0 506 435 378 94 -316 4 0 91 123 85 105 -317 4 0 308 264 245 251 -318 4 0 242 264 308 316 -319 4 0 450 349 482 329 -320 4 0 314 373 348 125 -321 4 0 92 138 159 144 -322 4 0 395 311 234 348 -323 4 0 278 273 324 312 -324 4 0 373 378 435 320 -325 4 0 147 311 319 135 -326 4 0 126 311 135 150 -327 4 0 126 135 311 147 -328 4 0 314 348 311 126 -329 4 0 83 302 82 70 -330 4 0 378 435 629 373 -331 4 0 195 159 165 318 -332 4 0 316 312 324 319 -333 4 0 156 175 316 387 -334 4 0 336 298 514 331 -335 4 0 88 342 129 302 -336 4 0 319 307 331 311 -337 4 0 253 314 311 307 -338 4 0 311 331 253 307 -339 4 0 297 341 308 130 -340 4 0 314 348 126 125 -341 4 0 147 314 311 126 -342 4 0 61 339 99 338 -343 4 0 250 204 312 191 -344 4 0 305 185 508 331 -345 4 0 211 242 308 316 -346 4 0 211 308 417 316 -347 4 0 213 316 211 417 -348 4 0 214 215 230 204 -349 4 0 244 316 242 211 -350 4 0 244 211 213 316 -351 4 0 465 501 344 502 -352 4 0 108 354 302 394 -353 4 0 313 129 148 342 -354 4 0 337 324 415 248 -355 4 0 337 258 366 357 -356 4 0 121 101 297 111 -357 4 0 382 101 111 297 -358 4 0 157 159 185 336 -359 4 0 226 336 195 324 -360 4 0 307 262 331 253 -361 4 0 307 262 319 331 -362 4 0 331 254 253 262 -363 4 0 248 336 552 296 -364 4 0 319 324 195 336 -365 4 0 248 296 226 336 -366 4 0 324 248 336 552 -367 4 0 147 183 191 307 -368 4 0 282 281 276 323 -369 4 0 281 323 282 301 -370 4 0 109 119 105 122 -371 4 0 297 143 117 318 -372 4 0 109 122 105 80 -373 4 0 308 366 324 272 -374 4 0 297 318 324 190 -375 4 0 297 190 164 318 -376 4 0 214 204 230 212 -377 4 0 224 212 214 230 -378 4 0 297 143 318 164 -379 4 0 264 308 324 266 -380 4 0 264 269 324 271 -381 4 0 132 117 143 318 -382 4 0 130 297 341 120 -383 4 0 341 130 120 98 -384 4 0 277 343 356 279 -385 4 0 325 308 175 313 -386 4 0 109 81 108 122 -387 4 0 109 122 108 146 -388 4 0 348 234 395 330 -389 4 0 341 111 120 297 -390 4 0 341 100 98 120 -391 4 0 341 111 100 120 -392 4 0 226 336 324 248 -393 4 0 318 319 324 195 -394 4 0 275 270 324 309 -395 4 0 309 336 324 319 -396 4 0 552 270 336 324 -397 4 0 273 309 275 324 -398 4 0 403 328 329 450 -399 4 0 382 111 341 297 -400 4 0 361 322 308 341 -401 4 0 361 341 308 297 -402 4 0 342 85 73 90 -403 4 0 342 73 85 80 -404 4 0 323 324 366 276 -405 4 0 361 297 164 382 -406 4 0 96 82 83 302 -407 4 0 45 647 44 42 -408 4 0 179 354 201 177 -409 4 0 53 621 54 347 -410 4 0 117 124 131 318 -411 4 0 156 144 316 318 -412 4 0 369 198 193 141 -413 4 0 342 302 88 67 -414 4 0 67 80 342 302 -415 4 0 73 80 342 67 -416 4 0 342 73 67 76 -417 4 0 372 528 289 285 -418 4 0 285 528 289 287 -419 4 0 355 98 325 494 -420 4 0 122 119 105 123 -421 4 0 394 82 134 302 -422 4 0 494 88 76 342 -423 4 0 109 81 122 80 -424 4 0 447 580 503 505 -425 4 0 114 118 141 145 -426 4 0 311 150 319 135 -427 4 0 108 122 302 146 -428 4 0 204 307 183 194 -429 4 0 191 204 307 183 -430 4 0 382 101 100 111 -431 4 0 382 111 100 341 -432 4 0 318 159 138 144 -433 4 0 588 281 301 356 -434 4 0 87 61 77 57 -435 4 0 318 159 165 138 -436 4 0 7 12 2 486 -437 4 0 316 191 319 317 -438 4 0 208 196 449 445 -439 4 0 322 369 354 313 -440 4 0 354 158 177 162 -441 4 0 354 169 162 179 -442 4 0 313 369 354 342 -443 4 0 179 162 354 177 -444 4 0 130 98 341 355 -445 4 0 325 130 341 355 -446 4 0 337 357 324 248 -447 4 0 324 357 227 248 -448 4 0 588 281 464 301 -449 4 0 375 341 382 98 -450 4 0 454 75 61 155 -451 4 0 353 77 84 74 -452 4 0 331 305 185 504 -453 4 0 311 331 319 150 -454 4 0 378 339 167 106 -455 4 0 318 190 142 165 -456 4 0 138 142 165 318 -457 4 0 18 12 397 14 -458 4 0 298 514 331 513 -459 4 0 118 137 141 168 -460 4 0 298 331 236 395 -461 4 0 395 298 331 513 -462 4 0 93 157 92 159 -463 4 0 354 158 184 177 -464 4 0 151 157 92 93 -465 4 0 78 93 151 92 -466 4 0 378 448 629 153 -467 4 0 102 314 126 125 -468 4 0 126 116 314 102 -469 4 0 61 72 303 75 -470 4 0 39 461 350 553 -471 4 0 350 39 33 461 -472 4 0 311 331 513 395 -473 4 0 311 331 305 509 -474 4 0 353 102 314 116 -475 4 0 204 215 243 307 -476 4 0 106 153 167 378 -477 4 0 97 162 83 302 -478 4 0 107 353 199 512 -479 4 0 297 188 164 190 -480 4 0 147 319 139 135 -481 4 0 77 353 87 74 -482 4 0 353 203 199 314 -483 4 0 512 314 353 199 -484 4 0 37 38 29 35 -485 4 0 485 140 373 125 -486 4 0 398 448 373 196 -487 4 0 196 570 373 398 -488 4 0 324 248 552 415 -489 4 0 415 270 552 324 -490 4 0 52 57 594 564 -491 4 0 285 289 414 287 -492 4 0 438 250 205 240 -493 4 0 524 425 25 17 -494 4 0 29 25 524 425 -495 4 0 87 77 61 353 -496 4 0 93 92 138 159 -497 4 0 93 92 79 138 -498 4 0 203 192 353 155 -499 4 0 192 353 314 203 -500 4 0 88 302 129 97 -501 4 0 169 342 354 302 -502 4 0 147 319 317 139 -503 4 0 435 426 629 373 -504 4 0 197 168 369 176 -505 4 0 369 176 361 197 -506 4 0 157 151 319 150 -507 4 0 307 319 312 191 -508 4 0 312 307 191 204 -509 4 0 628 373 441 374 -510 4 0 513 331 311 509 -511 4 0 49 594 413 46 -512 4 0 303 163 87 61 -513 4 0 146 342 154 122 -514 4 0 274 366 415 337 -515 4 0 274 258 366 337 -516 4 0 87 57 74 66 -517 4 0 304 306 336 384 -518 4 0 204 250 205 191 -519 4 0 110 74 66 87 -520 4 0 163 87 61 353 -521 4 0 204 205 250 241 -522 4 0 387 438 213 316 -523 4 0 150 160 348 311 -524 4 0 313 369 342 375 -525 4 0 313 322 369 375 -526 4 0 97 129 169 302 -527 4 0 504 305 393 150 -528 4 0 181 348 500 187 -529 4 0 610 527 42 44 -530 4 0 44 527 42 620 -531 4 0 311 305 456 509 -532 4 0 311 509 456 516 -533 4 0 365 512 166 116 -534 4 0 116 512 166 314 -535 4 0 509 305 508 331 -536 4 0 322 369 193 170 -537 4 0 535 526 581 632 -538 4 0 182 314 512 199 -539 4 0 497 441 373 540 -540 4 0 37 42 46 527 -541 4 0 500 209 187 348 -542 4 0 312 257 307 243 -543 4 0 323 366 281 276 -544 4 0 348 420 209 196 -545 4 0 366 279 276 272 -546 4 0 202 500 186 348 -547 4 0 386 406 221 232 -548 4 0 64 526 62 489 -549 4 0 336 159 185 195 -550 4 0 404 24 559 335 -551 4 0 404 24 607 559 -552 4 0 384 336 552 270 -553 4 0 244 240 438 213 -554 4 0 244 438 240 250 -555 4 0 430 461 620 333 -556 4 0 461 333 35 620 -557 4 0 61 564 64 334 -558 4 0 381 437 47 413 -559 4 0 279 277 265 258 -560 4 0 279 277 258 274 -561 4 0 186 500 181 348 -562 4 0 140 510 348 160 -563 4 0 377 410 36 350 -564 4 0 202 330 236 209 -565 4 0 380 345 614 468 -566 4 0 99 339 378 106 -567 4 0 378 106 418 99 -568 4 0 378 448 373 629 -569 4 0 194 235 307 182 -570 4 0 194 307 166 182 -571 4 0 194 307 183 166 -572 4 0 353 373 320 378 -573 4 0 68 97 83 302 -574 4 0 347 496 604 476 -575 4 0 161 181 411 373 -576 4 0 570 374 400 368 -577 4 0 40 38 35 29 -578 4 0 364 289 327 528 -579 4 0 324 309 319 273 -580 4 0 353 378 320 94 -581 4 0 358 91 471 375 -582 4 0 134 394 302 354 -583 4 0 394 149 108 354 -584 4 0 172 354 146 149 -585 4 0 382 358 471 375 -586 4 0 101 382 90 358 -587 4 0 651 346 638 390 -588 4 0 382 90 100 101 -589 4 0 334 594 564 475 -590 4 0 369 361 375 322 -591 4 0 322 197 369 361 -592 4 0 342 325 98 494 -593 4 0 325 313 148 342 -594 4 0 342 325 375 98 -595 4 0 115 369 123 367 -596 4 0 342 98 76 494 -597 4 0 369 375 576 115 -598 4 0 353 512 116 314 -599 4 0 336 304 552 296 -600 4 0 336 306 304 298 -601 4 0 226 514 336 296 -602 4 0 108 302 81 394 -603 4 0 181 411 373 374 -604 4 0 26 440 571 383 -605 4 0 26 383 346 440 -606 4 0 211 360 308 206 -607 4 0 87 74 57 77 -608 4 0 358 113 101 382 -609 4 0 195 388 336 226 -610 4 0 241 233 218 238 -611 4 0 155 339 378 353 -612 4 0 345 79 468 476 -613 4 0 213 316 417 175 -614 4 0 387 316 213 175 -615 4 0 312 307 262 319 -616 4 0 435 485 426 373 -617 4 0 435 373 125 485 -618 4 0 299 310 306 384 -619 4 0 26 425 25 34 -620 4 0 118 114 367 434 -621 4 0 26 34 25 608 -622 4 0 223 222 529 392 -623 4 0 527 38 37 35 -624 4 0 37 527 46 38 -625 4 0 342 123 90 375 -626 4 0 342 123 85 90 -627 4 0 335 350 33 35 -628 4 0 350 461 33 35 -629 4 0 85 91 90 123 -630 4 0 259 247 308 261 -631 4 0 629 628 448 373 -632 4 0 633 142 328 128 -633 4 0 629 497 628 373 -634 4 0 303 61 87 72 -635 4 0 236 254 234 331 -636 4 0 341 98 325 355 -637 4 0 373 570 400 569 -638 4 0 398 570 373 569 -639 4 0 49 413 527 46 -640 4 0 49 46 527 457 -641 4 0 49 626 48 527 -642 4 0 241 204 243 250 -643 4 0 49 527 48 457 -644 4 0 392 218 233 238 -645 4 0 233 392 238 223 -646 4 0 178 198 197 141 -647 4 0 198 197 141 369 -648 4 0 364 290 287 528 -649 4 0 419 381 564 413 -650 4 0 92 78 79 59 -651 4 0 192 373 314 353 -652 4 0 386 406 238 423 -653 4 0 367 369 137 391 -654 4 0 437 413 419 606 -655 4 0 413 437 47 606 -656 4 0 239 252 322 255 -657 4 0 454 61 339 155 -658 4 0 34 466 425 29 -659 4 0 221 386 232 240 -660 4 0 60 64 489 484 -661 4 0 484 65 60 64 -662 4 0 212 386 218 221 -663 4 0 241 240 386 212 -664 4 0 241 205 240 212 -665 4 0 607 24 16 470 -666 4 0 620 42 37 527 -667 4 0 37 333 42 620 -668 4 0 95 87 66 69 -669 4 0 113 164 382 361 -670 4 0 410 30 432 21 -671 4 0 371 1 522 458 -672 4 0 527 47 43 40 -673 4 0 596 425 17 15 -674 4 0 393 456 160 311 -675 4 0 110 95 87 66 -676 4 0 160 311 456 516 -677 4 0 512 511 365 166 -678 4 0 353 511 365 512 -679 4 0 128 144 318 138 -680 4 0 341 130 325 308 -681 4 0 87 61 57 58 -682 4 0 419 58 564 72 -683 4 0 414 289 327 364 -684 4 0 320 378 435 94 -685 4 0 364 528 287 289 -686 4 0 212 221 205 240 -687 4 0 134 172 149 354 -688 4 0 134 172 354 184 -689 4 0 319 147 191 307 -690 4 0 589 641 606 436 -691 4 0 347 79 59 476 -692 4 0 345 79 476 92 -693 4 0 92 138 144 328 -694 4 0 86 92 144 328 -695 4 0 32 399 34 38 -696 4 0 306 309 336 310 -697 4 0 347 604 468 476 -698 4 0 347 468 79 476 -699 4 0 614 345 79 468 -700 4 0 384 310 336 270 -701 4 0 439 25 26 422 -702 4 0 196 192 314 420 -703 4 0 348 420 196 314 -704 4 0 132 143 142 318 -705 4 0 164 142 143 318 -706 4 0 386 406 423 221 -707 4 0 35 527 38 40 -708 4 0 158 354 96 162 -709 4 0 169 302 354 162 -710 4 0 334 475 564 363 -711 4 0 155 61 303 75 -712 4 0 94 353 378 339 -713 4 0 224 233 219 212 -714 4 0 214 215 204 194 -715 4 0 204 243 230 241 -716 4 0 204 230 212 241 -717 4 0 391 474 369 136 -718 4 0 286 588 528 356 -719 4 0 35 620 527 47 -720 4 0 136 474 361 565 -721 4 0 566 526 632 64 -722 4 0 490 439 11 14 -723 4 0 209 330 420 348 -724 4 0 35 527 40 47 -725 4 0 76 342 73 98 -726 4 0 77 353 102 320 -727 4 0 268 308 261 260 -728 4 0 167 155 339 378 -729 4 0 465 289 385 344 -730 4 0 255 308 260 259 -731 4 0 335 24 470 33 -732 4 0 559 24 470 335 -733 4 0 522 1 371 428 -734 4 0 347 53 496 54 -735 4 0 559 24 607 470 -736 4 0 476 347 496 54 -737 4 0 312 204 243 307 -738 4 0 230 215 243 204 -739 4 0 241 218 212 386 -740 4 0 241 238 218 386 -741 4 0 29 33 28 23 -742 4 0 23 335 559 470 -743 4 0 297 382 361 341 -744 4 0 336 611 185 331 -745 4 0 388 185 336 611 -746 4 0 353 373 102 320 -747 4 0 373 102 314 353 -748 4 0 44 527 606 610 -749 4 0 74 110 84 353 -750 4 0 610 527 606 413 -751 4 0 325 341 375 98 -752 4 0 369 136 137 391 -753 4 0 169 354 342 313 -754 4 0 274 366 279 281 -755 4 0 281 366 279 276 -756 4 0 322 313 206 308 -757 4 0 414 289 344 385 -758 4 0 114 546 367 434 -759 4 0 367 391 434 369 -760 4 0 155 163 303 61 -761 4 0 47 620 527 44 -762 4 0 384 304 552 336 -763 4 0 384 310 306 336 -764 4 0 99 378 339 94 -765 4 0 506 94 378 99 -766 4 0 365 353 512 116 -767 4 0 378 99 418 506 -768 4 0 478 23 559 470 -769 4 0 328 86 633 128 -770 4 0 265 308 268 266 -771 4 0 268 308 263 266 -772 4 0 564 419 436 58 -773 4 0 460 75 564 65 -774 4 0 339 61 99 94 -775 4 0 518 564 65 460 -776 4 0 643 216 229 392 -777 4 0 342 88 76 67 -778 4 0 26 422 11 439 -779 4 0 26 440 439 571 -780 4 0 411 161 373 441 -781 4 0 442 467 412 10 -782 4 0 350 377 24 33 -783 4 0 225 409 217 223 -784 4 0 410 377 24 350 -785 4 0 24 350 33 335 -786 4 0 371 522 523 458 -787 4 0 278 324 273 276 -788 4 0 273 324 275 276 -789 4 0 170 354 172 184 -790 4 0 169 179 354 313 -791 4 0 607 16 24 580 -792 4 0 367 391 137 118 -793 4 0 35 620 37 527 -794 4 0 548 33 461 333 -795 4 0 414 385 344 294 -796 4 0 414 289 288 344 -797 4 0 65 64 484 454 -798 4 0 93 79 78 401 -799 4 0 375 382 358 90 -800 4 0 413 575 564 594 -801 4 0 187 181 368 189 -802 4 0 358 375 90 91 -803 4 0 275 276 324 323 -804 4 0 493 270 323 275 -805 4 0 532 323 276 275 -806 4 0 324 270 323 415 -807 4 0 275 323 324 270 -808 4 0 157 331 319 336 -809 4 0 454 339 61 338 -810 4 0 527 47 507 43 -811 4 0 74 87 110 353 -812 4 0 61 353 339 155 -813 4 0 444 445 618 379 -814 4 0 173 133 160 510 -815 4 0 352 604 468 347 -816 4 0 161 181 373 348 -817 4 0 23 335 470 33 -818 4 0 181 187 374 373 -819 4 0 29 35 28 33 -820 4 0 348 187 181 373 -821 4 0 562 10 412 447 -822 4 0 10 580 503 447 -823 4 0 399 351 34 38 -824 4 0 515 592 399 32 -825 4 0 434 112 637 474 -826 4 0 134 82 96 302 -827 4 0 224 230 233 212 -828 4 0 134 302 96 354 -829 4 0 302 354 162 96 -830 4 0 376 64 60 564 -831 4 0 606 640 589 45 -832 4 0 369 137 168 141 -833 4 0 113 361 583 136 -834 4 0 197 369 168 141 -835 4 0 12 7 4 14 -836 4 0 510 181 173 171 -837 4 0 61 339 353 94 -838 4 0 369 154 170 354 -839 4 0 404 607 24 21 -840 4 0 411 374 578 441 -841 4 0 500 186 189 480 -842 4 0 535 526 632 566 -843 4 0 628 441 497 483 -844 4 0 478 23 28 559 -845 4 0 28 335 559 23 -846 4 0 93 92 78 79 -847 4 0 554 473 631 453 -848 4 0 198 178 193 141 -849 4 0 187 444 209 500 -850 4 0 226 388 336 514 -851 4 0 287 464 285 528 -852 4 0 528 301 285 372 -853 4 0 497 629 426 373 -854 4 0 394 302 70 82 -855 4 0 64 61 454 75 -856 4 0 444 587 618 445 -857 4 0 467 458 371 523 -858 4 0 371 523 520 467 -859 4 0 371 520 551 467 -860 4 0 385 465 294 292 -861 4 0 468 604 345 476 -862 4 0 584 517 63 345 -863 4 0 176 136 137 369 -864 4 0 439 440 18 571 -865 4 0 490 26 11 439 -866 4 0 324 366 227 357 -867 4 0 606 413 419 436 -868 4 0 527 48 477 507 -869 4 0 527 477 48 457 -870 4 0 527 492 48 507 -871 4 0 527 626 48 492 -872 4 0 134 354 96 158 -873 4 0 62 64 489 60 -874 4 0 52 57 370 594 -875 4 0 326 52 55 564 -876 4 0 524 425 17 19 -877 4 0 373 441 161 540 -878 4 0 373 161 140 540 -879 4 0 66 326 55 58 -880 4 0 58 326 55 564 -881 4 0 310 309 336 270 -882 4 0 324 270 336 309 -883 4 0 157 336 185 331 -884 4 0 181 411 171 161 -885 4 0 640 589 641 606 -886 4 0 537 557 621 54 -887 4 0 282 285 340 288 -888 4 0 372 285 288 340 -889 4 0 382 100 98 341 -890 4 0 502 294 465 292 -891 4 0 43 34 351 38 -892 4 0 221 240 213 205 -893 4 0 438 240 205 213 -894 4 0 425 466 524 29 -895 4 0 354 302 146 108 -896 4 0 435 426 506 629 -897 4 0 497 506 426 629 -898 4 0 187 181 374 368 -899 4 0 517 79 614 345 -900 4 0 342 90 73 98 -901 4 0 180 141 178 152 -902 4 0 178 152 141 168 -903 4 0 193 180 141 178 -904 4 0 140 161 348 510 -905 4 0 9 442 13 362 -906 4 0 442 9 13 467 -907 4 0 408 505 503 580 -908 4 0 607 580 408 16 -909 4 0 327 289 414 385 -910 4 0 372 284 283 340 -911 4 0 359 89 526 566 -912 4 0 607 539 478 470 -913 4 0 140 373 125 348 -914 4 0 328 86 92 517 -915 4 0 527 47 44 606 -916 4 0 155 163 61 353 -917 4 0 367 391 118 434 -918 4 0 338 64 61 454 -919 4 0 64 338 484 454 -920 4 0 359 89 566 338 -921 4 0 489 526 566 64 -922 4 0 448 192 378 373 -923 4 0 350 39 377 33 -924 4 0 369 137 176 168 -925 4 0 377 350 553 39 -926 4 0 325 313 375 341 -927 4 0 340 288 625 282 -928 4 0 342 313 375 325 -929 4 0 524 466 19 20 -930 4 0 425 466 19 524 -931 4 0 348 395 186 202 -932 4 0 610 44 42 45 -933 4 0 409 433 217 223 -934 4 0 217 433 529 223 -935 4 0 582 375 471 115 -936 4 0 434 474 637 369 -937 4 0 382 375 471 582 -938 4 0 98 90 382 375 -939 4 0 382 100 90 98 -940 4 0 123 105 122 85 -941 4 0 122 85 105 80 -942 4 0 43 40 34 38 -943 4 0 369 474 361 136 -944 4 0 469 452 564 460 -945 4 0 46 41 527 457 -946 4 0 415 366 274 323 -947 4 0 191 387 316 438 -948 4 0 191 387 156 316 -949 4 0 434 391 474 369 -950 4 0 502 294 344 465 -951 4 0 502 294 292 293 -952 4 0 476 59 92 79 -953 4 0 306 309 319 336 -954 4 0 528 301 464 285 -955 4 0 301 282 464 285 -956 4 0 208 449 210 379 -957 4 0 210 379 220 208 -958 4 0 551 520 10 467 -959 4 0 359 89 339 106 -960 4 0 110 353 365 116 -961 4 0 353 511 110 365 -962 4 0 118 141 145 152 -963 4 0 34 28 466 29 -964 4 0 621 347 59 54 -965 4 0 59 621 79 347 -966 4 0 342 80 122 302 -967 4 0 369 123 154 342 -968 4 0 123 85 122 342 -969 4 0 122 342 85 80 -970 4 0 450 349 612 482 -971 4 0 564 55 436 413 -972 4 0 40 38 29 34 -973 4 0 606 641 413 436 -974 4 0 28 35 335 33 -975 4 0 34 25 32 29 -976 4 0 487 548 495 479 -977 4 0 187 209 196 348 -978 4 0 461 479 430 495 -979 4 0 311 513 509 186 -980 4 0 395 311 348 186 -981 4 0 187 196 209 444 -982 4 0 485 540 426 373 -983 4 0 21 580 24 447 -984 4 0 412 447 21 562 -985 4 0 412 562 21 446 -986 4 0 447 580 24 10 -987 4 0 46 527 610 413 -988 4 0 229 392 216 222 -989 4 0 323 281 366 274 -990 4 0 281 301 274 323 -991 4 0 599 625 429 282 -992 4 0 608 25 32 34 -993 4 0 372 288 284 340 -994 4 0 227 324 190 308 -995 4 0 373 196 348 187 -996 4 0 425 25 34 29 -997 4 0 628 448 373 591 -998 4 0 591 448 373 398 -999 4 0 477 43 41 527 -1000 4 0 80 71 81 302 -1001 4 0 457 477 41 527 -1002 4 0 647 487 430 479 -1003 4 0 628 373 497 441 -1004 4 0 578 628 441 374 -1005 4 0 410 24 335 350 -1006 4 0 393 311 160 150 -1007 4 0 367 118 137 141 -1008 4 0 343 488 356 396 -1009 4 0 87 72 61 58 -1010 4 0 488 588 356 396 -1011 4 0 476 54 59 347 -1012 4 0 94 353 61 77 -1013 4 0 110 353 87 107 -1014 4 0 251 245 322 201 -1015 4 0 245 179 322 201 -1016 4 0 11 422 486 14 -1017 4 0 287 588 464 528 -1018 4 0 10 467 412 551 -1019 4 0 13 551 412 467 -1020 4 0 371 467 551 13 -1021 4 0 551 10 8 412 -1022 4 0 113 164 361 136 -1023 4 0 425 25 15 26 -1024 4 0 140 348 125 160 -1025 4 0 451 588 528 286 -1026 4 0 180 152 145 141 -1027 4 0 607 16 539 470 -1028 4 0 374 570 400 373 -1029 4 0 373 374 556 400 -1030 4 0 374 373 556 628 -1031 4 0 441 628 578 483 -1032 4 0 497 642 418 629 -1033 4 0 167 89 106 339 -1034 4 0 346 440 390 521 -1035 4 0 369 123 342 375 -1036 4 0 583 382 498 361 -1037 4 0 564 75 72 61 -1038 4 0 564 61 64 75 -1039 4 0 345 517 79 92 -1040 4 0 533 529 223 222 -1041 4 0 498 582 576 375 -1042 4 0 575 376 609 49 -1043 4 0 412 10 8 447 -1044 4 0 561 472 549 468 -1045 4 0 239 322 252 231 -1046 4 0 397 12 4 14 -1047 4 0 367 369 434 576 -1048 4 0 206 313 322 179 -1049 4 0 322 179 313 354 -1050 4 0 12 2 4 7 -1051 4 0 346 638 26 608 -1052 4 0 66 87 57 58 -1053 4 0 72 58 564 61 -1054 4 0 322 207 231 239 -1055 4 0 201 354 322 207 -1056 4 0 239 255 322 201 -1057 4 0 533 402 529 222 -1058 4 0 60 518 564 65 -1059 4 0 11 486 12 14 -1060 4 0 118 168 141 152 -1061 4 0 60 376 564 518 -1062 4 0 576 375 582 115 -1063 4 0 515 34 399 351 -1064 4 0 334 564 64 363 -1065 4 0 311 331 150 305 -1066 4 0 473 538 597 519 -1067 4 0 564 594 575 475 -1068 4 0 36 30 432 410 -1069 4 0 343 396 356 279 -1070 4 0 281 279 356 396 -1071 4 0 281 274 301 356 -1072 4 0 486 7 14 422 -1073 4 0 642 153 585 629 -1074 4 0 153 642 628 629 -1075 4 0 503 447 8 10 -1076 4 0 461 430 620 416 -1077 4 0 493 270 275 280 -1078 4 0 275 493 532 323 -1079 4 0 532 493 282 323 -1080 4 0 461 495 430 416 -1081 4 0 493 532 280 275 -1082 4 0 389 381 47 413 -1083 4 0 49 413 626 527 -1084 4 0 500 189 186 181 -1085 4 0 498 382 582 375 -1086 4 0 410 30 24 377 -1087 4 0 30 410 36 377 -1088 4 0 366 265 279 272 -1089 4 0 608 34 32 31 -1090 4 0 527 40 43 38 -1091 4 0 46 527 41 38 -1092 4 0 43 527 38 41 -1093 4 0 597 639 7 486 -1094 4 0 306 298 336 331 -1095 4 0 11 26 15 543 -1096 4 0 554 11 15 543 -1097 4 0 416 430 620 649 -1098 4 0 291 290 364 327 -1099 4 0 637 498 375 361 -1100 4 0 39 548 33 461 -1101 4 0 422 634 25 543 -1102 4 0 583 582 382 113 -1103 4 0 367 114 118 141 -1104 4 0 473 422 11 554 -1105 4 0 178 197 168 141 -1106 4 0 375 369 123 115 -1107 4 0 91 123 115 375 -1108 4 0 377 350 36 553 -1109 4 0 173 181 516 186 -1110 4 0 110 95 107 87 -1111 4 0 353 107 163 87 -1112 4 0 46 527 42 610 -1113 4 0 500 209 348 202 -1114 4 0 334 61 564 57 -1115 4 0 510 103 140 161 -1116 4 0 160 104 140 133 -1117 4 0 486 11 473 422 -1118 4 0 336 611 331 514 -1119 4 0 576 434 637 369 -1120 4 0 29 466 524 20 -1121 4 0 366 279 265 258 -1122 4 0 366 279 258 274 -1123 4 0 89 484 338 454 -1124 4 0 462 621 568 534 -1125 4 0 133 104 140 103 -1126 4 0 462 534 568 531 -1127 4 0 521 440 390 563 -1128 4 0 383 440 563 390 -1129 4 0 141 154 170 369 -1130 4 0 141 193 369 170 -1131 4 0 173 181 510 516 -1132 4 0 348 510 181 516 -1133 4 0 324 366 276 272 -1134 4 0 415 324 366 323 -1135 4 0 477 527 507 43 -1136 4 0 26 25 440 346 -1137 4 0 430 333 42 479 -1138 4 0 460 452 564 75 -1139 4 0 31 515 32 592 -1140 4 0 181 189 187 500 -1141 4 0 389 527 413 47 -1142 4 0 413 389 626 527 -1143 4 0 376 590 49 575 -1144 4 0 331 611 185 508 -1145 4 0 223 392 407 219 -1146 4 0 223 233 392 219 -1147 4 0 538 648 597 519 -1148 4 0 597 648 538 486 -1149 4 0 557 537 568 499 -1150 4 0 553 39 461 416 -1151 4 0 290 528 451 287 -1152 4 0 554 453 332 560 -1153 4 0 601 467 458 9 -1154 4 0 623 525 535 566 -1155 4 0 566 525 535 526 -1156 4 0 378 106 431 418 -1157 4 0 53 496 352 347 -1158 4 0 564 300 419 72 -1159 4 0 564 452 300 72 -1160 4 0 2 6 7 486 -1161 4 0 421 451 528 286 -1162 4 0 451 528 588 287 -1163 4 0 409 595 433 491 -1164 4 0 79 621 78 401 -1165 4 0 401 621 78 555 -1166 4 0 78 537 555 621 -1167 4 0 599 340 282 301 -1168 4 0 493 599 282 301 -1169 4 0 430 620 42 333 -1170 4 0 565 498 112 637 -1171 4 0 583 498 112 565 -1172 4 0 599 429 536 282 -1173 4 0 599 625 459 429 -1174 4 0 543 554 332 15 -1175 4 0 474 112 637 565 -1176 4 0 364 290 528 327 -1177 4 0 548 461 479 333 -1178 4 0 461 333 430 479 -1179 4 0 383 390 346 440 -1180 4 0 65 60 64 564 -1181 4 0 65 64 75 564 -1182 4 0 383 638 346 390 -1183 4 0 380 468 614 549 -1184 4 0 532 282 276 323 -1185 4 0 157 331 504 150 -1186 4 0 89 454 338 339 -1187 4 0 167 454 89 339 -1188 4 0 8 5 10 551 -1189 4 0 5 520 10 551 -1190 4 0 492 626 545 389 -1191 4 0 389 626 545 469 -1192 4 0 37 33 35 29 -1193 4 0 615 568 499 557 -1194 4 0 500 186 480 202 -1195 4 0 54 56 53 496 -1196 4 0 294 295 291 385 -1197 4 0 295 291 385 327 -1198 4 0 295 294 292 385 -1199 4 0 474 637 361 565 -1200 4 0 497 373 426 540 -1201 4 0 40 29 28 34 -1202 4 0 535 525 581 526 -1203 4 0 328 92 79 517 -1204 4 0 496 56 352 604 -1205 4 0 459 536 646 493 -1206 4 0 459 429 624 536 -1207 4 0 493 536 280 532 -1208 4 0 25 346 26 608 -1209 4 0 351 399 41 38 -1210 4 0 43 41 38 351 -1211 4 0 527 413 47 606 -1212 4 0 308 252 322 231 -1213 4 0 308 255 322 252 -1214 4 0 256 231 252 308 -1215 4 0 256 308 259 247 -1216 4 0 21 30 24 410 -1217 4 0 21 30 562 24 -1218 4 0 315 621 555 568 -1219 4 0 217 219 223 407 -1220 4 0 225 223 219 233 -1221 4 0 407 217 529 223 -1222 4 0 381 452 300 564 -1223 4 0 595 635 433 491 -1224 4 0 414 385 291 327 -1225 4 0 416 39 461 495 -1226 4 0 461 39 548 495 -1227 4 0 461 548 479 495 -1228 4 0 301 282 281 464 -1229 4 0 301 282 285 340 -1230 4 0 315 621 568 462 -1231 4 0 372 289 288 285 -1232 4 0 289 288 285 414 -1233 4 0 431 153 106 378 -1234 4 0 55 641 589 436 -1235 4 0 651 572 638 608 -1236 4 0 564 452 72 75 -1237 4 0 573 534 567 613 -1238 4 0 567 645 600 534 -1239 4 0 499 568 577 537 -1240 4 0 414 327 291 364 -1241 4 0 561 549 614 468 -1242 4 0 338 489 566 64 -1243 4 0 89 484 489 338 -1244 4 0 385 294 465 344 -1245 4 0 445 196 444 209 -1246 4 0 209 550 444 427 -1247 4 0 490 14 11 12 -1248 4 0 490 18 14 12 -1249 4 0 597 648 486 7 -1250 4 0 486 639 7 422 -1251 4 0 639 473 597 631 -1252 4 0 529 491 616 533 -1253 4 0 435 320 125 373 -1254 4 0 616 491 529 541 -1255 4 0 497 628 642 629 -1256 4 0 46 52 413 602 -1257 4 0 623 359 566 338 -1258 4 0 497 506 629 418 -1259 4 0 99 359 623 338 -1260 4 0 65 64 454 75 -1261 4 0 209 617 550 427 -1262 4 0 86 328 144 128 -1263 4 0 570 187 374 368 -1264 4 0 403 86 633 328 -1265 4 0 601 522 458 523 -1266 4 0 604 352 472 56 -1267 4 0 273 312 319 324 -1268 4 0 380 614 63 549 -1269 4 0 561 549 63 614 -1270 4 0 623 525 566 359 -1271 4 0 359 525 566 526 -1272 4 0 566 89 526 489 -1273 4 0 113 382 358 471 -1274 4 0 582 471 382 113 -1275 4 0 523 467 458 601 -1276 4 0 268 308 260 263 -1277 4 0 374 628 556 578 -1278 4 0 498 582 382 583 -1279 4 0 586 645 534 557 -1280 4 0 361 176 369 136 -1281 4 0 277 356 274 279 -1282 4 0 576 637 375 369 -1283 4 0 637 375 369 361 -1284 4 0 373 556 569 400 -1285 4 0 556 373 569 628 -1286 4 0 447 562 24 21 -1287 4 0 47 492 527 507 -1288 4 0 495 39 548 487 -1289 4 0 572 608 651 650 -1290 4 0 541 619 542 574 -1291 4 0 27 562 21 30 -1292 4 0 21 446 562 27 -1293 4 0 517 328 614 79 -1294 4 0 545 530 622 575 -1295 4 0 522 371 523 558 -1296 4 0 523 371 520 558 -1297 4 0 471 91 115 375 -1298 4 0 578 127 628 556 -1299 4 0 127 153 628 556 -1300 4 0 641 413 55 52 -1301 4 0 55 564 436 58 -1302 4 0 564 334 57 594 -1303 4 0 55 641 436 413 -1304 4 0 575 413 49 594 -1305 4 0 15 17 596 560 -1306 4 0 521 440 563 571 -1307 4 0 632 581 62 526 -1308 4 0 285 372 301 340 -1309 4 0 290 451 528 421 -1310 4 0 326 57 564 58 -1311 4 0 205 212 241 204 -1312 4 0 564 452 469 381 -1313 4 0 239 322 207 201 -1314 4 0 223 392 529 407 -1315 4 0 381 564 413 469 -1316 4 0 395 513 311 186 -1317 4 0 389 469 413 626 -1318 4 0 136 361 583 565 -1319 4 0 586 645 567 534 -1320 4 0 32 25 608 346 -1321 4 0 369 367 137 141 -1322 4 0 469 575 545 622 -1323 4 0 593 543 634 422 -1324 4 0 373 569 628 591 -1325 4 0 556 569 153 628 -1326 4 0 196 187 373 570 -1327 4 0 167 454 339 155 -1328 4 0 590 626 575 530 -1329 4 0 536 493 282 532 -1330 4 0 133 140 160 510 -1331 4 0 376 363 64 564 -1332 4 0 209 427 444 587 -1333 4 0 571 440 563 383 -1334 4 0 498 375 576 637 -1335 4 0 531 534 568 579 -1336 4 0 534 568 557 621 -1337 4 0 218 392 643 238 -1338 4 0 568 555 577 537 -1339 4 0 475 609 363 49 -1340 4 0 363 609 475 564 -1341 4 0 393 311 150 305 -1342 4 0 19 425 17 596 -1343 4 0 596 17 603 560 -1344 4 0 522 428 371 558 -1345 4 0 127 628 497 483 -1346 4 0 492 48 545 626 -1347 4 0 21 607 24 580 -1348 4 0 132 117 318 128 -1349 4 0 633 132 547 142 -1350 4 0 437 381 419 413 -1351 4 0 419 381 437 300 -1352 4 0 173 181 186 171 -1353 4 0 405 613 600 534 -1354 4 0 632 526 62 64 -1355 4 0 489 484 64 338 -1356 4 0 600 54 53 621 -1357 4 0 29 20 28 466 -1358 4 0 20 28 466 443 -1359 4 0 49 48 626 590 -1360 4 0 63 345 614 380 -1361 4 0 584 345 63 380 -1362 4 0 470 607 559 478 -1363 4 0 28 23 22 20 -1364 4 0 478 23 22 28 -1365 4 0 473 422 554 631 -1366 4 0 555 537 568 621 -1367 4 0 18 490 14 439 -1368 4 0 596 17 19 603 -1369 4 0 571 440 18 521 -1370 4 0 542 491 616 541 -1371 4 0 534 568 615 557 -1372 4 0 534 568 579 615 -1373 4 0 392 222 229 238 -1374 4 0 626 48 530 590 -1375 4 0 238 406 229 423 -1376 4 0 629 585 642 418 -1377 4 0 418 506 629 378 -1378 4 0 378 431 629 418 -1379 4 0 153 448 628 591 -1380 4 0 591 569 628 153 -1381 4 0 550 209 500 627 -1382 4 0 515 31 32 34 -1383 4 0 209 627 550 617 -1384 4 0 569 556 153 400 -1385 4 0 645 621 557 54 -1386 4 0 529 491 533 223 -1387 4 0 601 1 458 522 -1388 4 0 522 601 1 3 -1389 4 0 359 339 99 106 -1390 4 0 338 99 359 339 -1391 4 0 49 575 626 413 -1392 4 0 473 597 631 453 -1393 4 0 605 564 518 460 -1394 4 0 222 392 402 529 -1395 4 0 113 382 583 361 -1396 4 0 33 335 28 23 -1397 4 0 370 52 594 46 -1398 4 0 408 505 580 607 -1399 4 0 413 640 602 641 -1400 4 0 630 376 564 609 -1401 4 0 49 376 609 363 -1402 4 0 363 376 609 564 -1403 4 0 393 456 311 305 -1404 4 0 218 221 386 643 -1405 4 0 643 386 423 221 -1406 4 0 141 123 369 367 -1407 4 0 498 382 375 361 -1408 4 0 474 637 369 361 -1409 4 0 558 371 520 551 -1410 4 0 558 428 371 551 -1411 4 0 374 441 411 373 -1412 4 0 422 25 26 543 -1413 4 0 25 17 15 634 -1414 4 0 606 44 610 45 -1415 4 0 367 115 369 576 -1416 4 0 367 576 546 115 -1417 4 0 636 573 567 613 -1418 4 0 615 51 579 573 -1419 4 0 50 51 615 636 -1420 4 0 55 413 564 52 -1421 4 0 594 52 413 46 -1422 4 0 564 326 52 57 -1423 4 0 367 434 546 576 -1424 4 0 208 449 379 445 -1425 4 0 379 445 544 208 -1426 4 0 26 439 440 25 -1427 4 0 622 575 605 469 -1428 4 0 636 586 567 573 -1429 4 0 573 586 567 534 -1430 4 0 599 625 340 283 -1431 4 0 605 630 518 564 -1432 4 0 171 510 181 161 -1433 4 0 32 29 38 34 -1434 4 0 402 216 392 222 -1435 4 0 223 222 392 238 -1436 4 0 389 492 527 47 -1437 4 0 389 492 626 527 -1438 4 0 577 555 78 537 -1439 4 0 315 621 401 555 -1440 4 0 15 598 634 560 -1441 4 0 634 17 15 560 -1442 4 0 481 142 328 633 -1443 4 0 128 328 144 138 -1444 4 0 413 610 640 606 -1445 4 0 640 606 610 45 -1446 4 0 379 449 444 445 -1447 4 0 187 449 196 444 -1448 4 0 445 449 444 196 -1449 4 0 605 564 460 469 -1450 4 0 575 564 605 469 -1451 4 0 541 200 619 574 -1452 4 0 564 436 419 413 -1453 4 0 517 482 63 614 -1454 4 0 154 369 141 123 -1455 4 0 583 498 565 361 -1456 4 0 498 361 637 565 -1457 4 0 622 530 630 575 -1458 4 0 21 30 432 27 -1459 4 0 173 510 160 516 -1460 4 0 311 160 348 516 -1461 4 0 485 140 540 373 -1462 4 0 21 505 580 447 -1463 4 0 490 26 439 571 -1464 4 0 379 544 220 208 -1465 4 0 348 516 181 186 -1466 4 0 186 509 311 516 -1467 4 0 209 202 627 617 -1468 4 0 433 635 529 491 -1469 4 0 430 42 620 44 -1470 4 0 649 430 620 44 -1471 4 0 529 635 541 491 -1472 4 0 404 24 410 21 -1473 4 0 404 410 24 335 -1474 4 0 89 338 359 339 -1475 4 0 450 328 482 517 -1476 4 0 517 328 482 614 -1477 4 0 78 59 537 621 -1478 4 0 588 396 281 356 -1479 4 0 286 488 588 356 -1480 4 0 424 543 593 422 -1481 4 0 463 607 408 16 -1482 4 0 389 381 413 469 -1483 4 0 413 469 575 626 -1484 4 0 626 469 575 545 -1485 4 0 554 11 543 422 -1486 4 0 459 624 646 536 -1487 4 0 332 543 593 424 -1488 4 0 631 554 424 422 -1489 4 0 153 431 629 378 -1490 4 0 545 48 530 626 -1491 4 0 626 530 545 575 -1492 4 0 59 621 78 79 -1493 4 0 160 510 348 516 -1494 4 0 626 590 575 49 -1495 4 0 576 434 112 637 -1496 4 0 498 576 112 637 -1497 4 0 346 651 638 608 -1498 4 0 13 442 412 362 -1499 4 0 13 467 412 442 -1500 4 0 132 142 633 128 -1501 4 0 184 180 172 170 -1502 4 0 631 332 424 554 -1503 4 0 531 573 579 51 -1504 4 0 521 571 563 18 -1505 4 0 599 625 282 340 -1506 4 0 622 630 605 575 -1507 4 0 562 442 362 412 -1508 4 0 193 180 170 141 -1509 4 0 50 644 636 615 -1510 4 0 443 466 20 19 -1511 4 0 616 542 533 491 -1512 4 0 413 594 564 52 -1513 4 0 621 53 600 405 -1514 4 0 362 562 446 27 -1515 4 0 403 547 321 481 -1516 4 0 403 481 321 329 -1517 4 0 562 442 412 10 -1518 4 0 493 459 536 599 -1519 4 0 493 599 536 282 -1520 4 0 450 86 328 517 -1521 4 0 413 602 610 46 -1522 4 0 29 23 28 20 -1523 4 0 223 409 433 491 -1524 4 0 621 59 537 54 -1525 4 0 13 362 412 446 -1526 4 0 439 422 11 14 -1527 4 0 639 473 631 422 -1528 4 0 450 612 584 517 -1529 4 0 450 482 612 517 -1530 4 0 413 641 602 52 -1531 4 0 447 10 24 562 -1532 4 0 531 573 534 579 -1533 4 0 380 345 468 604 -1534 4 0 587 427 444 618 -1535 4 0 613 567 600 534 -1536 4 0 218 386 238 643 -1537 4 0 643 238 423 386 -1538 4 0 347 496 352 604 -1539 4 0 63 345 517 614 -1540 4 0 584 612 63 517 -1541 4 0 629 431 585 418 -1542 4 0 153 431 585 629 -1543 4 0 463 539 478 607 -1544 4 0 463 539 607 16 -1545 4 0 564 609 475 575 -1546 4 0 533 529 402 616 -1547 4 0 376 630 564 518 -1548 4 0 645 54 600 621 -1549 4 0 380 468 472 604 -1550 4 0 604 468 472 352 -1551 4 0 380 468 549 472 -1552 4 0 570 187 373 374 -1553 4 0 606 413 641 640 -1554 4 0 413 610 602 640 -1555 4 0 458 467 13 9 -1556 4 0 467 458 13 371 -1557 4 0 11 422 26 543 -1558 4 0 25 17 425 15 -1559 4 0 646 536 280 493 -1560 4 0 646 624 280 536 -1561 4 0 647 430 44 42 -1562 4 0 618 544 220 379 -1563 4 0 648 6 486 7 -1564 4 0 648 6 538 486 -1565 4 0 403 633 547 481 -1566 4 0 403 328 633 481 -1567 4 0 483 127 628 578 -1568 4 0 486 7 12 14 -1569 4 0 53 56 352 496 -1570 4 0 340 288 284 625 -1571 4 0 283 340 284 625 -1572 4 0 561 352 472 468 -1573 4 0 86 450 328 403 -1574 4 0 329 403 481 328 -1575 4 0 455 288 284 372 -1576 4 0 501 288 284 455 -1577 4 0 376 530 575 630 -1578 4 0 630 376 609 575 -1579 4 0 430 479 42 647 -1580 4 0 621 405 600 534 -1581 4 0 22 28 20 443 -1582 4 0 643 238 229 423 -1583 4 0 481 633 547 142 -1584 4 0 558 428 551 652 -1585 4 0 509 611 331 508 -1586 4 0 513 514 331 611 -1587 4 0 509 513 331 611 -1588 4 0 601 9 1 3 -1589 4 0 289 288 344 501 -1590 4 0 515 32 399 34 -1591 4 0 403 321 349 329 -1592 4 0 392 229 643 238 -1593 4 0 618 445 544 379 -1594 4 0 618 587 544 445 -1595 4 0 531 613 534 573 -1596 4 0 629 153 448 628 -1597 4 0 538 473 597 486 -1598 4 0 597 473 639 486 -1599 4 0 650 31 608 346 -1600 4 0 607 505 580 21 -1601 4 0 288 455 289 372 -1602 4 0 289 455 288 501 -1603 4 0 376 530 590 575 -1604 4 0 49 594 475 575 -1605 4 0 356 279 281 274 -1606 4 0 550 209 444 500 -1607 4 0 362 412 446 562 -1608 4 0 529 433 491 223 -1609 4 0 455 372 284 283 -1610 4 0 465 501 455 289 -1611 4 0 465 289 344 501 -1612 4 0 445 209 444 587 -1613 4 0 153 642 127 628 -1614 4 0 294 385 291 414 -1615 4 0 283 625 459 599 -1616 4 0 613 531 51 573 -1617 4 0 636 573 613 51 -1618 4 0 557 621 568 537 -1619 4 0 558 551 520 5 -1620 4 0 500 209 202 627 -1621 4 0 635 200 541 574 -1622 4 0 595 200 635 574 -1623 4 0 558 652 551 5 -1624 4 0 534 579 573 615 -1625 4 0 605 575 630 564 -1626 4 0 31 346 32 608 -1627 4 0 631 424 639 422 -1628 4 0 383 346 638 26 -1629 4 0 469 575 564 413 -1630 4 0 15 560 332 598 -1631 4 0 15 554 332 560 -1632 4 0 586 557 534 615 -1633 4 0 573 586 534 615 -1634 4 0 332 543 598 593 -1635 4 0 543 332 598 15 -1636 4 0 609 575 564 630 -1637 4 0 554 631 332 453 -1638 4 0 424 554 543 422 -1639 4 0 608 346 651 650 -1640 4 0 487 495 430 479 -1641 4 0 645 621 534 557 -1642 4 0 645 621 600 534 -1643 4 0 542 491 541 574 -1644 4 0 541 635 574 491 -1645 4 0 636 644 586 573 -1646 4 0 573 586 615 644 -1647 4 0 543 634 598 593 -1648 4 0 497 127 642 628 -1649 4 0 598 543 15 634 -1650 4 0 25 15 543 634 -1651 4 0 473 519 597 453 -1652 4 0 595 574 635 491 -1653 4 0 636 51 615 573 -1654 4 0 644 573 636 615 -$EndElements -$ElementData -1 -"color" -1 -0.0 -3 -0 -1 -1654 -1 7.56199 -2 4.86806 -3 4.40144 -4 6.42934 -5 4.22059 -6 5.73014 -7 6.38728 -8 6.65278 -9 6.11566 -10 8.59831 -11 4.59846 -12 3.75402 -13 4.81655 -14 5.303 -15 4.23688 -16 4.44352 -17 9.61146 -18 4.02007 -19 6.55381 -20 4.32183 -21 3.77651 -22 4.28126 -23 4.67035 -24 4.25302 -25 3.24949 -26 3.81682 -27 3.6786 -28 5.26567 -29 5.75883 -30 4.40013 -31 4.8604 -32 3.88159 -33 3.62912 -34 6.09732 -35 6.23606 -36 6.81931 -37 3.98474 -38 5.09313 -39 7.92162 -40 5.91342 -41 5.89822 -42 7.79576 -43 3.26766 -44 6.40478 -45 3.30998 -46 5.75804 -47 4.44341 -48 5.56712 -49 7.92901 -50 7.32341 -51 4.11488 -52 7.27876 -53 4.46523 -54 4.41017 -55 4.24074 -56 5.18865 -57 3.67411 -58 3.93323 -59 6.27803 -60 5.7046 -61 5.43246 -62 6.62422 -63 6.87791 -64 4.8315 -65 4.41484 -66 3.44597 -67 4.80585 -68 4.76576 -69 5.09151 -70 3.90176 -71 3.98978 -72 7.05842 -73 5.79771 -74 5.72113 -75 5.39406 -76 8.36837 -77 6.57885 -78 3.81664 -79 5.04602 -80 5.13045 -81 4.17786 -82 4.12193 -83 5.498 -84 3.9477 -85 4.17729 -86 4.53085 -87 4.87674 -88 5.63865 -89 4.91132 -90 5.42233 -91 7.2101 -92 6.62552 -93 5.99626 -94 5.99827 -95 4.64279 -96 4.40763 -97 7.74874 -98 4.60244 -99 4.55322 -100 3.87632 -101 4.43066 -102 3.5908 -103 4.4961 -104 4.6942 -105 6.85876 -106 6.09827 -107 5.34771 -108 3.88554 -109 4.99917 -110 5.07909 -111 5.16529 -112 6.2445 -113 4.05386 -114 4.0937 -115 4.62717 -116 4.31849 -117 3.26285 -118 3.35407 -119 3.68025 -120 5.5668 -121 4.22251 -122 4.99967 -123 4.02172 -124 7.95474 -125 6.88951 -126 5.11647 -127 3.62751 -128 3.75947 -129 5.71937 -130 4.65378 -131 4.22097 -132 3.54665 -133 4.0164 -134 4.14403 -135 5.88228 -136 3.88365 -137 4.9027 -138 3.88649 -139 3.94684 -140 5.61741 -141 4.86852 -142 4.25794 -143 7.6941 -144 4.73617 -145 3.12373 -146 4.88928 -147 3.62576 -148 4.16485 -149 3.9426 -150 3.46852 -151 6.77747 -152 5.33702 -153 6.56503 -154 5.80932 -155 6.15413 -156 6.85355 -157 4.14906 -158 6.14933 -159 6.69641 -160 3.64734 -161 9.61926 -162 4.84044 -163 6.90865 -164 3.44809 -165 7.79131 -166 4.2801 -167 3.52051 -168 5.45391 -169 3.39718 -170 4.71838 -171 3.97902 -172 6.18658 -173 4.17284 -174 3.92603 -175 6.61929 -176 4.47741 -177 5.4168 -178 4.66072 -179 6.78272 -180 8.92575 -181 3.81346 -182 3.82779 -183 3.59616 -184 4.4729 -185 4.12509 -186 9.13405 -187 4.3469 -188 4.17304 -189 3.37722 -190 4.22285 -191 3.89981 -192 3.56114 -193 5.07249 -194 5.73119 -195 3.31977 -196 7.91262 -197 4.91172 -198 4.3087 -199 4.15402 -200 7.6821 -201 4.41955 -202 4.64581 -203 4.16326 -204 7.51723 -205 6.23256 -206 4.63327 -207 4.85318 -208 6.48807 -209 3.61821 -210 5.09043 -211 8.53276 -212 6.52094 -213 3.90421 -214 4.42601 -215 3.83625 -216 5.54714 -217 3.51603 -218 3.84227 -219 5.7805 -220 5.82631 -221 4.20829 -222 5.28021 -223 4.00498 -224 6.02503 -225 5.06898 -226 5.05237 -227 4.69681 -228 4.59421 -229 4.21961 -230 4.26009 -231 5.25661 -232 6.12045 -233 4.26478 -234 3.42011 -235 3.96254 -236 5.39782 -237 5.34452 -238 5.57074 -239 3.58786 -240 5.48832 -241 5.04805 -242 6.99507 -243 4.86669 -244 8.67723 -245 4.42583 -246 6.08779 -247 8.30081 -248 4.11458 -249 7.33372 -250 4.37632 -251 6.55974 -252 4.06411 -253 7.65217 -254 4.98446 -255 7.00166 -256 9.18261 -257 3.97417 -258 3.76504 -259 4.45173 -260 3.78705 -261 8.85178 -262 5.99438 -263 3.68369 -264 4.64732 -265 5.79147 -266 6.364 -267 5.03453 -268 4.96944 -269 4.75356 -270 3.20622 -271 4.24018 -272 4.41709 -273 4.21315 -274 4.38612 -275 6.51163 -276 5.01322 -277 5.46653 -278 3.97587 -279 6.44458 -280 4.97667 -281 5.55967 -282 5.85158 -283 5.0027 -284 3.48534 -285 6.58618 -286 4.80285 -287 5.94949 -288 4.82903 -289 7.5367 -290 5.70127 -291 7.09932 -292 5.78603 -293 5.97275 -294 3.8847 -295 7.18803 -296 4.24715 -297 6.96264 -298 7.0952 -299 4.63648 -300 6.55609 -301 5.16808 -302 5.24241 -303 3.54707 -304 4.3924 -305 4.0213 -306 4.62658 -307 4.81065 -308 4.56642 -309 6.50736 -310 4.75308 -311 3.8215 -312 3.41325 -313 4.08294 -314 4.91393 -315 5.30757 -316 7.02954 -317 5.24187 -318 4.13738 -319 6.58547 -320 3.70239 -321 3.67817 -322 4.58162 -323 5.24492 -324 4.86733 -325 4.91221 -326 4.2757 -327 5.39939 -328 4.61598 -329 8.42673 -330 6.14168 -331 4.57608 -332 3.81451 -333 4.29124 -334 4.12792 -335 5.02872 -336 5.23399 -337 3.38677 -338 4.50817 -339 5.28311 -340 5.64442 -341 4.71327 -342 6.09192 -343 4.17098 -344 7.35127 -345 5.55052 -346 8.62264 -347 7.92427 -348 4.62414 -349 5.61806 -350 5.34776 -351 6.86714 -352 4.07043 -353 3.76518 -354 3.52133 -355 4.0364 -356 4.23061 -357 5.51497 -358 5.34338 -359 5.2446 -360 3.66377 -361 3.61536 -362 4.93218 -363 5.91732 -364 3.99037 -365 6.86673 -366 4.57754 -367 4.54417 -368 3.49705 -369 3.68222 -370 4.05441 -371 3.28484 -372 3.86728 -373 6.47469 -374 3.8287 -375 4.21948 -376 6.50072 -377 5.2599 -378 5.46621 -379 3.90163 -380 8.20664 -381 5.20216 -382 5.3226 -383 4.03878 -384 8.93219 -385 6.79859 -386 5.0444 -387 4.38992 -388 6.97679 -389 3.69486 -390 3.64051 -391 3.67985 -392 6.23422 -393 3.30838 -394 7.50667 -395 3.94216 -396 6.5134 -397 8.60865 -398 4.39139 -399 3.46463 -400 3.90001 -401 4.26802 -402 3.71403 -403 3.59913 -404 3.15595 -405 4.92885 -406 9.80662 -407 3.63884 -408 3.80748 -409 5.15094 -410 6.35325 -411 4.20196 -412 5.86833 -413 5.91247 -414 3.313 -415 3.37645 -416 4.89339 -417 5.19552 -418 6.53485 -419 7.98558 -420 3.6091 -421 4.05488 -422 4.29978 -423 4.68265 -424 8.03386 -425 5.59842 -426 4.70185 -427 3.61697 -428 5.69205 -429 7.16982 -430 4.13106 -431 3.56492 -432 4.22082 -433 4.55629 -434 4.58142 -435 5.53457 -436 6.93426 -437 4.80377 -438 3.84526 -439 3.94317 -440 3.45505 -441 5.16289 -442 3.25289 -443 3.95152 -444 5.40892 -445 6.95209 -446 4.15315 -447 5.02186 -448 4.01812 -449 3.96462 -450 7.14857 -451 4.97123 -452 4.79327 -453 4.80934 -454 7.58936 -455 4.07601 -456 4.83387 -457 4.20561 -458 4.19693 -459 4.28828 -460 6.64926 -461 6.10328 -462 5.14523 -463 3.29956 -464 7.82612 -465 6.51338 -466 5.14228 -467 6.36966 -468 4.00039 -469 5.25401 -470 4.90217 -471 3.91685 -472 4.04775 -473 3.71452 -474 4.00893 -475 6.15397 -476 4.73995 -477 4.49103 -478 6.01817 -479 4.51129 -480 4.45673 -481 4.53029 -482 4.39765 -483 4.84946 -484 4.41482 -485 5.22789 -486 4.83751 -487 4.52841 -488 4.37907 -489 4.53931 -490 3.94812 -491 5.60107 -492 7.82411 -493 6.10887 -494 3.61105 -495 6.22222 -496 5.87689 -497 4.37764 -498 5.74756 -499 5.41576 -500 3.94004 -501 5.49027 -502 4.62278 -503 5.90077 -504 3.72543 -505 8.58284 -506 9.99379 -507 3.93429 -508 7.00354 -509 3.34162 -510 6.26251 -511 4.5708 -512 4.61934 -513 6.10199 -514 7.60203 -515 3.49142 -516 6.17078 -517 5.25425 -518 6.30042 -519 5.72046 -520 4.47283 -521 4.83221 -522 4.41013 -523 5.97733 -524 3.99931 -525 4.76894 -526 3.74452 -527 6.2368 -528 4.09343 -529 6.26363 -530 6.83661 -531 3.96425 -532 3.43579 -533 5.77657 -534 5.34581 -535 4.68041 -536 4.37814 -537 5.99737 -538 5.3648 -539 5.4205 -540 4.22935 -541 5.82056 -542 3.98684 -543 3.28936 -544 4.1958 -545 4.33791 -546 4.85201 -547 5.22988 -548 6.51603 -549 4.38544 -550 4.03691 -551 4.28065 -552 7.54771 -553 5.3477 -554 3.98013 -555 3.65612 -556 3.6305 -557 4.96827 -558 7.0639 -559 5.12306 -560 5.26116 -561 3.98468 -562 4.06433 -563 4.43174 -564 9.65465 -565 4.48661 -566 7.06711 -567 6.01908 -568 5.78751 -569 6.07332 -570 8.58829 -571 7.11434 -572 3.46196 -573 5.46102 -574 6.3086 -575 5.34819 -576 6.91082 -577 4.47437 -578 7.81942 -579 6.82906 -580 4.72318 -581 4.06215 -582 9.60519 -583 5.3436 -584 4.7691 -585 4.475 -586 5.84693 -587 5.8161 -588 4.01326 -589 8.52049 -590 6.06203 -591 3.94 -592 6.42148 -593 6.28834 -594 4.88767 -595 7.62703 -596 7.56987 -597 5.54109 -598 4.11926 -599 6.37613 -600 4.92981 -601 4.80206 -602 3.26213 -603 6.37042 -604 5.17572 -605 3.76555 -606 5.26092 -607 4.19725 -608 3.19057 -609 5.88572 -610 5.22575 -611 3.782 -612 4.38116 -613 8.53952 -614 4.30787 -615 4.10562 -616 7.62857 -617 5.65392 -618 5.96086 -619 4.91053 -620 6.14863 -621 5.91276 -622 4.27409 -623 5.55369 -624 4.8645 -625 4.77293 -626 3.55957 -627 4.11882 -628 3.68402 -629 6.55336 -630 5.93665 -631 6.29134 -632 5.06148 -633 6.32722 -634 3.56814 -635 4.97852 -636 5.319 -637 7.67988 -638 4.9724 -639 3.58948 -640 3.2273 -641 4.94275 -642 6.132 -643 4.23477 -644 3.8824 -645 6.47761 -646 5.83872 -647 6.52367 -648 9.09261 -649 4.02275 -650 4.5423 -651 3.77518 -652 9.34733 -653 4.29857 -654 3.53165 -655 3.69875 -656 8.91855 -657 8.27777 -658 4.2927 -659 5.44146 -660 4.88306 -661 4.61662 -662 4.66585 -663 4.08773 -664 5.47614 -665 4.82537 -666 5.34588 -667 5.09433 -668 4.74203 -669 4.80349 -670 5.17033 -671 5.55982 -672 5.85245 -673 8.50255 -674 5.05679 -675 8.2833 -676 4.20019 -677 6.65706 -678 5.50201 -679 3.83497 -680 8.04853 -681 3.98407 -682 4.14575 -683 4.40359 -684 3.83137 -685 7.5115 -686 4.55691 -687 5.02113 -688 4.10109 -689 3.2165 -690 6.76792 -691 7.39527 -692 5.09019 -693 4.66208 -694 4.89628 -695 3.82454 -696 7.89338 -697 4.34543 -698 4.53367 -699 4.2245 -700 7.97378 -701 5.36364 -702 5.48083 -703 5.18437 -704 7.54515 -705 8.01303 -706 6.9711 -707 5.10957 -708 4.65648 -709 4.17603 -710 3.95182 -711 4.30453 -712 4.83791 -713 5.75603 -714 6.26297 -715 4.26312 -716 4.92191 -717 6.49723 -718 5.39117 -719 7.63936 -720 3.8902 -721 5.26165 -722 3.56636 -723 5.80111 -724 8.11139 -725 6.99287 -726 6.0905 -727 4.48145 -728 6.29626 -729 6.41609 -730 4.82834 -731 4.30295 -732 5.95249 -733 9.1162 -734 7.17952 -735 4.41636 -736 7.00516 -737 5.38428 -738 4.57018 -739 5.16323 -740 6.21328 -741 3.84546 -742 8.92755 -743 4.95277 -744 5.60229 -745 4.74588 -746 4.39131 -747 3.53583 -748 4.71464 -749 3.85774 -750 4.32924 -751 4.21807 -752 5.56949 -753 3.92575 -754 4.08047 -755 4.19341 -756 5.43269 -757 5.08675 -758 7.55608 -759 4.60229 -760 5.26588 -761 6.53396 -762 6.09301 -763 8.49182 -764 3.65278 -765 3.7977 -766 4.72003 -767 5.07267 -768 5.39706 -769 5.74691 -770 7.17011 -771 4.60288 -772 6.53685 -773 5.03197 -774 4.75913 -775 5.21044 -776 8.20214 -777 5.1994 -778 5.72262 -779 5.56165 -780 5.11548 -781 4.91619 -782 4.4872 -783 5.68936 -784 4.47124 -785 5.13239 -786 3.56721 -787 6.21762 -788 7.03673 -789 4.75488 -790 6.58105 -791 6.02163 -792 4.0573 -793 5.61253 -794 4.57518 -795 6.37637 -796 4.44356 -797 4.71151 -798 7.569 -799 4.14096 -800 5.59666 -801 4.97895 -802 3.58641 -803 3.31542 -804 5.39692 -805 4.83649 -806 3.97031 -807 5.44832 -808 4.02433 -809 3.60805 -810 5.34786 -811 3.58587 -812 6.69862 -813 3.32895 -814 4.09119 -815 4.58371 -816 3.80674 -817 6.44114 -818 6.223 -819 4.0441 -820 4.80123 -821 4.30222 -822 6.44328 -823 5.35506 -824 6.92359 -825 3.89947 -826 6.49231 -827 4.93294 -828 4.30558 -829 6.36489 -830 6.66548 -831 4.33778 -832 4.17984 -833 5.47755 -834 6.30491 -835 4.8866 -836 3.97457 -837 5.46085 -838 9.49042 -839 5.90533 -840 4.86468 -841 6.77968 -842 4.50722 -843 6.47377 -844 6.71684 -845 7.28311 -846 4.96895 -847 4.62845 -848 4.76509 -849 4.94072 -850 6.06047 -851 5.03461 -852 4.02971 -853 6.54434 -854 6.22769 -855 4.93337 -856 3.68803 -857 3.53863 -858 3.91408 -859 5.65137 -860 7.37176 -861 4.59552 -862 6.93334 -863 3.44661 -864 6.33348 -865 5.02479 -866 5.35196 -867 4.49256 -868 4.90908 -869 5.13244 -870 6.53011 -871 6.74559 -872 6.30754 -873 4.22522 -874 5.22566 -875 4.48669 -876 6.19697 -877 5.32891 -878 5.90513 -879 5.26841 -880 4.69307 -881 6.53259 -882 5.37303 -883 4.84613 -884 6.84862 -885 8.57067 -886 4.51242 -887 4.09543 -888 3.96732 -889 3.54212 -890 7.13459 -891 3.96056 -892 3.53356 -893 7.88643 -894 3.71017 -895 4.50089 -896 6.13237 -897 9.12911 -898 5.99732 -899 4.20221 -900 5.07845 -901 7.39265 -902 3.4358 -903 6.92631 -904 6.19262 -905 8.37263 -906 3.90019 -907 5.27365 -908 8.43827 -909 4.30468 -910 7.89174 -911 4.55601 -912 5.99339 -913 3.9157 -914 6.4819 -915 5.12264 -916 4.56214 -917 4.68284 -918 3.62525 -919 5.50492 -920 3.3911 -921 5.44747 -922 5.1212 -923 3.91631 -924 4.09731 -925 3.90953 -926 3.24567 -927 3.84614 -928 3.16043 -929 5.57228 -930 5.27177 -931 4.70165 -932 6.21956 -933 6.82471 -934 4.75076 -935 5.36529 -936 7.32308 -937 5.56332 -938 4.4607 -939 4.55218 -940 4.41271 -941 4.16343 -942 3.60628 -943 5.64808 -944 5.0414 -945 4.07399 -946 8.06578 -947 5.13059 -948 3.32765 -949 6.87378 -950 6.8715 -951 5.34151 -952 7.4087 -953 4.97386 -954 4.34552 -955 4.26796 -956 4.19602 -957 3.42375 -958 5.85754 -959 5.66926 -960 8.16791 -961 5.85989 -962 5.27303 -963 4.04843 -964 3.73455 -965 6.69521 -966 3.19527 -967 5.41381 -968 4.9373 -969 3.34371 -970 5.277 -971 5.14515 -972 4.27359 -973 3.45159 -974 4.18209 -975 3.97173 -976 6.6748 -977 5.48345 -978 5.03449 -979 6.2847 -980 4.28563 -981 4.42304 -982 8.30151 -983 8.10918 -984 5.2181 -985 6.07928 -986 7.4987 -987 3.86094 -988 7.79415 -989 4.1437 -990 4.22013 -991 4.84238 -992 4.18954 -993 4.63546 -994 5.03533 -995 5.68754 -996 3.66053 -997 4.99215 -998 3.9023 -999 6.64228 -1000 3.66927 -1001 7.59005 -1002 7.84943 -1003 6.12621 -1004 4.28124 -1005 5.25678 -1006 4.49358 -1007 3.83982 -1008 4.1934 -1009 4.15133 -1010 5.9278 -1011 6.99563 -1012 5.9841 -1013 8.90109 -1014 7.652 -1015 7.06981 -1016 4.2989 -1017 4.43713 -1018 3.94864 -1019 5.25543 -1020 5.67571 -1021 4.55211 -1022 5.55705 -1023 4.35115 -1024 3.53053 -1025 4.95254 -1026 5.0626 -1027 5.91199 -1028 3.64351 -1029 4.37971 -1030 6.08977 -1031 8.17508 -1032 9.08688 -1033 6.27308 -1034 5.95361 -1035 5.76509 -1036 4.96722 -1037 5.54433 -1038 4.46812 -1039 5.33303 -1040 6.1708 -1041 6.72636 -1042 5.29678 -1043 4.55251 -1044 8.94976 -1045 3.51383 -1046 9.65923 -1047 5.82992 -1048 4.65022 -1049 4.9202 -1050 5.80657 -1051 3.98189 -1052 5.41173 -1053 4.62405 -1054 3.74779 -1055 3.72462 -1056 4.19243 -1057 8.98073 -1058 5.19122 -1059 4.03261 -1060 3.37577 -1061 5.38447 -1062 7.73223 -1063 8.13835 -1064 4.25916 -1065 4.74505 -1066 7.41008 -1067 7.34217 -1068 4.67887 -1069 7.30568 -1070 4.68001 -1071 4.1343 -1072 4.30236 -1073 4.91304 -1074 3.81816 -1075 4.33604 -1076 7.30661 -1077 3.71466 -1078 5.48295 -1079 5.02695 -1080 5.64749 -1081 4.97985 -1082 5.0635 -1083 4.18982 -1084 6.63653 -1085 6.50817 -1086 4.06997 -1087 4.6217 -1088 3.9456 -1089 5.86381 -1090 4.34958 -1091 4.72955 -1092 7.68562 -1093 4.76352 -1094 4.38867 -1095 7.24025 -1096 8.56583 -1097 7.12327 -1098 7.63126 -1099 4.98995 -1100 5.51299 -1101 6.22274 -1102 8.55485 -1103 4.67541 -1104 5.56093 -1105 4.11592 -1106 5.39012 -1107 4.91738 -1108 4.55802 -1109 9.81191 -1110 9.03824 -1111 4.91096 -1112 5.68686 -1113 5.43295 -1114 4.5376 -1115 7.76145 -1116 6.56722 -1117 5.56414 -1118 6.48512 -1119 7.08636 -1120 4.86379 -1121 5.06374 -1122 4.43781 -1123 6.37562 -1124 8.00607 -1125 5.72785 -1126 7.44421 -1127 8.55665 -1128 5.86133 -1129 9.30702 -1130 5.39706 -1131 9.72751 -1132 3.48947 -1133 4.01753 -1134 6.24749 -1135 5.18517 -1136 3.7291 -1137 5.12041 -1138 5.72019 -1139 8.40329 -1140 4.29092 -1141 6.32703 -1142 4.81643 -1143 6.2805 -1144 8.28778 -1145 6.11067 -1146 4.67958 -1147 6.84822 -1148 6.91117 -1149 8.73063 -1150 5.19026 -1151 8.76106 -1152 7.46817 -1153 4.01789 -1154 4.79286 -1155 4.32607 -1156 8.23324 -1157 4.8066 -1158 6.2838 -1159 6.4227 -1160 9.33195 -1161 4.68307 -1162 6.92146 -1163 6.30771 -1164 7.57291 -1165 7.22122 -1166 6.39772 -1167 5.60827 -1168 3.81708 -1169 3.25156 -1170 8.08526 -1171 7.77888 -1172 4.56788 -1173 8.09687 -1174 3.49101 -1175 4.88315 -1176 9.9666 -1177 5.09136 -1178 4.89489 -1179 8.84418 -1180 4.97986 -1181 5.33513 -1182 5.84621 -1183 3.85303 -1184 4.81127 -1185 7.16765 -1186 5.06141 -1187 7.20188 -1188 4.7328 -1189 5.06946 -1190 3.66104 -1191 4.29874 -1192 3.89884 -1193 6.80851 -1194 5.53224 -1195 7.4339 -1196 5.48488 -1197 8.32916 -1198 5.44496 -1199 5.953 -1200 7.10064 -1201 4.28803 -1202 5.27418 -1203 3.79067 -1204 3.44724 -1205 4.17183 -1206 7.19842 -1207 4.32375 -1208 3.51299 -1209 7.615 -1210 5.69386 -1211 6.73423 -1212 4.51568 -1213 6.08616 -1214 5.21758 -1215 8.14411 -1216 4.06477 -1217 5.22976 -1218 5.07475 -1219 5.92439 -1220 4.9689 -1221 5.09276 -1222 7.43835 -1223 6.71407 -1224 7.02283 -1225 6.5295 -1226 4.40292 -1227 5.83422 -1228 3.70634 -1229 3.52758 -1230 6.0864 -1231 4.79487 -1232 5.2648 -1233 6.60461 -1234 4.95882 -1235 9.41937 -1236 5.13095 -1237 5.28013 -1238 5.44854 -1239 7.71878 -1240 5.56885 -1241 8.76006 -1242 4.56393 -1243 5.90289 -1244 6.17245 -1245 5.47762 -1246 6.85481 -1247 3.17205 -1248 4.86204 -1249 4.43452 -1250 6.97671 -1251 5.3337 -1252 5.43708 -1253 5.01141 -1254 7.23168 -1255 3.70348 -1256 4.66871 -1257 8.66635 -1258 7.63642 -1259 6.58896 -1260 5.63525 -1261 5.18847 -1262 4.60493 -1263 8.295 -1264 7.64526 -1265 3.59029 -1266 8.30829 -1267 5.61988 -1268 4.40627 -1269 8.59727 -1270 7.237 -1271 5.90024 -1272 4.03286 -1273 4.8429 -1274 7.10562 -1275 6.50655 -1276 4.64487 -1277 4.69878 -1278 7.97432 -1279 4.02501 -1280 5.38605 -1281 4.92341 -1282 5.07646 -1283 3.75685 -1284 5.31243 -1285 5.7707 -1286 5.68964 -1287 5.96062 -1288 7.85077 -1289 8.21576 -1290 6.68323 -1291 4.30884 -1292 4.784 -1293 5.21908 -1294 4.82005 -1295 4.40245 -1296 4.02024 -1297 3.62885 -1298 3.78701 -1299 3.55008 -1300 4.66264 -1301 5.58137 -1302 4.33701 -1303 4.93396 -1304 3.52374 -1305 7.13144 -1306 5.36387 -1307 8.97625 -1308 5.18498 -1309 9.05048 -1310 8.19838 -1311 4.42885 -1312 8.34232 -1313 3.94079 -1314 4.41342 -1315 7.69708 -1316 4.03687 -1317 4.88914 -1318 4.97387 -1319 5.60074 -1320 3.64249 -1321 3.99359 -1322 5.05358 -1323 7.22987 -1324 9.02307 -1325 3.92924 -1326 5.90228 -1327 6.68582 -1328 9.38571 -1329 4.23719 -1330 3.91918 -1331 6.00412 -1332 8.07751 -1333 4.80956 -1334 5.50254 -1335 9.28165 -1336 4.67539 -1337 4.8626 -1338 6.60907 -1339 6.82969 -1340 5.02785 -1341 4.99683 -1342 7.89183 -1343 9.24249 -1344 5.19206 -1345 4.25973 -1346 5.32035 -1347 4.13126 -1348 5.9532 -1349 6.48769 -1350 3.89076 -1351 5.66956 -1352 7.52047 -1353 5.81182 -1354 7.64656 -1355 5.39628 -1356 5.38481 -1357 4.57187 -1358 7.85941 -1359 3.19563 -1360 4.16723 -1361 7.58062 -1362 5.43379 -1363 4.5491 -1364 9.55822 -1365 5.41463 -1366 3.93709 -1367 5.58151 -1368 7.63004 -1369 7.19653 -1370 6.21067 -1371 4.16437 -1372 7.03794 -1373 6.03681 -1374 7.32543 -1375 8.75148 -1376 9.85852 -1377 5.51133 -1378 8.69481 -1379 5.56414 -1380 6.99819 -1381 3.55529 -1382 5.3928 -1383 4.84586 -1384 7.9864 -1385 6.53059 -1386 4.99042 -1387 4.16435 -1388 6.80177 -1389 5.45811 -1390 5.63078 -1391 3.96717 -1392 3.86136 -1393 3.20475 -1394 8.36851 -1395 5.32051 -1396 4.09927 -1397 4.30378 -1398 6.53894 -1399 9.57378 -1400 6.55006 -1401 6.34936 -1402 4.66909 -1403 4.92672 -1404 6.29711 -1405 6.13071 -1406 7.07983 -1407 3.38745 -1408 6.19644 -1409 3.70599 -1410 8.72514 -1411 5.01474 -1412 6.35499 -1413 8.51238 -1414 6.1006 -1415 8.31744 -1416 8.69373 -1417 5.3837 -1418 3.29415 -1419 3.17415 -1420 4.65337 -1421 3.77393 -1422 3.8875 -1423 7.11242 -1424 4.79596 -1425 4.074 -1426 4.91429 -1427 5.40041 -1428 4.50152 -1429 6.82147 -1430 7.03258 -1431 9.84567 -1432 5.28303 -1433 3.28496 -1434 5.3585 -1435 5.80604 -1436 6.24381 -1437 3.80452 -1438 8.7948 -1439 6.69635 -1440 5.38362 -1441 8.19043 -1442 6.65785 -1443 5.14952 -1444 8.66002 -1445 6.98012 -1446 5.82976 -1447 4.7057 -1448 4.19243 -1449 4.46766 -1450 4.94058 -1451 8.7967 -1452 5.51495 -1453 4.0043 -1454 5.16481 -1455 6.42095 -1456 6.01744 -1457 3.71544 -1458 5.73042 -1459 8.12425 -1460 3.95837 -1461 7.51813 -1462 9.24805 -1463 7.61923 -1464 4.43411 -1465 3.83737 -1466 3.95716 -1467 7.15998 -1468 5.65757 -1469 3.42947 -1470 7.66079 -1471 5.68317 -1472 4.17696 -1473 3.43991 -1474 4.08425 -1475 6.28225 -1476 5.03584 -1477 5.6927 -1478 4.82533 -1479 7.60644 -1480 3.80633 -1481 7.85466 -1482 4.0313 -1483 5.53088 -1484 4.79008 -1485 6.91984 -1486 7.05097 -1487 5.06758 -1488 5.28323 -1489 3.97634 -1490 7.07548 -1491 6.99741 -1492 5.39725 -1493 3.70965 -1494 5.20786 -1495 3.35697 -1496 8.30445 -1497 6.24412 -1498 5.02406 -1499 4.3192 -1500 3.75267 -1501 3.75419 -1502 6.70461 -1503 7.29339 -1504 7.25608 -1505 4.67025 -1506 7.00533 -1507 4.95845 -1508 5.9428 -1509 8.22798 -1510 6.09413 -1511 6.69181 -1512 4.68312 -1513 8.54909 -1514 9.17576 -1515 4.67904 -1516 5.70206 -1517 3.82361 -1518 4.83649 -1519 4.49647 -1520 6.62776 -1521 3.87563 -1522 3.82749 -1523 7.136 -1524 5.46372 -1525 7.49927 -1526 4.77056 -1527 6.99557 -1528 5.41681 -1529 5.67049 -1530 9.09783 -1531 6.2033 -1532 5.7676 -1533 6.10859 -1534 5.64874 -1535 4.25459 -1536 4.24224 -1537 7.54998 -1538 4.6898 -1539 3.65217 -1540 6.77849 -1541 7.38216 -1542 5.01269 -1543 9.63731 -1544 5.93312 -1545 6.67582 -1546 4.31103 -1547 7.11233 -1548 9.36116 -1549 5.26081 -1550 5.69302 -1551 3.48767 -1552 6.63839 -1553 6.58539 -1554 7.28664 -1555 3.81367 -1556 4.57632 -1557 5.76642 -1558 5.47675 -1559 4.10006 -1560 7.47012 -1561 4.71169 -1562 7.33109 -1563 3.61097 -1564 7.2049 -1565 5.17177 -1566 5.69784 -1567 5.66136 -1568 5.26364 -1569 5.80611 -1570 6.17947 -1571 7.04854 -1572 8.77365 -1573 4.85623 -1574 3.77604 -1575 4.3199 -1576 5.59875 -1577 7.20581 -1578 8.22279 -1579 6.75557 -1580 6.15071 -1581 8.40391 -1582 5.84813 -1583 6.71808 -1584 9.4805 -1585 5.78575 -1586 5.53995 -1587 6.22247 -1588 6.41044 -1589 4.20686 -1590 5.13741 -1591 9.43675 -1592 4.7142 -1593 3.98455 -1594 7.70331 -1595 5.7983 -1596 5.38736 -1597 6.27297 -1598 5.693 -1599 7.78512 -1600 9.5604 -1601 3.88507 -1602 5.01882 -1603 7.63484 -1604 5.06804 -1605 4.18197 -1606 4.43359 -1607 4.34535 -1608 4.02395 -1609 7.2371 -1610 8.47037 -1611 4.49746 -1612 8.23039 -1613 4.43065 -1614 4.82179 -1615 7.15842 -1616 4.60424 -1617 4.60142 -1618 4.98153 -1619 4.82699 -1620 6.48302 -1621 5.81494 -1622 9.77863 -1623 9.18164 -1624 8.97711 -1625 6.39388 -1626 4.3432 -1627 8.33951 -1628 5.09327 -1629 5.99447 -1630 4.3455 -1631 6.29698 -1632 3.33295 -1633 6.59657 -1634 6.95084 -1635 3.19532 -1636 5.517 -1637 5.79544 -1638 5.11606 -1639 5.09728 -1640 6.96594 -1641 4.43697 -1642 8.62959 -1643 6.33994 -1644 4.6679 -1645 6.9788 -1646 4.62802 -1647 9.58879 -1648 4.3363 -1649 5.16264 -1650 7.16104 -1651 5.92186 -1652 7.45343 -1653 3.24729 -1654 9.37208 -$EndElementData diff --git a/test/user/testdata/shark_22_ascii_missing_num_elements.msh b/test/user/testdata/shark_22_ascii_missing_num_elements.msh deleted file mode 100644 index e01274de..00000000 --- a/test/user/testdata/shark_22_ascii_missing_num_elements.msh +++ /dev/null @@ -1,3978 +0,0 @@ -$MeshFormat -2.2 0 8 -$EndMeshFormat -$Nodes -652 -1 -0.0733436 0.0816748 0.056402 -2 -0.0729126 0.0537921 0.00170478 -3 -0.072634 0.0799069 0.0578949 -4 -0.0715817 0.0520377 0.00292576 -5 -0.0701949 0.0802569 0.0450431 -6 -0.0687698 0.060971 0.00326551 -7 -0.06778 0.060358 0.00473741 -8 -0.0672796 0.0809249 0.0425553 -9 -0.0658074 0.0806443 0.0552302 -10 -0.064933 0.0788176 0.0453762 -11 -0.0636555 0.0610198 0.00141989 -12 -0.0636111 0.0566004 -0.000556663 -13 -0.0636791 0.0819076 0.0524468 -14 -0.0623445 0.0580268 0.00335683 -15 -0.0624856 0.0671058 0.00581638 -16 -0.0601398 0.0781111 0.0317589 -17 -0.0599443 0.0685632 0.00992449 -18 -0.0592787 0.0571239 0.00105116 -19 -0.0587906 0.0719999 0.0117948 -20 -0.0575605 0.0730663 0.016213 -21 -0.057624 0.0811803 0.0403639 -22 -0.0572339 0.0769387 0.0223219 -23 -0.0559974 0.0749629 0.0235691 -24 -0.0542321 0.0763209 0.0344665 -25 -0.0540672 0.0649483 0.00821813 -26 -0.0541685 0.0661135 0.00437935 -27 -0.0532966 0.0805356 0.0466758 -28 -0.0517252 0.0761185 0.0183218 -29 -0.0505257 0.068877 0.0152572 -30 -0.0503803 0.0772638 0.0406423 -31 -0.0472855 0.0641041 0.00381053 -32 -0.0469016 0.0648796 0.00821733 -33 -0.0474599 0.0727268 0.0265623 -34 -0.0464733 0.070912 0.0103373 -35 -0.0444756 0.0755674 0.0221683 -36 -0.0440208 0.0774313 0.0371107 -37 -0.0434135 0.0685101 0.0213943 -38 -0.0425401 0.0668787 0.0159114 -39 -0.0405353 0.0730163 0.0309862 -40 -0.0386417 0.073548 0.0160682 -41 -0.037401 0.0664899 0.0122191 -42 -0.0358693 0.0689445 0.0243885 -43 -0.0351058 0.0687771 0.0124837 -44 -0.0333614 0.071165 0.0238503 -45 -0.0325564 0.0696271 0.024504 -46 -0.032455 0.0625178 0.0200737 -47 -0.0305469 0.0729973 0.0173921 -48 -0.0276941 0.0652386 0.0128238 -49 -0.0272717 0.0628782 0.0141328 -50 -0.0263428 0.00735496 0.00505748 -51 -0.0256055 0.00658056 0.00327552 -52 -0.0252856 0.0610141 0.0227762 -53 -0.0250237 -0.00678856 0.00359213 -54 -0.0242889 -0.00589458 0.00589675 -55 -0.0216872 0.0639735 0.0255561 -56 -0.0215721 -0.0119744 0.00619585 -57 -0.0195136 0.0542304 0.0216195 -58 -0.0168343 0.0649534 0.0236547 -59 -0.0161373 -0.00420129 0.00881529 -60 -0.0148726 0.0585475 0.0106707 -61 -0.0140647 0.0517836 0.0159197 -62 -0.0142986 0.0543801 0.0051496 -63 -0.0139611 -0.0178642 0.00651265 -64 -0.0139803 0.0554055 0.0115694 -65 -0.0124373 0.0606817 0.0122622 -66 -0.0127423 0.0580719 0.0285553 -67 -0.0127412 -0.0704232 0.0234664 -68 -0.0126173 -0.0801905 0.022154 -69 -0.0125269 0.0592002 0.0346418 -70 -0.0122498 -0.080596 0.0191154 -71 -0.0121442 -0.0691943 0.0191352 -72 -0.0123618 0.0658492 0.0197519 -73 -0.0121018 -0.063334 0.0245151 -74 -0.0118539 0.0462485 0.0243954 -75 -0.0111067 0.0637388 0.0161162 -76 -0.0110042 -0.0624802 0.0276395 -77 -0.0109072 0.046219 0.0183571 -78 -0.0107037 -0.000325242 0.00950432 -79 -0.010183 -0.0121386 0.00674337 -80 -0.00977442 -0.0638147 0.0162637 -81 -0.0097669 -0.0699334 0.0156591 -82 -0.00942656 -0.0836042 0.0182705 -83 -0.009321 -0.0852334 0.0216727 -84 -0.00803502 0.0401179 0.0263407 -85 -0.00857808 -0.0579335 0.0163943 -86 -0.00793158 -0.0190616 0.0121625 -87 -0.00782675 0.0573514 0.028038 -88 -0.00773028 -0.0620746 0.0302044 -89 -0.00764665 0.0537773 0.00961295 -90 -0.00721562 -0.0507362 0.0224357 -91 -0.00717408 -0.0528249 0.0179333 -92 -0.00651588 -0.00739691 0.013024 -93 -0.00691116 -0.00014073 0.00823716 -94 -0.00661131 0.044183 0.0123 -95 -0.00658663 0.0535365 0.0326225 -96 -0.00630954 -0.0850657 0.0194796 -97 -0.00616497 -0.0797841 0.0261073 -98 -0.00582999 -0.0494502 0.0287705 -99 -0.00563359 0.0476479 0.00934546 -100 -0.00506609 -0.0425596 0.0250833 -101 -0.00453974 -0.0405694 0.0173853 -102 -0.00447266 0.0319291 0.0205877 -103 -0.00434886 0.0267225 0.00648417 -104 -0.00418386 0.0253438 0.00842196 -105 -0.0041733 -0.0606038 0.0122716 -106 -0.00385183 0.0479538 0.00869149 -107 -0.00333705 0.051389 0.031593 -108 -0.00333565 -0.0693881 0.0119551 -109 -0.00333748 -0.0650683 0.0110291 -110 -0.00292457 0.0475597 0.0319288 -111 -0.00280471 -0.0353375 0.0238411 -112 -0.00273019 -0.0493159 0.0135756 -113 -0.00255346 -0.0452657 0.0126112 -114 -0.00249178 -0.0598565 0.010934 -115 -0.00247351 -0.0533955 0.0149632 -116 -0.00280465 0.0288144 0.0300227 -117 -0.00225175 -0.030519 0.0236922 -118 -0.00205777 -0.0595101 0.00715068 -119 -0.0018581 -0.0627033 0.0116048 -120 -0.00150112 -0.0384203 0.0313885 -121 -0.00143547 -0.0337232 0.0176227 -122 -0.00136747 -0.062725 0.0150152 -123 -0.000884775 -0.0587825 0.0143119 -124 -0.000624659 -0.0247814 0.0257906 -125 -0.000489974 0.0225414 0.0188523 -126 -6.05566e-05 0.0171338 0.0234086 -127 0.00150381 0.0360475 0.00675461 -128 0.000282178 -0.0241462 0.0174969 -129 0.000347869 -0.0675237 0.0324883 -130 0.000429839 -0.0422219 0.0349169 -131 0.00028168 -0.0273698 0.0312235 -132 0.000952705 -0.0267391 0.0143612 -133 0.00105244 0.0186951 0.00689988 -134 0.0011109 -0.0779453 0.014663 -135 0.00137887 0.00842564 0.0258445 -136 0.00107238 -0.0462225 0.00980545 -137 0.00158113 -0.0561697 0.005809 -138 0.00165921 -0.0142314 0.0114909 -139 0.00169065 -0.00330978 0.027848 -140 0.0017282 0.0264299 0.00972258 -141 0.00196109 -0.062067 0.0125082 -142 0.00198494 -0.0249792 0.0122768 -143 0.00206797 -0.0322322 0.0125632 -144 0.00219287 -0.00991015 0.0199027 -145 0.00223228 -0.065619 0.00972103 -146 0.00226787 -0.06664 0.0139131 -147 0.00233081 0.00970751 0.0349608 -148 0.0023033 -0.0550711 0.0357611 -149 0.00284591 -0.0695874 0.0109337 -150 0.00313658 0.0123831 0.0152878 -151 0.00325266 -0.000639164 0.0164744 -152 0.00354678 -0.0651674 0.00553443 -153 0.00434877 0.0392681 0.00656793 -154 0.0034004 -0.0624097 0.0143354 -155 0.00410027 0.052311 0.0146156 -156 0.00425687 -0.0110681 0.0377954 -157 0.0043501 -0.0020508 0.015115 -158 0.00444422 -0.0785667 0.0168482 -159 0.00471578 -0.00872746 0.0133588 -160 0.00486541 0.0192794 0.0102326 -161 0.00475235 0.0259901 0.00777948 -162 0.00497525 -0.0797755 0.0244877 -163 0.0052286 0.0545416 0.0234287 -164 0.00513856 -0.0361953 0.00904286 -165 0.00543656 -0.016404 0.0117933 -166 0.00521097 0.0361763 0.0357574 -167 0.00563068 0.0458779 0.0101474 -168 0.00602624 -0.0598053 0.00448538 -169 0.00669265 -0.0730234 0.0300997 -170 0.00671975 -0.0647944 0.0149968 -171 0.00743572 0.0219428 0.00498754 -172 0.00806977 -0.0676622 0.0106835 -173 0.00858002 0.0185363 0.00804532 -174 0.00900922 -0.0527441 0.0382868 -175 0.00967438 -0.0310472 0.0412759 -176 0.00969027 -0.0470756 0.00574739 -177 0.00982547 -0.0777201 0.0238208 -178 0.010337 -0.0646559 0.00738197 -179 0.0103691 -0.0715108 0.0301524 -180 0.0108524 -0.0651923 0.0107074 -181 0.0112352 0.0223598 0.00496048 -182 0.0115762 0.0360388 0.034027 -183 0.011811 0.0150563 0.0411225 -184 0.0119389 -0.0710873 0.0142927 -185 0.011481 0.000850754 0.00890493 -186 0.0122581 0.0177891 0.00726338 -187 0.0126044 0.0285097 0.0071727 -188 0.0126077 -0.0410848 0.00487059 -189 0.01325 0.0245576 0.00385279 -190 0.0133342 -0.0301914 0.00695184 -191 0.0134526 -0.00467313 0.044297 -192 0.0140263 0.0415073 0.0128325 -193 0.0139319 -0.0627506 0.0126489 -194 0.0144402 0.0213321 0.0408733 -195 0.0145153 -0.0120242 0.00709154 -196 0.0145254 0.0314471 0.00762861 -197 0.0143606 -0.0539791 0.00638859 -198 0.0153705 -0.0588177 0.00913193 -199 0.0158483 0.0424843 0.0267153 -200 0.0161677 0.0082135 0.0752128 -201 0.0160709 -0.0693691 0.0267104 -202 0.0163112 0.021127 0.00658374 -203 0.0163956 0.0418119 0.0180916 -204 0.0166653 0.00513625 0.0449469 -205 0.0171438 -0.00939438 0.0462661 -206 0.0174416 -0.0497054 0.0373642 -207 0.0174198 -0.0656937 0.0159871 -208 0.0177387 0.0346114 0.0053358 -209 0.0178439 0.0247259 0.00729322 -210 0.018247 0.0346901 0.00258831 -211 0.0182074 -0.0318958 0.0424624 -212 0.0183988 -0.00142899 0.0496692 -213 0.0188182 -0.018825 0.0447569 -214 0.0188285 0.0147456 0.0461032 -215 0.0188626 0.015416 0.041072 -216 0.0190811 -0.00419709 0.0686858 -217 0.0195945 0.0084326 0.064095 -218 0.0197498 -0.00217441 0.0583864 -219 0.0198208 0.00539755 0.0587622 -220 0.0200137 0.0324539 0.00354185 -221 0.020151 -0.0145671 0.0500049 -222 0.0203386 -0.00326709 0.0702447 -223 0.0209148 0.00523036 0.0681576 -224 0.0208447 0.0121045 0.0546374 -225 0.0209724 0.00970633 0.0633876 -226 0.020604 -0.0121123 0.00591309 -227 0.0212498 -0.0289526 0.00565549 -228 0.0216078 -0.0380775 0.00479088 -229 0.0216875 -0.00997672 0.0619769 -230 0.0220658 0.00705093 0.0456869 -231 0.0223002 -0.0558455 0.0110476 -232 0.0223137 -0.0154618 0.0494217 -233 0.0229336 0.00417573 0.0589573 -234 0.0231427 0.0278288 0.0125965 -235 0.0231751 0.027241 0.0309726 -236 0.0233259 0.0160686 0.00756079 -237 0.0234095 0.0318943 0.0199392 -238 0.0234462 -0.00393483 0.0583985 -239 0.0235915 -0.0597066 0.0170609 -240 0.0240196 -0.0108777 0.0466362 -241 0.024123 -0.00330273 0.0464733 -242 0.0242099 -0.0321428 0.0398591 -243 0.0244244 0.00347947 0.0416421 -244 0.024564 -0.0175604 0.0433407 -245 0.0253979 -0.0453083 0.0344803 -246 0.0256103 0.0267734 0.0284514 -247 0.0259312 -0.0445208 0.00878379 -248 0.025959 -0.0133125 0.00624018 -249 0.0265967 -0.0369666 0.00635268 -250 0.0273245 -0.0066598 0.0412078 -251 0.0277597 -0.0467651 0.0304517 -252 0.0275944 -0.0515878 0.0207552 -253 0.0282687 0.0208205 0.0174814 -254 0.0290859 0.0112094 0.012597 -255 0.0293048 -0.0474855 0.0256026 -256 0.0296506 -0.0466043 0.0156453 -257 0.0304236 0.0134394 0.031696 -258 0.0304518 -0.0291908 0.00746031 -259 0.03126 -0.044124 0.016095 -260 0.0321715 -0.043346 0.0242104 -261 0.0322352 -0.0402733 0.0141242 -262 0.0323149 0.01052 0.0200521 -263 0.0324768 -0.0397188 0.0271188 -264 0.0325431 -0.0291932 0.0340382 -265 0.0332479 -0.0329826 0.0117351 -266 0.0338676 -0.0346121 0.0252676 -267 0.0341522 -0.00293196 0.033596 -268 0.0341882 -0.0361716 0.0179088 -269 0.0344969 -0.0256263 0.0309923 -270 0.0345138 -0.00958586 0.0123416 -271 0.0348872 -0.0128566 0.0339912 -272 0.0349524 -0.0273994 0.0177976 -273 0.0349556 -0.000677158 0.0209767 -274 0.0350004 -0.028049 0.00876142 -275 0.0353194 -0.0100316 0.0154749 -276 0.0354214 -0.0195455 0.0173172 -277 0.0355775 -0.0309821 0.0107592 -278 0.0360305 -0.0150581 0.0232372 -279 0.0363938 -0.0285041 0.0132933 -280 0.0374738 -0.00607371 0.0123945 -281 0.041317 -0.0210454 0.0131228 -282 0.0425886 -0.0120136 0.0129537 -283 0.0475164 -0.00753527 0.00853843 -284 0.0492593 -0.00704914 0.00938067 -285 0.0496752 -0.0170405 0.0106038 -286 0.0498676 -0.0259318 0.00619626 -287 0.052402 -0.022331 0.00866719 -288 0.0516897 -0.011391 0.0103437 -289 0.0559595 -0.0106346 0.00698866 -290 0.0596531 -0.0214295 0.0059579 -291 0.066312 -0.0158462 0.00759335 -292 0.0672852 -0.00331292 0.00667068 -293 0.0687074 -0.0027598 0.00829441 -294 0.0687083 -0.0084515 0.00881385 -295 0.0702857 -0.00694567 0.00665748 -296 0.02471 0.00101921 0.00688758 -297 0.00641783 -0.0341512 0.0233596 -298 0.024018 0.00854392 0.00722419 -299 0.0251696 0.00942127 0.00784613 -300 -0.019815 0.0686939 0.0189821 -301 0.0416697 -0.017118 0.00864259 -302 -0.00440288 -0.0698432 0.0205811 -303 -0.0033606 0.0600219 0.0217676 -304 0.0268544 0.00322876 0.0080825 -305 0.00855449 0.0107052 0.00928038 -306 0.0219179 0.00585482 0.0121236 -307 0.0199208 0.0175811 0.0336776 -308 0.0210521 -0.0362113 0.0256186 -309 0.0339797 -0.00194129 0.0163861 -310 0.03202 0.000337126 0.0126992 -311 0.0119633 0.0163586 0.0147908 -312 0.0248778 0.0056119 0.0321775 -313 0.00892971 -0.0563678 0.0287948 -314 0.0174837 0.027107 0.0210333 -315 -0.0170518 0.00346089 0.00554363 -316 0.0144974 -0.0120686 0.0314959 -317 0.00336155 -0.00103205 0.0364574 -318 0.00707711 -0.0204903 0.0185209 -319 0.010517 -0.00309481 0.0232445 -320 -0.00559352 0.0373259 0.0172753 -321 -0.00523735 -0.0230725 0.0111224 -322 0.0151072 -0.0538804 0.0213778 -323 0.0347571 -0.0188174 0.0105515 -324 0.0278657 -0.0183642 0.0156758 -325 -0.00338013 -0.0543805 0.0329679 -326 -0.0196332 0.0593213 0.0251138 -327 0.0648163 -0.0143432 0.00627944 -328 -0.00336175 -0.0187472 0.00979996 -329 -0.0059938 -0.0214388 0.00941436 -330 0.0204933 0.0262773 0.00994486 -331 0.0153554 0.00838654 0.0105168 -332 -0.064082 0.064994 0.00682263 -333 -0.0406296 0.0703091 0.0249838 -334 -0.0197677 0.0563929 0.0156108 -335 -0.0506931 0.0781816 0.0304629 -336 0.0171972 -0.00100568 0.011485 -337 0.0314619 -0.0225976 0.00774901 -338 -0.00980694 0.0515267 0.0104574 -339 -0.00435185 0.0493969 0.0137744 -340 0.0449063 -0.0117353 0.00859937 -341 0.00159087 -0.0450385 0.027858 -342 -0.00469537 -0.0637251 0.0233918 -343 0.0424219 -0.0285632 0.00857374 -344 0.0603894 -0.00835109 0.00935053 -345 -0.0147113 -0.0156046 0.00918376 -346 -0.0528157 0.0611754 0.00480955 -347 -0.0173765 -0.00887149 0.00520522 -348 0.0108104 0.02268 0.0130558 -349 -0.00899905 -0.0208443 0.00915416 -350 -0.0449914 0.0768094 0.0302276 -351 -0.0408502 0.06658 0.00836849 -352 -0.0199988 -0.0118916 0.004906 -353 0.00337131 0.0455887 0.0238561 -354 0.00477413 -0.0721541 0.0211645 -355 -0.00344193 -0.049333 0.032475 -356 0.0427245 -0.0268877 0.00738607 -357 0.0272704 -0.0238375 0.00669928 -358 -0.00610544 -0.0476638 0.0181008 -359 -0.00760153 0.0503529 0.00747858 -360 0.0131109 -0.0422224 0.0405109 -361 0.00214561 -0.0490294 0.0151357 -362 -0.0598224 0.0805424 0.0511855 -363 -0.0204542 0.0588165 0.013102 -364 0.059357 -0.0190886 0.00813027 -365 -0.00100716 0.0422264 0.0325724 -366 0.0325535 -0.0244764 0.012522 -367 -0.000431427 -0.0574818 0.0137747 -368 0.0114251 0.0275734 0.00440942 -369 0.00337666 -0.0559724 0.0148659 -370 -0.0262911 0.0586227 0.0207785 -371 -0.0699467 0.0813567 0.0499003 -372 0.0494602 -0.0133111 0.00757754 -373 0.00758285 0.0333008 0.0104911 -374 0.00657287 0.032122 0.00603963 -375 0.000332803 -0.0511328 0.0180756 -376 -0.021764 0.0620607 0.0118108 -377 -0.0454672 0.075167 0.035911 -378 0.00139884 0.045926 0.0128133 -379 0.0176314 0.0311493 0.00370344 -380 -0.0159418 -0.0158578 0.00793814 -381 -0.0229387 0.0691641 0.0166572 -382 -0.00133409 -0.0449329 0.0187829 -383 -0.0538019 0.0611146 0.00198764 -384 0.0305208 -0.00256491 0.0101919 -385 0.0623596 -0.00697151 0.00683979 -386 0.0236819 -0.00777996 0.0526871 -387 0.0118138 -0.0144241 0.0430193 -388 0.0137156 -0.00365078 0.00732253 -389 -0.0257884 0.0686739 0.0150694 -390 -0.0530331 0.060812 0.00248197 -391 -0.000421194 -0.0523335 0.00879177 -392 0.0193846 -0.00072024 0.0649221 -393 0.00485856 0.0133946 0.0114741 -394 -0.0053823 -0.0743714 0.0141262 -395 0.016958 0.0166471 0.00740593 -396 0.0429338 -0.0266961 0.0110582 -397 -0.0650475 0.05473 0.00191127 -398 0.00924818 0.0356698 0.00715588 -399 -0.042468 0.0652669 0.00790867 -400 0.00699205 0.0348997 0.00576165 -401 -0.012123 0.00171435 0.00688121 -402 0.017741 0.00126373 0.0717161 -403 -0.00477874 -0.0228765 0.0123522 -404 -0.05496 0.0793832 0.0329037 -405 -0.0253736 -0.000654191 0.00342534 -406 0.0220159 -0.0128389 0.0555838 -407 0.0187915 0.00366305 0.0653901 -408 -0.0635923 0.0794618 0.0351284 -409 0.0187293 0.00901455 0.0689246 -410 -0.0507436 0.0790633 0.0364811 -411 0.00440962 0.0291856 0.00589534 -412 -0.0610541 0.0815764 0.0467801 -413 -0.0264169 0.0641898 0.0180225 -414 0.0590681 -0.0129818 0.00969293 -415 0.0316732 -0.013669 0.00892731 -416 -0.0368828 0.0732351 0.028231 -417 0.0147007 -0.0293577 0.0425282 -418 -0.00226105 0.042112 0.00818422 -419 -0.022404 0.068624 0.0211714 -420 0.018834 0.0296379 0.0101126 -421 0.0545664 -0.023882 0.00596013 -422 -0.0610274 0.0626039 0.00623226 -423 0.0209345 -0.0123916 0.0558755 -424 -0.064258 0.0639612 0.00701622 -425 -0.0530259 0.0709966 0.0104874 -426 -0.000350232 0.0328643 0.00950357 -427 0.0179821 0.0260225 0.00525665 -428 -0.071629 0.0809096 0.0500374 -429 0.0431333 -0.00662611 0.0109755 -430 -0.0367738 0.072104 0.0272887 -431 -0.00147996 0.0424733 0.00778004 -432 -0.0489442 0.0792518 0.0424775 -433 0.0178184 0.00830923 0.0698262 -434 -0.00256208 -0.0518644 0.0119693 -435 -0.0024457 0.0347988 0.0115191 -436 -0.0226391 0.067054 0.0236986 -437 -0.0250562 0.070839 0.0181046 -438 0.0157661 -0.010775 0.0444953 -439 -0.0587069 0.0610686 0.00549325 -440 -0.0561989 0.0607157 0.00436391 -441 0.0028322 0.0311045 0.0076099 -442 -0.061857 0.079748 0.0514834 -443 -0.0580072 0.0744854 0.0170926 -444 0.017366 0.0281829 0.00449304 -445 0.0175246 0.0303053 0.00632184 -446 -0.0583716 0.0812348 0.0494755 -447 -0.0627638 0.0811059 0.0418948 -448 0.00958337 0.0391723 0.00889538 -449 0.0164997 0.0327763 0.00400793 -450 -0.0100537 -0.019407 0.0104569 -451 0.0535082 -0.023589 0.00757618 -452 -0.0184567 0.0672393 0.0165986 -453 -0.0660887 0.0639515 0.00557639 -454 -0.0085005 0.0591911 0.0132991 -455 0.0527123 -0.00658592 0.00801901 -456 0.00664445 0.0147496 0.00979726 -457 -0.0323364 0.0646841 0.013176 -458 -0.0684981 0.0817682 0.0541475 -459 0.0424951 -0.00680449 0.0104665 -460 -0.01583 0.0638299 0.0140017 -461 -0.0408586 0.0747808 0.0276312 -462 -0.0213675 0.00505684 0.00440033 -463 -0.0609542 0.0784149 0.029815 -464 0.0458286 -0.0196104 0.0115924 -465 0.0619857 -0.0044448 0.00717137 -466 -0.0549453 0.0736446 0.0144159 -467 -0.0660739 0.0797747 0.0511232 -468 -0.0150243 -0.0138696 0.00597473 -469 -0.0208919 0.0664273 0.014553 -470 -0.0583912 0.0766731 0.0277458 -471 -0.00499489 -0.0492059 0.0154875 -472 -0.0177596 -0.0149926 0.00640227 -473 -0.0656257 0.0638276 0.00437301 -474 -0.00111824 -0.0505712 0.010634 -475 -0.0234714 0.0595273 0.0150887 -476 -0.0117477 -0.00786715 0.0107629 -477 -0.0329423 0.0662408 0.012525 -478 -0.0588644 0.0778049 0.0265316 -479 -0.038272 0.0710121 0.0277124 -480 0.0147178 0.0228905 0.00513556 -481 -0.00242697 -0.0228032 0.0106496 -482 -0.00998317 -0.0196685 0.00798312 -483 0.00194711 0.0338412 0.00734265 -484 -0.0101071 0.0571173 0.0108272 -485 -0.000192036 0.0305177 0.010316 -486 -0.0662236 0.0609953 0.00234663 -487 -0.0383437 0.071981 0.0290737 -488 0.0464353 -0.0271448 0.00729223 -489 -0.0113654 0.0558876 0.00985606 -490 -0.0600686 0.0581853 0.00037707 -491 0.0184892 0.00651809 0.072001 -492 -0.0272353 0.0661385 0.0125002 -493 0.0386787 -0.00939756 0.0110365 -494 -0.00702298 -0.0554164 0.0301677 -495 -0.0387296 0.0725599 0.0291973 -496 -0.0195884 -0.00971304 0.00731553 -497 0.000980398 0.0340005 0.00831153 -498 -0.00251349 -0.0493306 0.0137872 -499 -0.0208118 0.00468072 0.00662791 -500 0.0145465 0.0247675 0.00685396 -501 0.0539643 -0.00601143 0.00911787 -502 0.0615879 -0.00432066 0.00875869 -503 -0.0649217 0.0800024 0.0383643 -504 0.00460493 0.00849738 0.0127005 -505 -0.0606311 0.0803611 0.0379233 -506 -0.00316884 0.0400824 0.00969248 -507 -0.0308482 0.067467 0.0126012 -508 0.0120049 0.00511369 0.00824306 -509 0.0117314 0.0134932 0.00784586 -510 0.0067401 0.0222359 0.00786688 -511 0.000365941 0.0444987 0.0334101 -512 0.00589042 0.0427357 0.0325284 -513 0.0134556 0.013691 0.0071386 -514 0.0155774 0.00572549 0.00675779 -515 -0.0442054 0.0654197 0.00607699 -516 0.00863004 0.0184766 0.00878081 -517 -0.0111016 -0.0170398 0.0107756 -518 -0.0162643 0.06208 0.0123266 -519 -0.0670643 0.0628756 0.0047451 -520 -0.0673064 0.0791769 0.0489333 -521 -0.0566743 0.0588231 0.00264455 -522 -0.0713841 0.080001 0.0523997 -523 -0.0690781 0.0794039 0.0521145 -524 -0.0589744 0.0702988 0.0123753 -525 -0.0108026 0.05228 0.00636676 -526 -0.0113486 0.0541547 0.00728553 -527 -0.0299136 0.0686241 0.0165753 -528 0.0505332 -0.0225927 0.00635398 -529 0.0180077 0.0031318 0.0704387 -530 -0.0235313 0.0640143 0.012641 -531 -0.0235569 0.00584404 0.00381922 -532 0.0384718 -0.0113423 0.0144484 -533 0.0182407 0.00232532 0.0728388 -534 -0.0235752 0.00407866 0.00373027 -535 -0.011585 0.0522432 0.00647843 -536 0.0400312 -0.00904366 0.0126741 -537 -0.0178591 -0.000359808 0.00797485 -538 -0.067167 0.0625514 0.00392853 -539 -0.0596438 0.0779391 0.0290601 -540 0.0013543 0.0302152 0.00901705 -541 0.0168301 0.00522322 0.0737244 -542 0.0174324 0.00448014 0.0738384 -543 -0.0618546 0.0649931 0.00590465 -544 0.0194429 0.0304209 0.00452872 -545 -0.0236633 0.0648084 0.0124456 -546 -0.00249493 -0.0562542 0.012985 -547 -0.0025263 -0.0246783 0.0125409 -548 -0.0396392 0.0718092 0.02876 -549 -0.0158083 -0.0164708 0.00645267 -550 0.016879 0.0245859 0.0055459 -551 -0.0688499 0.0811361 0.0461884 -552 0.0290982 -0.00647478 0.00827907 -553 -0.041817 0.0761358 0.0343691 -554 -0.0642688 0.0653922 0.00517065 -555 -0.0162175 0.00239503 0.00694561 -556 0.00467524 0.0360758 0.00643588 -557 -0.0222973 0.0035638 0.00646752 -558 -0.0708092 0.0801688 0.0482801 -559 -0.0549524 0.0787083 0.0296023 -560 -0.0631054 0.0672415 0.00811831 -561 -0.0155444 -0.0163359 0.0060847 -562 -0.0574097 0.0788047 0.0473507 -563 -0.0558952 0.0591814 0.001764 -564 -0.0177409 0.0619627 0.0144786 -565 -0.00178349 -0.0487397 0.0125937 -566 -0.0111058 0.0522074 0.00829904 -567 -0.0260139 0.00360897 0.00461987 -568 -0.0204566 0.00423454 0.00564674 -569 0.00612936 0.0370467 0.00680554 -570 0.010446 0.0313554 0.00705031 -571 -0.0569353 0.05965 0.00118235 -572 -0.0506685 0.0625792 0.00279292 -573 -0.0249761 0.00485573 0.00443819 -574 0.0172421 0.00725128 0.0738262 -575 -0.0219613 0.0643004 0.0138184 -576 -0.00260185 -0.0513557 0.0142694 -577 -0.0167422 0.00259292 0.00779623 -578 0.00214524 0.0341103 0.00650831 -579 -0.0236765 0.00572293 0.004305 -580 -0.0616879 0.0784644 0.0353636 -581 -0.0125522 0.0533024 0.00573952 -582 -0.00373263 -0.048886 0.014509 -583 -0.00253347 -0.0472982 0.0131992 -584 -0.0128746 -0.017623 0.00940414 -585 -5.43548e-05 0.0393803 0.00728201 -586 -0.0258702 0.00405717 0.00525282 -587 0.0183599 0.0265636 0.00640112 -588 0.0459896 -0.0257989 0.0100883 -589 -0.0295424 0.0680594 0.0247957 -590 -0.0245383 0.0634107 0.0123732 -591 0.0066096 0.0377811 0.00691952 -592 -0.0450015 0.0646553 0.00575343 -593 -0.0622505 0.0661482 0.00839783 -594 -0.0256248 0.0608105 0.0161665 -595 0.017488 0.00853314 0.0720965 -596 -0.0596734 0.0705097 0.00992485 -597 -0.0665798 0.0628689 0.00493615 -598 -0.0624322 0.0664941 0.0080812 -599 0.0436037 -0.00911409 0.00950451 -600 -0.0258241 0.00183578 0.00455937 -601 -0.0702703 0.0796913 0.0546337 -602 -0.027947 0.0630495 0.0231884 -603 -0.0601839 0.0704633 0.0106076 -604 -0.019796 -0.0130118 0.0069497 -605 -0.0183149 0.0630548 0.012418 -606 -0.0302535 0.0701272 0.02364 -607 -0.0574291 0.0790851 0.0314511 -608 -0.0506885 0.0650762 0.00396145 -609 -0.021101 0.0616869 0.0137094 -610 -0.0331684 0.0670427 0.023997 -611 0.0134393 0.00644533 0.00718965 -612 -0.0111807 -0.0194906 0.00818236 -613 -0.0255718 0.00304117 0.00332801 -614 -0.0126697 -0.015488 0.00653208 -615 -0.0247074 0.00660999 0.00551935 -616 0.0173416 0.0031807 0.0727906 -617 0.0172416 0.0236783 0.00588169 -618 0.0190309 0.0293428 0.00437137 -619 0.016715 0.00646681 0.0747173 -620 -0.0362286 0.072292 0.023504 -621 -0.0193589 -0.00042516 0.00470745 -622 -0.0218861 0.0643631 0.0125137 -623 -0.0102557 0.0512168 0.00711881 -624 0.0404202 -0.00631757 0.0116411 -625 0.0462272 -0.00679819 0.0101561 -626 -0.0259792 0.0656558 0.0150971 -627 0.0162732 0.0229634 0.00624384 -628 0.00353474 0.0364474 0.00843339 -629 4.6368e-06 0.0388726 0.00973083 -630 -0.0216501 0.0633078 0.012475 -631 -0.0653553 0.0635995 0.0060088 -632 -0.0129397 0.0533345 0.00604151 -633 -0.00189413 -0.0244631 0.013557 -634 -0.0610974 0.0673557 0.00916116 -635 0.0169636 0.00823874 0.0726305 -636 -0.0262169 0.00566462 0.00486021 -637 -0.00105663 -0.050339 0.013034 -638 -0.0522352 0.0618469 0.00239028 -639 -0.0658611 0.0623674 0.00600767 -640 -0.0308719 0.0671807 0.0240148 -641 -0.0271033 0.0631674 0.0232081 -642 0.000463176 0.0377435 0.00713404 -643 0.0197653 -0.0105149 0.0573133 -644 -0.0261272 0.00574879 0.00514751 -645 -0.0256133 0.00236555 0.00535812 -646 0.0395658 -0.00664927 0.0115095 -647 -0.0346515 0.0704144 0.0260764 -648 -0.0676857 0.0619198 0.00410476 -649 -0.0352382 0.0722683 0.0261851 -650 -0.0489272 0.0632235 0.00329626 -651 -0.0514659 0.0617489 0.00295197 -652 -0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1 4 0 26 15 543 25 -2 4 0 227 308 190 188 -3 4 0 203 353 199 163 -4 4 0 331 305 504 150 -5 4 0 142 328 128 138 -6 4 0 490 439 18 571 -7 4 0 364 289 287 414 -8 4 0 296 336 304 298 -9 4 0 564 419 300 381 -10 4 0 398 569 373 591 -11 4 0 486 473 639 422 -12 4 0 338 89 566 489 -13 4 0 332 554 543 424 -14 4 0 80 67 71 302 -15 4 0 149 146 109 108 -16 4 0 98 90 375 342 -17 4 0 341 308 325 313 -18 4 0 147 314 126 116 -19 4 0 124 318 156 131 -20 4 0 245 322 206 308 -21 4 0 348 311 516 186 -22 4 0 135 150 319 151 -23 4 0 147 314 307 311 -24 4 0 464 588 301 528 -25 4 0 461 33 35 333 -26 4 0 196 192 373 314 -27 4 0 108 81 302 122 -28 4 0 366 258 227 357 -29 4 0 511 107 512 353 -30 4 0 146 170 354 172 -31 4 0 297 175 156 130 -32 4 0 130 297 175 308 -33 4 0 318 159 319 195 -34 4 0 154 123 122 342 -35 4 0 261 308 259 260 -36 4 0 132 142 128 318 -37 4 0 241 250 240 205 -38 4 0 226 227 248 324 -39 4 0 575 609 475 49 -40 4 0 375 91 123 90 -41 4 0 260 308 255 251 -42 4 0 517 612 63 482 -43 4 0 120 117 131 297 -44 4 0 318 131 297 156 -45 4 0 147 319 311 307 -46 4 0 131 120 297 130 -47 4 0 120 297 111 117 -48 4 0 308 174 206 360 -49 4 0 148 313 325 175 -50 4 0 148 313 175 174 -51 4 0 302 80 122 81 -52 4 0 107 353 511 110 -53 4 0 322 231 198 197 -54 4 0 61 58 564 57 -55 4 0 240 386 212 221 -56 4 0 121 297 143 117 -57 4 0 121 297 117 111 -58 4 0 307 235 314 182 -59 4 0 307 314 166 182 -60 4 0 417 308 175 316 -61 4 0 308 175 360 417 -62 4 0 601 9 458 1 -63 4 0 459 429 536 599 -64 4 0 211 242 206 308 -65 4 0 528 588 301 356 -66 4 0 316 297 308 175 -67 4 0 197 188 308 228 -68 4 0 231 308 228 197 -69 4 0 231 197 322 308 -70 4 0 188 197 308 361 -71 4 0 322 361 308 197 -72 4 0 259 308 256 255 -73 4 0 298 306 304 299 -74 4 0 302 342 146 122 -75 4 0 251 322 245 308 -76 4 0 298 306 299 236 -77 4 0 342 302 169 129 -78 4 0 157 319 331 150 -79 4 0 190 195 324 227 -80 4 0 146 342 354 154 -81 4 0 190 297 308 324 -82 4 0 236 254 306 299 -83 4 0 354 179 201 322 -84 4 0 308 297 188 361 -85 4 0 361 188 164 297 -86 4 0 195 165 190 318 -87 4 0 307 215 257 235 -88 4 0 194 235 215 307 -89 4 0 174 129 148 313 -90 4 0 169 313 129 174 -91 4 0 322 255 251 201 -92 4 0 366 265 308 258 -93 4 0 227 308 258 366 -94 4 0 258 308 249 265 -95 4 0 227 308 228 258 -96 4 0 448 192 373 196 -97 4 0 228 308 249 258 -98 4 0 296 298 514 336 -99 4 0 125 150 348 126 -100 4 0 125 160 348 150 -101 4 0 244 264 242 316 -102 4 0 264 316 244 271 -103 4 0 224 233 225 219 -104 4 0 107 353 163 199 -105 4 0 217 223 219 225 -106 4 0 308 174 313 206 -107 4 0 206 313 179 174 -108 4 0 241 230 212 233 -109 4 0 241 233 212 218 -110 4 0 267 278 312 273 -111 4 0 267 312 262 273 -112 4 0 206 179 322 245 -113 4 0 242 245 206 308 -114 4 0 144 319 159 157 -115 4 0 265 308 266 272 -116 4 0 218 219 392 233 -117 4 0 264 324 316 271 -118 4 0 324 308 264 316 -119 4 0 297 318 117 131 -120 4 0 128 117 318 124 -121 4 0 354 207 201 177 -122 4 0 207 177 354 184 -123 4 0 155 163 353 203 -124 4 0 131 297 156 130 -125 4 0 395 330 236 202 -126 4 0 164 142 318 190 -127 4 0 253 314 234 311 -128 4 0 307 314 147 166 -129 4 0 331 234 253 254 -130 4 0 306 236 298 331 -131 4 0 156 297 316 175 -132 4 0 324 319 318 316 -133 4 0 297 324 316 308 -134 4 0 373 314 102 125 -135 4 0 167 155 378 192 -136 4 0 278 324 272 269 -137 4 0 278 276 272 324 -138 4 0 319 159 157 336 -139 4 0 267 257 312 243 -140 4 0 307 215 243 257 -141 4 0 156 297 318 316 -142 4 0 207 354 170 184 -143 4 0 124 144 139 156 -144 4 0 267 312 250 243 -145 4 0 144 151 139 319 -146 4 0 318 316 319 144 -147 4 0 316 139 319 144 -148 4 0 139 144 316 156 -149 4 0 316 191 312 319 -150 4 0 316 191 317 156 -151 4 0 313 308 175 174 -152 4 0 253 234 331 311 -153 4 0 331 395 234 236 -154 4 0 272 265 308 366 -155 4 0 103 140 133 510 -156 4 0 235 199 246 314 -157 4 0 246 237 314 199 -158 4 0 144 151 319 157 -159 4 0 92 157 151 144 -160 4 0 92 159 157 144 -161 4 0 395 234 236 330 -162 4 0 395 330 202 348 -163 4 0 348 330 202 209 -164 4 0 324 312 316 271 -165 4 0 266 308 324 272 -166 4 0 324 366 308 227 -167 4 0 242 264 245 308 -168 4 0 272 266 269 324 -169 4 0 135 151 319 139 -170 4 0 40 35 28 29 -171 4 0 88 148 129 342 -172 4 0 325 342 148 88 -173 4 0 314 116 147 166 -174 4 0 77 353 320 94 -175 4 0 331 262 319 306 -176 4 0 319 317 139 316 -177 4 0 450 329 482 328 -178 4 0 183 307 147 166 -179 4 0 188 361 176 197 -180 4 0 169 179 313 174 -181 4 0 314 196 348 373 -182 4 0 102 84 116 353 -183 4 0 102 77 84 353 -184 4 0 191 147 319 317 -185 4 0 307 262 257 312 -186 4 0 307 257 246 235 -187 4 0 307 257 262 246 -188 4 0 128 318 144 124 -189 4 0 246 314 237 253 -190 4 0 314 203 237 234 -191 4 0 142 128 318 138 -192 4 0 253 237 234 314 -193 4 0 306 319 331 336 -194 4 0 307 314 235 246 -195 4 0 316 250 312 191 -196 4 0 450 403 349 329 -197 4 0 121 297 101 143 -198 4 0 382 164 101 297 -199 4 0 369 198 322 193 -200 4 0 264 266 324 269 -201 4 0 322 354 170 207 -202 4 0 322 170 193 207 -203 4 0 353 84 116 110 -204 4 0 70 302 68 83 -205 4 0 331 311 234 395 -206 4 0 323 493 282 301 -207 4 0 269 278 324 271 -208 4 0 278 312 324 271 -209 4 0 207 170 180 184 -210 4 0 207 170 193 180 -211 4 0 325 130 175 308 -212 4 0 146 354 170 154 -213 4 0 354 302 342 146 -214 4 0 161 348 510 181 -215 4 0 182 314 199 235 -216 4 0 322 354 369 170 -217 4 0 231 207 322 198 -218 4 0 313 322 375 341 -219 4 0 375 361 341 322 -220 4 0 322 207 193 198 -221 4 0 297 143 164 101 -222 4 0 221 213 240 232 -223 4 0 190 188 308 297 -224 4 0 341 361 375 382 -225 4 0 341 308 313 322 -226 4 0 134 158 184 354 -227 4 0 247 308 261 249 -228 4 0 263 308 260 251 -229 4 0 318 319 159 144 -230 4 0 309 262 306 319 -231 4 0 250 204 243 312 -232 4 0 448 192 167 378 -233 4 0 37 333 620 35 -234 4 0 37 33 333 35 -235 4 0 297 318 316 324 -236 4 0 167 448 378 153 -237 4 0 212 218 233 219 -238 4 0 88 325 342 494 -239 4 0 246 307 314 253 -240 4 0 307 253 246 262 -241 4 0 126 311 150 348 -242 4 0 388 611 336 514 -243 4 0 348 234 420 314 -244 4 0 236 254 331 306 -245 4 0 348 314 311 234 -246 4 0 211 308 360 417 -247 4 0 373 102 320 125 -248 4 0 316 250 191 438 -249 4 0 250 205 191 438 -250 4 0 254 262 306 309 -251 4 0 254 309 306 310 -252 4 0 299 254 306 310 -253 4 0 331 262 306 254 -254 4 0 292 294 295 293 -255 4 0 194 307 215 204 -256 4 0 304 306 384 299 -257 4 0 267 312 257 262 -258 4 0 353 192 378 155 -259 4 0 319 159 336 195 -260 4 0 353 192 373 378 -261 4 0 336 185 388 195 -262 4 0 312 250 271 267 -263 4 0 271 250 312 316 -264 4 0 261 249 308 265 -265 4 0 268 308 265 261 -266 4 0 247 308 249 228 -267 4 0 227 195 324 226 -268 4 0 366 324 415 337 -269 4 0 337 366 324 357 -270 4 0 190 195 318 324 -271 4 0 156 318 124 144 -272 4 0 263 266 308 264 -273 4 0 251 263 308 264 -274 4 0 197 198 322 369 -275 4 0 154 354 369 342 -276 4 0 188 308 228 227 -277 4 0 79 328 138 92 -278 4 0 316 317 139 156 -279 4 0 360 175 308 174 -280 4 0 255 251 308 322 -281 4 0 255 256 252 308 -282 4 0 247 228 231 308 -283 4 0 247 308 231 256 -284 4 0 134 149 394 354 -285 4 0 83 162 96 302 -286 4 0 161 373 140 348 -287 4 0 88 67 302 68 -288 4 0 302 97 88 68 -289 4 0 512 166 314 182 -290 4 0 420 192 314 234 -291 4 0 348 330 420 234 -292 4 0 192 314 234 203 -293 4 0 91 123 105 115 -294 4 0 394 70 302 81 -295 4 0 309 273 262 319 -296 4 0 319 262 312 273 -297 4 0 67 302 68 70 -298 4 0 271 278 312 267 -299 4 0 66 57 326 58 -300 4 0 188 136 176 361 -301 4 0 157 331 185 504 -302 4 0 136 361 188 164 -303 4 0 244 250 271 316 -304 4 0 71 302 67 70 -305 4 0 244 213 232 240 -306 4 0 81 302 71 70 -307 4 0 354 149 108 146 -308 4 0 314 237 203 199 -309 4 0 506 378 435 629 -310 4 0 244 438 316 213 -311 4 0 97 302 169 162 -312 4 0 244 316 438 250 -313 4 0 313 129 342 169 -314 4 0 382 113 101 164 -315 4 0 506 435 378 94 -316 4 0 91 123 85 105 -317 4 0 308 264 245 251 -318 4 0 242 264 308 316 -319 4 0 450 349 482 329 -320 4 0 314 373 348 125 -321 4 0 92 138 159 144 -322 4 0 395 311 234 348 -323 4 0 278 273 324 312 -324 4 0 373 378 435 320 -325 4 0 147 311 319 135 -326 4 0 126 311 135 150 -327 4 0 126 135 311 147 -328 4 0 314 348 311 126 -329 4 0 83 302 82 70 -330 4 0 378 435 629 373 -331 4 0 195 159 165 318 -332 4 0 316 312 324 319 -333 4 0 156 175 316 387 -334 4 0 336 298 514 331 -335 4 0 88 342 129 302 -336 4 0 319 307 331 311 -337 4 0 253 314 311 307 -338 4 0 311 331 253 307 -339 4 0 297 341 308 130 -340 4 0 314 348 126 125 -341 4 0 147 314 311 126 -342 4 0 61 339 99 338 -343 4 0 250 204 312 191 -344 4 0 305 185 508 331 -345 4 0 211 242 308 316 -346 4 0 211 308 417 316 -347 4 0 213 316 211 417 -348 4 0 214 215 230 204 -349 4 0 244 316 242 211 -350 4 0 244 211 213 316 -351 4 0 465 501 344 502 -352 4 0 108 354 302 394 -353 4 0 313 129 148 342 -354 4 0 337 324 415 248 -355 4 0 337 258 366 357 -356 4 0 121 101 297 111 -357 4 0 382 101 111 297 -358 4 0 157 159 185 336 -359 4 0 226 336 195 324 -360 4 0 307 262 331 253 -361 4 0 307 262 319 331 -362 4 0 331 254 253 262 -363 4 0 248 336 552 296 -364 4 0 319 324 195 336 -365 4 0 248 296 226 336 -366 4 0 324 248 336 552 -367 4 0 147 183 191 307 -368 4 0 282 281 276 323 -369 4 0 281 323 282 301 -370 4 0 109 119 105 122 -371 4 0 297 143 117 318 -372 4 0 109 122 105 80 -373 4 0 308 366 324 272 -374 4 0 297 318 324 190 -375 4 0 297 190 164 318 -376 4 0 214 204 230 212 -377 4 0 224 212 214 230 -378 4 0 297 143 318 164 -379 4 0 264 308 324 266 -380 4 0 264 269 324 271 -381 4 0 132 117 143 318 -382 4 0 130 297 341 120 -383 4 0 341 130 120 98 -384 4 0 277 343 356 279 -385 4 0 325 308 175 313 -386 4 0 109 81 108 122 -387 4 0 109 122 108 146 -388 4 0 348 234 395 330 -389 4 0 341 111 120 297 -390 4 0 341 100 98 120 -391 4 0 341 111 100 120 -392 4 0 226 336 324 248 -393 4 0 318 319 324 195 -394 4 0 275 270 324 309 -395 4 0 309 336 324 319 -396 4 0 552 270 336 324 -397 4 0 273 309 275 324 -398 4 0 403 328 329 450 -399 4 0 382 111 341 297 -400 4 0 361 322 308 341 -401 4 0 361 341 308 297 -402 4 0 342 85 73 90 -403 4 0 342 73 85 80 -404 4 0 323 324 366 276 -405 4 0 361 297 164 382 -406 4 0 96 82 83 302 -407 4 0 45 647 44 42 -408 4 0 179 354 201 177 -409 4 0 53 621 54 347 -410 4 0 117 124 131 318 -411 4 0 156 144 316 318 -412 4 0 369 198 193 141 -413 4 0 342 302 88 67 -414 4 0 67 80 342 302 -415 4 0 73 80 342 67 -416 4 0 342 73 67 76 -417 4 0 372 528 289 285 -418 4 0 285 528 289 287 -419 4 0 355 98 325 494 -420 4 0 122 119 105 123 -421 4 0 394 82 134 302 -422 4 0 494 88 76 342 -423 4 0 109 81 122 80 -424 4 0 447 580 503 505 -425 4 0 114 118 141 145 -426 4 0 311 150 319 135 -427 4 0 108 122 302 146 -428 4 0 204 307 183 194 -429 4 0 191 204 307 183 -430 4 0 382 101 100 111 -431 4 0 382 111 100 341 -432 4 0 318 159 138 144 -433 4 0 588 281 301 356 -434 4 0 87 61 77 57 -435 4 0 318 159 165 138 -436 4 0 7 12 2 486 -437 4 0 316 191 319 317 -438 4 0 208 196 449 445 -439 4 0 322 369 354 313 -440 4 0 354 158 177 162 -441 4 0 354 169 162 179 -442 4 0 313 369 354 342 -443 4 0 179 162 354 177 -444 4 0 130 98 341 355 -445 4 0 325 130 341 355 -446 4 0 337 357 324 248 -447 4 0 324 357 227 248 -448 4 0 588 281 464 301 -449 4 0 375 341 382 98 -450 4 0 454 75 61 155 -451 4 0 353 77 84 74 -452 4 0 331 305 185 504 -453 4 0 311 331 319 150 -454 4 0 378 339 167 106 -455 4 0 318 190 142 165 -456 4 0 138 142 165 318 -457 4 0 18 12 397 14 -458 4 0 298 514 331 513 -459 4 0 118 137 141 168 -460 4 0 298 331 236 395 -461 4 0 395 298 331 513 -462 4 0 93 157 92 159 -463 4 0 354 158 184 177 -464 4 0 151 157 92 93 -465 4 0 78 93 151 92 -466 4 0 378 448 629 153 -467 4 0 102 314 126 125 -468 4 0 126 116 314 102 -469 4 0 61 72 303 75 -470 4 0 39 461 350 553 -471 4 0 350 39 33 461 -472 4 0 311 331 513 395 -473 4 0 311 331 305 509 -474 4 0 353 102 314 116 -475 4 0 204 215 243 307 -476 4 0 106 153 167 378 -477 4 0 97 162 83 302 -478 4 0 107 353 199 512 -479 4 0 297 188 164 190 -480 4 0 147 319 139 135 -481 4 0 77 353 87 74 -482 4 0 353 203 199 314 -483 4 0 512 314 353 199 -484 4 0 37 38 29 35 -485 4 0 485 140 373 125 -486 4 0 398 448 373 196 -487 4 0 196 570 373 398 -488 4 0 324 248 552 415 -489 4 0 415 270 552 324 -490 4 0 52 57 594 564 -491 4 0 285 289 414 287 -492 4 0 438 250 205 240 -493 4 0 524 425 25 17 -494 4 0 29 25 524 425 -495 4 0 87 77 61 353 -496 4 0 93 92 138 159 -497 4 0 93 92 79 138 -498 4 0 203 192 353 155 -499 4 0 192 353 314 203 -500 4 0 88 302 129 97 -501 4 0 169 342 354 302 -502 4 0 147 319 317 139 -503 4 0 435 426 629 373 -504 4 0 197 168 369 176 -505 4 0 369 176 361 197 -506 4 0 157 151 319 150 -507 4 0 307 319 312 191 -508 4 0 312 307 191 204 -509 4 0 628 373 441 374 -510 4 0 513 331 311 509 -511 4 0 49 594 413 46 -512 4 0 303 163 87 61 -513 4 0 146 342 154 122 -514 4 0 274 366 415 337 -515 4 0 274 258 366 337 -516 4 0 87 57 74 66 -517 4 0 304 306 336 384 -518 4 0 204 250 205 191 -519 4 0 110 74 66 87 -520 4 0 163 87 61 353 -521 4 0 204 205 250 241 -522 4 0 387 438 213 316 -523 4 0 150 160 348 311 -524 4 0 313 369 342 375 -525 4 0 313 322 369 375 -526 4 0 97 129 169 302 -527 4 0 504 305 393 150 -528 4 0 181 348 500 187 -529 4 0 610 527 42 44 -530 4 0 44 527 42 620 -531 4 0 311 305 456 509 -532 4 0 311 509 456 516 -533 4 0 365 512 166 116 -534 4 0 116 512 166 314 -535 4 0 509 305 508 331 -536 4 0 322 369 193 170 -537 4 0 535 526 581 632 -538 4 0 182 314 512 199 -539 4 0 497 441 373 540 -540 4 0 37 42 46 527 -541 4 0 500 209 187 348 -542 4 0 312 257 307 243 -543 4 0 323 366 281 276 -544 4 0 348 420 209 196 -545 4 0 366 279 276 272 -546 4 0 202 500 186 348 -547 4 0 386 406 221 232 -548 4 0 64 526 62 489 -549 4 0 336 159 185 195 -550 4 0 404 24 559 335 -551 4 0 404 24 607 559 -552 4 0 384 336 552 270 -553 4 0 244 240 438 213 -554 4 0 244 438 240 250 -555 4 0 430 461 620 333 -556 4 0 461 333 35 620 -557 4 0 61 564 64 334 -558 4 0 381 437 47 413 -559 4 0 279 277 265 258 -560 4 0 279 277 258 274 -561 4 0 186 500 181 348 -562 4 0 140 510 348 160 -563 4 0 377 410 36 350 -564 4 0 202 330 236 209 -565 4 0 380 345 614 468 -566 4 0 99 339 378 106 -567 4 0 378 106 418 99 -568 4 0 378 448 373 629 -569 4 0 194 235 307 182 -570 4 0 194 307 166 182 -571 4 0 194 307 183 166 -572 4 0 353 373 320 378 -573 4 0 68 97 83 302 -574 4 0 347 496 604 476 -575 4 0 161 181 411 373 -576 4 0 570 374 400 368 -577 4 0 40 38 35 29 -578 4 0 364 289 327 528 -579 4 0 324 309 319 273 -580 4 0 353 378 320 94 -581 4 0 358 91 471 375 -582 4 0 134 394 302 354 -583 4 0 394 149 108 354 -584 4 0 172 354 146 149 -585 4 0 382 358 471 375 -586 4 0 101 382 90 358 -587 4 0 651 346 638 390 -588 4 0 382 90 100 101 -589 4 0 334 594 564 475 -590 4 0 369 361 375 322 -591 4 0 322 197 369 361 -592 4 0 342 325 98 494 -593 4 0 325 313 148 342 -594 4 0 342 325 375 98 -595 4 0 115 369 123 367 -596 4 0 342 98 76 494 -597 4 0 369 375 576 115 -598 4 0 353 512 116 314 -599 4 0 336 304 552 296 -600 4 0 336 306 304 298 -601 4 0 226 514 336 296 -602 4 0 108 302 81 394 -603 4 0 181 411 373 374 -604 4 0 26 440 571 383 -605 4 0 26 383 346 440 -606 4 0 211 360 308 206 -607 4 0 87 74 57 77 -608 4 0 358 113 101 382 -609 4 0 195 388 336 226 -610 4 0 241 233 218 238 -611 4 0 155 339 378 353 -612 4 0 345 79 468 476 -613 4 0 213 316 417 175 -614 4 0 387 316 213 175 -615 4 0 312 307 262 319 -616 4 0 435 485 426 373 -617 4 0 435 373 125 485 -618 4 0 299 310 306 384 -619 4 0 26 425 25 34 -620 4 0 118 114 367 434 -621 4 0 26 34 25 608 -622 4 0 223 222 529 392 -623 4 0 527 38 37 35 -624 4 0 37 527 46 38 -625 4 0 342 123 90 375 -626 4 0 342 123 85 90 -627 4 0 335 350 33 35 -628 4 0 350 461 33 35 -629 4 0 85 91 90 123 -630 4 0 259 247 308 261 -631 4 0 629 628 448 373 -632 4 0 633 142 328 128 -633 4 0 629 497 628 373 -634 4 0 303 61 87 72 -635 4 0 236 254 234 331 -636 4 0 341 98 325 355 -637 4 0 373 570 400 569 -638 4 0 398 570 373 569 -639 4 0 49 413 527 46 -640 4 0 49 46 527 457 -641 4 0 49 626 48 527 -642 4 0 241 204 243 250 -643 4 0 49 527 48 457 -644 4 0 392 218 233 238 -645 4 0 233 392 238 223 -646 4 0 178 198 197 141 -647 4 0 198 197 141 369 -648 4 0 364 290 287 528 -649 4 0 419 381 564 413 -650 4 0 92 78 79 59 -651 4 0 192 373 314 353 -652 4 0 386 406 238 423 -653 4 0 367 369 137 391 -654 4 0 437 413 419 606 -655 4 0 413 437 47 606 -656 4 0 239 252 322 255 -657 4 0 454 61 339 155 -658 4 0 34 466 425 29 -659 4 0 221 386 232 240 -660 4 0 60 64 489 484 -661 4 0 484 65 60 64 -662 4 0 212 386 218 221 -663 4 0 241 240 386 212 -664 4 0 241 205 240 212 -665 4 0 607 24 16 470 -666 4 0 620 42 37 527 -667 4 0 37 333 42 620 -668 4 0 95 87 66 69 -669 4 0 113 164 382 361 -670 4 0 410 30 432 21 -671 4 0 371 1 522 458 -672 4 0 527 47 43 40 -673 4 0 596 425 17 15 -674 4 0 393 456 160 311 -675 4 0 110 95 87 66 -676 4 0 160 311 456 516 -677 4 0 512 511 365 166 -678 4 0 353 511 365 512 -679 4 0 128 144 318 138 -680 4 0 341 130 325 308 -681 4 0 87 61 57 58 -682 4 0 419 58 564 72 -683 4 0 414 289 327 364 -684 4 0 320 378 435 94 -685 4 0 364 528 287 289 -686 4 0 212 221 205 240 -687 4 0 134 172 149 354 -688 4 0 134 172 354 184 -689 4 0 319 147 191 307 -690 4 0 589 641 606 436 -691 4 0 347 79 59 476 -692 4 0 345 79 476 92 -693 4 0 92 138 144 328 -694 4 0 86 92 144 328 -695 4 0 32 399 34 38 -696 4 0 306 309 336 310 -697 4 0 347 604 468 476 -698 4 0 347 468 79 476 -699 4 0 614 345 79 468 -700 4 0 384 310 336 270 -701 4 0 439 25 26 422 -702 4 0 196 192 314 420 -703 4 0 348 420 196 314 -704 4 0 132 143 142 318 -705 4 0 164 142 143 318 -706 4 0 386 406 423 221 -707 4 0 35 527 38 40 -708 4 0 158 354 96 162 -709 4 0 169 302 354 162 -710 4 0 334 475 564 363 -711 4 0 155 61 303 75 -712 4 0 94 353 378 339 -713 4 0 224 233 219 212 -714 4 0 214 215 204 194 -715 4 0 204 243 230 241 -716 4 0 204 230 212 241 -717 4 0 391 474 369 136 -718 4 0 286 588 528 356 -719 4 0 35 620 527 47 -720 4 0 136 474 361 565 -721 4 0 566 526 632 64 -722 4 0 490 439 11 14 -723 4 0 209 330 420 348 -724 4 0 35 527 40 47 -725 4 0 76 342 73 98 -726 4 0 77 353 102 320 -727 4 0 268 308 261 260 -728 4 0 167 155 339 378 -729 4 0 465 289 385 344 -730 4 0 255 308 260 259 -731 4 0 335 24 470 33 -732 4 0 559 24 470 335 -733 4 0 522 1 371 428 -734 4 0 347 53 496 54 -735 4 0 559 24 607 470 -736 4 0 476 347 496 54 -737 4 0 312 204 243 307 -738 4 0 230 215 243 204 -739 4 0 241 218 212 386 -740 4 0 241 238 218 386 -741 4 0 29 33 28 23 -742 4 0 23 335 559 470 -743 4 0 297 382 361 341 -744 4 0 336 611 185 331 -745 4 0 388 185 336 611 -746 4 0 353 373 102 320 -747 4 0 373 102 314 353 -748 4 0 44 527 606 610 -749 4 0 74 110 84 353 -750 4 0 610 527 606 413 -751 4 0 325 341 375 98 -752 4 0 369 136 137 391 -753 4 0 169 354 342 313 -754 4 0 274 366 279 281 -755 4 0 281 366 279 276 -756 4 0 322 313 206 308 -757 4 0 414 289 344 385 -758 4 0 114 546 367 434 -759 4 0 367 391 434 369 -760 4 0 155 163 303 61 -761 4 0 47 620 527 44 -762 4 0 384 304 552 336 -763 4 0 384 310 306 336 -764 4 0 99 378 339 94 -765 4 0 506 94 378 99 -766 4 0 365 353 512 116 -767 4 0 378 99 418 506 -768 4 0 478 23 559 470 -769 4 0 328 86 633 128 -770 4 0 265 308 268 266 -771 4 0 268 308 263 266 -772 4 0 564 419 436 58 -773 4 0 460 75 564 65 -774 4 0 339 61 99 94 -775 4 0 518 564 65 460 -776 4 0 643 216 229 392 -777 4 0 342 88 76 67 -778 4 0 26 422 11 439 -779 4 0 26 440 439 571 -780 4 0 411 161 373 441 -781 4 0 442 467 412 10 -782 4 0 350 377 24 33 -783 4 0 225 409 217 223 -784 4 0 410 377 24 350 -785 4 0 24 350 33 335 -786 4 0 371 522 523 458 -787 4 0 278 324 273 276 -788 4 0 273 324 275 276 -789 4 0 170 354 172 184 -790 4 0 169 179 354 313 -791 4 0 607 16 24 580 -792 4 0 367 391 137 118 -793 4 0 35 620 37 527 -794 4 0 548 33 461 333 -795 4 0 414 385 344 294 -796 4 0 414 289 288 344 -797 4 0 65 64 484 454 -798 4 0 93 79 78 401 -799 4 0 375 382 358 90 -800 4 0 413 575 564 594 -801 4 0 187 181 368 189 -802 4 0 358 375 90 91 -803 4 0 275 276 324 323 -804 4 0 493 270 323 275 -805 4 0 532 323 276 275 -806 4 0 324 270 323 415 -807 4 0 275 323 324 270 -808 4 0 157 331 319 336 -809 4 0 454 339 61 338 -810 4 0 527 47 507 43 -811 4 0 74 87 110 353 -812 4 0 61 353 339 155 -813 4 0 444 445 618 379 -814 4 0 173 133 160 510 -815 4 0 352 604 468 347 -816 4 0 161 181 373 348 -817 4 0 23 335 470 33 -818 4 0 181 187 374 373 -819 4 0 29 35 28 33 -820 4 0 348 187 181 373 -821 4 0 562 10 412 447 -822 4 0 10 580 503 447 -823 4 0 399 351 34 38 -824 4 0 515 592 399 32 -825 4 0 434 112 637 474 -826 4 0 134 82 96 302 -827 4 0 224 230 233 212 -828 4 0 134 302 96 354 -829 4 0 302 354 162 96 -830 4 0 376 64 60 564 -831 4 0 606 640 589 45 -832 4 0 369 137 168 141 -833 4 0 113 361 583 136 -834 4 0 197 369 168 141 -835 4 0 12 7 4 14 -836 4 0 510 181 173 171 -837 4 0 61 339 353 94 -838 4 0 369 154 170 354 -839 4 0 404 607 24 21 -840 4 0 411 374 578 441 -841 4 0 500 186 189 480 -842 4 0 535 526 632 566 -843 4 0 628 441 497 483 -844 4 0 478 23 28 559 -845 4 0 28 335 559 23 -846 4 0 93 92 78 79 -847 4 0 554 473 631 453 -848 4 0 198 178 193 141 -849 4 0 187 444 209 500 -850 4 0 226 388 336 514 -851 4 0 287 464 285 528 -852 4 0 528 301 285 372 -853 4 0 497 629 426 373 -854 4 0 394 302 70 82 -855 4 0 64 61 454 75 -856 4 0 444 587 618 445 -857 4 0 467 458 371 523 -858 4 0 371 523 520 467 -859 4 0 371 520 551 467 -860 4 0 385 465 294 292 -861 4 0 468 604 345 476 -862 4 0 584 517 63 345 -863 4 0 176 136 137 369 -864 4 0 439 440 18 571 -865 4 0 490 26 11 439 -866 4 0 324 366 227 357 -867 4 0 606 413 419 436 -868 4 0 527 48 477 507 -869 4 0 527 477 48 457 -870 4 0 527 492 48 507 -871 4 0 527 626 48 492 -872 4 0 134 354 96 158 -873 4 0 62 64 489 60 -874 4 0 52 57 370 594 -875 4 0 326 52 55 564 -876 4 0 524 425 17 19 -877 4 0 373 441 161 540 -878 4 0 373 161 140 540 -879 4 0 66 326 55 58 -880 4 0 58 326 55 564 -881 4 0 310 309 336 270 -882 4 0 324 270 336 309 -883 4 0 157 336 185 331 -884 4 0 181 411 171 161 -885 4 0 640 589 641 606 -886 4 0 537 557 621 54 -887 4 0 282 285 340 288 -888 4 0 372 285 288 340 -889 4 0 382 100 98 341 -890 4 0 502 294 465 292 -891 4 0 43 34 351 38 -892 4 0 221 240 213 205 -893 4 0 438 240 205 213 -894 4 0 425 466 524 29 -895 4 0 354 302 146 108 -896 4 0 435 426 506 629 -897 4 0 497 506 426 629 -898 4 0 187 181 374 368 -899 4 0 517 79 614 345 -900 4 0 342 90 73 98 -901 4 0 180 141 178 152 -902 4 0 178 152 141 168 -903 4 0 193 180 141 178 -904 4 0 140 161 348 510 -905 4 0 9 442 13 362 -906 4 0 442 9 13 467 -907 4 0 408 505 503 580 -908 4 0 607 580 408 16 -909 4 0 327 289 414 385 -910 4 0 372 284 283 340 -911 4 0 359 89 526 566 -912 4 0 607 539 478 470 -913 4 0 140 373 125 348 -914 4 0 328 86 92 517 -915 4 0 527 47 44 606 -916 4 0 155 163 61 353 -917 4 0 367 391 118 434 -918 4 0 338 64 61 454 -919 4 0 64 338 484 454 -920 4 0 359 89 566 338 -921 4 0 489 526 566 64 -922 4 0 448 192 378 373 -923 4 0 350 39 377 33 -924 4 0 369 137 176 168 -925 4 0 377 350 553 39 -926 4 0 325 313 375 341 -927 4 0 340 288 625 282 -928 4 0 342 313 375 325 -929 4 0 524 466 19 20 -930 4 0 425 466 19 524 -931 4 0 348 395 186 202 -932 4 0 610 44 42 45 -933 4 0 409 433 217 223 -934 4 0 217 433 529 223 -935 4 0 582 375 471 115 -936 4 0 434 474 637 369 -937 4 0 382 375 471 582 -938 4 0 98 90 382 375 -939 4 0 382 100 90 98 -940 4 0 123 105 122 85 -941 4 0 122 85 105 80 -942 4 0 43 40 34 38 -943 4 0 369 474 361 136 -944 4 0 469 452 564 460 -945 4 0 46 41 527 457 -946 4 0 415 366 274 323 -947 4 0 191 387 316 438 -948 4 0 191 387 156 316 -949 4 0 434 391 474 369 -950 4 0 502 294 344 465 -951 4 0 502 294 292 293 -952 4 0 476 59 92 79 -953 4 0 306 309 319 336 -954 4 0 528 301 464 285 -955 4 0 301 282 464 285 -956 4 0 208 449 210 379 -957 4 0 210 379 220 208 -958 4 0 551 520 10 467 -959 4 0 359 89 339 106 -960 4 0 110 353 365 116 -961 4 0 353 511 110 365 -962 4 0 118 141 145 152 -963 4 0 34 28 466 29 -964 4 0 621 347 59 54 -965 4 0 59 621 79 347 -966 4 0 342 80 122 302 -967 4 0 369 123 154 342 -968 4 0 123 85 122 342 -969 4 0 122 342 85 80 -970 4 0 450 349 612 482 -971 4 0 564 55 436 413 -972 4 0 40 38 29 34 -973 4 0 606 641 413 436 -974 4 0 28 35 335 33 -975 4 0 34 25 32 29 -976 4 0 487 548 495 479 -977 4 0 187 209 196 348 -978 4 0 461 479 430 495 -979 4 0 311 513 509 186 -980 4 0 395 311 348 186 -981 4 0 187 196 209 444 -982 4 0 485 540 426 373 -983 4 0 21 580 24 447 -984 4 0 412 447 21 562 -985 4 0 412 562 21 446 -986 4 0 447 580 24 10 -987 4 0 46 527 610 413 -988 4 0 229 392 216 222 -989 4 0 323 281 366 274 -990 4 0 281 301 274 323 -991 4 0 599 625 429 282 -992 4 0 608 25 32 34 -993 4 0 372 288 284 340 -994 4 0 227 324 190 308 -995 4 0 373 196 348 187 -996 4 0 425 25 34 29 -997 4 0 628 448 373 591 -998 4 0 591 448 373 398 -999 4 0 477 43 41 527 -1000 4 0 80 71 81 302 -1001 4 0 457 477 41 527 -1002 4 0 647 487 430 479 -1003 4 0 628 373 497 441 -1004 4 0 578 628 441 374 -1005 4 0 410 24 335 350 -1006 4 0 393 311 160 150 -1007 4 0 367 118 137 141 -1008 4 0 343 488 356 396 -1009 4 0 87 72 61 58 -1010 4 0 488 588 356 396 -1011 4 0 476 54 59 347 -1012 4 0 94 353 61 77 -1013 4 0 110 353 87 107 -1014 4 0 251 245 322 201 -1015 4 0 245 179 322 201 -1016 4 0 11 422 486 14 -1017 4 0 287 588 464 528 -1018 4 0 10 467 412 551 -1019 4 0 13 551 412 467 -1020 4 0 371 467 551 13 -1021 4 0 551 10 8 412 -1022 4 0 113 164 361 136 -1023 4 0 425 25 15 26 -1024 4 0 140 348 125 160 -1025 4 0 451 588 528 286 -1026 4 0 180 152 145 141 -1027 4 0 607 16 539 470 -1028 4 0 374 570 400 373 -1029 4 0 373 374 556 400 -1030 4 0 374 373 556 628 -1031 4 0 441 628 578 483 -1032 4 0 497 642 418 629 -1033 4 0 167 89 106 339 -1034 4 0 346 440 390 521 -1035 4 0 369 123 342 375 -1036 4 0 583 382 498 361 -1037 4 0 564 75 72 61 -1038 4 0 564 61 64 75 -1039 4 0 345 517 79 92 -1040 4 0 533 529 223 222 -1041 4 0 498 582 576 375 -1042 4 0 575 376 609 49 -1043 4 0 412 10 8 447 -1044 4 0 561 472 549 468 -1045 4 0 239 322 252 231 -1046 4 0 397 12 4 14 -1047 4 0 367 369 434 576 -1048 4 0 206 313 322 179 -1049 4 0 322 179 313 354 -1050 4 0 12 2 4 7 -1051 4 0 346 638 26 608 -1052 4 0 66 87 57 58 -1053 4 0 72 58 564 61 -1054 4 0 322 207 231 239 -1055 4 0 201 354 322 207 -1056 4 0 239 255 322 201 -1057 4 0 533 402 529 222 -1058 4 0 60 518 564 65 -1059 4 0 11 486 12 14 -1060 4 0 118 168 141 152 -1061 4 0 60 376 564 518 -1062 4 0 576 375 582 115 -1063 4 0 515 34 399 351 -1064 4 0 334 564 64 363 -1065 4 0 311 331 150 305 -1066 4 0 473 538 597 519 -1067 4 0 564 594 575 475 -1068 4 0 36 30 432 410 -1069 4 0 343 396 356 279 -1070 4 0 281 279 356 396 -1071 4 0 281 274 301 356 -1072 4 0 486 7 14 422 -1073 4 0 642 153 585 629 -1074 4 0 153 642 628 629 -1075 4 0 503 447 8 10 -1076 4 0 461 430 620 416 -1077 4 0 493 270 275 280 -1078 4 0 275 493 532 323 -1079 4 0 532 493 282 323 -1080 4 0 461 495 430 416 -1081 4 0 493 532 280 275 -1082 4 0 389 381 47 413 -1083 4 0 49 413 626 527 -1084 4 0 500 189 186 181 -1085 4 0 498 382 582 375 -1086 4 0 410 30 24 377 -1087 4 0 30 410 36 377 -1088 4 0 366 265 279 272 -1089 4 0 608 34 32 31 -1090 4 0 527 40 43 38 -1091 4 0 46 527 41 38 -1092 4 0 43 527 38 41 -1093 4 0 597 639 7 486 -1094 4 0 306 298 336 331 -1095 4 0 11 26 15 543 -1096 4 0 554 11 15 543 -1097 4 0 416 430 620 649 -1098 4 0 291 290 364 327 -1099 4 0 637 498 375 361 -1100 4 0 39 548 33 461 -1101 4 0 422 634 25 543 -1102 4 0 583 582 382 113 -1103 4 0 367 114 118 141 -1104 4 0 473 422 11 554 -1105 4 0 178 197 168 141 -1106 4 0 375 369 123 115 -1107 4 0 91 123 115 375 -1108 4 0 377 350 36 553 -1109 4 0 173 181 516 186 -1110 4 0 110 95 107 87 -1111 4 0 353 107 163 87 -1112 4 0 46 527 42 610 -1113 4 0 500 209 348 202 -1114 4 0 334 61 564 57 -1115 4 0 510 103 140 161 -1116 4 0 160 104 140 133 -1117 4 0 486 11 473 422 -1118 4 0 336 611 331 514 -1119 4 0 576 434 637 369 -1120 4 0 29 466 524 20 -1121 4 0 366 279 265 258 -1122 4 0 366 279 258 274 -1123 4 0 89 484 338 454 -1124 4 0 462 621 568 534 -1125 4 0 133 104 140 103 -1126 4 0 462 534 568 531 -1127 4 0 521 440 390 563 -1128 4 0 383 440 563 390 -1129 4 0 141 154 170 369 -1130 4 0 141 193 369 170 -1131 4 0 173 181 510 516 -1132 4 0 348 510 181 516 -1133 4 0 324 366 276 272 -1134 4 0 415 324 366 323 -1135 4 0 477 527 507 43 -1136 4 0 26 25 440 346 -1137 4 0 430 333 42 479 -1138 4 0 460 452 564 75 -1139 4 0 31 515 32 592 -1140 4 0 181 189 187 500 -1141 4 0 389 527 413 47 -1142 4 0 413 389 626 527 -1143 4 0 376 590 49 575 -1144 4 0 331 611 185 508 -1145 4 0 223 392 407 219 -1146 4 0 223 233 392 219 -1147 4 0 538 648 597 519 -1148 4 0 597 648 538 486 -1149 4 0 557 537 568 499 -1150 4 0 553 39 461 416 -1151 4 0 290 528 451 287 -1152 4 0 554 453 332 560 -1153 4 0 601 467 458 9 -1154 4 0 623 525 535 566 -1155 4 0 566 525 535 526 -1156 4 0 378 106 431 418 -1157 4 0 53 496 352 347 -1158 4 0 564 300 419 72 -1159 4 0 564 452 300 72 -1160 4 0 2 6 7 486 -1161 4 0 421 451 528 286 -1162 4 0 451 528 588 287 -1163 4 0 409 595 433 491 -1164 4 0 79 621 78 401 -1165 4 0 401 621 78 555 -1166 4 0 78 537 555 621 -1167 4 0 599 340 282 301 -1168 4 0 493 599 282 301 -1169 4 0 430 620 42 333 -1170 4 0 565 498 112 637 -1171 4 0 583 498 112 565 -1172 4 0 599 429 536 282 -1173 4 0 599 625 459 429 -1174 4 0 543 554 332 15 -1175 4 0 474 112 637 565 -1176 4 0 364 290 528 327 -1177 4 0 548 461 479 333 -1178 4 0 461 333 430 479 -1179 4 0 383 390 346 440 -1180 4 0 65 60 64 564 -1181 4 0 65 64 75 564 -1182 4 0 383 638 346 390 -1183 4 0 380 468 614 549 -1184 4 0 532 282 276 323 -1185 4 0 157 331 504 150 -1186 4 0 89 454 338 339 -1187 4 0 167 454 89 339 -1188 4 0 8 5 10 551 -1189 4 0 5 520 10 551 -1190 4 0 492 626 545 389 -1191 4 0 389 626 545 469 -1192 4 0 37 33 35 29 -1193 4 0 615 568 499 557 -1194 4 0 500 186 480 202 -1195 4 0 54 56 53 496 -1196 4 0 294 295 291 385 -1197 4 0 295 291 385 327 -1198 4 0 295 294 292 385 -1199 4 0 474 637 361 565 -1200 4 0 497 373 426 540 -1201 4 0 40 29 28 34 -1202 4 0 535 525 581 526 -1203 4 0 328 92 79 517 -1204 4 0 496 56 352 604 -1205 4 0 459 536 646 493 -1206 4 0 459 429 624 536 -1207 4 0 493 536 280 532 -1208 4 0 25 346 26 608 -1209 4 0 351 399 41 38 -1210 4 0 43 41 38 351 -1211 4 0 527 413 47 606 -1212 4 0 308 252 322 231 -1213 4 0 308 255 322 252 -1214 4 0 256 231 252 308 -1215 4 0 256 308 259 247 -1216 4 0 21 30 24 410 -1217 4 0 21 30 562 24 -1218 4 0 315 621 555 568 -1219 4 0 217 219 223 407 -1220 4 0 225 223 219 233 -1221 4 0 407 217 529 223 -1222 4 0 381 452 300 564 -1223 4 0 595 635 433 491 -1224 4 0 414 385 291 327 -1225 4 0 416 39 461 495 -1226 4 0 461 39 548 495 -1227 4 0 461 548 479 495 -1228 4 0 301 282 281 464 -1229 4 0 301 282 285 340 -1230 4 0 315 621 568 462 -1231 4 0 372 289 288 285 -1232 4 0 289 288 285 414 -1233 4 0 431 153 106 378 -1234 4 0 55 641 589 436 -1235 4 0 651 572 638 608 -1236 4 0 564 452 72 75 -1237 4 0 573 534 567 613 -1238 4 0 567 645 600 534 -1239 4 0 499 568 577 537 -1240 4 0 414 327 291 364 -1241 4 0 561 549 614 468 -1242 4 0 338 489 566 64 -1243 4 0 89 484 489 338 -1244 4 0 385 294 465 344 -1245 4 0 445 196 444 209 -1246 4 0 209 550 444 427 -1247 4 0 490 14 11 12 -1248 4 0 490 18 14 12 -1249 4 0 597 648 486 7 -1250 4 0 486 639 7 422 -1251 4 0 639 473 597 631 -1252 4 0 529 491 616 533 -1253 4 0 435 320 125 373 -1254 4 0 616 491 529 541 -1255 4 0 497 628 642 629 -1256 4 0 46 52 413 602 -1257 4 0 623 359 566 338 -1258 4 0 497 506 629 418 -1259 4 0 99 359 623 338 -1260 4 0 65 64 454 75 -1261 4 0 209 617 550 427 -1262 4 0 86 328 144 128 -1263 4 0 570 187 374 368 -1264 4 0 403 86 633 328 -1265 4 0 601 522 458 523 -1266 4 0 604 352 472 56 -1267 4 0 273 312 319 324 -1268 4 0 380 614 63 549 -1269 4 0 561 549 63 614 -1270 4 0 623 525 566 359 -1271 4 0 359 525 566 526 -1272 4 0 566 89 526 489 -1273 4 0 113 382 358 471 -1274 4 0 582 471 382 113 -1275 4 0 523 467 458 601 -1276 4 0 268 308 260 263 -1277 4 0 374 628 556 578 -1278 4 0 498 582 382 583 -1279 4 0 586 645 534 557 -1280 4 0 361 176 369 136 -1281 4 0 277 356 274 279 -1282 4 0 576 637 375 369 -1283 4 0 637 375 369 361 -1284 4 0 373 556 569 400 -1285 4 0 556 373 569 628 -1286 4 0 447 562 24 21 -1287 4 0 47 492 527 507 -1288 4 0 495 39 548 487 -1289 4 0 572 608 651 650 -1290 4 0 541 619 542 574 -1291 4 0 27 562 21 30 -1292 4 0 21 446 562 27 -1293 4 0 517 328 614 79 -1294 4 0 545 530 622 575 -1295 4 0 522 371 523 558 -1296 4 0 523 371 520 558 -1297 4 0 471 91 115 375 -1298 4 0 578 127 628 556 -1299 4 0 127 153 628 556 -1300 4 0 641 413 55 52 -1301 4 0 55 564 436 58 -1302 4 0 564 334 57 594 -1303 4 0 55 641 436 413 -1304 4 0 575 413 49 594 -1305 4 0 15 17 596 560 -1306 4 0 521 440 563 571 -1307 4 0 632 581 62 526 -1308 4 0 285 372 301 340 -1309 4 0 290 451 528 421 -1310 4 0 326 57 564 58 -1311 4 0 205 212 241 204 -1312 4 0 564 452 469 381 -1313 4 0 239 322 207 201 -1314 4 0 223 392 529 407 -1315 4 0 381 564 413 469 -1316 4 0 395 513 311 186 -1317 4 0 389 469 413 626 -1318 4 0 136 361 583 565 -1319 4 0 586 645 567 534 -1320 4 0 32 25 608 346 -1321 4 0 369 367 137 141 -1322 4 0 469 575 545 622 -1323 4 0 593 543 634 422 -1324 4 0 373 569 628 591 -1325 4 0 556 569 153 628 -1326 4 0 196 187 373 570 -1327 4 0 167 454 339 155 -1328 4 0 590 626 575 530 -1329 4 0 536 493 282 532 -1330 4 0 133 140 160 510 -1331 4 0 376 363 64 564 -1332 4 0 209 427 444 587 -1333 4 0 571 440 563 383 -1334 4 0 498 375 576 637 -1335 4 0 531 534 568 579 -1336 4 0 534 568 557 621 -1337 4 0 218 392 643 238 -1338 4 0 568 555 577 537 -1339 4 0 475 609 363 49 -1340 4 0 363 609 475 564 -1341 4 0 393 311 150 305 -1342 4 0 19 425 17 596 -1343 4 0 596 17 603 560 -1344 4 0 522 428 371 558 -1345 4 0 127 628 497 483 -1346 4 0 492 48 545 626 -1347 4 0 21 607 24 580 -1348 4 0 132 117 318 128 -1349 4 0 633 132 547 142 -1350 4 0 437 381 419 413 -1351 4 0 419 381 437 300 -1352 4 0 173 181 186 171 -1353 4 0 405 613 600 534 -1354 4 0 632 526 62 64 -1355 4 0 489 484 64 338 -1356 4 0 600 54 53 621 -1357 4 0 29 20 28 466 -1358 4 0 20 28 466 443 -1359 4 0 49 48 626 590 -1360 4 0 63 345 614 380 -1361 4 0 584 345 63 380 -1362 4 0 470 607 559 478 -1363 4 0 28 23 22 20 -1364 4 0 478 23 22 28 -1365 4 0 473 422 554 631 -1366 4 0 555 537 568 621 -1367 4 0 18 490 14 439 -1368 4 0 596 17 19 603 -1369 4 0 571 440 18 521 -1370 4 0 542 491 616 541 -1371 4 0 534 568 615 557 -1372 4 0 534 568 579 615 -1373 4 0 392 222 229 238 -1374 4 0 626 48 530 590 -1375 4 0 238 406 229 423 -1376 4 0 629 585 642 418 -1377 4 0 418 506 629 378 -1378 4 0 378 431 629 418 -1379 4 0 153 448 628 591 -1380 4 0 591 569 628 153 -1381 4 0 550 209 500 627 -1382 4 0 515 31 32 34 -1383 4 0 209 627 550 617 -1384 4 0 569 556 153 400 -1385 4 0 645 621 557 54 -1386 4 0 529 491 533 223 -1387 4 0 601 1 458 522 -1388 4 0 522 601 1 3 -1389 4 0 359 339 99 106 -1390 4 0 338 99 359 339 -1391 4 0 49 575 626 413 -1392 4 0 473 597 631 453 -1393 4 0 605 564 518 460 -1394 4 0 222 392 402 529 -1395 4 0 113 382 583 361 -1396 4 0 33 335 28 23 -1397 4 0 370 52 594 46 -1398 4 0 408 505 580 607 -1399 4 0 413 640 602 641 -1400 4 0 630 376 564 609 -1401 4 0 49 376 609 363 -1402 4 0 363 376 609 564 -1403 4 0 393 456 311 305 -1404 4 0 218 221 386 643 -1405 4 0 643 386 423 221 -1406 4 0 141 123 369 367 -1407 4 0 498 382 375 361 -1408 4 0 474 637 369 361 -1409 4 0 558 371 520 551 -1410 4 0 558 428 371 551 -1411 4 0 374 441 411 373 -1412 4 0 422 25 26 543 -1413 4 0 25 17 15 634 -1414 4 0 606 44 610 45 -1415 4 0 367 115 369 576 -1416 4 0 367 576 546 115 -1417 4 0 636 573 567 613 -1418 4 0 615 51 579 573 -1419 4 0 50 51 615 636 -1420 4 0 55 413 564 52 -1421 4 0 594 52 413 46 -1422 4 0 564 326 52 57 -1423 4 0 367 434 546 576 -1424 4 0 208 449 379 445 -1425 4 0 379 445 544 208 -1426 4 0 26 439 440 25 -1427 4 0 622 575 605 469 -1428 4 0 636 586 567 573 -1429 4 0 573 586 567 534 -1430 4 0 599 625 340 283 -1431 4 0 605 630 518 564 -1432 4 0 171 510 181 161 -1433 4 0 32 29 38 34 -1434 4 0 402 216 392 222 -1435 4 0 223 222 392 238 -1436 4 0 389 492 527 47 -1437 4 0 389 492 626 527 -1438 4 0 577 555 78 537 -1439 4 0 315 621 401 555 -1440 4 0 15 598 634 560 -1441 4 0 634 17 15 560 -1442 4 0 481 142 328 633 -1443 4 0 128 328 144 138 -1444 4 0 413 610 640 606 -1445 4 0 640 606 610 45 -1446 4 0 379 449 444 445 -1447 4 0 187 449 196 444 -1448 4 0 445 449 444 196 -1449 4 0 605 564 460 469 -1450 4 0 575 564 605 469 -1451 4 0 541 200 619 574 -1452 4 0 564 436 419 413 -1453 4 0 517 482 63 614 -1454 4 0 154 369 141 123 -1455 4 0 583 498 565 361 -1456 4 0 498 361 637 565 -1457 4 0 622 530 630 575 -1458 4 0 21 30 432 27 -1459 4 0 173 510 160 516 -1460 4 0 311 160 348 516 -1461 4 0 485 140 540 373 -1462 4 0 21 505 580 447 -1463 4 0 490 26 439 571 -1464 4 0 379 544 220 208 -1465 4 0 348 516 181 186 -1466 4 0 186 509 311 516 -1467 4 0 209 202 627 617 -1468 4 0 433 635 529 491 -1469 4 0 430 42 620 44 -1470 4 0 649 430 620 44 -1471 4 0 529 635 541 491 -1472 4 0 404 24 410 21 -1473 4 0 404 410 24 335 -1474 4 0 89 338 359 339 -1475 4 0 450 328 482 517 -1476 4 0 517 328 482 614 -1477 4 0 78 59 537 621 -1478 4 0 588 396 281 356 -1479 4 0 286 488 588 356 -1480 4 0 424 543 593 422 -1481 4 0 463 607 408 16 -1482 4 0 389 381 413 469 -1483 4 0 413 469 575 626 -1484 4 0 626 469 575 545 -1485 4 0 554 11 543 422 -1486 4 0 459 624 646 536 -1487 4 0 332 543 593 424 -1488 4 0 631 554 424 422 -1489 4 0 153 431 629 378 -1490 4 0 545 48 530 626 -1491 4 0 626 530 545 575 -1492 4 0 59 621 78 79 -1493 4 0 160 510 348 516 -1494 4 0 626 590 575 49 -1495 4 0 576 434 112 637 -1496 4 0 498 576 112 637 -1497 4 0 346 651 638 608 -1498 4 0 13 442 412 362 -1499 4 0 13 467 412 442 -1500 4 0 132 142 633 128 -1501 4 0 184 180 172 170 -1502 4 0 631 332 424 554 -1503 4 0 531 573 579 51 -1504 4 0 521 571 563 18 -1505 4 0 599 625 282 340 -1506 4 0 622 630 605 575 -1507 4 0 562 442 362 412 -1508 4 0 193 180 170 141 -1509 4 0 50 644 636 615 -1510 4 0 443 466 20 19 -1511 4 0 616 542 533 491 -1512 4 0 413 594 564 52 -1513 4 0 621 53 600 405 -1514 4 0 362 562 446 27 -1515 4 0 403 547 321 481 -1516 4 0 403 481 321 329 -1517 4 0 562 442 412 10 -1518 4 0 493 459 536 599 -1519 4 0 493 599 536 282 -1520 4 0 450 86 328 517 -1521 4 0 413 602 610 46 -1522 4 0 29 23 28 20 -1523 4 0 223 409 433 491 -1524 4 0 621 59 537 54 -1525 4 0 13 362 412 446 -1526 4 0 439 422 11 14 -1527 4 0 639 473 631 422 -1528 4 0 450 612 584 517 -1529 4 0 450 482 612 517 -1530 4 0 413 641 602 52 -1531 4 0 447 10 24 562 -1532 4 0 531 573 534 579 -1533 4 0 380 345 468 604 -1534 4 0 587 427 444 618 -1535 4 0 613 567 600 534 -1536 4 0 218 386 238 643 -1537 4 0 643 238 423 386 -1538 4 0 347 496 352 604 -1539 4 0 63 345 517 614 -1540 4 0 584 612 63 517 -1541 4 0 629 431 585 418 -1542 4 0 153 431 585 629 -1543 4 0 463 539 478 607 -1544 4 0 463 539 607 16 -1545 4 0 564 609 475 575 -1546 4 0 533 529 402 616 -1547 4 0 376 630 564 518 -1548 4 0 645 54 600 621 -1549 4 0 380 468 472 604 -1550 4 0 604 468 472 352 -1551 4 0 380 468 549 472 -1552 4 0 570 187 373 374 -1553 4 0 606 413 641 640 -1554 4 0 413 610 602 640 -1555 4 0 458 467 13 9 -1556 4 0 467 458 13 371 -1557 4 0 11 422 26 543 -1558 4 0 25 17 425 15 -1559 4 0 646 536 280 493 -1560 4 0 646 624 280 536 -1561 4 0 647 430 44 42 -1562 4 0 618 544 220 379 -1563 4 0 648 6 486 7 -1564 4 0 648 6 538 486 -1565 4 0 403 633 547 481 -1566 4 0 403 328 633 481 -1567 4 0 483 127 628 578 -1568 4 0 486 7 12 14 -1569 4 0 53 56 352 496 -1570 4 0 340 288 284 625 -1571 4 0 283 340 284 625 -1572 4 0 561 352 472 468 -1573 4 0 86 450 328 403 -1574 4 0 329 403 481 328 -1575 4 0 455 288 284 372 -1576 4 0 501 288 284 455 -1577 4 0 376 530 575 630 -1578 4 0 630 376 609 575 -1579 4 0 430 479 42 647 -1580 4 0 621 405 600 534 -1581 4 0 22 28 20 443 -1582 4 0 643 238 229 423 -1583 4 0 481 633 547 142 -1584 4 0 558 428 551 652 -1585 4 0 509 611 331 508 -1586 4 0 513 514 331 611 -1587 4 0 509 513 331 611 -1588 4 0 601 9 1 3 -1589 4 0 289 288 344 501 -1590 4 0 515 32 399 34 -1591 4 0 403 321 349 329 -1592 4 0 392 229 643 238 -1593 4 0 618 445 544 379 -1594 4 0 618 587 544 445 -1595 4 0 531 613 534 573 -1596 4 0 629 153 448 628 -1597 4 0 538 473 597 486 -1598 4 0 597 473 639 486 -1599 4 0 650 31 608 346 -1600 4 0 607 505 580 21 -1601 4 0 288 455 289 372 -1602 4 0 289 455 288 501 -1603 4 0 376 530 590 575 -1604 4 0 49 594 475 575 -1605 4 0 356 279 281 274 -1606 4 0 550 209 444 500 -1607 4 0 362 412 446 562 -1608 4 0 529 433 491 223 -1609 4 0 455 372 284 283 -1610 4 0 465 501 455 289 -1611 4 0 465 289 344 501 -1612 4 0 445 209 444 587 -1613 4 0 153 642 127 628 -1614 4 0 294 385 291 414 -1615 4 0 283 625 459 599 -1616 4 0 613 531 51 573 -1617 4 0 636 573 613 51 -1618 4 0 557 621 568 537 -1619 4 0 558 551 520 5 -1620 4 0 500 209 202 627 -1621 4 0 635 200 541 574 -1622 4 0 595 200 635 574 -1623 4 0 558 652 551 5 -1624 4 0 534 579 573 615 -1625 4 0 605 575 630 564 -1626 4 0 31 346 32 608 -1627 4 0 631 424 639 422 -1628 4 0 383 346 638 26 -1629 4 0 469 575 564 413 -1630 4 0 15 560 332 598 -1631 4 0 15 554 332 560 -1632 4 0 586 557 534 615 -1633 4 0 573 586 534 615 -1634 4 0 332 543 598 593 -1635 4 0 543 332 598 15 -1636 4 0 609 575 564 630 -1637 4 0 554 631 332 453 -1638 4 0 424 554 543 422 -1639 4 0 608 346 651 650 -1640 4 0 487 495 430 479 -1641 4 0 645 621 534 557 -1642 4 0 645 621 600 534 -1643 4 0 542 491 541 574 -1644 4 0 541 635 574 491 -1645 4 0 636 644 586 573 -1646 4 0 573 586 615 644 -1647 4 0 543 634 598 593 -1648 4 0 497 127 642 628 -1649 4 0 598 543 15 634 -1650 4 0 25 15 543 634 -1651 4 0 473 519 597 453 -1652 4 0 595 574 635 491 -1653 4 0 636 51 615 573 -1654 4 0 644 573 636 615 -$EndElements -$ElementData -1 -"color" -1 -0.0 -3 -0 -1 -1654 -1 7.56199 -2 4.86806 -3 4.40144 -4 6.42934 -5 4.22059 -6 5.73014 -7 6.38728 -8 6.65278 -9 6.11566 -10 8.59831 -11 4.59846 -12 3.75402 -13 4.81655 -14 5.303 -15 4.23688 -16 4.44352 -17 9.61146 -18 4.02007 -19 6.55381 -20 4.32183 -21 3.77651 -22 4.28126 -23 4.67035 -24 4.25302 -25 3.24949 -26 3.81682 -27 3.6786 -28 5.26567 -29 5.75883 -30 4.40013 -31 4.8604 -32 3.88159 -33 3.62912 -34 6.09732 -35 6.23606 -36 6.81931 -37 3.98474 -38 5.09313 -39 7.92162 -40 5.91342 -41 5.89822 -42 7.79576 -43 3.26766 -44 6.40478 -45 3.30998 -46 5.75804 -47 4.44341 -48 5.56712 -49 7.92901 -50 7.32341 -51 4.11488 -52 7.27876 -53 4.46523 -54 4.41017 -55 4.24074 -56 5.18865 -57 3.67411 -58 3.93323 -59 6.27803 -60 5.7046 -61 5.43246 -62 6.62422 -63 6.87791 -64 4.8315 -65 4.41484 -66 3.44597 -67 4.80585 -68 4.76576 -69 5.09151 -70 3.90176 -71 3.98978 -72 7.05842 -73 5.79771 -74 5.72113 -75 5.39406 -76 8.36837 -77 6.57885 -78 3.81664 -79 5.04602 -80 5.13045 -81 4.17786 -82 4.12193 -83 5.498 -84 3.9477 -85 4.17729 -86 4.53085 -87 4.87674 -88 5.63865 -89 4.91132 -90 5.42233 -91 7.2101 -92 6.62552 -93 5.99626 -94 5.99827 -95 4.64279 -96 4.40763 -97 7.74874 -98 4.60244 -99 4.55322 -100 3.87632 -101 4.43066 -102 3.5908 -103 4.4961 -104 4.6942 -105 6.85876 -106 6.09827 -107 5.34771 -108 3.88554 -109 4.99917 -110 5.07909 -111 5.16529 -112 6.2445 -113 4.05386 -114 4.0937 -115 4.62717 -116 4.31849 -117 3.26285 -118 3.35407 -119 3.68025 -120 5.5668 -121 4.22251 -122 4.99967 -123 4.02172 -124 7.95474 -125 6.88951 -126 5.11647 -127 3.62751 -128 3.75947 -129 5.71937 -130 4.65378 -131 4.22097 -132 3.54665 -133 4.0164 -134 4.14403 -135 5.88228 -136 3.88365 -137 4.9027 -138 3.88649 -139 3.94684 -140 5.61741 -141 4.86852 -142 4.25794 -143 7.6941 -144 4.73617 -145 3.12373 -146 4.88928 -147 3.62576 -148 4.16485 -149 3.9426 -150 3.46852 -151 6.77747 -152 5.33702 -153 6.56503 -154 5.80932 -155 6.15413 -156 6.85355 -157 4.14906 -158 6.14933 -159 6.69641 -160 3.64734 -161 9.61926 -162 4.84044 -163 6.90865 -164 3.44809 -165 7.79131 -166 4.2801 -167 3.52051 -168 5.45391 -169 3.39718 -170 4.71838 -171 3.97902 -172 6.18658 -173 4.17284 -174 3.92603 -175 6.61929 -176 4.47741 -177 5.4168 -178 4.66072 -179 6.78272 -180 8.92575 -181 3.81346 -182 3.82779 -183 3.59616 -184 4.4729 -185 4.12509 -186 9.13405 -187 4.3469 -188 4.17304 -189 3.37722 -190 4.22285 -191 3.89981 -192 3.56114 -193 5.07249 -194 5.73119 -195 3.31977 -196 7.91262 -197 4.91172 -198 4.3087 -199 4.15402 -200 7.6821 -201 4.41955 -202 4.64581 -203 4.16326 -204 7.51723 -205 6.23256 -206 4.63327 -207 4.85318 -208 6.48807 -209 3.61821 -210 5.09043 -211 8.53276 -212 6.52094 -213 3.90421 -214 4.42601 -215 3.83625 -216 5.54714 -217 3.51603 -218 3.84227 -219 5.7805 -220 5.82631 -221 4.20829 -222 5.28021 -223 4.00498 -224 6.02503 -225 5.06898 -226 5.05237 -227 4.69681 -228 4.59421 -229 4.21961 -230 4.26009 -231 5.25661 -232 6.12045 -233 4.26478 -234 3.42011 -235 3.96254 -236 5.39782 -237 5.34452 -238 5.57074 -239 3.58786 -240 5.48832 -241 5.04805 -242 6.99507 -243 4.86669 -244 8.67723 -245 4.42583 -246 6.08779 -247 8.30081 -248 4.11458 -249 7.33372 -250 4.37632 -251 6.55974 -252 4.06411 -253 7.65217 -254 4.98446 -255 7.00166 -256 9.18261 -257 3.97417 -258 3.76504 -259 4.45173 -260 3.78705 -261 8.85178 -262 5.99438 -263 3.68369 -264 4.64732 -265 5.79147 -266 6.364 -267 5.03453 -268 4.96944 -269 4.75356 -270 3.20622 -271 4.24018 -272 4.41709 -273 4.21315 -274 4.38612 -275 6.51163 -276 5.01322 -277 5.46653 -278 3.97587 -279 6.44458 -280 4.97667 -281 5.55967 -282 5.85158 -283 5.0027 -284 3.48534 -285 6.58618 -286 4.80285 -287 5.94949 -288 4.82903 -289 7.5367 -290 5.70127 -291 7.09932 -292 5.78603 -293 5.97275 -294 3.8847 -295 7.18803 -296 4.24715 -297 6.96264 -298 7.0952 -299 4.63648 -300 6.55609 -301 5.16808 -302 5.24241 -303 3.54707 -304 4.3924 -305 4.0213 -306 4.62658 -307 4.81065 -308 4.56642 -309 6.50736 -310 4.75308 -311 3.8215 -312 3.41325 -313 4.08294 -314 4.91393 -315 5.30757 -316 7.02954 -317 5.24187 -318 4.13738 -319 6.58547 -320 3.70239 -321 3.67817 -322 4.58162 -323 5.24492 -324 4.86733 -325 4.91221 -326 4.2757 -327 5.39939 -328 4.61598 -329 8.42673 -330 6.14168 -331 4.57608 -332 3.81451 -333 4.29124 -334 4.12792 -335 5.02872 -336 5.23399 -337 3.38677 -338 4.50817 -339 5.28311 -340 5.64442 -341 4.71327 -342 6.09192 -343 4.17098 -344 7.35127 -345 5.55052 -346 8.62264 -347 7.92427 -348 4.62414 -349 5.61806 -350 5.34776 -351 6.86714 -352 4.07043 -353 3.76518 -354 3.52133 -355 4.0364 -356 4.23061 -357 5.51497 -358 5.34338 -359 5.2446 -360 3.66377 -361 3.61536 -362 4.93218 -363 5.91732 -364 3.99037 -365 6.86673 -366 4.57754 -367 4.54417 -368 3.49705 -369 3.68222 -370 4.05441 -371 3.28484 -372 3.86728 -373 6.47469 -374 3.8287 -375 4.21948 -376 6.50072 -377 5.2599 -378 5.46621 -379 3.90163 -380 8.20664 -381 5.20216 -382 5.3226 -383 4.03878 -384 8.93219 -385 6.79859 -386 5.0444 -387 4.38992 -388 6.97679 -389 3.69486 -390 3.64051 -391 3.67985 -392 6.23422 -393 3.30838 -394 7.50667 -395 3.94216 -396 6.5134 -397 8.60865 -398 4.39139 -399 3.46463 -400 3.90001 -401 4.26802 -402 3.71403 -403 3.59913 -404 3.15595 -405 4.92885 -406 9.80662 -407 3.63884 -408 3.80748 -409 5.15094 -410 6.35325 -411 4.20196 -412 5.86833 -413 5.91247 -414 3.313 -415 3.37645 -416 4.89339 -417 5.19552 -418 6.53485 -419 7.98558 -420 3.6091 -421 4.05488 -422 4.29978 -423 4.68265 -424 8.03386 -425 5.59842 -426 4.70185 -427 3.61697 -428 5.69205 -429 7.16982 -430 4.13106 -431 3.56492 -432 4.22082 -433 4.55629 -434 4.58142 -435 5.53457 -436 6.93426 -437 4.80377 -438 3.84526 -439 3.94317 -440 3.45505 -441 5.16289 -442 3.25289 -443 3.95152 -444 5.40892 -445 6.95209 -446 4.15315 -447 5.02186 -448 4.01812 -449 3.96462 -450 7.14857 -451 4.97123 -452 4.79327 -453 4.80934 -454 7.58936 -455 4.07601 -456 4.83387 -457 4.20561 -458 4.19693 -459 4.28828 -460 6.64926 -461 6.10328 -462 5.14523 -463 3.29956 -464 7.82612 -465 6.51338 -466 5.14228 -467 6.36966 -468 4.00039 -469 5.25401 -470 4.90217 -471 3.91685 -472 4.04775 -473 3.71452 -474 4.00893 -475 6.15397 -476 4.73995 -477 4.49103 -478 6.01817 -479 4.51129 -480 4.45673 -481 4.53029 -482 4.39765 -483 4.84946 -484 4.41482 -485 5.22789 -486 4.83751 -487 4.52841 -488 4.37907 -489 4.53931 -490 3.94812 -491 5.60107 -492 7.82411 -493 6.10887 -494 3.61105 -495 6.22222 -496 5.87689 -497 4.37764 -498 5.74756 -499 5.41576 -500 3.94004 -501 5.49027 -502 4.62278 -503 5.90077 -504 3.72543 -505 8.58284 -506 9.99379 -507 3.93429 -508 7.00354 -509 3.34162 -510 6.26251 -511 4.5708 -512 4.61934 -513 6.10199 -514 7.60203 -515 3.49142 -516 6.17078 -517 5.25425 -518 6.30042 -519 5.72046 -520 4.47283 -521 4.83221 -522 4.41013 -523 5.97733 -524 3.99931 -525 4.76894 -526 3.74452 -527 6.2368 -528 4.09343 -529 6.26363 -530 6.83661 -531 3.96425 -532 3.43579 -533 5.77657 -534 5.34581 -535 4.68041 -536 4.37814 -537 5.99737 -538 5.3648 -539 5.4205 -540 4.22935 -541 5.82056 -542 3.98684 -543 3.28936 -544 4.1958 -545 4.33791 -546 4.85201 -547 5.22988 -548 6.51603 -549 4.38544 -550 4.03691 -551 4.28065 -552 7.54771 -553 5.3477 -554 3.98013 -555 3.65612 -556 3.6305 -557 4.96827 -558 7.0639 -559 5.12306 -560 5.26116 -561 3.98468 -562 4.06433 -563 4.43174 -564 9.65465 -565 4.48661 -566 7.06711 -567 6.01908 -568 5.78751 -569 6.07332 -570 8.58829 -571 7.11434 -572 3.46196 -573 5.46102 -574 6.3086 -575 5.34819 -576 6.91082 -577 4.47437 -578 7.81942 -579 6.82906 -580 4.72318 -581 4.06215 -582 9.60519 -583 5.3436 -584 4.7691 -585 4.475 -586 5.84693 -587 5.8161 -588 4.01326 -589 8.52049 -590 6.06203 -591 3.94 -592 6.42148 -593 6.28834 -594 4.88767 -595 7.62703 -596 7.56987 -597 5.54109 -598 4.11926 -599 6.37613 -600 4.92981 -601 4.80206 -602 3.26213 -603 6.37042 -604 5.17572 -605 3.76555 -606 5.26092 -607 4.19725 -608 3.19057 -609 5.88572 -610 5.22575 -611 3.782 -612 4.38116 -613 8.53952 -614 4.30787 -615 4.10562 -616 7.62857 -617 5.65392 -618 5.96086 -619 4.91053 -620 6.14863 -621 5.91276 -622 4.27409 -623 5.55369 -624 4.8645 -625 4.77293 -626 3.55957 -627 4.11882 -628 3.68402 -629 6.55336 -630 5.93665 -631 6.29134 -632 5.06148 -633 6.32722 -634 3.56814 -635 4.97852 -636 5.319 -637 7.67988 -638 4.9724 -639 3.58948 -640 3.2273 -641 4.94275 -642 6.132 -643 4.23477 -644 3.8824 -645 6.47761 -646 5.83872 -647 6.52367 -648 9.09261 -649 4.02275 -650 4.5423 -651 3.77518 -652 9.34733 -653 4.29857 -654 3.53165 -655 3.69875 -656 8.91855 -657 8.27777 -658 4.2927 -659 5.44146 -660 4.88306 -661 4.61662 -662 4.66585 -663 4.08773 -664 5.47614 -665 4.82537 -666 5.34588 -667 5.09433 -668 4.74203 -669 4.80349 -670 5.17033 -671 5.55982 -672 5.85245 -673 8.50255 -674 5.05679 -675 8.2833 -676 4.20019 -677 6.65706 -678 5.50201 -679 3.83497 -680 8.04853 -681 3.98407 -682 4.14575 -683 4.40359 -684 3.83137 -685 7.5115 -686 4.55691 -687 5.02113 -688 4.10109 -689 3.2165 -690 6.76792 -691 7.39527 -692 5.09019 -693 4.66208 -694 4.89628 -695 3.82454 -696 7.89338 -697 4.34543 -698 4.53367 -699 4.2245 -700 7.97378 -701 5.36364 -702 5.48083 -703 5.18437 -704 7.54515 -705 8.01303 -706 6.9711 -707 5.10957 -708 4.65648 -709 4.17603 -710 3.95182 -711 4.30453 -712 4.83791 -713 5.75603 -714 6.26297 -715 4.26312 -716 4.92191 -717 6.49723 -718 5.39117 -719 7.63936 -720 3.8902 -721 5.26165 -722 3.56636 -723 5.80111 -724 8.11139 -725 6.99287 -726 6.0905 -727 4.48145 -728 6.29626 -729 6.41609 -730 4.82834 -731 4.30295 -732 5.95249 -733 9.1162 -734 7.17952 -735 4.41636 -736 7.00516 -737 5.38428 -738 4.57018 -739 5.16323 -740 6.21328 -741 3.84546 -742 8.92755 -743 4.95277 -744 5.60229 -745 4.74588 -746 4.39131 -747 3.53583 -748 4.71464 -749 3.85774 -750 4.32924 -751 4.21807 -752 5.56949 -753 3.92575 -754 4.08047 -755 4.19341 -756 5.43269 -757 5.08675 -758 7.55608 -759 4.60229 -760 5.26588 -761 6.53396 -762 6.09301 -763 8.49182 -764 3.65278 -765 3.7977 -766 4.72003 -767 5.07267 -768 5.39706 -769 5.74691 -770 7.17011 -771 4.60288 -772 6.53685 -773 5.03197 -774 4.75913 -775 5.21044 -776 8.20214 -777 5.1994 -778 5.72262 -779 5.56165 -780 5.11548 -781 4.91619 -782 4.4872 -783 5.68936 -784 4.47124 -785 5.13239 -786 3.56721 -787 6.21762 -788 7.03673 -789 4.75488 -790 6.58105 -791 6.02163 -792 4.0573 -793 5.61253 -794 4.57518 -795 6.37637 -796 4.44356 -797 4.71151 -798 7.569 -799 4.14096 -800 5.59666 -801 4.97895 -802 3.58641 -803 3.31542 -804 5.39692 -805 4.83649 -806 3.97031 -807 5.44832 -808 4.02433 -809 3.60805 -810 5.34786 -811 3.58587 -812 6.69862 -813 3.32895 -814 4.09119 -815 4.58371 -816 3.80674 -817 6.44114 -818 6.223 -819 4.0441 -820 4.80123 -821 4.30222 -822 6.44328 -823 5.35506 -824 6.92359 -825 3.89947 -826 6.49231 -827 4.93294 -828 4.30558 -829 6.36489 -830 6.66548 -831 4.33778 -832 4.17984 -833 5.47755 -834 6.30491 -835 4.8866 -836 3.97457 -837 5.46085 -838 9.49042 -839 5.90533 -840 4.86468 -841 6.77968 -842 4.50722 -843 6.47377 -844 6.71684 -845 7.28311 -846 4.96895 -847 4.62845 -848 4.76509 -849 4.94072 -850 6.06047 -851 5.03461 -852 4.02971 -853 6.54434 -854 6.22769 -855 4.93337 -856 3.68803 -857 3.53863 -858 3.91408 -859 5.65137 -860 7.37176 -861 4.59552 -862 6.93334 -863 3.44661 -864 6.33348 -865 5.02479 -866 5.35196 -867 4.49256 -868 4.90908 -869 5.13244 -870 6.53011 -871 6.74559 -872 6.30754 -873 4.22522 -874 5.22566 -875 4.48669 -876 6.19697 -877 5.32891 -878 5.90513 -879 5.26841 -880 4.69307 -881 6.53259 -882 5.37303 -883 4.84613 -884 6.84862 -885 8.57067 -886 4.51242 -887 4.09543 -888 3.96732 -889 3.54212 -890 7.13459 -891 3.96056 -892 3.53356 -893 7.88643 -894 3.71017 -895 4.50089 -896 6.13237 -897 9.12911 -898 5.99732 -899 4.20221 -900 5.07845 -901 7.39265 -902 3.4358 -903 6.92631 -904 6.19262 -905 8.37263 -906 3.90019 -907 5.27365 -908 8.43827 -909 4.30468 -910 7.89174 -911 4.55601 -912 5.99339 -913 3.9157 -914 6.4819 -915 5.12264 -916 4.56214 -917 4.68284 -918 3.62525 -919 5.50492 -920 3.3911 -921 5.44747 -922 5.1212 -923 3.91631 -924 4.09731 -925 3.90953 -926 3.24567 -927 3.84614 -928 3.16043 -929 5.57228 -930 5.27177 -931 4.70165 -932 6.21956 -933 6.82471 -934 4.75076 -935 5.36529 -936 7.32308 -937 5.56332 -938 4.4607 -939 4.55218 -940 4.41271 -941 4.16343 -942 3.60628 -943 5.64808 -944 5.0414 -945 4.07399 -946 8.06578 -947 5.13059 -948 3.32765 -949 6.87378 -950 6.8715 -951 5.34151 -952 7.4087 -953 4.97386 -954 4.34552 -955 4.26796 -956 4.19602 -957 3.42375 -958 5.85754 -959 5.66926 -960 8.16791 -961 5.85989 -962 5.27303 -963 4.04843 -964 3.73455 -965 6.69521 -966 3.19527 -967 5.41381 -968 4.9373 -969 3.34371 -970 5.277 -971 5.14515 -972 4.27359 -973 3.45159 -974 4.18209 -975 3.97173 -976 6.6748 -977 5.48345 -978 5.03449 -979 6.2847 -980 4.28563 -981 4.42304 -982 8.30151 -983 8.10918 -984 5.2181 -985 6.07928 -986 7.4987 -987 3.86094 -988 7.79415 -989 4.1437 -990 4.22013 -991 4.84238 -992 4.18954 -993 4.63546 -994 5.03533 -995 5.68754 -996 3.66053 -997 4.99215 -998 3.9023 -999 6.64228 -1000 3.66927 -1001 7.59005 -1002 7.84943 -1003 6.12621 -1004 4.28124 -1005 5.25678 -1006 4.49358 -1007 3.83982 -1008 4.1934 -1009 4.15133 -1010 5.9278 -1011 6.99563 -1012 5.9841 -1013 8.90109 -1014 7.652 -1015 7.06981 -1016 4.2989 -1017 4.43713 -1018 3.94864 -1019 5.25543 -1020 5.67571 -1021 4.55211 -1022 5.55705 -1023 4.35115 -1024 3.53053 -1025 4.95254 -1026 5.0626 -1027 5.91199 -1028 3.64351 -1029 4.37971 -1030 6.08977 -1031 8.17508 -1032 9.08688 -1033 6.27308 -1034 5.95361 -1035 5.76509 -1036 4.96722 -1037 5.54433 -1038 4.46812 -1039 5.33303 -1040 6.1708 -1041 6.72636 -1042 5.29678 -1043 4.55251 -1044 8.94976 -1045 3.51383 -1046 9.65923 -1047 5.82992 -1048 4.65022 -1049 4.9202 -1050 5.80657 -1051 3.98189 -1052 5.41173 -1053 4.62405 -1054 3.74779 -1055 3.72462 -1056 4.19243 -1057 8.98073 -1058 5.19122 -1059 4.03261 -1060 3.37577 -1061 5.38447 -1062 7.73223 -1063 8.13835 -1064 4.25916 -1065 4.74505 -1066 7.41008 -1067 7.34217 -1068 4.67887 -1069 7.30568 -1070 4.68001 -1071 4.1343 -1072 4.30236 -1073 4.91304 -1074 3.81816 -1075 4.33604 -1076 7.30661 -1077 3.71466 -1078 5.48295 -1079 5.02695 -1080 5.64749 -1081 4.97985 -1082 5.0635 -1083 4.18982 -1084 6.63653 -1085 6.50817 -1086 4.06997 -1087 4.6217 -1088 3.9456 -1089 5.86381 -1090 4.34958 -1091 4.72955 -1092 7.68562 -1093 4.76352 -1094 4.38867 -1095 7.24025 -1096 8.56583 -1097 7.12327 -1098 7.63126 -1099 4.98995 -1100 5.51299 -1101 6.22274 -1102 8.55485 -1103 4.67541 -1104 5.56093 -1105 4.11592 -1106 5.39012 -1107 4.91738 -1108 4.55802 -1109 9.81191 -1110 9.03824 -1111 4.91096 -1112 5.68686 -1113 5.43295 -1114 4.5376 -1115 7.76145 -1116 6.56722 -1117 5.56414 -1118 6.48512 -1119 7.08636 -1120 4.86379 -1121 5.06374 -1122 4.43781 -1123 6.37562 -1124 8.00607 -1125 5.72785 -1126 7.44421 -1127 8.55665 -1128 5.86133 -1129 9.30702 -1130 5.39706 -1131 9.72751 -1132 3.48947 -1133 4.01753 -1134 6.24749 -1135 5.18517 -1136 3.7291 -1137 5.12041 -1138 5.72019 -1139 8.40329 -1140 4.29092 -1141 6.32703 -1142 4.81643 -1143 6.2805 -1144 8.28778 -1145 6.11067 -1146 4.67958 -1147 6.84822 -1148 6.91117 -1149 8.73063 -1150 5.19026 -1151 8.76106 -1152 7.46817 -1153 4.01789 -1154 4.79286 -1155 4.32607 -1156 8.23324 -1157 4.8066 -1158 6.2838 -1159 6.4227 -1160 9.33195 -1161 4.68307 -1162 6.92146 -1163 6.30771 -1164 7.57291 -1165 7.22122 -1166 6.39772 -1167 5.60827 -1168 3.81708 -1169 3.25156 -1170 8.08526 -1171 7.77888 -1172 4.56788 -1173 8.09687 -1174 3.49101 -1175 4.88315 -1176 9.9666 -1177 5.09136 -1178 4.89489 -1179 8.84418 -1180 4.97986 -1181 5.33513 -1182 5.84621 -1183 3.85303 -1184 4.81127 -1185 7.16765 -1186 5.06141 -1187 7.20188 -1188 4.7328 -1189 5.06946 -1190 3.66104 -1191 4.29874 -1192 3.89884 -1193 6.80851 -1194 5.53224 -1195 7.4339 -1196 5.48488 -1197 8.32916 -1198 5.44496 -1199 5.953 -1200 7.10064 -1201 4.28803 -1202 5.27418 -1203 3.79067 -1204 3.44724 -1205 4.17183 -1206 7.19842 -1207 4.32375 -1208 3.51299 -1209 7.615 -1210 5.69386 -1211 6.73423 -1212 4.51568 -1213 6.08616 -1214 5.21758 -1215 8.14411 -1216 4.06477 -1217 5.22976 -1218 5.07475 -1219 5.92439 -1220 4.9689 -1221 5.09276 -1222 7.43835 -1223 6.71407 -1224 7.02283 -1225 6.5295 -1226 4.40292 -1227 5.83422 -1228 3.70634 -1229 3.52758 -1230 6.0864 -1231 4.79487 -1232 5.2648 -1233 6.60461 -1234 4.95882 -1235 9.41937 -1236 5.13095 -1237 5.28013 -1238 5.44854 -1239 7.71878 -1240 5.56885 -1241 8.76006 -1242 4.56393 -1243 5.90289 -1244 6.17245 -1245 5.47762 -1246 6.85481 -1247 3.17205 -1248 4.86204 -1249 4.43452 -1250 6.97671 -1251 5.3337 -1252 5.43708 -1253 5.01141 -1254 7.23168 -1255 3.70348 -1256 4.66871 -1257 8.66635 -1258 7.63642 -1259 6.58896 -1260 5.63525 -1261 5.18847 -1262 4.60493 -1263 8.295 -1264 7.64526 -1265 3.59029 -1266 8.30829 -1267 5.61988 -1268 4.40627 -1269 8.59727 -1270 7.237 -1271 5.90024 -1272 4.03286 -1273 4.8429 -1274 7.10562 -1275 6.50655 -1276 4.64487 -1277 4.69878 -1278 7.97432 -1279 4.02501 -1280 5.38605 -1281 4.92341 -1282 5.07646 -1283 3.75685 -1284 5.31243 -1285 5.7707 -1286 5.68964 -1287 5.96062 -1288 7.85077 -1289 8.21576 -1290 6.68323 -1291 4.30884 -1292 4.784 -1293 5.21908 -1294 4.82005 -1295 4.40245 -1296 4.02024 -1297 3.62885 -1298 3.78701 -1299 3.55008 -1300 4.66264 -1301 5.58137 -1302 4.33701 -1303 4.93396 -1304 3.52374 -1305 7.13144 -1306 5.36387 -1307 8.97625 -1308 5.18498 -1309 9.05048 -1310 8.19838 -1311 4.42885 -1312 8.34232 -1313 3.94079 -1314 4.41342 -1315 7.69708 -1316 4.03687 -1317 4.88914 -1318 4.97387 -1319 5.60074 -1320 3.64249 -1321 3.99359 -1322 5.05358 -1323 7.22987 -1324 9.02307 -1325 3.92924 -1326 5.90228 -1327 6.68582 -1328 9.38571 -1329 4.23719 -1330 3.91918 -1331 6.00412 -1332 8.07751 -1333 4.80956 -1334 5.50254 -1335 9.28165 -1336 4.67539 -1337 4.8626 -1338 6.60907 -1339 6.82969 -1340 5.02785 -1341 4.99683 -1342 7.89183 -1343 9.24249 -1344 5.19206 -1345 4.25973 -1346 5.32035 -1347 4.13126 -1348 5.9532 -1349 6.48769 -1350 3.89076 -1351 5.66956 -1352 7.52047 -1353 5.81182 -1354 7.64656 -1355 5.39628 -1356 5.38481 -1357 4.57187 -1358 7.85941 -1359 3.19563 -1360 4.16723 -1361 7.58062 -1362 5.43379 -1363 4.5491 -1364 9.55822 -1365 5.41463 -1366 3.93709 -1367 5.58151 -1368 7.63004 -1369 7.19653 -1370 6.21067 -1371 4.16437 -1372 7.03794 -1373 6.03681 -1374 7.32543 -1375 8.75148 -1376 9.85852 -1377 5.51133 -1378 8.69481 -1379 5.56414 -1380 6.99819 -1381 3.55529 -1382 5.3928 -1383 4.84586 -1384 7.9864 -1385 6.53059 -1386 4.99042 -1387 4.16435 -1388 6.80177 -1389 5.45811 -1390 5.63078 -1391 3.96717 -1392 3.86136 -1393 3.20475 -1394 8.36851 -1395 5.32051 -1396 4.09927 -1397 4.30378 -1398 6.53894 -1399 9.57378 -1400 6.55006 -1401 6.34936 -1402 4.66909 -1403 4.92672 -1404 6.29711 -1405 6.13071 -1406 7.07983 -1407 3.38745 -1408 6.19644 -1409 3.70599 -1410 8.72514 -1411 5.01474 -1412 6.35499 -1413 8.51238 -1414 6.1006 -1415 8.31744 -1416 8.69373 -1417 5.3837 -1418 3.29415 -1419 3.17415 -1420 4.65337 -1421 3.77393 -1422 3.8875 -1423 7.11242 -1424 4.79596 -1425 4.074 -1426 4.91429 -1427 5.40041 -1428 4.50152 -1429 6.82147 -1430 7.03258 -1431 9.84567 -1432 5.28303 -1433 3.28496 -1434 5.3585 -1435 5.80604 -1436 6.24381 -1437 3.80452 -1438 8.7948 -1439 6.69635 -1440 5.38362 -1441 8.19043 -1442 6.65785 -1443 5.14952 -1444 8.66002 -1445 6.98012 -1446 5.82976 -1447 4.7057 -1448 4.19243 -1449 4.46766 -1450 4.94058 -1451 8.7967 -1452 5.51495 -1453 4.0043 -1454 5.16481 -1455 6.42095 -1456 6.01744 -1457 3.71544 -1458 5.73042 -1459 8.12425 -1460 3.95837 -1461 7.51813 -1462 9.24805 -1463 7.61923 -1464 4.43411 -1465 3.83737 -1466 3.95716 -1467 7.15998 -1468 5.65757 -1469 3.42947 -1470 7.66079 -1471 5.68317 -1472 4.17696 -1473 3.43991 -1474 4.08425 -1475 6.28225 -1476 5.03584 -1477 5.6927 -1478 4.82533 -1479 7.60644 -1480 3.80633 -1481 7.85466 -1482 4.0313 -1483 5.53088 -1484 4.79008 -1485 6.91984 -1486 7.05097 -1487 5.06758 -1488 5.28323 -1489 3.97634 -1490 7.07548 -1491 6.99741 -1492 5.39725 -1493 3.70965 -1494 5.20786 -1495 3.35697 -1496 8.30445 -1497 6.24412 -1498 5.02406 -1499 4.3192 -1500 3.75267 -1501 3.75419 -1502 6.70461 -1503 7.29339 -1504 7.25608 -1505 4.67025 -1506 7.00533 -1507 4.95845 -1508 5.9428 -1509 8.22798 -1510 6.09413 -1511 6.69181 -1512 4.68312 -1513 8.54909 -1514 9.17576 -1515 4.67904 -1516 5.70206 -1517 3.82361 -1518 4.83649 -1519 4.49647 -1520 6.62776 -1521 3.87563 -1522 3.82749 -1523 7.136 -1524 5.46372 -1525 7.49927 -1526 4.77056 -1527 6.99557 -1528 5.41681 -1529 5.67049 -1530 9.09783 -1531 6.2033 -1532 5.7676 -1533 6.10859 -1534 5.64874 -1535 4.25459 -1536 4.24224 -1537 7.54998 -1538 4.6898 -1539 3.65217 -1540 6.77849 -1541 7.38216 -1542 5.01269 -1543 9.63731 -1544 5.93312 -1545 6.67582 -1546 4.31103 -1547 7.11233 -1548 9.36116 -1549 5.26081 -1550 5.69302 -1551 3.48767 -1552 6.63839 -1553 6.58539 -1554 7.28664 -1555 3.81367 -1556 4.57632 -1557 5.76642 -1558 5.47675 -1559 4.10006 -1560 7.47012 -1561 4.71169 -1562 7.33109 -1563 3.61097 -1564 7.2049 -1565 5.17177 -1566 5.69784 -1567 5.66136 -1568 5.26364 -1569 5.80611 -1570 6.17947 -1571 7.04854 -1572 8.77365 -1573 4.85623 -1574 3.77604 -1575 4.3199 -1576 5.59875 -1577 7.20581 -1578 8.22279 -1579 6.75557 -1580 6.15071 -1581 8.40391 -1582 5.84813 -1583 6.71808 -1584 9.4805 -1585 5.78575 -1586 5.53995 -1587 6.22247 -1588 6.41044 -1589 4.20686 -1590 5.13741 -1591 9.43675 -1592 4.7142 -1593 3.98455 -1594 7.70331 -1595 5.7983 -1596 5.38736 -1597 6.27297 -1598 5.693 -1599 7.78512 -1600 9.5604 -1601 3.88507 -1602 5.01882 -1603 7.63484 -1604 5.06804 -1605 4.18197 -1606 4.43359 -1607 4.34535 -1608 4.02395 -1609 7.2371 -1610 8.47037 -1611 4.49746 -1612 8.23039 -1613 4.43065 -1614 4.82179 -1615 7.15842 -1616 4.60424 -1617 4.60142 -1618 4.98153 -1619 4.82699 -1620 6.48302 -1621 5.81494 -1622 9.77863 -1623 9.18164 -1624 8.97711 -1625 6.39388 -1626 4.3432 -1627 8.33951 -1628 5.09327 -1629 5.99447 -1630 4.3455 -1631 6.29698 -1632 3.33295 -1633 6.59657 -1634 6.95084 -1635 3.19532 -1636 5.517 -1637 5.79544 -1638 5.11606 -1639 5.09728 -1640 6.96594 -1641 4.43697 -1642 8.62959 -1643 6.33994 -1644 4.6679 -1645 6.9788 -1646 4.62802 -1647 9.58879 -1648 4.3363 -1649 5.16264 -1650 7.16104 -1651 5.92186 -1652 7.45343 -1653 3.24729 -1654 9.37208 -$EndElementData diff --git a/test/user/testdata/shark_22_ascii_missing_num_nodes.msh b/test/user/testdata/shark_22_ascii_missing_num_nodes.msh deleted file mode 100644 index cb68a680..00000000 --- a/test/user/testdata/shark_22_ascii_missing_num_nodes.msh +++ /dev/null @@ -1,3978 +0,0 @@ -$MeshFormat -2.2 0 8 -$EndMeshFormat -$Nodes -1 -0.0733436 0.0816748 0.056402 -2 -0.0729126 0.0537921 0.00170478 -3 -0.072634 0.0799069 0.0578949 -4 -0.0715817 0.0520377 0.00292576 -5 -0.0701949 0.0802569 0.0450431 -6 -0.0687698 0.060971 0.00326551 -7 -0.06778 0.060358 0.00473741 -8 -0.0672796 0.0809249 0.0425553 -9 -0.0658074 0.0806443 0.0552302 -10 -0.064933 0.0788176 0.0453762 -11 -0.0636555 0.0610198 0.00141989 -12 -0.0636111 0.0566004 -0.000556663 -13 -0.0636791 0.0819076 0.0524468 -14 -0.0623445 0.0580268 0.00335683 -15 -0.0624856 0.0671058 0.00581638 -16 -0.0601398 0.0781111 0.0317589 -17 -0.0599443 0.0685632 0.00992449 -18 -0.0592787 0.0571239 0.00105116 -19 -0.0587906 0.0719999 0.0117948 -20 -0.0575605 0.0730663 0.016213 -21 -0.057624 0.0811803 0.0403639 -22 -0.0572339 0.0769387 0.0223219 -23 -0.0559974 0.0749629 0.0235691 -24 -0.0542321 0.0763209 0.0344665 -25 -0.0540672 0.0649483 0.00821813 -26 -0.0541685 0.0661135 0.00437935 -27 -0.0532966 0.0805356 0.0466758 -28 -0.0517252 0.0761185 0.0183218 -29 -0.0505257 0.068877 0.0152572 -30 -0.0503803 0.0772638 0.0406423 -31 -0.0472855 0.0641041 0.00381053 -32 -0.0469016 0.0648796 0.00821733 -33 -0.0474599 0.0727268 0.0265623 -34 -0.0464733 0.070912 0.0103373 -35 -0.0444756 0.0755674 0.0221683 -36 -0.0440208 0.0774313 0.0371107 -37 -0.0434135 0.0685101 0.0213943 -38 -0.0425401 0.0668787 0.0159114 -39 -0.0405353 0.0730163 0.0309862 -40 -0.0386417 0.073548 0.0160682 -41 -0.037401 0.0664899 0.0122191 -42 -0.0358693 0.0689445 0.0243885 -43 -0.0351058 0.0687771 0.0124837 -44 -0.0333614 0.071165 0.0238503 -45 -0.0325564 0.0696271 0.024504 -46 -0.032455 0.0625178 0.0200737 -47 -0.0305469 0.0729973 0.0173921 -48 -0.0276941 0.0652386 0.0128238 -49 -0.0272717 0.0628782 0.0141328 -50 -0.0263428 0.00735496 0.00505748 -51 -0.0256055 0.00658056 0.00327552 -52 -0.0252856 0.0610141 0.0227762 -53 -0.0250237 -0.00678856 0.00359213 -54 -0.0242889 -0.00589458 0.00589675 -55 -0.0216872 0.0639735 0.0255561 -56 -0.0215721 -0.0119744 0.00619585 -57 -0.0195136 0.0542304 0.0216195 -58 -0.0168343 0.0649534 0.0236547 -59 -0.0161373 -0.00420129 0.00881529 -60 -0.0148726 0.0585475 0.0106707 -61 -0.0140647 0.0517836 0.0159197 -62 -0.0142986 0.0543801 0.0051496 -63 -0.0139611 -0.0178642 0.00651265 -64 -0.0139803 0.0554055 0.0115694 -65 -0.0124373 0.0606817 0.0122622 -66 -0.0127423 0.0580719 0.0285553 -67 -0.0127412 -0.0704232 0.0234664 -68 -0.0126173 -0.0801905 0.022154 -69 -0.0125269 0.0592002 0.0346418 -70 -0.0122498 -0.080596 0.0191154 -71 -0.0121442 -0.0691943 0.0191352 -72 -0.0123618 0.0658492 0.0197519 -73 -0.0121018 -0.063334 0.0245151 -74 -0.0118539 0.0462485 0.0243954 -75 -0.0111067 0.0637388 0.0161162 -76 -0.0110042 -0.0624802 0.0276395 -77 -0.0109072 0.046219 0.0183571 -78 -0.0107037 -0.000325242 0.00950432 -79 -0.010183 -0.0121386 0.00674337 -80 -0.00977442 -0.0638147 0.0162637 -81 -0.0097669 -0.0699334 0.0156591 -82 -0.00942656 -0.0836042 0.0182705 -83 -0.009321 -0.0852334 0.0216727 -84 -0.00803502 0.0401179 0.0263407 -85 -0.00857808 -0.0579335 0.0163943 -86 -0.00793158 -0.0190616 0.0121625 -87 -0.00782675 0.0573514 0.028038 -88 -0.00773028 -0.0620746 0.0302044 -89 -0.00764665 0.0537773 0.00961295 -90 -0.00721562 -0.0507362 0.0224357 -91 -0.00717408 -0.0528249 0.0179333 -92 -0.00651588 -0.00739691 0.013024 -93 -0.00691116 -0.00014073 0.00823716 -94 -0.00661131 0.044183 0.0123 -95 -0.00658663 0.0535365 0.0326225 -96 -0.00630954 -0.0850657 0.0194796 -97 -0.00616497 -0.0797841 0.0261073 -98 -0.00582999 -0.0494502 0.0287705 -99 -0.00563359 0.0476479 0.00934546 -100 -0.00506609 -0.0425596 0.0250833 -101 -0.00453974 -0.0405694 0.0173853 -102 -0.00447266 0.0319291 0.0205877 -103 -0.00434886 0.0267225 0.00648417 -104 -0.00418386 0.0253438 0.00842196 -105 -0.0041733 -0.0606038 0.0122716 -106 -0.00385183 0.0479538 0.00869149 -107 -0.00333705 0.051389 0.031593 -108 -0.00333565 -0.0693881 0.0119551 -109 -0.00333748 -0.0650683 0.0110291 -110 -0.00292457 0.0475597 0.0319288 -111 -0.00280471 -0.0353375 0.0238411 -112 -0.00273019 -0.0493159 0.0135756 -113 -0.00255346 -0.0452657 0.0126112 -114 -0.00249178 -0.0598565 0.010934 -115 -0.00247351 -0.0533955 0.0149632 -116 -0.00280465 0.0288144 0.0300227 -117 -0.00225175 -0.030519 0.0236922 -118 -0.00205777 -0.0595101 0.00715068 -119 -0.0018581 -0.0627033 0.0116048 -120 -0.00150112 -0.0384203 0.0313885 -121 -0.00143547 -0.0337232 0.0176227 -122 -0.00136747 -0.062725 0.0150152 -123 -0.000884775 -0.0587825 0.0143119 -124 -0.000624659 -0.0247814 0.0257906 -125 -0.000489974 0.0225414 0.0188523 -126 -6.05566e-05 0.0171338 0.0234086 -127 0.00150381 0.0360475 0.00675461 -128 0.000282178 -0.0241462 0.0174969 -129 0.000347869 -0.0675237 0.0324883 -130 0.000429839 -0.0422219 0.0349169 -131 0.00028168 -0.0273698 0.0312235 -132 0.000952705 -0.0267391 0.0143612 -133 0.00105244 0.0186951 0.00689988 -134 0.0011109 -0.0779453 0.014663 -135 0.00137887 0.00842564 0.0258445 -136 0.00107238 -0.0462225 0.00980545 -137 0.00158113 -0.0561697 0.005809 -138 0.00165921 -0.0142314 0.0114909 -139 0.00169065 -0.00330978 0.027848 -140 0.0017282 0.0264299 0.00972258 -141 0.00196109 -0.062067 0.0125082 -142 0.00198494 -0.0249792 0.0122768 -143 0.00206797 -0.0322322 0.0125632 -144 0.00219287 -0.00991015 0.0199027 -145 0.00223228 -0.065619 0.00972103 -146 0.00226787 -0.06664 0.0139131 -147 0.00233081 0.00970751 0.0349608 -148 0.0023033 -0.0550711 0.0357611 -149 0.00284591 -0.0695874 0.0109337 -150 0.00313658 0.0123831 0.0152878 -151 0.00325266 -0.000639164 0.0164744 -152 0.00354678 -0.0651674 0.00553443 -153 0.00434877 0.0392681 0.00656793 -154 0.0034004 -0.0624097 0.0143354 -155 0.00410027 0.052311 0.0146156 -156 0.00425687 -0.0110681 0.0377954 -157 0.0043501 -0.0020508 0.015115 -158 0.00444422 -0.0785667 0.0168482 -159 0.00471578 -0.00872746 0.0133588 -160 0.00486541 0.0192794 0.0102326 -161 0.00475235 0.0259901 0.00777948 -162 0.00497525 -0.0797755 0.0244877 -163 0.0052286 0.0545416 0.0234287 -164 0.00513856 -0.0361953 0.00904286 -165 0.00543656 -0.016404 0.0117933 -166 0.00521097 0.0361763 0.0357574 -167 0.00563068 0.0458779 0.0101474 -168 0.00602624 -0.0598053 0.00448538 -169 0.00669265 -0.0730234 0.0300997 -170 0.00671975 -0.0647944 0.0149968 -171 0.00743572 0.0219428 0.00498754 -172 0.00806977 -0.0676622 0.0106835 -173 0.00858002 0.0185363 0.00804532 -174 0.00900922 -0.0527441 0.0382868 -175 0.00967438 -0.0310472 0.0412759 -176 0.00969027 -0.0470756 0.00574739 -177 0.00982547 -0.0777201 0.0238208 -178 0.010337 -0.0646559 0.00738197 -179 0.0103691 -0.0715108 0.0301524 -180 0.0108524 -0.0651923 0.0107074 -181 0.0112352 0.0223598 0.00496048 -182 0.0115762 0.0360388 0.034027 -183 0.011811 0.0150563 0.0411225 -184 0.0119389 -0.0710873 0.0142927 -185 0.011481 0.000850754 0.00890493 -186 0.0122581 0.0177891 0.00726338 -187 0.0126044 0.0285097 0.0071727 -188 0.0126077 -0.0410848 0.00487059 -189 0.01325 0.0245576 0.00385279 -190 0.0133342 -0.0301914 0.00695184 -191 0.0134526 -0.00467313 0.044297 -192 0.0140263 0.0415073 0.0128325 -193 0.0139319 -0.0627506 0.0126489 -194 0.0144402 0.0213321 0.0408733 -195 0.0145153 -0.0120242 0.00709154 -196 0.0145254 0.0314471 0.00762861 -197 0.0143606 -0.0539791 0.00638859 -198 0.0153705 -0.0588177 0.00913193 -199 0.0158483 0.0424843 0.0267153 -200 0.0161677 0.0082135 0.0752128 -201 0.0160709 -0.0693691 0.0267104 -202 0.0163112 0.021127 0.00658374 -203 0.0163956 0.0418119 0.0180916 -204 0.0166653 0.00513625 0.0449469 -205 0.0171438 -0.00939438 0.0462661 -206 0.0174416 -0.0497054 0.0373642 -207 0.0174198 -0.0656937 0.0159871 -208 0.0177387 0.0346114 0.0053358 -209 0.0178439 0.0247259 0.00729322 -210 0.018247 0.0346901 0.00258831 -211 0.0182074 -0.0318958 0.0424624 -212 0.0183988 -0.00142899 0.0496692 -213 0.0188182 -0.018825 0.0447569 -214 0.0188285 0.0147456 0.0461032 -215 0.0188626 0.015416 0.041072 -216 0.0190811 -0.00419709 0.0686858 -217 0.0195945 0.0084326 0.064095 -218 0.0197498 -0.00217441 0.0583864 -219 0.0198208 0.00539755 0.0587622 -220 0.0200137 0.0324539 0.00354185 -221 0.020151 -0.0145671 0.0500049 -222 0.0203386 -0.00326709 0.0702447 -223 0.0209148 0.00523036 0.0681576 -224 0.0208447 0.0121045 0.0546374 -225 0.0209724 0.00970633 0.0633876 -226 0.020604 -0.0121123 0.00591309 -227 0.0212498 -0.0289526 0.00565549 -228 0.0216078 -0.0380775 0.00479088 -229 0.0216875 -0.00997672 0.0619769 -230 0.0220658 0.00705093 0.0456869 -231 0.0223002 -0.0558455 0.0110476 -232 0.0223137 -0.0154618 0.0494217 -233 0.0229336 0.00417573 0.0589573 -234 0.0231427 0.0278288 0.0125965 -235 0.0231751 0.027241 0.0309726 -236 0.0233259 0.0160686 0.00756079 -237 0.0234095 0.0318943 0.0199392 -238 0.0234462 -0.00393483 0.0583985 -239 0.0235915 -0.0597066 0.0170609 -240 0.0240196 -0.0108777 0.0466362 -241 0.024123 -0.00330273 0.0464733 -242 0.0242099 -0.0321428 0.0398591 -243 0.0244244 0.00347947 0.0416421 -244 0.024564 -0.0175604 0.0433407 -245 0.0253979 -0.0453083 0.0344803 -246 0.0256103 0.0267734 0.0284514 -247 0.0259312 -0.0445208 0.00878379 -248 0.025959 -0.0133125 0.00624018 -249 0.0265967 -0.0369666 0.00635268 -250 0.0273245 -0.0066598 0.0412078 -251 0.0277597 -0.0467651 0.0304517 -252 0.0275944 -0.0515878 0.0207552 -253 0.0282687 0.0208205 0.0174814 -254 0.0290859 0.0112094 0.012597 -255 0.0293048 -0.0474855 0.0256026 -256 0.0296506 -0.0466043 0.0156453 -257 0.0304236 0.0134394 0.031696 -258 0.0304518 -0.0291908 0.00746031 -259 0.03126 -0.044124 0.016095 -260 0.0321715 -0.043346 0.0242104 -261 0.0322352 -0.0402733 0.0141242 -262 0.0323149 0.01052 0.0200521 -263 0.0324768 -0.0397188 0.0271188 -264 0.0325431 -0.0291932 0.0340382 -265 0.0332479 -0.0329826 0.0117351 -266 0.0338676 -0.0346121 0.0252676 -267 0.0341522 -0.00293196 0.033596 -268 0.0341882 -0.0361716 0.0179088 -269 0.0344969 -0.0256263 0.0309923 -270 0.0345138 -0.00958586 0.0123416 -271 0.0348872 -0.0128566 0.0339912 -272 0.0349524 -0.0273994 0.0177976 -273 0.0349556 -0.000677158 0.0209767 -274 0.0350004 -0.028049 0.00876142 -275 0.0353194 -0.0100316 0.0154749 -276 0.0354214 -0.0195455 0.0173172 -277 0.0355775 -0.0309821 0.0107592 -278 0.0360305 -0.0150581 0.0232372 -279 0.0363938 -0.0285041 0.0132933 -280 0.0374738 -0.00607371 0.0123945 -281 0.041317 -0.0210454 0.0131228 -282 0.0425886 -0.0120136 0.0129537 -283 0.0475164 -0.00753527 0.00853843 -284 0.0492593 -0.00704914 0.00938067 -285 0.0496752 -0.0170405 0.0106038 -286 0.0498676 -0.0259318 0.00619626 -287 0.052402 -0.022331 0.00866719 -288 0.0516897 -0.011391 0.0103437 -289 0.0559595 -0.0106346 0.00698866 -290 0.0596531 -0.0214295 0.0059579 -291 0.066312 -0.0158462 0.00759335 -292 0.0672852 -0.00331292 0.00667068 -293 0.0687074 -0.0027598 0.00829441 -294 0.0687083 -0.0084515 0.00881385 -295 0.0702857 -0.00694567 0.00665748 -296 0.02471 0.00101921 0.00688758 -297 0.00641783 -0.0341512 0.0233596 -298 0.024018 0.00854392 0.00722419 -299 0.0251696 0.00942127 0.00784613 -300 -0.019815 0.0686939 0.0189821 -301 0.0416697 -0.017118 0.00864259 -302 -0.00440288 -0.0698432 0.0205811 -303 -0.0033606 0.0600219 0.0217676 -304 0.0268544 0.00322876 0.0080825 -305 0.00855449 0.0107052 0.00928038 -306 0.0219179 0.00585482 0.0121236 -307 0.0199208 0.0175811 0.0336776 -308 0.0210521 -0.0362113 0.0256186 -309 0.0339797 -0.00194129 0.0163861 -310 0.03202 0.000337126 0.0126992 -311 0.0119633 0.0163586 0.0147908 -312 0.0248778 0.0056119 0.0321775 -313 0.00892971 -0.0563678 0.0287948 -314 0.0174837 0.027107 0.0210333 -315 -0.0170518 0.00346089 0.00554363 -316 0.0144974 -0.0120686 0.0314959 -317 0.00336155 -0.00103205 0.0364574 -318 0.00707711 -0.0204903 0.0185209 -319 0.010517 -0.00309481 0.0232445 -320 -0.00559352 0.0373259 0.0172753 -321 -0.00523735 -0.0230725 0.0111224 -322 0.0151072 -0.0538804 0.0213778 -323 0.0347571 -0.0188174 0.0105515 -324 0.0278657 -0.0183642 0.0156758 -325 -0.00338013 -0.0543805 0.0329679 -326 -0.0196332 0.0593213 0.0251138 -327 0.0648163 -0.0143432 0.00627944 -328 -0.00336175 -0.0187472 0.00979996 -329 -0.0059938 -0.0214388 0.00941436 -330 0.0204933 0.0262773 0.00994486 -331 0.0153554 0.00838654 0.0105168 -332 -0.064082 0.064994 0.00682263 -333 -0.0406296 0.0703091 0.0249838 -334 -0.0197677 0.0563929 0.0156108 -335 -0.0506931 0.0781816 0.0304629 -336 0.0171972 -0.00100568 0.011485 -337 0.0314619 -0.0225976 0.00774901 -338 -0.00980694 0.0515267 0.0104574 -339 -0.00435185 0.0493969 0.0137744 -340 0.0449063 -0.0117353 0.00859937 -341 0.00159087 -0.0450385 0.027858 -342 -0.00469537 -0.0637251 0.0233918 -343 0.0424219 -0.0285632 0.00857374 -344 0.0603894 -0.00835109 0.00935053 -345 -0.0147113 -0.0156046 0.00918376 -346 -0.0528157 0.0611754 0.00480955 -347 -0.0173765 -0.00887149 0.00520522 -348 0.0108104 0.02268 0.0130558 -349 -0.00899905 -0.0208443 0.00915416 -350 -0.0449914 0.0768094 0.0302276 -351 -0.0408502 0.06658 0.00836849 -352 -0.0199988 -0.0118916 0.004906 -353 0.00337131 0.0455887 0.0238561 -354 0.00477413 -0.0721541 0.0211645 -355 -0.00344193 -0.049333 0.032475 -356 0.0427245 -0.0268877 0.00738607 -357 0.0272704 -0.0238375 0.00669928 -358 -0.00610544 -0.0476638 0.0181008 -359 -0.00760153 0.0503529 0.00747858 -360 0.0131109 -0.0422224 0.0405109 -361 0.00214561 -0.0490294 0.0151357 -362 -0.0598224 0.0805424 0.0511855 -363 -0.0204542 0.0588165 0.013102 -364 0.059357 -0.0190886 0.00813027 -365 -0.00100716 0.0422264 0.0325724 -366 0.0325535 -0.0244764 0.012522 -367 -0.000431427 -0.0574818 0.0137747 -368 0.0114251 0.0275734 0.00440942 -369 0.00337666 -0.0559724 0.0148659 -370 -0.0262911 0.0586227 0.0207785 -371 -0.0699467 0.0813567 0.0499003 -372 0.0494602 -0.0133111 0.00757754 -373 0.00758285 0.0333008 0.0104911 -374 0.00657287 0.032122 0.00603963 -375 0.000332803 -0.0511328 0.0180756 -376 -0.021764 0.0620607 0.0118108 -377 -0.0454672 0.075167 0.035911 -378 0.00139884 0.045926 0.0128133 -379 0.0176314 0.0311493 0.00370344 -380 -0.0159418 -0.0158578 0.00793814 -381 -0.0229387 0.0691641 0.0166572 -382 -0.00133409 -0.0449329 0.0187829 -383 -0.0538019 0.0611146 0.00198764 -384 0.0305208 -0.00256491 0.0101919 -385 0.0623596 -0.00697151 0.00683979 -386 0.0236819 -0.00777996 0.0526871 -387 0.0118138 -0.0144241 0.0430193 -388 0.0137156 -0.00365078 0.00732253 -389 -0.0257884 0.0686739 0.0150694 -390 -0.0530331 0.060812 0.00248197 -391 -0.000421194 -0.0523335 0.00879177 -392 0.0193846 -0.00072024 0.0649221 -393 0.00485856 0.0133946 0.0114741 -394 -0.0053823 -0.0743714 0.0141262 -395 0.016958 0.0166471 0.00740593 -396 0.0429338 -0.0266961 0.0110582 -397 -0.0650475 0.05473 0.00191127 -398 0.00924818 0.0356698 0.00715588 -399 -0.042468 0.0652669 0.00790867 -400 0.00699205 0.0348997 0.00576165 -401 -0.012123 0.00171435 0.00688121 -402 0.017741 0.00126373 0.0717161 -403 -0.00477874 -0.0228765 0.0123522 -404 -0.05496 0.0793832 0.0329037 -405 -0.0253736 -0.000654191 0.00342534 -406 0.0220159 -0.0128389 0.0555838 -407 0.0187915 0.00366305 0.0653901 -408 -0.0635923 0.0794618 0.0351284 -409 0.0187293 0.00901455 0.0689246 -410 -0.0507436 0.0790633 0.0364811 -411 0.00440962 0.0291856 0.00589534 -412 -0.0610541 0.0815764 0.0467801 -413 -0.0264169 0.0641898 0.0180225 -414 0.0590681 -0.0129818 0.00969293 -415 0.0316732 -0.013669 0.00892731 -416 -0.0368828 0.0732351 0.028231 -417 0.0147007 -0.0293577 0.0425282 -418 -0.00226105 0.042112 0.00818422 -419 -0.022404 0.068624 0.0211714 -420 0.018834 0.0296379 0.0101126 -421 0.0545664 -0.023882 0.00596013 -422 -0.0610274 0.0626039 0.00623226 -423 0.0209345 -0.0123916 0.0558755 -424 -0.064258 0.0639612 0.00701622 -425 -0.0530259 0.0709966 0.0104874 -426 -0.000350232 0.0328643 0.00950357 -427 0.0179821 0.0260225 0.00525665 -428 -0.071629 0.0809096 0.0500374 -429 0.0431333 -0.00662611 0.0109755 -430 -0.0367738 0.072104 0.0272887 -431 -0.00147996 0.0424733 0.00778004 -432 -0.0489442 0.0792518 0.0424775 -433 0.0178184 0.00830923 0.0698262 -434 -0.00256208 -0.0518644 0.0119693 -435 -0.0024457 0.0347988 0.0115191 -436 -0.0226391 0.067054 0.0236986 -437 -0.0250562 0.070839 0.0181046 -438 0.0157661 -0.010775 0.0444953 -439 -0.0587069 0.0610686 0.00549325 -440 -0.0561989 0.0607157 0.00436391 -441 0.0028322 0.0311045 0.0076099 -442 -0.061857 0.079748 0.0514834 -443 -0.0580072 0.0744854 0.0170926 -444 0.017366 0.0281829 0.00449304 -445 0.0175246 0.0303053 0.00632184 -446 -0.0583716 0.0812348 0.0494755 -447 -0.0627638 0.0811059 0.0418948 -448 0.00958337 0.0391723 0.00889538 -449 0.0164997 0.0327763 0.00400793 -450 -0.0100537 -0.019407 0.0104569 -451 0.0535082 -0.023589 0.00757618 -452 -0.0184567 0.0672393 0.0165986 -453 -0.0660887 0.0639515 0.00557639 -454 -0.0085005 0.0591911 0.0132991 -455 0.0527123 -0.00658592 0.00801901 -456 0.00664445 0.0147496 0.00979726 -457 -0.0323364 0.0646841 0.013176 -458 -0.0684981 0.0817682 0.0541475 -459 0.0424951 -0.00680449 0.0104665 -460 -0.01583 0.0638299 0.0140017 -461 -0.0408586 0.0747808 0.0276312 -462 -0.0213675 0.00505684 0.00440033 -463 -0.0609542 0.0784149 0.029815 -464 0.0458286 -0.0196104 0.0115924 -465 0.0619857 -0.0044448 0.00717137 -466 -0.0549453 0.0736446 0.0144159 -467 -0.0660739 0.0797747 0.0511232 -468 -0.0150243 -0.0138696 0.00597473 -469 -0.0208919 0.0664273 0.014553 -470 -0.0583912 0.0766731 0.0277458 -471 -0.00499489 -0.0492059 0.0154875 -472 -0.0177596 -0.0149926 0.00640227 -473 -0.0656257 0.0638276 0.00437301 -474 -0.00111824 -0.0505712 0.010634 -475 -0.0234714 0.0595273 0.0150887 -476 -0.0117477 -0.00786715 0.0107629 -477 -0.0329423 0.0662408 0.012525 -478 -0.0588644 0.0778049 0.0265316 -479 -0.038272 0.0710121 0.0277124 -480 0.0147178 0.0228905 0.00513556 -481 -0.00242697 -0.0228032 0.0106496 -482 -0.00998317 -0.0196685 0.00798312 -483 0.00194711 0.0338412 0.00734265 -484 -0.0101071 0.0571173 0.0108272 -485 -0.000192036 0.0305177 0.010316 -486 -0.0662236 0.0609953 0.00234663 -487 -0.0383437 0.071981 0.0290737 -488 0.0464353 -0.0271448 0.00729223 -489 -0.0113654 0.0558876 0.00985606 -490 -0.0600686 0.0581853 0.00037707 -491 0.0184892 0.00651809 0.072001 -492 -0.0272353 0.0661385 0.0125002 -493 0.0386787 -0.00939756 0.0110365 -494 -0.00702298 -0.0554164 0.0301677 -495 -0.0387296 0.0725599 0.0291973 -496 -0.0195884 -0.00971304 0.00731553 -497 0.000980398 0.0340005 0.00831153 -498 -0.00251349 -0.0493306 0.0137872 -499 -0.0208118 0.00468072 0.00662791 -500 0.0145465 0.0247675 0.00685396 -501 0.0539643 -0.00601143 0.00911787 -502 0.0615879 -0.00432066 0.00875869 -503 -0.0649217 0.0800024 0.0383643 -504 0.00460493 0.00849738 0.0127005 -505 -0.0606311 0.0803611 0.0379233 -506 -0.00316884 0.0400824 0.00969248 -507 -0.0308482 0.067467 0.0126012 -508 0.0120049 0.00511369 0.00824306 -509 0.0117314 0.0134932 0.00784586 -510 0.0067401 0.0222359 0.00786688 -511 0.000365941 0.0444987 0.0334101 -512 0.00589042 0.0427357 0.0325284 -513 0.0134556 0.013691 0.0071386 -514 0.0155774 0.00572549 0.00675779 -515 -0.0442054 0.0654197 0.00607699 -516 0.00863004 0.0184766 0.00878081 -517 -0.0111016 -0.0170398 0.0107756 -518 -0.0162643 0.06208 0.0123266 -519 -0.0670643 0.0628756 0.0047451 -520 -0.0673064 0.0791769 0.0489333 -521 -0.0566743 0.0588231 0.00264455 -522 -0.0713841 0.080001 0.0523997 -523 -0.0690781 0.0794039 0.0521145 -524 -0.0589744 0.0702988 0.0123753 -525 -0.0108026 0.05228 0.00636676 -526 -0.0113486 0.0541547 0.00728553 -527 -0.0299136 0.0686241 0.0165753 -528 0.0505332 -0.0225927 0.00635398 -529 0.0180077 0.0031318 0.0704387 -530 -0.0235313 0.0640143 0.012641 -531 -0.0235569 0.00584404 0.00381922 -532 0.0384718 -0.0113423 0.0144484 -533 0.0182407 0.00232532 0.0728388 -534 -0.0235752 0.00407866 0.00373027 -535 -0.011585 0.0522432 0.00647843 -536 0.0400312 -0.00904366 0.0126741 -537 -0.0178591 -0.000359808 0.00797485 -538 -0.067167 0.0625514 0.00392853 -539 -0.0596438 0.0779391 0.0290601 -540 0.0013543 0.0302152 0.00901705 -541 0.0168301 0.00522322 0.0737244 -542 0.0174324 0.00448014 0.0738384 -543 -0.0618546 0.0649931 0.00590465 -544 0.0194429 0.0304209 0.00452872 -545 -0.0236633 0.0648084 0.0124456 -546 -0.00249493 -0.0562542 0.012985 -547 -0.0025263 -0.0246783 0.0125409 -548 -0.0396392 0.0718092 0.02876 -549 -0.0158083 -0.0164708 0.00645267 -550 0.016879 0.0245859 0.0055459 -551 -0.0688499 0.0811361 0.0461884 -552 0.0290982 -0.00647478 0.00827907 -553 -0.041817 0.0761358 0.0343691 -554 -0.0642688 0.0653922 0.00517065 -555 -0.0162175 0.00239503 0.00694561 -556 0.00467524 0.0360758 0.00643588 -557 -0.0222973 0.0035638 0.00646752 -558 -0.0708092 0.0801688 0.0482801 -559 -0.0549524 0.0787083 0.0296023 -560 -0.0631054 0.0672415 0.00811831 -561 -0.0155444 -0.0163359 0.0060847 -562 -0.0574097 0.0788047 0.0473507 -563 -0.0558952 0.0591814 0.001764 -564 -0.0177409 0.0619627 0.0144786 -565 -0.00178349 -0.0487397 0.0125937 -566 -0.0111058 0.0522074 0.00829904 -567 -0.0260139 0.00360897 0.00461987 -568 -0.0204566 0.00423454 0.00564674 -569 0.00612936 0.0370467 0.00680554 -570 0.010446 0.0313554 0.00705031 -571 -0.0569353 0.05965 0.00118235 -572 -0.0506685 0.0625792 0.00279292 -573 -0.0249761 0.00485573 0.00443819 -574 0.0172421 0.00725128 0.0738262 -575 -0.0219613 0.0643004 0.0138184 -576 -0.00260185 -0.0513557 0.0142694 -577 -0.0167422 0.00259292 0.00779623 -578 0.00214524 0.0341103 0.00650831 -579 -0.0236765 0.00572293 0.004305 -580 -0.0616879 0.0784644 0.0353636 -581 -0.0125522 0.0533024 0.00573952 -582 -0.00373263 -0.048886 0.014509 -583 -0.00253347 -0.0472982 0.0131992 -584 -0.0128746 -0.017623 0.00940414 -585 -5.43548e-05 0.0393803 0.00728201 -586 -0.0258702 0.00405717 0.00525282 -587 0.0183599 0.0265636 0.00640112 -588 0.0459896 -0.0257989 0.0100883 -589 -0.0295424 0.0680594 0.0247957 -590 -0.0245383 0.0634107 0.0123732 -591 0.0066096 0.0377811 0.00691952 -592 -0.0450015 0.0646553 0.00575343 -593 -0.0622505 0.0661482 0.00839783 -594 -0.0256248 0.0608105 0.0161665 -595 0.017488 0.00853314 0.0720965 -596 -0.0596734 0.0705097 0.00992485 -597 -0.0665798 0.0628689 0.00493615 -598 -0.0624322 0.0664941 0.0080812 -599 0.0436037 -0.00911409 0.00950451 -600 -0.0258241 0.00183578 0.00455937 -601 -0.0702703 0.0796913 0.0546337 -602 -0.027947 0.0630495 0.0231884 -603 -0.0601839 0.0704633 0.0106076 -604 -0.019796 -0.0130118 0.0069497 -605 -0.0183149 0.0630548 0.012418 -606 -0.0302535 0.0701272 0.02364 -607 -0.0574291 0.0790851 0.0314511 -608 -0.0506885 0.0650762 0.00396145 -609 -0.021101 0.0616869 0.0137094 -610 -0.0331684 0.0670427 0.023997 -611 0.0134393 0.00644533 0.00718965 -612 -0.0111807 -0.0194906 0.00818236 -613 -0.0255718 0.00304117 0.00332801 -614 -0.0126697 -0.015488 0.00653208 -615 -0.0247074 0.00660999 0.00551935 -616 0.0173416 0.0031807 0.0727906 -617 0.0172416 0.0236783 0.00588169 -618 0.0190309 0.0293428 0.00437137 -619 0.016715 0.00646681 0.0747173 -620 -0.0362286 0.072292 0.023504 -621 -0.0193589 -0.00042516 0.00470745 -622 -0.0218861 0.0643631 0.0125137 -623 -0.0102557 0.0512168 0.00711881 -624 0.0404202 -0.00631757 0.0116411 -625 0.0462272 -0.00679819 0.0101561 -626 -0.0259792 0.0656558 0.0150971 -627 0.0162732 0.0229634 0.00624384 -628 0.00353474 0.0364474 0.00843339 -629 4.6368e-06 0.0388726 0.00973083 -630 -0.0216501 0.0633078 0.012475 -631 -0.0653553 0.0635995 0.0060088 -632 -0.0129397 0.0533345 0.00604151 -633 -0.00189413 -0.0244631 0.013557 -634 -0.0610974 0.0673557 0.00916116 -635 0.0169636 0.00823874 0.0726305 -636 -0.0262169 0.00566462 0.00486021 -637 -0.00105663 -0.050339 0.013034 -638 -0.0522352 0.0618469 0.00239028 -639 -0.0658611 0.0623674 0.00600767 -640 -0.0308719 0.0671807 0.0240148 -641 -0.0271033 0.0631674 0.0232081 -642 0.000463176 0.0377435 0.00713404 -643 0.0197653 -0.0105149 0.0573133 -644 -0.0261272 0.00574879 0.00514751 -645 -0.0256133 0.00236555 0.00535812 -646 0.0395658 -0.00664927 0.0115095 -647 -0.0346515 0.0704144 0.0260764 -648 -0.0676857 0.0619198 0.00410476 -649 -0.0352382 0.0722683 0.0261851 -650 -0.0489272 0.0632235 0.00329626 -651 -0.0514659 0.0617489 0.00295197 -652 -0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1654 -1 4 0 26 15 543 25 -2 4 0 227 308 190 188 -3 4 0 203 353 199 163 -4 4 0 331 305 504 150 -5 4 0 142 328 128 138 -6 4 0 490 439 18 571 -7 4 0 364 289 287 414 -8 4 0 296 336 304 298 -9 4 0 564 419 300 381 -10 4 0 398 569 373 591 -11 4 0 486 473 639 422 -12 4 0 338 89 566 489 -13 4 0 332 554 543 424 -14 4 0 80 67 71 302 -15 4 0 149 146 109 108 -16 4 0 98 90 375 342 -17 4 0 341 308 325 313 -18 4 0 147 314 126 116 -19 4 0 124 318 156 131 -20 4 0 245 322 206 308 -21 4 0 348 311 516 186 -22 4 0 135 150 319 151 -23 4 0 147 314 307 311 -24 4 0 464 588 301 528 -25 4 0 461 33 35 333 -26 4 0 196 192 373 314 -27 4 0 108 81 302 122 -28 4 0 366 258 227 357 -29 4 0 511 107 512 353 -30 4 0 146 170 354 172 -31 4 0 297 175 156 130 -32 4 0 130 297 175 308 -33 4 0 318 159 319 195 -34 4 0 154 123 122 342 -35 4 0 261 308 259 260 -36 4 0 132 142 128 318 -37 4 0 241 250 240 205 -38 4 0 226 227 248 324 -39 4 0 575 609 475 49 -40 4 0 375 91 123 90 -41 4 0 260 308 255 251 -42 4 0 517 612 63 482 -43 4 0 120 117 131 297 -44 4 0 318 131 297 156 -45 4 0 147 319 311 307 -46 4 0 131 120 297 130 -47 4 0 120 297 111 117 -48 4 0 308 174 206 360 -49 4 0 148 313 325 175 -50 4 0 148 313 175 174 -51 4 0 302 80 122 81 -52 4 0 107 353 511 110 -53 4 0 322 231 198 197 -54 4 0 61 58 564 57 -55 4 0 240 386 212 221 -56 4 0 121 297 143 117 -57 4 0 121 297 117 111 -58 4 0 307 235 314 182 -59 4 0 307 314 166 182 -60 4 0 417 308 175 316 -61 4 0 308 175 360 417 -62 4 0 601 9 458 1 -63 4 0 459 429 536 599 -64 4 0 211 242 206 308 -65 4 0 528 588 301 356 -66 4 0 316 297 308 175 -67 4 0 197 188 308 228 -68 4 0 231 308 228 197 -69 4 0 231 197 322 308 -70 4 0 188 197 308 361 -71 4 0 322 361 308 197 -72 4 0 259 308 256 255 -73 4 0 298 306 304 299 -74 4 0 302 342 146 122 -75 4 0 251 322 245 308 -76 4 0 298 306 299 236 -77 4 0 342 302 169 129 -78 4 0 157 319 331 150 -79 4 0 190 195 324 227 -80 4 0 146 342 354 154 -81 4 0 190 297 308 324 -82 4 0 236 254 306 299 -83 4 0 354 179 201 322 -84 4 0 308 297 188 361 -85 4 0 361 188 164 297 -86 4 0 195 165 190 318 -87 4 0 307 215 257 235 -88 4 0 194 235 215 307 -89 4 0 174 129 148 313 -90 4 0 169 313 129 174 -91 4 0 322 255 251 201 -92 4 0 366 265 308 258 -93 4 0 227 308 258 366 -94 4 0 258 308 249 265 -95 4 0 227 308 228 258 -96 4 0 448 192 373 196 -97 4 0 228 308 249 258 -98 4 0 296 298 514 336 -99 4 0 125 150 348 126 -100 4 0 125 160 348 150 -101 4 0 244 264 242 316 -102 4 0 264 316 244 271 -103 4 0 224 233 225 219 -104 4 0 107 353 163 199 -105 4 0 217 223 219 225 -106 4 0 308 174 313 206 -107 4 0 206 313 179 174 -108 4 0 241 230 212 233 -109 4 0 241 233 212 218 -110 4 0 267 278 312 273 -111 4 0 267 312 262 273 -112 4 0 206 179 322 245 -113 4 0 242 245 206 308 -114 4 0 144 319 159 157 -115 4 0 265 308 266 272 -116 4 0 218 219 392 233 -117 4 0 264 324 316 271 -118 4 0 324 308 264 316 -119 4 0 297 318 117 131 -120 4 0 128 117 318 124 -121 4 0 354 207 201 177 -122 4 0 207 177 354 184 -123 4 0 155 163 353 203 -124 4 0 131 297 156 130 -125 4 0 395 330 236 202 -126 4 0 164 142 318 190 -127 4 0 253 314 234 311 -128 4 0 307 314 147 166 -129 4 0 331 234 253 254 -130 4 0 306 236 298 331 -131 4 0 156 297 316 175 -132 4 0 324 319 318 316 -133 4 0 297 324 316 308 -134 4 0 373 314 102 125 -135 4 0 167 155 378 192 -136 4 0 278 324 272 269 -137 4 0 278 276 272 324 -138 4 0 319 159 157 336 -139 4 0 267 257 312 243 -140 4 0 307 215 243 257 -141 4 0 156 297 318 316 -142 4 0 207 354 170 184 -143 4 0 124 144 139 156 -144 4 0 267 312 250 243 -145 4 0 144 151 139 319 -146 4 0 318 316 319 144 -147 4 0 316 139 319 144 -148 4 0 139 144 316 156 -149 4 0 316 191 312 319 -150 4 0 316 191 317 156 -151 4 0 313 308 175 174 -152 4 0 253 234 331 311 -153 4 0 331 395 234 236 -154 4 0 272 265 308 366 -155 4 0 103 140 133 510 -156 4 0 235 199 246 314 -157 4 0 246 237 314 199 -158 4 0 144 151 319 157 -159 4 0 92 157 151 144 -160 4 0 92 159 157 144 -161 4 0 395 234 236 330 -162 4 0 395 330 202 348 -163 4 0 348 330 202 209 -164 4 0 324 312 316 271 -165 4 0 266 308 324 272 -166 4 0 324 366 308 227 -167 4 0 242 264 245 308 -168 4 0 272 266 269 324 -169 4 0 135 151 319 139 -170 4 0 40 35 28 29 -171 4 0 88 148 129 342 -172 4 0 325 342 148 88 -173 4 0 314 116 147 166 -174 4 0 77 353 320 94 -175 4 0 331 262 319 306 -176 4 0 319 317 139 316 -177 4 0 450 329 482 328 -178 4 0 183 307 147 166 -179 4 0 188 361 176 197 -180 4 0 169 179 313 174 -181 4 0 314 196 348 373 -182 4 0 102 84 116 353 -183 4 0 102 77 84 353 -184 4 0 191 147 319 317 -185 4 0 307 262 257 312 -186 4 0 307 257 246 235 -187 4 0 307 257 262 246 -188 4 0 128 318 144 124 -189 4 0 246 314 237 253 -190 4 0 314 203 237 234 -191 4 0 142 128 318 138 -192 4 0 253 237 234 314 -193 4 0 306 319 331 336 -194 4 0 307 314 235 246 -195 4 0 316 250 312 191 -196 4 0 450 403 349 329 -197 4 0 121 297 101 143 -198 4 0 382 164 101 297 -199 4 0 369 198 322 193 -200 4 0 264 266 324 269 -201 4 0 322 354 170 207 -202 4 0 322 170 193 207 -203 4 0 353 84 116 110 -204 4 0 70 302 68 83 -205 4 0 331 311 234 395 -206 4 0 323 493 282 301 -207 4 0 269 278 324 271 -208 4 0 278 312 324 271 -209 4 0 207 170 180 184 -210 4 0 207 170 193 180 -211 4 0 325 130 175 308 -212 4 0 146 354 170 154 -213 4 0 354 302 342 146 -214 4 0 161 348 510 181 -215 4 0 182 314 199 235 -216 4 0 322 354 369 170 -217 4 0 231 207 322 198 -218 4 0 313 322 375 341 -219 4 0 375 361 341 322 -220 4 0 322 207 193 198 -221 4 0 297 143 164 101 -222 4 0 221 213 240 232 -223 4 0 190 188 308 297 -224 4 0 341 361 375 382 -225 4 0 341 308 313 322 -226 4 0 134 158 184 354 -227 4 0 247 308 261 249 -228 4 0 263 308 260 251 -229 4 0 318 319 159 144 -230 4 0 309 262 306 319 -231 4 0 250 204 243 312 -232 4 0 448 192 167 378 -233 4 0 37 333 620 35 -234 4 0 37 33 333 35 -235 4 0 297 318 316 324 -236 4 0 167 448 378 153 -237 4 0 212 218 233 219 -238 4 0 88 325 342 494 -239 4 0 246 307 314 253 -240 4 0 307 253 246 262 -241 4 0 126 311 150 348 -242 4 0 388 611 336 514 -243 4 0 348 234 420 314 -244 4 0 236 254 331 306 -245 4 0 348 314 311 234 -246 4 0 211 308 360 417 -247 4 0 373 102 320 125 -248 4 0 316 250 191 438 -249 4 0 250 205 191 438 -250 4 0 254 262 306 309 -251 4 0 254 309 306 310 -252 4 0 299 254 306 310 -253 4 0 331 262 306 254 -254 4 0 292 294 295 293 -255 4 0 194 307 215 204 -256 4 0 304 306 384 299 -257 4 0 267 312 257 262 -258 4 0 353 192 378 155 -259 4 0 319 159 336 195 -260 4 0 353 192 373 378 -261 4 0 336 185 388 195 -262 4 0 312 250 271 267 -263 4 0 271 250 312 316 -264 4 0 261 249 308 265 -265 4 0 268 308 265 261 -266 4 0 247 308 249 228 -267 4 0 227 195 324 226 -268 4 0 366 324 415 337 -269 4 0 337 366 324 357 -270 4 0 190 195 318 324 -271 4 0 156 318 124 144 -272 4 0 263 266 308 264 -273 4 0 251 263 308 264 -274 4 0 197 198 322 369 -275 4 0 154 354 369 342 -276 4 0 188 308 228 227 -277 4 0 79 328 138 92 -278 4 0 316 317 139 156 -279 4 0 360 175 308 174 -280 4 0 255 251 308 322 -281 4 0 255 256 252 308 -282 4 0 247 228 231 308 -283 4 0 247 308 231 256 -284 4 0 134 149 394 354 -285 4 0 83 162 96 302 -286 4 0 161 373 140 348 -287 4 0 88 67 302 68 -288 4 0 302 97 88 68 -289 4 0 512 166 314 182 -290 4 0 420 192 314 234 -291 4 0 348 330 420 234 -292 4 0 192 314 234 203 -293 4 0 91 123 105 115 -294 4 0 394 70 302 81 -295 4 0 309 273 262 319 -296 4 0 319 262 312 273 -297 4 0 67 302 68 70 -298 4 0 271 278 312 267 -299 4 0 66 57 326 58 -300 4 0 188 136 176 361 -301 4 0 157 331 185 504 -302 4 0 136 361 188 164 -303 4 0 244 250 271 316 -304 4 0 71 302 67 70 -305 4 0 244 213 232 240 -306 4 0 81 302 71 70 -307 4 0 354 149 108 146 -308 4 0 314 237 203 199 -309 4 0 506 378 435 629 -310 4 0 244 438 316 213 -311 4 0 97 302 169 162 -312 4 0 244 316 438 250 -313 4 0 313 129 342 169 -314 4 0 382 113 101 164 -315 4 0 506 435 378 94 -316 4 0 91 123 85 105 -317 4 0 308 264 245 251 -318 4 0 242 264 308 316 -319 4 0 450 349 482 329 -320 4 0 314 373 348 125 -321 4 0 92 138 159 144 -322 4 0 395 311 234 348 -323 4 0 278 273 324 312 -324 4 0 373 378 435 320 -325 4 0 147 311 319 135 -326 4 0 126 311 135 150 -327 4 0 126 135 311 147 -328 4 0 314 348 311 126 -329 4 0 83 302 82 70 -330 4 0 378 435 629 373 -331 4 0 195 159 165 318 -332 4 0 316 312 324 319 -333 4 0 156 175 316 387 -334 4 0 336 298 514 331 -335 4 0 88 342 129 302 -336 4 0 319 307 331 311 -337 4 0 253 314 311 307 -338 4 0 311 331 253 307 -339 4 0 297 341 308 130 -340 4 0 314 348 126 125 -341 4 0 147 314 311 126 -342 4 0 61 339 99 338 -343 4 0 250 204 312 191 -344 4 0 305 185 508 331 -345 4 0 211 242 308 316 -346 4 0 211 308 417 316 -347 4 0 213 316 211 417 -348 4 0 214 215 230 204 -349 4 0 244 316 242 211 -350 4 0 244 211 213 316 -351 4 0 465 501 344 502 -352 4 0 108 354 302 394 -353 4 0 313 129 148 342 -354 4 0 337 324 415 248 -355 4 0 337 258 366 357 -356 4 0 121 101 297 111 -357 4 0 382 101 111 297 -358 4 0 157 159 185 336 -359 4 0 226 336 195 324 -360 4 0 307 262 331 253 -361 4 0 307 262 319 331 -362 4 0 331 254 253 262 -363 4 0 248 336 552 296 -364 4 0 319 324 195 336 -365 4 0 248 296 226 336 -366 4 0 324 248 336 552 -367 4 0 147 183 191 307 -368 4 0 282 281 276 323 -369 4 0 281 323 282 301 -370 4 0 109 119 105 122 -371 4 0 297 143 117 318 -372 4 0 109 122 105 80 -373 4 0 308 366 324 272 -374 4 0 297 318 324 190 -375 4 0 297 190 164 318 -376 4 0 214 204 230 212 -377 4 0 224 212 214 230 -378 4 0 297 143 318 164 -379 4 0 264 308 324 266 -380 4 0 264 269 324 271 -381 4 0 132 117 143 318 -382 4 0 130 297 341 120 -383 4 0 341 130 120 98 -384 4 0 277 343 356 279 -385 4 0 325 308 175 313 -386 4 0 109 81 108 122 -387 4 0 109 122 108 146 -388 4 0 348 234 395 330 -389 4 0 341 111 120 297 -390 4 0 341 100 98 120 -391 4 0 341 111 100 120 -392 4 0 226 336 324 248 -393 4 0 318 319 324 195 -394 4 0 275 270 324 309 -395 4 0 309 336 324 319 -396 4 0 552 270 336 324 -397 4 0 273 309 275 324 -398 4 0 403 328 329 450 -399 4 0 382 111 341 297 -400 4 0 361 322 308 341 -401 4 0 361 341 308 297 -402 4 0 342 85 73 90 -403 4 0 342 73 85 80 -404 4 0 323 324 366 276 -405 4 0 361 297 164 382 -406 4 0 96 82 83 302 -407 4 0 45 647 44 42 -408 4 0 179 354 201 177 -409 4 0 53 621 54 347 -410 4 0 117 124 131 318 -411 4 0 156 144 316 318 -412 4 0 369 198 193 141 -413 4 0 342 302 88 67 -414 4 0 67 80 342 302 -415 4 0 73 80 342 67 -416 4 0 342 73 67 76 -417 4 0 372 528 289 285 -418 4 0 285 528 289 287 -419 4 0 355 98 325 494 -420 4 0 122 119 105 123 -421 4 0 394 82 134 302 -422 4 0 494 88 76 342 -423 4 0 109 81 122 80 -424 4 0 447 580 503 505 -425 4 0 114 118 141 145 -426 4 0 311 150 319 135 -427 4 0 108 122 302 146 -428 4 0 204 307 183 194 -429 4 0 191 204 307 183 -430 4 0 382 101 100 111 -431 4 0 382 111 100 341 -432 4 0 318 159 138 144 -433 4 0 588 281 301 356 -434 4 0 87 61 77 57 -435 4 0 318 159 165 138 -436 4 0 7 12 2 486 -437 4 0 316 191 319 317 -438 4 0 208 196 449 445 -439 4 0 322 369 354 313 -440 4 0 354 158 177 162 -441 4 0 354 169 162 179 -442 4 0 313 369 354 342 -443 4 0 179 162 354 177 -444 4 0 130 98 341 355 -445 4 0 325 130 341 355 -446 4 0 337 357 324 248 -447 4 0 324 357 227 248 -448 4 0 588 281 464 301 -449 4 0 375 341 382 98 -450 4 0 454 75 61 155 -451 4 0 353 77 84 74 -452 4 0 331 305 185 504 -453 4 0 311 331 319 150 -454 4 0 378 339 167 106 -455 4 0 318 190 142 165 -456 4 0 138 142 165 318 -457 4 0 18 12 397 14 -458 4 0 298 514 331 513 -459 4 0 118 137 141 168 -460 4 0 298 331 236 395 -461 4 0 395 298 331 513 -462 4 0 93 157 92 159 -463 4 0 354 158 184 177 -464 4 0 151 157 92 93 -465 4 0 78 93 151 92 -466 4 0 378 448 629 153 -467 4 0 102 314 126 125 -468 4 0 126 116 314 102 -469 4 0 61 72 303 75 -470 4 0 39 461 350 553 -471 4 0 350 39 33 461 -472 4 0 311 331 513 395 -473 4 0 311 331 305 509 -474 4 0 353 102 314 116 -475 4 0 204 215 243 307 -476 4 0 106 153 167 378 -477 4 0 97 162 83 302 -478 4 0 107 353 199 512 -479 4 0 297 188 164 190 -480 4 0 147 319 139 135 -481 4 0 77 353 87 74 -482 4 0 353 203 199 314 -483 4 0 512 314 353 199 -484 4 0 37 38 29 35 -485 4 0 485 140 373 125 -486 4 0 398 448 373 196 -487 4 0 196 570 373 398 -488 4 0 324 248 552 415 -489 4 0 415 270 552 324 -490 4 0 52 57 594 564 -491 4 0 285 289 414 287 -492 4 0 438 250 205 240 -493 4 0 524 425 25 17 -494 4 0 29 25 524 425 -495 4 0 87 77 61 353 -496 4 0 93 92 138 159 -497 4 0 93 92 79 138 -498 4 0 203 192 353 155 -499 4 0 192 353 314 203 -500 4 0 88 302 129 97 -501 4 0 169 342 354 302 -502 4 0 147 319 317 139 -503 4 0 435 426 629 373 -504 4 0 197 168 369 176 -505 4 0 369 176 361 197 -506 4 0 157 151 319 150 -507 4 0 307 319 312 191 -508 4 0 312 307 191 204 -509 4 0 628 373 441 374 -510 4 0 513 331 311 509 -511 4 0 49 594 413 46 -512 4 0 303 163 87 61 -513 4 0 146 342 154 122 -514 4 0 274 366 415 337 -515 4 0 274 258 366 337 -516 4 0 87 57 74 66 -517 4 0 304 306 336 384 -518 4 0 204 250 205 191 -519 4 0 110 74 66 87 -520 4 0 163 87 61 353 -521 4 0 204 205 250 241 -522 4 0 387 438 213 316 -523 4 0 150 160 348 311 -524 4 0 313 369 342 375 -525 4 0 313 322 369 375 -526 4 0 97 129 169 302 -527 4 0 504 305 393 150 -528 4 0 181 348 500 187 -529 4 0 610 527 42 44 -530 4 0 44 527 42 620 -531 4 0 311 305 456 509 -532 4 0 311 509 456 516 -533 4 0 365 512 166 116 -534 4 0 116 512 166 314 -535 4 0 509 305 508 331 -536 4 0 322 369 193 170 -537 4 0 535 526 581 632 -538 4 0 182 314 512 199 -539 4 0 497 441 373 540 -540 4 0 37 42 46 527 -541 4 0 500 209 187 348 -542 4 0 312 257 307 243 -543 4 0 323 366 281 276 -544 4 0 348 420 209 196 -545 4 0 366 279 276 272 -546 4 0 202 500 186 348 -547 4 0 386 406 221 232 -548 4 0 64 526 62 489 -549 4 0 336 159 185 195 -550 4 0 404 24 559 335 -551 4 0 404 24 607 559 -552 4 0 384 336 552 270 -553 4 0 244 240 438 213 -554 4 0 244 438 240 250 -555 4 0 430 461 620 333 -556 4 0 461 333 35 620 -557 4 0 61 564 64 334 -558 4 0 381 437 47 413 -559 4 0 279 277 265 258 -560 4 0 279 277 258 274 -561 4 0 186 500 181 348 -562 4 0 140 510 348 160 -563 4 0 377 410 36 350 -564 4 0 202 330 236 209 -565 4 0 380 345 614 468 -566 4 0 99 339 378 106 -567 4 0 378 106 418 99 -568 4 0 378 448 373 629 -569 4 0 194 235 307 182 -570 4 0 194 307 166 182 -571 4 0 194 307 183 166 -572 4 0 353 373 320 378 -573 4 0 68 97 83 302 -574 4 0 347 496 604 476 -575 4 0 161 181 411 373 -576 4 0 570 374 400 368 -577 4 0 40 38 35 29 -578 4 0 364 289 327 528 -579 4 0 324 309 319 273 -580 4 0 353 378 320 94 -581 4 0 358 91 471 375 -582 4 0 134 394 302 354 -583 4 0 394 149 108 354 -584 4 0 172 354 146 149 -585 4 0 382 358 471 375 -586 4 0 101 382 90 358 -587 4 0 651 346 638 390 -588 4 0 382 90 100 101 -589 4 0 334 594 564 475 -590 4 0 369 361 375 322 -591 4 0 322 197 369 361 -592 4 0 342 325 98 494 -593 4 0 325 313 148 342 -594 4 0 342 325 375 98 -595 4 0 115 369 123 367 -596 4 0 342 98 76 494 -597 4 0 369 375 576 115 -598 4 0 353 512 116 314 -599 4 0 336 304 552 296 -600 4 0 336 306 304 298 -601 4 0 226 514 336 296 -602 4 0 108 302 81 394 -603 4 0 181 411 373 374 -604 4 0 26 440 571 383 -605 4 0 26 383 346 440 -606 4 0 211 360 308 206 -607 4 0 87 74 57 77 -608 4 0 358 113 101 382 -609 4 0 195 388 336 226 -610 4 0 241 233 218 238 -611 4 0 155 339 378 353 -612 4 0 345 79 468 476 -613 4 0 213 316 417 175 -614 4 0 387 316 213 175 -615 4 0 312 307 262 319 -616 4 0 435 485 426 373 -617 4 0 435 373 125 485 -618 4 0 299 310 306 384 -619 4 0 26 425 25 34 -620 4 0 118 114 367 434 -621 4 0 26 34 25 608 -622 4 0 223 222 529 392 -623 4 0 527 38 37 35 -624 4 0 37 527 46 38 -625 4 0 342 123 90 375 -626 4 0 342 123 85 90 -627 4 0 335 350 33 35 -628 4 0 350 461 33 35 -629 4 0 85 91 90 123 -630 4 0 259 247 308 261 -631 4 0 629 628 448 373 -632 4 0 633 142 328 128 -633 4 0 629 497 628 373 -634 4 0 303 61 87 72 -635 4 0 236 254 234 331 -636 4 0 341 98 325 355 -637 4 0 373 570 400 569 -638 4 0 398 570 373 569 -639 4 0 49 413 527 46 -640 4 0 49 46 527 457 -641 4 0 49 626 48 527 -642 4 0 241 204 243 250 -643 4 0 49 527 48 457 -644 4 0 392 218 233 238 -645 4 0 233 392 238 223 -646 4 0 178 198 197 141 -647 4 0 198 197 141 369 -648 4 0 364 290 287 528 -649 4 0 419 381 564 413 -650 4 0 92 78 79 59 -651 4 0 192 373 314 353 -652 4 0 386 406 238 423 -653 4 0 367 369 137 391 -654 4 0 437 413 419 606 -655 4 0 413 437 47 606 -656 4 0 239 252 322 255 -657 4 0 454 61 339 155 -658 4 0 34 466 425 29 -659 4 0 221 386 232 240 -660 4 0 60 64 489 484 -661 4 0 484 65 60 64 -662 4 0 212 386 218 221 -663 4 0 241 240 386 212 -664 4 0 241 205 240 212 -665 4 0 607 24 16 470 -666 4 0 620 42 37 527 -667 4 0 37 333 42 620 -668 4 0 95 87 66 69 -669 4 0 113 164 382 361 -670 4 0 410 30 432 21 -671 4 0 371 1 522 458 -672 4 0 527 47 43 40 -673 4 0 596 425 17 15 -674 4 0 393 456 160 311 -675 4 0 110 95 87 66 -676 4 0 160 311 456 516 -677 4 0 512 511 365 166 -678 4 0 353 511 365 512 -679 4 0 128 144 318 138 -680 4 0 341 130 325 308 -681 4 0 87 61 57 58 -682 4 0 419 58 564 72 -683 4 0 414 289 327 364 -684 4 0 320 378 435 94 -685 4 0 364 528 287 289 -686 4 0 212 221 205 240 -687 4 0 134 172 149 354 -688 4 0 134 172 354 184 -689 4 0 319 147 191 307 -690 4 0 589 641 606 436 -691 4 0 347 79 59 476 -692 4 0 345 79 476 92 -693 4 0 92 138 144 328 -694 4 0 86 92 144 328 -695 4 0 32 399 34 38 -696 4 0 306 309 336 310 -697 4 0 347 604 468 476 -698 4 0 347 468 79 476 -699 4 0 614 345 79 468 -700 4 0 384 310 336 270 -701 4 0 439 25 26 422 -702 4 0 196 192 314 420 -703 4 0 348 420 196 314 -704 4 0 132 143 142 318 -705 4 0 164 142 143 318 -706 4 0 386 406 423 221 -707 4 0 35 527 38 40 -708 4 0 158 354 96 162 -709 4 0 169 302 354 162 -710 4 0 334 475 564 363 -711 4 0 155 61 303 75 -712 4 0 94 353 378 339 -713 4 0 224 233 219 212 -714 4 0 214 215 204 194 -715 4 0 204 243 230 241 -716 4 0 204 230 212 241 -717 4 0 391 474 369 136 -718 4 0 286 588 528 356 -719 4 0 35 620 527 47 -720 4 0 136 474 361 565 -721 4 0 566 526 632 64 -722 4 0 490 439 11 14 -723 4 0 209 330 420 348 -724 4 0 35 527 40 47 -725 4 0 76 342 73 98 -726 4 0 77 353 102 320 -727 4 0 268 308 261 260 -728 4 0 167 155 339 378 -729 4 0 465 289 385 344 -730 4 0 255 308 260 259 -731 4 0 335 24 470 33 -732 4 0 559 24 470 335 -733 4 0 522 1 371 428 -734 4 0 347 53 496 54 -735 4 0 559 24 607 470 -736 4 0 476 347 496 54 -737 4 0 312 204 243 307 -738 4 0 230 215 243 204 -739 4 0 241 218 212 386 -740 4 0 241 238 218 386 -741 4 0 29 33 28 23 -742 4 0 23 335 559 470 -743 4 0 297 382 361 341 -744 4 0 336 611 185 331 -745 4 0 388 185 336 611 -746 4 0 353 373 102 320 -747 4 0 373 102 314 353 -748 4 0 44 527 606 610 -749 4 0 74 110 84 353 -750 4 0 610 527 606 413 -751 4 0 325 341 375 98 -752 4 0 369 136 137 391 -753 4 0 169 354 342 313 -754 4 0 274 366 279 281 -755 4 0 281 366 279 276 -756 4 0 322 313 206 308 -757 4 0 414 289 344 385 -758 4 0 114 546 367 434 -759 4 0 367 391 434 369 -760 4 0 155 163 303 61 -761 4 0 47 620 527 44 -762 4 0 384 304 552 336 -763 4 0 384 310 306 336 -764 4 0 99 378 339 94 -765 4 0 506 94 378 99 -766 4 0 365 353 512 116 -767 4 0 378 99 418 506 -768 4 0 478 23 559 470 -769 4 0 328 86 633 128 -770 4 0 265 308 268 266 -771 4 0 268 308 263 266 -772 4 0 564 419 436 58 -773 4 0 460 75 564 65 -774 4 0 339 61 99 94 -775 4 0 518 564 65 460 -776 4 0 643 216 229 392 -777 4 0 342 88 76 67 -778 4 0 26 422 11 439 -779 4 0 26 440 439 571 -780 4 0 411 161 373 441 -781 4 0 442 467 412 10 -782 4 0 350 377 24 33 -783 4 0 225 409 217 223 -784 4 0 410 377 24 350 -785 4 0 24 350 33 335 -786 4 0 371 522 523 458 -787 4 0 278 324 273 276 -788 4 0 273 324 275 276 -789 4 0 170 354 172 184 -790 4 0 169 179 354 313 -791 4 0 607 16 24 580 -792 4 0 367 391 137 118 -793 4 0 35 620 37 527 -794 4 0 548 33 461 333 -795 4 0 414 385 344 294 -796 4 0 414 289 288 344 -797 4 0 65 64 484 454 -798 4 0 93 79 78 401 -799 4 0 375 382 358 90 -800 4 0 413 575 564 594 -801 4 0 187 181 368 189 -802 4 0 358 375 90 91 -803 4 0 275 276 324 323 -804 4 0 493 270 323 275 -805 4 0 532 323 276 275 -806 4 0 324 270 323 415 -807 4 0 275 323 324 270 -808 4 0 157 331 319 336 -809 4 0 454 339 61 338 -810 4 0 527 47 507 43 -811 4 0 74 87 110 353 -812 4 0 61 353 339 155 -813 4 0 444 445 618 379 -814 4 0 173 133 160 510 -815 4 0 352 604 468 347 -816 4 0 161 181 373 348 -817 4 0 23 335 470 33 -818 4 0 181 187 374 373 -819 4 0 29 35 28 33 -820 4 0 348 187 181 373 -821 4 0 562 10 412 447 -822 4 0 10 580 503 447 -823 4 0 399 351 34 38 -824 4 0 515 592 399 32 -825 4 0 434 112 637 474 -826 4 0 134 82 96 302 -827 4 0 224 230 233 212 -828 4 0 134 302 96 354 -829 4 0 302 354 162 96 -830 4 0 376 64 60 564 -831 4 0 606 640 589 45 -832 4 0 369 137 168 141 -833 4 0 113 361 583 136 -834 4 0 197 369 168 141 -835 4 0 12 7 4 14 -836 4 0 510 181 173 171 -837 4 0 61 339 353 94 -838 4 0 369 154 170 354 -839 4 0 404 607 24 21 -840 4 0 411 374 578 441 -841 4 0 500 186 189 480 -842 4 0 535 526 632 566 -843 4 0 628 441 497 483 -844 4 0 478 23 28 559 -845 4 0 28 335 559 23 -846 4 0 93 92 78 79 -847 4 0 554 473 631 453 -848 4 0 198 178 193 141 -849 4 0 187 444 209 500 -850 4 0 226 388 336 514 -851 4 0 287 464 285 528 -852 4 0 528 301 285 372 -853 4 0 497 629 426 373 -854 4 0 394 302 70 82 -855 4 0 64 61 454 75 -856 4 0 444 587 618 445 -857 4 0 467 458 371 523 -858 4 0 371 523 520 467 -859 4 0 371 520 551 467 -860 4 0 385 465 294 292 -861 4 0 468 604 345 476 -862 4 0 584 517 63 345 -863 4 0 176 136 137 369 -864 4 0 439 440 18 571 -865 4 0 490 26 11 439 -866 4 0 324 366 227 357 -867 4 0 606 413 419 436 -868 4 0 527 48 477 507 -869 4 0 527 477 48 457 -870 4 0 527 492 48 507 -871 4 0 527 626 48 492 -872 4 0 134 354 96 158 -873 4 0 62 64 489 60 -874 4 0 52 57 370 594 -875 4 0 326 52 55 564 -876 4 0 524 425 17 19 -877 4 0 373 441 161 540 -878 4 0 373 161 140 540 -879 4 0 66 326 55 58 -880 4 0 58 326 55 564 -881 4 0 310 309 336 270 -882 4 0 324 270 336 309 -883 4 0 157 336 185 331 -884 4 0 181 411 171 161 -885 4 0 640 589 641 606 -886 4 0 537 557 621 54 -887 4 0 282 285 340 288 -888 4 0 372 285 288 340 -889 4 0 382 100 98 341 -890 4 0 502 294 465 292 -891 4 0 43 34 351 38 -892 4 0 221 240 213 205 -893 4 0 438 240 205 213 -894 4 0 425 466 524 29 -895 4 0 354 302 146 108 -896 4 0 435 426 506 629 -897 4 0 497 506 426 629 -898 4 0 187 181 374 368 -899 4 0 517 79 614 345 -900 4 0 342 90 73 98 -901 4 0 180 141 178 152 -902 4 0 178 152 141 168 -903 4 0 193 180 141 178 -904 4 0 140 161 348 510 -905 4 0 9 442 13 362 -906 4 0 442 9 13 467 -907 4 0 408 505 503 580 -908 4 0 607 580 408 16 -909 4 0 327 289 414 385 -910 4 0 372 284 283 340 -911 4 0 359 89 526 566 -912 4 0 607 539 478 470 -913 4 0 140 373 125 348 -914 4 0 328 86 92 517 -915 4 0 527 47 44 606 -916 4 0 155 163 61 353 -917 4 0 367 391 118 434 -918 4 0 338 64 61 454 -919 4 0 64 338 484 454 -920 4 0 359 89 566 338 -921 4 0 489 526 566 64 -922 4 0 448 192 378 373 -923 4 0 350 39 377 33 -924 4 0 369 137 176 168 -925 4 0 377 350 553 39 -926 4 0 325 313 375 341 -927 4 0 340 288 625 282 -928 4 0 342 313 375 325 -929 4 0 524 466 19 20 -930 4 0 425 466 19 524 -931 4 0 348 395 186 202 -932 4 0 610 44 42 45 -933 4 0 409 433 217 223 -934 4 0 217 433 529 223 -935 4 0 582 375 471 115 -936 4 0 434 474 637 369 -937 4 0 382 375 471 582 -938 4 0 98 90 382 375 -939 4 0 382 100 90 98 -940 4 0 123 105 122 85 -941 4 0 122 85 105 80 -942 4 0 43 40 34 38 -943 4 0 369 474 361 136 -944 4 0 469 452 564 460 -945 4 0 46 41 527 457 -946 4 0 415 366 274 323 -947 4 0 191 387 316 438 -948 4 0 191 387 156 316 -949 4 0 434 391 474 369 -950 4 0 502 294 344 465 -951 4 0 502 294 292 293 -952 4 0 476 59 92 79 -953 4 0 306 309 319 336 -954 4 0 528 301 464 285 -955 4 0 301 282 464 285 -956 4 0 208 449 210 379 -957 4 0 210 379 220 208 -958 4 0 551 520 10 467 -959 4 0 359 89 339 106 -960 4 0 110 353 365 116 -961 4 0 353 511 110 365 -962 4 0 118 141 145 152 -963 4 0 34 28 466 29 -964 4 0 621 347 59 54 -965 4 0 59 621 79 347 -966 4 0 342 80 122 302 -967 4 0 369 123 154 342 -968 4 0 123 85 122 342 -969 4 0 122 342 85 80 -970 4 0 450 349 612 482 -971 4 0 564 55 436 413 -972 4 0 40 38 29 34 -973 4 0 606 641 413 436 -974 4 0 28 35 335 33 -975 4 0 34 25 32 29 -976 4 0 487 548 495 479 -977 4 0 187 209 196 348 -978 4 0 461 479 430 495 -979 4 0 311 513 509 186 -980 4 0 395 311 348 186 -981 4 0 187 196 209 444 -982 4 0 485 540 426 373 -983 4 0 21 580 24 447 -984 4 0 412 447 21 562 -985 4 0 412 562 21 446 -986 4 0 447 580 24 10 -987 4 0 46 527 610 413 -988 4 0 229 392 216 222 -989 4 0 323 281 366 274 -990 4 0 281 301 274 323 -991 4 0 599 625 429 282 -992 4 0 608 25 32 34 -993 4 0 372 288 284 340 -994 4 0 227 324 190 308 -995 4 0 373 196 348 187 -996 4 0 425 25 34 29 -997 4 0 628 448 373 591 -998 4 0 591 448 373 398 -999 4 0 477 43 41 527 -1000 4 0 80 71 81 302 -1001 4 0 457 477 41 527 -1002 4 0 647 487 430 479 -1003 4 0 628 373 497 441 -1004 4 0 578 628 441 374 -1005 4 0 410 24 335 350 -1006 4 0 393 311 160 150 -1007 4 0 367 118 137 141 -1008 4 0 343 488 356 396 -1009 4 0 87 72 61 58 -1010 4 0 488 588 356 396 -1011 4 0 476 54 59 347 -1012 4 0 94 353 61 77 -1013 4 0 110 353 87 107 -1014 4 0 251 245 322 201 -1015 4 0 245 179 322 201 -1016 4 0 11 422 486 14 -1017 4 0 287 588 464 528 -1018 4 0 10 467 412 551 -1019 4 0 13 551 412 467 -1020 4 0 371 467 551 13 -1021 4 0 551 10 8 412 -1022 4 0 113 164 361 136 -1023 4 0 425 25 15 26 -1024 4 0 140 348 125 160 -1025 4 0 451 588 528 286 -1026 4 0 180 152 145 141 -1027 4 0 607 16 539 470 -1028 4 0 374 570 400 373 -1029 4 0 373 374 556 400 -1030 4 0 374 373 556 628 -1031 4 0 441 628 578 483 -1032 4 0 497 642 418 629 -1033 4 0 167 89 106 339 -1034 4 0 346 440 390 521 -1035 4 0 369 123 342 375 -1036 4 0 583 382 498 361 -1037 4 0 564 75 72 61 -1038 4 0 564 61 64 75 -1039 4 0 345 517 79 92 -1040 4 0 533 529 223 222 -1041 4 0 498 582 576 375 -1042 4 0 575 376 609 49 -1043 4 0 412 10 8 447 -1044 4 0 561 472 549 468 -1045 4 0 239 322 252 231 -1046 4 0 397 12 4 14 -1047 4 0 367 369 434 576 -1048 4 0 206 313 322 179 -1049 4 0 322 179 313 354 -1050 4 0 12 2 4 7 -1051 4 0 346 638 26 608 -1052 4 0 66 87 57 58 -1053 4 0 72 58 564 61 -1054 4 0 322 207 231 239 -1055 4 0 201 354 322 207 -1056 4 0 239 255 322 201 -1057 4 0 533 402 529 222 -1058 4 0 60 518 564 65 -1059 4 0 11 486 12 14 -1060 4 0 118 168 141 152 -1061 4 0 60 376 564 518 -1062 4 0 576 375 582 115 -1063 4 0 515 34 399 351 -1064 4 0 334 564 64 363 -1065 4 0 311 331 150 305 -1066 4 0 473 538 597 519 -1067 4 0 564 594 575 475 -1068 4 0 36 30 432 410 -1069 4 0 343 396 356 279 -1070 4 0 281 279 356 396 -1071 4 0 281 274 301 356 -1072 4 0 486 7 14 422 -1073 4 0 642 153 585 629 -1074 4 0 153 642 628 629 -1075 4 0 503 447 8 10 -1076 4 0 461 430 620 416 -1077 4 0 493 270 275 280 -1078 4 0 275 493 532 323 -1079 4 0 532 493 282 323 -1080 4 0 461 495 430 416 -1081 4 0 493 532 280 275 -1082 4 0 389 381 47 413 -1083 4 0 49 413 626 527 -1084 4 0 500 189 186 181 -1085 4 0 498 382 582 375 -1086 4 0 410 30 24 377 -1087 4 0 30 410 36 377 -1088 4 0 366 265 279 272 -1089 4 0 608 34 32 31 -1090 4 0 527 40 43 38 -1091 4 0 46 527 41 38 -1092 4 0 43 527 38 41 -1093 4 0 597 639 7 486 -1094 4 0 306 298 336 331 -1095 4 0 11 26 15 543 -1096 4 0 554 11 15 543 -1097 4 0 416 430 620 649 -1098 4 0 291 290 364 327 -1099 4 0 637 498 375 361 -1100 4 0 39 548 33 461 -1101 4 0 422 634 25 543 -1102 4 0 583 582 382 113 -1103 4 0 367 114 118 141 -1104 4 0 473 422 11 554 -1105 4 0 178 197 168 141 -1106 4 0 375 369 123 115 -1107 4 0 91 123 115 375 -1108 4 0 377 350 36 553 -1109 4 0 173 181 516 186 -1110 4 0 110 95 107 87 -1111 4 0 353 107 163 87 -1112 4 0 46 527 42 610 -1113 4 0 500 209 348 202 -1114 4 0 334 61 564 57 -1115 4 0 510 103 140 161 -1116 4 0 160 104 140 133 -1117 4 0 486 11 473 422 -1118 4 0 336 611 331 514 -1119 4 0 576 434 637 369 -1120 4 0 29 466 524 20 -1121 4 0 366 279 265 258 -1122 4 0 366 279 258 274 -1123 4 0 89 484 338 454 -1124 4 0 462 621 568 534 -1125 4 0 133 104 140 103 -1126 4 0 462 534 568 531 -1127 4 0 521 440 390 563 -1128 4 0 383 440 563 390 -1129 4 0 141 154 170 369 -1130 4 0 141 193 369 170 -1131 4 0 173 181 510 516 -1132 4 0 348 510 181 516 -1133 4 0 324 366 276 272 -1134 4 0 415 324 366 323 -1135 4 0 477 527 507 43 -1136 4 0 26 25 440 346 -1137 4 0 430 333 42 479 -1138 4 0 460 452 564 75 -1139 4 0 31 515 32 592 -1140 4 0 181 189 187 500 -1141 4 0 389 527 413 47 -1142 4 0 413 389 626 527 -1143 4 0 376 590 49 575 -1144 4 0 331 611 185 508 -1145 4 0 223 392 407 219 -1146 4 0 223 233 392 219 -1147 4 0 538 648 597 519 -1148 4 0 597 648 538 486 -1149 4 0 557 537 568 499 -1150 4 0 553 39 461 416 -1151 4 0 290 528 451 287 -1152 4 0 554 453 332 560 -1153 4 0 601 467 458 9 -1154 4 0 623 525 535 566 -1155 4 0 566 525 535 526 -1156 4 0 378 106 431 418 -1157 4 0 53 496 352 347 -1158 4 0 564 300 419 72 -1159 4 0 564 452 300 72 -1160 4 0 2 6 7 486 -1161 4 0 421 451 528 286 -1162 4 0 451 528 588 287 -1163 4 0 409 595 433 491 -1164 4 0 79 621 78 401 -1165 4 0 401 621 78 555 -1166 4 0 78 537 555 621 -1167 4 0 599 340 282 301 -1168 4 0 493 599 282 301 -1169 4 0 430 620 42 333 -1170 4 0 565 498 112 637 -1171 4 0 583 498 112 565 -1172 4 0 599 429 536 282 -1173 4 0 599 625 459 429 -1174 4 0 543 554 332 15 -1175 4 0 474 112 637 565 -1176 4 0 364 290 528 327 -1177 4 0 548 461 479 333 -1178 4 0 461 333 430 479 -1179 4 0 383 390 346 440 -1180 4 0 65 60 64 564 -1181 4 0 65 64 75 564 -1182 4 0 383 638 346 390 -1183 4 0 380 468 614 549 -1184 4 0 532 282 276 323 -1185 4 0 157 331 504 150 -1186 4 0 89 454 338 339 -1187 4 0 167 454 89 339 -1188 4 0 8 5 10 551 -1189 4 0 5 520 10 551 -1190 4 0 492 626 545 389 -1191 4 0 389 626 545 469 -1192 4 0 37 33 35 29 -1193 4 0 615 568 499 557 -1194 4 0 500 186 480 202 -1195 4 0 54 56 53 496 -1196 4 0 294 295 291 385 -1197 4 0 295 291 385 327 -1198 4 0 295 294 292 385 -1199 4 0 474 637 361 565 -1200 4 0 497 373 426 540 -1201 4 0 40 29 28 34 -1202 4 0 535 525 581 526 -1203 4 0 328 92 79 517 -1204 4 0 496 56 352 604 -1205 4 0 459 536 646 493 -1206 4 0 459 429 624 536 -1207 4 0 493 536 280 532 -1208 4 0 25 346 26 608 -1209 4 0 351 399 41 38 -1210 4 0 43 41 38 351 -1211 4 0 527 413 47 606 -1212 4 0 308 252 322 231 -1213 4 0 308 255 322 252 -1214 4 0 256 231 252 308 -1215 4 0 256 308 259 247 -1216 4 0 21 30 24 410 -1217 4 0 21 30 562 24 -1218 4 0 315 621 555 568 -1219 4 0 217 219 223 407 -1220 4 0 225 223 219 233 -1221 4 0 407 217 529 223 -1222 4 0 381 452 300 564 -1223 4 0 595 635 433 491 -1224 4 0 414 385 291 327 -1225 4 0 416 39 461 495 -1226 4 0 461 39 548 495 -1227 4 0 461 548 479 495 -1228 4 0 301 282 281 464 -1229 4 0 301 282 285 340 -1230 4 0 315 621 568 462 -1231 4 0 372 289 288 285 -1232 4 0 289 288 285 414 -1233 4 0 431 153 106 378 -1234 4 0 55 641 589 436 -1235 4 0 651 572 638 608 -1236 4 0 564 452 72 75 -1237 4 0 573 534 567 613 -1238 4 0 567 645 600 534 -1239 4 0 499 568 577 537 -1240 4 0 414 327 291 364 -1241 4 0 561 549 614 468 -1242 4 0 338 489 566 64 -1243 4 0 89 484 489 338 -1244 4 0 385 294 465 344 -1245 4 0 445 196 444 209 -1246 4 0 209 550 444 427 -1247 4 0 490 14 11 12 -1248 4 0 490 18 14 12 -1249 4 0 597 648 486 7 -1250 4 0 486 639 7 422 -1251 4 0 639 473 597 631 -1252 4 0 529 491 616 533 -1253 4 0 435 320 125 373 -1254 4 0 616 491 529 541 -1255 4 0 497 628 642 629 -1256 4 0 46 52 413 602 -1257 4 0 623 359 566 338 -1258 4 0 497 506 629 418 -1259 4 0 99 359 623 338 -1260 4 0 65 64 454 75 -1261 4 0 209 617 550 427 -1262 4 0 86 328 144 128 -1263 4 0 570 187 374 368 -1264 4 0 403 86 633 328 -1265 4 0 601 522 458 523 -1266 4 0 604 352 472 56 -1267 4 0 273 312 319 324 -1268 4 0 380 614 63 549 -1269 4 0 561 549 63 614 -1270 4 0 623 525 566 359 -1271 4 0 359 525 566 526 -1272 4 0 566 89 526 489 -1273 4 0 113 382 358 471 -1274 4 0 582 471 382 113 -1275 4 0 523 467 458 601 -1276 4 0 268 308 260 263 -1277 4 0 374 628 556 578 -1278 4 0 498 582 382 583 -1279 4 0 586 645 534 557 -1280 4 0 361 176 369 136 -1281 4 0 277 356 274 279 -1282 4 0 576 637 375 369 -1283 4 0 637 375 369 361 -1284 4 0 373 556 569 400 -1285 4 0 556 373 569 628 -1286 4 0 447 562 24 21 -1287 4 0 47 492 527 507 -1288 4 0 495 39 548 487 -1289 4 0 572 608 651 650 -1290 4 0 541 619 542 574 -1291 4 0 27 562 21 30 -1292 4 0 21 446 562 27 -1293 4 0 517 328 614 79 -1294 4 0 545 530 622 575 -1295 4 0 522 371 523 558 -1296 4 0 523 371 520 558 -1297 4 0 471 91 115 375 -1298 4 0 578 127 628 556 -1299 4 0 127 153 628 556 -1300 4 0 641 413 55 52 -1301 4 0 55 564 436 58 -1302 4 0 564 334 57 594 -1303 4 0 55 641 436 413 -1304 4 0 575 413 49 594 -1305 4 0 15 17 596 560 -1306 4 0 521 440 563 571 -1307 4 0 632 581 62 526 -1308 4 0 285 372 301 340 -1309 4 0 290 451 528 421 -1310 4 0 326 57 564 58 -1311 4 0 205 212 241 204 -1312 4 0 564 452 469 381 -1313 4 0 239 322 207 201 -1314 4 0 223 392 529 407 -1315 4 0 381 564 413 469 -1316 4 0 395 513 311 186 -1317 4 0 389 469 413 626 -1318 4 0 136 361 583 565 -1319 4 0 586 645 567 534 -1320 4 0 32 25 608 346 -1321 4 0 369 367 137 141 -1322 4 0 469 575 545 622 -1323 4 0 593 543 634 422 -1324 4 0 373 569 628 591 -1325 4 0 556 569 153 628 -1326 4 0 196 187 373 570 -1327 4 0 167 454 339 155 -1328 4 0 590 626 575 530 -1329 4 0 536 493 282 532 -1330 4 0 133 140 160 510 -1331 4 0 376 363 64 564 -1332 4 0 209 427 444 587 -1333 4 0 571 440 563 383 -1334 4 0 498 375 576 637 -1335 4 0 531 534 568 579 -1336 4 0 534 568 557 621 -1337 4 0 218 392 643 238 -1338 4 0 568 555 577 537 -1339 4 0 475 609 363 49 -1340 4 0 363 609 475 564 -1341 4 0 393 311 150 305 -1342 4 0 19 425 17 596 -1343 4 0 596 17 603 560 -1344 4 0 522 428 371 558 -1345 4 0 127 628 497 483 -1346 4 0 492 48 545 626 -1347 4 0 21 607 24 580 -1348 4 0 132 117 318 128 -1349 4 0 633 132 547 142 -1350 4 0 437 381 419 413 -1351 4 0 419 381 437 300 -1352 4 0 173 181 186 171 -1353 4 0 405 613 600 534 -1354 4 0 632 526 62 64 -1355 4 0 489 484 64 338 -1356 4 0 600 54 53 621 -1357 4 0 29 20 28 466 -1358 4 0 20 28 466 443 -1359 4 0 49 48 626 590 -1360 4 0 63 345 614 380 -1361 4 0 584 345 63 380 -1362 4 0 470 607 559 478 -1363 4 0 28 23 22 20 -1364 4 0 478 23 22 28 -1365 4 0 473 422 554 631 -1366 4 0 555 537 568 621 -1367 4 0 18 490 14 439 -1368 4 0 596 17 19 603 -1369 4 0 571 440 18 521 -1370 4 0 542 491 616 541 -1371 4 0 534 568 615 557 -1372 4 0 534 568 579 615 -1373 4 0 392 222 229 238 -1374 4 0 626 48 530 590 -1375 4 0 238 406 229 423 -1376 4 0 629 585 642 418 -1377 4 0 418 506 629 378 -1378 4 0 378 431 629 418 -1379 4 0 153 448 628 591 -1380 4 0 591 569 628 153 -1381 4 0 550 209 500 627 -1382 4 0 515 31 32 34 -1383 4 0 209 627 550 617 -1384 4 0 569 556 153 400 -1385 4 0 645 621 557 54 -1386 4 0 529 491 533 223 -1387 4 0 601 1 458 522 -1388 4 0 522 601 1 3 -1389 4 0 359 339 99 106 -1390 4 0 338 99 359 339 -1391 4 0 49 575 626 413 -1392 4 0 473 597 631 453 -1393 4 0 605 564 518 460 -1394 4 0 222 392 402 529 -1395 4 0 113 382 583 361 -1396 4 0 33 335 28 23 -1397 4 0 370 52 594 46 -1398 4 0 408 505 580 607 -1399 4 0 413 640 602 641 -1400 4 0 630 376 564 609 -1401 4 0 49 376 609 363 -1402 4 0 363 376 609 564 -1403 4 0 393 456 311 305 -1404 4 0 218 221 386 643 -1405 4 0 643 386 423 221 -1406 4 0 141 123 369 367 -1407 4 0 498 382 375 361 -1408 4 0 474 637 369 361 -1409 4 0 558 371 520 551 -1410 4 0 558 428 371 551 -1411 4 0 374 441 411 373 -1412 4 0 422 25 26 543 -1413 4 0 25 17 15 634 -1414 4 0 606 44 610 45 -1415 4 0 367 115 369 576 -1416 4 0 367 576 546 115 -1417 4 0 636 573 567 613 -1418 4 0 615 51 579 573 -1419 4 0 50 51 615 636 -1420 4 0 55 413 564 52 -1421 4 0 594 52 413 46 -1422 4 0 564 326 52 57 -1423 4 0 367 434 546 576 -1424 4 0 208 449 379 445 -1425 4 0 379 445 544 208 -1426 4 0 26 439 440 25 -1427 4 0 622 575 605 469 -1428 4 0 636 586 567 573 -1429 4 0 573 586 567 534 -1430 4 0 599 625 340 283 -1431 4 0 605 630 518 564 -1432 4 0 171 510 181 161 -1433 4 0 32 29 38 34 -1434 4 0 402 216 392 222 -1435 4 0 223 222 392 238 -1436 4 0 389 492 527 47 -1437 4 0 389 492 626 527 -1438 4 0 577 555 78 537 -1439 4 0 315 621 401 555 -1440 4 0 15 598 634 560 -1441 4 0 634 17 15 560 -1442 4 0 481 142 328 633 -1443 4 0 128 328 144 138 -1444 4 0 413 610 640 606 -1445 4 0 640 606 610 45 -1446 4 0 379 449 444 445 -1447 4 0 187 449 196 444 -1448 4 0 445 449 444 196 -1449 4 0 605 564 460 469 -1450 4 0 575 564 605 469 -1451 4 0 541 200 619 574 -1452 4 0 564 436 419 413 -1453 4 0 517 482 63 614 -1454 4 0 154 369 141 123 -1455 4 0 583 498 565 361 -1456 4 0 498 361 637 565 -1457 4 0 622 530 630 575 -1458 4 0 21 30 432 27 -1459 4 0 173 510 160 516 -1460 4 0 311 160 348 516 -1461 4 0 485 140 540 373 -1462 4 0 21 505 580 447 -1463 4 0 490 26 439 571 -1464 4 0 379 544 220 208 -1465 4 0 348 516 181 186 -1466 4 0 186 509 311 516 -1467 4 0 209 202 627 617 -1468 4 0 433 635 529 491 -1469 4 0 430 42 620 44 -1470 4 0 649 430 620 44 -1471 4 0 529 635 541 491 -1472 4 0 404 24 410 21 -1473 4 0 404 410 24 335 -1474 4 0 89 338 359 339 -1475 4 0 450 328 482 517 -1476 4 0 517 328 482 614 -1477 4 0 78 59 537 621 -1478 4 0 588 396 281 356 -1479 4 0 286 488 588 356 -1480 4 0 424 543 593 422 -1481 4 0 463 607 408 16 -1482 4 0 389 381 413 469 -1483 4 0 413 469 575 626 -1484 4 0 626 469 575 545 -1485 4 0 554 11 543 422 -1486 4 0 459 624 646 536 -1487 4 0 332 543 593 424 -1488 4 0 631 554 424 422 -1489 4 0 153 431 629 378 -1490 4 0 545 48 530 626 -1491 4 0 626 530 545 575 -1492 4 0 59 621 78 79 -1493 4 0 160 510 348 516 -1494 4 0 626 590 575 49 -1495 4 0 576 434 112 637 -1496 4 0 498 576 112 637 -1497 4 0 346 651 638 608 -1498 4 0 13 442 412 362 -1499 4 0 13 467 412 442 -1500 4 0 132 142 633 128 -1501 4 0 184 180 172 170 -1502 4 0 631 332 424 554 -1503 4 0 531 573 579 51 -1504 4 0 521 571 563 18 -1505 4 0 599 625 282 340 -1506 4 0 622 630 605 575 -1507 4 0 562 442 362 412 -1508 4 0 193 180 170 141 -1509 4 0 50 644 636 615 -1510 4 0 443 466 20 19 -1511 4 0 616 542 533 491 -1512 4 0 413 594 564 52 -1513 4 0 621 53 600 405 -1514 4 0 362 562 446 27 -1515 4 0 403 547 321 481 -1516 4 0 403 481 321 329 -1517 4 0 562 442 412 10 -1518 4 0 493 459 536 599 -1519 4 0 493 599 536 282 -1520 4 0 450 86 328 517 -1521 4 0 413 602 610 46 -1522 4 0 29 23 28 20 -1523 4 0 223 409 433 491 -1524 4 0 621 59 537 54 -1525 4 0 13 362 412 446 -1526 4 0 439 422 11 14 -1527 4 0 639 473 631 422 -1528 4 0 450 612 584 517 -1529 4 0 450 482 612 517 -1530 4 0 413 641 602 52 -1531 4 0 447 10 24 562 -1532 4 0 531 573 534 579 -1533 4 0 380 345 468 604 -1534 4 0 587 427 444 618 -1535 4 0 613 567 600 534 -1536 4 0 218 386 238 643 -1537 4 0 643 238 423 386 -1538 4 0 347 496 352 604 -1539 4 0 63 345 517 614 -1540 4 0 584 612 63 517 -1541 4 0 629 431 585 418 -1542 4 0 153 431 585 629 -1543 4 0 463 539 478 607 -1544 4 0 463 539 607 16 -1545 4 0 564 609 475 575 -1546 4 0 533 529 402 616 -1547 4 0 376 630 564 518 -1548 4 0 645 54 600 621 -1549 4 0 380 468 472 604 -1550 4 0 604 468 472 352 -1551 4 0 380 468 549 472 -1552 4 0 570 187 373 374 -1553 4 0 606 413 641 640 -1554 4 0 413 610 602 640 -1555 4 0 458 467 13 9 -1556 4 0 467 458 13 371 -1557 4 0 11 422 26 543 -1558 4 0 25 17 425 15 -1559 4 0 646 536 280 493 -1560 4 0 646 624 280 536 -1561 4 0 647 430 44 42 -1562 4 0 618 544 220 379 -1563 4 0 648 6 486 7 -1564 4 0 648 6 538 486 -1565 4 0 403 633 547 481 -1566 4 0 403 328 633 481 -1567 4 0 483 127 628 578 -1568 4 0 486 7 12 14 -1569 4 0 53 56 352 496 -1570 4 0 340 288 284 625 -1571 4 0 283 340 284 625 -1572 4 0 561 352 472 468 -1573 4 0 86 450 328 403 -1574 4 0 329 403 481 328 -1575 4 0 455 288 284 372 -1576 4 0 501 288 284 455 -1577 4 0 376 530 575 630 -1578 4 0 630 376 609 575 -1579 4 0 430 479 42 647 -1580 4 0 621 405 600 534 -1581 4 0 22 28 20 443 -1582 4 0 643 238 229 423 -1583 4 0 481 633 547 142 -1584 4 0 558 428 551 652 -1585 4 0 509 611 331 508 -1586 4 0 513 514 331 611 -1587 4 0 509 513 331 611 -1588 4 0 601 9 1 3 -1589 4 0 289 288 344 501 -1590 4 0 515 32 399 34 -1591 4 0 403 321 349 329 -1592 4 0 392 229 643 238 -1593 4 0 618 445 544 379 -1594 4 0 618 587 544 445 -1595 4 0 531 613 534 573 -1596 4 0 629 153 448 628 -1597 4 0 538 473 597 486 -1598 4 0 597 473 639 486 -1599 4 0 650 31 608 346 -1600 4 0 607 505 580 21 -1601 4 0 288 455 289 372 -1602 4 0 289 455 288 501 -1603 4 0 376 530 590 575 -1604 4 0 49 594 475 575 -1605 4 0 356 279 281 274 -1606 4 0 550 209 444 500 -1607 4 0 362 412 446 562 -1608 4 0 529 433 491 223 -1609 4 0 455 372 284 283 -1610 4 0 465 501 455 289 -1611 4 0 465 289 344 501 -1612 4 0 445 209 444 587 -1613 4 0 153 642 127 628 -1614 4 0 294 385 291 414 -1615 4 0 283 625 459 599 -1616 4 0 613 531 51 573 -1617 4 0 636 573 613 51 -1618 4 0 557 621 568 537 -1619 4 0 558 551 520 5 -1620 4 0 500 209 202 627 -1621 4 0 635 200 541 574 -1622 4 0 595 200 635 574 -1623 4 0 558 652 551 5 -1624 4 0 534 579 573 615 -1625 4 0 605 575 630 564 -1626 4 0 31 346 32 608 -1627 4 0 631 424 639 422 -1628 4 0 383 346 638 26 -1629 4 0 469 575 564 413 -1630 4 0 15 560 332 598 -1631 4 0 15 554 332 560 -1632 4 0 586 557 534 615 -1633 4 0 573 586 534 615 -1634 4 0 332 543 598 593 -1635 4 0 543 332 598 15 -1636 4 0 609 575 564 630 -1637 4 0 554 631 332 453 -1638 4 0 424 554 543 422 -1639 4 0 608 346 651 650 -1640 4 0 487 495 430 479 -1641 4 0 645 621 534 557 -1642 4 0 645 621 600 534 -1643 4 0 542 491 541 574 -1644 4 0 541 635 574 491 -1645 4 0 636 644 586 573 -1646 4 0 573 586 615 644 -1647 4 0 543 634 598 593 -1648 4 0 497 127 642 628 -1649 4 0 598 543 15 634 -1650 4 0 25 15 543 634 -1651 4 0 473 519 597 453 -1652 4 0 595 574 635 491 -1653 4 0 636 51 615 573 -1654 4 0 644 573 636 615 -$EndElements -$ElementData -1 -"color" -1 -0.0 -3 -0 -1 -1654 -1 7.56199 -2 4.86806 -3 4.40144 -4 6.42934 -5 4.22059 -6 5.73014 -7 6.38728 -8 6.65278 -9 6.11566 -10 8.59831 -11 4.59846 -12 3.75402 -13 4.81655 -14 5.303 -15 4.23688 -16 4.44352 -17 9.61146 -18 4.02007 -19 6.55381 -20 4.32183 -21 3.77651 -22 4.28126 -23 4.67035 -24 4.25302 -25 3.24949 -26 3.81682 -27 3.6786 -28 5.26567 -29 5.75883 -30 4.40013 -31 4.8604 -32 3.88159 -33 3.62912 -34 6.09732 -35 6.23606 -36 6.81931 -37 3.98474 -38 5.09313 -39 7.92162 -40 5.91342 -41 5.89822 -42 7.79576 -43 3.26766 -44 6.40478 -45 3.30998 -46 5.75804 -47 4.44341 -48 5.56712 -49 7.92901 -50 7.32341 -51 4.11488 -52 7.27876 -53 4.46523 -54 4.41017 -55 4.24074 -56 5.18865 -57 3.67411 -58 3.93323 -59 6.27803 -60 5.7046 -61 5.43246 -62 6.62422 -63 6.87791 -64 4.8315 -65 4.41484 -66 3.44597 -67 4.80585 -68 4.76576 -69 5.09151 -70 3.90176 -71 3.98978 -72 7.05842 -73 5.79771 -74 5.72113 -75 5.39406 -76 8.36837 -77 6.57885 -78 3.81664 -79 5.04602 -80 5.13045 -81 4.17786 -82 4.12193 -83 5.498 -84 3.9477 -85 4.17729 -86 4.53085 -87 4.87674 -88 5.63865 -89 4.91132 -90 5.42233 -91 7.2101 -92 6.62552 -93 5.99626 -94 5.99827 -95 4.64279 -96 4.40763 -97 7.74874 -98 4.60244 -99 4.55322 -100 3.87632 -101 4.43066 -102 3.5908 -103 4.4961 -104 4.6942 -105 6.85876 -106 6.09827 -107 5.34771 -108 3.88554 -109 4.99917 -110 5.07909 -111 5.16529 -112 6.2445 -113 4.05386 -114 4.0937 -115 4.62717 -116 4.31849 -117 3.26285 -118 3.35407 -119 3.68025 -120 5.5668 -121 4.22251 -122 4.99967 -123 4.02172 -124 7.95474 -125 6.88951 -126 5.11647 -127 3.62751 -128 3.75947 -129 5.71937 -130 4.65378 -131 4.22097 -132 3.54665 -133 4.0164 -134 4.14403 -135 5.88228 -136 3.88365 -137 4.9027 -138 3.88649 -139 3.94684 -140 5.61741 -141 4.86852 -142 4.25794 -143 7.6941 -144 4.73617 -145 3.12373 -146 4.88928 -147 3.62576 -148 4.16485 -149 3.9426 -150 3.46852 -151 6.77747 -152 5.33702 -153 6.56503 -154 5.80932 -155 6.15413 -156 6.85355 -157 4.14906 -158 6.14933 -159 6.69641 -160 3.64734 -161 9.61926 -162 4.84044 -163 6.90865 -164 3.44809 -165 7.79131 -166 4.2801 -167 3.52051 -168 5.45391 -169 3.39718 -170 4.71838 -171 3.97902 -172 6.18658 -173 4.17284 -174 3.92603 -175 6.61929 -176 4.47741 -177 5.4168 -178 4.66072 -179 6.78272 -180 8.92575 -181 3.81346 -182 3.82779 -183 3.59616 -184 4.4729 -185 4.12509 -186 9.13405 -187 4.3469 -188 4.17304 -189 3.37722 -190 4.22285 -191 3.89981 -192 3.56114 -193 5.07249 -194 5.73119 -195 3.31977 -196 7.91262 -197 4.91172 -198 4.3087 -199 4.15402 -200 7.6821 -201 4.41955 -202 4.64581 -203 4.16326 -204 7.51723 -205 6.23256 -206 4.63327 -207 4.85318 -208 6.48807 -209 3.61821 -210 5.09043 -211 8.53276 -212 6.52094 -213 3.90421 -214 4.42601 -215 3.83625 -216 5.54714 -217 3.51603 -218 3.84227 -219 5.7805 -220 5.82631 -221 4.20829 -222 5.28021 -223 4.00498 -224 6.02503 -225 5.06898 -226 5.05237 -227 4.69681 -228 4.59421 -229 4.21961 -230 4.26009 -231 5.25661 -232 6.12045 -233 4.26478 -234 3.42011 -235 3.96254 -236 5.39782 -237 5.34452 -238 5.57074 -239 3.58786 -240 5.48832 -241 5.04805 -242 6.99507 -243 4.86669 -244 8.67723 -245 4.42583 -246 6.08779 -247 8.30081 -248 4.11458 -249 7.33372 -250 4.37632 -251 6.55974 -252 4.06411 -253 7.65217 -254 4.98446 -255 7.00166 -256 9.18261 -257 3.97417 -258 3.76504 -259 4.45173 -260 3.78705 -261 8.85178 -262 5.99438 -263 3.68369 -264 4.64732 -265 5.79147 -266 6.364 -267 5.03453 -268 4.96944 -269 4.75356 -270 3.20622 -271 4.24018 -272 4.41709 -273 4.21315 -274 4.38612 -275 6.51163 -276 5.01322 -277 5.46653 -278 3.97587 -279 6.44458 -280 4.97667 -281 5.55967 -282 5.85158 -283 5.0027 -284 3.48534 -285 6.58618 -286 4.80285 -287 5.94949 -288 4.82903 -289 7.5367 -290 5.70127 -291 7.09932 -292 5.78603 -293 5.97275 -294 3.8847 -295 7.18803 -296 4.24715 -297 6.96264 -298 7.0952 -299 4.63648 -300 6.55609 -301 5.16808 -302 5.24241 -303 3.54707 -304 4.3924 -305 4.0213 -306 4.62658 -307 4.81065 -308 4.56642 -309 6.50736 -310 4.75308 -311 3.8215 -312 3.41325 -313 4.08294 -314 4.91393 -315 5.30757 -316 7.02954 -317 5.24187 -318 4.13738 -319 6.58547 -320 3.70239 -321 3.67817 -322 4.58162 -323 5.24492 -324 4.86733 -325 4.91221 -326 4.2757 -327 5.39939 -328 4.61598 -329 8.42673 -330 6.14168 -331 4.57608 -332 3.81451 -333 4.29124 -334 4.12792 -335 5.02872 -336 5.23399 -337 3.38677 -338 4.50817 -339 5.28311 -340 5.64442 -341 4.71327 -342 6.09192 -343 4.17098 -344 7.35127 -345 5.55052 -346 8.62264 -347 7.92427 -348 4.62414 -349 5.61806 -350 5.34776 -351 6.86714 -352 4.07043 -353 3.76518 -354 3.52133 -355 4.0364 -356 4.23061 -357 5.51497 -358 5.34338 -359 5.2446 -360 3.66377 -361 3.61536 -362 4.93218 -363 5.91732 -364 3.99037 -365 6.86673 -366 4.57754 -367 4.54417 -368 3.49705 -369 3.68222 -370 4.05441 -371 3.28484 -372 3.86728 -373 6.47469 -374 3.8287 -375 4.21948 -376 6.50072 -377 5.2599 -378 5.46621 -379 3.90163 -380 8.20664 -381 5.20216 -382 5.3226 -383 4.03878 -384 8.93219 -385 6.79859 -386 5.0444 -387 4.38992 -388 6.97679 -389 3.69486 -390 3.64051 -391 3.67985 -392 6.23422 -393 3.30838 -394 7.50667 -395 3.94216 -396 6.5134 -397 8.60865 -398 4.39139 -399 3.46463 -400 3.90001 -401 4.26802 -402 3.71403 -403 3.59913 -404 3.15595 -405 4.92885 -406 9.80662 -407 3.63884 -408 3.80748 -409 5.15094 -410 6.35325 -411 4.20196 -412 5.86833 -413 5.91247 -414 3.313 -415 3.37645 -416 4.89339 -417 5.19552 -418 6.53485 -419 7.98558 -420 3.6091 -421 4.05488 -422 4.29978 -423 4.68265 -424 8.03386 -425 5.59842 -426 4.70185 -427 3.61697 -428 5.69205 -429 7.16982 -430 4.13106 -431 3.56492 -432 4.22082 -433 4.55629 -434 4.58142 -435 5.53457 -436 6.93426 -437 4.80377 -438 3.84526 -439 3.94317 -440 3.45505 -441 5.16289 -442 3.25289 -443 3.95152 -444 5.40892 -445 6.95209 -446 4.15315 -447 5.02186 -448 4.01812 -449 3.96462 -450 7.14857 -451 4.97123 -452 4.79327 -453 4.80934 -454 7.58936 -455 4.07601 -456 4.83387 -457 4.20561 -458 4.19693 -459 4.28828 -460 6.64926 -461 6.10328 -462 5.14523 -463 3.29956 -464 7.82612 -465 6.51338 -466 5.14228 -467 6.36966 -468 4.00039 -469 5.25401 -470 4.90217 -471 3.91685 -472 4.04775 -473 3.71452 -474 4.00893 -475 6.15397 -476 4.73995 -477 4.49103 -478 6.01817 -479 4.51129 -480 4.45673 -481 4.53029 -482 4.39765 -483 4.84946 -484 4.41482 -485 5.22789 -486 4.83751 -487 4.52841 -488 4.37907 -489 4.53931 -490 3.94812 -491 5.60107 -492 7.82411 -493 6.10887 -494 3.61105 -495 6.22222 -496 5.87689 -497 4.37764 -498 5.74756 -499 5.41576 -500 3.94004 -501 5.49027 -502 4.62278 -503 5.90077 -504 3.72543 -505 8.58284 -506 9.99379 -507 3.93429 -508 7.00354 -509 3.34162 -510 6.26251 -511 4.5708 -512 4.61934 -513 6.10199 -514 7.60203 -515 3.49142 -516 6.17078 -517 5.25425 -518 6.30042 -519 5.72046 -520 4.47283 -521 4.83221 -522 4.41013 -523 5.97733 -524 3.99931 -525 4.76894 -526 3.74452 -527 6.2368 -528 4.09343 -529 6.26363 -530 6.83661 -531 3.96425 -532 3.43579 -533 5.77657 -534 5.34581 -535 4.68041 -536 4.37814 -537 5.99737 -538 5.3648 -539 5.4205 -540 4.22935 -541 5.82056 -542 3.98684 -543 3.28936 -544 4.1958 -545 4.33791 -546 4.85201 -547 5.22988 -548 6.51603 -549 4.38544 -550 4.03691 -551 4.28065 -552 7.54771 -553 5.3477 -554 3.98013 -555 3.65612 -556 3.6305 -557 4.96827 -558 7.0639 -559 5.12306 -560 5.26116 -561 3.98468 -562 4.06433 -563 4.43174 -564 9.65465 -565 4.48661 -566 7.06711 -567 6.01908 -568 5.78751 -569 6.07332 -570 8.58829 -571 7.11434 -572 3.46196 -573 5.46102 -574 6.3086 -575 5.34819 -576 6.91082 -577 4.47437 -578 7.81942 -579 6.82906 -580 4.72318 -581 4.06215 -582 9.60519 -583 5.3436 -584 4.7691 -585 4.475 -586 5.84693 -587 5.8161 -588 4.01326 -589 8.52049 -590 6.06203 -591 3.94 -592 6.42148 -593 6.28834 -594 4.88767 -595 7.62703 -596 7.56987 -597 5.54109 -598 4.11926 -599 6.37613 -600 4.92981 -601 4.80206 -602 3.26213 -603 6.37042 -604 5.17572 -605 3.76555 -606 5.26092 -607 4.19725 -608 3.19057 -609 5.88572 -610 5.22575 -611 3.782 -612 4.38116 -613 8.53952 -614 4.30787 -615 4.10562 -616 7.62857 -617 5.65392 -618 5.96086 -619 4.91053 -620 6.14863 -621 5.91276 -622 4.27409 -623 5.55369 -624 4.8645 -625 4.77293 -626 3.55957 -627 4.11882 -628 3.68402 -629 6.55336 -630 5.93665 -631 6.29134 -632 5.06148 -633 6.32722 -634 3.56814 -635 4.97852 -636 5.319 -637 7.67988 -638 4.9724 -639 3.58948 -640 3.2273 -641 4.94275 -642 6.132 -643 4.23477 -644 3.8824 -645 6.47761 -646 5.83872 -647 6.52367 -648 9.09261 -649 4.02275 -650 4.5423 -651 3.77518 -652 9.34733 -653 4.29857 -654 3.53165 -655 3.69875 -656 8.91855 -657 8.27777 -658 4.2927 -659 5.44146 -660 4.88306 -661 4.61662 -662 4.66585 -663 4.08773 -664 5.47614 -665 4.82537 -666 5.34588 -667 5.09433 -668 4.74203 -669 4.80349 -670 5.17033 -671 5.55982 -672 5.85245 -673 8.50255 -674 5.05679 -675 8.2833 -676 4.20019 -677 6.65706 -678 5.50201 -679 3.83497 -680 8.04853 -681 3.98407 -682 4.14575 -683 4.40359 -684 3.83137 -685 7.5115 -686 4.55691 -687 5.02113 -688 4.10109 -689 3.2165 -690 6.76792 -691 7.39527 -692 5.09019 -693 4.66208 -694 4.89628 -695 3.82454 -696 7.89338 -697 4.34543 -698 4.53367 -699 4.2245 -700 7.97378 -701 5.36364 -702 5.48083 -703 5.18437 -704 7.54515 -705 8.01303 -706 6.9711 -707 5.10957 -708 4.65648 -709 4.17603 -710 3.95182 -711 4.30453 -712 4.83791 -713 5.75603 -714 6.26297 -715 4.26312 -716 4.92191 -717 6.49723 -718 5.39117 -719 7.63936 -720 3.8902 -721 5.26165 -722 3.56636 -723 5.80111 -724 8.11139 -725 6.99287 -726 6.0905 -727 4.48145 -728 6.29626 -729 6.41609 -730 4.82834 -731 4.30295 -732 5.95249 -733 9.1162 -734 7.17952 -735 4.41636 -736 7.00516 -737 5.38428 -738 4.57018 -739 5.16323 -740 6.21328 -741 3.84546 -742 8.92755 -743 4.95277 -744 5.60229 -745 4.74588 -746 4.39131 -747 3.53583 -748 4.71464 -749 3.85774 -750 4.32924 -751 4.21807 -752 5.56949 -753 3.92575 -754 4.08047 -755 4.19341 -756 5.43269 -757 5.08675 -758 7.55608 -759 4.60229 -760 5.26588 -761 6.53396 -762 6.09301 -763 8.49182 -764 3.65278 -765 3.7977 -766 4.72003 -767 5.07267 -768 5.39706 -769 5.74691 -770 7.17011 -771 4.60288 -772 6.53685 -773 5.03197 -774 4.75913 -775 5.21044 -776 8.20214 -777 5.1994 -778 5.72262 -779 5.56165 -780 5.11548 -781 4.91619 -782 4.4872 -783 5.68936 -784 4.47124 -785 5.13239 -786 3.56721 -787 6.21762 -788 7.03673 -789 4.75488 -790 6.58105 -791 6.02163 -792 4.0573 -793 5.61253 -794 4.57518 -795 6.37637 -796 4.44356 -797 4.71151 -798 7.569 -799 4.14096 -800 5.59666 -801 4.97895 -802 3.58641 -803 3.31542 -804 5.39692 -805 4.83649 -806 3.97031 -807 5.44832 -808 4.02433 -809 3.60805 -810 5.34786 -811 3.58587 -812 6.69862 -813 3.32895 -814 4.09119 -815 4.58371 -816 3.80674 -817 6.44114 -818 6.223 -819 4.0441 -820 4.80123 -821 4.30222 -822 6.44328 -823 5.35506 -824 6.92359 -825 3.89947 -826 6.49231 -827 4.93294 -828 4.30558 -829 6.36489 -830 6.66548 -831 4.33778 -832 4.17984 -833 5.47755 -834 6.30491 -835 4.8866 -836 3.97457 -837 5.46085 -838 9.49042 -839 5.90533 -840 4.86468 -841 6.77968 -842 4.50722 -843 6.47377 -844 6.71684 -845 7.28311 -846 4.96895 -847 4.62845 -848 4.76509 -849 4.94072 -850 6.06047 -851 5.03461 -852 4.02971 -853 6.54434 -854 6.22769 -855 4.93337 -856 3.68803 -857 3.53863 -858 3.91408 -859 5.65137 -860 7.37176 -861 4.59552 -862 6.93334 -863 3.44661 -864 6.33348 -865 5.02479 -866 5.35196 -867 4.49256 -868 4.90908 -869 5.13244 -870 6.53011 -871 6.74559 -872 6.30754 -873 4.22522 -874 5.22566 -875 4.48669 -876 6.19697 -877 5.32891 -878 5.90513 -879 5.26841 -880 4.69307 -881 6.53259 -882 5.37303 -883 4.84613 -884 6.84862 -885 8.57067 -886 4.51242 -887 4.09543 -888 3.96732 -889 3.54212 -890 7.13459 -891 3.96056 -892 3.53356 -893 7.88643 -894 3.71017 -895 4.50089 -896 6.13237 -897 9.12911 -898 5.99732 -899 4.20221 -900 5.07845 -901 7.39265 -902 3.4358 -903 6.92631 -904 6.19262 -905 8.37263 -906 3.90019 -907 5.27365 -908 8.43827 -909 4.30468 -910 7.89174 -911 4.55601 -912 5.99339 -913 3.9157 -914 6.4819 -915 5.12264 -916 4.56214 -917 4.68284 -918 3.62525 -919 5.50492 -920 3.3911 -921 5.44747 -922 5.1212 -923 3.91631 -924 4.09731 -925 3.90953 -926 3.24567 -927 3.84614 -928 3.16043 -929 5.57228 -930 5.27177 -931 4.70165 -932 6.21956 -933 6.82471 -934 4.75076 -935 5.36529 -936 7.32308 -937 5.56332 -938 4.4607 -939 4.55218 -940 4.41271 -941 4.16343 -942 3.60628 -943 5.64808 -944 5.0414 -945 4.07399 -946 8.06578 -947 5.13059 -948 3.32765 -949 6.87378 -950 6.8715 -951 5.34151 -952 7.4087 -953 4.97386 -954 4.34552 -955 4.26796 -956 4.19602 -957 3.42375 -958 5.85754 -959 5.66926 -960 8.16791 -961 5.85989 -962 5.27303 -963 4.04843 -964 3.73455 -965 6.69521 -966 3.19527 -967 5.41381 -968 4.9373 -969 3.34371 -970 5.277 -971 5.14515 -972 4.27359 -973 3.45159 -974 4.18209 -975 3.97173 -976 6.6748 -977 5.48345 -978 5.03449 -979 6.2847 -980 4.28563 -981 4.42304 -982 8.30151 -983 8.10918 -984 5.2181 -985 6.07928 -986 7.4987 -987 3.86094 -988 7.79415 -989 4.1437 -990 4.22013 -991 4.84238 -992 4.18954 -993 4.63546 -994 5.03533 -995 5.68754 -996 3.66053 -997 4.99215 -998 3.9023 -999 6.64228 -1000 3.66927 -1001 7.59005 -1002 7.84943 -1003 6.12621 -1004 4.28124 -1005 5.25678 -1006 4.49358 -1007 3.83982 -1008 4.1934 -1009 4.15133 -1010 5.9278 -1011 6.99563 -1012 5.9841 -1013 8.90109 -1014 7.652 -1015 7.06981 -1016 4.2989 -1017 4.43713 -1018 3.94864 -1019 5.25543 -1020 5.67571 -1021 4.55211 -1022 5.55705 -1023 4.35115 -1024 3.53053 -1025 4.95254 -1026 5.0626 -1027 5.91199 -1028 3.64351 -1029 4.37971 -1030 6.08977 -1031 8.17508 -1032 9.08688 -1033 6.27308 -1034 5.95361 -1035 5.76509 -1036 4.96722 -1037 5.54433 -1038 4.46812 -1039 5.33303 -1040 6.1708 -1041 6.72636 -1042 5.29678 -1043 4.55251 -1044 8.94976 -1045 3.51383 -1046 9.65923 -1047 5.82992 -1048 4.65022 -1049 4.9202 -1050 5.80657 -1051 3.98189 -1052 5.41173 -1053 4.62405 -1054 3.74779 -1055 3.72462 -1056 4.19243 -1057 8.98073 -1058 5.19122 -1059 4.03261 -1060 3.37577 -1061 5.38447 -1062 7.73223 -1063 8.13835 -1064 4.25916 -1065 4.74505 -1066 7.41008 -1067 7.34217 -1068 4.67887 -1069 7.30568 -1070 4.68001 -1071 4.1343 -1072 4.30236 -1073 4.91304 -1074 3.81816 -1075 4.33604 -1076 7.30661 -1077 3.71466 -1078 5.48295 -1079 5.02695 -1080 5.64749 -1081 4.97985 -1082 5.0635 -1083 4.18982 -1084 6.63653 -1085 6.50817 -1086 4.06997 -1087 4.6217 -1088 3.9456 -1089 5.86381 -1090 4.34958 -1091 4.72955 -1092 7.68562 -1093 4.76352 -1094 4.38867 -1095 7.24025 -1096 8.56583 -1097 7.12327 -1098 7.63126 -1099 4.98995 -1100 5.51299 -1101 6.22274 -1102 8.55485 -1103 4.67541 -1104 5.56093 -1105 4.11592 -1106 5.39012 -1107 4.91738 -1108 4.55802 -1109 9.81191 -1110 9.03824 -1111 4.91096 -1112 5.68686 -1113 5.43295 -1114 4.5376 -1115 7.76145 -1116 6.56722 -1117 5.56414 -1118 6.48512 -1119 7.08636 -1120 4.86379 -1121 5.06374 -1122 4.43781 -1123 6.37562 -1124 8.00607 -1125 5.72785 -1126 7.44421 -1127 8.55665 -1128 5.86133 -1129 9.30702 -1130 5.39706 -1131 9.72751 -1132 3.48947 -1133 4.01753 -1134 6.24749 -1135 5.18517 -1136 3.7291 -1137 5.12041 -1138 5.72019 -1139 8.40329 -1140 4.29092 -1141 6.32703 -1142 4.81643 -1143 6.2805 -1144 8.28778 -1145 6.11067 -1146 4.67958 -1147 6.84822 -1148 6.91117 -1149 8.73063 -1150 5.19026 -1151 8.76106 -1152 7.46817 -1153 4.01789 -1154 4.79286 -1155 4.32607 -1156 8.23324 -1157 4.8066 -1158 6.2838 -1159 6.4227 -1160 9.33195 -1161 4.68307 -1162 6.92146 -1163 6.30771 -1164 7.57291 -1165 7.22122 -1166 6.39772 -1167 5.60827 -1168 3.81708 -1169 3.25156 -1170 8.08526 -1171 7.77888 -1172 4.56788 -1173 8.09687 -1174 3.49101 -1175 4.88315 -1176 9.9666 -1177 5.09136 -1178 4.89489 -1179 8.84418 -1180 4.97986 -1181 5.33513 -1182 5.84621 -1183 3.85303 -1184 4.81127 -1185 7.16765 -1186 5.06141 -1187 7.20188 -1188 4.7328 -1189 5.06946 -1190 3.66104 -1191 4.29874 -1192 3.89884 -1193 6.80851 -1194 5.53224 -1195 7.4339 -1196 5.48488 -1197 8.32916 -1198 5.44496 -1199 5.953 -1200 7.10064 -1201 4.28803 -1202 5.27418 -1203 3.79067 -1204 3.44724 -1205 4.17183 -1206 7.19842 -1207 4.32375 -1208 3.51299 -1209 7.615 -1210 5.69386 -1211 6.73423 -1212 4.51568 -1213 6.08616 -1214 5.21758 -1215 8.14411 -1216 4.06477 -1217 5.22976 -1218 5.07475 -1219 5.92439 -1220 4.9689 -1221 5.09276 -1222 7.43835 -1223 6.71407 -1224 7.02283 -1225 6.5295 -1226 4.40292 -1227 5.83422 -1228 3.70634 -1229 3.52758 -1230 6.0864 -1231 4.79487 -1232 5.2648 -1233 6.60461 -1234 4.95882 -1235 9.41937 -1236 5.13095 -1237 5.28013 -1238 5.44854 -1239 7.71878 -1240 5.56885 -1241 8.76006 -1242 4.56393 -1243 5.90289 -1244 6.17245 -1245 5.47762 -1246 6.85481 -1247 3.17205 -1248 4.86204 -1249 4.43452 -1250 6.97671 -1251 5.3337 -1252 5.43708 -1253 5.01141 -1254 7.23168 -1255 3.70348 -1256 4.66871 -1257 8.66635 -1258 7.63642 -1259 6.58896 -1260 5.63525 -1261 5.18847 -1262 4.60493 -1263 8.295 -1264 7.64526 -1265 3.59029 -1266 8.30829 -1267 5.61988 -1268 4.40627 -1269 8.59727 -1270 7.237 -1271 5.90024 -1272 4.03286 -1273 4.8429 -1274 7.10562 -1275 6.50655 -1276 4.64487 -1277 4.69878 -1278 7.97432 -1279 4.02501 -1280 5.38605 -1281 4.92341 -1282 5.07646 -1283 3.75685 -1284 5.31243 -1285 5.7707 -1286 5.68964 -1287 5.96062 -1288 7.85077 -1289 8.21576 -1290 6.68323 -1291 4.30884 -1292 4.784 -1293 5.21908 -1294 4.82005 -1295 4.40245 -1296 4.02024 -1297 3.62885 -1298 3.78701 -1299 3.55008 -1300 4.66264 -1301 5.58137 -1302 4.33701 -1303 4.93396 -1304 3.52374 -1305 7.13144 -1306 5.36387 -1307 8.97625 -1308 5.18498 -1309 9.05048 -1310 8.19838 -1311 4.42885 -1312 8.34232 -1313 3.94079 -1314 4.41342 -1315 7.69708 -1316 4.03687 -1317 4.88914 -1318 4.97387 -1319 5.60074 -1320 3.64249 -1321 3.99359 -1322 5.05358 -1323 7.22987 -1324 9.02307 -1325 3.92924 -1326 5.90228 -1327 6.68582 -1328 9.38571 -1329 4.23719 -1330 3.91918 -1331 6.00412 -1332 8.07751 -1333 4.80956 -1334 5.50254 -1335 9.28165 -1336 4.67539 -1337 4.8626 -1338 6.60907 -1339 6.82969 -1340 5.02785 -1341 4.99683 -1342 7.89183 -1343 9.24249 -1344 5.19206 -1345 4.25973 -1346 5.32035 -1347 4.13126 -1348 5.9532 -1349 6.48769 -1350 3.89076 -1351 5.66956 -1352 7.52047 -1353 5.81182 -1354 7.64656 -1355 5.39628 -1356 5.38481 -1357 4.57187 -1358 7.85941 -1359 3.19563 -1360 4.16723 -1361 7.58062 -1362 5.43379 -1363 4.5491 -1364 9.55822 -1365 5.41463 -1366 3.93709 -1367 5.58151 -1368 7.63004 -1369 7.19653 -1370 6.21067 -1371 4.16437 -1372 7.03794 -1373 6.03681 -1374 7.32543 -1375 8.75148 -1376 9.85852 -1377 5.51133 -1378 8.69481 -1379 5.56414 -1380 6.99819 -1381 3.55529 -1382 5.3928 -1383 4.84586 -1384 7.9864 -1385 6.53059 -1386 4.99042 -1387 4.16435 -1388 6.80177 -1389 5.45811 -1390 5.63078 -1391 3.96717 -1392 3.86136 -1393 3.20475 -1394 8.36851 -1395 5.32051 -1396 4.09927 -1397 4.30378 -1398 6.53894 -1399 9.57378 -1400 6.55006 -1401 6.34936 -1402 4.66909 -1403 4.92672 -1404 6.29711 -1405 6.13071 -1406 7.07983 -1407 3.38745 -1408 6.19644 -1409 3.70599 -1410 8.72514 -1411 5.01474 -1412 6.35499 -1413 8.51238 -1414 6.1006 -1415 8.31744 -1416 8.69373 -1417 5.3837 -1418 3.29415 -1419 3.17415 -1420 4.65337 -1421 3.77393 -1422 3.8875 -1423 7.11242 -1424 4.79596 -1425 4.074 -1426 4.91429 -1427 5.40041 -1428 4.50152 -1429 6.82147 -1430 7.03258 -1431 9.84567 -1432 5.28303 -1433 3.28496 -1434 5.3585 -1435 5.80604 -1436 6.24381 -1437 3.80452 -1438 8.7948 -1439 6.69635 -1440 5.38362 -1441 8.19043 -1442 6.65785 -1443 5.14952 -1444 8.66002 -1445 6.98012 -1446 5.82976 -1447 4.7057 -1448 4.19243 -1449 4.46766 -1450 4.94058 -1451 8.7967 -1452 5.51495 -1453 4.0043 -1454 5.16481 -1455 6.42095 -1456 6.01744 -1457 3.71544 -1458 5.73042 -1459 8.12425 -1460 3.95837 -1461 7.51813 -1462 9.24805 -1463 7.61923 -1464 4.43411 -1465 3.83737 -1466 3.95716 -1467 7.15998 -1468 5.65757 -1469 3.42947 -1470 7.66079 -1471 5.68317 -1472 4.17696 -1473 3.43991 -1474 4.08425 -1475 6.28225 -1476 5.03584 -1477 5.6927 -1478 4.82533 -1479 7.60644 -1480 3.80633 -1481 7.85466 -1482 4.0313 -1483 5.53088 -1484 4.79008 -1485 6.91984 -1486 7.05097 -1487 5.06758 -1488 5.28323 -1489 3.97634 -1490 7.07548 -1491 6.99741 -1492 5.39725 -1493 3.70965 -1494 5.20786 -1495 3.35697 -1496 8.30445 -1497 6.24412 -1498 5.02406 -1499 4.3192 -1500 3.75267 -1501 3.75419 -1502 6.70461 -1503 7.29339 -1504 7.25608 -1505 4.67025 -1506 7.00533 -1507 4.95845 -1508 5.9428 -1509 8.22798 -1510 6.09413 -1511 6.69181 -1512 4.68312 -1513 8.54909 -1514 9.17576 -1515 4.67904 -1516 5.70206 -1517 3.82361 -1518 4.83649 -1519 4.49647 -1520 6.62776 -1521 3.87563 -1522 3.82749 -1523 7.136 -1524 5.46372 -1525 7.49927 -1526 4.77056 -1527 6.99557 -1528 5.41681 -1529 5.67049 -1530 9.09783 -1531 6.2033 -1532 5.7676 -1533 6.10859 -1534 5.64874 -1535 4.25459 -1536 4.24224 -1537 7.54998 -1538 4.6898 -1539 3.65217 -1540 6.77849 -1541 7.38216 -1542 5.01269 -1543 9.63731 -1544 5.93312 -1545 6.67582 -1546 4.31103 -1547 7.11233 -1548 9.36116 -1549 5.26081 -1550 5.69302 -1551 3.48767 -1552 6.63839 -1553 6.58539 -1554 7.28664 -1555 3.81367 -1556 4.57632 -1557 5.76642 -1558 5.47675 -1559 4.10006 -1560 7.47012 -1561 4.71169 -1562 7.33109 -1563 3.61097 -1564 7.2049 -1565 5.17177 -1566 5.69784 -1567 5.66136 -1568 5.26364 -1569 5.80611 -1570 6.17947 -1571 7.04854 -1572 8.77365 -1573 4.85623 -1574 3.77604 -1575 4.3199 -1576 5.59875 -1577 7.20581 -1578 8.22279 -1579 6.75557 -1580 6.15071 -1581 8.40391 -1582 5.84813 -1583 6.71808 -1584 9.4805 -1585 5.78575 -1586 5.53995 -1587 6.22247 -1588 6.41044 -1589 4.20686 -1590 5.13741 -1591 9.43675 -1592 4.7142 -1593 3.98455 -1594 7.70331 -1595 5.7983 -1596 5.38736 -1597 6.27297 -1598 5.693 -1599 7.78512 -1600 9.5604 -1601 3.88507 -1602 5.01882 -1603 7.63484 -1604 5.06804 -1605 4.18197 -1606 4.43359 -1607 4.34535 -1608 4.02395 -1609 7.2371 -1610 8.47037 -1611 4.49746 -1612 8.23039 -1613 4.43065 -1614 4.82179 -1615 7.15842 -1616 4.60424 -1617 4.60142 -1618 4.98153 -1619 4.82699 -1620 6.48302 -1621 5.81494 -1622 9.77863 -1623 9.18164 -1624 8.97711 -1625 6.39388 -1626 4.3432 -1627 8.33951 -1628 5.09327 -1629 5.99447 -1630 4.3455 -1631 6.29698 -1632 3.33295 -1633 6.59657 -1634 6.95084 -1635 3.19532 -1636 5.517 -1637 5.79544 -1638 5.11606 -1639 5.09728 -1640 6.96594 -1641 4.43697 -1642 8.62959 -1643 6.33994 -1644 4.6679 -1645 6.9788 -1646 4.62802 -1647 9.58879 -1648 4.3363 -1649 5.16264 -1650 7.16104 -1651 5.92186 -1652 7.45343 -1653 3.24729 -1654 9.37208 -$EndElementData diff --git a/test/user/testdata/shark_22_binary_fTetWild.msh b/test/user/testdata/shark_22_binary_fTetWild.msh index 9176430fe85d1dd93c2b64dbf1798c841ef694f9..ab109750b75f6fe7346bf56de8d973113570ace9 100644 GIT binary patch literal 46504 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%0DijanccT<+9ZUP-vW=^Hdc@hoa1`@ zM9V`m(uLbQ6;Axr4=+~}K4@Lw|$!Owl4T|MwhM0`RUrcS&xdx|kh;Q5noO zNeU~ye=5C4i-|8Hbh8L=?>t{b2Jo2T#qZLd>JXpMX9}d(R|QLmFYHZEoi?^vnJ)2# zs#uq$U4{Rek^;8-6!`MCwjuEeoSRRsc}}$<8N+idmUOIGEFiwMj!1RF(-my#u{vA8_ySb&r|!6j`g^{k~*>I`q`w^+5=Rz+RlYemoPw$7GPSNMiq z2WjM71$Bc*?s`$*T@T}bxZPa0O(U#Kh%fMLf7{zfXNi)m;E%gj?!IDRL_Oj91znCr zX6utR-0`+WN2irW)C*3|-Lb#VG(GAK*S=p}8>Xv6ec-)z&)>d$r$>D8VfIj)u49cv zWD8$PNNm-qhc5Ajoi-CzJY0?M!G5sQ7|mvLb40`!brMfkm84dRsXsin-`VV^ZG-R675z=UQ$nl4Zf^cp)2JV$>mow*zF7ZVkSsUGw zbvXYW2M1596n}T+`rq! z&@}jV>a^)EwkpX34judFke0QGro+kZ&o^K9Rgx#1mQyK_;}|jn?(yi= zIQdC^@`CGvLM+ZKHX(1=)lvAq_@szt!c~X!4mKo;$p@Yl^{hYx-+jJtk4OIF_MX-u zzF4&K`OdcX3smF>TVLIpFaUknAAS{=)!Yo@_5gTy*`(~>CISkC9~HLg>`@}4+3xhnn(&Ri z^m}O261c@PhrFK!LW+WWl_!UfJR_!P*y;N6YsYSyPz*ft~4${HR@nb+&^U zErW-2&o?(7Dxl@?n7OaAwbS%z1zeEPYDXE)BVu9K(&w6fuT>NWt2&i>%>5##m2jVY zSJ9q2jQ?S+p+VC2> zKD?kKuJ3d`+5y+OJ@fVcY)m_0n?=37ca^JY7o4>6U^mM^ecBDb zcP`p#uvSTX;0>-n%Y3@4X)pXYwLZbuOON)!EgcQkPTs3S`{A&J3H!P%(WYd$ZA~-$ zAEm`~0Ny%bd#27*V@iQXud9A)XeptC@X!QFvfFntrNZ;R3|O!e-!+HeyKm+XbiN{` zH26p8mb2BkZk7&r-tpn{^)b417)}$v-r~|uL>X|f=J4m!-x|`tuzcCdAFW>N(h+z< znENMxXE7axM||6JZW{W=G1xid`&6%!+H@Q?(-`1BXsjNcfL9z0ulU$rPAB1^m8L_J zwn^y}e0=sFx9OPYOjww{bf7oJ?Wf@y|4C2ol;~3y+|BjCwCEui|HE@1t}hXe!uTJq zEf>VMIHgDDV7)IDCthTVDH|r=;^NeDA)SXy-#Tlnd+AUP++AlzZs;eB|KaxMilj$6 zo6`mO%C(Y)wtYl&5#C%kGbp0Fl=9#?Q>9g-lNFQ?U!Grj-g}LV3gF$Xhi>d+XH1vi z6wk{peP%1@GF)R;bR#52LRa8kF{>V&Hqxc5@PZ}Dm)(CU=o%~%`ne^q)}!mN!}c4A z8&-(v20Tnl<~V8*#{Y22pOiGOYi?Y^_#fUDW>~iRwUq9{Q$F<@-8oW9_u%U9uW}=2iKrNk$?TVzXlG9M;ZB|J zy#0W2(F3?t+_#Tttc)JQ%H-~O9-3l$1V>YGTaO`9DuG+fc%ScSXF#Q}_tQQjxBe8< zV|e217}MMcLwW)aNs<-mtkt73xJ}#NV~Y|Ds2twAzJulA_NG(;-#?lAPm3ES^b{VO z_2ae1U=dZqd&c@CcpMZ^6>4pqZ_C$t!&Kgft`VAKAiv`)o{=o$PVbM4pt z={ocrwhIm1nEu{~YT=!igXcFNte_Y0mh}8;)j|=~!SiOPnJ@e!qGckRI?I+zBFeXGs-(ahq8Eq;r>(O`Ea_-Yh?HY9G2fU(1dCj@~3Tl9- znsn)tIA1_N;WV%P3vXuW(J$EO;`vVB`{>edI4Je2ckRC>^anO*8_+p=xRCzBZXXkW z97+&VvljRfDoSk8zJm@mhch2{xp}xsKrLX`b??Hv;~3i#cKMU^bv3T}w}Pt$x{Lh! z%Si(sKaM7Ucr2sVu=1Syp59R^Y6G7QRNr}WT%R=IYi}HktP61cAJ*^qE8xg4Ez*Vy zkGzv*u9K1grUN^N9n(~j5SDy)ck-)|kPaNQ%Y6Oy0ZP(^r~0(bU8Ao}dhklK?d#JA z3rPgOxf8NEJV!ucc&TSxV$DDaN#I+Lo*(|XN=Q<8jgAx@q3htj8z^;E>c3#iaBO|!;!+s-8 z)1_n#cjy#)XGJSxGJ(eirw_R=B?c%EU^+2wPk)D~_zsB*QeOiJzG!C}$1 zHAf7nJ?v(GS`rqdOC8`@e_Iq3x9RX;WLhTW-+u&@T> ze|T3fr`*>iDzbs8aMywh7)RN{drLcvlm8>9zHqG4F6T9VpXvuMNISJ?<^u)U!P}Qi zFYrk+q5kkO%h~@pbi?(3_)nK`$Lm$bG!V|0taIq0Bd0;|#@B~Zmy?VL-shh6aM=5C<}?ZpyEZ=J+e9-O4T~0yZgXRq5siUQ zeJbwt=Yt82h37i#t1`|vp>goYSVw)+ZYpwvmmF?(XRm>r#={pf)?dhPV@ea?=0}Y3 zuI*LPL^$Yj_U-2@^~oJhO$oXav&w`f!C7N$*2Lm`c`}^Y;zW5jdo!8>_ZM}Q)!!uTIvrl}vM@sAOC!V9x5 zA5Xe(L^I$Yy3HI7OXTDQ7k4~8Dh=P8-f(MOlYG;40-6ceO+C0Hz8Kg4VTTYM2dR^k zeBp`P%HH3(t)N-(HrsjoEXqyD57rfKdbjVVG5NzCizX&+yktxP@DYzEk5uc;DG)An z*yEQHYD}}?T+5l!bptJE4jj<$#PyYD)D#3q4362qc#4FAIq#~uPO({!=EA3&bv3ss z)~677a{hr<){dq$55D@%G5*DNT?&P-OgJvev(ct7IL~{2aPmYQnh)hWh)HFAvIM~uA zXzD5}3t9=UvfX}rVt*C>XX-eYf7M&@s=bm{!xtmQIrMcgrZsT$korXx8x<4}f7|(d z_>KkUv=*KpATHjKB%yV1hYkUG&bW589{w@q+?!omD%t@5R@rYEyGceHVVl)1eGh6F z&?flWt5=Kk^0jC)yriafrh$P8ZGj7dj;WHZH z!%J>s{0|@h{kZ71g__dfd-WABW^6a6baAD{OTx~WP&T}2bVRpZT}?&{y+d*LvXxA$||ahx_|aw)!d* zQvp20M6*hBwTv#o$1k2twEiul%kZiO7qd^JEa(ax{3Kb`Z?PF&g`*ao(vzZ}T!YOY z20rZ^FQ@D9uzmxrI(TT(4S00?sdjWvLN{SakZF&CT~aE9#e?guDppD97QDXw!bK@B z<#Zc9aLMgUteF87!P5B7zGo&I(H;0rc(*UcrUrBuzB|;_V@9zB-Gi@nEo!fS*?@}S zV0ZQ4dml{cK3se~^xK6}LwW!&3aCCYGfP4bVQIl|`@uDa^a!?I8g+O5w$0z8olxG@!@up^h^R=NB8$6L{8x&pGdBDX9!LQ)Cr|_SL3xc&K`Pj(Dqt zDtP*pUHo%aOXw*)F1>o-%+nTB319TpjQD*-O;vDao0;<0t>jb<4}a_M+ggb6KRk4D zj!SoAV|oT3x-r3aVTchuhy7fFho+8GQZ1ZV(qQz*(2QQd`@~m%KDJa*9o+M0#%jxT zX7mys9)9%L1%H)jUKrNHgkHm6YJbe@VQEJ7aN@F><=GBY`Hk)5tR6omtKEkdu9NM<)CZ$iXpLK!Z zq8yC>;i2U#JOb~i=nHJxKRz<%iGaSs>!rt%#&}`;58J=e3z+j*LEqtjqMP^ZVJfB{ zuyVpFx%n1DYJk=KI%#O^mC{c*ymX1}<#+-8f?J)qK6YwHWBLtW-#d7A?hcIqVY`A2 zqJwvp^cVKg6wjy@$*EaOj6Eh?X?sqgN6q2gcdmEURT)qVxU+6|liBlC)Dk{qFWWM$ zT$ftGtrKfg%_fLQ1D+KZO@Fi{)EeIF64LN~f;qK;y}#XxJaor`G~rwdj$WFrM_O?5 zz7y%0S#r{b_Ye0yWS(b80yyoF=E2HPjQ`>Admq<+uQDSYc=MuLMfPciqzm7!PpL>5 zC?`GGq_X$zQ~w&02%aU~)FT_`cVaj%DfVaEnM#tt`#o)jX~|V2g{Piu+2hp_IqAb! z#!jBNsh^w-;Ip~;+3)41B!e%_l*LJ|>X00M?Q!qN2}daz!k%+Zi<|$!-~YgZn~qA~ z7-KSmedn|)p3T?);m&6|Pmgj@kqKS1$I!Q|6d=`&nL=5U98OHHg_sz?nVd+GT_YmPBlz=qd7);?OULv3LX%RAP$ z<|?TjeA~iKe$CgM+QXv~9Mn_WnotLLr+!1%z~2`5-4w4q<308LYc*NIJs;`K+5Ov) zI>9N;UQPKoUq+o_^MnVc{~W;efA~YO@~hPnIdz3yFIUHG*)OJU@U;)ys&Ay2P`Fqejcv-W9tS(vVwb0c=+YxG!yCx7j|BD>Y9;)tl?b*$Q-Yv-bxw=@7yKQ7|Ol4X(C)%dAe?7xe>X;K7(ol=e@)DACCTHvtPN@oF>CV9Y1EQ zZm^&!aJ91Q_`)0&O@%%3WHqsQ#`F(dTe;3Q`Iyb zPMVYV?8AHu@`U#v-PNWxLrF8>qZ40hIQyHB7aUz?zD-`ECU02#%z$o3G)-tGten0= zEY~zAANYWMx4CJDRpbjB(zTt7!}MtuJiJ}~-~jwBgdeGaL6b3&W__o5b zMwjNp(?3*gc(O-H;qd14$5VftGo=NvmFA-(b2Akb0k2w?5;y9FiXvgpYY#P6NR4PA z{LlPX&8_1MX%Q^Fv*xdTq>L8BW9QXBKHSNamcXxiZt3#ynu?;}5QiB9wxz2m8t&5i zs!r5UBZ`5yYQzY-URBUic-;Zp7ZFjWv<#k_67y2)q7f~Jt!Dl6s_K;)t$<&btj&~a zDJd5I^2Xys#smY3gJ&%^Z0>~LI99@SL(Q~HY>jCZ9I{{AHqcT|tKnL&djAO-X0!%= z_O?8+RlSPh;mjTXWWG%^qqVTTb#7L_KMGn0E28IUHLOz7df25ZWMJ$Q8Et?Mo$GYG ze65-`!m__VgIk6h(k56>e7V47rZH`Xg*`II*Pd3;7WnpA!`e0DRJ0Y&32o6S{nNaq%kCOc5kPw6~_N?{l?=*rl`$nH{9-are@U;bJ_!E{jOIhOqA1JcyyQfAz}F{ z+6Sk)EbHR?Mn(JKilW%K=xb(_3|p53W|ums=>Y8gxZC9m`4*G{hs@HcDfCg$L3pyD z-L9G13QC1l^Lms{!#VXK_+0mHM-9eVP#XLpquqm^A_b+xezUu!PSljsVL1N6nOR;7 zRFnbd+RT|^(8-woh4-|47I#djq$9AqY5v_qBNcQME{r@l>X1-D$KaMFNpE#-nbC2$ zXTbyOwACs)0jCtDO#3iFMJM4+>GKDCXpZqeJj8j#JIz3I%7lHFcWJ+8nHimi+x7@v z?TP-G1rOhm{-eZ3PG{hYNgm_Z;@Z?%SmSrui&}RxItQP2nR4nlu481wxm)BdPcD|x zdH6~3q~^cvO(_T7GQ0Y`d7*-GVKb*qC%s-7(gnD;LmPwCky5${hiN(P>wn9L@?b~9 z2T>AD;K{9-GmQ0TmL)#nSu)8 zeL9~`mwdqWf7ta+_8`|HBf1U8YMh(&z0{0~U{AgAGuuj3bO+Wr?fmA=R~6lbEn+v+ zW_g>^J=onLZQw&YGb)Dv%J&a0w#MK8!1eyo)6GAt=mA_buDE)`IRknK2btx(G&m)s zN9>{tm)^cnQVG1fW$W_Rg(@nAe|1XvRJz-O9>cCuxBRl(DtZEk9!%^VbJCp3;KaX7Zr!_^aS#h&y~ z(Hr>EfT6lC{G{|2-u0lj)21gz^bWp1Kl%2NpK^K+hxxVje2eQ;AK(<%0U?peCiD^B zFx-FQ){{o`37)@O-@^No34MnD)Q?{~$-{`gz^hK~b3NI|h`z!bcxwGWrRp8Lgb=hW+9fyr*K(jlP{s z=r>$4=VXfuaVq))-#GtHwBOZ${=$%BhikrLnF)Bb{vi-#Vr z|HJ)yY_U4APept~kMPFm!<(m@65q&k>+GnMNF#IN8+bgWL;W{LDv590x&Cgf`TGp~ z{Xd+1+;HIr8zu3LI>(ki8|FDfL41SGpcY9#f^aUzH|G3#;ne$(+<^FooD&O+BG<1m zCB6|SeC@0C!=9>%Z@}?*`J&3=Uo+wxZ-n#og>ltp#5dgdmu~;O`k_3$Z;pyMMz1Hc0>;Le<`pls_aW2C*#w>`i@xS;< zMJl*(Iumq+lZAT9?F0hB@I~7# z{|5~>*kQTVMS1$vsT{qLp_n-QWHs9u)V^WWi&{`|sn-a3Tn6niCw|0MCDjbAFgKzU z&?+{+-v}Lu2n6zB$s7}$ajhjLu+A%ojugQ3BQ|kN;gMcKOtf%}4Rpf5@mXI>_BU6t zGu;f|Ux=uMSC+H-Z*M7p&Xf!5Ta#Wz^~v|@R#HBxywMJnh+y4H8#pGN`=WxYFWlM% zx*)KxP`rMoQ^njS7Q~d))xx@GKi~Ks%ZIMWHdm&f8doJ_h3Ec!amcHM_~9QExjoB3 z8QB;8!`2OvGWNc@pPI#(S{Qj-W~JJ%5V|27snt^m}+hWA0k$ zjx4c%!!WnyGB%;NdB0uX%V4?tte|-f^Oy=UyX{$@8Yjw_>_xxy1K(=leB*SRpz;#v zfvj7a%i+zPWNe#K_qRWi%VCV`ypq=~cA$#vlF2%aZJ#SypJDmgvZ+LkvHPG_<%h)?UQs{~7@rwbgvSTZlzH-gkUU5}${p_oMh4sPE z3)!>W#)DCdD%kithE|@-%i*4B!k3&mYoIr>O-m1I9T-!=+$Rlkcw$iv=k{-njytjo z`XIxPFwUc#=0WOFTTNpv9F-akeTiWB#tx1Nk}h)dF7DBk2mKJ#JA2Jvy{McOOdIzt ztEvX7Q}#YzdN~pLbJ+xn#V5+BO!0szHB_cNxnnY@V_@ce*LF>jr7UaIpUHc}YGAav z-rIV4HfSIl)@|jpuhFG!sqp~!7YQ=hVQZ){D_jBtkiGh6Bzf;u$|?ef{CV+B2E$j4 zP%Y9$y84Plv;yFHtZUS=E8E#J5T%?BTFOYICpDK(k`CA0~K zzgr5ZKB3_jZafA3+9knobjaiS>(t*VVEG3QY+d=f2K2S-7M!)rg%QYP#yh|1KFMb* z5?)=|u%iklbo{*J{^0}|iL7f?r%m3m`7G@1%-E|MRUoYC`t0wBXc&bIX7o!xEy-i` z-o9_kva8|7>{Hrb^|N3!vSOY6$qD*-?9}F8ccgc#!Ampx{^`JI7=sKy;u#}zxpw+= zs-kg`8+Q(eu^bY}%ctZJQ)py!OuV@z8MJvO+Nj7TCi#}hF=5}va2Urk$6Fku6 z)~9%?eKL&anPO(Cl=2DsUgh#hWBRAS1dI>a-EY>xl~R_tb+yyWMm%41GjI2k#=}Hp zc^azUcP3=9&7B^6`C3s8-{+3h>vJduCQ(5+#&Leo_;_stwL9r(wa}%JeBfE^(J`}lgNDRU@FfP?oU&QiRaGY z&Ou53>Li%f%5w8Lrbw#u=JG3-eWyL7uo2t zZ97yW6IsRM%mZHAWzgSIsohu2RM6wg6d!DtNM#8d6=7uM4tAa}gJ*(8^Wr%c@RGX* zi25rh!c1gV-t8KU*Tk^oPeB*XXUU+U&ThzxdC4#f*|5@aEiHYcneNxK(?%R~VAI2r zXOu!9%;w7!X+}g*nUeEw$^ort?ZFV3gMn`M4Rdub?qLd<(!1uE5(u1CE0&FohPlW- zTD?`$HH>7pW<2|H;A$y!j=JiiGRh680NJUOt{VIHu(5L=3^=wtmhCrqGI@pE3q;89 zBdN~bL-i>JY%ZhZ3R%@In1_MDgjq)WcI;-xUezL6U8Yd!$O`ZdfyDEeDY1ZYRO8&DidK5&%`x_925Ah z@vyX&-8jp$qUkcOE#3oC;6I+pZ!G4R^ig>spi8XrD;bvYOr*&|DZOOkDy~e) zNl7#;M~D7@IsM~$gtC=SUM^NTQ^_7))QV1YO@|f820dNowkIWoMLd74A=*|54aYxC zo01$02CZdYEeWAAMc>xV;L4VS2f<2ooQfaY>zI8IGrJOJWO+J_1>Ag*GU%WW7$S?` z-?!4?XfV5TvHWyPmW&;`>>KHIH5yj&WlBl}!Bm!D)C>OJ;X{{bSj{u}EQ27fp1#)m zI2*Vx7S`}g*mnlUgtKpROuSYj5sZ+n79E_K)IEUhs8S0$ax4!d=||Lcj;6v|KA*xo zCVF%#AlSg?6NI<;QhI@M?-H)Q zUU`YIk!NBZZH~z+KXFX46t8in$PWK{Y4WDC5Az;nW|MmY>upgM58My|n~>GTM9t8A z?8T<}Zm!pyI-bq&Ef(4R7XX|2G8JxpxHCsSDysm{B{?uD9JXLUWA?3iW4d~?*aoxy z5A3j=Qyklc)Jj3j=M#0gWBNpJHxrcdpMXw-#}2sT&pqmaSzD8SP3;8W)sLR&nG} z3T)+>cz&`o#{y30am@8%3|R3@{&p3|MD5p00bP>jJ_%sWGtr<%CrU3Eu_=w1c=%o~ zu)#p5Gh^PbAMV87Uf!v);cE)0AGugA)C&MxN{nsjq|W6N?o{IDR(@409PD@|eh|5X z$`o5i@_o435CGeFCS1O58!=(gO70$7@MWA7?9uV#pr&=T?RK_Yti072@1-;D7i&JA z9u5wCK5^U(E}t}SAGhCy`ktY%ooDj-U#z)499z%TC;Vw5g&jN-J^x|F)hF-IU6V!U zZIi*Vm1S&hM82CJIUHg4;EbXOYtGvWC^xkV&|@c9&88LPN_ zKQ!aW${#KCfl!`FcT8DLKFN&FH4LpZS1Ag1@l0Tow2qi`=ez*2;@>+{A&h6@qCUpt z6Ar55)}Vabo*)QsWk+AECni|b`u$_v1$T(Rc<`K#JE{j8gLU}6LFbbq*(m)@8{qs2{9ud#YyD)WlIPB$_@J=(w6h|c7{j0d{P&h>MOn&~W8I>tNy)2l@RBSSf zhnQBjW2re;pG^a|1_hZfgCG`}_-+3J%MWIt_xot!nXXmrccz;1r-(fe$LEubZ?T|! z;=H%qc*+NU&xUxONfULp5)=H!?^kGqzXEe0foDRG2y2cVJi}dY1>+ZmLL$#ZkE?8n zN!OT$lNHWdxfhanCSILyM?P`Y$Aye+*@I|E#=uoIm7I$g?P1pG+^jt4nsH?H_+8$RitL5T#l>oSx4~j1$@Dk(E7`a^8}7ft zJ(h-S-hFGMrsa;19%bxrd9?&)9#-n#^J65WBg2naJ=%$DU(-nb9_O2BE@bdbZheJg zqH7IeYNs^ma};FqOfX=oGv$+i9LQa(6h)#K$ZBPG4PA&yY98|U2M;&y1}V=Z>>bBM zzmIZjUUdC)Fk~aM(iQD2aB~6qt>sIdd{g0Izpf>TfBhk+HQ#%&E0rnI=C6&?WxZ1% zmuG@asXSYzT*lQK@Gc4Rkm)V?yngykSJ-$z@O_?R4zpA*sM3`NLO!2Ql(%pvr58?X zh-Tzc9~A}#Xmws{Y@7a{CzMTiyX4iOZ2XQVJ)0Dn1BJ-^V~)RU80`YDD{9=kohk&? zf=*vLl>|c(GQIKLDwdRcz;{R8-TO{guspT6{wnp(P>c*e3TEp~^~sB>s;NG?Q&T3C z5WzNNUgTL&JhyfgrYs6d5iIh5pY`0q4{Ac5L`?HZgz9x!l50C$p^VFh_gA43DpRm> zHGj`1dK3cXJQG>P^6Po*uUM{LH7^NN@J!<163F=$x8v5ebWLh5RPszdrZI?^`0DvA zhE_3XXg!ufp7?bc8}!3~Q5ID}U7>QlMSz;I}2X)pZz zBL)`T++ORs&<_st`J_hpeI0|s!pRwA#e>a!;Ycg%*~Bq=^@Hl+Npye{u!g(T6JAbu5I7d_KjfDDK`w zY&wVgekGnLD}+nP8bxoHCiaX4-JrwE_lb+yztRg&_iN_DWj>$4=LVNgU~q+-2g%#b z(a?zO^zDw*7mSYuty{{^N8q`1-Kojw%M~}c!sio}FXHyOfUV-zi`@62FEkiRf z*r8ZhcEiYe?!j#ExErzan&Vcu%I8!3m2vq*burw2mlrGT$#13>!cCq@4jS@oTP!!n3QMJY zxP`3qw!p^Kd*YzGw!`*b#!hU^(UWyO@!8|;)_jR-@ia%mfs43vO&De)gFEQ3zdY5Z zep)<)9$2EPTH(wd9VlL*da4}m^7#}mmT~#yM>M(fUeUW>1>9?8Zhkzwkio4_#f1(I zaGz&l*Bp*Xw_J~;{)r&97#?82QF3bU*^BX@cPG^4oHaOt!2I^f~24whEfdW}UbN|D>>k^>H3^#lIr(y8Gc;8;9SEcX>8GSBza%)fg zO2M76im@|g@R&z}uq=)VN8F2|wkV3z+~ElY`no?mr=JKNN+u+nRx4MKA&63UXC@aD27)&lV-Riabv*;ha+hpqQ2pC#W#FD#gxN*zMjw0D4#-qe-^yO zK++3n8sC%z8LwiJAL>NIG_4&c_rCChcdhw~@H+tprA|iN+)6&!#l!nnCjZAV`Qzt1 z7`j9Q{*}WAp2?dACsRIQLJ4>FNc=-$@ENy2&|Ge-9a@nLUt=|1M_&qI(+!WFuf0?V zACb+;w%fQpJ{jgV^}p%d*@`8sH{B0Sh46_lQ|f!3D^uFZjk~8+*xKYl3(tf#?YaFb z`7N=hdc~Tn^Wihk6e~t?Ola~ehT18YPbz>fJQKWWmrCgs1v-VqgjR*w@RethxEUN1 z``htjwqa-neB+t4I+9}&hYJN!-wZrWD%qOvEN|OfuzZ2E+W~+9*Hhz%!{qJO1pjOX9{;qU#+E9eE}{ z=fN?d(`1e*QgI!0YOQZ*0LMhNnR!&EaKyVk(3xj~xZNC+2JhzXjig~=@t}mP#ChG$0Q@`vbnZA(oKbKd_JM2569%kJK7La_)f`&?#NzbSI+$5l?~c@KH3@4 zIZPw23&hWk1rk>< z@BP>y7}T0C#-o_>Nqd%YXOHl7eh3Ukwrg?I?`|2zFnUEh!70yFrhDD{#E?OrFoe&i zaJW`N`Q**_6RAFdraSVyB!7hhCkGkcSQG3G+Q`ne?-?@lM=VRZbfbs{h>yW^pu#_1r+{%_wMrJ1l;x$Ml$hZ2~83_pz< zLL;bsqMxPQcM`#y0l6>{nRENw&1;KNm`uB+z=6piFsf2tm=z9__(-%X zx=Oo5n8KGSk`8g8@fW|pQ$b}*9s4K3RAjf`{ML;w_kq2QbHY^dT6&^BIPu1j448)O zvhlM|r()7!-GmKZxB7%Lj}(E=ai?gQj%+|e<uO)#n^IF8~j}FO@lUh4q`^{X?LpCwwYi$R8DbxjfyKfIkXR>a3hioVBh8f68 z!)k5?PjG^}ADq$xb);~1@`9Q({bOJzGN&WDM+{bY!OG%c8z`e;aeL!@R%@`j+k|1&Fubnxqq=G;%t2=D znAg5EB@8NhoV}5AtccB=W&7>4XgAD7)_0GRaoGJKO@5i*M%KlyoiH@pj455K-M?*n7W~&oQz5gAf+fiMUcYWIar|CZ zcj#|HB>1tf1J2c4SrP>L$Sh=P8FzYnF#E=nDg!HuzhT+P0+d6KEv#M*@Xw&E$GQqOv^Zz))Xnj*3|acY0x~CD(&_n*`mDepn21Kd<<+u}3tlNA{s$xH?Y#p2=gn3 zwk-G{fepw;wKIMD%03=CoQ`v{^bcpYpPMZl5=vnsGA)ms?Gp_=S^D3a2{|q`tWnKT z-!U)>Op$fB?%Lnct(19a9%+!MR>J+9*J+>XonRBPamOMOU)lsi*+seIi_jeSYkB_p zBK1tzj7+Hc%cNjSG5dUKz|C{#YCtb=?j;YaG}wad;S`;iuEYG;g(mmYi^60~(|3v! zyO;oCWM)UQeq{b!4UXV1~@&X`-T1s{pR7y8Py)V;WQ3)~I~` z)ECT=g>EledQdxrIo=9dwU;C|* zfhDqI6FZHGG>>Le+n*e5bhR9uhAnWIlp70Mk+oROFzHrP!20K=$^w&WV3Nb!$ekIP zV1=yTvSHt%X2i3wt%-XpAB3@%Zx1&cn!18Dva=ecHO?CnnN`&NC31loOno8k8*bqZ zHpomL_PC?5GM;^o2^eFgQUS^(T@L%TivU|>am%$!O-5C)Po|6dZn|Cr{l?zW(3zhH zcF20{^-=%3H5sNCjyCG>Is|lP&ka-g;S1Z44IKQ#aOSIIxRIXI_~?ckSbF$0cm3%D z_Q<3IyKP@Ls*pW7I`@Xz^ctA1`tgp-;v8^5_A{v_bLTY|$a-1*BCRk20&SKrO_l9} z?Z}Kw3`X6GN`S~pk4Z`DKJ3y9^8qjJ;yYEyem%@qp7$W0IejWQ9-}3LuD4vX_Jo9k zBeL(|^R3Ih6Tu+woh)N-3A1?TmHhRy6r7MH>88upgp{(B*8_A91ysY`09%KHlj6Y{ z*{ZEKPxK#_#%^@lR@;Qn9_}x^+etn%0bG#j`Szc!@w$rb@l>DF_i8O1TQF6n&bt^~ zk!9O=INEZ-2YjT~V?%EwfL>R#Q{Swjzzx}{b=r69jU;SW>70joVg?PaGmW$ zhM(kL$`U$TCzUFf(lu3d=36GXBlF)qWTQogBB>qqmc2kisFo6o0kX-uHD2)7hhQd=B1{@n#W$Wqjt7tFZr&dkqw-qkBeWJcR< zhTTmI17BoST8>dh8}>k~s^Rjvvu)V|*Rk8{oPEI$*|@!5l2r~4V-_Ed6?BfsUyMwa0j;PtzWxw-+00Urt~x4Ox977gU1DlzE%-o#G%AnOlD8!BTt%dw#37#i9YVFn;~u z6eHX#yO1e%MOC^jn8rS88Tl$1mooc{5z9Uwl0X=h*|5>)oqh!5sqvA#42UauIU!S(%T;t78XcFuh=>%I6ajh(Irm~@cZ_~p(2-^um{;H`-LHi!`HH5MFD3Qx)#FPBL-dP zsD?u%GSl6@rb}HRc3{BvoOR9+jV!&?Xym5};Y{svC(%#4P0;83jWHpQ zy&(n}e#CXnfwaEF1`D|FR|=n%z7UJd#56Q4p?xA7I_%4>n`8B1?ZL%whs<(YixkM~J~!;O{w};`Tv?`$`I3;`D)l@S z6q^XD>QU}*&qXlX3E#s8XqQ1UvInZiE=EKKF!jTmN4%L^0mD6VBD%bcfD~jqdb~Y7 zXKp0u`Iem!49Q}v-8&R%6z4-KvT&n5KepeEf&7SdkFq*s!mr{N>e+LgAPw0vTj2xa zK5=j;C~U=1Cp$23+MGB2vkcOay$SL^R{z!$)*G0LhfT-^>)EeZxL{d;>&Q6PRJ&!6Ku-o1_y1}};BT~9$c!~YN_~wh z*_gVj3jq&nA%EzT>rp2QL5l1ET)6dLVit2<@!$KLLK%!nZ??FH&*8F>o!_QD^QEbT z-I}ndm;aq&_z~x4`|_qQ_F z&In^?yCjC$Oelu}WDBEi1>QRu#lqjKHs1-~&CpLM4aB1SogCp_B4 z^nZQ0H)=u;=tb*gbVlm?O1ST`B2^_nC`C3zufnh+zEgVnLwo0=_)h8SknzJ7 zeocZhWVe5GGjdIkF-7msiC2!uAgza3wNB3)%8|*v->$1Kn!-*Ubbi)naXzGl<}G`V z&#WqtscAnQbYM$0Gk&h!Kj=^`blI$P;mxCBs6>Vz>E+XD)Rx93eD@Wtp+|NK$dFw+ zbkfh@eI=ZChd-wtIb5gf4yWs#bd{*Nm{aMBi)ILthdtCw9 z18r9SkvhUbWOaJQmrfqZVP~(TZHwPt4Q7izd^x^94Gtk2b**W7$GURn)6Tv0VfPy7 z+DENj;QAOijO=h-e$u$yL~zkI-uO`w3R zMsvGV%4Bd9nfYXwhLzPN@bBuC5q4L+*gUxW&pSy1$B^|H@z=CgJB4}0uG#eVf(#sg z>s16#O9Y0j$t-St_JeX}D(tw(^+GMw+uXjHXHpDuWG4^wDv+y}vi3J+rW=AP;l`yP z_gy{B;W#ocWAmmH39)RkYu^Q(Mn|zupVqzq?~*5+K!zW&`5A6~N?Po=^%=Gvf7d>V z%&w}!Utc$pCCoY!q*H1F9X>@At(5u0DP$XCPjxmo_lB(cJw9?_4y>P-a4!6pJDf%~ zVZe&IZ4TDZuy3gDsFFOWweXx|X@ksYm3Y0BMH#!O<4NzdEV!i@z_YP{mI;S91J zV{fg>xaSOO?mPMRwhn-LHy?JaeFU6EmN&TfkmP=QSVo7(V@ifgn5;t5EyvUY&LP_# zUtC}A8p0Zm>}n3Pif8S^uh_OY1i*P@V@0EXPWV#{&-=D};`A|r$vl4#S!M497m(Gg zfB8>;OA%AOo4vNj=qlJb`pV{SqrIR3*;(@+uk>6&?*qD>8rl+-4VRHg zuYIX#j?{yJS(El0d7cWNiUt>*?d=PV$htp$H{hLWC3C)Hw#Hss3sEZ9G+z0Zz!hYM z^U}3SK1b zo^z6)llw)3+FxnF$_!7qY&@*uL!&p`Ko)qeUdwu^7n^PVG)#9;G|RR9`^{@k0Ng}Y zy3qK~y{1am4=%hg^R5EPvNb0%^#kD+GFwsAiW^C54r3I^01fIks?FKUFt2;@;TpT^AIymzkDI-FimDU1X+Pv$Xx= z3Yfh|Q|94AGT3uaSabA(2i!w8zxc+Y${lgw*JDuDp^^;H8g%KAQjr_nM`mA}fBWRm zd2F=vq%*%4lrya#f?FGQ?tur$%5_KNYpkha=7Ga>=btEr>HP;^Sf8^N9wIATw(RnM z9c9eIbCuD4Cp-t?!pZjuC7?jo(%IH*k4ZV(bh6GunpO+Z_rJgWwXPT*A)6YKeDYya z1)SGe+WXjVXBN3e`}@8x0q_`^W_Eko_zT&v#wd2$&B1Z(`-t;D>q|o52{L18%u%I) zD!5bXv2o6yP&VYeqe|UCUwDd4S$BI(S!yzKA3e%q{*emsjeYudL3k8ALl*N(1WisM zEamPwVXQ2UrB0tcdcgsIc#iD9T{UJZ1-b0ZwwDL~jID;h|K8TC=%vF8WXr!yDB3mB zl)chf7;1O40M41b-+3ll3NMifH8kad4$@=KiM z2TkVBv|8}KWx3&G^YwWBdyP!Lf0q{y4=q`0DeG-FsF($6*gCu#vR!hoXSo=OIfhpCz18A`Fu(GCKTQwa}Bx_&~3Pk z70pell|7Kbxnx1!)_(r*9@((Ds}2tejbyP+EiMc3cWvXor^bpddB6u`k5@QOn<8Go zTn3rA9d}D+Q8)LFbl9{DnvtzoIV*0aNS_s6zy0X}zW)+-eayC(1Eb+1vgp#Tc54!o z*vo$sk7X6^pwgqeR!Nixd_p$s(DrXzW+%ZVqXHerSLH0l&3I1j*;Hsjw*J#Elbq^A z@YK7xcyq6EX5QIMdvxDS_>62uYU&RPBNUJTieGOJam_R1in(XHMl zYCEfap1iQ$D*%4-WeOVlR8U#XuY}dKHzf@xBj6XZy!P{_DB3S(r51WEed-Ef)AfN? zYPY5E8`&xI=ju^vqdun!{Di}l}dj*seVy z+Dwl{hLsdHzRram?mrf;UFrv&ke$CUr()mx2)yp?n!aTXzFTdQeKX*xJ9I|&X!I1< zpU#0W=KZ2}v(nNac*PHsfN_DKglw^K!H;f}li8prR@=ttpQT(}D|n;AY0 zFYs^Kj-NLjT>#?#~eJyBATl3(075@DnvUvxC zzpNM>%g((LKB`No1j#dTC-=%Q=!Wd}U7eL9&gX&f&#Y5Qf*`g}QCh819}eA-ZI$Hw zHL$IMtMNZ?e+vj^@tLbCx@3BR3NqzKl9wxL%GpSv;PoMc3NUo?9e8}|3h051J`RJp zd6S%L;nqv@mX-0K%Clzgb(XZ2gnj>(krgxqM}Qi#_Qe_VR5~QH7oGO|NW?Ob4pfAs z-wTJH$ab%t=y}WDnq58GskiFx91xb5y$in(3cZjy><#faJU<4+S55NtYf|w3*yiT% zRXd?Kvg6Yydrcec4QEQjdX;w1fhU%p?|xngfIi5?<`&&MP8|l%Qg!veyJo_=_d_Pn z`W6g*ksTWJVBSt)HS3a__O~UZ7N)CZ+D_YF1pSZ=Xi@jLY!<@Uz-z{_d*fKanvo0d zO$>ql$hI}DF*l4!XTJu@CLBFd1?MiMSCwet-~S<7(do-Gm+ncRTX*kK$~#ZC{(Fdv z|KLi{K(-+0<%L7BRV-9x*`dH#oWI>u5=K2Ng8|6W1`aAsT!GIMTb_12aLpBVF5J6% z&6{e_MAl`{@h87DOIX0s$^}vKO1SuQRm!IcHZTxb)IhgR65Tk~{Po?JrxU8+=sJ7% z(7I?Cglyvbaal<^rQjE{cDU5slSvoWl?*r?2!oN$QS`t6D>jv_e54m1v3Lhe%MgzH z+w25Gkl`oH_z(9^ul&1_9nIfB?Fo(`M7DFR@~sbtJi#hmIam8`4lLYyJi_O?H)!$s zESZ=nX~{N!cq#fg^V!T8-(^KEsvzdZwC7&2Mi6jiZd zHS2cBJioVpEy(9@57LsAz;I+IvSw)>De-_t!z0-i4Jn|uyZ*q#{ySj=GSSpw+v`Vf zfVt02Cyh`kVrhMH&5T`hU?j4ockNT0RV!HUmoG2QpI8g8oxeU%%glmN$RbS!cibN( z1-sEbUiSF1hMgbY`}^dua2Snjm`ccLkN(+U_{MqKii*{+QQG@=al058gDiMR?96WM zwzAuWw~dpJm9Xpx%M{x!VK5e1vQE8K$L!q@r8M*K$s8Yu*!?w8)6y5TkzG`ieKH+W z&7S|vK5m*{3jd%Js{2|5fOly2IuLQz)WcZOE^yS}2 zhfMA~>+&Yhk?8hh?zd0%vN`TB5n02a3w?i%O#;21w;m|>wPu@!kG%Id zrV=J0>pE`F%$A$G*c{C%JFBMdW#=Dnto-kkH%vx0SHI~|!`EWwVR5T>hkO~VQ~PP# zW1u7GAd@}W?B3zKHM2UYIlNXW57er+{z=pdhAGJKBPs3WP4n%jY{LEaEyy?afvLz= zX{vvnm*EdT>xNz)g5UQ)J{@&+yF3V{Aq)N%`fqti6&$lz+f^)tKt4hKDC z(`WR1(-Pcse9@|2gyQiJdSL zS?X?=e#hp{15t)eJD+p85TX4+O{Kpt%tD5rTjxe`@4HPpJv@N=8ErJY3T7kga@ONb zkCI*Nb&N-m_m2{=I~w>|_}ByHAY1Wp*@c~F%h{R!YL}w6)I!y^S=a6wWW!u!KQoS( zd0&&U$cx=(vgS(IJ4G}o-U4sD;7{W>fxqodZjdMZ8;)p_3tFe>Rj~@3jp7#(mM01BSbcKp$Dfh-$-w z^W!1H%=V+QRuJqj@V~3|QwB?sN%QV@^tw>Y^in!@yWRu;?z2msYK@CE{D;gurJv`4 zH#=DFbw$oBw<5N1_bhn@zW2Kf8QwGW&;A-l_Y5T`f0xibgV|SOPgss@)ob~1{m~Xs zcjke~lJioKYt-voEbxOB$a<7KIdea+is=M2<-RB`2Wdrgd*%O}zyR6F_enaZk5{pe zm%Fkzaiwr3C^n%_lP#=7_Ac-7@btx%>~^;yU+nNXO8XUi&2%nif*~@$n>%HC`MY4? z@cTK!r}5A-dV|jXFA`XVOsbLdB1X5GnOm6;`unC93I-2!u(U0M)yO{gj$2s~UCnHJ zj2xGVzcCDxZ=9Kqe?zwh8GiI`dE{~X@5vS~hH>Fzn_XapOt0vl-Hqrfw$)SJ|Fl&t zJpN^sJ?tkw=S3!BN)x}oFJgIDrbady${+8y3}^SQY-Q#>ecn2CEMY&JX8Njahy+_?dMh%Ph*&K6+7`*){aOtjoMpA04^)92 zvWLg#ry2{Bnfb3pwS|-2VGj$iJGb8nwjqnV7MRu}-GUX$asql!FJhscvihF3i~xIN z)Gz;B?%E+ZZp59j2Sgr0;J~wJ!y@kevB0VKx%YyeZdw}*+mZb)y&u10wv5T228>SZ zDTC(kAyYz_C+t9WwdD2YaVAx4d8O!u;$kJlcD>^4+tmpik^Q*vB1@aaKz&y3Pw6s0 zm>#qH{Dyng;DpR+xZT1gd>5+Z_PRBW7GkJ`f~1b4oxvH|SMdaGNBrGY-EFDgQ(+)X z4H((i_GcBiAdA+_IB@iRF0?y*;ohnSKNdJM5o+*$!WG%8VK#QDYhod_R`~62q#c}| zJ^HrY@oI2G_QqY@+dMS}es@k%E;(cmXK(xJ#gtdWPGqKmzbiW}E@mb-JU93XWnfg+ ztE&4bJ8(yK-Db=Kr^YpG%aMa8_uMUJb97eywJM7M4`fp#e}8^+GzP|6_lMFGYg(YKZO!zzB(}I>HSLZvYzUcSnCd6$hz;_oS_(x&uKS!B>s)|0&AvMog$%deFuvZ(5SlwZ?!!0M)( zMc)*T;ET-8!OAB0ND8~NsigQ#dpFiG%227Ovjg~1zNP!`EPEaev$fZX@1^1Usrw8w zXaKe9s`g2sC!m@q%RV8fNqi&)9#fA@k0hl2zeeuBHZaKB+rH4t-Wo#~05yC4AB z#O_ZD_nnLZ5J&CkFOxv}QI+dai>e_InMvHiRnZrAu$EB+R!^K=%>JI*S8_@_3WAXJ zv>p)7ro}>-OIBE(3#(TB=0MN1Pm0K*!nPAEUrLiA5U#bKDL+JRyELDB}5iBdwJG1_ft zx1;FC(JpA|K_dNuLOqIJ1n-LKhN1`ORDKVXGKw}IJ&dIvQs{vLrAbFCLD3g3y4mlJ zKKgNk4zSs1>7kPf`sjfVZBRO#=>VfL=?e!f7CI>C##R-5^wK!>gI*M-m%Y_c^D#aS z6@+0Ov^~*UqMd>=#;^(6UT80&=ml!PIHm86;Xu@X7+#Ln9MuOEiz-8vpw=Mki`D`~ zKRWF}(LD6SIOVHpO+$ZZ(jP@%#_54=7K$DUs-utU6QQVXdNG>DjK+h0yqtoT9+J^q z(T{!9uB#ZXKxv|=-`41(gNDXpAo@0-Hlpak6t!UxhUpJ$=3tm!{--}M8jPYg(2Wz# zAIDu?Q(dPkxt4RKnNly($~`csTH0JR0fqtVj1P#(%p<%~hK#RD;% zjv9+{Ls6S|plBUvw}xk8nBv67p&T(xbJ8{+rZ3T#2d%M*Xla~G z&{8|8FOyJ|m-0|rN;etfZDI1$-0Pr^@=|*#FO@L`ML#qQMH`Nm9$HVu@Ff(jD@sRg zordAId7wT}U#6p_a9iJ~K3$A^wsIPStth=#U)z|_7|lSDrE;iTt{k*JD2lhSSs31n zqIBe=vS*{{#eY@wtweQ0&A~YB6WTWkD0|f0)^I3VVjEF(_u_!EMR}pzQ6dzzof{*x zG=B5QkMnMVJI!s;?_8= zO)8K4OHgg~`CypFLLWu-r=xB2EyXbPyKM}5V)(ySUpowUM$y752p_XG@ z1uf<6*Xmo*>Z3H2meLuZPp>uH9xbtz=u<;W`6;f9GHmrxocxq`75Zpj(K&e&E$z?M zC~DK+RzJ0I4Tg!gpePNcH$oeTqP|m~X>Qh{r9X6`G?aD$`qrUMLS>+$QKl$k)CtrC z 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 C#+c~< diff --git a/test/user/testdata/shark_41_ascii_gmshApp.msh b/test/user/testdata/shark_41_ascii_gmshApp.msh deleted file mode 100644 index ab7e2de6..00000000 --- a/test/user/testdata/shark_41_ascii_gmshApp.msh +++ /dev/null @@ -1,2973 +0,0 @@ -$MeshFormat -4.1 0 8 -$EndMeshFormat -$Entities -0 0 0 1 -0 -0.07334360000000001 -0.08523339999999999 -0.0005566629999999989 0.07028570000000001 0.0819076 0.0752128 0 0 -$EndEntities -$Nodes -1 652 1 652 -3 0 0 652 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 --0.07334359999999999 0.08167480000000001 0.056402 --0.07291259999999999 0.0537921 0.00170478 --0.072634 0.0799069 0.0578949 --0.0715817 0.0520377 0.00292576 --0.0701949 0.08025690000000001 0.0450431 --0.06876980000000001 0.060971 0.00326551 --0.06778000000000001 0.060358 0.00473741 --0.06727959999999999 0.08092489999999999 0.0425553 --0.0658074 0.0806443 0.0552302 --0.064933 0.0788176 0.0453762 --0.0636555 0.0610198 0.00141989 --0.0636111 0.0566004 -0.000556663 --0.0636791 0.0819076 0.0524468 --0.0623445 0.0580268 0.00335683 --0.0624856 0.06710579999999999 0.00581638 --0.0601398 0.0781111 0.0317589 --0.0599443 0.0685632 0.009924489999999999 --0.0592787 0.0571239 0.00105116 --0.0587906 0.07199990000000001 0.0117948 --0.0575605 0.0730663 0.016213 --0.057624 0.0811803 0.0403639 --0.0572339 0.0769387 0.0223219 --0.0559974 0.0749629 0.0235691 --0.0542321 0.0763209 0.0344665 --0.0540672 0.0649483 0.008218130000000001 --0.0541685 0.06611350000000001 0.00437935 --0.0532966 0.0805356 0.0466758 --0.0517252 0.07611850000000001 0.0183218 --0.0505257 0.06887699999999999 0.0152572 --0.0503803 0.07726379999999999 0.0406423 --0.0472855 0.0641041 0.00381053 --0.0469016 0.0648796 0.00821733 --0.0474599 0.07272679999999999 0.0265623 --0.0464733 0.070912 0.0103373 --0.0444756 0.07556740000000001 0.0221683 --0.0440208 0.07743129999999999 0.0371107 --0.0434135 0.0685101 0.0213943 --0.0425401 0.0668787 0.0159114 --0.0405353 0.07301630000000001 0.0309862 --0.0386417 0.073548 0.0160682 --0.037401 0.0664899 0.0122191 --0.0358693 0.06894450000000001 0.0243885 --0.0351058 0.06877709999999999 0.0124837 --0.0333614 0.07116500000000001 0.0238503 --0.0325564 0.0696271 0.024504 --0.032455 0.0625178 0.0200737 --0.0305469 0.0729973 0.0173921 --0.0276941 0.06523859999999999 0.0128238 --0.0272717 0.0628782 0.0141328 --0.0263428 0.00735496 0.00505748 --0.0256055 0.00658056 0.00327552 --0.0252856 0.0610141 0.0227762 --0.0250237 -0.00678856 0.00359213 --0.0242889 -0.00589458 0.00589675 --0.0216872 0.0639735 0.0255561 --0.0215721 -0.0119744 0.00619585 --0.0195136 0.0542304 0.0216195 --0.0168343 0.06495339999999999 0.0236547 --0.0161373 -0.00420129 0.00881529 --0.0148726 0.0585475 0.0106707 --0.0140647 0.0517836 0.0159197 --0.0142986 0.0543801 0.0051496 --0.0139611 -0.0178642 0.00651265 --0.0139803 0.0554055 0.0115694 --0.0124373 0.0606817 0.0122622 --0.0127423 0.0580719 0.0285553 --0.0127412 -0.07042320000000001 0.0234664 --0.0126173 -0.0801905 0.022154 --0.0125269 0.0592002 0.0346418 --0.0122498 -0.080596 0.0191154 --0.0121442 -0.0691943 0.0191352 --0.0123618 0.0658492 0.0197519 --0.0121018 -0.063334 0.0245151 --0.0118539 0.0462485 0.0243954 --0.0111067 0.0637388 0.0161162 --0.0110042 -0.0624802 0.0276395 --0.0109072 0.046219 0.0183571 --0.0107037 -0.000325242 0.00950432 --0.010183 -0.0121386 0.00674337 --0.009774420000000001 -0.0638147 0.0162637 --0.0097669 -0.06993340000000001 0.0156591 --0.00942656 -0.0836042 0.0182705 --0.009320999999999999 -0.0852334 0.0216727 --0.00803502 0.0401179 0.0263407 --0.00857808 -0.0579335 0.0163943 --0.007931580000000001 -0.0190616 0.0121625 --0.00782675 0.0573514 0.028038 --0.00773028 -0.0620746 0.0302044 --0.00764665 0.0537773 0.00961295 --0.00721562 -0.0507362 0.0224357 --0.00717408 -0.0528249 0.0179333 --0.00651588 -0.00739691 0.013024 --0.00691116 -0.00014073 0.00823716 --0.00661131 0.044183 0.0123 --0.00658663 0.0535365 0.0326225 --0.00630954 -0.08506569999999999 0.0194796 --0.00616497 -0.0797841 0.0261073 --0.00582999 -0.0494502 0.0287705 --0.00563359 0.0476479 0.00934546 --0.00506609 -0.0425596 0.0250833 --0.00453974 -0.0405694 0.0173853 --0.00447266 0.0319291 0.0205877 --0.00434886 0.0267225 0.00648417 --0.00418386 0.0253438 0.008421959999999999 --0.0041733 -0.0606038 0.0122716 --0.00385183 0.0479538 0.00869149 --0.00333705 0.051389 0.031593 --0.00333565 -0.06938809999999999 0.0119551 --0.00333748 -0.0650683 0.0110291 --0.00292457 0.0475597 0.0319288 --0.00280471 -0.0353375 0.0238411 --0.00273019 -0.0493159 0.0135756 --0.00255346 -0.0452657 0.0126112 --0.00249178 -0.0598565 0.010934 --0.00247351 -0.0533955 0.0149632 --0.00280465 0.0288144 0.0300227 --0.00225175 -0.030519 0.0236922 --0.00205777 -0.0595101 0.00715068 --0.0018581 -0.0627033 0.0116048 --0.00150112 -0.0384203 0.0313885 --0.00143547 -0.0337232 0.0176227 --0.00136747 -0.062725 0.0150152 --0.000884775 -0.0587825 0.0143119 --0.000624659 -0.0247814 0.0257906 --0.000489974 0.0225414 0.0188523 --6.05566e-05 0.0171338 0.0234086 -0.00150381 0.0360475 0.00675461 -0.000282178 -0.0241462 0.0174969 -0.000347869 -0.06752370000000001 0.0324883 -0.000429839 -0.0422219 0.0349169 -0.00028168 -0.0273698 0.0312235 -0.000952705 -0.0267391 0.0143612 -0.00105244 0.0186951 0.00689988 -0.0011109 -0.0779453 0.014663 -0.00137887 0.00842564 0.0258445 -0.00107238 -0.0462225 0.00980545 -0.00158113 -0.0561697 0.005809 -0.00165921 -0.0142314 0.0114909 -0.00169065 -0.00330978 0.027848 -0.0017282 0.0264299 0.00972258 -0.00196109 -0.062067 0.0125082 -0.00198494 -0.0249792 0.0122768 -0.00206797 -0.0322322 0.0125632 -0.00219287 -0.00991015 0.0199027 -0.00223228 -0.065619 0.00972103 -0.00226787 -0.06664 0.0139131 -0.00233081 0.009707510000000001 0.0349608 -0.0023033 -0.0550711 0.0357611 -0.00284591 -0.06958739999999999 0.0109337 -0.00313658 0.0123831 0.0152878 -0.00325266 -0.000639164 0.0164744 -0.00354678 -0.0651674 0.00553443 -0.00434877 0.0392681 0.00656793 -0.0034004 -0.0624097 0.0143354 -0.00410027 0.052311 0.0146156 -0.00425687 -0.0110681 0.0377954 -0.0043501 -0.0020508 0.015115 -0.00444422 -0.0785667 0.0168482 -0.00471578 -0.008727459999999999 0.0133588 -0.00486541 0.0192794 0.0102326 -0.00475235 0.0259901 0.00777948 -0.00497525 -0.0797755 0.0244877 -0.0052286 0.0545416 0.0234287 -0.00513856 -0.0361953 0.00904286 -0.00543656 -0.016404 0.0117933 -0.00521097 0.0361763 0.0357574 -0.00563068 0.0458779 0.0101474 -0.00602624 -0.0598053 0.00448538 -0.00669265 -0.0730234 0.0300997 -0.00671975 -0.0647944 0.0149968 -0.00743572 0.0219428 0.00498754 -0.00806977 -0.06766220000000001 0.0106835 -0.008580020000000001 0.0185363 0.00804532 -0.00900922 -0.0527441 0.0382868 -0.00967438 -0.0310472 0.0412759 -0.009690270000000001 -0.0470756 0.00574739 -0.009825469999999999 -0.0777201 0.0238208 -0.010337 -0.0646559 0.00738197 -0.0103691 -0.0715108 0.0301524 -0.0108524 -0.06519229999999999 0.0107074 -0.0112352 0.0223598 0.00496048 -0.0115762 0.0360388 0.034027 -0.011811 0.0150563 0.0411225 -0.0119389 -0.07108730000000001 0.0142927 -0.011481 0.000850754 0.00890493 -0.0122581 0.0177891 0.00726338 -0.0126044 0.0285097 0.0071727 -0.0126077 -0.0410848 0.00487059 -0.01325 0.0245576 0.00385279 -0.0133342 -0.0301914 0.00695184 -0.0134526 -0.00467313 0.044297 -0.0140263 0.0415073 0.0128325 -0.0139319 -0.0627506 0.0126489 -0.0144402 0.0213321 0.0408733 -0.0145153 -0.0120242 0.00709154 -0.0145254 0.0314471 0.00762861 -0.0143606 -0.0539791 0.00638859 -0.0153705 -0.0588177 0.00913193 -0.0158483 0.0424843 0.0267153 -0.0161677 0.0082135 0.0752128 -0.0160709 -0.0693691 0.0267104 -0.0163112 0.021127 0.00658374 -0.0163956 0.0418119 0.0180916 -0.0166653 0.00513625 0.0449469 -0.0171438 -0.009394380000000001 0.0462661 -0.0174416 -0.0497054 0.0373642 -0.0174198 -0.06569369999999999 0.0159871 -0.0177387 0.0346114 0.0053358 -0.0178439 0.0247259 0.00729322 -0.018247 0.0346901 0.00258831 -0.0182074 -0.0318958 0.0424624 -0.0183988 -0.00142899 0.0496692 -0.0188182 -0.018825 0.0447569 -0.0188285 0.0147456 0.0461032 -0.0188626 0.015416 0.041072 -0.0190811 -0.00419709 0.06868580000000001 -0.0195945 0.0084326 0.064095 -0.0197498 -0.00217441 0.0583864 -0.0198208 0.00539755 0.0587622 -0.0200137 0.0324539 0.00354185 -0.020151 -0.0145671 0.0500049 -0.0203386 -0.00326709 0.07024469999999999 -0.0209148 0.00523036 0.0681576 -0.0208447 0.0121045 0.0546374 -0.0209724 0.009706330000000001 0.0633876 -0.020604 -0.0121123 0.00591309 -0.0212498 -0.0289526 0.00565549 -0.0216078 -0.0380775 0.00479088 -0.0216875 -0.00997672 0.0619769 -0.0220658 0.00705093 0.0456869 -0.0223002 -0.0558455 0.0110476 -0.0223137 -0.0154618 0.0494217 -0.0229336 0.00417573 0.0589573 -0.0231427 0.0278288 0.0125965 -0.0231751 0.027241 0.0309726 -0.0233259 0.0160686 0.00756079 -0.0234095 0.0318943 0.0199392 -0.0234462 -0.00393483 0.0583985 -0.0235915 -0.0597066 0.0170609 -0.0240196 -0.0108777 0.0466362 -0.024123 -0.00330273 0.0464733 -0.0242099 -0.0321428 0.0398591 -0.0244244 0.00347947 0.0416421 -0.024564 -0.0175604 0.0433407 -0.0253979 -0.0453083 0.0344803 -0.0256103 0.0267734 0.0284514 -0.0259312 -0.0445208 0.00878379 -0.025959 -0.0133125 0.00624018 -0.0265967 -0.0369666 0.00635268 -0.0273245 -0.0066598 0.0412078 -0.0277597 -0.0467651 0.0304517 -0.0275944 -0.0515878 0.0207552 -0.0282687 0.0208205 0.0174814 -0.0290859 0.0112094 0.012597 -0.0293048 -0.0474855 0.0256026 -0.0296506 -0.0466043 0.0156453 -0.0304236 0.0134394 0.031696 -0.0304518 -0.0291908 0.00746031 -0.03126 -0.044124 0.016095 -0.0321715 -0.043346 0.0242104 -0.0322352 -0.0402733 0.0141242 -0.0323149 0.01052 0.0200521 -0.0324768 -0.0397188 0.0271188 -0.0325431 -0.0291932 0.0340382 -0.0332479 -0.0329826 0.0117351 -0.0338676 -0.0346121 0.0252676 -0.0341522 -0.00293196 0.033596 -0.0341882 -0.0361716 0.0179088 -0.0344969 -0.0256263 0.0309923 -0.0345138 -0.00958586 0.0123416 -0.0348872 -0.0128566 0.0339912 -0.0349524 -0.0273994 0.0177976 -0.0349556 -0.000677158 0.0209767 -0.0350004 -0.028049 0.008761420000000001 -0.0353194 -0.0100316 0.0154749 -0.0354214 -0.0195455 0.0173172 -0.0355775 -0.0309821 0.0107592 -0.0360305 -0.0150581 0.0232372 -0.0363938 -0.0285041 0.0132933 -0.0374738 -0.00607371 0.0123945 -0.041317 -0.0210454 0.0131228 -0.0425886 -0.0120136 0.0129537 -0.0475164 -0.00753527 0.00853843 -0.0492593 -0.00704914 0.009380670000000001 -0.0496752 -0.0170405 0.0106038 -0.0498676 -0.0259318 0.00619626 -0.052402 -0.022331 0.00866719 -0.0516897 -0.011391 0.0103437 -0.0559595 -0.0106346 0.00698866 -0.0596531 -0.0214295 0.0059579 -0.066312 -0.0158462 0.00759335 -0.0672852 -0.00331292 0.00667068 -0.0687074 -0.0027598 0.00829441 -0.0687083 -0.008451500000000001 0.00881385 -0.07028570000000001 -0.00694567 0.00665748 -0.02471 0.00101921 0.00688758 -0.00641783 -0.0341512 0.0233596 -0.024018 0.00854392 0.00722419 -0.0251696 0.009421270000000001 0.00784613 --0.019815 0.0686939 0.0189821 -0.0416697 -0.017118 0.00864259 --0.00440288 -0.06984319999999999 0.0205811 --0.0033606 0.0600219 0.0217676 -0.0268544 0.00322876 0.008082499999999999 -0.00855449 0.0107052 0.00928038 -0.0219179 0.00585482 0.0121236 -0.0199208 0.0175811 0.0336776 -0.0210521 -0.0362113 0.0256186 -0.0339797 -0.00194129 0.0163861 -0.03202 0.000337126 0.0126992 -0.0119633 0.0163586 0.0147908 -0.0248778 0.0056119 0.0321775 -0.00892971 -0.0563678 0.0287948 -0.0174837 0.027107 0.0210333 --0.0170518 0.00346089 0.00554363 -0.0144974 -0.0120686 0.0314959 -0.00336155 -0.00103205 0.0364574 -0.00707711 -0.0204903 0.0185209 -0.010517 -0.00309481 0.0232445 --0.00559352 0.0373259 0.0172753 --0.00523735 -0.0230725 0.0111224 -0.0151072 -0.0538804 0.0213778 -0.0347571 -0.0188174 0.0105515 -0.0278657 -0.0183642 0.0156758 --0.00338013 -0.0543805 0.0329679 --0.0196332 0.0593213 0.0251138 -0.06481629999999999 -0.0143432 0.00627944 --0.00336175 -0.0187472 0.00979996 --0.0059938 -0.0214388 0.00941436 -0.0204933 0.0262773 0.00994486 -0.0153554 0.00838654 0.0105168 --0.064082 0.064994 0.00682263 --0.0406296 0.0703091 0.0249838 --0.0197677 0.0563929 0.0156108 --0.0506931 0.0781816 0.0304629 -0.0171972 -0.00100568 0.011485 -0.0314619 -0.0225976 0.00774901 --0.00980694 0.0515267 0.0104574 --0.00435185 0.0493969 0.0137744 -0.0449063 -0.0117353 0.00859937 -0.00159087 -0.0450385 0.027858 --0.00469537 -0.06372510000000001 0.0233918 -0.0424219 -0.0285632 0.00857374 -0.0603894 -0.00835109 0.009350529999999999 --0.0147113 -0.0156046 0.009183759999999999 --0.0528157 0.0611754 0.00480955 --0.0173765 -0.008871489999999999 0.00520522 -0.0108104 0.02268 0.0130558 --0.00899905 -0.0208443 0.00915416 --0.0449914 0.0768094 0.0302276 --0.0408502 0.06658 0.008368489999999999 --0.0199988 -0.0118916 0.004906 -0.00337131 0.0455887 0.0238561 -0.00477413 -0.0721541 0.0211645 --0.00344193 -0.049333 0.032475 -0.0427245 -0.0268877 0.00738607 -0.0272704 -0.0238375 0.00669928 --0.00610544 -0.0476638 0.0181008 --0.00760153 0.0503529 0.00747858 -0.0131109 -0.0422224 0.0405109 -0.00214561 -0.0490294 0.0151357 --0.0598224 0.0805424 0.0511855 --0.0204542 0.0588165 0.013102 -0.059357 -0.0190886 0.00813027 --0.00100716 0.0422264 0.0325724 -0.0325535 -0.0244764 0.012522 --0.000431427 -0.0574818 0.0137747 -0.0114251 0.0275734 0.00440942 -0.00337666 -0.0559724 0.0148659 --0.0262911 0.0586227 0.0207785 --0.0699467 0.0813567 0.0499003 -0.0494602 -0.0133111 0.00757754 -0.00758285 0.0333008 0.0104911 -0.00657287 0.032122 0.00603963 -0.000332803 -0.0511328 0.0180756 --0.021764 0.0620607 0.0118108 --0.0454672 0.075167 0.035911 -0.00139884 0.045926 0.0128133 -0.0176314 0.0311493 0.00370344 --0.0159418 -0.0158578 0.00793814 --0.0229387 0.06916410000000001 0.0166572 --0.00133409 -0.0449329 0.0187829 --0.0538019 0.0611146 0.00198764 -0.0305208 -0.00256491 0.0101919 -0.0623596 -0.00697151 0.00683979 -0.0236819 -0.00777996 0.0526871 -0.0118138 -0.0144241 0.0430193 -0.0137156 -0.00365078 0.00732253 --0.0257884 0.0686739 0.0150694 --0.0530331 0.060812 0.00248197 --0.000421194 -0.0523335 0.008791770000000001 -0.0193846 -0.00072024 0.0649221 -0.00485856 0.0133946 0.0114741 --0.0053823 -0.0743714 0.0141262 -0.016958 0.0166471 0.00740593 -0.0429338 -0.0266961 0.0110582 --0.06504749999999999 0.05473 0.00191127 -0.00924818 0.0356698 0.00715588 --0.042468 0.0652669 0.00790867 -0.00699205 0.0348997 0.00576165 --0.012123 0.00171435 0.00688121 -0.017741 0.00126373 0.0717161 --0.00477874 -0.0228765 0.0123522 --0.05496 0.0793832 0.0329037 --0.0253736 -0.000654191 0.00342534 -0.0220159 -0.0128389 0.0555838 -0.0187915 0.00366305 0.06539010000000001 --0.0635923 0.0794618 0.0351284 -0.0187293 0.00901455 0.0689246 --0.0507436 0.0790633 0.0364811 -0.00440962 0.0291856 0.00589534 --0.0610541 0.08157639999999999 0.0467801 --0.0264169 0.06418980000000001 0.0180225 -0.0590681 -0.0129818 0.009692930000000001 -0.0316732 -0.013669 0.008927310000000001 --0.0368828 0.0732351 0.028231 -0.0147007 -0.0293577 0.0425282 --0.00226105 0.042112 0.008184220000000001 --0.022404 0.068624 0.0211714 -0.018834 0.0296379 0.0101126 -0.0545664 -0.023882 0.00596013 --0.0610274 0.0626039 0.00623226 -0.0209345 -0.0123916 0.0558755 --0.064258 0.0639612 0.00701622 --0.0530259 0.07099660000000001 0.0104874 --0.000350232 0.0328643 0.009503569999999999 -0.0179821 0.0260225 0.00525665 --0.071629 0.0809096 0.0500374 -0.0431333 -0.00662611 0.0109755 --0.0367738 0.072104 0.0272887 --0.00147996 0.0424733 0.00778004 --0.0489442 0.0792518 0.0424775 -0.0178184 0.008309230000000001 0.0698262 --0.00256208 -0.0518644 0.0119693 --0.0024457 0.0347988 0.0115191 --0.0226391 0.067054 0.0236986 --0.0250562 0.070839 0.0181046 -0.0157661 -0.010775 0.0444953 --0.0587069 0.0610686 0.00549325 --0.0561989 0.0607157 0.00436391 -0.0028322 0.0311045 0.0076099 --0.061857 0.079748 0.0514834 --0.0580072 0.07448539999999999 0.0170926 -0.017366 0.0281829 0.00449304 -0.0175246 0.0303053 0.00632184 --0.0583716 0.0812348 0.0494755 --0.06276379999999999 0.08110589999999999 0.0418948 -0.009583370000000001 0.0391723 0.00889538 -0.0164997 0.0327763 0.00400793 --0.0100537 -0.019407 0.0104569 -0.0535082 -0.023589 0.00757618 --0.0184567 0.0672393 0.0165986 --0.0660887 0.06395149999999999 0.00557639 --0.008500499999999999 0.0591911 0.0132991 -0.0527123 -0.00658592 0.00801901 -0.00664445 0.0147496 0.00979726 --0.0323364 0.06468409999999999 0.013176 --0.06849810000000001 0.0817682 0.0541475 -0.0424951 -0.00680449 0.0104665 --0.01583 0.06382989999999999 0.0140017 --0.0408586 0.07478079999999999 0.0276312 --0.0213675 0.00505684 0.00440033 --0.0609542 0.0784149 0.029815 -0.0458286 -0.0196104 0.0115924 -0.0619857 -0.0044448 0.00717137 --0.0549453 0.0736446 0.0144159 --0.0660739 0.0797747 0.0511232 --0.0150243 -0.0138696 0.00597473 --0.0208919 0.06642729999999999 0.014553 --0.0583912 0.07667309999999999 0.0277458 --0.00499489 -0.0492059 0.0154875 --0.0177596 -0.0149926 0.00640227 --0.0656257 0.0638276 0.00437301 --0.00111824 -0.0505712 0.010634 --0.0234714 0.0595273 0.0150887 --0.0117477 -0.00786715 0.0107629 --0.0329423 0.0662408 0.012525 --0.0588644 0.0778049 0.0265316 --0.038272 0.07101209999999999 0.0277124 -0.0147178 0.0228905 0.00513556 --0.00242697 -0.0228032 0.0106496 --0.00998317 -0.0196685 0.00798312 -0.00194711 0.0338412 0.00734265 --0.0101071 0.0571173 0.0108272 --0.000192036 0.0305177 0.010316 --0.06622359999999999 0.0609953 0.00234663 --0.0383437 0.071981 0.0290737 -0.0464353 -0.0271448 0.00729223 --0.0113654 0.0558876 0.00985606 --0.0600686 0.0581853 0.00037707 -0.0184892 0.00651809 0.072001 --0.0272353 0.0661385 0.0125002 -0.0386787 -0.009397559999999999 0.0110365 --0.00702298 -0.0554164 0.0301677 --0.0387296 0.0725599 0.0291973 --0.0195884 -0.009713039999999999 0.00731553 -0.0009803979999999999 0.0340005 0.008311529999999999 --0.00251349 -0.0493306 0.0137872 --0.0208118 0.00468072 0.00662791 -0.0145465 0.0247675 0.00685396 -0.0539643 -0.00601143 0.00911787 -0.0615879 -0.00432066 0.00875869 --0.0649217 0.0800024 0.0383643 -0.00460493 0.008497380000000001 0.0127005 --0.0606311 0.0803611 0.0379233 --0.00316884 0.0400824 0.00969248 --0.0308482 0.067467 0.0126012 -0.0120049 0.00511369 0.00824306 -0.0117314 0.0134932 0.00784586 -0.0067401 0.0222359 0.00786688 -0.000365941 0.0444987 0.0334101 -0.00589042 0.0427357 0.0325284 -0.0134556 0.013691 0.0071386 -0.0155774 0.00572549 0.00675779 --0.0442054 0.0654197 0.00607699 -0.00863004 0.0184766 0.00878081 --0.0111016 -0.0170398 0.0107756 --0.0162643 0.06208 0.0123266 --0.06706429999999999 0.0628756 0.0047451 --0.0673064 0.07917689999999999 0.0489333 --0.0566743 0.0588231 0.00264455 --0.07138410000000001 0.080001 0.0523997 --0.0690781 0.0794039 0.0521145 --0.0589744 0.07029879999999999 0.0123753 --0.0108026 0.05228 0.00636676 --0.0113486 0.0541547 0.00728553 --0.0299136 0.06862409999999999 0.0165753 -0.0505332 -0.0225927 0.00635398 -0.0180077 0.0031318 0.07043870000000001 --0.0235313 0.0640143 0.012641 --0.0235569 0.00584404 0.00381922 -0.0384718 -0.0113423 0.0144484 -0.0182407 0.00232532 0.0728388 --0.0235752 0.00407866 0.00373027 --0.011585 0.0522432 0.00647843 -0.0400312 -0.00904366 0.0126741 --0.0178591 -0.000359808 0.00797485 --0.067167 0.06255139999999999 0.00392853 --0.0596438 0.0779391 0.0290601 -0.0013543 0.0302152 0.00901705 -0.0168301 0.00522322 0.0737244 -0.0174324 0.00448014 0.0738384 --0.0618546 0.0649931 0.00590465 -0.0194429 0.0304209 0.00452872 --0.0236633 0.0648084 0.0124456 --0.00249493 -0.0562542 0.012985 --0.0025263 -0.0246783 0.0125409 --0.0396392 0.0718092 0.02876 --0.0158083 -0.0164708 0.00645267 -0.016879 0.0245859 0.0055459 --0.06884990000000001 0.0811361 0.0461884 -0.0290982 -0.00647478 0.008279069999999999 --0.041817 0.0761358 0.0343691 --0.0642688 0.0653922 0.00517065 --0.0162175 0.00239503 0.00694561 -0.00467524 0.0360758 0.00643588 --0.0222973 0.0035638 0.00646752 --0.0708092 0.0801688 0.0482801 --0.0549524 0.07870829999999999 0.0296023 --0.06310540000000001 0.0672415 0.00811831 --0.0155444 -0.0163359 0.0060847 --0.0574097 0.07880470000000001 0.0473507 --0.0558952 0.0591814 0.001764 --0.0177409 0.0619627 0.0144786 --0.00178349 -0.0487397 0.0125937 --0.0111058 0.0522074 0.008299040000000001 --0.0260139 0.00360897 0.00461987 --0.0204566 0.00423454 0.00564674 -0.00612936 0.0370467 0.00680554 -0.010446 0.0313554 0.00705031 --0.0569353 0.05965 0.00118235 --0.0506685 0.0625792 0.00279292 --0.0249761 0.00485573 0.00443819 -0.0172421 0.00725128 0.07382619999999999 --0.0219613 0.06430039999999999 0.0138184 --0.00260185 -0.0513557 0.0142694 --0.0167422 0.00259292 0.00779623 -0.00214524 0.0341103 0.00650831 --0.0236765 0.00572293 0.004305 --0.0616879 0.0784644 0.0353636 --0.0125522 0.0533024 0.00573952 --0.00373263 -0.048886 0.014509 --0.00253347 -0.0472982 0.0131992 --0.0128746 -0.017623 0.00940414 --5.43548e-05 0.0393803 0.00728201 --0.0258702 0.00405717 0.00525282 -0.0183599 0.0265636 0.00640112 -0.0459896 -0.0257989 0.0100883 --0.0295424 0.06805940000000001 0.0247957 --0.0245383 0.0634107 0.0123732 -0.0066096 0.0377811 0.00691952 --0.0450015 0.0646553 0.00575343 --0.0622505 0.0661482 0.00839783 --0.0256248 0.0608105 0.0161665 -0.017488 0.00853314 0.07209649999999999 --0.0596734 0.07050969999999999 0.009924850000000001 --0.06657979999999999 0.06286890000000001 0.00493615 --0.0624322 0.0664941 0.0080812 -0.0436037 -0.00911409 0.009504510000000001 --0.0258241 0.00183578 0.00455937 --0.07027029999999999 0.07969130000000001 0.0546337 --0.027947 0.06304949999999999 0.0231884 --0.0601839 0.07046330000000001 0.0106076 --0.019796 -0.0130118 0.0069497 --0.0183149 0.06305479999999999 0.012418 --0.0302535 0.0701272 0.02364 --0.0574291 0.07908510000000001 0.0314511 --0.0506885 0.0650762 0.00396145 --0.021101 0.0616869 0.0137094 --0.0331684 0.0670427 0.023997 -0.0134393 0.00644533 0.00718965 --0.0111807 -0.0194906 0.00818236 --0.0255718 0.00304117 0.00332801 --0.0126697 -0.015488 0.00653208 --0.0247074 0.00660999 0.00551935 -0.0173416 0.0031807 0.0727906 -0.0172416 0.0236783 0.00588169 -0.0190309 0.0293428 0.00437137 -0.016715 0.00646681 0.0747173 --0.0362286 0.072292 0.023504 --0.0193589 -0.00042516 0.00470745 --0.0218861 0.06436310000000001 0.0125137 --0.0102557 0.0512168 0.00711881 -0.0404202 -0.00631757 0.0116411 -0.0462272 -0.00679819 0.0101561 --0.0259792 0.0656558 0.0150971 -0.0162732 0.0229634 0.00624384 -0.00353474 0.0364474 0.008433390000000001 -4.6368e-06 0.0388726 0.009730829999999999 --0.0216501 0.0633078 0.012475 --0.06535530000000001 0.0635995 0.0060088 --0.0129397 0.0533345 0.00604151 --0.00189413 -0.0244631 0.013557 --0.0610974 0.0673557 0.00916116 -0.0169636 0.00823874 0.0726305 --0.0262169 0.00566462 0.00486021 --0.00105663 -0.050339 0.013034 --0.0522352 0.0618469 0.00239028 --0.06586110000000001 0.0623674 0.00600767 --0.0308719 0.0671807 0.0240148 --0.0271033 0.0631674 0.0232081 -0.000463176 0.0377435 0.00713404 -0.0197653 -0.0105149 0.0573133 --0.0261272 0.00574879 0.00514751 --0.0256133 0.00236555 0.00535812 -0.0395658 -0.00664927 0.0115095 --0.0346515 0.0704144 0.0260764 --0.0676857 0.0619198 0.00410476 --0.0352382 0.07226829999999999 0.0261851 --0.0489272 0.0632235 0.00329626 --0.0514659 0.0617489 0.00295197 --0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1 1654 1 1654 -3 0 4 1654 -1 26 15 543 25 -2 227 308 190 188 -3 203 353 199 163 -4 331 305 504 150 -5 142 328 128 138 -6 490 439 18 571 -7 364 289 287 414 -8 296 336 304 298 -9 564 419 300 381 -10 398 569 373 591 -11 486 473 639 422 -12 338 89 566 489 -13 332 554 543 424 -14 80 67 71 302 -15 149 146 109 108 -16 98 90 375 342 -17 341 308 325 313 -18 147 314 126 116 -19 124 318 156 131 -20 245 322 206 308 -21 348 311 516 186 -22 135 150 319 151 -23 147 314 307 311 -24 464 588 301 528 -25 461 33 35 333 -26 196 192 373 314 -27 108 81 302 122 -28 366 258 227 357 -29 511 107 512 353 -30 146 170 354 172 -31 297 175 156 130 -32 130 297 175 308 -33 318 159 319 195 -34 154 123 122 342 -35 261 308 259 260 -36 132 142 128 318 -37 241 250 240 205 -38 226 227 248 324 -39 575 609 475 49 -40 375 91 123 90 -41 260 308 255 251 -42 517 612 63 482 -43 120 117 131 297 -44 318 131 297 156 -45 147 319 311 307 -46 131 120 297 130 -47 120 297 111 117 -48 308 174 206 360 -49 148 313 325 175 -50 148 313 175 174 -51 302 80 122 81 -52 107 353 511 110 -53 322 231 198 197 -54 61 58 564 57 -55 240 386 212 221 -56 121 297 143 117 -57 121 297 117 111 -58 307 235 314 182 -59 307 314 166 182 -60 417 308 175 316 -61 308 175 360 417 -62 601 9 458 1 -63 459 429 536 599 -64 211 242 206 308 -65 528 588 301 356 -66 316 297 308 175 -67 197 188 308 228 -68 231 308 228 197 -69 231 197 322 308 -70 188 197 308 361 -71 322 361 308 197 -72 259 308 256 255 -73 298 306 304 299 -74 302 342 146 122 -75 251 322 245 308 -76 298 306 299 236 -77 342 302 169 129 -78 157 319 331 150 -79 190 195 324 227 -80 146 342 354 154 -81 190 297 308 324 -82 236 254 306 299 -83 354 179 201 322 -84 308 297 188 361 -85 361 188 164 297 -86 195 165 190 318 -87 307 215 257 235 -88 194 235 215 307 -89 174 129 148 313 -90 169 313 129 174 -91 322 255 251 201 -92 366 265 308 258 -93 227 308 258 366 -94 258 308 249 265 -95 227 308 228 258 -96 448 192 373 196 -97 228 308 249 258 -98 296 298 514 336 -99 125 150 348 126 -100 125 160 348 150 -101 244 264 242 316 -102 264 316 244 271 -103 224 233 225 219 -104 107 353 163 199 -105 217 223 219 225 -106 308 174 313 206 -107 206 313 179 174 -108 241 230 212 233 -109 241 233 212 218 -110 267 278 312 273 -111 267 312 262 273 -112 206 179 322 245 -113 242 245 206 308 -114 144 319 159 157 -115 265 308 266 272 -116 218 219 392 233 -117 264 324 316 271 -118 324 308 264 316 -119 297 318 117 131 -120 128 117 318 124 -121 354 207 201 177 -122 207 177 354 184 -123 155 163 353 203 -124 131 297 156 130 -125 395 330 236 202 -126 164 142 318 190 -127 253 314 234 311 -128 307 314 147 166 -129 331 234 253 254 -130 306 236 298 331 -131 156 297 316 175 -132 324 319 318 316 -133 297 324 316 308 -134 373 314 102 125 -135 167 155 378 192 -136 278 324 272 269 -137 278 276 272 324 -138 319 159 157 336 -139 267 257 312 243 -140 307 215 243 257 -141 156 297 318 316 -142 207 354 170 184 -143 124 144 139 156 -144 267 312 250 243 -145 144 151 139 319 -146 318 316 319 144 -147 316 139 319 144 -148 139 144 316 156 -149 316 191 312 319 -150 316 191 317 156 -151 313 308 175 174 -152 253 234 331 311 -153 331 395 234 236 -154 272 265 308 366 -155 103 140 133 510 -156 235 199 246 314 -157 246 237 314 199 -158 144 151 319 157 -159 92 157 151 144 -160 92 159 157 144 -161 395 234 236 330 -162 395 330 202 348 -163 348 330 202 209 -164 324 312 316 271 -165 266 308 324 272 -166 324 366 308 227 -167 242 264 245 308 -168 272 266 269 324 -169 135 151 319 139 -170 40 35 28 29 -171 88 148 129 342 -172 325 342 148 88 -173 314 116 147 166 -174 77 353 320 94 -175 331 262 319 306 -176 319 317 139 316 -177 450 329 482 328 -178 183 307 147 166 -179 188 361 176 197 -180 169 179 313 174 -181 314 196 348 373 -182 102 84 116 353 -183 102 77 84 353 -184 191 147 319 317 -185 307 262 257 312 -186 307 257 246 235 -187 307 257 262 246 -188 128 318 144 124 -189 246 314 237 253 -190 314 203 237 234 -191 142 128 318 138 -192 253 237 234 314 -193 306 319 331 336 -194 307 314 235 246 -195 316 250 312 191 -196 450 403 349 329 -197 121 297 101 143 -198 382 164 101 297 -199 369 198 322 193 -200 264 266 324 269 -201 322 354 170 207 -202 322 170 193 207 -203 353 84 116 110 -204 70 302 68 83 -205 331 311 234 395 -206 323 493 282 301 -207 269 278 324 271 -208 278 312 324 271 -209 207 170 180 184 -210 207 170 193 180 -211 325 130 175 308 -212 146 354 170 154 -213 354 302 342 146 -214 161 348 510 181 -215 182 314 199 235 -216 322 354 369 170 -217 231 207 322 198 -218 313 322 375 341 -219 375 361 341 322 -220 322 207 193 198 -221 297 143 164 101 -222 221 213 240 232 -223 190 188 308 297 -224 341 361 375 382 -225 341 308 313 322 -226 134 158 184 354 -227 247 308 261 249 -228 263 308 260 251 -229 318 319 159 144 -230 309 262 306 319 -231 250 204 243 312 -232 448 192 167 378 -233 37 333 620 35 -234 37 33 333 35 -235 297 318 316 324 -236 167 448 378 153 -237 212 218 233 219 -238 88 325 342 494 -239 246 307 314 253 -240 307 253 246 262 -241 126 311 150 348 -242 388 611 336 514 -243 348 234 420 314 -244 236 254 331 306 -245 348 314 311 234 -246 211 308 360 417 -247 373 102 320 125 -248 316 250 191 438 -249 250 205 191 438 -250 254 262 306 309 -251 254 309 306 310 -252 299 254 306 310 -253 331 262 306 254 -254 292 294 295 293 -255 194 307 215 204 -256 304 306 384 299 -257 267 312 257 262 -258 353 192 378 155 -259 319 159 336 195 -260 353 192 373 378 -261 336 185 388 195 -262 312 250 271 267 -263 271 250 312 316 -264 261 249 308 265 -265 268 308 265 261 -266 247 308 249 228 -267 227 195 324 226 -268 366 324 415 337 -269 337 366 324 357 -270 190 195 318 324 -271 156 318 124 144 -272 263 266 308 264 -273 251 263 308 264 -274 197 198 322 369 -275 154 354 369 342 -276 188 308 228 227 -277 79 328 138 92 -278 316 317 139 156 -279 360 175 308 174 -280 255 251 308 322 -281 255 256 252 308 -282 247 228 231 308 -283 247 308 231 256 -284 134 149 394 354 -285 83 162 96 302 -286 161 373 140 348 -287 88 67 302 68 -288 302 97 88 68 -289 512 166 314 182 -290 420 192 314 234 -291 348 330 420 234 -292 192 314 234 203 -293 91 123 105 115 -294 394 70 302 81 -295 309 273 262 319 -296 319 262 312 273 -297 67 302 68 70 -298 271 278 312 267 -299 66 57 326 58 -300 188 136 176 361 -301 157 331 185 504 -302 136 361 188 164 -303 244 250 271 316 -304 71 302 67 70 -305 244 213 232 240 -306 81 302 71 70 -307 354 149 108 146 -308 314 237 203 199 -309 506 378 435 629 -310 244 438 316 213 -311 97 302 169 162 -312 244 316 438 250 -313 313 129 342 169 -314 382 113 101 164 -315 506 435 378 94 -316 91 123 85 105 -317 308 264 245 251 -318 242 264 308 316 -319 450 349 482 329 -320 314 373 348 125 -321 92 138 159 144 -322 395 311 234 348 -323 278 273 324 312 -324 373 378 435 320 -325 147 311 319 135 -326 126 311 135 150 -327 126 135 311 147 -328 314 348 311 126 -329 83 302 82 70 -330 378 435 629 373 -331 195 159 165 318 -332 316 312 324 319 -333 156 175 316 387 -334 336 298 514 331 -335 88 342 129 302 -336 319 307 331 311 -337 253 314 311 307 -338 311 331 253 307 -339 297 341 308 130 -340 314 348 126 125 -341 147 314 311 126 -342 61 339 99 338 -343 250 204 312 191 -344 305 185 508 331 -345 211 242 308 316 -346 211 308 417 316 -347 213 316 211 417 -348 214 215 230 204 -349 244 316 242 211 -350 244 211 213 316 -351 465 501 344 502 -352 108 354 302 394 -353 313 129 148 342 -354 337 324 415 248 -355 337 258 366 357 -356 121 101 297 111 -357 382 101 111 297 -358 157 159 185 336 -359 226 336 195 324 -360 307 262 331 253 -361 307 262 319 331 -362 331 254 253 262 -363 248 336 552 296 -364 319 324 195 336 -365 248 296 226 336 -366 324 248 336 552 -367 147 183 191 307 -368 282 281 276 323 -369 281 323 282 301 -370 109 119 105 122 -371 297 143 117 318 -372 109 122 105 80 -373 308 366 324 272 -374 297 318 324 190 -375 297 190 164 318 -376 214 204 230 212 -377 224 212 214 230 -378 297 143 318 164 -379 264 308 324 266 -380 264 269 324 271 -381 132 117 143 318 -382 130 297 341 120 -383 341 130 120 98 -384 277 343 356 279 -385 325 308 175 313 -386 109 81 108 122 -387 109 122 108 146 -388 348 234 395 330 -389 341 111 120 297 -390 341 100 98 120 -391 341 111 100 120 -392 226 336 324 248 -393 318 319 324 195 -394 275 270 324 309 -395 309 336 324 319 -396 552 270 336 324 -397 273 309 275 324 -398 403 328 329 450 -399 382 111 341 297 -400 361 322 308 341 -401 361 341 308 297 -402 342 85 73 90 -403 342 73 85 80 -404 323 324 366 276 -405 361 297 164 382 -406 96 82 83 302 -407 45 647 44 42 -408 179 354 201 177 -409 53 621 54 347 -410 117 124 131 318 -411 156 144 316 318 -412 369 198 193 141 -413 342 302 88 67 -414 67 80 342 302 -415 73 80 342 67 -416 342 73 67 76 -417 372 528 289 285 -418 285 528 289 287 -419 355 98 325 494 -420 122 119 105 123 -421 394 82 134 302 -422 494 88 76 342 -423 109 81 122 80 -424 447 580 503 505 -425 114 118 141 145 -426 311 150 319 135 -427 108 122 302 146 -428 204 307 183 194 -429 191 204 307 183 -430 382 101 100 111 -431 382 111 100 341 -432 318 159 138 144 -433 588 281 301 356 -434 87 61 77 57 -435 318 159 165 138 -436 7 12 2 486 -437 316 191 319 317 -438 208 196 449 445 -439 322 369 354 313 -440 354 158 177 162 -441 354 169 162 179 -442 313 369 354 342 -443 179 162 354 177 -444 130 98 341 355 -445 325 130 341 355 -446 337 357 324 248 -447 324 357 227 248 -448 588 281 464 301 -449 375 341 382 98 -450 454 75 61 155 -451 353 77 84 74 -452 331 305 185 504 -453 311 331 319 150 -454 378 339 167 106 -455 318 190 142 165 -456 138 142 165 318 -457 18 12 397 14 -458 298 514 331 513 -459 118 137 141 168 -460 298 331 236 395 -461 395 298 331 513 -462 93 157 92 159 -463 354 158 184 177 -464 151 157 92 93 -465 78 93 151 92 -466 378 448 629 153 -467 102 314 126 125 -468 126 116 314 102 -469 61 72 303 75 -470 39 461 350 553 -471 350 39 33 461 -472 311 331 513 395 -473 311 331 305 509 -474 353 102 314 116 -475 204 215 243 307 -476 106 153 167 378 -477 97 162 83 302 -478 107 353 199 512 -479 297 188 164 190 -480 147 319 139 135 -481 77 353 87 74 -482 353 203 199 314 -483 512 314 353 199 -484 37 38 29 35 -485 485 140 373 125 -486 398 448 373 196 -487 196 570 373 398 -488 324 248 552 415 -489 415 270 552 324 -490 52 57 594 564 -491 285 289 414 287 -492 438 250 205 240 -493 524 425 25 17 -494 29 25 524 425 -495 87 77 61 353 -496 93 92 138 159 -497 93 92 79 138 -498 203 192 353 155 -499 192 353 314 203 -500 88 302 129 97 -501 169 342 354 302 -502 147 319 317 139 -503 435 426 629 373 -504 197 168 369 176 -505 369 176 361 197 -506 157 151 319 150 -507 307 319 312 191 -508 312 307 191 204 -509 628 373 441 374 -510 513 331 311 509 -511 49 594 413 46 -512 303 163 87 61 -513 146 342 154 122 -514 274 366 415 337 -515 274 258 366 337 -516 87 57 74 66 -517 304 306 336 384 -518 204 250 205 191 -519 110 74 66 87 -520 163 87 61 353 -521 204 205 250 241 -522 387 438 213 316 -523 150 160 348 311 -524 313 369 342 375 -525 313 322 369 375 -526 97 129 169 302 -527 504 305 393 150 -528 181 348 500 187 -529 610 527 42 44 -530 44 527 42 620 -531 311 305 456 509 -532 311 509 456 516 -533 365 512 166 116 -534 116 512 166 314 -535 509 305 508 331 -536 322 369 193 170 -537 535 526 581 632 -538 182 314 512 199 -539 497 441 373 540 -540 37 42 46 527 -541 500 209 187 348 -542 312 257 307 243 -543 323 366 281 276 -544 348 420 209 196 -545 366 279 276 272 -546 202 500 186 348 -547 386 406 221 232 -548 64 526 62 489 -549 336 159 185 195 -550 404 24 559 335 -551 404 24 607 559 -552 384 336 552 270 -553 244 240 438 213 -554 244 438 240 250 -555 430 461 620 333 -556 461 333 35 620 -557 61 564 64 334 -558 381 437 47 413 -559 279 277 265 258 -560 279 277 258 274 -561 186 500 181 348 -562 140 510 348 160 -563 377 410 36 350 -564 202 330 236 209 -565 380 345 614 468 -566 99 339 378 106 -567 378 106 418 99 -568 378 448 373 629 -569 194 235 307 182 -570 194 307 166 182 -571 194 307 183 166 -572 353 373 320 378 -573 68 97 83 302 -574 347 496 604 476 -575 161 181 411 373 -576 570 374 400 368 -577 40 38 35 29 -578 364 289 327 528 -579 324 309 319 273 -580 353 378 320 94 -581 358 91 471 375 -582 134 394 302 354 -583 394 149 108 354 -584 172 354 146 149 -585 382 358 471 375 -586 101 382 90 358 -587 651 346 638 390 -588 382 90 100 101 -589 334 594 564 475 -590 369 361 375 322 -591 322 197 369 361 -592 342 325 98 494 -593 325 313 148 342 -594 342 325 375 98 -595 115 369 123 367 -596 342 98 76 494 -597 369 375 576 115 -598 353 512 116 314 -599 336 304 552 296 -600 336 306 304 298 -601 226 514 336 296 -602 108 302 81 394 -603 181 411 373 374 -604 26 440 571 383 -605 26 383 346 440 -606 211 360 308 206 -607 87 74 57 77 -608 358 113 101 382 -609 195 388 336 226 -610 241 233 218 238 -611 155 339 378 353 -612 345 79 468 476 -613 213 316 417 175 -614 387 316 213 175 -615 312 307 262 319 -616 435 485 426 373 -617 435 373 125 485 -618 299 310 306 384 -619 26 425 25 34 -620 118 114 367 434 -621 26 34 25 608 -622 223 222 529 392 -623 527 38 37 35 -624 37 527 46 38 -625 342 123 90 375 -626 342 123 85 90 -627 335 350 33 35 -628 350 461 33 35 -629 85 91 90 123 -630 259 247 308 261 -631 629 628 448 373 -632 633 142 328 128 -633 629 497 628 373 -634 303 61 87 72 -635 236 254 234 331 -636 341 98 325 355 -637 373 570 400 569 -638 398 570 373 569 -639 49 413 527 46 -640 49 46 527 457 -641 49 626 48 527 -642 241 204 243 250 -643 49 527 48 457 -644 392 218 233 238 -645 233 392 238 223 -646 178 198 197 141 -647 198 197 141 369 -648 364 290 287 528 -649 419 381 564 413 -650 92 78 79 59 -651 192 373 314 353 -652 386 406 238 423 -653 367 369 137 391 -654 437 413 419 606 -655 413 437 47 606 -656 239 252 322 255 -657 454 61 339 155 -658 34 466 425 29 -659 221 386 232 240 -660 60 64 489 484 -661 484 65 60 64 -662 212 386 218 221 -663 241 240 386 212 -664 241 205 240 212 -665 607 24 16 470 -666 620 42 37 527 -667 37 333 42 620 -668 95 87 66 69 -669 113 164 382 361 -670 410 30 432 21 -671 371 1 522 458 -672 527 47 43 40 -673 596 425 17 15 -674 393 456 160 311 -675 110 95 87 66 -676 160 311 456 516 -677 512 511 365 166 -678 353 511 365 512 -679 128 144 318 138 -680 341 130 325 308 -681 87 61 57 58 -682 419 58 564 72 -683 414 289 327 364 -684 320 378 435 94 -685 364 528 287 289 -686 212 221 205 240 -687 134 172 149 354 -688 134 172 354 184 -689 319 147 191 307 -690 589 641 606 436 -691 347 79 59 476 -692 345 79 476 92 -693 92 138 144 328 -694 86 92 144 328 -695 32 399 34 38 -696 306 309 336 310 -697 347 604 468 476 -698 347 468 79 476 -699 614 345 79 468 -700 384 310 336 270 -701 439 25 26 422 -702 196 192 314 420 -703 348 420 196 314 -704 132 143 142 318 -705 164 142 143 318 -706 386 406 423 221 -707 35 527 38 40 -708 158 354 96 162 -709 169 302 354 162 -710 334 475 564 363 -711 155 61 303 75 -712 94 353 378 339 -713 224 233 219 212 -714 214 215 204 194 -715 204 243 230 241 -716 204 230 212 241 -717 391 474 369 136 -718 286 588 528 356 -719 35 620 527 47 -720 136 474 361 565 -721 566 526 632 64 -722 490 439 11 14 -723 209 330 420 348 -724 35 527 40 47 -725 76 342 73 98 -726 77 353 102 320 -727 268 308 261 260 -728 167 155 339 378 -729 465 289 385 344 -730 255 308 260 259 -731 335 24 470 33 -732 559 24 470 335 -733 522 1 371 428 -734 347 53 496 54 -735 559 24 607 470 -736 476 347 496 54 -737 312 204 243 307 -738 230 215 243 204 -739 241 218 212 386 -740 241 238 218 386 -741 29 33 28 23 -742 23 335 559 470 -743 297 382 361 341 -744 336 611 185 331 -745 388 185 336 611 -746 353 373 102 320 -747 373 102 314 353 -748 44 527 606 610 -749 74 110 84 353 -750 610 527 606 413 -751 325 341 375 98 -752 369 136 137 391 -753 169 354 342 313 -754 274 366 279 281 -755 281 366 279 276 -756 322 313 206 308 -757 414 289 344 385 -758 114 546 367 434 -759 367 391 434 369 -760 155 163 303 61 -761 47 620 527 44 -762 384 304 552 336 -763 384 310 306 336 -764 99 378 339 94 -765 506 94 378 99 -766 365 353 512 116 -767 378 99 418 506 -768 478 23 559 470 -769 328 86 633 128 -770 265 308 268 266 -771 268 308 263 266 -772 564 419 436 58 -773 460 75 564 65 -774 339 61 99 94 -775 518 564 65 460 -776 643 216 229 392 -777 342 88 76 67 -778 26 422 11 439 -779 26 440 439 571 -780 411 161 373 441 -781 442 467 412 10 -782 350 377 24 33 -783 225 409 217 223 -784 410 377 24 350 -785 24 350 33 335 -786 371 522 523 458 -787 278 324 273 276 -788 273 324 275 276 -789 170 354 172 184 -790 169 179 354 313 -791 607 16 24 580 -792 367 391 137 118 -793 35 620 37 527 -794 548 33 461 333 -795 414 385 344 294 -796 414 289 288 344 -797 65 64 484 454 -798 93 79 78 401 -799 375 382 358 90 -800 413 575 564 594 -801 187 181 368 189 -802 358 375 90 91 -803 275 276 324 323 -804 493 270 323 275 -805 532 323 276 275 -806 324 270 323 415 -807 275 323 324 270 -808 157 331 319 336 -809 454 339 61 338 -810 527 47 507 43 -811 74 87 110 353 -812 61 353 339 155 -813 444 445 618 379 -814 173 133 160 510 -815 352 604 468 347 -816 161 181 373 348 -817 23 335 470 33 -818 181 187 374 373 -819 29 35 28 33 -820 348 187 181 373 -821 562 10 412 447 -822 10 580 503 447 -823 399 351 34 38 -824 515 592 399 32 -825 434 112 637 474 -826 134 82 96 302 -827 224 230 233 212 -828 134 302 96 354 -829 302 354 162 96 -830 376 64 60 564 -831 606 640 589 45 -832 369 137 168 141 -833 113 361 583 136 -834 197 369 168 141 -835 12 7 4 14 -836 510 181 173 171 -837 61 339 353 94 -838 369 154 170 354 -839 404 607 24 21 -840 411 374 578 441 -841 500 186 189 480 -842 535 526 632 566 -843 628 441 497 483 -844 478 23 28 559 -845 28 335 559 23 -846 93 92 78 79 -847 554 473 631 453 -848 198 178 193 141 -849 187 444 209 500 -850 226 388 336 514 -851 287 464 285 528 -852 528 301 285 372 -853 497 629 426 373 -854 394 302 70 82 -855 64 61 454 75 -856 444 587 618 445 -857 467 458 371 523 -858 371 523 520 467 -859 371 520 551 467 -860 385 465 294 292 -861 468 604 345 476 -862 584 517 63 345 -863 176 136 137 369 -864 439 440 18 571 -865 490 26 11 439 -866 324 366 227 357 -867 606 413 419 436 -868 527 48 477 507 -869 527 477 48 457 -870 527 492 48 507 -871 527 626 48 492 -872 134 354 96 158 -873 62 64 489 60 -874 52 57 370 594 -875 326 52 55 564 -876 524 425 17 19 -877 373 441 161 540 -878 373 161 140 540 -879 66 326 55 58 -880 58 326 55 564 -881 310 309 336 270 -882 324 270 336 309 -883 157 336 185 331 -884 181 411 171 161 -885 640 589 641 606 -886 537 557 621 54 -887 282 285 340 288 -888 372 285 288 340 -889 382 100 98 341 -890 502 294 465 292 -891 43 34 351 38 -892 221 240 213 205 -893 438 240 205 213 -894 425 466 524 29 -895 354 302 146 108 -896 435 426 506 629 -897 497 506 426 629 -898 187 181 374 368 -899 517 79 614 345 -900 342 90 73 98 -901 180 141 178 152 -902 178 152 141 168 -903 193 180 141 178 -904 140 161 348 510 -905 9 442 13 362 -906 442 9 13 467 -907 408 505 503 580 -908 607 580 408 16 -909 327 289 414 385 -910 372 284 283 340 -911 359 89 526 566 -912 607 539 478 470 -913 140 373 125 348 -914 328 86 92 517 -915 527 47 44 606 -916 155 163 61 353 -917 367 391 118 434 -918 338 64 61 454 -919 64 338 484 454 -920 359 89 566 338 -921 489 526 566 64 -922 448 192 378 373 -923 350 39 377 33 -924 369 137 176 168 -925 377 350 553 39 -926 325 313 375 341 -927 340 288 625 282 -928 342 313 375 325 -929 524 466 19 20 -930 425 466 19 524 -931 348 395 186 202 -932 610 44 42 45 -933 409 433 217 223 -934 217 433 529 223 -935 582 375 471 115 -936 434 474 637 369 -937 382 375 471 582 -938 98 90 382 375 -939 382 100 90 98 -940 123 105 122 85 -941 122 85 105 80 -942 43 40 34 38 -943 369 474 361 136 -944 469 452 564 460 -945 46 41 527 457 -946 415 366 274 323 -947 191 387 316 438 -948 191 387 156 316 -949 434 391 474 369 -950 502 294 344 465 -951 502 294 292 293 -952 476 59 92 79 -953 306 309 319 336 -954 528 301 464 285 -955 301 282 464 285 -956 208 449 210 379 -957 210 379 220 208 -958 551 520 10 467 -959 359 89 339 106 -960 110 353 365 116 -961 353 511 110 365 -962 118 141 145 152 -963 34 28 466 29 -964 621 347 59 54 -965 59 621 79 347 -966 342 80 122 302 -967 369 123 154 342 -968 123 85 122 342 -969 122 342 85 80 -970 450 349 612 482 -971 564 55 436 413 -972 40 38 29 34 -973 606 641 413 436 -974 28 35 335 33 -975 34 25 32 29 -976 487 548 495 479 -977 187 209 196 348 -978 461 479 430 495 -979 311 513 509 186 -980 395 311 348 186 -981 187 196 209 444 -982 485 540 426 373 -983 21 580 24 447 -984 412 447 21 562 -985 412 562 21 446 -986 447 580 24 10 -987 46 527 610 413 -988 229 392 216 222 -989 323 281 366 274 -990 281 301 274 323 -991 599 625 429 282 -992 608 25 32 34 -993 372 288 284 340 -994 227 324 190 308 -995 373 196 348 187 -996 425 25 34 29 -997 628 448 373 591 -998 591 448 373 398 -999 477 43 41 527 -1000 80 71 81 302 -1001 457 477 41 527 -1002 647 487 430 479 -1003 628 373 497 441 -1004 578 628 441 374 -1005 410 24 335 350 -1006 393 311 160 150 -1007 367 118 137 141 -1008 343 488 356 396 -1009 87 72 61 58 -1010 488 588 356 396 -1011 476 54 59 347 -1012 94 353 61 77 -1013 110 353 87 107 -1014 251 245 322 201 -1015 245 179 322 201 -1016 11 422 486 14 -1017 287 588 464 528 -1018 10 467 412 551 -1019 13 551 412 467 -1020 371 467 551 13 -1021 551 10 8 412 -1022 113 164 361 136 -1023 425 25 15 26 -1024 140 348 125 160 -1025 451 588 528 286 -1026 180 152 145 141 -1027 607 16 539 470 -1028 374 570 400 373 -1029 373 374 556 400 -1030 374 373 556 628 -1031 441 628 578 483 -1032 497 642 418 629 -1033 167 89 106 339 -1034 346 440 390 521 -1035 369 123 342 375 -1036 583 382 498 361 -1037 564 75 72 61 -1038 564 61 64 75 -1039 345 517 79 92 -1040 533 529 223 222 -1041 498 582 576 375 -1042 575 376 609 49 -1043 412 10 8 447 -1044 561 472 549 468 -1045 239 322 252 231 -1046 397 12 4 14 -1047 367 369 434 576 -1048 206 313 322 179 -1049 322 179 313 354 -1050 12 2 4 7 -1051 346 638 26 608 -1052 66 87 57 58 -1053 72 58 564 61 -1054 322 207 231 239 -1055 201 354 322 207 -1056 239 255 322 201 -1057 533 402 529 222 -1058 60 518 564 65 -1059 11 486 12 14 -1060 118 168 141 152 -1061 60 376 564 518 -1062 576 375 582 115 -1063 515 34 399 351 -1064 334 564 64 363 -1065 311 331 150 305 -1066 473 538 597 519 -1067 564 594 575 475 -1068 36 30 432 410 -1069 343 396 356 279 -1070 281 279 356 396 -1071 281 274 301 356 -1072 486 7 14 422 -1073 642 153 585 629 -1074 153 642 628 629 -1075 503 447 8 10 -1076 461 430 620 416 -1077 493 270 275 280 -1078 275 493 532 323 -1079 532 493 282 323 -1080 461 495 430 416 -1081 493 532 280 275 -1082 389 381 47 413 -1083 49 413 626 527 -1084 500 189 186 181 -1085 498 382 582 375 -1086 410 30 24 377 -1087 30 410 36 377 -1088 366 265 279 272 -1089 608 34 32 31 -1090 527 40 43 38 -1091 46 527 41 38 -1092 43 527 38 41 -1093 597 639 7 486 -1094 306 298 336 331 -1095 11 26 15 543 -1096 554 11 15 543 -1097 416 430 620 649 -1098 291 290 364 327 -1099 637 498 375 361 -1100 39 548 33 461 -1101 422 634 25 543 -1102 583 582 382 113 -1103 367 114 118 141 -1104 473 422 11 554 -1105 178 197 168 141 -1106 375 369 123 115 -1107 91 123 115 375 -1108 377 350 36 553 -1109 173 181 516 186 -1110 110 95 107 87 -1111 353 107 163 87 -1112 46 527 42 610 -1113 500 209 348 202 -1114 334 61 564 57 -1115 510 103 140 161 -1116 160 104 140 133 -1117 486 11 473 422 -1118 336 611 331 514 -1119 576 434 637 369 -1120 29 466 524 20 -1121 366 279 265 258 -1122 366 279 258 274 -1123 89 484 338 454 -1124 462 621 568 534 -1125 133 104 140 103 -1126 462 534 568 531 -1127 521 440 390 563 -1128 383 440 563 390 -1129 141 154 170 369 -1130 141 193 369 170 -1131 173 181 510 516 -1132 348 510 181 516 -1133 324 366 276 272 -1134 415 324 366 323 -1135 477 527 507 43 -1136 26 25 440 346 -1137 430 333 42 479 -1138 460 452 564 75 -1139 31 515 32 592 -1140 181 189 187 500 -1141 389 527 413 47 -1142 413 389 626 527 -1143 376 590 49 575 -1144 331 611 185 508 -1145 223 392 407 219 -1146 223 233 392 219 -1147 538 648 597 519 -1148 597 648 538 486 -1149 557 537 568 499 -1150 553 39 461 416 -1151 290 528 451 287 -1152 554 453 332 560 -1153 601 467 458 9 -1154 623 525 535 566 -1155 566 525 535 526 -1156 378 106 431 418 -1157 53 496 352 347 -1158 564 300 419 72 -1159 564 452 300 72 -1160 2 6 7 486 -1161 421 451 528 286 -1162 451 528 588 287 -1163 409 595 433 491 -1164 79 621 78 401 -1165 401 621 78 555 -1166 78 537 555 621 -1167 599 340 282 301 -1168 493 599 282 301 -1169 430 620 42 333 -1170 565 498 112 637 -1171 583 498 112 565 -1172 599 429 536 282 -1173 599 625 459 429 -1174 543 554 332 15 -1175 474 112 637 565 -1176 364 290 528 327 -1177 548 461 479 333 -1178 461 333 430 479 -1179 383 390 346 440 -1180 65 60 64 564 -1181 65 64 75 564 -1182 383 638 346 390 -1183 380 468 614 549 -1184 532 282 276 323 -1185 157 331 504 150 -1186 89 454 338 339 -1187 167 454 89 339 -1188 8 5 10 551 -1189 5 520 10 551 -1190 492 626 545 389 -1191 389 626 545 469 -1192 37 33 35 29 -1193 615 568 499 557 -1194 500 186 480 202 -1195 54 56 53 496 -1196 294 295 291 385 -1197 295 291 385 327 -1198 295 294 292 385 -1199 474 637 361 565 -1200 497 373 426 540 -1201 40 29 28 34 -1202 535 525 581 526 -1203 328 92 79 517 -1204 496 56 352 604 -1205 459 536 646 493 -1206 459 429 624 536 -1207 493 536 280 532 -1208 25 346 26 608 -1209 351 399 41 38 -1210 43 41 38 351 -1211 527 413 47 606 -1212 308 252 322 231 -1213 308 255 322 252 -1214 256 231 252 308 -1215 256 308 259 247 -1216 21 30 24 410 -1217 21 30 562 24 -1218 315 621 555 568 -1219 217 219 223 407 -1220 225 223 219 233 -1221 407 217 529 223 -1222 381 452 300 564 -1223 595 635 433 491 -1224 414 385 291 327 -1225 416 39 461 495 -1226 461 39 548 495 -1227 461 548 479 495 -1228 301 282 281 464 -1229 301 282 285 340 -1230 315 621 568 462 -1231 372 289 288 285 -1232 289 288 285 414 -1233 431 153 106 378 -1234 55 641 589 436 -1235 651 572 638 608 -1236 564 452 72 75 -1237 573 534 567 613 -1238 567 645 600 534 -1239 499 568 577 537 -1240 414 327 291 364 -1241 561 549 614 468 -1242 338 489 566 64 -1243 89 484 489 338 -1244 385 294 465 344 -1245 445 196 444 209 -1246 209 550 444 427 -1247 490 14 11 12 -1248 490 18 14 12 -1249 597 648 486 7 -1250 486 639 7 422 -1251 639 473 597 631 -1252 529 491 616 533 -1253 435 320 125 373 -1254 616 491 529 541 -1255 497 628 642 629 -1256 46 52 413 602 -1257 623 359 566 338 -1258 497 506 629 418 -1259 99 359 623 338 -1260 65 64 454 75 -1261 209 617 550 427 -1262 86 328 144 128 -1263 570 187 374 368 -1264 403 86 633 328 -1265 601 522 458 523 -1266 604 352 472 56 -1267 273 312 319 324 -1268 380 614 63 549 -1269 561 549 63 614 -1270 623 525 566 359 -1271 359 525 566 526 -1272 566 89 526 489 -1273 113 382 358 471 -1274 582 471 382 113 -1275 523 467 458 601 -1276 268 308 260 263 -1277 374 628 556 578 -1278 498 582 382 583 -1279 586 645 534 557 -1280 361 176 369 136 -1281 277 356 274 279 -1282 576 637 375 369 -1283 637 375 369 361 -1284 373 556 569 400 -1285 556 373 569 628 -1286 447 562 24 21 -1287 47 492 527 507 -1288 495 39 548 487 -1289 572 608 651 650 -1290 541 619 542 574 -1291 27 562 21 30 -1292 21 446 562 27 -1293 517 328 614 79 -1294 545 530 622 575 -1295 522 371 523 558 -1296 523 371 520 558 -1297 471 91 115 375 -1298 578 127 628 556 -1299 127 153 628 556 -1300 641 413 55 52 -1301 55 564 436 58 -1302 564 334 57 594 -1303 55 641 436 413 -1304 575 413 49 594 -1305 15 17 596 560 -1306 521 440 563 571 -1307 632 581 62 526 -1308 285 372 301 340 -1309 290 451 528 421 -1310 326 57 564 58 -1311 205 212 241 204 -1312 564 452 469 381 -1313 239 322 207 201 -1314 223 392 529 407 -1315 381 564 413 469 -1316 395 513 311 186 -1317 389 469 413 626 -1318 136 361 583 565 -1319 586 645 567 534 -1320 32 25 608 346 -1321 369 367 137 141 -1322 469 575 545 622 -1323 593 543 634 422 -1324 373 569 628 591 -1325 556 569 153 628 -1326 196 187 373 570 -1327 167 454 339 155 -1328 590 626 575 530 -1329 536 493 282 532 -1330 133 140 160 510 -1331 376 363 64 564 -1332 209 427 444 587 -1333 571 440 563 383 -1334 498 375 576 637 -1335 531 534 568 579 -1336 534 568 557 621 -1337 218 392 643 238 -1338 568 555 577 537 -1339 475 609 363 49 -1340 363 609 475 564 -1341 393 311 150 305 -1342 19 425 17 596 -1343 596 17 603 560 -1344 522 428 371 558 -1345 127 628 497 483 -1346 492 48 545 626 -1347 21 607 24 580 -1348 132 117 318 128 -1349 633 132 547 142 -1350 437 381 419 413 -1351 419 381 437 300 -1352 173 181 186 171 -1353 405 613 600 534 -1354 632 526 62 64 -1355 489 484 64 338 -1356 600 54 53 621 -1357 29 20 28 466 -1358 20 28 466 443 -1359 49 48 626 590 -1360 63 345 614 380 -1361 584 345 63 380 -1362 470 607 559 478 -1363 28 23 22 20 -1364 478 23 22 28 -1365 473 422 554 631 -1366 555 537 568 621 -1367 18 490 14 439 -1368 596 17 19 603 -1369 571 440 18 521 -1370 542 491 616 541 -1371 534 568 615 557 -1372 534 568 579 615 -1373 392 222 229 238 -1374 626 48 530 590 -1375 238 406 229 423 -1376 629 585 642 418 -1377 418 506 629 378 -1378 378 431 629 418 -1379 153 448 628 591 -1380 591 569 628 153 -1381 550 209 500 627 -1382 515 31 32 34 -1383 209 627 550 617 -1384 569 556 153 400 -1385 645 621 557 54 -1386 529 491 533 223 -1387 601 1 458 522 -1388 522 601 1 3 -1389 359 339 99 106 -1390 338 99 359 339 -1391 49 575 626 413 -1392 473 597 631 453 -1393 605 564 518 460 -1394 222 392 402 529 -1395 113 382 583 361 -1396 33 335 28 23 -1397 370 52 594 46 -1398 408 505 580 607 -1399 413 640 602 641 -1400 630 376 564 609 -1401 49 376 609 363 -1402 363 376 609 564 -1403 393 456 311 305 -1404 218 221 386 643 -1405 643 386 423 221 -1406 141 123 369 367 -1407 498 382 375 361 -1408 474 637 369 361 -1409 558 371 520 551 -1410 558 428 371 551 -1411 374 441 411 373 -1412 422 25 26 543 -1413 25 17 15 634 -1414 606 44 610 45 -1415 367 115 369 576 -1416 367 576 546 115 -1417 636 573 567 613 -1418 615 51 579 573 -1419 50 51 615 636 -1420 55 413 564 52 -1421 594 52 413 46 -1422 564 326 52 57 -1423 367 434 546 576 -1424 208 449 379 445 -1425 379 445 544 208 -1426 26 439 440 25 -1427 622 575 605 469 -1428 636 586 567 573 -1429 573 586 567 534 -1430 599 625 340 283 -1431 605 630 518 564 -1432 171 510 181 161 -1433 32 29 38 34 -1434 402 216 392 222 -1435 223 222 392 238 -1436 389 492 527 47 -1437 389 492 626 527 -1438 577 555 78 537 -1439 315 621 401 555 -1440 15 598 634 560 -1441 634 17 15 560 -1442 481 142 328 633 -1443 128 328 144 138 -1444 413 610 640 606 -1445 640 606 610 45 -1446 379 449 444 445 -1447 187 449 196 444 -1448 445 449 444 196 -1449 605 564 460 469 -1450 575 564 605 469 -1451 541 200 619 574 -1452 564 436 419 413 -1453 517 482 63 614 -1454 154 369 141 123 -1455 583 498 565 361 -1456 498 361 637 565 -1457 622 530 630 575 -1458 21 30 432 27 -1459 173 510 160 516 -1460 311 160 348 516 -1461 485 140 540 373 -1462 21 505 580 447 -1463 490 26 439 571 -1464 379 544 220 208 -1465 348 516 181 186 -1466 186 509 311 516 -1467 209 202 627 617 -1468 433 635 529 491 -1469 430 42 620 44 -1470 649 430 620 44 -1471 529 635 541 491 -1472 404 24 410 21 -1473 404 410 24 335 -1474 89 338 359 339 -1475 450 328 482 517 -1476 517 328 482 614 -1477 78 59 537 621 -1478 588 396 281 356 -1479 286 488 588 356 -1480 424 543 593 422 -1481 463 607 408 16 -1482 389 381 413 469 -1483 413 469 575 626 -1484 626 469 575 545 -1485 554 11 543 422 -1486 459 624 646 536 -1487 332 543 593 424 -1488 631 554 424 422 -1489 153 431 629 378 -1490 545 48 530 626 -1491 626 530 545 575 -1492 59 621 78 79 -1493 160 510 348 516 -1494 626 590 575 49 -1495 576 434 112 637 -1496 498 576 112 637 -1497 346 651 638 608 -1498 13 442 412 362 -1499 13 467 412 442 -1500 132 142 633 128 -1501 184 180 172 170 -1502 631 332 424 554 -1503 531 573 579 51 -1504 521 571 563 18 -1505 599 625 282 340 -1506 622 630 605 575 -1507 562 442 362 412 -1508 193 180 170 141 -1509 50 644 636 615 -1510 443 466 20 19 -1511 616 542 533 491 -1512 413 594 564 52 -1513 621 53 600 405 -1514 362 562 446 27 -1515 403 547 321 481 -1516 403 481 321 329 -1517 562 442 412 10 -1518 493 459 536 599 -1519 493 599 536 282 -1520 450 86 328 517 -1521 413 602 610 46 -1522 29 23 28 20 -1523 223 409 433 491 -1524 621 59 537 54 -1525 13 362 412 446 -1526 439 422 11 14 -1527 639 473 631 422 -1528 450 612 584 517 -1529 450 482 612 517 -1530 413 641 602 52 -1531 447 10 24 562 -1532 531 573 534 579 -1533 380 345 468 604 -1534 587 427 444 618 -1535 613 567 600 534 -1536 218 386 238 643 -1537 643 238 423 386 -1538 347 496 352 604 -1539 63 345 517 614 -1540 584 612 63 517 -1541 629 431 585 418 -1542 153 431 585 629 -1543 463 539 478 607 -1544 463 539 607 16 -1545 564 609 475 575 -1546 533 529 402 616 -1547 376 630 564 518 -1548 645 54 600 621 -1549 380 468 472 604 -1550 604 468 472 352 -1551 380 468 549 472 -1552 570 187 373 374 -1553 606 413 641 640 -1554 413 610 602 640 -1555 458 467 13 9 -1556 467 458 13 371 -1557 11 422 26 543 -1558 25 17 425 15 -1559 646 536 280 493 -1560 646 624 280 536 -1561 647 430 44 42 -1562 618 544 220 379 -1563 648 6 486 7 -1564 648 6 538 486 -1565 403 633 547 481 -1566 403 328 633 481 -1567 483 127 628 578 -1568 486 7 12 14 -1569 53 56 352 496 -1570 340 288 284 625 -1571 283 340 284 625 -1572 561 352 472 468 -1573 86 450 328 403 -1574 329 403 481 328 -1575 455 288 284 372 -1576 501 288 284 455 -1577 376 530 575 630 -1578 630 376 609 575 -1579 430 479 42 647 -1580 621 405 600 534 -1581 22 28 20 443 -1582 643 238 229 423 -1583 481 633 547 142 -1584 558 428 551 652 -1585 509 611 331 508 -1586 513 514 331 611 -1587 509 513 331 611 -1588 601 9 1 3 -1589 289 288 344 501 -1590 515 32 399 34 -1591 403 321 349 329 -1592 392 229 643 238 -1593 618 445 544 379 -1594 618 587 544 445 -1595 531 613 534 573 -1596 629 153 448 628 -1597 538 473 597 486 -1598 597 473 639 486 -1599 650 31 608 346 -1600 607 505 580 21 -1601 288 455 289 372 -1602 289 455 288 501 -1603 376 530 590 575 -1604 49 594 475 575 -1605 356 279 281 274 -1606 550 209 444 500 -1607 362 412 446 562 -1608 529 433 491 223 -1609 455 372 284 283 -1610 465 501 455 289 -1611 465 289 344 501 -1612 445 209 444 587 -1613 153 642 127 628 -1614 294 385 291 414 -1615 283 625 459 599 -1616 613 531 51 573 -1617 636 573 613 51 -1618 557 621 568 537 -1619 558 551 520 5 -1620 500 209 202 627 -1621 635 200 541 574 -1622 595 200 635 574 -1623 558 652 551 5 -1624 534 579 573 615 -1625 605 575 630 564 -1626 31 346 32 608 -1627 631 424 639 422 -1628 383 346 638 26 -1629 469 575 564 413 -1630 15 560 332 598 -1631 15 554 332 560 -1632 586 557 534 615 -1633 573 586 534 615 -1634 332 543 598 593 -1635 543 332 598 15 -1636 609 575 564 630 -1637 554 631 332 453 -1638 424 554 543 422 -1639 608 346 651 650 -1640 487 495 430 479 -1641 645 621 534 557 -1642 645 621 600 534 -1643 542 491 541 574 -1644 541 635 574 491 -1645 636 644 586 573 -1646 573 586 615 644 -1647 543 634 598 593 -1648 497 127 642 628 -1649 598 543 15 634 -1650 25 15 543 634 -1651 473 519 597 453 -1652 595 574 635 491 -1653 636 51 615 573 -1654 644 573 636 615 -$EndElements diff --git a/test/user/testdata/shark_41_ascii_missing_element.msh b/test/user/testdata/shark_41_ascii_missing_element.msh deleted file mode 100644 index 83b7a87f..00000000 --- a/test/user/testdata/shark_41_ascii_missing_element.msh +++ /dev/null @@ -1,2972 +0,0 @@ -$MeshFormat -4.1 0 8 -$EndMeshFormat -$Entities -0 0 0 1 -0 -0.07334360000000001 -0.08523339999999999 -0.0005566629999999989 0.07028570000000001 0.0819076 0.0752128 0 0 -$EndEntities -$Nodes -1 652 1 652 -3 0 0 652 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 --0.07334359999999999 0.08167480000000001 0.056402 --0.07291259999999999 0.0537921 0.00170478 --0.072634 0.0799069 0.0578949 --0.0715817 0.0520377 0.00292576 --0.0701949 0.08025690000000001 0.0450431 --0.06876980000000001 0.060971 0.00326551 --0.06778000000000001 0.060358 0.00473741 --0.06727959999999999 0.08092489999999999 0.0425553 --0.0658074 0.0806443 0.0552302 --0.064933 0.0788176 0.0453762 --0.0636555 0.0610198 0.00141989 --0.0636111 0.0566004 -0.000556663 --0.0636791 0.0819076 0.0524468 --0.0623445 0.0580268 0.00335683 --0.0624856 0.06710579999999999 0.00581638 --0.0601398 0.0781111 0.0317589 --0.0599443 0.0685632 0.009924489999999999 --0.0592787 0.0571239 0.00105116 --0.0587906 0.07199990000000001 0.0117948 --0.0575605 0.0730663 0.016213 --0.057624 0.0811803 0.0403639 --0.0572339 0.0769387 0.0223219 --0.0559974 0.0749629 0.0235691 --0.0542321 0.0763209 0.0344665 --0.0540672 0.0649483 0.008218130000000001 --0.0541685 0.06611350000000001 0.00437935 --0.0532966 0.0805356 0.0466758 --0.0517252 0.07611850000000001 0.0183218 --0.0505257 0.06887699999999999 0.0152572 --0.0503803 0.07726379999999999 0.0406423 --0.0472855 0.0641041 0.00381053 --0.0469016 0.0648796 0.00821733 --0.0474599 0.07272679999999999 0.0265623 --0.0464733 0.070912 0.0103373 --0.0444756 0.07556740000000001 0.0221683 --0.0440208 0.07743129999999999 0.0371107 --0.0434135 0.0685101 0.0213943 --0.0425401 0.0668787 0.0159114 --0.0405353 0.07301630000000001 0.0309862 --0.0386417 0.073548 0.0160682 --0.037401 0.0664899 0.0122191 --0.0358693 0.06894450000000001 0.0243885 --0.0351058 0.06877709999999999 0.0124837 --0.0333614 0.07116500000000001 0.0238503 --0.0325564 0.0696271 0.024504 --0.032455 0.0625178 0.0200737 --0.0305469 0.0729973 0.0173921 --0.0276941 0.06523859999999999 0.0128238 --0.0272717 0.0628782 0.0141328 --0.0263428 0.00735496 0.00505748 --0.0256055 0.00658056 0.00327552 --0.0252856 0.0610141 0.0227762 --0.0250237 -0.00678856 0.00359213 --0.0242889 -0.00589458 0.00589675 --0.0216872 0.0639735 0.0255561 --0.0215721 -0.0119744 0.00619585 --0.0195136 0.0542304 0.0216195 --0.0168343 0.06495339999999999 0.0236547 --0.0161373 -0.00420129 0.00881529 --0.0148726 0.0585475 0.0106707 --0.0140647 0.0517836 0.0159197 --0.0142986 0.0543801 0.0051496 --0.0139611 -0.0178642 0.00651265 --0.0139803 0.0554055 0.0115694 --0.0124373 0.0606817 0.0122622 --0.0127423 0.0580719 0.0285553 --0.0127412 -0.07042320000000001 0.0234664 --0.0126173 -0.0801905 0.022154 --0.0125269 0.0592002 0.0346418 --0.0122498 -0.080596 0.0191154 --0.0121442 -0.0691943 0.0191352 --0.0123618 0.0658492 0.0197519 --0.0121018 -0.063334 0.0245151 --0.0118539 0.0462485 0.0243954 --0.0111067 0.0637388 0.0161162 --0.0110042 -0.0624802 0.0276395 --0.0109072 0.046219 0.0183571 --0.0107037 -0.000325242 0.00950432 --0.010183 -0.0121386 0.00674337 --0.009774420000000001 -0.0638147 0.0162637 --0.0097669 -0.06993340000000001 0.0156591 --0.00942656 -0.0836042 0.0182705 --0.009320999999999999 -0.0852334 0.0216727 --0.00803502 0.0401179 0.0263407 --0.00857808 -0.0579335 0.0163943 --0.007931580000000001 -0.0190616 0.0121625 --0.00782675 0.0573514 0.028038 --0.00773028 -0.0620746 0.0302044 --0.00764665 0.0537773 0.00961295 --0.00721562 -0.0507362 0.0224357 --0.00717408 -0.0528249 0.0179333 --0.00651588 -0.00739691 0.013024 --0.00691116 -0.00014073 0.00823716 --0.00661131 0.044183 0.0123 --0.00658663 0.0535365 0.0326225 --0.00630954 -0.08506569999999999 0.0194796 --0.00616497 -0.0797841 0.0261073 --0.00582999 -0.0494502 0.0287705 --0.00563359 0.0476479 0.00934546 --0.00506609 -0.0425596 0.0250833 --0.00453974 -0.0405694 0.0173853 --0.00447266 0.0319291 0.0205877 --0.00434886 0.0267225 0.00648417 --0.00418386 0.0253438 0.008421959999999999 --0.0041733 -0.0606038 0.0122716 --0.00385183 0.0479538 0.00869149 --0.00333705 0.051389 0.031593 --0.00333565 -0.06938809999999999 0.0119551 --0.00333748 -0.0650683 0.0110291 --0.00292457 0.0475597 0.0319288 --0.00280471 -0.0353375 0.0238411 --0.00273019 -0.0493159 0.0135756 --0.00255346 -0.0452657 0.0126112 --0.00249178 -0.0598565 0.010934 --0.00247351 -0.0533955 0.0149632 --0.00280465 0.0288144 0.0300227 --0.00225175 -0.030519 0.0236922 --0.00205777 -0.0595101 0.00715068 --0.0018581 -0.0627033 0.0116048 --0.00150112 -0.0384203 0.0313885 --0.00143547 -0.0337232 0.0176227 --0.00136747 -0.062725 0.0150152 --0.000884775 -0.0587825 0.0143119 --0.000624659 -0.0247814 0.0257906 --0.000489974 0.0225414 0.0188523 --6.05566e-05 0.0171338 0.0234086 -0.00150381 0.0360475 0.00675461 -0.000282178 -0.0241462 0.0174969 -0.000347869 -0.06752370000000001 0.0324883 -0.000429839 -0.0422219 0.0349169 -0.00028168 -0.0273698 0.0312235 -0.000952705 -0.0267391 0.0143612 -0.00105244 0.0186951 0.00689988 -0.0011109 -0.0779453 0.014663 -0.00137887 0.00842564 0.0258445 -0.00107238 -0.0462225 0.00980545 -0.00158113 -0.0561697 0.005809 -0.00165921 -0.0142314 0.0114909 -0.00169065 -0.00330978 0.027848 -0.0017282 0.0264299 0.00972258 -0.00196109 -0.062067 0.0125082 -0.00198494 -0.0249792 0.0122768 -0.00206797 -0.0322322 0.0125632 -0.00219287 -0.00991015 0.0199027 -0.00223228 -0.065619 0.00972103 -0.00226787 -0.06664 0.0139131 -0.00233081 0.009707510000000001 0.0349608 -0.0023033 -0.0550711 0.0357611 -0.00284591 -0.06958739999999999 0.0109337 -0.00313658 0.0123831 0.0152878 -0.00325266 -0.000639164 0.0164744 -0.00354678 -0.0651674 0.00553443 -0.00434877 0.0392681 0.00656793 -0.0034004 -0.0624097 0.0143354 -0.00410027 0.052311 0.0146156 -0.00425687 -0.0110681 0.0377954 -0.0043501 -0.0020508 0.015115 -0.00444422 -0.0785667 0.0168482 -0.00471578 -0.008727459999999999 0.0133588 -0.00486541 0.0192794 0.0102326 -0.00475235 0.0259901 0.00777948 -0.00497525 -0.0797755 0.0244877 -0.0052286 0.0545416 0.0234287 -0.00513856 -0.0361953 0.00904286 -0.00543656 -0.016404 0.0117933 -0.00521097 0.0361763 0.0357574 -0.00563068 0.0458779 0.0101474 -0.00602624 -0.0598053 0.00448538 -0.00669265 -0.0730234 0.0300997 -0.00671975 -0.0647944 0.0149968 -0.00743572 0.0219428 0.00498754 -0.00806977 -0.06766220000000001 0.0106835 -0.008580020000000001 0.0185363 0.00804532 -0.00900922 -0.0527441 0.0382868 -0.00967438 -0.0310472 0.0412759 -0.009690270000000001 -0.0470756 0.00574739 -0.009825469999999999 -0.0777201 0.0238208 -0.010337 -0.0646559 0.00738197 -0.0103691 -0.0715108 0.0301524 -0.0108524 -0.06519229999999999 0.0107074 -0.0112352 0.0223598 0.00496048 -0.0115762 0.0360388 0.034027 -0.011811 0.0150563 0.0411225 -0.0119389 -0.07108730000000001 0.0142927 -0.011481 0.000850754 0.00890493 -0.0122581 0.0177891 0.00726338 -0.0126044 0.0285097 0.0071727 -0.0126077 -0.0410848 0.00487059 -0.01325 0.0245576 0.00385279 -0.0133342 -0.0301914 0.00695184 -0.0134526 -0.00467313 0.044297 -0.0140263 0.0415073 0.0128325 -0.0139319 -0.0627506 0.0126489 -0.0144402 0.0213321 0.0408733 -0.0145153 -0.0120242 0.00709154 -0.0145254 0.0314471 0.00762861 -0.0143606 -0.0539791 0.00638859 -0.0153705 -0.0588177 0.00913193 -0.0158483 0.0424843 0.0267153 -0.0161677 0.0082135 0.0752128 -0.0160709 -0.0693691 0.0267104 -0.0163112 0.021127 0.00658374 -0.0163956 0.0418119 0.0180916 -0.0166653 0.00513625 0.0449469 -0.0171438 -0.009394380000000001 0.0462661 -0.0174416 -0.0497054 0.0373642 -0.0174198 -0.06569369999999999 0.0159871 -0.0177387 0.0346114 0.0053358 -0.0178439 0.0247259 0.00729322 -0.018247 0.0346901 0.00258831 -0.0182074 -0.0318958 0.0424624 -0.0183988 -0.00142899 0.0496692 -0.0188182 -0.018825 0.0447569 -0.0188285 0.0147456 0.0461032 -0.0188626 0.015416 0.041072 -0.0190811 -0.00419709 0.06868580000000001 -0.0195945 0.0084326 0.064095 -0.0197498 -0.00217441 0.0583864 -0.0198208 0.00539755 0.0587622 -0.0200137 0.0324539 0.00354185 -0.020151 -0.0145671 0.0500049 -0.0203386 -0.00326709 0.07024469999999999 -0.0209148 0.00523036 0.0681576 -0.0208447 0.0121045 0.0546374 -0.0209724 0.009706330000000001 0.0633876 -0.020604 -0.0121123 0.00591309 -0.0212498 -0.0289526 0.00565549 -0.0216078 -0.0380775 0.00479088 -0.0216875 -0.00997672 0.0619769 -0.0220658 0.00705093 0.0456869 -0.0223002 -0.0558455 0.0110476 -0.0223137 -0.0154618 0.0494217 -0.0229336 0.00417573 0.0589573 -0.0231427 0.0278288 0.0125965 -0.0231751 0.027241 0.0309726 -0.0233259 0.0160686 0.00756079 -0.0234095 0.0318943 0.0199392 -0.0234462 -0.00393483 0.0583985 -0.0235915 -0.0597066 0.0170609 -0.0240196 -0.0108777 0.0466362 -0.024123 -0.00330273 0.0464733 -0.0242099 -0.0321428 0.0398591 -0.0244244 0.00347947 0.0416421 -0.024564 -0.0175604 0.0433407 -0.0253979 -0.0453083 0.0344803 -0.0256103 0.0267734 0.0284514 -0.0259312 -0.0445208 0.00878379 -0.025959 -0.0133125 0.00624018 -0.0265967 -0.0369666 0.00635268 -0.0273245 -0.0066598 0.0412078 -0.0277597 -0.0467651 0.0304517 -0.0275944 -0.0515878 0.0207552 -0.0282687 0.0208205 0.0174814 -0.0290859 0.0112094 0.012597 -0.0293048 -0.0474855 0.0256026 -0.0296506 -0.0466043 0.0156453 -0.0304236 0.0134394 0.031696 -0.0304518 -0.0291908 0.00746031 -0.03126 -0.044124 0.016095 -0.0321715 -0.043346 0.0242104 -0.0322352 -0.0402733 0.0141242 -0.0323149 0.01052 0.0200521 -0.0324768 -0.0397188 0.0271188 -0.0325431 -0.0291932 0.0340382 -0.0332479 -0.0329826 0.0117351 -0.0338676 -0.0346121 0.0252676 -0.0341522 -0.00293196 0.033596 -0.0341882 -0.0361716 0.0179088 -0.0344969 -0.0256263 0.0309923 -0.0345138 -0.00958586 0.0123416 -0.0348872 -0.0128566 0.0339912 -0.0349524 -0.0273994 0.0177976 -0.0349556 -0.000677158 0.0209767 -0.0350004 -0.028049 0.008761420000000001 -0.0353194 -0.0100316 0.0154749 -0.0354214 -0.0195455 0.0173172 -0.0355775 -0.0309821 0.0107592 -0.0360305 -0.0150581 0.0232372 -0.0363938 -0.0285041 0.0132933 -0.0374738 -0.00607371 0.0123945 -0.041317 -0.0210454 0.0131228 -0.0425886 -0.0120136 0.0129537 -0.0475164 -0.00753527 0.00853843 -0.0492593 -0.00704914 0.009380670000000001 -0.0496752 -0.0170405 0.0106038 -0.0498676 -0.0259318 0.00619626 -0.052402 -0.022331 0.00866719 -0.0516897 -0.011391 0.0103437 -0.0559595 -0.0106346 0.00698866 -0.0596531 -0.0214295 0.0059579 -0.066312 -0.0158462 0.00759335 -0.0672852 -0.00331292 0.00667068 -0.0687074 -0.0027598 0.00829441 -0.0687083 -0.008451500000000001 0.00881385 -0.07028570000000001 -0.00694567 0.00665748 -0.02471 0.00101921 0.00688758 -0.00641783 -0.0341512 0.0233596 -0.024018 0.00854392 0.00722419 -0.0251696 0.009421270000000001 0.00784613 --0.019815 0.0686939 0.0189821 -0.0416697 -0.017118 0.00864259 --0.00440288 -0.06984319999999999 0.0205811 --0.0033606 0.0600219 0.0217676 -0.0268544 0.00322876 0.008082499999999999 -0.00855449 0.0107052 0.00928038 -0.0219179 0.00585482 0.0121236 -0.0199208 0.0175811 0.0336776 -0.0210521 -0.0362113 0.0256186 -0.0339797 -0.00194129 0.0163861 -0.03202 0.000337126 0.0126992 -0.0119633 0.0163586 0.0147908 -0.0248778 0.0056119 0.0321775 -0.00892971 -0.0563678 0.0287948 -0.0174837 0.027107 0.0210333 --0.0170518 0.00346089 0.00554363 -0.0144974 -0.0120686 0.0314959 -0.00336155 -0.00103205 0.0364574 -0.00707711 -0.0204903 0.0185209 -0.010517 -0.00309481 0.0232445 --0.00559352 0.0373259 0.0172753 --0.00523735 -0.0230725 0.0111224 -0.0151072 -0.0538804 0.0213778 -0.0347571 -0.0188174 0.0105515 -0.0278657 -0.0183642 0.0156758 --0.00338013 -0.0543805 0.0329679 --0.0196332 0.0593213 0.0251138 -0.06481629999999999 -0.0143432 0.00627944 --0.00336175 -0.0187472 0.00979996 --0.0059938 -0.0214388 0.00941436 -0.0204933 0.0262773 0.00994486 -0.0153554 0.00838654 0.0105168 --0.064082 0.064994 0.00682263 --0.0406296 0.0703091 0.0249838 --0.0197677 0.0563929 0.0156108 --0.0506931 0.0781816 0.0304629 -0.0171972 -0.00100568 0.011485 -0.0314619 -0.0225976 0.00774901 --0.00980694 0.0515267 0.0104574 --0.00435185 0.0493969 0.0137744 -0.0449063 -0.0117353 0.00859937 -0.00159087 -0.0450385 0.027858 --0.00469537 -0.06372510000000001 0.0233918 -0.0424219 -0.0285632 0.00857374 -0.0603894 -0.00835109 0.009350529999999999 --0.0147113 -0.0156046 0.009183759999999999 --0.0528157 0.0611754 0.00480955 --0.0173765 -0.008871489999999999 0.00520522 -0.0108104 0.02268 0.0130558 --0.00899905 -0.0208443 0.00915416 --0.0449914 0.0768094 0.0302276 --0.0408502 0.06658 0.008368489999999999 --0.0199988 -0.0118916 0.004906 -0.00337131 0.0455887 0.0238561 -0.00477413 -0.0721541 0.0211645 --0.00344193 -0.049333 0.032475 -0.0427245 -0.0268877 0.00738607 -0.0272704 -0.0238375 0.00669928 --0.00610544 -0.0476638 0.0181008 --0.00760153 0.0503529 0.00747858 -0.0131109 -0.0422224 0.0405109 -0.00214561 -0.0490294 0.0151357 --0.0598224 0.0805424 0.0511855 --0.0204542 0.0588165 0.013102 -0.059357 -0.0190886 0.00813027 --0.00100716 0.0422264 0.0325724 -0.0325535 -0.0244764 0.012522 --0.000431427 -0.0574818 0.0137747 -0.0114251 0.0275734 0.00440942 -0.00337666 -0.0559724 0.0148659 --0.0262911 0.0586227 0.0207785 --0.0699467 0.0813567 0.0499003 -0.0494602 -0.0133111 0.00757754 -0.00758285 0.0333008 0.0104911 -0.00657287 0.032122 0.00603963 -0.000332803 -0.0511328 0.0180756 --0.021764 0.0620607 0.0118108 --0.0454672 0.075167 0.035911 -0.00139884 0.045926 0.0128133 -0.0176314 0.0311493 0.00370344 --0.0159418 -0.0158578 0.00793814 --0.0229387 0.06916410000000001 0.0166572 --0.00133409 -0.0449329 0.0187829 --0.0538019 0.0611146 0.00198764 -0.0305208 -0.00256491 0.0101919 -0.0623596 -0.00697151 0.00683979 -0.0236819 -0.00777996 0.0526871 -0.0118138 -0.0144241 0.0430193 -0.0137156 -0.00365078 0.00732253 --0.0257884 0.0686739 0.0150694 --0.0530331 0.060812 0.00248197 --0.000421194 -0.0523335 0.008791770000000001 -0.0193846 -0.00072024 0.0649221 -0.00485856 0.0133946 0.0114741 --0.0053823 -0.0743714 0.0141262 -0.016958 0.0166471 0.00740593 -0.0429338 -0.0266961 0.0110582 --0.06504749999999999 0.05473 0.00191127 -0.00924818 0.0356698 0.00715588 --0.042468 0.0652669 0.00790867 -0.00699205 0.0348997 0.00576165 --0.012123 0.00171435 0.00688121 -0.017741 0.00126373 0.0717161 --0.00477874 -0.0228765 0.0123522 --0.05496 0.0793832 0.0329037 --0.0253736 -0.000654191 0.00342534 -0.0220159 -0.0128389 0.0555838 -0.0187915 0.00366305 0.06539010000000001 --0.0635923 0.0794618 0.0351284 -0.0187293 0.00901455 0.0689246 --0.0507436 0.0790633 0.0364811 -0.00440962 0.0291856 0.00589534 --0.0610541 0.08157639999999999 0.0467801 --0.0264169 0.06418980000000001 0.0180225 -0.0590681 -0.0129818 0.009692930000000001 -0.0316732 -0.013669 0.008927310000000001 --0.0368828 0.0732351 0.028231 -0.0147007 -0.0293577 0.0425282 --0.00226105 0.042112 0.008184220000000001 --0.022404 0.068624 0.0211714 -0.018834 0.0296379 0.0101126 -0.0545664 -0.023882 0.00596013 --0.0610274 0.0626039 0.00623226 -0.0209345 -0.0123916 0.0558755 --0.064258 0.0639612 0.00701622 --0.0530259 0.07099660000000001 0.0104874 --0.000350232 0.0328643 0.009503569999999999 -0.0179821 0.0260225 0.00525665 --0.071629 0.0809096 0.0500374 -0.0431333 -0.00662611 0.0109755 --0.0367738 0.072104 0.0272887 --0.00147996 0.0424733 0.00778004 --0.0489442 0.0792518 0.0424775 -0.0178184 0.008309230000000001 0.0698262 --0.00256208 -0.0518644 0.0119693 --0.0024457 0.0347988 0.0115191 --0.0226391 0.067054 0.0236986 --0.0250562 0.070839 0.0181046 -0.0157661 -0.010775 0.0444953 --0.0587069 0.0610686 0.00549325 --0.0561989 0.0607157 0.00436391 -0.0028322 0.0311045 0.0076099 --0.061857 0.079748 0.0514834 --0.0580072 0.07448539999999999 0.0170926 -0.017366 0.0281829 0.00449304 -0.0175246 0.0303053 0.00632184 --0.0583716 0.0812348 0.0494755 --0.06276379999999999 0.08110589999999999 0.0418948 -0.009583370000000001 0.0391723 0.00889538 -0.0164997 0.0327763 0.00400793 --0.0100537 -0.019407 0.0104569 -0.0535082 -0.023589 0.00757618 --0.0184567 0.0672393 0.0165986 --0.0660887 0.06395149999999999 0.00557639 --0.008500499999999999 0.0591911 0.0132991 -0.0527123 -0.00658592 0.00801901 -0.00664445 0.0147496 0.00979726 --0.0323364 0.06468409999999999 0.013176 --0.06849810000000001 0.0817682 0.0541475 -0.0424951 -0.00680449 0.0104665 --0.01583 0.06382989999999999 0.0140017 --0.0408586 0.07478079999999999 0.0276312 --0.0213675 0.00505684 0.00440033 --0.0609542 0.0784149 0.029815 -0.0458286 -0.0196104 0.0115924 -0.0619857 -0.0044448 0.00717137 --0.0549453 0.0736446 0.0144159 --0.0660739 0.0797747 0.0511232 --0.0150243 -0.0138696 0.00597473 --0.0208919 0.06642729999999999 0.014553 --0.0583912 0.07667309999999999 0.0277458 --0.00499489 -0.0492059 0.0154875 --0.0177596 -0.0149926 0.00640227 --0.0656257 0.0638276 0.00437301 --0.00111824 -0.0505712 0.010634 --0.0234714 0.0595273 0.0150887 --0.0117477 -0.00786715 0.0107629 --0.0329423 0.0662408 0.012525 --0.0588644 0.0778049 0.0265316 --0.038272 0.07101209999999999 0.0277124 -0.0147178 0.0228905 0.00513556 --0.00242697 -0.0228032 0.0106496 --0.00998317 -0.0196685 0.00798312 -0.00194711 0.0338412 0.00734265 --0.0101071 0.0571173 0.0108272 --0.000192036 0.0305177 0.010316 --0.06622359999999999 0.0609953 0.00234663 --0.0383437 0.071981 0.0290737 -0.0464353 -0.0271448 0.00729223 --0.0113654 0.0558876 0.00985606 --0.0600686 0.0581853 0.00037707 -0.0184892 0.00651809 0.072001 --0.0272353 0.0661385 0.0125002 -0.0386787 -0.009397559999999999 0.0110365 --0.00702298 -0.0554164 0.0301677 --0.0387296 0.0725599 0.0291973 --0.0195884 -0.009713039999999999 0.00731553 -0.0009803979999999999 0.0340005 0.008311529999999999 --0.00251349 -0.0493306 0.0137872 --0.0208118 0.00468072 0.00662791 -0.0145465 0.0247675 0.00685396 -0.0539643 -0.00601143 0.00911787 -0.0615879 -0.00432066 0.00875869 --0.0649217 0.0800024 0.0383643 -0.00460493 0.008497380000000001 0.0127005 --0.0606311 0.0803611 0.0379233 --0.00316884 0.0400824 0.00969248 --0.0308482 0.067467 0.0126012 -0.0120049 0.00511369 0.00824306 -0.0117314 0.0134932 0.00784586 -0.0067401 0.0222359 0.00786688 -0.000365941 0.0444987 0.0334101 -0.00589042 0.0427357 0.0325284 -0.0134556 0.013691 0.0071386 -0.0155774 0.00572549 0.00675779 --0.0442054 0.0654197 0.00607699 -0.00863004 0.0184766 0.00878081 --0.0111016 -0.0170398 0.0107756 --0.0162643 0.06208 0.0123266 --0.06706429999999999 0.0628756 0.0047451 --0.0673064 0.07917689999999999 0.0489333 --0.0566743 0.0588231 0.00264455 --0.07138410000000001 0.080001 0.0523997 --0.0690781 0.0794039 0.0521145 --0.0589744 0.07029879999999999 0.0123753 --0.0108026 0.05228 0.00636676 --0.0113486 0.0541547 0.00728553 --0.0299136 0.06862409999999999 0.0165753 -0.0505332 -0.0225927 0.00635398 -0.0180077 0.0031318 0.07043870000000001 --0.0235313 0.0640143 0.012641 --0.0235569 0.00584404 0.00381922 -0.0384718 -0.0113423 0.0144484 -0.0182407 0.00232532 0.0728388 --0.0235752 0.00407866 0.00373027 --0.011585 0.0522432 0.00647843 -0.0400312 -0.00904366 0.0126741 --0.0178591 -0.000359808 0.00797485 --0.067167 0.06255139999999999 0.00392853 --0.0596438 0.0779391 0.0290601 -0.0013543 0.0302152 0.00901705 -0.0168301 0.00522322 0.0737244 -0.0174324 0.00448014 0.0738384 --0.0618546 0.0649931 0.00590465 -0.0194429 0.0304209 0.00452872 --0.0236633 0.0648084 0.0124456 --0.00249493 -0.0562542 0.012985 --0.0025263 -0.0246783 0.0125409 --0.0396392 0.0718092 0.02876 --0.0158083 -0.0164708 0.00645267 -0.016879 0.0245859 0.0055459 --0.06884990000000001 0.0811361 0.0461884 -0.0290982 -0.00647478 0.008279069999999999 --0.041817 0.0761358 0.0343691 --0.0642688 0.0653922 0.00517065 --0.0162175 0.00239503 0.00694561 -0.00467524 0.0360758 0.00643588 --0.0222973 0.0035638 0.00646752 --0.0708092 0.0801688 0.0482801 --0.0549524 0.07870829999999999 0.0296023 --0.06310540000000001 0.0672415 0.00811831 --0.0155444 -0.0163359 0.0060847 --0.0574097 0.07880470000000001 0.0473507 --0.0558952 0.0591814 0.001764 --0.0177409 0.0619627 0.0144786 --0.00178349 -0.0487397 0.0125937 --0.0111058 0.0522074 0.008299040000000001 --0.0260139 0.00360897 0.00461987 --0.0204566 0.00423454 0.00564674 -0.00612936 0.0370467 0.00680554 -0.010446 0.0313554 0.00705031 --0.0569353 0.05965 0.00118235 --0.0506685 0.0625792 0.00279292 --0.0249761 0.00485573 0.00443819 -0.0172421 0.00725128 0.07382619999999999 --0.0219613 0.06430039999999999 0.0138184 --0.00260185 -0.0513557 0.0142694 --0.0167422 0.00259292 0.00779623 -0.00214524 0.0341103 0.00650831 --0.0236765 0.00572293 0.004305 --0.0616879 0.0784644 0.0353636 --0.0125522 0.0533024 0.00573952 --0.00373263 -0.048886 0.014509 --0.00253347 -0.0472982 0.0131992 --0.0128746 -0.017623 0.00940414 --5.43548e-05 0.0393803 0.00728201 --0.0258702 0.00405717 0.00525282 -0.0183599 0.0265636 0.00640112 -0.0459896 -0.0257989 0.0100883 --0.0295424 0.06805940000000001 0.0247957 --0.0245383 0.0634107 0.0123732 -0.0066096 0.0377811 0.00691952 --0.0450015 0.0646553 0.00575343 --0.0622505 0.0661482 0.00839783 --0.0256248 0.0608105 0.0161665 -0.017488 0.00853314 0.07209649999999999 --0.0596734 0.07050969999999999 0.009924850000000001 --0.06657979999999999 0.06286890000000001 0.00493615 --0.0624322 0.0664941 0.0080812 -0.0436037 -0.00911409 0.009504510000000001 --0.0258241 0.00183578 0.00455937 --0.07027029999999999 0.07969130000000001 0.0546337 --0.027947 0.06304949999999999 0.0231884 --0.0601839 0.07046330000000001 0.0106076 --0.019796 -0.0130118 0.0069497 --0.0183149 0.06305479999999999 0.012418 --0.0302535 0.0701272 0.02364 --0.0574291 0.07908510000000001 0.0314511 --0.0506885 0.0650762 0.00396145 --0.021101 0.0616869 0.0137094 --0.0331684 0.0670427 0.023997 -0.0134393 0.00644533 0.00718965 --0.0111807 -0.0194906 0.00818236 --0.0255718 0.00304117 0.00332801 --0.0126697 -0.015488 0.00653208 --0.0247074 0.00660999 0.00551935 -0.0173416 0.0031807 0.0727906 -0.0172416 0.0236783 0.00588169 -0.0190309 0.0293428 0.00437137 -0.016715 0.00646681 0.0747173 --0.0362286 0.072292 0.023504 --0.0193589 -0.00042516 0.00470745 --0.0218861 0.06436310000000001 0.0125137 --0.0102557 0.0512168 0.00711881 -0.0404202 -0.00631757 0.0116411 -0.0462272 -0.00679819 0.0101561 --0.0259792 0.0656558 0.0150971 -0.0162732 0.0229634 0.00624384 -0.00353474 0.0364474 0.008433390000000001 -4.6368e-06 0.0388726 0.009730829999999999 --0.0216501 0.0633078 0.012475 --0.06535530000000001 0.0635995 0.0060088 --0.0129397 0.0533345 0.00604151 --0.00189413 -0.0244631 0.013557 --0.0610974 0.0673557 0.00916116 -0.0169636 0.00823874 0.0726305 --0.0262169 0.00566462 0.00486021 --0.00105663 -0.050339 0.013034 --0.0522352 0.0618469 0.00239028 --0.06586110000000001 0.0623674 0.00600767 --0.0308719 0.0671807 0.0240148 --0.0271033 0.0631674 0.0232081 -0.000463176 0.0377435 0.00713404 -0.0197653 -0.0105149 0.0573133 --0.0261272 0.00574879 0.00514751 --0.0256133 0.00236555 0.00535812 -0.0395658 -0.00664927 0.0115095 --0.0346515 0.0704144 0.0260764 --0.0676857 0.0619198 0.00410476 --0.0352382 0.07226829999999999 0.0261851 --0.0489272 0.0632235 0.00329626 --0.0514659 0.0617489 0.00295197 --0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1 1654 1 1654 -3 0 4 1654 -1 26 15 543 25 -2 227 308 190 188 -4 331 305 504 150 -5 142 328 128 138 -6 490 439 18 571 -7 364 289 287 414 -8 296 336 304 298 -9 564 419 300 381 -10 398 569 373 591 -11 486 473 639 422 -12 338 89 566 489 -13 332 554 543 424 -14 80 67 71 302 -15 149 146 109 108 -16 98 90 375 342 -17 341 308 325 313 -18 147 314 126 116 -19 124 318 156 131 -20 245 322 206 308 -21 348 311 516 186 -22 135 150 319 151 -23 147 314 307 311 -24 464 588 301 528 -25 461 33 35 333 -26 196 192 373 314 -27 108 81 302 122 -28 366 258 227 357 -29 511 107 512 353 -30 146 170 354 172 -31 297 175 156 130 -32 130 297 175 308 -33 318 159 319 195 -34 154 123 122 342 -35 261 308 259 260 -36 132 142 128 318 -37 241 250 240 205 -38 226 227 248 324 -39 575 609 475 49 -40 375 91 123 90 -41 260 308 255 251 -42 517 612 63 482 -43 120 117 131 297 -44 318 131 297 156 -45 147 319 311 307 -46 131 120 297 130 -47 120 297 111 117 -48 308 174 206 360 -49 148 313 325 175 -50 148 313 175 174 -51 302 80 122 81 -52 107 353 511 110 -53 322 231 198 197 -54 61 58 564 57 -55 240 386 212 221 -56 121 297 143 117 -57 121 297 117 111 -58 307 235 314 182 -59 307 314 166 182 -60 417 308 175 316 -61 308 175 360 417 -62 601 9 458 1 -63 459 429 536 599 -64 211 242 206 308 -65 528 588 301 356 -66 316 297 308 175 -67 197 188 308 228 -68 231 308 228 197 -69 231 197 322 308 -70 188 197 308 361 -71 322 361 308 197 -72 259 308 256 255 -73 298 306 304 299 -74 302 342 146 122 -75 251 322 245 308 -76 298 306 299 236 -77 342 302 169 129 -78 157 319 331 150 -79 190 195 324 227 -80 146 342 354 154 -81 190 297 308 324 -82 236 254 306 299 -83 354 179 201 322 -84 308 297 188 361 -85 361 188 164 297 -86 195 165 190 318 -87 307 215 257 235 -88 194 235 215 307 -89 174 129 148 313 -90 169 313 129 174 -91 322 255 251 201 -92 366 265 308 258 -93 227 308 258 366 -94 258 308 249 265 -95 227 308 228 258 -96 448 192 373 196 -97 228 308 249 258 -98 296 298 514 336 -99 125 150 348 126 -100 125 160 348 150 -101 244 264 242 316 -102 264 316 244 271 -103 224 233 225 219 -104 107 353 163 199 -105 217 223 219 225 -106 308 174 313 206 -107 206 313 179 174 -108 241 230 212 233 -109 241 233 212 218 -110 267 278 312 273 -111 267 312 262 273 -112 206 179 322 245 -113 242 245 206 308 -114 144 319 159 157 -115 265 308 266 272 -116 218 219 392 233 -117 264 324 316 271 -118 324 308 264 316 -119 297 318 117 131 -120 128 117 318 124 -121 354 207 201 177 -122 207 177 354 184 -123 155 163 353 203 -124 131 297 156 130 -125 395 330 236 202 -126 164 142 318 190 -127 253 314 234 311 -128 307 314 147 166 -129 331 234 253 254 -130 306 236 298 331 -131 156 297 316 175 -132 324 319 318 316 -133 297 324 316 308 -134 373 314 102 125 -135 167 155 378 192 -136 278 324 272 269 -137 278 276 272 324 -138 319 159 157 336 -139 267 257 312 243 -140 307 215 243 257 -141 156 297 318 316 -142 207 354 170 184 -143 124 144 139 156 -144 267 312 250 243 -145 144 151 139 319 -146 318 316 319 144 -147 316 139 319 144 -148 139 144 316 156 -149 316 191 312 319 -150 316 191 317 156 -151 313 308 175 174 -152 253 234 331 311 -153 331 395 234 236 -154 272 265 308 366 -155 103 140 133 510 -156 235 199 246 314 -157 246 237 314 199 -158 144 151 319 157 -159 92 157 151 144 -160 92 159 157 144 -161 395 234 236 330 -162 395 330 202 348 -163 348 330 202 209 -164 324 312 316 271 -165 266 308 324 272 -166 324 366 308 227 -167 242 264 245 308 -168 272 266 269 324 -169 135 151 319 139 -170 40 35 28 29 -171 88 148 129 342 -172 325 342 148 88 -173 314 116 147 166 -174 77 353 320 94 -175 331 262 319 306 -176 319 317 139 316 -177 450 329 482 328 -178 183 307 147 166 -179 188 361 176 197 -180 169 179 313 174 -181 314 196 348 373 -182 102 84 116 353 -183 102 77 84 353 -184 191 147 319 317 -185 307 262 257 312 -186 307 257 246 235 -187 307 257 262 246 -188 128 318 144 124 -189 246 314 237 253 -190 314 203 237 234 -191 142 128 318 138 -192 253 237 234 314 -193 306 319 331 336 -194 307 314 235 246 -195 316 250 312 191 -196 450 403 349 329 -197 121 297 101 143 -198 382 164 101 297 -199 369 198 322 193 -200 264 266 324 269 -201 322 354 170 207 -202 322 170 193 207 -203 353 84 116 110 -204 70 302 68 83 -205 331 311 234 395 -206 323 493 282 301 -207 269 278 324 271 -208 278 312 324 271 -209 207 170 180 184 -210 207 170 193 180 -211 325 130 175 308 -212 146 354 170 154 -213 354 302 342 146 -214 161 348 510 181 -215 182 314 199 235 -216 322 354 369 170 -217 231 207 322 198 -218 313 322 375 341 -219 375 361 341 322 -220 322 207 193 198 -221 297 143 164 101 -222 221 213 240 232 -223 190 188 308 297 -224 341 361 375 382 -225 341 308 313 322 -226 134 158 184 354 -227 247 308 261 249 -228 263 308 260 251 -229 318 319 159 144 -230 309 262 306 319 -231 250 204 243 312 -232 448 192 167 378 -233 37 333 620 35 -234 37 33 333 35 -235 297 318 316 324 -236 167 448 378 153 -237 212 218 233 219 -238 88 325 342 494 -239 246 307 314 253 -240 307 253 246 262 -241 126 311 150 348 -242 388 611 336 514 -243 348 234 420 314 -244 236 254 331 306 -245 348 314 311 234 -246 211 308 360 417 -247 373 102 320 125 -248 316 250 191 438 -249 250 205 191 438 -250 254 262 306 309 -251 254 309 306 310 -252 299 254 306 310 -253 331 262 306 254 -254 292 294 295 293 -255 194 307 215 204 -256 304 306 384 299 -257 267 312 257 262 -258 353 192 378 155 -259 319 159 336 195 -260 353 192 373 378 -261 336 185 388 195 -262 312 250 271 267 -263 271 250 312 316 -264 261 249 308 265 -265 268 308 265 261 -266 247 308 249 228 -267 227 195 324 226 -268 366 324 415 337 -269 337 366 324 357 -270 190 195 318 324 -271 156 318 124 144 -272 263 266 308 264 -273 251 263 308 264 -274 197 198 322 369 -275 154 354 369 342 -276 188 308 228 227 -277 79 328 138 92 -278 316 317 139 156 -279 360 175 308 174 -280 255 251 308 322 -281 255 256 252 308 -282 247 228 231 308 -283 247 308 231 256 -284 134 149 394 354 -285 83 162 96 302 -286 161 373 140 348 -287 88 67 302 68 -288 302 97 88 68 -289 512 166 314 182 -290 420 192 314 234 -291 348 330 420 234 -292 192 314 234 203 -293 91 123 105 115 -294 394 70 302 81 -295 309 273 262 319 -296 319 262 312 273 -297 67 302 68 70 -298 271 278 312 267 -299 66 57 326 58 -300 188 136 176 361 -301 157 331 185 504 -302 136 361 188 164 -303 244 250 271 316 -304 71 302 67 70 -305 244 213 232 240 -306 81 302 71 70 -307 354 149 108 146 -308 314 237 203 199 -309 506 378 435 629 -310 244 438 316 213 -311 97 302 169 162 -312 244 316 438 250 -313 313 129 342 169 -314 382 113 101 164 -315 506 435 378 94 -316 91 123 85 105 -317 308 264 245 251 -318 242 264 308 316 -319 450 349 482 329 -320 314 373 348 125 -321 92 138 159 144 -322 395 311 234 348 -323 278 273 324 312 -324 373 378 435 320 -325 147 311 319 135 -326 126 311 135 150 -327 126 135 311 147 -328 314 348 311 126 -329 83 302 82 70 -330 378 435 629 373 -331 195 159 165 318 -332 316 312 324 319 -333 156 175 316 387 -334 336 298 514 331 -335 88 342 129 302 -336 319 307 331 311 -337 253 314 311 307 -338 311 331 253 307 -339 297 341 308 130 -340 314 348 126 125 -341 147 314 311 126 -342 61 339 99 338 -343 250 204 312 191 -344 305 185 508 331 -345 211 242 308 316 -346 211 308 417 316 -347 213 316 211 417 -348 214 215 230 204 -349 244 316 242 211 -350 244 211 213 316 -351 465 501 344 502 -352 108 354 302 394 -353 313 129 148 342 -354 337 324 415 248 -355 337 258 366 357 -356 121 101 297 111 -357 382 101 111 297 -358 157 159 185 336 -359 226 336 195 324 -360 307 262 331 253 -361 307 262 319 331 -362 331 254 253 262 -363 248 336 552 296 -364 319 324 195 336 -365 248 296 226 336 -366 324 248 336 552 -367 147 183 191 307 -368 282 281 276 323 -369 281 323 282 301 -370 109 119 105 122 -371 297 143 117 318 -372 109 122 105 80 -373 308 366 324 272 -374 297 318 324 190 -375 297 190 164 318 -376 214 204 230 212 -377 224 212 214 230 -378 297 143 318 164 -379 264 308 324 266 -380 264 269 324 271 -381 132 117 143 318 -382 130 297 341 120 -383 341 130 120 98 -384 277 343 356 279 -385 325 308 175 313 -386 109 81 108 122 -387 109 122 108 146 -388 348 234 395 330 -389 341 111 120 297 -390 341 100 98 120 -391 341 111 100 120 -392 226 336 324 248 -393 318 319 324 195 -394 275 270 324 309 -395 309 336 324 319 -396 552 270 336 324 -397 273 309 275 324 -398 403 328 329 450 -399 382 111 341 297 -400 361 322 308 341 -401 361 341 308 297 -402 342 85 73 90 -403 342 73 85 80 -404 323 324 366 276 -405 361 297 164 382 -406 96 82 83 302 -407 45 647 44 42 -408 179 354 201 177 -409 53 621 54 347 -410 117 124 131 318 -411 156 144 316 318 -412 369 198 193 141 -413 342 302 88 67 -414 67 80 342 302 -415 73 80 342 67 -416 342 73 67 76 -417 372 528 289 285 -418 285 528 289 287 -419 355 98 325 494 -420 122 119 105 123 -421 394 82 134 302 -422 494 88 76 342 -423 109 81 122 80 -424 447 580 503 505 -425 114 118 141 145 -426 311 150 319 135 -427 108 122 302 146 -428 204 307 183 194 -429 191 204 307 183 -430 382 101 100 111 -431 382 111 100 341 -432 318 159 138 144 -433 588 281 301 356 -434 87 61 77 57 -435 318 159 165 138 -436 7 12 2 486 -437 316 191 319 317 -438 208 196 449 445 -439 322 369 354 313 -440 354 158 177 162 -441 354 169 162 179 -442 313 369 354 342 -443 179 162 354 177 -444 130 98 341 355 -445 325 130 341 355 -446 337 357 324 248 -447 324 357 227 248 -448 588 281 464 301 -449 375 341 382 98 -450 454 75 61 155 -451 353 77 84 74 -452 331 305 185 504 -453 311 331 319 150 -454 378 339 167 106 -455 318 190 142 165 -456 138 142 165 318 -457 18 12 397 14 -458 298 514 331 513 -459 118 137 141 168 -460 298 331 236 395 -461 395 298 331 513 -462 93 157 92 159 -463 354 158 184 177 -464 151 157 92 93 -465 78 93 151 92 -466 378 448 629 153 -467 102 314 126 125 -468 126 116 314 102 -469 61 72 303 75 -470 39 461 350 553 -471 350 39 33 461 -472 311 331 513 395 -473 311 331 305 509 -474 353 102 314 116 -475 204 215 243 307 -476 106 153 167 378 -477 97 162 83 302 -478 107 353 199 512 -479 297 188 164 190 -480 147 319 139 135 -481 77 353 87 74 -482 353 203 199 314 -483 512 314 353 199 -484 37 38 29 35 -485 485 140 373 125 -486 398 448 373 196 -487 196 570 373 398 -488 324 248 552 415 -489 415 270 552 324 -490 52 57 594 564 -491 285 289 414 287 -492 438 250 205 240 -493 524 425 25 17 -494 29 25 524 425 -495 87 77 61 353 -496 93 92 138 159 -497 93 92 79 138 -498 203 192 353 155 -499 192 353 314 203 -500 88 302 129 97 -501 169 342 354 302 -502 147 319 317 139 -503 435 426 629 373 -504 197 168 369 176 -505 369 176 361 197 -506 157 151 319 150 -507 307 319 312 191 -508 312 307 191 204 -509 628 373 441 374 -510 513 331 311 509 -511 49 594 413 46 -512 303 163 87 61 -513 146 342 154 122 -514 274 366 415 337 -515 274 258 366 337 -516 87 57 74 66 -517 304 306 336 384 -518 204 250 205 191 -519 110 74 66 87 -520 163 87 61 353 -521 204 205 250 241 -522 387 438 213 316 -523 150 160 348 311 -524 313 369 342 375 -525 313 322 369 375 -526 97 129 169 302 -527 504 305 393 150 -528 181 348 500 187 -529 610 527 42 44 -530 44 527 42 620 -531 311 305 456 509 -532 311 509 456 516 -533 365 512 166 116 -534 116 512 166 314 -535 509 305 508 331 -536 322 369 193 170 -537 535 526 581 632 -538 182 314 512 199 -539 497 441 373 540 -540 37 42 46 527 -541 500 209 187 348 -542 312 257 307 243 -543 323 366 281 276 -544 348 420 209 196 -545 366 279 276 272 -546 202 500 186 348 -547 386 406 221 232 -548 64 526 62 489 -549 336 159 185 195 -550 404 24 559 335 -551 404 24 607 559 -552 384 336 552 270 -553 244 240 438 213 -554 244 438 240 250 -555 430 461 620 333 -556 461 333 35 620 -557 61 564 64 334 -558 381 437 47 413 -559 279 277 265 258 -560 279 277 258 274 -561 186 500 181 348 -562 140 510 348 160 -563 377 410 36 350 -564 202 330 236 209 -565 380 345 614 468 -566 99 339 378 106 -567 378 106 418 99 -568 378 448 373 629 -569 194 235 307 182 -570 194 307 166 182 -571 194 307 183 166 -572 353 373 320 378 -573 68 97 83 302 -574 347 496 604 476 -575 161 181 411 373 -576 570 374 400 368 -577 40 38 35 29 -578 364 289 327 528 -579 324 309 319 273 -580 353 378 320 94 -581 358 91 471 375 -582 134 394 302 354 -583 394 149 108 354 -584 172 354 146 149 -585 382 358 471 375 -586 101 382 90 358 -587 651 346 638 390 -588 382 90 100 101 -589 334 594 564 475 -590 369 361 375 322 -591 322 197 369 361 -592 342 325 98 494 -593 325 313 148 342 -594 342 325 375 98 -595 115 369 123 367 -596 342 98 76 494 -597 369 375 576 115 -598 353 512 116 314 -599 336 304 552 296 -600 336 306 304 298 -601 226 514 336 296 -602 108 302 81 394 -603 181 411 373 374 -604 26 440 571 383 -605 26 383 346 440 -606 211 360 308 206 -607 87 74 57 77 -608 358 113 101 382 -609 195 388 336 226 -610 241 233 218 238 -611 155 339 378 353 -612 345 79 468 476 -613 213 316 417 175 -614 387 316 213 175 -615 312 307 262 319 -616 435 485 426 373 -617 435 373 125 485 -618 299 310 306 384 -619 26 425 25 34 -620 118 114 367 434 -621 26 34 25 608 -622 223 222 529 392 -623 527 38 37 35 -624 37 527 46 38 -625 342 123 90 375 -626 342 123 85 90 -627 335 350 33 35 -628 350 461 33 35 -629 85 91 90 123 -630 259 247 308 261 -631 629 628 448 373 -632 633 142 328 128 -633 629 497 628 373 -634 303 61 87 72 -635 236 254 234 331 -636 341 98 325 355 -637 373 570 400 569 -638 398 570 373 569 -639 49 413 527 46 -640 49 46 527 457 -641 49 626 48 527 -642 241 204 243 250 -643 49 527 48 457 -644 392 218 233 238 -645 233 392 238 223 -646 178 198 197 141 -647 198 197 141 369 -648 364 290 287 528 -649 419 381 564 413 -650 92 78 79 59 -651 192 373 314 353 -652 386 406 238 423 -653 367 369 137 391 -654 437 413 419 606 -655 413 437 47 606 -656 239 252 322 255 -657 454 61 339 155 -658 34 466 425 29 -659 221 386 232 240 -660 60 64 489 484 -661 484 65 60 64 -662 212 386 218 221 -663 241 240 386 212 -664 241 205 240 212 -665 607 24 16 470 -666 620 42 37 527 -667 37 333 42 620 -668 95 87 66 69 -669 113 164 382 361 -670 410 30 432 21 -671 371 1 522 458 -672 527 47 43 40 -673 596 425 17 15 -674 393 456 160 311 -675 110 95 87 66 -676 160 311 456 516 -677 512 511 365 166 -678 353 511 365 512 -679 128 144 318 138 -680 341 130 325 308 -681 87 61 57 58 -682 419 58 564 72 -683 414 289 327 364 -684 320 378 435 94 -685 364 528 287 289 -686 212 221 205 240 -687 134 172 149 354 -688 134 172 354 184 -689 319 147 191 307 -690 589 641 606 436 -691 347 79 59 476 -692 345 79 476 92 -693 92 138 144 328 -694 86 92 144 328 -695 32 399 34 38 -696 306 309 336 310 -697 347 604 468 476 -698 347 468 79 476 -699 614 345 79 468 -700 384 310 336 270 -701 439 25 26 422 -702 196 192 314 420 -703 348 420 196 314 -704 132 143 142 318 -705 164 142 143 318 -706 386 406 423 221 -707 35 527 38 40 -708 158 354 96 162 -709 169 302 354 162 -710 334 475 564 363 -711 155 61 303 75 -712 94 353 378 339 -713 224 233 219 212 -714 214 215 204 194 -715 204 243 230 241 -716 204 230 212 241 -717 391 474 369 136 -718 286 588 528 356 -719 35 620 527 47 -720 136 474 361 565 -721 566 526 632 64 -722 490 439 11 14 -723 209 330 420 348 -724 35 527 40 47 -725 76 342 73 98 -726 77 353 102 320 -727 268 308 261 260 -728 167 155 339 378 -729 465 289 385 344 -730 255 308 260 259 -731 335 24 470 33 -732 559 24 470 335 -733 522 1 371 428 -734 347 53 496 54 -735 559 24 607 470 -736 476 347 496 54 -737 312 204 243 307 -738 230 215 243 204 -739 241 218 212 386 -740 241 238 218 386 -741 29 33 28 23 -742 23 335 559 470 -743 297 382 361 341 -744 336 611 185 331 -745 388 185 336 611 -746 353 373 102 320 -747 373 102 314 353 -748 44 527 606 610 -749 74 110 84 353 -750 610 527 606 413 -751 325 341 375 98 -752 369 136 137 391 -753 169 354 342 313 -754 274 366 279 281 -755 281 366 279 276 -756 322 313 206 308 -757 414 289 344 385 -758 114 546 367 434 -759 367 391 434 369 -760 155 163 303 61 -761 47 620 527 44 -762 384 304 552 336 -763 384 310 306 336 -764 99 378 339 94 -765 506 94 378 99 -766 365 353 512 116 -767 378 99 418 506 -768 478 23 559 470 -769 328 86 633 128 -770 265 308 268 266 -771 268 308 263 266 -772 564 419 436 58 -773 460 75 564 65 -774 339 61 99 94 -775 518 564 65 460 -776 643 216 229 392 -777 342 88 76 67 -778 26 422 11 439 -779 26 440 439 571 -780 411 161 373 441 -781 442 467 412 10 -782 350 377 24 33 -783 225 409 217 223 -784 410 377 24 350 -785 24 350 33 335 -786 371 522 523 458 -787 278 324 273 276 -788 273 324 275 276 -789 170 354 172 184 -790 169 179 354 313 -791 607 16 24 580 -792 367 391 137 118 -793 35 620 37 527 -794 548 33 461 333 -795 414 385 344 294 -796 414 289 288 344 -797 65 64 484 454 -798 93 79 78 401 -799 375 382 358 90 -800 413 575 564 594 -801 187 181 368 189 -802 358 375 90 91 -803 275 276 324 323 -804 493 270 323 275 -805 532 323 276 275 -806 324 270 323 415 -807 275 323 324 270 -808 157 331 319 336 -809 454 339 61 338 -810 527 47 507 43 -811 74 87 110 353 -812 61 353 339 155 -813 444 445 618 379 -814 173 133 160 510 -815 352 604 468 347 -816 161 181 373 348 -817 23 335 470 33 -818 181 187 374 373 -819 29 35 28 33 -820 348 187 181 373 -821 562 10 412 447 -822 10 580 503 447 -823 399 351 34 38 -824 515 592 399 32 -825 434 112 637 474 -826 134 82 96 302 -827 224 230 233 212 -828 134 302 96 354 -829 302 354 162 96 -830 376 64 60 564 -831 606 640 589 45 -832 369 137 168 141 -833 113 361 583 136 -834 197 369 168 141 -835 12 7 4 14 -836 510 181 173 171 -837 61 339 353 94 -838 369 154 170 354 -839 404 607 24 21 -840 411 374 578 441 -841 500 186 189 480 -842 535 526 632 566 -843 628 441 497 483 -844 478 23 28 559 -845 28 335 559 23 -846 93 92 78 79 -847 554 473 631 453 -848 198 178 193 141 -849 187 444 209 500 -850 226 388 336 514 -851 287 464 285 528 -852 528 301 285 372 -853 497 629 426 373 -854 394 302 70 82 -855 64 61 454 75 -856 444 587 618 445 -857 467 458 371 523 -858 371 523 520 467 -859 371 520 551 467 -860 385 465 294 292 -861 468 604 345 476 -862 584 517 63 345 -863 176 136 137 369 -864 439 440 18 571 -865 490 26 11 439 -866 324 366 227 357 -867 606 413 419 436 -868 527 48 477 507 -869 527 477 48 457 -870 527 492 48 507 -871 527 626 48 492 -872 134 354 96 158 -873 62 64 489 60 -874 52 57 370 594 -875 326 52 55 564 -876 524 425 17 19 -877 373 441 161 540 -878 373 161 140 540 -879 66 326 55 58 -880 58 326 55 564 -881 310 309 336 270 -882 324 270 336 309 -883 157 336 185 331 -884 181 411 171 161 -885 640 589 641 606 -886 537 557 621 54 -887 282 285 340 288 -888 372 285 288 340 -889 382 100 98 341 -890 502 294 465 292 -891 43 34 351 38 -892 221 240 213 205 -893 438 240 205 213 -894 425 466 524 29 -895 354 302 146 108 -896 435 426 506 629 -897 497 506 426 629 -898 187 181 374 368 -899 517 79 614 345 -900 342 90 73 98 -901 180 141 178 152 -902 178 152 141 168 -903 193 180 141 178 -904 140 161 348 510 -905 9 442 13 362 -906 442 9 13 467 -907 408 505 503 580 -908 607 580 408 16 -909 327 289 414 385 -910 372 284 283 340 -911 359 89 526 566 -912 607 539 478 470 -913 140 373 125 348 -914 328 86 92 517 -915 527 47 44 606 -916 155 163 61 353 -917 367 391 118 434 -918 338 64 61 454 -919 64 338 484 454 -920 359 89 566 338 -921 489 526 566 64 -922 448 192 378 373 -923 350 39 377 33 -924 369 137 176 168 -925 377 350 553 39 -926 325 313 375 341 -927 340 288 625 282 -928 342 313 375 325 -929 524 466 19 20 -930 425 466 19 524 -931 348 395 186 202 -932 610 44 42 45 -933 409 433 217 223 -934 217 433 529 223 -935 582 375 471 115 -936 434 474 637 369 -937 382 375 471 582 -938 98 90 382 375 -939 382 100 90 98 -940 123 105 122 85 -941 122 85 105 80 -942 43 40 34 38 -943 369 474 361 136 -944 469 452 564 460 -945 46 41 527 457 -946 415 366 274 323 -947 191 387 316 438 -948 191 387 156 316 -949 434 391 474 369 -950 502 294 344 465 -951 502 294 292 293 -952 476 59 92 79 -953 306 309 319 336 -954 528 301 464 285 -955 301 282 464 285 -956 208 449 210 379 -957 210 379 220 208 -958 551 520 10 467 -959 359 89 339 106 -960 110 353 365 116 -961 353 511 110 365 -962 118 141 145 152 -963 34 28 466 29 -964 621 347 59 54 -965 59 621 79 347 -966 342 80 122 302 -967 369 123 154 342 -968 123 85 122 342 -969 122 342 85 80 -970 450 349 612 482 -971 564 55 436 413 -972 40 38 29 34 -973 606 641 413 436 -974 28 35 335 33 -975 34 25 32 29 -976 487 548 495 479 -977 187 209 196 348 -978 461 479 430 495 -979 311 513 509 186 -980 395 311 348 186 -981 187 196 209 444 -982 485 540 426 373 -983 21 580 24 447 -984 412 447 21 562 -985 412 562 21 446 -986 447 580 24 10 -987 46 527 610 413 -988 229 392 216 222 -989 323 281 366 274 -990 281 301 274 323 -991 599 625 429 282 -992 608 25 32 34 -993 372 288 284 340 -994 227 324 190 308 -995 373 196 348 187 -996 425 25 34 29 -997 628 448 373 591 -998 591 448 373 398 -999 477 43 41 527 -1000 80 71 81 302 -1001 457 477 41 527 -1002 647 487 430 479 -1003 628 373 497 441 -1004 578 628 441 374 -1005 410 24 335 350 -1006 393 311 160 150 -1007 367 118 137 141 -1008 343 488 356 396 -1009 87 72 61 58 -1010 488 588 356 396 -1011 476 54 59 347 -1012 94 353 61 77 -1013 110 353 87 107 -1014 251 245 322 201 -1015 245 179 322 201 -1016 11 422 486 14 -1017 287 588 464 528 -1018 10 467 412 551 -1019 13 551 412 467 -1020 371 467 551 13 -1021 551 10 8 412 -1022 113 164 361 136 -1023 425 25 15 26 -1024 140 348 125 160 -1025 451 588 528 286 -1026 180 152 145 141 -1027 607 16 539 470 -1028 374 570 400 373 -1029 373 374 556 400 -1030 374 373 556 628 -1031 441 628 578 483 -1032 497 642 418 629 -1033 167 89 106 339 -1034 346 440 390 521 -1035 369 123 342 375 -1036 583 382 498 361 -1037 564 75 72 61 -1038 564 61 64 75 -1039 345 517 79 92 -1040 533 529 223 222 -1041 498 582 576 375 -1042 575 376 609 49 -1043 412 10 8 447 -1044 561 472 549 468 -1045 239 322 252 231 -1046 397 12 4 14 -1047 367 369 434 576 -1048 206 313 322 179 -1049 322 179 313 354 -1050 12 2 4 7 -1051 346 638 26 608 -1052 66 87 57 58 -1053 72 58 564 61 -1054 322 207 231 239 -1055 201 354 322 207 -1056 239 255 322 201 -1057 533 402 529 222 -1058 60 518 564 65 -1059 11 486 12 14 -1060 118 168 141 152 -1061 60 376 564 518 -1062 576 375 582 115 -1063 515 34 399 351 -1064 334 564 64 363 -1065 311 331 150 305 -1066 473 538 597 519 -1067 564 594 575 475 -1068 36 30 432 410 -1069 343 396 356 279 -1070 281 279 356 396 -1071 281 274 301 356 -1072 486 7 14 422 -1073 642 153 585 629 -1074 153 642 628 629 -1075 503 447 8 10 -1076 461 430 620 416 -1077 493 270 275 280 -1078 275 493 532 323 -1079 532 493 282 323 -1080 461 495 430 416 -1081 493 532 280 275 -1082 389 381 47 413 -1083 49 413 626 527 -1084 500 189 186 181 -1085 498 382 582 375 -1086 410 30 24 377 -1087 30 410 36 377 -1088 366 265 279 272 -1089 608 34 32 31 -1090 527 40 43 38 -1091 46 527 41 38 -1092 43 527 38 41 -1093 597 639 7 486 -1094 306 298 336 331 -1095 11 26 15 543 -1096 554 11 15 543 -1097 416 430 620 649 -1098 291 290 364 327 -1099 637 498 375 361 -1100 39 548 33 461 -1101 422 634 25 543 -1102 583 582 382 113 -1103 367 114 118 141 -1104 473 422 11 554 -1105 178 197 168 141 -1106 375 369 123 115 -1107 91 123 115 375 -1108 377 350 36 553 -1109 173 181 516 186 -1110 110 95 107 87 -1111 353 107 163 87 -1112 46 527 42 610 -1113 500 209 348 202 -1114 334 61 564 57 -1115 510 103 140 161 -1116 160 104 140 133 -1117 486 11 473 422 -1118 336 611 331 514 -1119 576 434 637 369 -1120 29 466 524 20 -1121 366 279 265 258 -1122 366 279 258 274 -1123 89 484 338 454 -1124 462 621 568 534 -1125 133 104 140 103 -1126 462 534 568 531 -1127 521 440 390 563 -1128 383 440 563 390 -1129 141 154 170 369 -1130 141 193 369 170 -1131 173 181 510 516 -1132 348 510 181 516 -1133 324 366 276 272 -1134 415 324 366 323 -1135 477 527 507 43 -1136 26 25 440 346 -1137 430 333 42 479 -1138 460 452 564 75 -1139 31 515 32 592 -1140 181 189 187 500 -1141 389 527 413 47 -1142 413 389 626 527 -1143 376 590 49 575 -1144 331 611 185 508 -1145 223 392 407 219 -1146 223 233 392 219 -1147 538 648 597 519 -1148 597 648 538 486 -1149 557 537 568 499 -1150 553 39 461 416 -1151 290 528 451 287 -1152 554 453 332 560 -1153 601 467 458 9 -1154 623 525 535 566 -1155 566 525 535 526 -1156 378 106 431 418 -1157 53 496 352 347 -1158 564 300 419 72 -1159 564 452 300 72 -1160 2 6 7 486 -1161 421 451 528 286 -1162 451 528 588 287 -1163 409 595 433 491 -1164 79 621 78 401 -1165 401 621 78 555 -1166 78 537 555 621 -1167 599 340 282 301 -1168 493 599 282 301 -1169 430 620 42 333 -1170 565 498 112 637 -1171 583 498 112 565 -1172 599 429 536 282 -1173 599 625 459 429 -1174 543 554 332 15 -1175 474 112 637 565 -1176 364 290 528 327 -1177 548 461 479 333 -1178 461 333 430 479 -1179 383 390 346 440 -1180 65 60 64 564 -1181 65 64 75 564 -1182 383 638 346 390 -1183 380 468 614 549 -1184 532 282 276 323 -1185 157 331 504 150 -1186 89 454 338 339 -1187 167 454 89 339 -1188 8 5 10 551 -1189 5 520 10 551 -1190 492 626 545 389 -1191 389 626 545 469 -1192 37 33 35 29 -1193 615 568 499 557 -1194 500 186 480 202 -1195 54 56 53 496 -1196 294 295 291 385 -1197 295 291 385 327 -1198 295 294 292 385 -1199 474 637 361 565 -1200 497 373 426 540 -1201 40 29 28 34 -1202 535 525 581 526 -1203 328 92 79 517 -1204 496 56 352 604 -1205 459 536 646 493 -1206 459 429 624 536 -1207 493 536 280 532 -1208 25 346 26 608 -1209 351 399 41 38 -1210 43 41 38 351 -1211 527 413 47 606 -1212 308 252 322 231 -1213 308 255 322 252 -1214 256 231 252 308 -1215 256 308 259 247 -1216 21 30 24 410 -1217 21 30 562 24 -1218 315 621 555 568 -1219 217 219 223 407 -1220 225 223 219 233 -1221 407 217 529 223 -1222 381 452 300 564 -1223 595 635 433 491 -1224 414 385 291 327 -1225 416 39 461 495 -1226 461 39 548 495 -1227 461 548 479 495 -1228 301 282 281 464 -1229 301 282 285 340 -1230 315 621 568 462 -1231 372 289 288 285 -1232 289 288 285 414 -1233 431 153 106 378 -1234 55 641 589 436 -1235 651 572 638 608 -1236 564 452 72 75 -1237 573 534 567 613 -1238 567 645 600 534 -1239 499 568 577 537 -1240 414 327 291 364 -1241 561 549 614 468 -1242 338 489 566 64 -1243 89 484 489 338 -1244 385 294 465 344 -1245 445 196 444 209 -1246 209 550 444 427 -1247 490 14 11 12 -1248 490 18 14 12 -1249 597 648 486 7 -1250 486 639 7 422 -1251 639 473 597 631 -1252 529 491 616 533 -1253 435 320 125 373 -1254 616 491 529 541 -1255 497 628 642 629 -1256 46 52 413 602 -1257 623 359 566 338 -1258 497 506 629 418 -1259 99 359 623 338 -1260 65 64 454 75 -1261 209 617 550 427 -1262 86 328 144 128 -1263 570 187 374 368 -1264 403 86 633 328 -1265 601 522 458 523 -1266 604 352 472 56 -1267 273 312 319 324 -1268 380 614 63 549 -1269 561 549 63 614 -1270 623 525 566 359 -1271 359 525 566 526 -1272 566 89 526 489 -1273 113 382 358 471 -1274 582 471 382 113 -1275 523 467 458 601 -1276 268 308 260 263 -1277 374 628 556 578 -1278 498 582 382 583 -1279 586 645 534 557 -1280 361 176 369 136 -1281 277 356 274 279 -1282 576 637 375 369 -1283 637 375 369 361 -1284 373 556 569 400 -1285 556 373 569 628 -1286 447 562 24 21 -1287 47 492 527 507 -1288 495 39 548 487 -1289 572 608 651 650 -1290 541 619 542 574 -1291 27 562 21 30 -1292 21 446 562 27 -1293 517 328 614 79 -1294 545 530 622 575 -1295 522 371 523 558 -1296 523 371 520 558 -1297 471 91 115 375 -1298 578 127 628 556 -1299 127 153 628 556 -1300 641 413 55 52 -1301 55 564 436 58 -1302 564 334 57 594 -1303 55 641 436 413 -1304 575 413 49 594 -1305 15 17 596 560 -1306 521 440 563 571 -1307 632 581 62 526 -1308 285 372 301 340 -1309 290 451 528 421 -1310 326 57 564 58 -1311 205 212 241 204 -1312 564 452 469 381 -1313 239 322 207 201 -1314 223 392 529 407 -1315 381 564 413 469 -1316 395 513 311 186 -1317 389 469 413 626 -1318 136 361 583 565 -1319 586 645 567 534 -1320 32 25 608 346 -1321 369 367 137 141 -1322 469 575 545 622 -1323 593 543 634 422 -1324 373 569 628 591 -1325 556 569 153 628 -1326 196 187 373 570 -1327 167 454 339 155 -1328 590 626 575 530 -1329 536 493 282 532 -1330 133 140 160 510 -1331 376 363 64 564 -1332 209 427 444 587 -1333 571 440 563 383 -1334 498 375 576 637 -1335 531 534 568 579 -1336 534 568 557 621 -1337 218 392 643 238 -1338 568 555 577 537 -1339 475 609 363 49 -1340 363 609 475 564 -1341 393 311 150 305 -1342 19 425 17 596 -1343 596 17 603 560 -1344 522 428 371 558 -1345 127 628 497 483 -1346 492 48 545 626 -1347 21 607 24 580 -1348 132 117 318 128 -1349 633 132 547 142 -1350 437 381 419 413 -1351 419 381 437 300 -1352 173 181 186 171 -1353 405 613 600 534 -1354 632 526 62 64 -1355 489 484 64 338 -1356 600 54 53 621 -1357 29 20 28 466 -1358 20 28 466 443 -1359 49 48 626 590 -1360 63 345 614 380 -1361 584 345 63 380 -1362 470 607 559 478 -1363 28 23 22 20 -1364 478 23 22 28 -1365 473 422 554 631 -1366 555 537 568 621 -1367 18 490 14 439 -1368 596 17 19 603 -1369 571 440 18 521 -1370 542 491 616 541 -1371 534 568 615 557 -1372 534 568 579 615 -1373 392 222 229 238 -1374 626 48 530 590 -1375 238 406 229 423 -1376 629 585 642 418 -1377 418 506 629 378 -1378 378 431 629 418 -1379 153 448 628 591 -1380 591 569 628 153 -1381 550 209 500 627 -1382 515 31 32 34 -1383 209 627 550 617 -1384 569 556 153 400 -1385 645 621 557 54 -1386 529 491 533 223 -1387 601 1 458 522 -1388 522 601 1 3 -1389 359 339 99 106 -1390 338 99 359 339 -1391 49 575 626 413 -1392 473 597 631 453 -1393 605 564 518 460 -1394 222 392 402 529 -1395 113 382 583 361 -1396 33 335 28 23 -1397 370 52 594 46 -1398 408 505 580 607 -1399 413 640 602 641 -1400 630 376 564 609 -1401 49 376 609 363 -1402 363 376 609 564 -1403 393 456 311 305 -1404 218 221 386 643 -1405 643 386 423 221 -1406 141 123 369 367 -1407 498 382 375 361 -1408 474 637 369 361 -1409 558 371 520 551 -1410 558 428 371 551 -1411 374 441 411 373 -1412 422 25 26 543 -1413 25 17 15 634 -1414 606 44 610 45 -1415 367 115 369 576 -1416 367 576 546 115 -1417 636 573 567 613 -1418 615 51 579 573 -1419 50 51 615 636 -1420 55 413 564 52 -1421 594 52 413 46 -1422 564 326 52 57 -1423 367 434 546 576 -1424 208 449 379 445 -1425 379 445 544 208 -1426 26 439 440 25 -1427 622 575 605 469 -1428 636 586 567 573 -1429 573 586 567 534 -1430 599 625 340 283 -1431 605 630 518 564 -1432 171 510 181 161 -1433 32 29 38 34 -1434 402 216 392 222 -1435 223 222 392 238 -1436 389 492 527 47 -1437 389 492 626 527 -1438 577 555 78 537 -1439 315 621 401 555 -1440 15 598 634 560 -1441 634 17 15 560 -1442 481 142 328 633 -1443 128 328 144 138 -1444 413 610 640 606 -1445 640 606 610 45 -1446 379 449 444 445 -1447 187 449 196 444 -1448 445 449 444 196 -1449 605 564 460 469 -1450 575 564 605 469 -1451 541 200 619 574 -1452 564 436 419 413 -1453 517 482 63 614 -1454 154 369 141 123 -1455 583 498 565 361 -1456 498 361 637 565 -1457 622 530 630 575 -1458 21 30 432 27 -1459 173 510 160 516 -1460 311 160 348 516 -1461 485 140 540 373 -1462 21 505 580 447 -1463 490 26 439 571 -1464 379 544 220 208 -1465 348 516 181 186 -1466 186 509 311 516 -1467 209 202 627 617 -1468 433 635 529 491 -1469 430 42 620 44 -1470 649 430 620 44 -1471 529 635 541 491 -1472 404 24 410 21 -1473 404 410 24 335 -1474 89 338 359 339 -1475 450 328 482 517 -1476 517 328 482 614 -1477 78 59 537 621 -1478 588 396 281 356 -1479 286 488 588 356 -1480 424 543 593 422 -1481 463 607 408 16 -1482 389 381 413 469 -1483 413 469 575 626 -1484 626 469 575 545 -1485 554 11 543 422 -1486 459 624 646 536 -1487 332 543 593 424 -1488 631 554 424 422 -1489 153 431 629 378 -1490 545 48 530 626 -1491 626 530 545 575 -1492 59 621 78 79 -1493 160 510 348 516 -1494 626 590 575 49 -1495 576 434 112 637 -1496 498 576 112 637 -1497 346 651 638 608 -1498 13 442 412 362 -1499 13 467 412 442 -1500 132 142 633 128 -1501 184 180 172 170 -1502 631 332 424 554 -1503 531 573 579 51 -1504 521 571 563 18 -1505 599 625 282 340 -1506 622 630 605 575 -1507 562 442 362 412 -1508 193 180 170 141 -1509 50 644 636 615 -1510 443 466 20 19 -1511 616 542 533 491 -1512 413 594 564 52 -1513 621 53 600 405 -1514 362 562 446 27 -1515 403 547 321 481 -1516 403 481 321 329 -1517 562 442 412 10 -1518 493 459 536 599 -1519 493 599 536 282 -1520 450 86 328 517 -1521 413 602 610 46 -1522 29 23 28 20 -1523 223 409 433 491 -1524 621 59 537 54 -1525 13 362 412 446 -1526 439 422 11 14 -1527 639 473 631 422 -1528 450 612 584 517 -1529 450 482 612 517 -1530 413 641 602 52 -1531 447 10 24 562 -1532 531 573 534 579 -1533 380 345 468 604 -1534 587 427 444 618 -1535 613 567 600 534 -1536 218 386 238 643 -1537 643 238 423 386 -1538 347 496 352 604 -1539 63 345 517 614 -1540 584 612 63 517 -1541 629 431 585 418 -1542 153 431 585 629 -1543 463 539 478 607 -1544 463 539 607 16 -1545 564 609 475 575 -1546 533 529 402 616 -1547 376 630 564 518 -1548 645 54 600 621 -1549 380 468 472 604 -1550 604 468 472 352 -1551 380 468 549 472 -1552 570 187 373 374 -1553 606 413 641 640 -1554 413 610 602 640 -1555 458 467 13 9 -1556 467 458 13 371 -1557 11 422 26 543 -1558 25 17 425 15 -1559 646 536 280 493 -1560 646 624 280 536 -1561 647 430 44 42 -1562 618 544 220 379 -1563 648 6 486 7 -1564 648 6 538 486 -1565 403 633 547 481 -1566 403 328 633 481 -1567 483 127 628 578 -1568 486 7 12 14 -1569 53 56 352 496 -1570 340 288 284 625 -1571 283 340 284 625 -1572 561 352 472 468 -1573 86 450 328 403 -1574 329 403 481 328 -1575 455 288 284 372 -1576 501 288 284 455 -1577 376 530 575 630 -1578 630 376 609 575 -1579 430 479 42 647 -1580 621 405 600 534 -1581 22 28 20 443 -1582 643 238 229 423 -1583 481 633 547 142 -1584 558 428 551 652 -1585 509 611 331 508 -1586 513 514 331 611 -1587 509 513 331 611 -1588 601 9 1 3 -1589 289 288 344 501 -1590 515 32 399 34 -1591 403 321 349 329 -1592 392 229 643 238 -1593 618 445 544 379 -1594 618 587 544 445 -1595 531 613 534 573 -1596 629 153 448 628 -1597 538 473 597 486 -1598 597 473 639 486 -1599 650 31 608 346 -1600 607 505 580 21 -1601 288 455 289 372 -1602 289 455 288 501 -1603 376 530 590 575 -1604 49 594 475 575 -1605 356 279 281 274 -1606 550 209 444 500 -1607 362 412 446 562 -1608 529 433 491 223 -1609 455 372 284 283 -1610 465 501 455 289 -1611 465 289 344 501 -1612 445 209 444 587 -1613 153 642 127 628 -1614 294 385 291 414 -1615 283 625 459 599 -1616 613 531 51 573 -1617 636 573 613 51 -1618 557 621 568 537 -1619 558 551 520 5 -1620 500 209 202 627 -1621 635 200 541 574 -1622 595 200 635 574 -1623 558 652 551 5 -1624 534 579 573 615 -1625 605 575 630 564 -1626 31 346 32 608 -1627 631 424 639 422 -1628 383 346 638 26 -1629 469 575 564 413 -1630 15 560 332 598 -1631 15 554 332 560 -1632 586 557 534 615 -1633 573 586 534 615 -1634 332 543 598 593 -1635 543 332 598 15 -1636 609 575 564 630 -1637 554 631 332 453 -1638 424 554 543 422 -1639 608 346 651 650 -1640 487 495 430 479 -1641 645 621 534 557 -1642 645 621 600 534 -1643 542 491 541 574 -1644 541 635 574 491 -1645 636 644 586 573 -1646 573 586 615 644 -1647 543 634 598 593 -1648 497 127 642 628 -1649 598 543 15 634 -1650 25 15 543 634 -1651 473 519 597 453 -1652 595 574 635 491 -1653 636 51 615 573 -1654 644 573 636 615 -$EndElements diff --git a/test/user/testdata/shark_41_ascii_missing_element_header.msh b/test/user/testdata/shark_41_ascii_missing_element_header.msh deleted file mode 100644 index 86a26d34..00000000 --- a/test/user/testdata/shark_41_ascii_missing_element_header.msh +++ /dev/null @@ -1,2972 +0,0 @@ -$MeshFormat -4.1 0 8 -$EndMeshFormat -$Entities -0 0 0 1 -0 -0.07334360000000001 -0.08523339999999999 -0.0005566629999999989 0.07028570000000001 0.0819076 0.0752128 0 0 -$EndEntities -$Nodes -1 652 1 652 -3 0 0 652 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 --0.07334359999999999 0.08167480000000001 0.056402 --0.07291259999999999 0.0537921 0.00170478 --0.072634 0.0799069 0.0578949 --0.0715817 0.0520377 0.00292576 --0.0701949 0.08025690000000001 0.0450431 --0.06876980000000001 0.060971 0.00326551 --0.06778000000000001 0.060358 0.00473741 --0.06727959999999999 0.08092489999999999 0.0425553 --0.0658074 0.0806443 0.0552302 --0.064933 0.0788176 0.0453762 --0.0636555 0.0610198 0.00141989 --0.0636111 0.0566004 -0.000556663 --0.0636791 0.0819076 0.0524468 --0.0623445 0.0580268 0.00335683 --0.0624856 0.06710579999999999 0.00581638 --0.0601398 0.0781111 0.0317589 --0.0599443 0.0685632 0.009924489999999999 --0.0592787 0.0571239 0.00105116 --0.0587906 0.07199990000000001 0.0117948 --0.0575605 0.0730663 0.016213 --0.057624 0.0811803 0.0403639 --0.0572339 0.0769387 0.0223219 --0.0559974 0.0749629 0.0235691 --0.0542321 0.0763209 0.0344665 --0.0540672 0.0649483 0.008218130000000001 --0.0541685 0.06611350000000001 0.00437935 --0.0532966 0.0805356 0.0466758 --0.0517252 0.07611850000000001 0.0183218 --0.0505257 0.06887699999999999 0.0152572 --0.0503803 0.07726379999999999 0.0406423 --0.0472855 0.0641041 0.00381053 --0.0469016 0.0648796 0.00821733 --0.0474599 0.07272679999999999 0.0265623 --0.0464733 0.070912 0.0103373 --0.0444756 0.07556740000000001 0.0221683 --0.0440208 0.07743129999999999 0.0371107 --0.0434135 0.0685101 0.0213943 --0.0425401 0.0668787 0.0159114 --0.0405353 0.07301630000000001 0.0309862 --0.0386417 0.073548 0.0160682 --0.037401 0.0664899 0.0122191 --0.0358693 0.06894450000000001 0.0243885 --0.0351058 0.06877709999999999 0.0124837 --0.0333614 0.07116500000000001 0.0238503 --0.0325564 0.0696271 0.024504 --0.032455 0.0625178 0.0200737 --0.0305469 0.0729973 0.0173921 --0.0276941 0.06523859999999999 0.0128238 --0.0272717 0.0628782 0.0141328 --0.0263428 0.00735496 0.00505748 --0.0256055 0.00658056 0.00327552 --0.0252856 0.0610141 0.0227762 --0.0250237 -0.00678856 0.00359213 --0.0242889 -0.00589458 0.00589675 --0.0216872 0.0639735 0.0255561 --0.0215721 -0.0119744 0.00619585 --0.0195136 0.0542304 0.0216195 --0.0168343 0.06495339999999999 0.0236547 --0.0161373 -0.00420129 0.00881529 --0.0148726 0.0585475 0.0106707 --0.0140647 0.0517836 0.0159197 --0.0142986 0.0543801 0.0051496 --0.0139611 -0.0178642 0.00651265 --0.0139803 0.0554055 0.0115694 --0.0124373 0.0606817 0.0122622 --0.0127423 0.0580719 0.0285553 --0.0127412 -0.07042320000000001 0.0234664 --0.0126173 -0.0801905 0.022154 --0.0125269 0.0592002 0.0346418 --0.0122498 -0.080596 0.0191154 --0.0121442 -0.0691943 0.0191352 --0.0123618 0.0658492 0.0197519 --0.0121018 -0.063334 0.0245151 --0.0118539 0.0462485 0.0243954 --0.0111067 0.0637388 0.0161162 --0.0110042 -0.0624802 0.0276395 --0.0109072 0.046219 0.0183571 --0.0107037 -0.000325242 0.00950432 --0.010183 -0.0121386 0.00674337 --0.009774420000000001 -0.0638147 0.0162637 --0.0097669 -0.06993340000000001 0.0156591 --0.00942656 -0.0836042 0.0182705 --0.009320999999999999 -0.0852334 0.0216727 --0.00803502 0.0401179 0.0263407 --0.00857808 -0.0579335 0.0163943 --0.007931580000000001 -0.0190616 0.0121625 --0.00782675 0.0573514 0.028038 --0.00773028 -0.0620746 0.0302044 --0.00764665 0.0537773 0.00961295 --0.00721562 -0.0507362 0.0224357 --0.00717408 -0.0528249 0.0179333 --0.00651588 -0.00739691 0.013024 --0.00691116 -0.00014073 0.00823716 --0.00661131 0.044183 0.0123 --0.00658663 0.0535365 0.0326225 --0.00630954 -0.08506569999999999 0.0194796 --0.00616497 -0.0797841 0.0261073 --0.00582999 -0.0494502 0.0287705 --0.00563359 0.0476479 0.00934546 --0.00506609 -0.0425596 0.0250833 --0.00453974 -0.0405694 0.0173853 --0.00447266 0.0319291 0.0205877 --0.00434886 0.0267225 0.00648417 --0.00418386 0.0253438 0.008421959999999999 --0.0041733 -0.0606038 0.0122716 --0.00385183 0.0479538 0.00869149 --0.00333705 0.051389 0.031593 --0.00333565 -0.06938809999999999 0.0119551 --0.00333748 -0.0650683 0.0110291 --0.00292457 0.0475597 0.0319288 --0.00280471 -0.0353375 0.0238411 --0.00273019 -0.0493159 0.0135756 --0.00255346 -0.0452657 0.0126112 --0.00249178 -0.0598565 0.010934 --0.00247351 -0.0533955 0.0149632 --0.00280465 0.0288144 0.0300227 --0.00225175 -0.030519 0.0236922 --0.00205777 -0.0595101 0.00715068 --0.0018581 -0.0627033 0.0116048 --0.00150112 -0.0384203 0.0313885 --0.00143547 -0.0337232 0.0176227 --0.00136747 -0.062725 0.0150152 --0.000884775 -0.0587825 0.0143119 --0.000624659 -0.0247814 0.0257906 --0.000489974 0.0225414 0.0188523 --6.05566e-05 0.0171338 0.0234086 -0.00150381 0.0360475 0.00675461 -0.000282178 -0.0241462 0.0174969 -0.000347869 -0.06752370000000001 0.0324883 -0.000429839 -0.0422219 0.0349169 -0.00028168 -0.0273698 0.0312235 -0.000952705 -0.0267391 0.0143612 -0.00105244 0.0186951 0.00689988 -0.0011109 -0.0779453 0.014663 -0.00137887 0.00842564 0.0258445 -0.00107238 -0.0462225 0.00980545 -0.00158113 -0.0561697 0.005809 -0.00165921 -0.0142314 0.0114909 -0.00169065 -0.00330978 0.027848 -0.0017282 0.0264299 0.00972258 -0.00196109 -0.062067 0.0125082 -0.00198494 -0.0249792 0.0122768 -0.00206797 -0.0322322 0.0125632 -0.00219287 -0.00991015 0.0199027 -0.00223228 -0.065619 0.00972103 -0.00226787 -0.06664 0.0139131 -0.00233081 0.009707510000000001 0.0349608 -0.0023033 -0.0550711 0.0357611 -0.00284591 -0.06958739999999999 0.0109337 -0.00313658 0.0123831 0.0152878 -0.00325266 -0.000639164 0.0164744 -0.00354678 -0.0651674 0.00553443 -0.00434877 0.0392681 0.00656793 -0.0034004 -0.0624097 0.0143354 -0.00410027 0.052311 0.0146156 -0.00425687 -0.0110681 0.0377954 -0.0043501 -0.0020508 0.015115 -0.00444422 -0.0785667 0.0168482 -0.00471578 -0.008727459999999999 0.0133588 -0.00486541 0.0192794 0.0102326 -0.00475235 0.0259901 0.00777948 -0.00497525 -0.0797755 0.0244877 -0.0052286 0.0545416 0.0234287 -0.00513856 -0.0361953 0.00904286 -0.00543656 -0.016404 0.0117933 -0.00521097 0.0361763 0.0357574 -0.00563068 0.0458779 0.0101474 -0.00602624 -0.0598053 0.00448538 -0.00669265 -0.0730234 0.0300997 -0.00671975 -0.0647944 0.0149968 -0.00743572 0.0219428 0.00498754 -0.00806977 -0.06766220000000001 0.0106835 -0.008580020000000001 0.0185363 0.00804532 -0.00900922 -0.0527441 0.0382868 -0.00967438 -0.0310472 0.0412759 -0.009690270000000001 -0.0470756 0.00574739 -0.009825469999999999 -0.0777201 0.0238208 -0.010337 -0.0646559 0.00738197 -0.0103691 -0.0715108 0.0301524 -0.0108524 -0.06519229999999999 0.0107074 -0.0112352 0.0223598 0.00496048 -0.0115762 0.0360388 0.034027 -0.011811 0.0150563 0.0411225 -0.0119389 -0.07108730000000001 0.0142927 -0.011481 0.000850754 0.00890493 -0.0122581 0.0177891 0.00726338 -0.0126044 0.0285097 0.0071727 -0.0126077 -0.0410848 0.00487059 -0.01325 0.0245576 0.00385279 -0.0133342 -0.0301914 0.00695184 -0.0134526 -0.00467313 0.044297 -0.0140263 0.0415073 0.0128325 -0.0139319 -0.0627506 0.0126489 -0.0144402 0.0213321 0.0408733 -0.0145153 -0.0120242 0.00709154 -0.0145254 0.0314471 0.00762861 -0.0143606 -0.0539791 0.00638859 -0.0153705 -0.0588177 0.00913193 -0.0158483 0.0424843 0.0267153 -0.0161677 0.0082135 0.0752128 -0.0160709 -0.0693691 0.0267104 -0.0163112 0.021127 0.00658374 -0.0163956 0.0418119 0.0180916 -0.0166653 0.00513625 0.0449469 -0.0171438 -0.009394380000000001 0.0462661 -0.0174416 -0.0497054 0.0373642 -0.0174198 -0.06569369999999999 0.0159871 -0.0177387 0.0346114 0.0053358 -0.0178439 0.0247259 0.00729322 -0.018247 0.0346901 0.00258831 -0.0182074 -0.0318958 0.0424624 -0.0183988 -0.00142899 0.0496692 -0.0188182 -0.018825 0.0447569 -0.0188285 0.0147456 0.0461032 -0.0188626 0.015416 0.041072 -0.0190811 -0.00419709 0.06868580000000001 -0.0195945 0.0084326 0.064095 -0.0197498 -0.00217441 0.0583864 -0.0198208 0.00539755 0.0587622 -0.0200137 0.0324539 0.00354185 -0.020151 -0.0145671 0.0500049 -0.0203386 -0.00326709 0.07024469999999999 -0.0209148 0.00523036 0.0681576 -0.0208447 0.0121045 0.0546374 -0.0209724 0.009706330000000001 0.0633876 -0.020604 -0.0121123 0.00591309 -0.0212498 -0.0289526 0.00565549 -0.0216078 -0.0380775 0.00479088 -0.0216875 -0.00997672 0.0619769 -0.0220658 0.00705093 0.0456869 -0.0223002 -0.0558455 0.0110476 -0.0223137 -0.0154618 0.0494217 -0.0229336 0.00417573 0.0589573 -0.0231427 0.0278288 0.0125965 -0.0231751 0.027241 0.0309726 -0.0233259 0.0160686 0.00756079 -0.0234095 0.0318943 0.0199392 -0.0234462 -0.00393483 0.0583985 -0.0235915 -0.0597066 0.0170609 -0.0240196 -0.0108777 0.0466362 -0.024123 -0.00330273 0.0464733 -0.0242099 -0.0321428 0.0398591 -0.0244244 0.00347947 0.0416421 -0.024564 -0.0175604 0.0433407 -0.0253979 -0.0453083 0.0344803 -0.0256103 0.0267734 0.0284514 -0.0259312 -0.0445208 0.00878379 -0.025959 -0.0133125 0.00624018 -0.0265967 -0.0369666 0.00635268 -0.0273245 -0.0066598 0.0412078 -0.0277597 -0.0467651 0.0304517 -0.0275944 -0.0515878 0.0207552 -0.0282687 0.0208205 0.0174814 -0.0290859 0.0112094 0.012597 -0.0293048 -0.0474855 0.0256026 -0.0296506 -0.0466043 0.0156453 -0.0304236 0.0134394 0.031696 -0.0304518 -0.0291908 0.00746031 -0.03126 -0.044124 0.016095 -0.0321715 -0.043346 0.0242104 -0.0322352 -0.0402733 0.0141242 -0.0323149 0.01052 0.0200521 -0.0324768 -0.0397188 0.0271188 -0.0325431 -0.0291932 0.0340382 -0.0332479 -0.0329826 0.0117351 -0.0338676 -0.0346121 0.0252676 -0.0341522 -0.00293196 0.033596 -0.0341882 -0.0361716 0.0179088 -0.0344969 -0.0256263 0.0309923 -0.0345138 -0.00958586 0.0123416 -0.0348872 -0.0128566 0.0339912 -0.0349524 -0.0273994 0.0177976 -0.0349556 -0.000677158 0.0209767 -0.0350004 -0.028049 0.008761420000000001 -0.0353194 -0.0100316 0.0154749 -0.0354214 -0.0195455 0.0173172 -0.0355775 -0.0309821 0.0107592 -0.0360305 -0.0150581 0.0232372 -0.0363938 -0.0285041 0.0132933 -0.0374738 -0.00607371 0.0123945 -0.041317 -0.0210454 0.0131228 -0.0425886 -0.0120136 0.0129537 -0.0475164 -0.00753527 0.00853843 -0.0492593 -0.00704914 0.009380670000000001 -0.0496752 -0.0170405 0.0106038 -0.0498676 -0.0259318 0.00619626 -0.052402 -0.022331 0.00866719 -0.0516897 -0.011391 0.0103437 -0.0559595 -0.0106346 0.00698866 -0.0596531 -0.0214295 0.0059579 -0.066312 -0.0158462 0.00759335 -0.0672852 -0.00331292 0.00667068 -0.0687074 -0.0027598 0.00829441 -0.0687083 -0.008451500000000001 0.00881385 -0.07028570000000001 -0.00694567 0.00665748 -0.02471 0.00101921 0.00688758 -0.00641783 -0.0341512 0.0233596 -0.024018 0.00854392 0.00722419 -0.0251696 0.009421270000000001 0.00784613 --0.019815 0.0686939 0.0189821 -0.0416697 -0.017118 0.00864259 --0.00440288 -0.06984319999999999 0.0205811 --0.0033606 0.0600219 0.0217676 -0.0268544 0.00322876 0.008082499999999999 -0.00855449 0.0107052 0.00928038 -0.0219179 0.00585482 0.0121236 -0.0199208 0.0175811 0.0336776 -0.0210521 -0.0362113 0.0256186 -0.0339797 -0.00194129 0.0163861 -0.03202 0.000337126 0.0126992 -0.0119633 0.0163586 0.0147908 -0.0248778 0.0056119 0.0321775 -0.00892971 -0.0563678 0.0287948 -0.0174837 0.027107 0.0210333 --0.0170518 0.00346089 0.00554363 -0.0144974 -0.0120686 0.0314959 -0.00336155 -0.00103205 0.0364574 -0.00707711 -0.0204903 0.0185209 -0.010517 -0.00309481 0.0232445 --0.00559352 0.0373259 0.0172753 --0.00523735 -0.0230725 0.0111224 -0.0151072 -0.0538804 0.0213778 -0.0347571 -0.0188174 0.0105515 -0.0278657 -0.0183642 0.0156758 --0.00338013 -0.0543805 0.0329679 --0.0196332 0.0593213 0.0251138 -0.06481629999999999 -0.0143432 0.00627944 --0.00336175 -0.0187472 0.00979996 --0.0059938 -0.0214388 0.00941436 -0.0204933 0.0262773 0.00994486 -0.0153554 0.00838654 0.0105168 --0.064082 0.064994 0.00682263 --0.0406296 0.0703091 0.0249838 --0.0197677 0.0563929 0.0156108 --0.0506931 0.0781816 0.0304629 -0.0171972 -0.00100568 0.011485 -0.0314619 -0.0225976 0.00774901 --0.00980694 0.0515267 0.0104574 --0.00435185 0.0493969 0.0137744 -0.0449063 -0.0117353 0.00859937 -0.00159087 -0.0450385 0.027858 --0.00469537 -0.06372510000000001 0.0233918 -0.0424219 -0.0285632 0.00857374 -0.0603894 -0.00835109 0.009350529999999999 --0.0147113 -0.0156046 0.009183759999999999 --0.0528157 0.0611754 0.00480955 --0.0173765 -0.008871489999999999 0.00520522 -0.0108104 0.02268 0.0130558 --0.00899905 -0.0208443 0.00915416 --0.0449914 0.0768094 0.0302276 --0.0408502 0.06658 0.008368489999999999 --0.0199988 -0.0118916 0.004906 -0.00337131 0.0455887 0.0238561 -0.00477413 -0.0721541 0.0211645 --0.00344193 -0.049333 0.032475 -0.0427245 -0.0268877 0.00738607 -0.0272704 -0.0238375 0.00669928 --0.00610544 -0.0476638 0.0181008 --0.00760153 0.0503529 0.00747858 -0.0131109 -0.0422224 0.0405109 -0.00214561 -0.0490294 0.0151357 --0.0598224 0.0805424 0.0511855 --0.0204542 0.0588165 0.013102 -0.059357 -0.0190886 0.00813027 --0.00100716 0.0422264 0.0325724 -0.0325535 -0.0244764 0.012522 --0.000431427 -0.0574818 0.0137747 -0.0114251 0.0275734 0.00440942 -0.00337666 -0.0559724 0.0148659 --0.0262911 0.0586227 0.0207785 --0.0699467 0.0813567 0.0499003 -0.0494602 -0.0133111 0.00757754 -0.00758285 0.0333008 0.0104911 -0.00657287 0.032122 0.00603963 -0.000332803 -0.0511328 0.0180756 --0.021764 0.0620607 0.0118108 --0.0454672 0.075167 0.035911 -0.00139884 0.045926 0.0128133 -0.0176314 0.0311493 0.00370344 --0.0159418 -0.0158578 0.00793814 --0.0229387 0.06916410000000001 0.0166572 --0.00133409 -0.0449329 0.0187829 --0.0538019 0.0611146 0.00198764 -0.0305208 -0.00256491 0.0101919 -0.0623596 -0.00697151 0.00683979 -0.0236819 -0.00777996 0.0526871 -0.0118138 -0.0144241 0.0430193 -0.0137156 -0.00365078 0.00732253 --0.0257884 0.0686739 0.0150694 --0.0530331 0.060812 0.00248197 --0.000421194 -0.0523335 0.008791770000000001 -0.0193846 -0.00072024 0.0649221 -0.00485856 0.0133946 0.0114741 --0.0053823 -0.0743714 0.0141262 -0.016958 0.0166471 0.00740593 -0.0429338 -0.0266961 0.0110582 --0.06504749999999999 0.05473 0.00191127 -0.00924818 0.0356698 0.00715588 --0.042468 0.0652669 0.00790867 -0.00699205 0.0348997 0.00576165 --0.012123 0.00171435 0.00688121 -0.017741 0.00126373 0.0717161 --0.00477874 -0.0228765 0.0123522 --0.05496 0.0793832 0.0329037 --0.0253736 -0.000654191 0.00342534 -0.0220159 -0.0128389 0.0555838 -0.0187915 0.00366305 0.06539010000000001 --0.0635923 0.0794618 0.0351284 -0.0187293 0.00901455 0.0689246 --0.0507436 0.0790633 0.0364811 -0.00440962 0.0291856 0.00589534 --0.0610541 0.08157639999999999 0.0467801 --0.0264169 0.06418980000000001 0.0180225 -0.0590681 -0.0129818 0.009692930000000001 -0.0316732 -0.013669 0.008927310000000001 --0.0368828 0.0732351 0.028231 -0.0147007 -0.0293577 0.0425282 --0.00226105 0.042112 0.008184220000000001 --0.022404 0.068624 0.0211714 -0.018834 0.0296379 0.0101126 -0.0545664 -0.023882 0.00596013 --0.0610274 0.0626039 0.00623226 -0.0209345 -0.0123916 0.0558755 --0.064258 0.0639612 0.00701622 --0.0530259 0.07099660000000001 0.0104874 --0.000350232 0.0328643 0.009503569999999999 -0.0179821 0.0260225 0.00525665 --0.071629 0.0809096 0.0500374 -0.0431333 -0.00662611 0.0109755 --0.0367738 0.072104 0.0272887 --0.00147996 0.0424733 0.00778004 --0.0489442 0.0792518 0.0424775 -0.0178184 0.008309230000000001 0.0698262 --0.00256208 -0.0518644 0.0119693 --0.0024457 0.0347988 0.0115191 --0.0226391 0.067054 0.0236986 --0.0250562 0.070839 0.0181046 -0.0157661 -0.010775 0.0444953 --0.0587069 0.0610686 0.00549325 --0.0561989 0.0607157 0.00436391 -0.0028322 0.0311045 0.0076099 --0.061857 0.079748 0.0514834 --0.0580072 0.07448539999999999 0.0170926 -0.017366 0.0281829 0.00449304 -0.0175246 0.0303053 0.00632184 --0.0583716 0.0812348 0.0494755 --0.06276379999999999 0.08110589999999999 0.0418948 -0.009583370000000001 0.0391723 0.00889538 -0.0164997 0.0327763 0.00400793 --0.0100537 -0.019407 0.0104569 -0.0535082 -0.023589 0.00757618 --0.0184567 0.0672393 0.0165986 --0.0660887 0.06395149999999999 0.00557639 --0.008500499999999999 0.0591911 0.0132991 -0.0527123 -0.00658592 0.00801901 -0.00664445 0.0147496 0.00979726 --0.0323364 0.06468409999999999 0.013176 --0.06849810000000001 0.0817682 0.0541475 -0.0424951 -0.00680449 0.0104665 --0.01583 0.06382989999999999 0.0140017 --0.0408586 0.07478079999999999 0.0276312 --0.0213675 0.00505684 0.00440033 --0.0609542 0.0784149 0.029815 -0.0458286 -0.0196104 0.0115924 -0.0619857 -0.0044448 0.00717137 --0.0549453 0.0736446 0.0144159 --0.0660739 0.0797747 0.0511232 --0.0150243 -0.0138696 0.00597473 --0.0208919 0.06642729999999999 0.014553 --0.0583912 0.07667309999999999 0.0277458 --0.00499489 -0.0492059 0.0154875 --0.0177596 -0.0149926 0.00640227 --0.0656257 0.0638276 0.00437301 --0.00111824 -0.0505712 0.010634 --0.0234714 0.0595273 0.0150887 --0.0117477 -0.00786715 0.0107629 --0.0329423 0.0662408 0.012525 --0.0588644 0.0778049 0.0265316 --0.038272 0.07101209999999999 0.0277124 -0.0147178 0.0228905 0.00513556 --0.00242697 -0.0228032 0.0106496 --0.00998317 -0.0196685 0.00798312 -0.00194711 0.0338412 0.00734265 --0.0101071 0.0571173 0.0108272 --0.000192036 0.0305177 0.010316 --0.06622359999999999 0.0609953 0.00234663 --0.0383437 0.071981 0.0290737 -0.0464353 -0.0271448 0.00729223 --0.0113654 0.0558876 0.00985606 --0.0600686 0.0581853 0.00037707 -0.0184892 0.00651809 0.072001 --0.0272353 0.0661385 0.0125002 -0.0386787 -0.009397559999999999 0.0110365 --0.00702298 -0.0554164 0.0301677 --0.0387296 0.0725599 0.0291973 --0.0195884 -0.009713039999999999 0.00731553 -0.0009803979999999999 0.0340005 0.008311529999999999 --0.00251349 -0.0493306 0.0137872 --0.0208118 0.00468072 0.00662791 -0.0145465 0.0247675 0.00685396 -0.0539643 -0.00601143 0.00911787 -0.0615879 -0.00432066 0.00875869 --0.0649217 0.0800024 0.0383643 -0.00460493 0.008497380000000001 0.0127005 --0.0606311 0.0803611 0.0379233 --0.00316884 0.0400824 0.00969248 --0.0308482 0.067467 0.0126012 -0.0120049 0.00511369 0.00824306 -0.0117314 0.0134932 0.00784586 -0.0067401 0.0222359 0.00786688 -0.000365941 0.0444987 0.0334101 -0.00589042 0.0427357 0.0325284 -0.0134556 0.013691 0.0071386 -0.0155774 0.00572549 0.00675779 --0.0442054 0.0654197 0.00607699 -0.00863004 0.0184766 0.00878081 --0.0111016 -0.0170398 0.0107756 --0.0162643 0.06208 0.0123266 --0.06706429999999999 0.0628756 0.0047451 --0.0673064 0.07917689999999999 0.0489333 --0.0566743 0.0588231 0.00264455 --0.07138410000000001 0.080001 0.0523997 --0.0690781 0.0794039 0.0521145 --0.0589744 0.07029879999999999 0.0123753 --0.0108026 0.05228 0.00636676 --0.0113486 0.0541547 0.00728553 --0.0299136 0.06862409999999999 0.0165753 -0.0505332 -0.0225927 0.00635398 -0.0180077 0.0031318 0.07043870000000001 --0.0235313 0.0640143 0.012641 --0.0235569 0.00584404 0.00381922 -0.0384718 -0.0113423 0.0144484 -0.0182407 0.00232532 0.0728388 --0.0235752 0.00407866 0.00373027 --0.011585 0.0522432 0.00647843 -0.0400312 -0.00904366 0.0126741 --0.0178591 -0.000359808 0.00797485 --0.067167 0.06255139999999999 0.00392853 --0.0596438 0.0779391 0.0290601 -0.0013543 0.0302152 0.00901705 -0.0168301 0.00522322 0.0737244 -0.0174324 0.00448014 0.0738384 --0.0618546 0.0649931 0.00590465 -0.0194429 0.0304209 0.00452872 --0.0236633 0.0648084 0.0124456 --0.00249493 -0.0562542 0.012985 --0.0025263 -0.0246783 0.0125409 --0.0396392 0.0718092 0.02876 --0.0158083 -0.0164708 0.00645267 -0.016879 0.0245859 0.0055459 --0.06884990000000001 0.0811361 0.0461884 -0.0290982 -0.00647478 0.008279069999999999 --0.041817 0.0761358 0.0343691 --0.0642688 0.0653922 0.00517065 --0.0162175 0.00239503 0.00694561 -0.00467524 0.0360758 0.00643588 --0.0222973 0.0035638 0.00646752 --0.0708092 0.0801688 0.0482801 --0.0549524 0.07870829999999999 0.0296023 --0.06310540000000001 0.0672415 0.00811831 --0.0155444 -0.0163359 0.0060847 --0.0574097 0.07880470000000001 0.0473507 --0.0558952 0.0591814 0.001764 --0.0177409 0.0619627 0.0144786 --0.00178349 -0.0487397 0.0125937 --0.0111058 0.0522074 0.008299040000000001 --0.0260139 0.00360897 0.00461987 --0.0204566 0.00423454 0.00564674 -0.00612936 0.0370467 0.00680554 -0.010446 0.0313554 0.00705031 --0.0569353 0.05965 0.00118235 --0.0506685 0.0625792 0.00279292 --0.0249761 0.00485573 0.00443819 -0.0172421 0.00725128 0.07382619999999999 --0.0219613 0.06430039999999999 0.0138184 --0.00260185 -0.0513557 0.0142694 --0.0167422 0.00259292 0.00779623 -0.00214524 0.0341103 0.00650831 --0.0236765 0.00572293 0.004305 --0.0616879 0.0784644 0.0353636 --0.0125522 0.0533024 0.00573952 --0.00373263 -0.048886 0.014509 --0.00253347 -0.0472982 0.0131992 --0.0128746 -0.017623 0.00940414 --5.43548e-05 0.0393803 0.00728201 --0.0258702 0.00405717 0.00525282 -0.0183599 0.0265636 0.00640112 -0.0459896 -0.0257989 0.0100883 --0.0295424 0.06805940000000001 0.0247957 --0.0245383 0.0634107 0.0123732 -0.0066096 0.0377811 0.00691952 --0.0450015 0.0646553 0.00575343 --0.0622505 0.0661482 0.00839783 --0.0256248 0.0608105 0.0161665 -0.017488 0.00853314 0.07209649999999999 --0.0596734 0.07050969999999999 0.009924850000000001 --0.06657979999999999 0.06286890000000001 0.00493615 --0.0624322 0.0664941 0.0080812 -0.0436037 -0.00911409 0.009504510000000001 --0.0258241 0.00183578 0.00455937 --0.07027029999999999 0.07969130000000001 0.0546337 --0.027947 0.06304949999999999 0.0231884 --0.0601839 0.07046330000000001 0.0106076 --0.019796 -0.0130118 0.0069497 --0.0183149 0.06305479999999999 0.012418 --0.0302535 0.0701272 0.02364 --0.0574291 0.07908510000000001 0.0314511 --0.0506885 0.0650762 0.00396145 --0.021101 0.0616869 0.0137094 --0.0331684 0.0670427 0.023997 -0.0134393 0.00644533 0.00718965 --0.0111807 -0.0194906 0.00818236 --0.0255718 0.00304117 0.00332801 --0.0126697 -0.015488 0.00653208 --0.0247074 0.00660999 0.00551935 -0.0173416 0.0031807 0.0727906 -0.0172416 0.0236783 0.00588169 -0.0190309 0.0293428 0.00437137 -0.016715 0.00646681 0.0747173 --0.0362286 0.072292 0.023504 --0.0193589 -0.00042516 0.00470745 --0.0218861 0.06436310000000001 0.0125137 --0.0102557 0.0512168 0.00711881 -0.0404202 -0.00631757 0.0116411 -0.0462272 -0.00679819 0.0101561 --0.0259792 0.0656558 0.0150971 -0.0162732 0.0229634 0.00624384 -0.00353474 0.0364474 0.008433390000000001 -4.6368e-06 0.0388726 0.009730829999999999 --0.0216501 0.0633078 0.012475 --0.06535530000000001 0.0635995 0.0060088 --0.0129397 0.0533345 0.00604151 --0.00189413 -0.0244631 0.013557 --0.0610974 0.0673557 0.00916116 -0.0169636 0.00823874 0.0726305 --0.0262169 0.00566462 0.00486021 --0.00105663 -0.050339 0.013034 --0.0522352 0.0618469 0.00239028 --0.06586110000000001 0.0623674 0.00600767 --0.0308719 0.0671807 0.0240148 --0.0271033 0.0631674 0.0232081 -0.000463176 0.0377435 0.00713404 -0.0197653 -0.0105149 0.0573133 --0.0261272 0.00574879 0.00514751 --0.0256133 0.00236555 0.00535812 -0.0395658 -0.00664927 0.0115095 --0.0346515 0.0704144 0.0260764 --0.0676857 0.0619198 0.00410476 --0.0352382 0.07226829999999999 0.0261851 --0.0489272 0.0632235 0.00329626 --0.0514659 0.0617489 0.00295197 --0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -3 0 4 1654 -1 26 15 543 25 -2 227 308 190 188 -3 203 353 199 163 -4 331 305 504 150 -5 142 328 128 138 -6 490 439 18 571 -7 364 289 287 414 -8 296 336 304 298 -9 564 419 300 381 -10 398 569 373 591 -11 486 473 639 422 -12 338 89 566 489 -13 332 554 543 424 -14 80 67 71 302 -15 149 146 109 108 -16 98 90 375 342 -17 341 308 325 313 -18 147 314 126 116 -19 124 318 156 131 -20 245 322 206 308 -21 348 311 516 186 -22 135 150 319 151 -23 147 314 307 311 -24 464 588 301 528 -25 461 33 35 333 -26 196 192 373 314 -27 108 81 302 122 -28 366 258 227 357 -29 511 107 512 353 -30 146 170 354 172 -31 297 175 156 130 -32 130 297 175 308 -33 318 159 319 195 -34 154 123 122 342 -35 261 308 259 260 -36 132 142 128 318 -37 241 250 240 205 -38 226 227 248 324 -39 575 609 475 49 -40 375 91 123 90 -41 260 308 255 251 -42 517 612 63 482 -43 120 117 131 297 -44 318 131 297 156 -45 147 319 311 307 -46 131 120 297 130 -47 120 297 111 117 -48 308 174 206 360 -49 148 313 325 175 -50 148 313 175 174 -51 302 80 122 81 -52 107 353 511 110 -53 322 231 198 197 -54 61 58 564 57 -55 240 386 212 221 -56 121 297 143 117 -57 121 297 117 111 -58 307 235 314 182 -59 307 314 166 182 -60 417 308 175 316 -61 308 175 360 417 -62 601 9 458 1 -63 459 429 536 599 -64 211 242 206 308 -65 528 588 301 356 -66 316 297 308 175 -67 197 188 308 228 -68 231 308 228 197 -69 231 197 322 308 -70 188 197 308 361 -71 322 361 308 197 -72 259 308 256 255 -73 298 306 304 299 -74 302 342 146 122 -75 251 322 245 308 -76 298 306 299 236 -77 342 302 169 129 -78 157 319 331 150 -79 190 195 324 227 -80 146 342 354 154 -81 190 297 308 324 -82 236 254 306 299 -83 354 179 201 322 -84 308 297 188 361 -85 361 188 164 297 -86 195 165 190 318 -87 307 215 257 235 -88 194 235 215 307 -89 174 129 148 313 -90 169 313 129 174 -91 322 255 251 201 -92 366 265 308 258 -93 227 308 258 366 -94 258 308 249 265 -95 227 308 228 258 -96 448 192 373 196 -97 228 308 249 258 -98 296 298 514 336 -99 125 150 348 126 -100 125 160 348 150 -101 244 264 242 316 -102 264 316 244 271 -103 224 233 225 219 -104 107 353 163 199 -105 217 223 219 225 -106 308 174 313 206 -107 206 313 179 174 -108 241 230 212 233 -109 241 233 212 218 -110 267 278 312 273 -111 267 312 262 273 -112 206 179 322 245 -113 242 245 206 308 -114 144 319 159 157 -115 265 308 266 272 -116 218 219 392 233 -117 264 324 316 271 -118 324 308 264 316 -119 297 318 117 131 -120 128 117 318 124 -121 354 207 201 177 -122 207 177 354 184 -123 155 163 353 203 -124 131 297 156 130 -125 395 330 236 202 -126 164 142 318 190 -127 253 314 234 311 -128 307 314 147 166 -129 331 234 253 254 -130 306 236 298 331 -131 156 297 316 175 -132 324 319 318 316 -133 297 324 316 308 -134 373 314 102 125 -135 167 155 378 192 -136 278 324 272 269 -137 278 276 272 324 -138 319 159 157 336 -139 267 257 312 243 -140 307 215 243 257 -141 156 297 318 316 -142 207 354 170 184 -143 124 144 139 156 -144 267 312 250 243 -145 144 151 139 319 -146 318 316 319 144 -147 316 139 319 144 -148 139 144 316 156 -149 316 191 312 319 -150 316 191 317 156 -151 313 308 175 174 -152 253 234 331 311 -153 331 395 234 236 -154 272 265 308 366 -155 103 140 133 510 -156 235 199 246 314 -157 246 237 314 199 -158 144 151 319 157 -159 92 157 151 144 -160 92 159 157 144 -161 395 234 236 330 -162 395 330 202 348 -163 348 330 202 209 -164 324 312 316 271 -165 266 308 324 272 -166 324 366 308 227 -167 242 264 245 308 -168 272 266 269 324 -169 135 151 319 139 -170 40 35 28 29 -171 88 148 129 342 -172 325 342 148 88 -173 314 116 147 166 -174 77 353 320 94 -175 331 262 319 306 -176 319 317 139 316 -177 450 329 482 328 -178 183 307 147 166 -179 188 361 176 197 -180 169 179 313 174 -181 314 196 348 373 -182 102 84 116 353 -183 102 77 84 353 -184 191 147 319 317 -185 307 262 257 312 -186 307 257 246 235 -187 307 257 262 246 -188 128 318 144 124 -189 246 314 237 253 -190 314 203 237 234 -191 142 128 318 138 -192 253 237 234 314 -193 306 319 331 336 -194 307 314 235 246 -195 316 250 312 191 -196 450 403 349 329 -197 121 297 101 143 -198 382 164 101 297 -199 369 198 322 193 -200 264 266 324 269 -201 322 354 170 207 -202 322 170 193 207 -203 353 84 116 110 -204 70 302 68 83 -205 331 311 234 395 -206 323 493 282 301 -207 269 278 324 271 -208 278 312 324 271 -209 207 170 180 184 -210 207 170 193 180 -211 325 130 175 308 -212 146 354 170 154 -213 354 302 342 146 -214 161 348 510 181 -215 182 314 199 235 -216 322 354 369 170 -217 231 207 322 198 -218 313 322 375 341 -219 375 361 341 322 -220 322 207 193 198 -221 297 143 164 101 -222 221 213 240 232 -223 190 188 308 297 -224 341 361 375 382 -225 341 308 313 322 -226 134 158 184 354 -227 247 308 261 249 -228 263 308 260 251 -229 318 319 159 144 -230 309 262 306 319 -231 250 204 243 312 -232 448 192 167 378 -233 37 333 620 35 -234 37 33 333 35 -235 297 318 316 324 -236 167 448 378 153 -237 212 218 233 219 -238 88 325 342 494 -239 246 307 314 253 -240 307 253 246 262 -241 126 311 150 348 -242 388 611 336 514 -243 348 234 420 314 -244 236 254 331 306 -245 348 314 311 234 -246 211 308 360 417 -247 373 102 320 125 -248 316 250 191 438 -249 250 205 191 438 -250 254 262 306 309 -251 254 309 306 310 -252 299 254 306 310 -253 331 262 306 254 -254 292 294 295 293 -255 194 307 215 204 -256 304 306 384 299 -257 267 312 257 262 -258 353 192 378 155 -259 319 159 336 195 -260 353 192 373 378 -261 336 185 388 195 -262 312 250 271 267 -263 271 250 312 316 -264 261 249 308 265 -265 268 308 265 261 -266 247 308 249 228 -267 227 195 324 226 -268 366 324 415 337 -269 337 366 324 357 -270 190 195 318 324 -271 156 318 124 144 -272 263 266 308 264 -273 251 263 308 264 -274 197 198 322 369 -275 154 354 369 342 -276 188 308 228 227 -277 79 328 138 92 -278 316 317 139 156 -279 360 175 308 174 -280 255 251 308 322 -281 255 256 252 308 -282 247 228 231 308 -283 247 308 231 256 -284 134 149 394 354 -285 83 162 96 302 -286 161 373 140 348 -287 88 67 302 68 -288 302 97 88 68 -289 512 166 314 182 -290 420 192 314 234 -291 348 330 420 234 -292 192 314 234 203 -293 91 123 105 115 -294 394 70 302 81 -295 309 273 262 319 -296 319 262 312 273 -297 67 302 68 70 -298 271 278 312 267 -299 66 57 326 58 -300 188 136 176 361 -301 157 331 185 504 -302 136 361 188 164 -303 244 250 271 316 -304 71 302 67 70 -305 244 213 232 240 -306 81 302 71 70 -307 354 149 108 146 -308 314 237 203 199 -309 506 378 435 629 -310 244 438 316 213 -311 97 302 169 162 -312 244 316 438 250 -313 313 129 342 169 -314 382 113 101 164 -315 506 435 378 94 -316 91 123 85 105 -317 308 264 245 251 -318 242 264 308 316 -319 450 349 482 329 -320 314 373 348 125 -321 92 138 159 144 -322 395 311 234 348 -323 278 273 324 312 -324 373 378 435 320 -325 147 311 319 135 -326 126 311 135 150 -327 126 135 311 147 -328 314 348 311 126 -329 83 302 82 70 -330 378 435 629 373 -331 195 159 165 318 -332 316 312 324 319 -333 156 175 316 387 -334 336 298 514 331 -335 88 342 129 302 -336 319 307 331 311 -337 253 314 311 307 -338 311 331 253 307 -339 297 341 308 130 -340 314 348 126 125 -341 147 314 311 126 -342 61 339 99 338 -343 250 204 312 191 -344 305 185 508 331 -345 211 242 308 316 -346 211 308 417 316 -347 213 316 211 417 -348 214 215 230 204 -349 244 316 242 211 -350 244 211 213 316 -351 465 501 344 502 -352 108 354 302 394 -353 313 129 148 342 -354 337 324 415 248 -355 337 258 366 357 -356 121 101 297 111 -357 382 101 111 297 -358 157 159 185 336 -359 226 336 195 324 -360 307 262 331 253 -361 307 262 319 331 -362 331 254 253 262 -363 248 336 552 296 -364 319 324 195 336 -365 248 296 226 336 -366 324 248 336 552 -367 147 183 191 307 -368 282 281 276 323 -369 281 323 282 301 -370 109 119 105 122 -371 297 143 117 318 -372 109 122 105 80 -373 308 366 324 272 -374 297 318 324 190 -375 297 190 164 318 -376 214 204 230 212 -377 224 212 214 230 -378 297 143 318 164 -379 264 308 324 266 -380 264 269 324 271 -381 132 117 143 318 -382 130 297 341 120 -383 341 130 120 98 -384 277 343 356 279 -385 325 308 175 313 -386 109 81 108 122 -387 109 122 108 146 -388 348 234 395 330 -389 341 111 120 297 -390 341 100 98 120 -391 341 111 100 120 -392 226 336 324 248 -393 318 319 324 195 -394 275 270 324 309 -395 309 336 324 319 -396 552 270 336 324 -397 273 309 275 324 -398 403 328 329 450 -399 382 111 341 297 -400 361 322 308 341 -401 361 341 308 297 -402 342 85 73 90 -403 342 73 85 80 -404 323 324 366 276 -405 361 297 164 382 -406 96 82 83 302 -407 45 647 44 42 -408 179 354 201 177 -409 53 621 54 347 -410 117 124 131 318 -411 156 144 316 318 -412 369 198 193 141 -413 342 302 88 67 -414 67 80 342 302 -415 73 80 342 67 -416 342 73 67 76 -417 372 528 289 285 -418 285 528 289 287 -419 355 98 325 494 -420 122 119 105 123 -421 394 82 134 302 -422 494 88 76 342 -423 109 81 122 80 -424 447 580 503 505 -425 114 118 141 145 -426 311 150 319 135 -427 108 122 302 146 -428 204 307 183 194 -429 191 204 307 183 -430 382 101 100 111 -431 382 111 100 341 -432 318 159 138 144 -433 588 281 301 356 -434 87 61 77 57 -435 318 159 165 138 -436 7 12 2 486 -437 316 191 319 317 -438 208 196 449 445 -439 322 369 354 313 -440 354 158 177 162 -441 354 169 162 179 -442 313 369 354 342 -443 179 162 354 177 -444 130 98 341 355 -445 325 130 341 355 -446 337 357 324 248 -447 324 357 227 248 -448 588 281 464 301 -449 375 341 382 98 -450 454 75 61 155 -451 353 77 84 74 -452 331 305 185 504 -453 311 331 319 150 -454 378 339 167 106 -455 318 190 142 165 -456 138 142 165 318 -457 18 12 397 14 -458 298 514 331 513 -459 118 137 141 168 -460 298 331 236 395 -461 395 298 331 513 -462 93 157 92 159 -463 354 158 184 177 -464 151 157 92 93 -465 78 93 151 92 -466 378 448 629 153 -467 102 314 126 125 -468 126 116 314 102 -469 61 72 303 75 -470 39 461 350 553 -471 350 39 33 461 -472 311 331 513 395 -473 311 331 305 509 -474 353 102 314 116 -475 204 215 243 307 -476 106 153 167 378 -477 97 162 83 302 -478 107 353 199 512 -479 297 188 164 190 -480 147 319 139 135 -481 77 353 87 74 -482 353 203 199 314 -483 512 314 353 199 -484 37 38 29 35 -485 485 140 373 125 -486 398 448 373 196 -487 196 570 373 398 -488 324 248 552 415 -489 415 270 552 324 -490 52 57 594 564 -491 285 289 414 287 -492 438 250 205 240 -493 524 425 25 17 -494 29 25 524 425 -495 87 77 61 353 -496 93 92 138 159 -497 93 92 79 138 -498 203 192 353 155 -499 192 353 314 203 -500 88 302 129 97 -501 169 342 354 302 -502 147 319 317 139 -503 435 426 629 373 -504 197 168 369 176 -505 369 176 361 197 -506 157 151 319 150 -507 307 319 312 191 -508 312 307 191 204 -509 628 373 441 374 -510 513 331 311 509 -511 49 594 413 46 -512 303 163 87 61 -513 146 342 154 122 -514 274 366 415 337 -515 274 258 366 337 -516 87 57 74 66 -517 304 306 336 384 -518 204 250 205 191 -519 110 74 66 87 -520 163 87 61 353 -521 204 205 250 241 -522 387 438 213 316 -523 150 160 348 311 -524 313 369 342 375 -525 313 322 369 375 -526 97 129 169 302 -527 504 305 393 150 -528 181 348 500 187 -529 610 527 42 44 -530 44 527 42 620 -531 311 305 456 509 -532 311 509 456 516 -533 365 512 166 116 -534 116 512 166 314 -535 509 305 508 331 -536 322 369 193 170 -537 535 526 581 632 -538 182 314 512 199 -539 497 441 373 540 -540 37 42 46 527 -541 500 209 187 348 -542 312 257 307 243 -543 323 366 281 276 -544 348 420 209 196 -545 366 279 276 272 -546 202 500 186 348 -547 386 406 221 232 -548 64 526 62 489 -549 336 159 185 195 -550 404 24 559 335 -551 404 24 607 559 -552 384 336 552 270 -553 244 240 438 213 -554 244 438 240 250 -555 430 461 620 333 -556 461 333 35 620 -557 61 564 64 334 -558 381 437 47 413 -559 279 277 265 258 -560 279 277 258 274 -561 186 500 181 348 -562 140 510 348 160 -563 377 410 36 350 -564 202 330 236 209 -565 380 345 614 468 -566 99 339 378 106 -567 378 106 418 99 -568 378 448 373 629 -569 194 235 307 182 -570 194 307 166 182 -571 194 307 183 166 -572 353 373 320 378 -573 68 97 83 302 -574 347 496 604 476 -575 161 181 411 373 -576 570 374 400 368 -577 40 38 35 29 -578 364 289 327 528 -579 324 309 319 273 -580 353 378 320 94 -581 358 91 471 375 -582 134 394 302 354 -583 394 149 108 354 -584 172 354 146 149 -585 382 358 471 375 -586 101 382 90 358 -587 651 346 638 390 -588 382 90 100 101 -589 334 594 564 475 -590 369 361 375 322 -591 322 197 369 361 -592 342 325 98 494 -593 325 313 148 342 -594 342 325 375 98 -595 115 369 123 367 -596 342 98 76 494 -597 369 375 576 115 -598 353 512 116 314 -599 336 304 552 296 -600 336 306 304 298 -601 226 514 336 296 -602 108 302 81 394 -603 181 411 373 374 -604 26 440 571 383 -605 26 383 346 440 -606 211 360 308 206 -607 87 74 57 77 -608 358 113 101 382 -609 195 388 336 226 -610 241 233 218 238 -611 155 339 378 353 -612 345 79 468 476 -613 213 316 417 175 -614 387 316 213 175 -615 312 307 262 319 -616 435 485 426 373 -617 435 373 125 485 -618 299 310 306 384 -619 26 425 25 34 -620 118 114 367 434 -621 26 34 25 608 -622 223 222 529 392 -623 527 38 37 35 -624 37 527 46 38 -625 342 123 90 375 -626 342 123 85 90 -627 335 350 33 35 -628 350 461 33 35 -629 85 91 90 123 -630 259 247 308 261 -631 629 628 448 373 -632 633 142 328 128 -633 629 497 628 373 -634 303 61 87 72 -635 236 254 234 331 -636 341 98 325 355 -637 373 570 400 569 -638 398 570 373 569 -639 49 413 527 46 -640 49 46 527 457 -641 49 626 48 527 -642 241 204 243 250 -643 49 527 48 457 -644 392 218 233 238 -645 233 392 238 223 -646 178 198 197 141 -647 198 197 141 369 -648 364 290 287 528 -649 419 381 564 413 -650 92 78 79 59 -651 192 373 314 353 -652 386 406 238 423 -653 367 369 137 391 -654 437 413 419 606 -655 413 437 47 606 -656 239 252 322 255 -657 454 61 339 155 -658 34 466 425 29 -659 221 386 232 240 -660 60 64 489 484 -661 484 65 60 64 -662 212 386 218 221 -663 241 240 386 212 -664 241 205 240 212 -665 607 24 16 470 -666 620 42 37 527 -667 37 333 42 620 -668 95 87 66 69 -669 113 164 382 361 -670 410 30 432 21 -671 371 1 522 458 -672 527 47 43 40 -673 596 425 17 15 -674 393 456 160 311 -675 110 95 87 66 -676 160 311 456 516 -677 512 511 365 166 -678 353 511 365 512 -679 128 144 318 138 -680 341 130 325 308 -681 87 61 57 58 -682 419 58 564 72 -683 414 289 327 364 -684 320 378 435 94 -685 364 528 287 289 -686 212 221 205 240 -687 134 172 149 354 -688 134 172 354 184 -689 319 147 191 307 -690 589 641 606 436 -691 347 79 59 476 -692 345 79 476 92 -693 92 138 144 328 -694 86 92 144 328 -695 32 399 34 38 -696 306 309 336 310 -697 347 604 468 476 -698 347 468 79 476 -699 614 345 79 468 -700 384 310 336 270 -701 439 25 26 422 -702 196 192 314 420 -703 348 420 196 314 -704 132 143 142 318 -705 164 142 143 318 -706 386 406 423 221 -707 35 527 38 40 -708 158 354 96 162 -709 169 302 354 162 -710 334 475 564 363 -711 155 61 303 75 -712 94 353 378 339 -713 224 233 219 212 -714 214 215 204 194 -715 204 243 230 241 -716 204 230 212 241 -717 391 474 369 136 -718 286 588 528 356 -719 35 620 527 47 -720 136 474 361 565 -721 566 526 632 64 -722 490 439 11 14 -723 209 330 420 348 -724 35 527 40 47 -725 76 342 73 98 -726 77 353 102 320 -727 268 308 261 260 -728 167 155 339 378 -729 465 289 385 344 -730 255 308 260 259 -731 335 24 470 33 -732 559 24 470 335 -733 522 1 371 428 -734 347 53 496 54 -735 559 24 607 470 -736 476 347 496 54 -737 312 204 243 307 -738 230 215 243 204 -739 241 218 212 386 -740 241 238 218 386 -741 29 33 28 23 -742 23 335 559 470 -743 297 382 361 341 -744 336 611 185 331 -745 388 185 336 611 -746 353 373 102 320 -747 373 102 314 353 -748 44 527 606 610 -749 74 110 84 353 -750 610 527 606 413 -751 325 341 375 98 -752 369 136 137 391 -753 169 354 342 313 -754 274 366 279 281 -755 281 366 279 276 -756 322 313 206 308 -757 414 289 344 385 -758 114 546 367 434 -759 367 391 434 369 -760 155 163 303 61 -761 47 620 527 44 -762 384 304 552 336 -763 384 310 306 336 -764 99 378 339 94 -765 506 94 378 99 -766 365 353 512 116 -767 378 99 418 506 -768 478 23 559 470 -769 328 86 633 128 -770 265 308 268 266 -771 268 308 263 266 -772 564 419 436 58 -773 460 75 564 65 -774 339 61 99 94 -775 518 564 65 460 -776 643 216 229 392 -777 342 88 76 67 -778 26 422 11 439 -779 26 440 439 571 -780 411 161 373 441 -781 442 467 412 10 -782 350 377 24 33 -783 225 409 217 223 -784 410 377 24 350 -785 24 350 33 335 -786 371 522 523 458 -787 278 324 273 276 -788 273 324 275 276 -789 170 354 172 184 -790 169 179 354 313 -791 607 16 24 580 -792 367 391 137 118 -793 35 620 37 527 -794 548 33 461 333 -795 414 385 344 294 -796 414 289 288 344 -797 65 64 484 454 -798 93 79 78 401 -799 375 382 358 90 -800 413 575 564 594 -801 187 181 368 189 -802 358 375 90 91 -803 275 276 324 323 -804 493 270 323 275 -805 532 323 276 275 -806 324 270 323 415 -807 275 323 324 270 -808 157 331 319 336 -809 454 339 61 338 -810 527 47 507 43 -811 74 87 110 353 -812 61 353 339 155 -813 444 445 618 379 -814 173 133 160 510 -815 352 604 468 347 -816 161 181 373 348 -817 23 335 470 33 -818 181 187 374 373 -819 29 35 28 33 -820 348 187 181 373 -821 562 10 412 447 -822 10 580 503 447 -823 399 351 34 38 -824 515 592 399 32 -825 434 112 637 474 -826 134 82 96 302 -827 224 230 233 212 -828 134 302 96 354 -829 302 354 162 96 -830 376 64 60 564 -831 606 640 589 45 -832 369 137 168 141 -833 113 361 583 136 -834 197 369 168 141 -835 12 7 4 14 -836 510 181 173 171 -837 61 339 353 94 -838 369 154 170 354 -839 404 607 24 21 -840 411 374 578 441 -841 500 186 189 480 -842 535 526 632 566 -843 628 441 497 483 -844 478 23 28 559 -845 28 335 559 23 -846 93 92 78 79 -847 554 473 631 453 -848 198 178 193 141 -849 187 444 209 500 -850 226 388 336 514 -851 287 464 285 528 -852 528 301 285 372 -853 497 629 426 373 -854 394 302 70 82 -855 64 61 454 75 -856 444 587 618 445 -857 467 458 371 523 -858 371 523 520 467 -859 371 520 551 467 -860 385 465 294 292 -861 468 604 345 476 -862 584 517 63 345 -863 176 136 137 369 -864 439 440 18 571 -865 490 26 11 439 -866 324 366 227 357 -867 606 413 419 436 -868 527 48 477 507 -869 527 477 48 457 -870 527 492 48 507 -871 527 626 48 492 -872 134 354 96 158 -873 62 64 489 60 -874 52 57 370 594 -875 326 52 55 564 -876 524 425 17 19 -877 373 441 161 540 -878 373 161 140 540 -879 66 326 55 58 -880 58 326 55 564 -881 310 309 336 270 -882 324 270 336 309 -883 157 336 185 331 -884 181 411 171 161 -885 640 589 641 606 -886 537 557 621 54 -887 282 285 340 288 -888 372 285 288 340 -889 382 100 98 341 -890 502 294 465 292 -891 43 34 351 38 -892 221 240 213 205 -893 438 240 205 213 -894 425 466 524 29 -895 354 302 146 108 -896 435 426 506 629 -897 497 506 426 629 -898 187 181 374 368 -899 517 79 614 345 -900 342 90 73 98 -901 180 141 178 152 -902 178 152 141 168 -903 193 180 141 178 -904 140 161 348 510 -905 9 442 13 362 -906 442 9 13 467 -907 408 505 503 580 -908 607 580 408 16 -909 327 289 414 385 -910 372 284 283 340 -911 359 89 526 566 -912 607 539 478 470 -913 140 373 125 348 -914 328 86 92 517 -915 527 47 44 606 -916 155 163 61 353 -917 367 391 118 434 -918 338 64 61 454 -919 64 338 484 454 -920 359 89 566 338 -921 489 526 566 64 -922 448 192 378 373 -923 350 39 377 33 -924 369 137 176 168 -925 377 350 553 39 -926 325 313 375 341 -927 340 288 625 282 -928 342 313 375 325 -929 524 466 19 20 -930 425 466 19 524 -931 348 395 186 202 -932 610 44 42 45 -933 409 433 217 223 -934 217 433 529 223 -935 582 375 471 115 -936 434 474 637 369 -937 382 375 471 582 -938 98 90 382 375 -939 382 100 90 98 -940 123 105 122 85 -941 122 85 105 80 -942 43 40 34 38 -943 369 474 361 136 -944 469 452 564 460 -945 46 41 527 457 -946 415 366 274 323 -947 191 387 316 438 -948 191 387 156 316 -949 434 391 474 369 -950 502 294 344 465 -951 502 294 292 293 -952 476 59 92 79 -953 306 309 319 336 -954 528 301 464 285 -955 301 282 464 285 -956 208 449 210 379 -957 210 379 220 208 -958 551 520 10 467 -959 359 89 339 106 -960 110 353 365 116 -961 353 511 110 365 -962 118 141 145 152 -963 34 28 466 29 -964 621 347 59 54 -965 59 621 79 347 -966 342 80 122 302 -967 369 123 154 342 -968 123 85 122 342 -969 122 342 85 80 -970 450 349 612 482 -971 564 55 436 413 -972 40 38 29 34 -973 606 641 413 436 -974 28 35 335 33 -975 34 25 32 29 -976 487 548 495 479 -977 187 209 196 348 -978 461 479 430 495 -979 311 513 509 186 -980 395 311 348 186 -981 187 196 209 444 -982 485 540 426 373 -983 21 580 24 447 -984 412 447 21 562 -985 412 562 21 446 -986 447 580 24 10 -987 46 527 610 413 -988 229 392 216 222 -989 323 281 366 274 -990 281 301 274 323 -991 599 625 429 282 -992 608 25 32 34 -993 372 288 284 340 -994 227 324 190 308 -995 373 196 348 187 -996 425 25 34 29 -997 628 448 373 591 -998 591 448 373 398 -999 477 43 41 527 -1000 80 71 81 302 -1001 457 477 41 527 -1002 647 487 430 479 -1003 628 373 497 441 -1004 578 628 441 374 -1005 410 24 335 350 -1006 393 311 160 150 -1007 367 118 137 141 -1008 343 488 356 396 -1009 87 72 61 58 -1010 488 588 356 396 -1011 476 54 59 347 -1012 94 353 61 77 -1013 110 353 87 107 -1014 251 245 322 201 -1015 245 179 322 201 -1016 11 422 486 14 -1017 287 588 464 528 -1018 10 467 412 551 -1019 13 551 412 467 -1020 371 467 551 13 -1021 551 10 8 412 -1022 113 164 361 136 -1023 425 25 15 26 -1024 140 348 125 160 -1025 451 588 528 286 -1026 180 152 145 141 -1027 607 16 539 470 -1028 374 570 400 373 -1029 373 374 556 400 -1030 374 373 556 628 -1031 441 628 578 483 -1032 497 642 418 629 -1033 167 89 106 339 -1034 346 440 390 521 -1035 369 123 342 375 -1036 583 382 498 361 -1037 564 75 72 61 -1038 564 61 64 75 -1039 345 517 79 92 -1040 533 529 223 222 -1041 498 582 576 375 -1042 575 376 609 49 -1043 412 10 8 447 -1044 561 472 549 468 -1045 239 322 252 231 -1046 397 12 4 14 -1047 367 369 434 576 -1048 206 313 322 179 -1049 322 179 313 354 -1050 12 2 4 7 -1051 346 638 26 608 -1052 66 87 57 58 -1053 72 58 564 61 -1054 322 207 231 239 -1055 201 354 322 207 -1056 239 255 322 201 -1057 533 402 529 222 -1058 60 518 564 65 -1059 11 486 12 14 -1060 118 168 141 152 -1061 60 376 564 518 -1062 576 375 582 115 -1063 515 34 399 351 -1064 334 564 64 363 -1065 311 331 150 305 -1066 473 538 597 519 -1067 564 594 575 475 -1068 36 30 432 410 -1069 343 396 356 279 -1070 281 279 356 396 -1071 281 274 301 356 -1072 486 7 14 422 -1073 642 153 585 629 -1074 153 642 628 629 -1075 503 447 8 10 -1076 461 430 620 416 -1077 493 270 275 280 -1078 275 493 532 323 -1079 532 493 282 323 -1080 461 495 430 416 -1081 493 532 280 275 -1082 389 381 47 413 -1083 49 413 626 527 -1084 500 189 186 181 -1085 498 382 582 375 -1086 410 30 24 377 -1087 30 410 36 377 -1088 366 265 279 272 -1089 608 34 32 31 -1090 527 40 43 38 -1091 46 527 41 38 -1092 43 527 38 41 -1093 597 639 7 486 -1094 306 298 336 331 -1095 11 26 15 543 -1096 554 11 15 543 -1097 416 430 620 649 -1098 291 290 364 327 -1099 637 498 375 361 -1100 39 548 33 461 -1101 422 634 25 543 -1102 583 582 382 113 -1103 367 114 118 141 -1104 473 422 11 554 -1105 178 197 168 141 -1106 375 369 123 115 -1107 91 123 115 375 -1108 377 350 36 553 -1109 173 181 516 186 -1110 110 95 107 87 -1111 353 107 163 87 -1112 46 527 42 610 -1113 500 209 348 202 -1114 334 61 564 57 -1115 510 103 140 161 -1116 160 104 140 133 -1117 486 11 473 422 -1118 336 611 331 514 -1119 576 434 637 369 -1120 29 466 524 20 -1121 366 279 265 258 -1122 366 279 258 274 -1123 89 484 338 454 -1124 462 621 568 534 -1125 133 104 140 103 -1126 462 534 568 531 -1127 521 440 390 563 -1128 383 440 563 390 -1129 141 154 170 369 -1130 141 193 369 170 -1131 173 181 510 516 -1132 348 510 181 516 -1133 324 366 276 272 -1134 415 324 366 323 -1135 477 527 507 43 -1136 26 25 440 346 -1137 430 333 42 479 -1138 460 452 564 75 -1139 31 515 32 592 -1140 181 189 187 500 -1141 389 527 413 47 -1142 413 389 626 527 -1143 376 590 49 575 -1144 331 611 185 508 -1145 223 392 407 219 -1146 223 233 392 219 -1147 538 648 597 519 -1148 597 648 538 486 -1149 557 537 568 499 -1150 553 39 461 416 -1151 290 528 451 287 -1152 554 453 332 560 -1153 601 467 458 9 -1154 623 525 535 566 -1155 566 525 535 526 -1156 378 106 431 418 -1157 53 496 352 347 -1158 564 300 419 72 -1159 564 452 300 72 -1160 2 6 7 486 -1161 421 451 528 286 -1162 451 528 588 287 -1163 409 595 433 491 -1164 79 621 78 401 -1165 401 621 78 555 -1166 78 537 555 621 -1167 599 340 282 301 -1168 493 599 282 301 -1169 430 620 42 333 -1170 565 498 112 637 -1171 583 498 112 565 -1172 599 429 536 282 -1173 599 625 459 429 -1174 543 554 332 15 -1175 474 112 637 565 -1176 364 290 528 327 -1177 548 461 479 333 -1178 461 333 430 479 -1179 383 390 346 440 -1180 65 60 64 564 -1181 65 64 75 564 -1182 383 638 346 390 -1183 380 468 614 549 -1184 532 282 276 323 -1185 157 331 504 150 -1186 89 454 338 339 -1187 167 454 89 339 -1188 8 5 10 551 -1189 5 520 10 551 -1190 492 626 545 389 -1191 389 626 545 469 -1192 37 33 35 29 -1193 615 568 499 557 -1194 500 186 480 202 -1195 54 56 53 496 -1196 294 295 291 385 -1197 295 291 385 327 -1198 295 294 292 385 -1199 474 637 361 565 -1200 497 373 426 540 -1201 40 29 28 34 -1202 535 525 581 526 -1203 328 92 79 517 -1204 496 56 352 604 -1205 459 536 646 493 -1206 459 429 624 536 -1207 493 536 280 532 -1208 25 346 26 608 -1209 351 399 41 38 -1210 43 41 38 351 -1211 527 413 47 606 -1212 308 252 322 231 -1213 308 255 322 252 -1214 256 231 252 308 -1215 256 308 259 247 -1216 21 30 24 410 -1217 21 30 562 24 -1218 315 621 555 568 -1219 217 219 223 407 -1220 225 223 219 233 -1221 407 217 529 223 -1222 381 452 300 564 -1223 595 635 433 491 -1224 414 385 291 327 -1225 416 39 461 495 -1226 461 39 548 495 -1227 461 548 479 495 -1228 301 282 281 464 -1229 301 282 285 340 -1230 315 621 568 462 -1231 372 289 288 285 -1232 289 288 285 414 -1233 431 153 106 378 -1234 55 641 589 436 -1235 651 572 638 608 -1236 564 452 72 75 -1237 573 534 567 613 -1238 567 645 600 534 -1239 499 568 577 537 -1240 414 327 291 364 -1241 561 549 614 468 -1242 338 489 566 64 -1243 89 484 489 338 -1244 385 294 465 344 -1245 445 196 444 209 -1246 209 550 444 427 -1247 490 14 11 12 -1248 490 18 14 12 -1249 597 648 486 7 -1250 486 639 7 422 -1251 639 473 597 631 -1252 529 491 616 533 -1253 435 320 125 373 -1254 616 491 529 541 -1255 497 628 642 629 -1256 46 52 413 602 -1257 623 359 566 338 -1258 497 506 629 418 -1259 99 359 623 338 -1260 65 64 454 75 -1261 209 617 550 427 -1262 86 328 144 128 -1263 570 187 374 368 -1264 403 86 633 328 -1265 601 522 458 523 -1266 604 352 472 56 -1267 273 312 319 324 -1268 380 614 63 549 -1269 561 549 63 614 -1270 623 525 566 359 -1271 359 525 566 526 -1272 566 89 526 489 -1273 113 382 358 471 -1274 582 471 382 113 -1275 523 467 458 601 -1276 268 308 260 263 -1277 374 628 556 578 -1278 498 582 382 583 -1279 586 645 534 557 -1280 361 176 369 136 -1281 277 356 274 279 -1282 576 637 375 369 -1283 637 375 369 361 -1284 373 556 569 400 -1285 556 373 569 628 -1286 447 562 24 21 -1287 47 492 527 507 -1288 495 39 548 487 -1289 572 608 651 650 -1290 541 619 542 574 -1291 27 562 21 30 -1292 21 446 562 27 -1293 517 328 614 79 -1294 545 530 622 575 -1295 522 371 523 558 -1296 523 371 520 558 -1297 471 91 115 375 -1298 578 127 628 556 -1299 127 153 628 556 -1300 641 413 55 52 -1301 55 564 436 58 -1302 564 334 57 594 -1303 55 641 436 413 -1304 575 413 49 594 -1305 15 17 596 560 -1306 521 440 563 571 -1307 632 581 62 526 -1308 285 372 301 340 -1309 290 451 528 421 -1310 326 57 564 58 -1311 205 212 241 204 -1312 564 452 469 381 -1313 239 322 207 201 -1314 223 392 529 407 -1315 381 564 413 469 -1316 395 513 311 186 -1317 389 469 413 626 -1318 136 361 583 565 -1319 586 645 567 534 -1320 32 25 608 346 -1321 369 367 137 141 -1322 469 575 545 622 -1323 593 543 634 422 -1324 373 569 628 591 -1325 556 569 153 628 -1326 196 187 373 570 -1327 167 454 339 155 -1328 590 626 575 530 -1329 536 493 282 532 -1330 133 140 160 510 -1331 376 363 64 564 -1332 209 427 444 587 -1333 571 440 563 383 -1334 498 375 576 637 -1335 531 534 568 579 -1336 534 568 557 621 -1337 218 392 643 238 -1338 568 555 577 537 -1339 475 609 363 49 -1340 363 609 475 564 -1341 393 311 150 305 -1342 19 425 17 596 -1343 596 17 603 560 -1344 522 428 371 558 -1345 127 628 497 483 -1346 492 48 545 626 -1347 21 607 24 580 -1348 132 117 318 128 -1349 633 132 547 142 -1350 437 381 419 413 -1351 419 381 437 300 -1352 173 181 186 171 -1353 405 613 600 534 -1354 632 526 62 64 -1355 489 484 64 338 -1356 600 54 53 621 -1357 29 20 28 466 -1358 20 28 466 443 -1359 49 48 626 590 -1360 63 345 614 380 -1361 584 345 63 380 -1362 470 607 559 478 -1363 28 23 22 20 -1364 478 23 22 28 -1365 473 422 554 631 -1366 555 537 568 621 -1367 18 490 14 439 -1368 596 17 19 603 -1369 571 440 18 521 -1370 542 491 616 541 -1371 534 568 615 557 -1372 534 568 579 615 -1373 392 222 229 238 -1374 626 48 530 590 -1375 238 406 229 423 -1376 629 585 642 418 -1377 418 506 629 378 -1378 378 431 629 418 -1379 153 448 628 591 -1380 591 569 628 153 -1381 550 209 500 627 -1382 515 31 32 34 -1383 209 627 550 617 -1384 569 556 153 400 -1385 645 621 557 54 -1386 529 491 533 223 -1387 601 1 458 522 -1388 522 601 1 3 -1389 359 339 99 106 -1390 338 99 359 339 -1391 49 575 626 413 -1392 473 597 631 453 -1393 605 564 518 460 -1394 222 392 402 529 -1395 113 382 583 361 -1396 33 335 28 23 -1397 370 52 594 46 -1398 408 505 580 607 -1399 413 640 602 641 -1400 630 376 564 609 -1401 49 376 609 363 -1402 363 376 609 564 -1403 393 456 311 305 -1404 218 221 386 643 -1405 643 386 423 221 -1406 141 123 369 367 -1407 498 382 375 361 -1408 474 637 369 361 -1409 558 371 520 551 -1410 558 428 371 551 -1411 374 441 411 373 -1412 422 25 26 543 -1413 25 17 15 634 -1414 606 44 610 45 -1415 367 115 369 576 -1416 367 576 546 115 -1417 636 573 567 613 -1418 615 51 579 573 -1419 50 51 615 636 -1420 55 413 564 52 -1421 594 52 413 46 -1422 564 326 52 57 -1423 367 434 546 576 -1424 208 449 379 445 -1425 379 445 544 208 -1426 26 439 440 25 -1427 622 575 605 469 -1428 636 586 567 573 -1429 573 586 567 534 -1430 599 625 340 283 -1431 605 630 518 564 -1432 171 510 181 161 -1433 32 29 38 34 -1434 402 216 392 222 -1435 223 222 392 238 -1436 389 492 527 47 -1437 389 492 626 527 -1438 577 555 78 537 -1439 315 621 401 555 -1440 15 598 634 560 -1441 634 17 15 560 -1442 481 142 328 633 -1443 128 328 144 138 -1444 413 610 640 606 -1445 640 606 610 45 -1446 379 449 444 445 -1447 187 449 196 444 -1448 445 449 444 196 -1449 605 564 460 469 -1450 575 564 605 469 -1451 541 200 619 574 -1452 564 436 419 413 -1453 517 482 63 614 -1454 154 369 141 123 -1455 583 498 565 361 -1456 498 361 637 565 -1457 622 530 630 575 -1458 21 30 432 27 -1459 173 510 160 516 -1460 311 160 348 516 -1461 485 140 540 373 -1462 21 505 580 447 -1463 490 26 439 571 -1464 379 544 220 208 -1465 348 516 181 186 -1466 186 509 311 516 -1467 209 202 627 617 -1468 433 635 529 491 -1469 430 42 620 44 -1470 649 430 620 44 -1471 529 635 541 491 -1472 404 24 410 21 -1473 404 410 24 335 -1474 89 338 359 339 -1475 450 328 482 517 -1476 517 328 482 614 -1477 78 59 537 621 -1478 588 396 281 356 -1479 286 488 588 356 -1480 424 543 593 422 -1481 463 607 408 16 -1482 389 381 413 469 -1483 413 469 575 626 -1484 626 469 575 545 -1485 554 11 543 422 -1486 459 624 646 536 -1487 332 543 593 424 -1488 631 554 424 422 -1489 153 431 629 378 -1490 545 48 530 626 -1491 626 530 545 575 -1492 59 621 78 79 -1493 160 510 348 516 -1494 626 590 575 49 -1495 576 434 112 637 -1496 498 576 112 637 -1497 346 651 638 608 -1498 13 442 412 362 -1499 13 467 412 442 -1500 132 142 633 128 -1501 184 180 172 170 -1502 631 332 424 554 -1503 531 573 579 51 -1504 521 571 563 18 -1505 599 625 282 340 -1506 622 630 605 575 -1507 562 442 362 412 -1508 193 180 170 141 -1509 50 644 636 615 -1510 443 466 20 19 -1511 616 542 533 491 -1512 413 594 564 52 -1513 621 53 600 405 -1514 362 562 446 27 -1515 403 547 321 481 -1516 403 481 321 329 -1517 562 442 412 10 -1518 493 459 536 599 -1519 493 599 536 282 -1520 450 86 328 517 -1521 413 602 610 46 -1522 29 23 28 20 -1523 223 409 433 491 -1524 621 59 537 54 -1525 13 362 412 446 -1526 439 422 11 14 -1527 639 473 631 422 -1528 450 612 584 517 -1529 450 482 612 517 -1530 413 641 602 52 -1531 447 10 24 562 -1532 531 573 534 579 -1533 380 345 468 604 -1534 587 427 444 618 -1535 613 567 600 534 -1536 218 386 238 643 -1537 643 238 423 386 -1538 347 496 352 604 -1539 63 345 517 614 -1540 584 612 63 517 -1541 629 431 585 418 -1542 153 431 585 629 -1543 463 539 478 607 -1544 463 539 607 16 -1545 564 609 475 575 -1546 533 529 402 616 -1547 376 630 564 518 -1548 645 54 600 621 -1549 380 468 472 604 -1550 604 468 472 352 -1551 380 468 549 472 -1552 570 187 373 374 -1553 606 413 641 640 -1554 413 610 602 640 -1555 458 467 13 9 -1556 467 458 13 371 -1557 11 422 26 543 -1558 25 17 425 15 -1559 646 536 280 493 -1560 646 624 280 536 -1561 647 430 44 42 -1562 618 544 220 379 -1563 648 6 486 7 -1564 648 6 538 486 -1565 403 633 547 481 -1566 403 328 633 481 -1567 483 127 628 578 -1568 486 7 12 14 -1569 53 56 352 496 -1570 340 288 284 625 -1571 283 340 284 625 -1572 561 352 472 468 -1573 86 450 328 403 -1574 329 403 481 328 -1575 455 288 284 372 -1576 501 288 284 455 -1577 376 530 575 630 -1578 630 376 609 575 -1579 430 479 42 647 -1580 621 405 600 534 -1581 22 28 20 443 -1582 643 238 229 423 -1583 481 633 547 142 -1584 558 428 551 652 -1585 509 611 331 508 -1586 513 514 331 611 -1587 509 513 331 611 -1588 601 9 1 3 -1589 289 288 344 501 -1590 515 32 399 34 -1591 403 321 349 329 -1592 392 229 643 238 -1593 618 445 544 379 -1594 618 587 544 445 -1595 531 613 534 573 -1596 629 153 448 628 -1597 538 473 597 486 -1598 597 473 639 486 -1599 650 31 608 346 -1600 607 505 580 21 -1601 288 455 289 372 -1602 289 455 288 501 -1603 376 530 590 575 -1604 49 594 475 575 -1605 356 279 281 274 -1606 550 209 444 500 -1607 362 412 446 562 -1608 529 433 491 223 -1609 455 372 284 283 -1610 465 501 455 289 -1611 465 289 344 501 -1612 445 209 444 587 -1613 153 642 127 628 -1614 294 385 291 414 -1615 283 625 459 599 -1616 613 531 51 573 -1617 636 573 613 51 -1618 557 621 568 537 -1619 558 551 520 5 -1620 500 209 202 627 -1621 635 200 541 574 -1622 595 200 635 574 -1623 558 652 551 5 -1624 534 579 573 615 -1625 605 575 630 564 -1626 31 346 32 608 -1627 631 424 639 422 -1628 383 346 638 26 -1629 469 575 564 413 -1630 15 560 332 598 -1631 15 554 332 560 -1632 586 557 534 615 -1633 573 586 534 615 -1634 332 543 598 593 -1635 543 332 598 15 -1636 609 575 564 630 -1637 554 631 332 453 -1638 424 554 543 422 -1639 608 346 651 650 -1640 487 495 430 479 -1641 645 621 534 557 -1642 645 621 600 534 -1643 542 491 541 574 -1644 541 635 574 491 -1645 636 644 586 573 -1646 573 586 615 644 -1647 543 634 598 593 -1648 497 127 642 628 -1649 598 543 15 634 -1650 25 15 543 634 -1651 473 519 597 453 -1652 595 574 635 491 -1653 636 51 615 573 -1654 644 573 636 615 -$EndElements diff --git a/test/user/testdata/shark_41_ascii_missing_node_header.msh b/test/user/testdata/shark_41_ascii_missing_node_header.msh deleted file mode 100644 index 55b864c8..00000000 --- a/test/user/testdata/shark_41_ascii_missing_node_header.msh +++ /dev/null @@ -1,2972 +0,0 @@ -$MeshFormat -4.1 0 8 -$EndMeshFormat -$Entities -0 0 0 1 -0 -0.07334360000000001 -0.08523339999999999 -0.0005566629999999989 0.07028570000000001 0.0819076 0.0752128 0 0 -$EndEntities -$Nodes - -3 0 0 652 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 --0.07291259999999999 0.0537921 0.00170478 --0.072634 0.0799069 0.0578949 --0.0715817 0.0520377 0.00292576 --0.0701949 0.08025690000000001 0.0450431 --0.06876980000000001 0.060971 0.00326551 --0.06778000000000001 0.060358 0.00473741 --0.06727959999999999 0.08092489999999999 0.0425553 --0.0658074 0.0806443 0.0552302 --0.064933 0.0788176 0.0453762 --0.0636555 0.0610198 0.00141989 --0.0636111 0.0566004 -0.000556663 --0.0636791 0.0819076 0.0524468 --0.0623445 0.0580268 0.00335683 --0.0624856 0.06710579999999999 0.00581638 --0.0601398 0.0781111 0.0317589 --0.0599443 0.0685632 0.009924489999999999 --0.0592787 0.0571239 0.00105116 --0.0587906 0.07199990000000001 0.0117948 --0.0575605 0.0730663 0.016213 --0.057624 0.0811803 0.0403639 --0.0572339 0.0769387 0.0223219 --0.0559974 0.0749629 0.0235691 --0.0542321 0.0763209 0.0344665 --0.0540672 0.0649483 0.008218130000000001 --0.0541685 0.06611350000000001 0.00437935 --0.0532966 0.0805356 0.0466758 --0.0517252 0.07611850000000001 0.0183218 --0.0505257 0.06887699999999999 0.0152572 --0.0503803 0.07726379999999999 0.0406423 --0.0472855 0.0641041 0.00381053 --0.0469016 0.0648796 0.00821733 --0.0474599 0.07272679999999999 0.0265623 --0.0464733 0.070912 0.0103373 --0.0444756 0.07556740000000001 0.0221683 --0.0440208 0.07743129999999999 0.0371107 --0.0434135 0.0685101 0.0213943 --0.0425401 0.0668787 0.0159114 --0.0405353 0.07301630000000001 0.0309862 --0.0386417 0.073548 0.0160682 --0.037401 0.0664899 0.0122191 --0.0358693 0.06894450000000001 0.0243885 --0.0351058 0.06877709999999999 0.0124837 --0.0333614 0.07116500000000001 0.0238503 --0.0325564 0.0696271 0.024504 --0.032455 0.0625178 0.0200737 --0.0305469 0.0729973 0.0173921 --0.0276941 0.06523859999999999 0.0128238 --0.0272717 0.0628782 0.0141328 --0.0263428 0.00735496 0.00505748 --0.0256055 0.00658056 0.00327552 --0.0252856 0.0610141 0.0227762 --0.0250237 -0.00678856 0.00359213 --0.0242889 -0.00589458 0.00589675 --0.0216872 0.0639735 0.0255561 --0.0215721 -0.0119744 0.00619585 --0.0195136 0.0542304 0.0216195 --0.0168343 0.06495339999999999 0.0236547 --0.0161373 -0.00420129 0.00881529 --0.0148726 0.0585475 0.0106707 --0.0140647 0.0517836 0.0159197 --0.0142986 0.0543801 0.0051496 --0.0139611 -0.0178642 0.00651265 --0.0139803 0.0554055 0.0115694 --0.0124373 0.0606817 0.0122622 --0.0127423 0.0580719 0.0285553 --0.0127412 -0.07042320000000001 0.0234664 --0.0126173 -0.0801905 0.022154 --0.0125269 0.0592002 0.0346418 --0.0122498 -0.080596 0.0191154 --0.0121442 -0.0691943 0.0191352 --0.0123618 0.0658492 0.0197519 --0.0121018 -0.063334 0.0245151 --0.0118539 0.0462485 0.0243954 --0.0111067 0.0637388 0.0161162 --0.0110042 -0.0624802 0.0276395 --0.0109072 0.046219 0.0183571 --0.0107037 -0.000325242 0.00950432 --0.010183 -0.0121386 0.00674337 --0.009774420000000001 -0.0638147 0.0162637 --0.0097669 -0.06993340000000001 0.0156591 --0.00942656 -0.0836042 0.0182705 --0.009320999999999999 -0.0852334 0.0216727 --0.00803502 0.0401179 0.0263407 --0.00857808 -0.0579335 0.0163943 --0.007931580000000001 -0.0190616 0.0121625 --0.00782675 0.0573514 0.028038 --0.00773028 -0.0620746 0.0302044 --0.00764665 0.0537773 0.00961295 --0.00721562 -0.0507362 0.0224357 --0.00717408 -0.0528249 0.0179333 --0.00651588 -0.00739691 0.013024 --0.00691116 -0.00014073 0.00823716 --0.00661131 0.044183 0.0123 --0.00658663 0.0535365 0.0326225 --0.00630954 -0.08506569999999999 0.0194796 --0.00616497 -0.0797841 0.0261073 --0.00582999 -0.0494502 0.0287705 --0.00563359 0.0476479 0.00934546 --0.00506609 -0.0425596 0.0250833 --0.00453974 -0.0405694 0.0173853 --0.00447266 0.0319291 0.0205877 --0.00434886 0.0267225 0.00648417 --0.00418386 0.0253438 0.008421959999999999 --0.0041733 -0.0606038 0.0122716 --0.00385183 0.0479538 0.00869149 --0.00333705 0.051389 0.031593 --0.00333565 -0.06938809999999999 0.0119551 --0.00333748 -0.0650683 0.0110291 --0.00292457 0.0475597 0.0319288 --0.00280471 -0.0353375 0.0238411 --0.00273019 -0.0493159 0.0135756 --0.00255346 -0.0452657 0.0126112 --0.00249178 -0.0598565 0.010934 --0.00247351 -0.0533955 0.0149632 --0.00280465 0.0288144 0.0300227 --0.00225175 -0.030519 0.0236922 --0.00205777 -0.0595101 0.00715068 --0.0018581 -0.0627033 0.0116048 --0.00150112 -0.0384203 0.0313885 --0.00143547 -0.0337232 0.0176227 --0.00136747 -0.062725 0.0150152 --0.000884775 -0.0587825 0.0143119 --0.000624659 -0.0247814 0.0257906 --0.000489974 0.0225414 0.0188523 --6.05566e-05 0.0171338 0.0234086 -0.00150381 0.0360475 0.00675461 -0.000282178 -0.0241462 0.0174969 -0.000347869 -0.06752370000000001 0.0324883 -0.000429839 -0.0422219 0.0349169 -0.00028168 -0.0273698 0.0312235 -0.000952705 -0.0267391 0.0143612 -0.00105244 0.0186951 0.00689988 -0.0011109 -0.0779453 0.014663 -0.00137887 0.00842564 0.0258445 -0.00107238 -0.0462225 0.00980545 -0.00158113 -0.0561697 0.005809 -0.00165921 -0.0142314 0.0114909 -0.00169065 -0.00330978 0.027848 -0.0017282 0.0264299 0.00972258 -0.00196109 -0.062067 0.0125082 -0.00198494 -0.0249792 0.0122768 -0.00206797 -0.0322322 0.0125632 -0.00219287 -0.00991015 0.0199027 -0.00223228 -0.065619 0.00972103 -0.00226787 -0.06664 0.0139131 -0.00233081 0.009707510000000001 0.0349608 -0.0023033 -0.0550711 0.0357611 -0.00284591 -0.06958739999999999 0.0109337 -0.00313658 0.0123831 0.0152878 -0.00325266 -0.000639164 0.0164744 -0.00354678 -0.0651674 0.00553443 -0.00434877 0.0392681 0.00656793 -0.0034004 -0.0624097 0.0143354 -0.00410027 0.052311 0.0146156 -0.00425687 -0.0110681 0.0377954 -0.0043501 -0.0020508 0.015115 -0.00444422 -0.0785667 0.0168482 -0.00471578 -0.008727459999999999 0.0133588 -0.00486541 0.0192794 0.0102326 -0.00475235 0.0259901 0.00777948 -0.00497525 -0.0797755 0.0244877 -0.0052286 0.0545416 0.0234287 -0.00513856 -0.0361953 0.00904286 -0.00543656 -0.016404 0.0117933 -0.00521097 0.0361763 0.0357574 -0.00563068 0.0458779 0.0101474 -0.00602624 -0.0598053 0.00448538 -0.00669265 -0.0730234 0.0300997 -0.00671975 -0.0647944 0.0149968 -0.00743572 0.0219428 0.00498754 -0.00806977 -0.06766220000000001 0.0106835 -0.008580020000000001 0.0185363 0.00804532 -0.00900922 -0.0527441 0.0382868 -0.00967438 -0.0310472 0.0412759 -0.009690270000000001 -0.0470756 0.00574739 -0.009825469999999999 -0.0777201 0.0238208 -0.010337 -0.0646559 0.00738197 -0.0103691 -0.0715108 0.0301524 -0.0108524 -0.06519229999999999 0.0107074 -0.0112352 0.0223598 0.00496048 -0.0115762 0.0360388 0.034027 -0.011811 0.0150563 0.0411225 -0.0119389 -0.07108730000000001 0.0142927 -0.011481 0.000850754 0.00890493 -0.0122581 0.0177891 0.00726338 -0.0126044 0.0285097 0.0071727 -0.0126077 -0.0410848 0.00487059 -0.01325 0.0245576 0.00385279 -0.0133342 -0.0301914 0.00695184 -0.0134526 -0.00467313 0.044297 -0.0140263 0.0415073 0.0128325 -0.0139319 -0.0627506 0.0126489 -0.0144402 0.0213321 0.0408733 -0.0145153 -0.0120242 0.00709154 -0.0145254 0.0314471 0.00762861 -0.0143606 -0.0539791 0.00638859 -0.0153705 -0.0588177 0.00913193 -0.0158483 0.0424843 0.0267153 -0.0161677 0.0082135 0.0752128 -0.0160709 -0.0693691 0.0267104 -0.0163112 0.021127 0.00658374 -0.0163956 0.0418119 0.0180916 -0.0166653 0.00513625 0.0449469 -0.0171438 -0.009394380000000001 0.0462661 -0.0174416 -0.0497054 0.0373642 -0.0174198 -0.06569369999999999 0.0159871 -0.0177387 0.0346114 0.0053358 -0.0178439 0.0247259 0.00729322 -0.018247 0.0346901 0.00258831 -0.0182074 -0.0318958 0.0424624 -0.0183988 -0.00142899 0.0496692 -0.0188182 -0.018825 0.0447569 -0.0188285 0.0147456 0.0461032 -0.0188626 0.015416 0.041072 -0.0190811 -0.00419709 0.06868580000000001 -0.0195945 0.0084326 0.064095 -0.0197498 -0.00217441 0.0583864 -0.0198208 0.00539755 0.0587622 -0.0200137 0.0324539 0.00354185 -0.020151 -0.0145671 0.0500049 -0.0203386 -0.00326709 0.07024469999999999 -0.0209148 0.00523036 0.0681576 -0.0208447 0.0121045 0.0546374 -0.0209724 0.009706330000000001 0.0633876 -0.020604 -0.0121123 0.00591309 -0.0212498 -0.0289526 0.00565549 -0.0216078 -0.0380775 0.00479088 -0.0216875 -0.00997672 0.0619769 -0.0220658 0.00705093 0.0456869 -0.0223002 -0.0558455 0.0110476 -0.0223137 -0.0154618 0.0494217 -0.0229336 0.00417573 0.0589573 -0.0231427 0.0278288 0.0125965 -0.0231751 0.027241 0.0309726 -0.0233259 0.0160686 0.00756079 -0.0234095 0.0318943 0.0199392 -0.0234462 -0.00393483 0.0583985 -0.0235915 -0.0597066 0.0170609 -0.0240196 -0.0108777 0.0466362 -0.024123 -0.00330273 0.0464733 -0.0242099 -0.0321428 0.0398591 -0.0244244 0.00347947 0.0416421 -0.024564 -0.0175604 0.0433407 -0.0253979 -0.0453083 0.0344803 -0.0256103 0.0267734 0.0284514 -0.0259312 -0.0445208 0.00878379 -0.025959 -0.0133125 0.00624018 -0.0265967 -0.0369666 0.00635268 -0.0273245 -0.0066598 0.0412078 -0.0277597 -0.0467651 0.0304517 -0.0275944 -0.0515878 0.0207552 -0.0282687 0.0208205 0.0174814 -0.0290859 0.0112094 0.012597 -0.0293048 -0.0474855 0.0256026 -0.0296506 -0.0466043 0.0156453 -0.0304236 0.0134394 0.031696 -0.0304518 -0.0291908 0.00746031 -0.03126 -0.044124 0.016095 -0.0321715 -0.043346 0.0242104 -0.0322352 -0.0402733 0.0141242 -0.0323149 0.01052 0.0200521 -0.0324768 -0.0397188 0.0271188 -0.0325431 -0.0291932 0.0340382 -0.0332479 -0.0329826 0.0117351 -0.0338676 -0.0346121 0.0252676 -0.0341522 -0.00293196 0.033596 -0.0341882 -0.0361716 0.0179088 -0.0344969 -0.0256263 0.0309923 -0.0345138 -0.00958586 0.0123416 -0.0348872 -0.0128566 0.0339912 -0.0349524 -0.0273994 0.0177976 -0.0349556 -0.000677158 0.0209767 -0.0350004 -0.028049 0.008761420000000001 -0.0353194 -0.0100316 0.0154749 -0.0354214 -0.0195455 0.0173172 -0.0355775 -0.0309821 0.0107592 -0.0360305 -0.0150581 0.0232372 -0.0363938 -0.0285041 0.0132933 -0.0374738 -0.00607371 0.0123945 -0.041317 -0.0210454 0.0131228 -0.0425886 -0.0120136 0.0129537 -0.0475164 -0.00753527 0.00853843 -0.0492593 -0.00704914 0.009380670000000001 -0.0496752 -0.0170405 0.0106038 -0.0498676 -0.0259318 0.00619626 -0.052402 -0.022331 0.00866719 -0.0516897 -0.011391 0.0103437 -0.0559595 -0.0106346 0.00698866 -0.0596531 -0.0214295 0.0059579 -0.066312 -0.0158462 0.00759335 -0.0672852 -0.00331292 0.00667068 -0.0687074 -0.0027598 0.00829441 -0.0687083 -0.008451500000000001 0.00881385 -0.07028570000000001 -0.00694567 0.00665748 -0.02471 0.00101921 0.00688758 -0.00641783 -0.0341512 0.0233596 -0.024018 0.00854392 0.00722419 -0.0251696 0.009421270000000001 0.00784613 --0.019815 0.0686939 0.0189821 -0.0416697 -0.017118 0.00864259 --0.00440288 -0.06984319999999999 0.0205811 --0.0033606 0.0600219 0.0217676 -0.0268544 0.00322876 0.008082499999999999 -0.00855449 0.0107052 0.00928038 -0.0219179 0.00585482 0.0121236 -0.0199208 0.0175811 0.0336776 -0.0210521 -0.0362113 0.0256186 -0.0339797 -0.00194129 0.0163861 -0.03202 0.000337126 0.0126992 -0.0119633 0.0163586 0.0147908 -0.0248778 0.0056119 0.0321775 -0.00892971 -0.0563678 0.0287948 -0.0174837 0.027107 0.0210333 --0.0170518 0.00346089 0.00554363 -0.0144974 -0.0120686 0.0314959 -0.00336155 -0.00103205 0.0364574 -0.00707711 -0.0204903 0.0185209 -0.010517 -0.00309481 0.0232445 --0.00559352 0.0373259 0.0172753 --0.00523735 -0.0230725 0.0111224 -0.0151072 -0.0538804 0.0213778 -0.0347571 -0.0188174 0.0105515 -0.0278657 -0.0183642 0.0156758 --0.00338013 -0.0543805 0.0329679 --0.0196332 0.0593213 0.0251138 -0.06481629999999999 -0.0143432 0.00627944 --0.00336175 -0.0187472 0.00979996 --0.0059938 -0.0214388 0.00941436 -0.0204933 0.0262773 0.00994486 -0.0153554 0.00838654 0.0105168 --0.064082 0.064994 0.00682263 --0.0406296 0.0703091 0.0249838 --0.0197677 0.0563929 0.0156108 --0.0506931 0.0781816 0.0304629 -0.0171972 -0.00100568 0.011485 -0.0314619 -0.0225976 0.00774901 --0.00980694 0.0515267 0.0104574 --0.00435185 0.0493969 0.0137744 -0.0449063 -0.0117353 0.00859937 -0.00159087 -0.0450385 0.027858 --0.00469537 -0.06372510000000001 0.0233918 -0.0424219 -0.0285632 0.00857374 -0.0603894 -0.00835109 0.009350529999999999 --0.0147113 -0.0156046 0.009183759999999999 --0.0528157 0.0611754 0.00480955 --0.0173765 -0.008871489999999999 0.00520522 -0.0108104 0.02268 0.0130558 --0.00899905 -0.0208443 0.00915416 --0.0449914 0.0768094 0.0302276 --0.0408502 0.06658 0.008368489999999999 --0.0199988 -0.0118916 0.004906 -0.00337131 0.0455887 0.0238561 -0.00477413 -0.0721541 0.0211645 --0.00344193 -0.049333 0.032475 -0.0427245 -0.0268877 0.00738607 -0.0272704 -0.0238375 0.00669928 --0.00610544 -0.0476638 0.0181008 --0.00760153 0.0503529 0.00747858 -0.0131109 -0.0422224 0.0405109 -0.00214561 -0.0490294 0.0151357 --0.0598224 0.0805424 0.0511855 --0.0204542 0.0588165 0.013102 -0.059357 -0.0190886 0.00813027 --0.00100716 0.0422264 0.0325724 -0.0325535 -0.0244764 0.012522 --0.000431427 -0.0574818 0.0137747 -0.0114251 0.0275734 0.00440942 -0.00337666 -0.0559724 0.0148659 --0.0262911 0.0586227 0.0207785 --0.0699467 0.0813567 0.0499003 -0.0494602 -0.0133111 0.00757754 -0.00758285 0.0333008 0.0104911 -0.00657287 0.032122 0.00603963 -0.000332803 -0.0511328 0.0180756 --0.021764 0.0620607 0.0118108 --0.0454672 0.075167 0.035911 -0.00139884 0.045926 0.0128133 -0.0176314 0.0311493 0.00370344 --0.0159418 -0.0158578 0.00793814 --0.0229387 0.06916410000000001 0.0166572 --0.00133409 -0.0449329 0.0187829 --0.0538019 0.0611146 0.00198764 -0.0305208 -0.00256491 0.0101919 -0.0623596 -0.00697151 0.00683979 -0.0236819 -0.00777996 0.0526871 -0.0118138 -0.0144241 0.0430193 -0.0137156 -0.00365078 0.00732253 --0.0257884 0.0686739 0.0150694 --0.0530331 0.060812 0.00248197 --0.000421194 -0.0523335 0.008791770000000001 -0.0193846 -0.00072024 0.0649221 -0.00485856 0.0133946 0.0114741 --0.0053823 -0.0743714 0.0141262 -0.016958 0.0166471 0.00740593 -0.0429338 -0.0266961 0.0110582 --0.06504749999999999 0.05473 0.00191127 -0.00924818 0.0356698 0.00715588 --0.042468 0.0652669 0.00790867 -0.00699205 0.0348997 0.00576165 --0.012123 0.00171435 0.00688121 -0.017741 0.00126373 0.0717161 --0.00477874 -0.0228765 0.0123522 --0.05496 0.0793832 0.0329037 --0.0253736 -0.000654191 0.00342534 -0.0220159 -0.0128389 0.0555838 -0.0187915 0.00366305 0.06539010000000001 --0.0635923 0.0794618 0.0351284 -0.0187293 0.00901455 0.0689246 --0.0507436 0.0790633 0.0364811 -0.00440962 0.0291856 0.00589534 --0.0610541 0.08157639999999999 0.0467801 --0.0264169 0.06418980000000001 0.0180225 -0.0590681 -0.0129818 0.009692930000000001 -0.0316732 -0.013669 0.008927310000000001 --0.0368828 0.0732351 0.028231 -0.0147007 -0.0293577 0.0425282 --0.00226105 0.042112 0.008184220000000001 --0.022404 0.068624 0.0211714 -0.018834 0.0296379 0.0101126 -0.0545664 -0.023882 0.00596013 --0.0610274 0.0626039 0.00623226 -0.0209345 -0.0123916 0.0558755 --0.064258 0.0639612 0.00701622 --0.0530259 0.07099660000000001 0.0104874 --0.000350232 0.0328643 0.009503569999999999 -0.0179821 0.0260225 0.00525665 --0.071629 0.0809096 0.0500374 -0.0431333 -0.00662611 0.0109755 --0.0367738 0.072104 0.0272887 --0.00147996 0.0424733 0.00778004 --0.0489442 0.0792518 0.0424775 -0.0178184 0.008309230000000001 0.0698262 --0.00256208 -0.0518644 0.0119693 --0.0024457 0.0347988 0.0115191 --0.0226391 0.067054 0.0236986 --0.0250562 0.070839 0.0181046 -0.0157661 -0.010775 0.0444953 --0.0587069 0.0610686 0.00549325 --0.0561989 0.0607157 0.00436391 -0.0028322 0.0311045 0.0076099 --0.061857 0.079748 0.0514834 --0.0580072 0.07448539999999999 0.0170926 -0.017366 0.0281829 0.00449304 -0.0175246 0.0303053 0.00632184 --0.0583716 0.0812348 0.0494755 --0.06276379999999999 0.08110589999999999 0.0418948 -0.009583370000000001 0.0391723 0.00889538 -0.0164997 0.0327763 0.00400793 --0.0100537 -0.019407 0.0104569 -0.0535082 -0.023589 0.00757618 --0.0184567 0.0672393 0.0165986 --0.0660887 0.06395149999999999 0.00557639 --0.008500499999999999 0.0591911 0.0132991 -0.0527123 -0.00658592 0.00801901 -0.00664445 0.0147496 0.00979726 --0.0323364 0.06468409999999999 0.013176 --0.06849810000000001 0.0817682 0.0541475 -0.0424951 -0.00680449 0.0104665 --0.01583 0.06382989999999999 0.0140017 --0.0408586 0.07478079999999999 0.0276312 --0.0213675 0.00505684 0.00440033 --0.0609542 0.0784149 0.029815 -0.0458286 -0.0196104 0.0115924 -0.0619857 -0.0044448 0.00717137 --0.0549453 0.0736446 0.0144159 --0.0660739 0.0797747 0.0511232 --0.0150243 -0.0138696 0.00597473 --0.0208919 0.06642729999999999 0.014553 --0.0583912 0.07667309999999999 0.0277458 --0.00499489 -0.0492059 0.0154875 --0.0177596 -0.0149926 0.00640227 --0.0656257 0.0638276 0.00437301 --0.00111824 -0.0505712 0.010634 --0.0234714 0.0595273 0.0150887 --0.0117477 -0.00786715 0.0107629 --0.0329423 0.0662408 0.012525 --0.0588644 0.0778049 0.0265316 --0.038272 0.07101209999999999 0.0277124 -0.0147178 0.0228905 0.00513556 --0.00242697 -0.0228032 0.0106496 --0.00998317 -0.0196685 0.00798312 -0.00194711 0.0338412 0.00734265 --0.0101071 0.0571173 0.0108272 --0.000192036 0.0305177 0.010316 --0.06622359999999999 0.0609953 0.00234663 --0.0383437 0.071981 0.0290737 -0.0464353 -0.0271448 0.00729223 --0.0113654 0.0558876 0.00985606 --0.0600686 0.0581853 0.00037707 -0.0184892 0.00651809 0.072001 --0.0272353 0.0661385 0.0125002 -0.0386787 -0.009397559999999999 0.0110365 --0.00702298 -0.0554164 0.0301677 --0.0387296 0.0725599 0.0291973 --0.0195884 -0.009713039999999999 0.00731553 -0.0009803979999999999 0.0340005 0.008311529999999999 --0.00251349 -0.0493306 0.0137872 --0.0208118 0.00468072 0.00662791 -0.0145465 0.0247675 0.00685396 -0.0539643 -0.00601143 0.00911787 -0.0615879 -0.00432066 0.00875869 --0.0649217 0.0800024 0.0383643 -0.00460493 0.008497380000000001 0.0127005 --0.0606311 0.0803611 0.0379233 --0.00316884 0.0400824 0.00969248 --0.0308482 0.067467 0.0126012 -0.0120049 0.00511369 0.00824306 -0.0117314 0.0134932 0.00784586 -0.0067401 0.0222359 0.00786688 -0.000365941 0.0444987 0.0334101 -0.00589042 0.0427357 0.0325284 -0.0134556 0.013691 0.0071386 -0.0155774 0.00572549 0.00675779 --0.0442054 0.0654197 0.00607699 -0.00863004 0.0184766 0.00878081 --0.0111016 -0.0170398 0.0107756 --0.0162643 0.06208 0.0123266 --0.06706429999999999 0.0628756 0.0047451 --0.0673064 0.07917689999999999 0.0489333 --0.0566743 0.0588231 0.00264455 --0.07138410000000001 0.080001 0.0523997 --0.0690781 0.0794039 0.0521145 --0.0589744 0.07029879999999999 0.0123753 --0.0108026 0.05228 0.00636676 --0.0113486 0.0541547 0.00728553 --0.0299136 0.06862409999999999 0.0165753 -0.0505332 -0.0225927 0.00635398 -0.0180077 0.0031318 0.07043870000000001 --0.0235313 0.0640143 0.012641 --0.0235569 0.00584404 0.00381922 -0.0384718 -0.0113423 0.0144484 -0.0182407 0.00232532 0.0728388 --0.0235752 0.00407866 0.00373027 --0.011585 0.0522432 0.00647843 -0.0400312 -0.00904366 0.0126741 --0.0178591 -0.000359808 0.00797485 --0.067167 0.06255139999999999 0.00392853 --0.0596438 0.0779391 0.0290601 -0.0013543 0.0302152 0.00901705 -0.0168301 0.00522322 0.0737244 -0.0174324 0.00448014 0.0738384 --0.0618546 0.0649931 0.00590465 -0.0194429 0.0304209 0.00452872 --0.0236633 0.0648084 0.0124456 --0.00249493 -0.0562542 0.012985 --0.0025263 -0.0246783 0.0125409 --0.0396392 0.0718092 0.02876 --0.0158083 -0.0164708 0.00645267 -0.016879 0.0245859 0.0055459 --0.06884990000000001 0.0811361 0.0461884 -0.0290982 -0.00647478 0.008279069999999999 --0.041817 0.0761358 0.0343691 --0.0642688 0.0653922 0.00517065 --0.0162175 0.00239503 0.00694561 -0.00467524 0.0360758 0.00643588 --0.0222973 0.0035638 0.00646752 --0.0708092 0.0801688 0.0482801 --0.0549524 0.07870829999999999 0.0296023 --0.06310540000000001 0.0672415 0.00811831 --0.0155444 -0.0163359 0.0060847 --0.0574097 0.07880470000000001 0.0473507 --0.0558952 0.0591814 0.001764 --0.0177409 0.0619627 0.0144786 --0.00178349 -0.0487397 0.0125937 --0.0111058 0.0522074 0.008299040000000001 --0.0260139 0.00360897 0.00461987 --0.0204566 0.00423454 0.00564674 -0.00612936 0.0370467 0.00680554 -0.010446 0.0313554 0.00705031 --0.0569353 0.05965 0.00118235 --0.0506685 0.0625792 0.00279292 --0.0249761 0.00485573 0.00443819 -0.0172421 0.00725128 0.07382619999999999 --0.0219613 0.06430039999999999 0.0138184 --0.00260185 -0.0513557 0.0142694 --0.0167422 0.00259292 0.00779623 -0.00214524 0.0341103 0.00650831 --0.0236765 0.00572293 0.004305 --0.0616879 0.0784644 0.0353636 --0.0125522 0.0533024 0.00573952 --0.00373263 -0.048886 0.014509 --0.00253347 -0.0472982 0.0131992 --0.0128746 -0.017623 0.00940414 --5.43548e-05 0.0393803 0.00728201 --0.0258702 0.00405717 0.00525282 -0.0183599 0.0265636 0.00640112 -0.0459896 -0.0257989 0.0100883 --0.0295424 0.06805940000000001 0.0247957 --0.0245383 0.0634107 0.0123732 -0.0066096 0.0377811 0.00691952 --0.0450015 0.0646553 0.00575343 --0.0622505 0.0661482 0.00839783 --0.0256248 0.0608105 0.0161665 -0.017488 0.00853314 0.07209649999999999 --0.0596734 0.07050969999999999 0.009924850000000001 --0.06657979999999999 0.06286890000000001 0.00493615 --0.0624322 0.0664941 0.0080812 -0.0436037 -0.00911409 0.009504510000000001 --0.0258241 0.00183578 0.00455937 --0.07027029999999999 0.07969130000000001 0.0546337 --0.027947 0.06304949999999999 0.0231884 --0.0601839 0.07046330000000001 0.0106076 --0.019796 -0.0130118 0.0069497 --0.0183149 0.06305479999999999 0.012418 --0.0302535 0.0701272 0.02364 --0.0574291 0.07908510000000001 0.0314511 --0.0506885 0.0650762 0.00396145 --0.021101 0.0616869 0.0137094 --0.0331684 0.0670427 0.023997 -0.0134393 0.00644533 0.00718965 --0.0111807 -0.0194906 0.00818236 --0.0255718 0.00304117 0.00332801 --0.0126697 -0.015488 0.00653208 --0.0247074 0.00660999 0.00551935 -0.0173416 0.0031807 0.0727906 -0.0172416 0.0236783 0.00588169 -0.0190309 0.0293428 0.00437137 -0.016715 0.00646681 0.0747173 --0.0362286 0.072292 0.023504 --0.0193589 -0.00042516 0.00470745 --0.0218861 0.06436310000000001 0.0125137 --0.0102557 0.0512168 0.00711881 -0.0404202 -0.00631757 0.0116411 -0.0462272 -0.00679819 0.0101561 --0.0259792 0.0656558 0.0150971 -0.0162732 0.0229634 0.00624384 -0.00353474 0.0364474 0.008433390000000001 -4.6368e-06 0.0388726 0.009730829999999999 --0.0216501 0.0633078 0.012475 --0.06535530000000001 0.0635995 0.0060088 --0.0129397 0.0533345 0.00604151 --0.00189413 -0.0244631 0.013557 --0.0610974 0.0673557 0.00916116 -0.0169636 0.00823874 0.0726305 --0.0262169 0.00566462 0.00486021 --0.00105663 -0.050339 0.013034 --0.0522352 0.0618469 0.00239028 --0.06586110000000001 0.0623674 0.00600767 --0.0308719 0.0671807 0.0240148 --0.0271033 0.0631674 0.0232081 -0.000463176 0.0377435 0.00713404 -0.0197653 -0.0105149 0.0573133 --0.0261272 0.00574879 0.00514751 --0.0256133 0.00236555 0.00535812 -0.0395658 -0.00664927 0.0115095 --0.0346515 0.0704144 0.0260764 --0.0676857 0.0619198 0.00410476 --0.0352382 0.07226829999999999 0.0261851 --0.0489272 0.0632235 0.00329626 --0.0514659 0.0617489 0.00295197 --0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1 1654 1 1654 -3 0 4 1654 -1 26 15 543 25 -2 227 308 190 188 -3 203 353 199 163 -4 331 305 504 150 -5 142 328 128 138 -6 490 439 18 571 -7 364 289 287 414 -8 296 336 304 298 -9 564 419 300 381 -10 398 569 373 591 -11 486 473 639 422 -12 338 89 566 489 -13 332 554 543 424 -14 80 67 71 302 -15 149 146 109 108 -16 98 90 375 342 -17 341 308 325 313 -18 147 314 126 116 -19 124 318 156 131 -20 245 322 206 308 -21 348 311 516 186 -22 135 150 319 151 -23 147 314 307 311 -24 464 588 301 528 -25 461 33 35 333 -26 196 192 373 314 -27 108 81 302 122 -28 366 258 227 357 -29 511 107 512 353 -30 146 170 354 172 -31 297 175 156 130 -32 130 297 175 308 -33 318 159 319 195 -34 154 123 122 342 -35 261 308 259 260 -36 132 142 128 318 -37 241 250 240 205 -38 226 227 248 324 -39 575 609 475 49 -40 375 91 123 90 -41 260 308 255 251 -42 517 612 63 482 -43 120 117 131 297 -44 318 131 297 156 -45 147 319 311 307 -46 131 120 297 130 -47 120 297 111 117 -48 308 174 206 360 -49 148 313 325 175 -50 148 313 175 174 -51 302 80 122 81 -52 107 353 511 110 -53 322 231 198 197 -54 61 58 564 57 -55 240 386 212 221 -56 121 297 143 117 -57 121 297 117 111 -58 307 235 314 182 -59 307 314 166 182 -60 417 308 175 316 -61 308 175 360 417 -62 601 9 458 1 -63 459 429 536 599 -64 211 242 206 308 -65 528 588 301 356 -66 316 297 308 175 -67 197 188 308 228 -68 231 308 228 197 -69 231 197 322 308 -70 188 197 308 361 -71 322 361 308 197 -72 259 308 256 255 -73 298 306 304 299 -74 302 342 146 122 -75 251 322 245 308 -76 298 306 299 236 -77 342 302 169 129 -78 157 319 331 150 -79 190 195 324 227 -80 146 342 354 154 -81 190 297 308 324 -82 236 254 306 299 -83 354 179 201 322 -84 308 297 188 361 -85 361 188 164 297 -86 195 165 190 318 -87 307 215 257 235 -88 194 235 215 307 -89 174 129 148 313 -90 169 313 129 174 -91 322 255 251 201 -92 366 265 308 258 -93 227 308 258 366 -94 258 308 249 265 -95 227 308 228 258 -96 448 192 373 196 -97 228 308 249 258 -98 296 298 514 336 -99 125 150 348 126 -100 125 160 348 150 -101 244 264 242 316 -102 264 316 244 271 -103 224 233 225 219 -104 107 353 163 199 -105 217 223 219 225 -106 308 174 313 206 -107 206 313 179 174 -108 241 230 212 233 -109 241 233 212 218 -110 267 278 312 273 -111 267 312 262 273 -112 206 179 322 245 -113 242 245 206 308 -114 144 319 159 157 -115 265 308 266 272 -116 218 219 392 233 -117 264 324 316 271 -118 324 308 264 316 -119 297 318 117 131 -120 128 117 318 124 -121 354 207 201 177 -122 207 177 354 184 -123 155 163 353 203 -124 131 297 156 130 -125 395 330 236 202 -126 164 142 318 190 -127 253 314 234 311 -128 307 314 147 166 -129 331 234 253 254 -130 306 236 298 331 -131 156 297 316 175 -132 324 319 318 316 -133 297 324 316 308 -134 373 314 102 125 -135 167 155 378 192 -136 278 324 272 269 -137 278 276 272 324 -138 319 159 157 336 -139 267 257 312 243 -140 307 215 243 257 -141 156 297 318 316 -142 207 354 170 184 -143 124 144 139 156 -144 267 312 250 243 -145 144 151 139 319 -146 318 316 319 144 -147 316 139 319 144 -148 139 144 316 156 -149 316 191 312 319 -150 316 191 317 156 -151 313 308 175 174 -152 253 234 331 311 -153 331 395 234 236 -154 272 265 308 366 -155 103 140 133 510 -156 235 199 246 314 -157 246 237 314 199 -158 144 151 319 157 -159 92 157 151 144 -160 92 159 157 144 -161 395 234 236 330 -162 395 330 202 348 -163 348 330 202 209 -164 324 312 316 271 -165 266 308 324 272 -166 324 366 308 227 -167 242 264 245 308 -168 272 266 269 324 -169 135 151 319 139 -170 40 35 28 29 -171 88 148 129 342 -172 325 342 148 88 -173 314 116 147 166 -174 77 353 320 94 -175 331 262 319 306 -176 319 317 139 316 -177 450 329 482 328 -178 183 307 147 166 -179 188 361 176 197 -180 169 179 313 174 -181 314 196 348 373 -182 102 84 116 353 -183 102 77 84 353 -184 191 147 319 317 -185 307 262 257 312 -186 307 257 246 235 -187 307 257 262 246 -188 128 318 144 124 -189 246 314 237 253 -190 314 203 237 234 -191 142 128 318 138 -192 253 237 234 314 -193 306 319 331 336 -194 307 314 235 246 -195 316 250 312 191 -196 450 403 349 329 -197 121 297 101 143 -198 382 164 101 297 -199 369 198 322 193 -200 264 266 324 269 -201 322 354 170 207 -202 322 170 193 207 -203 353 84 116 110 -204 70 302 68 83 -205 331 311 234 395 -206 323 493 282 301 -207 269 278 324 271 -208 278 312 324 271 -209 207 170 180 184 -210 207 170 193 180 -211 325 130 175 308 -212 146 354 170 154 -213 354 302 342 146 -214 161 348 510 181 -215 182 314 199 235 -216 322 354 369 170 -217 231 207 322 198 -218 313 322 375 341 -219 375 361 341 322 -220 322 207 193 198 -221 297 143 164 101 -222 221 213 240 232 -223 190 188 308 297 -224 341 361 375 382 -225 341 308 313 322 -226 134 158 184 354 -227 247 308 261 249 -228 263 308 260 251 -229 318 319 159 144 -230 309 262 306 319 -231 250 204 243 312 -232 448 192 167 378 -233 37 333 620 35 -234 37 33 333 35 -235 297 318 316 324 -236 167 448 378 153 -237 212 218 233 219 -238 88 325 342 494 -239 246 307 314 253 -240 307 253 246 262 -241 126 311 150 348 -242 388 611 336 514 -243 348 234 420 314 -244 236 254 331 306 -245 348 314 311 234 -246 211 308 360 417 -247 373 102 320 125 -248 316 250 191 438 -249 250 205 191 438 -250 254 262 306 309 -251 254 309 306 310 -252 299 254 306 310 -253 331 262 306 254 -254 292 294 295 293 -255 194 307 215 204 -256 304 306 384 299 -257 267 312 257 262 -258 353 192 378 155 -259 319 159 336 195 -260 353 192 373 378 -261 336 185 388 195 -262 312 250 271 267 -263 271 250 312 316 -264 261 249 308 265 -265 268 308 265 261 -266 247 308 249 228 -267 227 195 324 226 -268 366 324 415 337 -269 337 366 324 357 -270 190 195 318 324 -271 156 318 124 144 -272 263 266 308 264 -273 251 263 308 264 -274 197 198 322 369 -275 154 354 369 342 -276 188 308 228 227 -277 79 328 138 92 -278 316 317 139 156 -279 360 175 308 174 -280 255 251 308 322 -281 255 256 252 308 -282 247 228 231 308 -283 247 308 231 256 -284 134 149 394 354 -285 83 162 96 302 -286 161 373 140 348 -287 88 67 302 68 -288 302 97 88 68 -289 512 166 314 182 -290 420 192 314 234 -291 348 330 420 234 -292 192 314 234 203 -293 91 123 105 115 -294 394 70 302 81 -295 309 273 262 319 -296 319 262 312 273 -297 67 302 68 70 -298 271 278 312 267 -299 66 57 326 58 -300 188 136 176 361 -301 157 331 185 504 -302 136 361 188 164 -303 244 250 271 316 -304 71 302 67 70 -305 244 213 232 240 -306 81 302 71 70 -307 354 149 108 146 -308 314 237 203 199 -309 506 378 435 629 -310 244 438 316 213 -311 97 302 169 162 -312 244 316 438 250 -313 313 129 342 169 -314 382 113 101 164 -315 506 435 378 94 -316 91 123 85 105 -317 308 264 245 251 -318 242 264 308 316 -319 450 349 482 329 -320 314 373 348 125 -321 92 138 159 144 -322 395 311 234 348 -323 278 273 324 312 -324 373 378 435 320 -325 147 311 319 135 -326 126 311 135 150 -327 126 135 311 147 -328 314 348 311 126 -329 83 302 82 70 -330 378 435 629 373 -331 195 159 165 318 -332 316 312 324 319 -333 156 175 316 387 -334 336 298 514 331 -335 88 342 129 302 -336 319 307 331 311 -337 253 314 311 307 -338 311 331 253 307 -339 297 341 308 130 -340 314 348 126 125 -341 147 314 311 126 -342 61 339 99 338 -343 250 204 312 191 -344 305 185 508 331 -345 211 242 308 316 -346 211 308 417 316 -347 213 316 211 417 -348 214 215 230 204 -349 244 316 242 211 -350 244 211 213 316 -351 465 501 344 502 -352 108 354 302 394 -353 313 129 148 342 -354 337 324 415 248 -355 337 258 366 357 -356 121 101 297 111 -357 382 101 111 297 -358 157 159 185 336 -359 226 336 195 324 -360 307 262 331 253 -361 307 262 319 331 -362 331 254 253 262 -363 248 336 552 296 -364 319 324 195 336 -365 248 296 226 336 -366 324 248 336 552 -367 147 183 191 307 -368 282 281 276 323 -369 281 323 282 301 -370 109 119 105 122 -371 297 143 117 318 -372 109 122 105 80 -373 308 366 324 272 -374 297 318 324 190 -375 297 190 164 318 -376 214 204 230 212 -377 224 212 214 230 -378 297 143 318 164 -379 264 308 324 266 -380 264 269 324 271 -381 132 117 143 318 -382 130 297 341 120 -383 341 130 120 98 -384 277 343 356 279 -385 325 308 175 313 -386 109 81 108 122 -387 109 122 108 146 -388 348 234 395 330 -389 341 111 120 297 -390 341 100 98 120 -391 341 111 100 120 -392 226 336 324 248 -393 318 319 324 195 -394 275 270 324 309 -395 309 336 324 319 -396 552 270 336 324 -397 273 309 275 324 -398 403 328 329 450 -399 382 111 341 297 -400 361 322 308 341 -401 361 341 308 297 -402 342 85 73 90 -403 342 73 85 80 -404 323 324 366 276 -405 361 297 164 382 -406 96 82 83 302 -407 45 647 44 42 -408 179 354 201 177 -409 53 621 54 347 -410 117 124 131 318 -411 156 144 316 318 -412 369 198 193 141 -413 342 302 88 67 -414 67 80 342 302 -415 73 80 342 67 -416 342 73 67 76 -417 372 528 289 285 -418 285 528 289 287 -419 355 98 325 494 -420 122 119 105 123 -421 394 82 134 302 -422 494 88 76 342 -423 109 81 122 80 -424 447 580 503 505 -425 114 118 141 145 -426 311 150 319 135 -427 108 122 302 146 -428 204 307 183 194 -429 191 204 307 183 -430 382 101 100 111 -431 382 111 100 341 -432 318 159 138 144 -433 588 281 301 356 -434 87 61 77 57 -435 318 159 165 138 -436 7 12 2 486 -437 316 191 319 317 -438 208 196 449 445 -439 322 369 354 313 -440 354 158 177 162 -441 354 169 162 179 -442 313 369 354 342 -443 179 162 354 177 -444 130 98 341 355 -445 325 130 341 355 -446 337 357 324 248 -447 324 357 227 248 -448 588 281 464 301 -449 375 341 382 98 -450 454 75 61 155 -451 353 77 84 74 -452 331 305 185 504 -453 311 331 319 150 -454 378 339 167 106 -455 318 190 142 165 -456 138 142 165 318 -457 18 12 397 14 -458 298 514 331 513 -459 118 137 141 168 -460 298 331 236 395 -461 395 298 331 513 -462 93 157 92 159 -463 354 158 184 177 -464 151 157 92 93 -465 78 93 151 92 -466 378 448 629 153 -467 102 314 126 125 -468 126 116 314 102 -469 61 72 303 75 -470 39 461 350 553 -471 350 39 33 461 -472 311 331 513 395 -473 311 331 305 509 -474 353 102 314 116 -475 204 215 243 307 -476 106 153 167 378 -477 97 162 83 302 -478 107 353 199 512 -479 297 188 164 190 -480 147 319 139 135 -481 77 353 87 74 -482 353 203 199 314 -483 512 314 353 199 -484 37 38 29 35 -485 485 140 373 125 -486 398 448 373 196 -487 196 570 373 398 -488 324 248 552 415 -489 415 270 552 324 -490 52 57 594 564 -491 285 289 414 287 -492 438 250 205 240 -493 524 425 25 17 -494 29 25 524 425 -495 87 77 61 353 -496 93 92 138 159 -497 93 92 79 138 -498 203 192 353 155 -499 192 353 314 203 -500 88 302 129 97 -501 169 342 354 302 -502 147 319 317 139 -503 435 426 629 373 -504 197 168 369 176 -505 369 176 361 197 -506 157 151 319 150 -507 307 319 312 191 -508 312 307 191 204 -509 628 373 441 374 -510 513 331 311 509 -511 49 594 413 46 -512 303 163 87 61 -513 146 342 154 122 -514 274 366 415 337 -515 274 258 366 337 -516 87 57 74 66 -517 304 306 336 384 -518 204 250 205 191 -519 110 74 66 87 -520 163 87 61 353 -521 204 205 250 241 -522 387 438 213 316 -523 150 160 348 311 -524 313 369 342 375 -525 313 322 369 375 -526 97 129 169 302 -527 504 305 393 150 -528 181 348 500 187 -529 610 527 42 44 -530 44 527 42 620 -531 311 305 456 509 -532 311 509 456 516 -533 365 512 166 116 -534 116 512 166 314 -535 509 305 508 331 -536 322 369 193 170 -537 535 526 581 632 -538 182 314 512 199 -539 497 441 373 540 -540 37 42 46 527 -541 500 209 187 348 -542 312 257 307 243 -543 323 366 281 276 -544 348 420 209 196 -545 366 279 276 272 -546 202 500 186 348 -547 386 406 221 232 -548 64 526 62 489 -549 336 159 185 195 -550 404 24 559 335 -551 404 24 607 559 -552 384 336 552 270 -553 244 240 438 213 -554 244 438 240 250 -555 430 461 620 333 -556 461 333 35 620 -557 61 564 64 334 -558 381 437 47 413 -559 279 277 265 258 -560 279 277 258 274 -561 186 500 181 348 -562 140 510 348 160 -563 377 410 36 350 -564 202 330 236 209 -565 380 345 614 468 -566 99 339 378 106 -567 378 106 418 99 -568 378 448 373 629 -569 194 235 307 182 -570 194 307 166 182 -571 194 307 183 166 -572 353 373 320 378 -573 68 97 83 302 -574 347 496 604 476 -575 161 181 411 373 -576 570 374 400 368 -577 40 38 35 29 -578 364 289 327 528 -579 324 309 319 273 -580 353 378 320 94 -581 358 91 471 375 -582 134 394 302 354 -583 394 149 108 354 -584 172 354 146 149 -585 382 358 471 375 -586 101 382 90 358 -587 651 346 638 390 -588 382 90 100 101 -589 334 594 564 475 -590 369 361 375 322 -591 322 197 369 361 -592 342 325 98 494 -593 325 313 148 342 -594 342 325 375 98 -595 115 369 123 367 -596 342 98 76 494 -597 369 375 576 115 -598 353 512 116 314 -599 336 304 552 296 -600 336 306 304 298 -601 226 514 336 296 -602 108 302 81 394 -603 181 411 373 374 -604 26 440 571 383 -605 26 383 346 440 -606 211 360 308 206 -607 87 74 57 77 -608 358 113 101 382 -609 195 388 336 226 -610 241 233 218 238 -611 155 339 378 353 -612 345 79 468 476 -613 213 316 417 175 -614 387 316 213 175 -615 312 307 262 319 -616 435 485 426 373 -617 435 373 125 485 -618 299 310 306 384 -619 26 425 25 34 -620 118 114 367 434 -621 26 34 25 608 -622 223 222 529 392 -623 527 38 37 35 -624 37 527 46 38 -625 342 123 90 375 -626 342 123 85 90 -627 335 350 33 35 -628 350 461 33 35 -629 85 91 90 123 -630 259 247 308 261 -631 629 628 448 373 -632 633 142 328 128 -633 629 497 628 373 -634 303 61 87 72 -635 236 254 234 331 -636 341 98 325 355 -637 373 570 400 569 -638 398 570 373 569 -639 49 413 527 46 -640 49 46 527 457 -641 49 626 48 527 -642 241 204 243 250 -643 49 527 48 457 -644 392 218 233 238 -645 233 392 238 223 -646 178 198 197 141 -647 198 197 141 369 -648 364 290 287 528 -649 419 381 564 413 -650 92 78 79 59 -651 192 373 314 353 -652 386 406 238 423 -653 367 369 137 391 -654 437 413 419 606 -655 413 437 47 606 -656 239 252 322 255 -657 454 61 339 155 -658 34 466 425 29 -659 221 386 232 240 -660 60 64 489 484 -661 484 65 60 64 -662 212 386 218 221 -663 241 240 386 212 -664 241 205 240 212 -665 607 24 16 470 -666 620 42 37 527 -667 37 333 42 620 -668 95 87 66 69 -669 113 164 382 361 -670 410 30 432 21 -671 371 1 522 458 -672 527 47 43 40 -673 596 425 17 15 -674 393 456 160 311 -675 110 95 87 66 -676 160 311 456 516 -677 512 511 365 166 -678 353 511 365 512 -679 128 144 318 138 -680 341 130 325 308 -681 87 61 57 58 -682 419 58 564 72 -683 414 289 327 364 -684 320 378 435 94 -685 364 528 287 289 -686 212 221 205 240 -687 134 172 149 354 -688 134 172 354 184 -689 319 147 191 307 -690 589 641 606 436 -691 347 79 59 476 -692 345 79 476 92 -693 92 138 144 328 -694 86 92 144 328 -695 32 399 34 38 -696 306 309 336 310 -697 347 604 468 476 -698 347 468 79 476 -699 614 345 79 468 -700 384 310 336 270 -701 439 25 26 422 -702 196 192 314 420 -703 348 420 196 314 -704 132 143 142 318 -705 164 142 143 318 -706 386 406 423 221 -707 35 527 38 40 -708 158 354 96 162 -709 169 302 354 162 -710 334 475 564 363 -711 155 61 303 75 -712 94 353 378 339 -713 224 233 219 212 -714 214 215 204 194 -715 204 243 230 241 -716 204 230 212 241 -717 391 474 369 136 -718 286 588 528 356 -719 35 620 527 47 -720 136 474 361 565 -721 566 526 632 64 -722 490 439 11 14 -723 209 330 420 348 -724 35 527 40 47 -725 76 342 73 98 -726 77 353 102 320 -727 268 308 261 260 -728 167 155 339 378 -729 465 289 385 344 -730 255 308 260 259 -731 335 24 470 33 -732 559 24 470 335 -733 522 1 371 428 -734 347 53 496 54 -735 559 24 607 470 -736 476 347 496 54 -737 312 204 243 307 -738 230 215 243 204 -739 241 218 212 386 -740 241 238 218 386 -741 29 33 28 23 -742 23 335 559 470 -743 297 382 361 341 -744 336 611 185 331 -745 388 185 336 611 -746 353 373 102 320 -747 373 102 314 353 -748 44 527 606 610 -749 74 110 84 353 -750 610 527 606 413 -751 325 341 375 98 -752 369 136 137 391 -753 169 354 342 313 -754 274 366 279 281 -755 281 366 279 276 -756 322 313 206 308 -757 414 289 344 385 -758 114 546 367 434 -759 367 391 434 369 -760 155 163 303 61 -761 47 620 527 44 -762 384 304 552 336 -763 384 310 306 336 -764 99 378 339 94 -765 506 94 378 99 -766 365 353 512 116 -767 378 99 418 506 -768 478 23 559 470 -769 328 86 633 128 -770 265 308 268 266 -771 268 308 263 266 -772 564 419 436 58 -773 460 75 564 65 -774 339 61 99 94 -775 518 564 65 460 -776 643 216 229 392 -777 342 88 76 67 -778 26 422 11 439 -779 26 440 439 571 -780 411 161 373 441 -781 442 467 412 10 -782 350 377 24 33 -783 225 409 217 223 -784 410 377 24 350 -785 24 350 33 335 -786 371 522 523 458 -787 278 324 273 276 -788 273 324 275 276 -789 170 354 172 184 -790 169 179 354 313 -791 607 16 24 580 -792 367 391 137 118 -793 35 620 37 527 -794 548 33 461 333 -795 414 385 344 294 -796 414 289 288 344 -797 65 64 484 454 -798 93 79 78 401 -799 375 382 358 90 -800 413 575 564 594 -801 187 181 368 189 -802 358 375 90 91 -803 275 276 324 323 -804 493 270 323 275 -805 532 323 276 275 -806 324 270 323 415 -807 275 323 324 270 -808 157 331 319 336 -809 454 339 61 338 -810 527 47 507 43 -811 74 87 110 353 -812 61 353 339 155 -813 444 445 618 379 -814 173 133 160 510 -815 352 604 468 347 -816 161 181 373 348 -817 23 335 470 33 -818 181 187 374 373 -819 29 35 28 33 -820 348 187 181 373 -821 562 10 412 447 -822 10 580 503 447 -823 399 351 34 38 -824 515 592 399 32 -825 434 112 637 474 -826 134 82 96 302 -827 224 230 233 212 -828 134 302 96 354 -829 302 354 162 96 -830 376 64 60 564 -831 606 640 589 45 -832 369 137 168 141 -833 113 361 583 136 -834 197 369 168 141 -835 12 7 4 14 -836 510 181 173 171 -837 61 339 353 94 -838 369 154 170 354 -839 404 607 24 21 -840 411 374 578 441 -841 500 186 189 480 -842 535 526 632 566 -843 628 441 497 483 -844 478 23 28 559 -845 28 335 559 23 -846 93 92 78 79 -847 554 473 631 453 -848 198 178 193 141 -849 187 444 209 500 -850 226 388 336 514 -851 287 464 285 528 -852 528 301 285 372 -853 497 629 426 373 -854 394 302 70 82 -855 64 61 454 75 -856 444 587 618 445 -857 467 458 371 523 -858 371 523 520 467 -859 371 520 551 467 -860 385 465 294 292 -861 468 604 345 476 -862 584 517 63 345 -863 176 136 137 369 -864 439 440 18 571 -865 490 26 11 439 -866 324 366 227 357 -867 606 413 419 436 -868 527 48 477 507 -869 527 477 48 457 -870 527 492 48 507 -871 527 626 48 492 -872 134 354 96 158 -873 62 64 489 60 -874 52 57 370 594 -875 326 52 55 564 -876 524 425 17 19 -877 373 441 161 540 -878 373 161 140 540 -879 66 326 55 58 -880 58 326 55 564 -881 310 309 336 270 -882 324 270 336 309 -883 157 336 185 331 -884 181 411 171 161 -885 640 589 641 606 -886 537 557 621 54 -887 282 285 340 288 -888 372 285 288 340 -889 382 100 98 341 -890 502 294 465 292 -891 43 34 351 38 -892 221 240 213 205 -893 438 240 205 213 -894 425 466 524 29 -895 354 302 146 108 -896 435 426 506 629 -897 497 506 426 629 -898 187 181 374 368 -899 517 79 614 345 -900 342 90 73 98 -901 180 141 178 152 -902 178 152 141 168 -903 193 180 141 178 -904 140 161 348 510 -905 9 442 13 362 -906 442 9 13 467 -907 408 505 503 580 -908 607 580 408 16 -909 327 289 414 385 -910 372 284 283 340 -911 359 89 526 566 -912 607 539 478 470 -913 140 373 125 348 -914 328 86 92 517 -915 527 47 44 606 -916 155 163 61 353 -917 367 391 118 434 -918 338 64 61 454 -919 64 338 484 454 -920 359 89 566 338 -921 489 526 566 64 -922 448 192 378 373 -923 350 39 377 33 -924 369 137 176 168 -925 377 350 553 39 -926 325 313 375 341 -927 340 288 625 282 -928 342 313 375 325 -929 524 466 19 20 -930 425 466 19 524 -931 348 395 186 202 -932 610 44 42 45 -933 409 433 217 223 -934 217 433 529 223 -935 582 375 471 115 -936 434 474 637 369 -937 382 375 471 582 -938 98 90 382 375 -939 382 100 90 98 -940 123 105 122 85 -941 122 85 105 80 -942 43 40 34 38 -943 369 474 361 136 -944 469 452 564 460 -945 46 41 527 457 -946 415 366 274 323 -947 191 387 316 438 -948 191 387 156 316 -949 434 391 474 369 -950 502 294 344 465 -951 502 294 292 293 -952 476 59 92 79 -953 306 309 319 336 -954 528 301 464 285 -955 301 282 464 285 -956 208 449 210 379 -957 210 379 220 208 -958 551 520 10 467 -959 359 89 339 106 -960 110 353 365 116 -961 353 511 110 365 -962 118 141 145 152 -963 34 28 466 29 -964 621 347 59 54 -965 59 621 79 347 -966 342 80 122 302 -967 369 123 154 342 -968 123 85 122 342 -969 122 342 85 80 -970 450 349 612 482 -971 564 55 436 413 -972 40 38 29 34 -973 606 641 413 436 -974 28 35 335 33 -975 34 25 32 29 -976 487 548 495 479 -977 187 209 196 348 -978 461 479 430 495 -979 311 513 509 186 -980 395 311 348 186 -981 187 196 209 444 -982 485 540 426 373 -983 21 580 24 447 -984 412 447 21 562 -985 412 562 21 446 -986 447 580 24 10 -987 46 527 610 413 -988 229 392 216 222 -989 323 281 366 274 -990 281 301 274 323 -991 599 625 429 282 -992 608 25 32 34 -993 372 288 284 340 -994 227 324 190 308 -995 373 196 348 187 -996 425 25 34 29 -997 628 448 373 591 -998 591 448 373 398 -999 477 43 41 527 -1000 80 71 81 302 -1001 457 477 41 527 -1002 647 487 430 479 -1003 628 373 497 441 -1004 578 628 441 374 -1005 410 24 335 350 -1006 393 311 160 150 -1007 367 118 137 141 -1008 343 488 356 396 -1009 87 72 61 58 -1010 488 588 356 396 -1011 476 54 59 347 -1012 94 353 61 77 -1013 110 353 87 107 -1014 251 245 322 201 -1015 245 179 322 201 -1016 11 422 486 14 -1017 287 588 464 528 -1018 10 467 412 551 -1019 13 551 412 467 -1020 371 467 551 13 -1021 551 10 8 412 -1022 113 164 361 136 -1023 425 25 15 26 -1024 140 348 125 160 -1025 451 588 528 286 -1026 180 152 145 141 -1027 607 16 539 470 -1028 374 570 400 373 -1029 373 374 556 400 -1030 374 373 556 628 -1031 441 628 578 483 -1032 497 642 418 629 -1033 167 89 106 339 -1034 346 440 390 521 -1035 369 123 342 375 -1036 583 382 498 361 -1037 564 75 72 61 -1038 564 61 64 75 -1039 345 517 79 92 -1040 533 529 223 222 -1041 498 582 576 375 -1042 575 376 609 49 -1043 412 10 8 447 -1044 561 472 549 468 -1045 239 322 252 231 -1046 397 12 4 14 -1047 367 369 434 576 -1048 206 313 322 179 -1049 322 179 313 354 -1050 12 2 4 7 -1051 346 638 26 608 -1052 66 87 57 58 -1053 72 58 564 61 -1054 322 207 231 239 -1055 201 354 322 207 -1056 239 255 322 201 -1057 533 402 529 222 -1058 60 518 564 65 -1059 11 486 12 14 -1060 118 168 141 152 -1061 60 376 564 518 -1062 576 375 582 115 -1063 515 34 399 351 -1064 334 564 64 363 -1065 311 331 150 305 -1066 473 538 597 519 -1067 564 594 575 475 -1068 36 30 432 410 -1069 343 396 356 279 -1070 281 279 356 396 -1071 281 274 301 356 -1072 486 7 14 422 -1073 642 153 585 629 -1074 153 642 628 629 -1075 503 447 8 10 -1076 461 430 620 416 -1077 493 270 275 280 -1078 275 493 532 323 -1079 532 493 282 323 -1080 461 495 430 416 -1081 493 532 280 275 -1082 389 381 47 413 -1083 49 413 626 527 -1084 500 189 186 181 -1085 498 382 582 375 -1086 410 30 24 377 -1087 30 410 36 377 -1088 366 265 279 272 -1089 608 34 32 31 -1090 527 40 43 38 -1091 46 527 41 38 -1092 43 527 38 41 -1093 597 639 7 486 -1094 306 298 336 331 -1095 11 26 15 543 -1096 554 11 15 543 -1097 416 430 620 649 -1098 291 290 364 327 -1099 637 498 375 361 -1100 39 548 33 461 -1101 422 634 25 543 -1102 583 582 382 113 -1103 367 114 118 141 -1104 473 422 11 554 -1105 178 197 168 141 -1106 375 369 123 115 -1107 91 123 115 375 -1108 377 350 36 553 -1109 173 181 516 186 -1110 110 95 107 87 -1111 353 107 163 87 -1112 46 527 42 610 -1113 500 209 348 202 -1114 334 61 564 57 -1115 510 103 140 161 -1116 160 104 140 133 -1117 486 11 473 422 -1118 336 611 331 514 -1119 576 434 637 369 -1120 29 466 524 20 -1121 366 279 265 258 -1122 366 279 258 274 -1123 89 484 338 454 -1124 462 621 568 534 -1125 133 104 140 103 -1126 462 534 568 531 -1127 521 440 390 563 -1128 383 440 563 390 -1129 141 154 170 369 -1130 141 193 369 170 -1131 173 181 510 516 -1132 348 510 181 516 -1133 324 366 276 272 -1134 415 324 366 323 -1135 477 527 507 43 -1136 26 25 440 346 -1137 430 333 42 479 -1138 460 452 564 75 -1139 31 515 32 592 -1140 181 189 187 500 -1141 389 527 413 47 -1142 413 389 626 527 -1143 376 590 49 575 -1144 331 611 185 508 -1145 223 392 407 219 -1146 223 233 392 219 -1147 538 648 597 519 -1148 597 648 538 486 -1149 557 537 568 499 -1150 553 39 461 416 -1151 290 528 451 287 -1152 554 453 332 560 -1153 601 467 458 9 -1154 623 525 535 566 -1155 566 525 535 526 -1156 378 106 431 418 -1157 53 496 352 347 -1158 564 300 419 72 -1159 564 452 300 72 -1160 2 6 7 486 -1161 421 451 528 286 -1162 451 528 588 287 -1163 409 595 433 491 -1164 79 621 78 401 -1165 401 621 78 555 -1166 78 537 555 621 -1167 599 340 282 301 -1168 493 599 282 301 -1169 430 620 42 333 -1170 565 498 112 637 -1171 583 498 112 565 -1172 599 429 536 282 -1173 599 625 459 429 -1174 543 554 332 15 -1175 474 112 637 565 -1176 364 290 528 327 -1177 548 461 479 333 -1178 461 333 430 479 -1179 383 390 346 440 -1180 65 60 64 564 -1181 65 64 75 564 -1182 383 638 346 390 -1183 380 468 614 549 -1184 532 282 276 323 -1185 157 331 504 150 -1186 89 454 338 339 -1187 167 454 89 339 -1188 8 5 10 551 -1189 5 520 10 551 -1190 492 626 545 389 -1191 389 626 545 469 -1192 37 33 35 29 -1193 615 568 499 557 -1194 500 186 480 202 -1195 54 56 53 496 -1196 294 295 291 385 -1197 295 291 385 327 -1198 295 294 292 385 -1199 474 637 361 565 -1200 497 373 426 540 -1201 40 29 28 34 -1202 535 525 581 526 -1203 328 92 79 517 -1204 496 56 352 604 -1205 459 536 646 493 -1206 459 429 624 536 -1207 493 536 280 532 -1208 25 346 26 608 -1209 351 399 41 38 -1210 43 41 38 351 -1211 527 413 47 606 -1212 308 252 322 231 -1213 308 255 322 252 -1214 256 231 252 308 -1215 256 308 259 247 -1216 21 30 24 410 -1217 21 30 562 24 -1218 315 621 555 568 -1219 217 219 223 407 -1220 225 223 219 233 -1221 407 217 529 223 -1222 381 452 300 564 -1223 595 635 433 491 -1224 414 385 291 327 -1225 416 39 461 495 -1226 461 39 548 495 -1227 461 548 479 495 -1228 301 282 281 464 -1229 301 282 285 340 -1230 315 621 568 462 -1231 372 289 288 285 -1232 289 288 285 414 -1233 431 153 106 378 -1234 55 641 589 436 -1235 651 572 638 608 -1236 564 452 72 75 -1237 573 534 567 613 -1238 567 645 600 534 -1239 499 568 577 537 -1240 414 327 291 364 -1241 561 549 614 468 -1242 338 489 566 64 -1243 89 484 489 338 -1244 385 294 465 344 -1245 445 196 444 209 -1246 209 550 444 427 -1247 490 14 11 12 -1248 490 18 14 12 -1249 597 648 486 7 -1250 486 639 7 422 -1251 639 473 597 631 -1252 529 491 616 533 -1253 435 320 125 373 -1254 616 491 529 541 -1255 497 628 642 629 -1256 46 52 413 602 -1257 623 359 566 338 -1258 497 506 629 418 -1259 99 359 623 338 -1260 65 64 454 75 -1261 209 617 550 427 -1262 86 328 144 128 -1263 570 187 374 368 -1264 403 86 633 328 -1265 601 522 458 523 -1266 604 352 472 56 -1267 273 312 319 324 -1268 380 614 63 549 -1269 561 549 63 614 -1270 623 525 566 359 -1271 359 525 566 526 -1272 566 89 526 489 -1273 113 382 358 471 -1274 582 471 382 113 -1275 523 467 458 601 -1276 268 308 260 263 -1277 374 628 556 578 -1278 498 582 382 583 -1279 586 645 534 557 -1280 361 176 369 136 -1281 277 356 274 279 -1282 576 637 375 369 -1283 637 375 369 361 -1284 373 556 569 400 -1285 556 373 569 628 -1286 447 562 24 21 -1287 47 492 527 507 -1288 495 39 548 487 -1289 572 608 651 650 -1290 541 619 542 574 -1291 27 562 21 30 -1292 21 446 562 27 -1293 517 328 614 79 -1294 545 530 622 575 -1295 522 371 523 558 -1296 523 371 520 558 -1297 471 91 115 375 -1298 578 127 628 556 -1299 127 153 628 556 -1300 641 413 55 52 -1301 55 564 436 58 -1302 564 334 57 594 -1303 55 641 436 413 -1304 575 413 49 594 -1305 15 17 596 560 -1306 521 440 563 571 -1307 632 581 62 526 -1308 285 372 301 340 -1309 290 451 528 421 -1310 326 57 564 58 -1311 205 212 241 204 -1312 564 452 469 381 -1313 239 322 207 201 -1314 223 392 529 407 -1315 381 564 413 469 -1316 395 513 311 186 -1317 389 469 413 626 -1318 136 361 583 565 -1319 586 645 567 534 -1320 32 25 608 346 -1321 369 367 137 141 -1322 469 575 545 622 -1323 593 543 634 422 -1324 373 569 628 591 -1325 556 569 153 628 -1326 196 187 373 570 -1327 167 454 339 155 -1328 590 626 575 530 -1329 536 493 282 532 -1330 133 140 160 510 -1331 376 363 64 564 -1332 209 427 444 587 -1333 571 440 563 383 -1334 498 375 576 637 -1335 531 534 568 579 -1336 534 568 557 621 -1337 218 392 643 238 -1338 568 555 577 537 -1339 475 609 363 49 -1340 363 609 475 564 -1341 393 311 150 305 -1342 19 425 17 596 -1343 596 17 603 560 -1344 522 428 371 558 -1345 127 628 497 483 -1346 492 48 545 626 -1347 21 607 24 580 -1348 132 117 318 128 -1349 633 132 547 142 -1350 437 381 419 413 -1351 419 381 437 300 -1352 173 181 186 171 -1353 405 613 600 534 -1354 632 526 62 64 -1355 489 484 64 338 -1356 600 54 53 621 -1357 29 20 28 466 -1358 20 28 466 443 -1359 49 48 626 590 -1360 63 345 614 380 -1361 584 345 63 380 -1362 470 607 559 478 -1363 28 23 22 20 -1364 478 23 22 28 -1365 473 422 554 631 -1366 555 537 568 621 -1367 18 490 14 439 -1368 596 17 19 603 -1369 571 440 18 521 -1370 542 491 616 541 -1371 534 568 615 557 -1372 534 568 579 615 -1373 392 222 229 238 -1374 626 48 530 590 -1375 238 406 229 423 -1376 629 585 642 418 -1377 418 506 629 378 -1378 378 431 629 418 -1379 153 448 628 591 -1380 591 569 628 153 -1381 550 209 500 627 -1382 515 31 32 34 -1383 209 627 550 617 -1384 569 556 153 400 -1385 645 621 557 54 -1386 529 491 533 223 -1387 601 1 458 522 -1388 522 601 1 3 -1389 359 339 99 106 -1390 338 99 359 339 -1391 49 575 626 413 -1392 473 597 631 453 -1393 605 564 518 460 -1394 222 392 402 529 -1395 113 382 583 361 -1396 33 335 28 23 -1397 370 52 594 46 -1398 408 505 580 607 -1399 413 640 602 641 -1400 630 376 564 609 -1401 49 376 609 363 -1402 363 376 609 564 -1403 393 456 311 305 -1404 218 221 386 643 -1405 643 386 423 221 -1406 141 123 369 367 -1407 498 382 375 361 -1408 474 637 369 361 -1409 558 371 520 551 -1410 558 428 371 551 -1411 374 441 411 373 -1412 422 25 26 543 -1413 25 17 15 634 -1414 606 44 610 45 -1415 367 115 369 576 -1416 367 576 546 115 -1417 636 573 567 613 -1418 615 51 579 573 -1419 50 51 615 636 -1420 55 413 564 52 -1421 594 52 413 46 -1422 564 326 52 57 -1423 367 434 546 576 -1424 208 449 379 445 -1425 379 445 544 208 -1426 26 439 440 25 -1427 622 575 605 469 -1428 636 586 567 573 -1429 573 586 567 534 -1430 599 625 340 283 -1431 605 630 518 564 -1432 171 510 181 161 -1433 32 29 38 34 -1434 402 216 392 222 -1435 223 222 392 238 -1436 389 492 527 47 -1437 389 492 626 527 -1438 577 555 78 537 -1439 315 621 401 555 -1440 15 598 634 560 -1441 634 17 15 560 -1442 481 142 328 633 -1443 128 328 144 138 -1444 413 610 640 606 -1445 640 606 610 45 -1446 379 449 444 445 -1447 187 449 196 444 -1448 445 449 444 196 -1449 605 564 460 469 -1450 575 564 605 469 -1451 541 200 619 574 -1452 564 436 419 413 -1453 517 482 63 614 -1454 154 369 141 123 -1455 583 498 565 361 -1456 498 361 637 565 -1457 622 530 630 575 -1458 21 30 432 27 -1459 173 510 160 516 -1460 311 160 348 516 -1461 485 140 540 373 -1462 21 505 580 447 -1463 490 26 439 571 -1464 379 544 220 208 -1465 348 516 181 186 -1466 186 509 311 516 -1467 209 202 627 617 -1468 433 635 529 491 -1469 430 42 620 44 -1470 649 430 620 44 -1471 529 635 541 491 -1472 404 24 410 21 -1473 404 410 24 335 -1474 89 338 359 339 -1475 450 328 482 517 -1476 517 328 482 614 -1477 78 59 537 621 -1478 588 396 281 356 -1479 286 488 588 356 -1480 424 543 593 422 -1481 463 607 408 16 -1482 389 381 413 469 -1483 413 469 575 626 -1484 626 469 575 545 -1485 554 11 543 422 -1486 459 624 646 536 -1487 332 543 593 424 -1488 631 554 424 422 -1489 153 431 629 378 -1490 545 48 530 626 -1491 626 530 545 575 -1492 59 621 78 79 -1493 160 510 348 516 -1494 626 590 575 49 -1495 576 434 112 637 -1496 498 576 112 637 -1497 346 651 638 608 -1498 13 442 412 362 -1499 13 467 412 442 -1500 132 142 633 128 -1501 184 180 172 170 -1502 631 332 424 554 -1503 531 573 579 51 -1504 521 571 563 18 -1505 599 625 282 340 -1506 622 630 605 575 -1507 562 442 362 412 -1508 193 180 170 141 -1509 50 644 636 615 -1510 443 466 20 19 -1511 616 542 533 491 -1512 413 594 564 52 -1513 621 53 600 405 -1514 362 562 446 27 -1515 403 547 321 481 -1516 403 481 321 329 -1517 562 442 412 10 -1518 493 459 536 599 -1519 493 599 536 282 -1520 450 86 328 517 -1521 413 602 610 46 -1522 29 23 28 20 -1523 223 409 433 491 -1524 621 59 537 54 -1525 13 362 412 446 -1526 439 422 11 14 -1527 639 473 631 422 -1528 450 612 584 517 -1529 450 482 612 517 -1530 413 641 602 52 -1531 447 10 24 562 -1532 531 573 534 579 -1533 380 345 468 604 -1534 587 427 444 618 -1535 613 567 600 534 -1536 218 386 238 643 -1537 643 238 423 386 -1538 347 496 352 604 -1539 63 345 517 614 -1540 584 612 63 517 -1541 629 431 585 418 -1542 153 431 585 629 -1543 463 539 478 607 -1544 463 539 607 16 -1545 564 609 475 575 -1546 533 529 402 616 -1547 376 630 564 518 -1548 645 54 600 621 -1549 380 468 472 604 -1550 604 468 472 352 -1551 380 468 549 472 -1552 570 187 373 374 -1553 606 413 641 640 -1554 413 610 602 640 -1555 458 467 13 9 -1556 467 458 13 371 -1557 11 422 26 543 -1558 25 17 425 15 -1559 646 536 280 493 -1560 646 624 280 536 -1561 647 430 44 42 -1562 618 544 220 379 -1563 648 6 486 7 -1564 648 6 538 486 -1565 403 633 547 481 -1566 403 328 633 481 -1567 483 127 628 578 -1568 486 7 12 14 -1569 53 56 352 496 -1570 340 288 284 625 -1571 283 340 284 625 -1572 561 352 472 468 -1573 86 450 328 403 -1574 329 403 481 328 -1575 455 288 284 372 -1576 501 288 284 455 -1577 376 530 575 630 -1578 630 376 609 575 -1579 430 479 42 647 -1580 621 405 600 534 -1581 22 28 20 443 -1582 643 238 229 423 -1583 481 633 547 142 -1584 558 428 551 652 -1585 509 611 331 508 -1586 513 514 331 611 -1587 509 513 331 611 -1588 601 9 1 3 -1589 289 288 344 501 -1590 515 32 399 34 -1591 403 321 349 329 -1592 392 229 643 238 -1593 618 445 544 379 -1594 618 587 544 445 -1595 531 613 534 573 -1596 629 153 448 628 -1597 538 473 597 486 -1598 597 473 639 486 -1599 650 31 608 346 -1600 607 505 580 21 -1601 288 455 289 372 -1602 289 455 288 501 -1603 376 530 590 575 -1604 49 594 475 575 -1605 356 279 281 274 -1606 550 209 444 500 -1607 362 412 446 562 -1608 529 433 491 223 -1609 455 372 284 283 -1610 465 501 455 289 -1611 465 289 344 501 -1612 445 209 444 587 -1613 153 642 127 628 -1614 294 385 291 414 -1615 283 625 459 599 -1616 613 531 51 573 -1617 636 573 613 51 -1618 557 621 568 537 -1619 558 551 520 5 -1620 500 209 202 627 -1621 635 200 541 574 -1622 595 200 635 574 -1623 558 652 551 5 -1624 534 579 573 615 -1625 605 575 630 564 -1626 31 346 32 608 -1627 631 424 639 422 -1628 383 346 638 26 -1629 469 575 564 413 -1630 15 560 332 598 -1631 15 554 332 560 -1632 586 557 534 615 -1633 573 586 534 615 -1634 332 543 598 593 -1635 543 332 598 15 -1636 609 575 564 630 -1637 554 631 332 453 -1638 424 554 543 422 -1639 608 346 651 650 -1640 487 495 430 479 -1641 645 621 534 557 -1642 645 621 600 534 -1643 542 491 541 574 -1644 541 635 574 491 -1645 636 644 586 573 -1646 573 586 615 644 -1647 543 634 598 593 -1648 497 127 642 628 -1649 598 543 15 634 -1650 25 15 543 634 -1651 473 519 597 453 -1652 595 574 635 491 -1653 636 51 615 573 -1654 644 573 636 615 -$EndElements diff --git a/test/user/testdata/shark_41_ascii_missing_node_index.msh b/test/user/testdata/shark_41_ascii_missing_node_index.msh deleted file mode 100644 index 8789156b..00000000 --- a/test/user/testdata/shark_41_ascii_missing_node_index.msh +++ /dev/null @@ -1,2972 +0,0 @@ -$MeshFormat -4.1 0 8 -$EndMeshFormat -$Entities -0 0 0 1 -0 -0.07334360000000001 -0.08523339999999999 -0.0005566629999999989 0.07028570000000001 0.0819076 0.0752128 0 0 -$EndEntities -$Nodes -1 652 1 652 -3 0 0 652 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -43 -44 -45 -46 -47 -48 -49 -50 -51 -52 -53 -54 -55 -56 -57 -58 -59 -60 -61 -62 -63 -64 -65 -66 -67 -68 -69 -70 -71 -72 -73 -74 -75 -76 -77 -78 -79 -80 -81 -82 -83 -84 -85 -86 -87 -88 -89 -90 -91 -92 -93 -94 -95 -96 -97 -98 -99 -100 -101 -102 -103 -104 -105 -106 -107 -108 -109 -110 -111 -112 -113 -114 -115 -116 -117 -118 -119 -120 -121 -122 -123 -124 -125 -126 -127 -128 -129 -130 -131 -132 -133 -134 -135 -136 -137 -138 -139 -140 -141 -142 -143 -144 -145 -146 -147 -148 -149 -150 -151 -152 -153 -154 -155 -156 -157 -158 -159 -160 -161 -162 -163 -164 -165 -166 -167 -168 -169 -170 -171 -172 -173 -174 -175 -176 -177 -178 -179 -180 -181 -182 -183 -184 -185 -186 -187 -188 -189 -190 -191 -192 -193 -194 -195 -196 -197 -198 -199 -200 -201 -202 -203 -204 -205 -206 -207 -208 -209 -210 -211 -212 -213 -214 -215 -216 -217 -218 -219 -220 -221 -222 -223 -224 -225 -226 -227 -228 -229 -230 -231 -232 -233 -234 -235 -236 -237 -238 -239 -240 -241 -242 -243 -244 -245 -246 -247 -248 -249 -250 -251 -252 -253 -254 -255 -256 -257 -258 -259 -260 -261 -262 -263 -264 -265 -266 -267 -268 -269 -270 -271 -272 -273 -274 -275 -276 -277 -278 -279 -280 -281 -282 -283 -284 -285 -286 -287 -288 -289 -290 -291 -292 -293 -294 -295 -296 -297 -298 -299 -300 -301 -302 -303 -304 -305 -306 -307 -308 -309 -310 -311 -312 -313 -314 -315 -316 -317 -318 -319 -320 -321 -322 -323 -324 -325 -326 -327 -328 -329 -330 -331 -332 -333 -334 -335 -336 -337 -338 -339 -340 -341 -342 -343 -344 -345 -346 -347 -348 -349 -350 -351 -352 -353 -354 -355 -356 -357 -358 -359 -360 -361 -362 -363 -364 -365 -366 -367 -368 -369 -370 -371 -372 -373 -374 -375 -376 -377 -378 -379 -380 -381 -382 -383 -384 -385 -386 -387 -388 -389 -390 -391 -392 -393 -394 -395 -396 -397 -398 -399 -400 -401 -402 -403 -404 -405 -406 -407 -408 -409 -410 -411 -412 -413 -414 -415 -416 -417 -418 -419 -420 -421 -422 -423 -424 -425 -426 -427 -428 -429 -430 -431 -432 -433 -434 -435 -436 -437 -438 -439 -440 -441 -442 -443 -444 -445 -446 -447 -448 -449 -450 -451 -452 -453 -454 -455 -456 -457 -458 -459 -460 -461 -462 -463 -464 -465 -466 -467 -468 -469 -470 -471 -472 -473 -474 -475 -476 -477 -478 -479 -480 -481 -482 -483 -484 -485 -486 -487 -488 -489 -490 -491 -492 -493 -494 -495 -496 -497 -498 -499 -500 -501 -502 -503 -504 -505 -506 -507 -508 -509 -510 -511 -512 -513 -514 -515 -516 -517 -518 -519 -520 -521 -522 -523 -524 -525 -526 -527 -528 -529 -530 -531 -532 -533 -534 -535 -536 -537 -538 -539 -540 -541 -542 -543 -544 -545 -546 -547 -548 -549 -550 -551 -552 -553 -554 -555 -556 -557 -558 -559 -560 -561 -562 -563 -564 -565 -566 -567 -568 -569 -570 -571 -572 -573 -574 -575 -576 -577 -578 -579 -580 -581 -582 -583 -584 -585 -586 -587 -588 -589 -590 -591 -592 -593 -594 -595 -596 -597 -598 -599 -600 -601 -602 -603 -604 -605 -606 -607 -608 -609 -610 -611 -612 -613 -614 -615 -616 -617 -618 -619 -620 -621 -622 -623 -624 -625 -626 -627 -628 -629 -630 -631 -632 -633 -634 -635 -636 -637 -638 -639 -640 -641 -642 -643 -644 -645 -646 -647 -648 -649 -650 -651 -652 --0.07334359999999999 0.08167480000000001 0.056402 --0.07291259999999999 0.0537921 0.00170478 --0.072634 0.0799069 0.0578949 --0.0715817 0.0520377 0.00292576 --0.0701949 0.08025690000000001 0.0450431 --0.06876980000000001 0.060971 0.00326551 --0.06778000000000001 0.060358 0.00473741 --0.06727959999999999 0.08092489999999999 0.0425553 --0.0658074 0.0806443 0.0552302 --0.064933 0.0788176 0.0453762 --0.0636555 0.0610198 0.00141989 --0.0636111 0.0566004 -0.000556663 --0.0636791 0.0819076 0.0524468 --0.0623445 0.0580268 0.00335683 --0.0624856 0.06710579999999999 0.00581638 --0.0601398 0.0781111 0.0317589 --0.0599443 0.0685632 0.009924489999999999 --0.0592787 0.0571239 0.00105116 --0.0587906 0.07199990000000001 0.0117948 --0.0575605 0.0730663 0.016213 --0.057624 0.0811803 0.0403639 --0.0572339 0.0769387 0.0223219 --0.0559974 0.0749629 0.0235691 --0.0542321 0.0763209 0.0344665 --0.0540672 0.0649483 0.008218130000000001 --0.0541685 0.06611350000000001 0.00437935 --0.0532966 0.0805356 0.0466758 --0.0517252 0.07611850000000001 0.0183218 --0.0505257 0.06887699999999999 0.0152572 --0.0503803 0.07726379999999999 0.0406423 --0.0472855 0.0641041 0.00381053 --0.0469016 0.0648796 0.00821733 --0.0474599 0.07272679999999999 0.0265623 --0.0464733 0.070912 0.0103373 --0.0444756 0.07556740000000001 0.0221683 --0.0440208 0.07743129999999999 0.0371107 --0.0434135 0.0685101 0.0213943 --0.0425401 0.0668787 0.0159114 --0.0405353 0.07301630000000001 0.0309862 --0.0386417 0.073548 0.0160682 --0.037401 0.0664899 0.0122191 --0.0358693 0.06894450000000001 0.0243885 --0.0351058 0.06877709999999999 0.0124837 --0.0333614 0.07116500000000001 0.0238503 --0.0325564 0.0696271 0.024504 --0.032455 0.0625178 0.0200737 --0.0305469 0.0729973 0.0173921 --0.0276941 0.06523859999999999 0.0128238 --0.0272717 0.0628782 0.0141328 --0.0263428 0.00735496 0.00505748 --0.0256055 0.00658056 0.00327552 --0.0252856 0.0610141 0.0227762 --0.0250237 -0.00678856 0.00359213 --0.0242889 -0.00589458 0.00589675 --0.0216872 0.0639735 0.0255561 --0.0215721 -0.0119744 0.00619585 --0.0195136 0.0542304 0.0216195 --0.0168343 0.06495339999999999 0.0236547 --0.0161373 -0.00420129 0.00881529 --0.0148726 0.0585475 0.0106707 --0.0140647 0.0517836 0.0159197 --0.0142986 0.0543801 0.0051496 --0.0139611 -0.0178642 0.00651265 --0.0139803 0.0554055 0.0115694 --0.0124373 0.0606817 0.0122622 --0.0127423 0.0580719 0.0285553 --0.0127412 -0.07042320000000001 0.0234664 --0.0126173 -0.0801905 0.022154 --0.0125269 0.0592002 0.0346418 --0.0122498 -0.080596 0.0191154 --0.0121442 -0.0691943 0.0191352 --0.0123618 0.0658492 0.0197519 --0.0121018 -0.063334 0.0245151 --0.0118539 0.0462485 0.0243954 --0.0111067 0.0637388 0.0161162 --0.0110042 -0.0624802 0.0276395 --0.0109072 0.046219 0.0183571 --0.0107037 -0.000325242 0.00950432 --0.010183 -0.0121386 0.00674337 --0.009774420000000001 -0.0638147 0.0162637 --0.0097669 -0.06993340000000001 0.0156591 --0.00942656 -0.0836042 0.0182705 --0.009320999999999999 -0.0852334 0.0216727 --0.00803502 0.0401179 0.0263407 --0.00857808 -0.0579335 0.0163943 --0.007931580000000001 -0.0190616 0.0121625 --0.00782675 0.0573514 0.028038 --0.00773028 -0.0620746 0.0302044 --0.00764665 0.0537773 0.00961295 --0.00721562 -0.0507362 0.0224357 --0.00717408 -0.0528249 0.0179333 --0.00651588 -0.00739691 0.013024 --0.00691116 -0.00014073 0.00823716 --0.00661131 0.044183 0.0123 --0.00658663 0.0535365 0.0326225 --0.00630954 -0.08506569999999999 0.0194796 --0.00616497 -0.0797841 0.0261073 --0.00582999 -0.0494502 0.0287705 --0.00563359 0.0476479 0.00934546 --0.00506609 -0.0425596 0.0250833 --0.00453974 -0.0405694 0.0173853 --0.00447266 0.0319291 0.0205877 --0.00434886 0.0267225 0.00648417 --0.00418386 0.0253438 0.008421959999999999 --0.0041733 -0.0606038 0.0122716 --0.00385183 0.0479538 0.00869149 --0.00333705 0.051389 0.031593 --0.00333565 -0.06938809999999999 0.0119551 --0.00333748 -0.0650683 0.0110291 --0.00292457 0.0475597 0.0319288 --0.00280471 -0.0353375 0.0238411 --0.00273019 -0.0493159 0.0135756 --0.00255346 -0.0452657 0.0126112 --0.00249178 -0.0598565 0.010934 --0.00247351 -0.0533955 0.0149632 --0.00280465 0.0288144 0.0300227 --0.00225175 -0.030519 0.0236922 --0.00205777 -0.0595101 0.00715068 --0.0018581 -0.0627033 0.0116048 --0.00150112 -0.0384203 0.0313885 --0.00143547 -0.0337232 0.0176227 --0.00136747 -0.062725 0.0150152 --0.000884775 -0.0587825 0.0143119 --0.000624659 -0.0247814 0.0257906 --0.000489974 0.0225414 0.0188523 --6.05566e-05 0.0171338 0.0234086 -0.00150381 0.0360475 0.00675461 -0.000282178 -0.0241462 0.0174969 -0.000347869 -0.06752370000000001 0.0324883 -0.000429839 -0.0422219 0.0349169 -0.00028168 -0.0273698 0.0312235 -0.000952705 -0.0267391 0.0143612 -0.00105244 0.0186951 0.00689988 -0.0011109 -0.0779453 0.014663 -0.00137887 0.00842564 0.0258445 -0.00107238 -0.0462225 0.00980545 -0.00158113 -0.0561697 0.005809 -0.00165921 -0.0142314 0.0114909 -0.00169065 -0.00330978 0.027848 -0.0017282 0.0264299 0.00972258 -0.00196109 -0.062067 0.0125082 -0.00198494 -0.0249792 0.0122768 -0.00206797 -0.0322322 0.0125632 -0.00219287 -0.00991015 0.0199027 -0.00223228 -0.065619 0.00972103 -0.00226787 -0.06664 0.0139131 -0.00233081 0.009707510000000001 0.0349608 -0.0023033 -0.0550711 0.0357611 -0.00284591 -0.06958739999999999 0.0109337 -0.00313658 0.0123831 0.0152878 -0.00325266 -0.000639164 0.0164744 -0.00354678 -0.0651674 0.00553443 -0.00434877 0.0392681 0.00656793 -0.0034004 -0.0624097 0.0143354 -0.00410027 0.052311 0.0146156 -0.00425687 -0.0110681 0.0377954 -0.0043501 -0.0020508 0.015115 -0.00444422 -0.0785667 0.0168482 -0.00471578 -0.008727459999999999 0.0133588 -0.00486541 0.0192794 0.0102326 -0.00475235 0.0259901 0.00777948 -0.00497525 -0.0797755 0.0244877 -0.0052286 0.0545416 0.0234287 -0.00513856 -0.0361953 0.00904286 -0.00543656 -0.016404 0.0117933 -0.00521097 0.0361763 0.0357574 -0.00563068 0.0458779 0.0101474 -0.00602624 -0.0598053 0.00448538 -0.00669265 -0.0730234 0.0300997 -0.00671975 -0.0647944 0.0149968 -0.00743572 0.0219428 0.00498754 -0.00806977 -0.06766220000000001 0.0106835 -0.008580020000000001 0.0185363 0.00804532 -0.00900922 -0.0527441 0.0382868 -0.00967438 -0.0310472 0.0412759 -0.009690270000000001 -0.0470756 0.00574739 -0.009825469999999999 -0.0777201 0.0238208 -0.010337 -0.0646559 0.00738197 -0.0103691 -0.0715108 0.0301524 -0.0108524 -0.06519229999999999 0.0107074 -0.0112352 0.0223598 0.00496048 -0.0115762 0.0360388 0.034027 -0.011811 0.0150563 0.0411225 -0.0119389 -0.07108730000000001 0.0142927 -0.011481 0.000850754 0.00890493 -0.0122581 0.0177891 0.00726338 -0.0126044 0.0285097 0.0071727 -0.0126077 -0.0410848 0.00487059 -0.01325 0.0245576 0.00385279 -0.0133342 -0.0301914 0.00695184 -0.0134526 -0.00467313 0.044297 -0.0140263 0.0415073 0.0128325 -0.0139319 -0.0627506 0.0126489 -0.0144402 0.0213321 0.0408733 -0.0145153 -0.0120242 0.00709154 -0.0145254 0.0314471 0.00762861 -0.0143606 -0.0539791 0.00638859 -0.0153705 -0.0588177 0.00913193 -0.0158483 0.0424843 0.0267153 -0.0161677 0.0082135 0.0752128 -0.0160709 -0.0693691 0.0267104 -0.0163112 0.021127 0.00658374 -0.0163956 0.0418119 0.0180916 -0.0166653 0.00513625 0.0449469 -0.0171438 -0.009394380000000001 0.0462661 -0.0174416 -0.0497054 0.0373642 -0.0174198 -0.06569369999999999 0.0159871 -0.0177387 0.0346114 0.0053358 -0.0178439 0.0247259 0.00729322 -0.018247 0.0346901 0.00258831 -0.0182074 -0.0318958 0.0424624 -0.0183988 -0.00142899 0.0496692 -0.0188182 -0.018825 0.0447569 -0.0188285 0.0147456 0.0461032 -0.0188626 0.015416 0.041072 -0.0190811 -0.00419709 0.06868580000000001 -0.0195945 0.0084326 0.064095 -0.0197498 -0.00217441 0.0583864 -0.0198208 0.00539755 0.0587622 -0.0200137 0.0324539 0.00354185 -0.020151 -0.0145671 0.0500049 -0.0203386 -0.00326709 0.07024469999999999 -0.0209148 0.00523036 0.0681576 -0.0208447 0.0121045 0.0546374 -0.0209724 0.009706330000000001 0.0633876 -0.020604 -0.0121123 0.00591309 -0.0212498 -0.0289526 0.00565549 -0.0216078 -0.0380775 0.00479088 -0.0216875 -0.00997672 0.0619769 -0.0220658 0.00705093 0.0456869 -0.0223002 -0.0558455 0.0110476 -0.0223137 -0.0154618 0.0494217 -0.0229336 0.00417573 0.0589573 -0.0231427 0.0278288 0.0125965 -0.0231751 0.027241 0.0309726 -0.0233259 0.0160686 0.00756079 -0.0234095 0.0318943 0.0199392 -0.0234462 -0.00393483 0.0583985 -0.0235915 -0.0597066 0.0170609 -0.0240196 -0.0108777 0.0466362 -0.024123 -0.00330273 0.0464733 -0.0242099 -0.0321428 0.0398591 -0.0244244 0.00347947 0.0416421 -0.024564 -0.0175604 0.0433407 -0.0253979 -0.0453083 0.0344803 -0.0256103 0.0267734 0.0284514 -0.0259312 -0.0445208 0.00878379 -0.025959 -0.0133125 0.00624018 -0.0265967 -0.0369666 0.00635268 -0.0273245 -0.0066598 0.0412078 -0.0277597 -0.0467651 0.0304517 -0.0275944 -0.0515878 0.0207552 -0.0282687 0.0208205 0.0174814 -0.0290859 0.0112094 0.012597 -0.0293048 -0.0474855 0.0256026 -0.0296506 -0.0466043 0.0156453 -0.0304236 0.0134394 0.031696 -0.0304518 -0.0291908 0.00746031 -0.03126 -0.044124 0.016095 -0.0321715 -0.043346 0.0242104 -0.0322352 -0.0402733 0.0141242 -0.0323149 0.01052 0.0200521 -0.0324768 -0.0397188 0.0271188 -0.0325431 -0.0291932 0.0340382 -0.0332479 -0.0329826 0.0117351 -0.0338676 -0.0346121 0.0252676 -0.0341522 -0.00293196 0.033596 -0.0341882 -0.0361716 0.0179088 -0.0344969 -0.0256263 0.0309923 -0.0345138 -0.00958586 0.0123416 -0.0348872 -0.0128566 0.0339912 -0.0349524 -0.0273994 0.0177976 -0.0349556 -0.000677158 0.0209767 -0.0350004 -0.028049 0.008761420000000001 -0.0353194 -0.0100316 0.0154749 -0.0354214 -0.0195455 0.0173172 -0.0355775 -0.0309821 0.0107592 -0.0360305 -0.0150581 0.0232372 -0.0363938 -0.0285041 0.0132933 -0.0374738 -0.00607371 0.0123945 -0.041317 -0.0210454 0.0131228 -0.0425886 -0.0120136 0.0129537 -0.0475164 -0.00753527 0.00853843 -0.0492593 -0.00704914 0.009380670000000001 -0.0496752 -0.0170405 0.0106038 -0.0498676 -0.0259318 0.00619626 -0.052402 -0.022331 0.00866719 -0.0516897 -0.011391 0.0103437 -0.0559595 -0.0106346 0.00698866 -0.0596531 -0.0214295 0.0059579 -0.066312 -0.0158462 0.00759335 -0.0672852 -0.00331292 0.00667068 -0.0687074 -0.0027598 0.00829441 -0.0687083 -0.008451500000000001 0.00881385 -0.07028570000000001 -0.00694567 0.00665748 -0.02471 0.00101921 0.00688758 -0.00641783 -0.0341512 0.0233596 -0.024018 0.00854392 0.00722419 -0.0251696 0.009421270000000001 0.00784613 --0.019815 0.0686939 0.0189821 -0.0416697 -0.017118 0.00864259 --0.00440288 -0.06984319999999999 0.0205811 --0.0033606 0.0600219 0.0217676 -0.0268544 0.00322876 0.008082499999999999 -0.00855449 0.0107052 0.00928038 -0.0219179 0.00585482 0.0121236 -0.0199208 0.0175811 0.0336776 -0.0210521 -0.0362113 0.0256186 -0.0339797 -0.00194129 0.0163861 -0.03202 0.000337126 0.0126992 -0.0119633 0.0163586 0.0147908 -0.0248778 0.0056119 0.0321775 -0.00892971 -0.0563678 0.0287948 -0.0174837 0.027107 0.0210333 --0.0170518 0.00346089 0.00554363 -0.0144974 -0.0120686 0.0314959 -0.00336155 -0.00103205 0.0364574 -0.00707711 -0.0204903 0.0185209 -0.010517 -0.00309481 0.0232445 --0.00559352 0.0373259 0.0172753 --0.00523735 -0.0230725 0.0111224 -0.0151072 -0.0538804 0.0213778 -0.0347571 -0.0188174 0.0105515 -0.0278657 -0.0183642 0.0156758 --0.00338013 -0.0543805 0.0329679 --0.0196332 0.0593213 0.0251138 -0.06481629999999999 -0.0143432 0.00627944 --0.00336175 -0.0187472 0.00979996 --0.0059938 -0.0214388 0.00941436 -0.0204933 0.0262773 0.00994486 -0.0153554 0.00838654 0.0105168 --0.064082 0.064994 0.00682263 --0.0406296 0.0703091 0.0249838 --0.0197677 0.0563929 0.0156108 --0.0506931 0.0781816 0.0304629 -0.0171972 -0.00100568 0.011485 -0.0314619 -0.0225976 0.00774901 --0.00980694 0.0515267 0.0104574 --0.00435185 0.0493969 0.0137744 -0.0449063 -0.0117353 0.00859937 -0.00159087 -0.0450385 0.027858 --0.00469537 -0.06372510000000001 0.0233918 -0.0424219 -0.0285632 0.00857374 -0.0603894 -0.00835109 0.009350529999999999 --0.0147113 -0.0156046 0.009183759999999999 --0.0528157 0.0611754 0.00480955 --0.0173765 -0.008871489999999999 0.00520522 -0.0108104 0.02268 0.0130558 --0.00899905 -0.0208443 0.00915416 --0.0449914 0.0768094 0.0302276 --0.0408502 0.06658 0.008368489999999999 --0.0199988 -0.0118916 0.004906 -0.00337131 0.0455887 0.0238561 -0.00477413 -0.0721541 0.0211645 --0.00344193 -0.049333 0.032475 -0.0427245 -0.0268877 0.00738607 -0.0272704 -0.0238375 0.00669928 --0.00610544 -0.0476638 0.0181008 --0.00760153 0.0503529 0.00747858 -0.0131109 -0.0422224 0.0405109 -0.00214561 -0.0490294 0.0151357 --0.0598224 0.0805424 0.0511855 --0.0204542 0.0588165 0.013102 -0.059357 -0.0190886 0.00813027 --0.00100716 0.0422264 0.0325724 -0.0325535 -0.0244764 0.012522 --0.000431427 -0.0574818 0.0137747 -0.0114251 0.0275734 0.00440942 -0.00337666 -0.0559724 0.0148659 --0.0262911 0.0586227 0.0207785 --0.0699467 0.0813567 0.0499003 -0.0494602 -0.0133111 0.00757754 -0.00758285 0.0333008 0.0104911 -0.00657287 0.032122 0.00603963 -0.000332803 -0.0511328 0.0180756 --0.021764 0.0620607 0.0118108 --0.0454672 0.075167 0.035911 -0.00139884 0.045926 0.0128133 -0.0176314 0.0311493 0.00370344 --0.0159418 -0.0158578 0.00793814 --0.0229387 0.06916410000000001 0.0166572 --0.00133409 -0.0449329 0.0187829 --0.0538019 0.0611146 0.00198764 -0.0305208 -0.00256491 0.0101919 -0.0623596 -0.00697151 0.00683979 -0.0236819 -0.00777996 0.0526871 -0.0118138 -0.0144241 0.0430193 -0.0137156 -0.00365078 0.00732253 --0.0257884 0.0686739 0.0150694 --0.0530331 0.060812 0.00248197 --0.000421194 -0.0523335 0.008791770000000001 -0.0193846 -0.00072024 0.0649221 -0.00485856 0.0133946 0.0114741 --0.0053823 -0.0743714 0.0141262 -0.016958 0.0166471 0.00740593 -0.0429338 -0.0266961 0.0110582 --0.06504749999999999 0.05473 0.00191127 -0.00924818 0.0356698 0.00715588 --0.042468 0.0652669 0.00790867 -0.00699205 0.0348997 0.00576165 --0.012123 0.00171435 0.00688121 -0.017741 0.00126373 0.0717161 --0.00477874 -0.0228765 0.0123522 --0.05496 0.0793832 0.0329037 --0.0253736 -0.000654191 0.00342534 -0.0220159 -0.0128389 0.0555838 -0.0187915 0.00366305 0.06539010000000001 --0.0635923 0.0794618 0.0351284 -0.0187293 0.00901455 0.0689246 --0.0507436 0.0790633 0.0364811 -0.00440962 0.0291856 0.00589534 --0.0610541 0.08157639999999999 0.0467801 --0.0264169 0.06418980000000001 0.0180225 -0.0590681 -0.0129818 0.009692930000000001 -0.0316732 -0.013669 0.008927310000000001 --0.0368828 0.0732351 0.028231 -0.0147007 -0.0293577 0.0425282 --0.00226105 0.042112 0.008184220000000001 --0.022404 0.068624 0.0211714 -0.018834 0.0296379 0.0101126 -0.0545664 -0.023882 0.00596013 --0.0610274 0.0626039 0.00623226 -0.0209345 -0.0123916 0.0558755 --0.064258 0.0639612 0.00701622 --0.0530259 0.07099660000000001 0.0104874 --0.000350232 0.0328643 0.009503569999999999 -0.0179821 0.0260225 0.00525665 --0.071629 0.0809096 0.0500374 -0.0431333 -0.00662611 0.0109755 --0.0367738 0.072104 0.0272887 --0.00147996 0.0424733 0.00778004 --0.0489442 0.0792518 0.0424775 -0.0178184 0.008309230000000001 0.0698262 --0.00256208 -0.0518644 0.0119693 --0.0024457 0.0347988 0.0115191 --0.0226391 0.067054 0.0236986 --0.0250562 0.070839 0.0181046 -0.0157661 -0.010775 0.0444953 --0.0587069 0.0610686 0.00549325 --0.0561989 0.0607157 0.00436391 -0.0028322 0.0311045 0.0076099 --0.061857 0.079748 0.0514834 --0.0580072 0.07448539999999999 0.0170926 -0.017366 0.0281829 0.00449304 -0.0175246 0.0303053 0.00632184 --0.0583716 0.0812348 0.0494755 --0.06276379999999999 0.08110589999999999 0.0418948 -0.009583370000000001 0.0391723 0.00889538 -0.0164997 0.0327763 0.00400793 --0.0100537 -0.019407 0.0104569 -0.0535082 -0.023589 0.00757618 --0.0184567 0.0672393 0.0165986 --0.0660887 0.06395149999999999 0.00557639 --0.008500499999999999 0.0591911 0.0132991 -0.0527123 -0.00658592 0.00801901 -0.00664445 0.0147496 0.00979726 --0.0323364 0.06468409999999999 0.013176 --0.06849810000000001 0.0817682 0.0541475 -0.0424951 -0.00680449 0.0104665 --0.01583 0.06382989999999999 0.0140017 --0.0408586 0.07478079999999999 0.0276312 --0.0213675 0.00505684 0.00440033 --0.0609542 0.0784149 0.029815 -0.0458286 -0.0196104 0.0115924 -0.0619857 -0.0044448 0.00717137 --0.0549453 0.0736446 0.0144159 --0.0660739 0.0797747 0.0511232 --0.0150243 -0.0138696 0.00597473 --0.0208919 0.06642729999999999 0.014553 --0.0583912 0.07667309999999999 0.0277458 --0.00499489 -0.0492059 0.0154875 --0.0177596 -0.0149926 0.00640227 --0.0656257 0.0638276 0.00437301 --0.00111824 -0.0505712 0.010634 --0.0234714 0.0595273 0.0150887 --0.0117477 -0.00786715 0.0107629 --0.0329423 0.0662408 0.012525 --0.0588644 0.0778049 0.0265316 --0.038272 0.07101209999999999 0.0277124 -0.0147178 0.0228905 0.00513556 --0.00242697 -0.0228032 0.0106496 --0.00998317 -0.0196685 0.00798312 -0.00194711 0.0338412 0.00734265 --0.0101071 0.0571173 0.0108272 --0.000192036 0.0305177 0.010316 --0.06622359999999999 0.0609953 0.00234663 --0.0383437 0.071981 0.0290737 -0.0464353 -0.0271448 0.00729223 --0.0113654 0.0558876 0.00985606 --0.0600686 0.0581853 0.00037707 -0.0184892 0.00651809 0.072001 --0.0272353 0.0661385 0.0125002 -0.0386787 -0.009397559999999999 0.0110365 --0.00702298 -0.0554164 0.0301677 --0.0387296 0.0725599 0.0291973 --0.0195884 -0.009713039999999999 0.00731553 -0.0009803979999999999 0.0340005 0.008311529999999999 --0.00251349 -0.0493306 0.0137872 --0.0208118 0.00468072 0.00662791 -0.0145465 0.0247675 0.00685396 -0.0539643 -0.00601143 0.00911787 -0.0615879 -0.00432066 0.00875869 --0.0649217 0.0800024 0.0383643 -0.00460493 0.008497380000000001 0.0127005 --0.0606311 0.0803611 0.0379233 --0.00316884 0.0400824 0.00969248 --0.0308482 0.067467 0.0126012 -0.0120049 0.00511369 0.00824306 -0.0117314 0.0134932 0.00784586 -0.0067401 0.0222359 0.00786688 -0.000365941 0.0444987 0.0334101 -0.00589042 0.0427357 0.0325284 -0.0134556 0.013691 0.0071386 -0.0155774 0.00572549 0.00675779 --0.0442054 0.0654197 0.00607699 -0.00863004 0.0184766 0.00878081 --0.0111016 -0.0170398 0.0107756 --0.0162643 0.06208 0.0123266 --0.06706429999999999 0.0628756 0.0047451 --0.0673064 0.07917689999999999 0.0489333 --0.0566743 0.0588231 0.00264455 --0.07138410000000001 0.080001 0.0523997 --0.0690781 0.0794039 0.0521145 --0.0589744 0.07029879999999999 0.0123753 --0.0108026 0.05228 0.00636676 --0.0113486 0.0541547 0.00728553 --0.0299136 0.06862409999999999 0.0165753 -0.0505332 -0.0225927 0.00635398 -0.0180077 0.0031318 0.07043870000000001 --0.0235313 0.0640143 0.012641 --0.0235569 0.00584404 0.00381922 -0.0384718 -0.0113423 0.0144484 -0.0182407 0.00232532 0.0728388 --0.0235752 0.00407866 0.00373027 --0.011585 0.0522432 0.00647843 -0.0400312 -0.00904366 0.0126741 --0.0178591 -0.000359808 0.00797485 --0.067167 0.06255139999999999 0.00392853 --0.0596438 0.0779391 0.0290601 -0.0013543 0.0302152 0.00901705 -0.0168301 0.00522322 0.0737244 -0.0174324 0.00448014 0.0738384 --0.0618546 0.0649931 0.00590465 -0.0194429 0.0304209 0.00452872 --0.0236633 0.0648084 0.0124456 --0.00249493 -0.0562542 0.012985 --0.0025263 -0.0246783 0.0125409 --0.0396392 0.0718092 0.02876 --0.0158083 -0.0164708 0.00645267 -0.016879 0.0245859 0.0055459 --0.06884990000000001 0.0811361 0.0461884 -0.0290982 -0.00647478 0.008279069999999999 --0.041817 0.0761358 0.0343691 --0.0642688 0.0653922 0.00517065 --0.0162175 0.00239503 0.00694561 -0.00467524 0.0360758 0.00643588 --0.0222973 0.0035638 0.00646752 --0.0708092 0.0801688 0.0482801 --0.0549524 0.07870829999999999 0.0296023 --0.06310540000000001 0.0672415 0.00811831 --0.0155444 -0.0163359 0.0060847 --0.0574097 0.07880470000000001 0.0473507 --0.0558952 0.0591814 0.001764 --0.0177409 0.0619627 0.0144786 --0.00178349 -0.0487397 0.0125937 --0.0111058 0.0522074 0.008299040000000001 --0.0260139 0.00360897 0.00461987 --0.0204566 0.00423454 0.00564674 -0.00612936 0.0370467 0.00680554 -0.010446 0.0313554 0.00705031 --0.0569353 0.05965 0.00118235 --0.0506685 0.0625792 0.00279292 --0.0249761 0.00485573 0.00443819 -0.0172421 0.00725128 0.07382619999999999 --0.0219613 0.06430039999999999 0.0138184 --0.00260185 -0.0513557 0.0142694 --0.0167422 0.00259292 0.00779623 -0.00214524 0.0341103 0.00650831 --0.0236765 0.00572293 0.004305 --0.0616879 0.0784644 0.0353636 --0.0125522 0.0533024 0.00573952 --0.00373263 -0.048886 0.014509 --0.00253347 -0.0472982 0.0131992 --0.0128746 -0.017623 0.00940414 --5.43548e-05 0.0393803 0.00728201 --0.0258702 0.00405717 0.00525282 -0.0183599 0.0265636 0.00640112 -0.0459896 -0.0257989 0.0100883 --0.0295424 0.06805940000000001 0.0247957 --0.0245383 0.0634107 0.0123732 -0.0066096 0.0377811 0.00691952 --0.0450015 0.0646553 0.00575343 --0.0622505 0.0661482 0.00839783 --0.0256248 0.0608105 0.0161665 -0.017488 0.00853314 0.07209649999999999 --0.0596734 0.07050969999999999 0.009924850000000001 --0.06657979999999999 0.06286890000000001 0.00493615 --0.0624322 0.0664941 0.0080812 -0.0436037 -0.00911409 0.009504510000000001 --0.0258241 0.00183578 0.00455937 --0.07027029999999999 0.07969130000000001 0.0546337 --0.027947 0.06304949999999999 0.0231884 --0.0601839 0.07046330000000001 0.0106076 --0.019796 -0.0130118 0.0069497 --0.0183149 0.06305479999999999 0.012418 --0.0302535 0.0701272 0.02364 --0.0574291 0.07908510000000001 0.0314511 --0.0506885 0.0650762 0.00396145 --0.021101 0.0616869 0.0137094 --0.0331684 0.0670427 0.023997 -0.0134393 0.00644533 0.00718965 --0.0111807 -0.0194906 0.00818236 --0.0255718 0.00304117 0.00332801 --0.0126697 -0.015488 0.00653208 --0.0247074 0.00660999 0.00551935 -0.0173416 0.0031807 0.0727906 -0.0172416 0.0236783 0.00588169 -0.0190309 0.0293428 0.00437137 -0.016715 0.00646681 0.0747173 --0.0362286 0.072292 0.023504 --0.0193589 -0.00042516 0.00470745 --0.0218861 0.06436310000000001 0.0125137 --0.0102557 0.0512168 0.00711881 -0.0404202 -0.00631757 0.0116411 -0.0462272 -0.00679819 0.0101561 --0.0259792 0.0656558 0.0150971 -0.0162732 0.0229634 0.00624384 -0.00353474 0.0364474 0.008433390000000001 -4.6368e-06 0.0388726 0.009730829999999999 --0.0216501 0.0633078 0.012475 --0.06535530000000001 0.0635995 0.0060088 --0.0129397 0.0533345 0.00604151 --0.00189413 -0.0244631 0.013557 --0.0610974 0.0673557 0.00916116 -0.0169636 0.00823874 0.0726305 --0.0262169 0.00566462 0.00486021 --0.00105663 -0.050339 0.013034 --0.0522352 0.0618469 0.00239028 --0.06586110000000001 0.0623674 0.00600767 --0.0308719 0.0671807 0.0240148 --0.0271033 0.0631674 0.0232081 -0.000463176 0.0377435 0.00713404 -0.0197653 -0.0105149 0.0573133 --0.0261272 0.00574879 0.00514751 --0.0256133 0.00236555 0.00535812 -0.0395658 -0.00664927 0.0115095 --0.0346515 0.0704144 0.0260764 --0.0676857 0.0619198 0.00410476 --0.0352382 0.07226829999999999 0.0261851 --0.0489272 0.0632235 0.00329626 --0.0514659 0.0617489 0.00295197 --0.070483 0.0805389 0.0464472 -$EndNodes -$Elements -1 1654 1 1654 -3 0 4 1654 -1 26 15 543 25 -2 227 308 190 188 -3 203 353 199 163 -4 331 305 504 150 -5 142 328 128 138 -6 490 439 18 571 -7 364 289 287 414 -8 296 336 304 298 -9 564 419 300 381 -10 398 569 373 591 -11 486 473 639 422 -12 338 89 566 489 -13 332 554 543 424 -14 80 67 71 302 -15 149 146 109 108 -16 98 90 375 342 -17 341 308 325 313 -18 147 314 126 116 -19 124 318 156 131 -20 245 322 206 308 -21 348 311 516 186 -22 135 150 319 151 -23 147 314 307 311 -24 464 588 301 528 -25 461 33 35 333 -26 196 192 373 314 -27 108 81 302 122 -28 366 258 227 357 -29 511 107 512 353 -30 146 170 354 172 -31 297 175 156 130 -32 130 297 175 308 -33 318 159 319 195 -34 154 123 122 342 -35 261 308 259 260 -36 132 142 128 318 -37 241 250 240 205 -38 226 227 248 324 -39 575 609 475 49 -40 375 91 123 90 -41 260 308 255 251 -42 517 612 63 482 -43 120 117 131 297 -44 318 131 297 156 -45 147 319 311 307 -46 131 120 297 130 -47 120 297 111 117 -48 308 174 206 360 -49 148 313 325 175 -50 148 313 175 174 -51 302 80 122 81 -52 107 353 511 110 -53 322 231 198 197 -54 61 58 564 57 -55 240 386 212 221 -56 121 297 143 117 -57 121 297 117 111 -58 307 235 314 182 -59 307 314 166 182 -60 417 308 175 316 -61 308 175 360 417 -62 601 9 458 1 -63 459 429 536 599 -64 211 242 206 308 -65 528 588 301 356 -66 316 297 308 175 -67 197 188 308 228 -68 231 308 228 197 -69 231 197 322 308 -70 188 197 308 361 -71 322 361 308 197 -72 259 308 256 255 -73 298 306 304 299 -74 302 342 146 122 -75 251 322 245 308 -76 298 306 299 236 -77 342 302 169 129 -78 157 319 331 150 -79 190 195 324 227 -80 146 342 354 154 -81 190 297 308 324 -82 236 254 306 299 -83 354 179 201 322 -84 308 297 188 361 -85 361 188 164 297 -86 195 165 190 318 -87 307 215 257 235 -88 194 235 215 307 -89 174 129 148 313 -90 169 313 129 174 -91 322 255 251 201 -92 366 265 308 258 -93 227 308 258 366 -94 258 308 249 265 -95 227 308 228 258 -96 448 192 373 196 -97 228 308 249 258 -98 296 298 514 336 -99 125 150 348 126 -100 125 160 348 150 -101 244 264 242 316 -102 264 316 244 271 -103 224 233 225 219 -104 107 353 163 199 -105 217 223 219 225 -106 308 174 313 206 -107 206 313 179 174 -108 241 230 212 233 -109 241 233 212 218 -110 267 278 312 273 -111 267 312 262 273 -112 206 179 322 245 -113 242 245 206 308 -114 144 319 159 157 -115 265 308 266 272 -116 218 219 392 233 -117 264 324 316 271 -118 324 308 264 316 -119 297 318 117 131 -120 128 117 318 124 -121 354 207 201 177 -122 207 177 354 184 -123 155 163 353 203 -124 131 297 156 130 -125 395 330 236 202 -126 164 142 318 190 -127 253 314 234 311 -128 307 314 147 166 -129 331 234 253 254 -130 306 236 298 331 -131 156 297 316 175 -132 324 319 318 316 -133 297 324 316 308 -134 373 314 102 125 -135 167 155 378 192 -136 278 324 272 269 -137 278 276 272 324 -138 319 159 157 336 -139 267 257 312 243 -140 307 215 243 257 -141 156 297 318 316 -142 207 354 170 184 -143 124 144 139 156 -144 267 312 250 243 -145 144 151 139 319 -146 318 316 319 144 -147 316 139 319 144 -148 139 144 316 156 -149 316 191 312 319 -150 316 191 317 156 -151 313 308 175 174 -152 253 234 331 311 -153 331 395 234 236 -154 272 265 308 366 -155 103 140 133 510 -156 235 199 246 314 -157 246 237 314 199 -158 144 151 319 157 -159 92 157 151 144 -160 92 159 157 144 -161 395 234 236 330 -162 395 330 202 348 -163 348 330 202 209 -164 324 312 316 271 -165 266 308 324 272 -166 324 366 308 227 -167 242 264 245 308 -168 272 266 269 324 -169 135 151 319 139 -170 40 35 28 29 -171 88 148 129 342 -172 325 342 148 88 -173 314 116 147 166 -174 77 353 320 94 -175 331 262 319 306 -176 319 317 139 316 -177 450 329 482 328 -178 183 307 147 166 -179 188 361 176 197 -180 169 179 313 174 -181 314 196 348 373 -182 102 84 116 353 -183 102 77 84 353 -184 191 147 319 317 -185 307 262 257 312 -186 307 257 246 235 -187 307 257 262 246 -188 128 318 144 124 -189 246 314 237 253 -190 314 203 237 234 -191 142 128 318 138 -192 253 237 234 314 -193 306 319 331 336 -194 307 314 235 246 -195 316 250 312 191 -196 450 403 349 329 -197 121 297 101 143 -198 382 164 101 297 -199 369 198 322 193 -200 264 266 324 269 -201 322 354 170 207 -202 322 170 193 207 -203 353 84 116 110 -204 70 302 68 83 -205 331 311 234 395 -206 323 493 282 301 -207 269 278 324 271 -208 278 312 324 271 -209 207 170 180 184 -210 207 170 193 180 -211 325 130 175 308 -212 146 354 170 154 -213 354 302 342 146 -214 161 348 510 181 -215 182 314 199 235 -216 322 354 369 170 -217 231 207 322 198 -218 313 322 375 341 -219 375 361 341 322 -220 322 207 193 198 -221 297 143 164 101 -222 221 213 240 232 -223 190 188 308 297 -224 341 361 375 382 -225 341 308 313 322 -226 134 158 184 354 -227 247 308 261 249 -228 263 308 260 251 -229 318 319 159 144 -230 309 262 306 319 -231 250 204 243 312 -232 448 192 167 378 -233 37 333 620 35 -234 37 33 333 35 -235 297 318 316 324 -236 167 448 378 153 -237 212 218 233 219 -238 88 325 342 494 -239 246 307 314 253 -240 307 253 246 262 -241 126 311 150 348 -242 388 611 336 514 -243 348 234 420 314 -244 236 254 331 306 -245 348 314 311 234 -246 211 308 360 417 -247 373 102 320 125 -248 316 250 191 438 -249 250 205 191 438 -250 254 262 306 309 -251 254 309 306 310 -252 299 254 306 310 -253 331 262 306 254 -254 292 294 295 293 -255 194 307 215 204 -256 304 306 384 299 -257 267 312 257 262 -258 353 192 378 155 -259 319 159 336 195 -260 353 192 373 378 -261 336 185 388 195 -262 312 250 271 267 -263 271 250 312 316 -264 261 249 308 265 -265 268 308 265 261 -266 247 308 249 228 -267 227 195 324 226 -268 366 324 415 337 -269 337 366 324 357 -270 190 195 318 324 -271 156 318 124 144 -272 263 266 308 264 -273 251 263 308 264 -274 197 198 322 369 -275 154 354 369 342 -276 188 308 228 227 -277 79 328 138 92 -278 316 317 139 156 -279 360 175 308 174 -280 255 251 308 322 -281 255 256 252 308 -282 247 228 231 308 -283 247 308 231 256 -284 134 149 394 354 -285 83 162 96 302 -286 161 373 140 348 -287 88 67 302 68 -288 302 97 88 68 -289 512 166 314 182 -290 420 192 314 234 -291 348 330 420 234 -292 192 314 234 203 -293 91 123 105 115 -294 394 70 302 81 -295 309 273 262 319 -296 319 262 312 273 -297 67 302 68 70 -298 271 278 312 267 -299 66 57 326 58 -300 188 136 176 361 -301 157 331 185 504 -302 136 361 188 164 -303 244 250 271 316 -304 71 302 67 70 -305 244 213 232 240 -306 81 302 71 70 -307 354 149 108 146 -308 314 237 203 199 -309 506 378 435 629 -310 244 438 316 213 -311 97 302 169 162 -312 244 316 438 250 -313 313 129 342 169 -314 382 113 101 164 -315 506 435 378 94 -316 91 123 85 105 -317 308 264 245 251 -318 242 264 308 316 -319 450 349 482 329 -320 314 373 348 125 -321 92 138 159 144 -322 395 311 234 348 -323 278 273 324 312 -324 373 378 435 320 -325 147 311 319 135 -326 126 311 135 150 -327 126 135 311 147 -328 314 348 311 126 -329 83 302 82 70 -330 378 435 629 373 -331 195 159 165 318 -332 316 312 324 319 -333 156 175 316 387 -334 336 298 514 331 -335 88 342 129 302 -336 319 307 331 311 -337 253 314 311 307 -338 311 331 253 307 -339 297 341 308 130 -340 314 348 126 125 -341 147 314 311 126 -342 61 339 99 338 -343 250 204 312 191 -344 305 185 508 331 -345 211 242 308 316 -346 211 308 417 316 -347 213 316 211 417 -348 214 215 230 204 -349 244 316 242 211 -350 244 211 213 316 -351 465 501 344 502 -352 108 354 302 394 -353 313 129 148 342 -354 337 324 415 248 -355 337 258 366 357 -356 121 101 297 111 -357 382 101 111 297 -358 157 159 185 336 -359 226 336 195 324 -360 307 262 331 253 -361 307 262 319 331 -362 331 254 253 262 -363 248 336 552 296 -364 319 324 195 336 -365 248 296 226 336 -366 324 248 336 552 -367 147 183 191 307 -368 282 281 276 323 -369 281 323 282 301 -370 109 119 105 122 -371 297 143 117 318 -372 109 122 105 80 -373 308 366 324 272 -374 297 318 324 190 -375 297 190 164 318 -376 214 204 230 212 -377 224 212 214 230 -378 297 143 318 164 -379 264 308 324 266 -380 264 269 324 271 -381 132 117 143 318 -382 130 297 341 120 -383 341 130 120 98 -384 277 343 356 279 -385 325 308 175 313 -386 109 81 108 122 -387 109 122 108 146 -388 348 234 395 330 -389 341 111 120 297 -390 341 100 98 120 -391 341 111 100 120 -392 226 336 324 248 -393 318 319 324 195 -394 275 270 324 309 -395 309 336 324 319 -396 552 270 336 324 -397 273 309 275 324 -398 403 328 329 450 -399 382 111 341 297 -400 361 322 308 341 -401 361 341 308 297 -402 342 85 73 90 -403 342 73 85 80 -404 323 324 366 276 -405 361 297 164 382 -406 96 82 83 302 -407 45 647 44 42 -408 179 354 201 177 -409 53 621 54 347 -410 117 124 131 318 -411 156 144 316 318 -412 369 198 193 141 -413 342 302 88 67 -414 67 80 342 302 -415 73 80 342 67 -416 342 73 67 76 -417 372 528 289 285 -418 285 528 289 287 -419 355 98 325 494 -420 122 119 105 123 -421 394 82 134 302 -422 494 88 76 342 -423 109 81 122 80 -424 447 580 503 505 -425 114 118 141 145 -426 311 150 319 135 -427 108 122 302 146 -428 204 307 183 194 -429 191 204 307 183 -430 382 101 100 111 -431 382 111 100 341 -432 318 159 138 144 -433 588 281 301 356 -434 87 61 77 57 -435 318 159 165 138 -436 7 12 2 486 -437 316 191 319 317 -438 208 196 449 445 -439 322 369 354 313 -440 354 158 177 162 -441 354 169 162 179 -442 313 369 354 342 -443 179 162 354 177 -444 130 98 341 355 -445 325 130 341 355 -446 337 357 324 248 -447 324 357 227 248 -448 588 281 464 301 -449 375 341 382 98 -450 454 75 61 155 -451 353 77 84 74 -452 331 305 185 504 -453 311 331 319 150 -454 378 339 167 106 -455 318 190 142 165 -456 138 142 165 318 -457 18 12 397 14 -458 298 514 331 513 -459 118 137 141 168 -460 298 331 236 395 -461 395 298 331 513 -462 93 157 92 159 -463 354 158 184 177 -464 151 157 92 93 -465 78 93 151 92 -466 378 448 629 153 -467 102 314 126 125 -468 126 116 314 102 -469 61 72 303 75 -470 39 461 350 553 -471 350 39 33 461 -472 311 331 513 395 -473 311 331 305 509 -474 353 102 314 116 -475 204 215 243 307 -476 106 153 167 378 -477 97 162 83 302 -478 107 353 199 512 -479 297 188 164 190 -480 147 319 139 135 -481 77 353 87 74 -482 353 203 199 314 -483 512 314 353 199 -484 37 38 29 35 -485 485 140 373 125 -486 398 448 373 196 -487 196 570 373 398 -488 324 248 552 415 -489 415 270 552 324 -490 52 57 594 564 -491 285 289 414 287 -492 438 250 205 240 -493 524 425 25 17 -494 29 25 524 425 -495 87 77 61 353 -496 93 92 138 159 -497 93 92 79 138 -498 203 192 353 155 -499 192 353 314 203 -500 88 302 129 97 -501 169 342 354 302 -502 147 319 317 139 -503 435 426 629 373 -504 197 168 369 176 -505 369 176 361 197 -506 157 151 319 150 -507 307 319 312 191 -508 312 307 191 204 -509 628 373 441 374 -510 513 331 311 509 -511 49 594 413 46 -512 303 163 87 61 -513 146 342 154 122 -514 274 366 415 337 -515 274 258 366 337 -516 87 57 74 66 -517 304 306 336 384 -518 204 250 205 191 -519 110 74 66 87 -520 163 87 61 353 -521 204 205 250 241 -522 387 438 213 316 -523 150 160 348 311 -524 313 369 342 375 -525 313 322 369 375 -526 97 129 169 302 -527 504 305 393 150 -528 181 348 500 187 -529 610 527 42 44 -530 44 527 42 620 -531 311 305 456 509 -532 311 509 456 516 -533 365 512 166 116 -534 116 512 166 314 -535 509 305 508 331 -536 322 369 193 170 -537 535 526 581 632 -538 182 314 512 199 -539 497 441 373 540 -540 37 42 46 527 -541 500 209 187 348 -542 312 257 307 243 -543 323 366 281 276 -544 348 420 209 196 -545 366 279 276 272 -546 202 500 186 348 -547 386 406 221 232 -548 64 526 62 489 -549 336 159 185 195 -550 404 24 559 335 -551 404 24 607 559 -552 384 336 552 270 -553 244 240 438 213 -554 244 438 240 250 -555 430 461 620 333 -556 461 333 35 620 -557 61 564 64 334 -558 381 437 47 413 -559 279 277 265 258 -560 279 277 258 274 -561 186 500 181 348 -562 140 510 348 160 -563 377 410 36 350 -564 202 330 236 209 -565 380 345 614 468 -566 99 339 378 106 -567 378 106 418 99 -568 378 448 373 629 -569 194 235 307 182 -570 194 307 166 182 -571 194 307 183 166 -572 353 373 320 378 -573 68 97 83 302 -574 347 496 604 476 -575 161 181 411 373 -576 570 374 400 368 -577 40 38 35 29 -578 364 289 327 528 -579 324 309 319 273 -580 353 378 320 94 -581 358 91 471 375 -582 134 394 302 354 -583 394 149 108 354 -584 172 354 146 149 -585 382 358 471 375 -586 101 382 90 358 -587 651 346 638 390 -588 382 90 100 101 -589 334 594 564 475 -590 369 361 375 322 -591 322 197 369 361 -592 342 325 98 494 -593 325 313 148 342 -594 342 325 375 98 -595 115 369 123 367 -596 342 98 76 494 -597 369 375 576 115 -598 353 512 116 314 -599 336 304 552 296 -600 336 306 304 298 -601 226 514 336 296 -602 108 302 81 394 -603 181 411 373 374 -604 26 440 571 383 -605 26 383 346 440 -606 211 360 308 206 -607 87 74 57 77 -608 358 113 101 382 -609 195 388 336 226 -610 241 233 218 238 -611 155 339 378 353 -612 345 79 468 476 -613 213 316 417 175 -614 387 316 213 175 -615 312 307 262 319 -616 435 485 426 373 -617 435 373 125 485 -618 299 310 306 384 -619 26 425 25 34 -620 118 114 367 434 -621 26 34 25 608 -622 223 222 529 392 -623 527 38 37 35 -624 37 527 46 38 -625 342 123 90 375 -626 342 123 85 90 -627 335 350 33 35 -628 350 461 33 35 -629 85 91 90 123 -630 259 247 308 261 -631 629 628 448 373 -632 633 142 328 128 -633 629 497 628 373 -634 303 61 87 72 -635 236 254 234 331 -636 341 98 325 355 -637 373 570 400 569 -638 398 570 373 569 -639 49 413 527 46 -640 49 46 527 457 -641 49 626 48 527 -642 241 204 243 250 -643 49 527 48 457 -644 392 218 233 238 -645 233 392 238 223 -646 178 198 197 141 -647 198 197 141 369 -648 364 290 287 528 -649 419 381 564 413 -650 92 78 79 59 -651 192 373 314 353 -652 386 406 238 423 -653 367 369 137 391 -654 437 413 419 606 -655 413 437 47 606 -656 239 252 322 255 -657 454 61 339 155 -658 34 466 425 29 -659 221 386 232 240 -660 60 64 489 484 -661 484 65 60 64 -662 212 386 218 221 -663 241 240 386 212 -664 241 205 240 212 -665 607 24 16 470 -666 620 42 37 527 -667 37 333 42 620 -668 95 87 66 69 -669 113 164 382 361 -670 410 30 432 21 -671 371 1 522 458 -672 527 47 43 40 -673 596 425 17 15 -674 393 456 160 311 -675 110 95 87 66 -676 160 311 456 516 -677 512 511 365 166 -678 353 511 365 512 -679 128 144 318 138 -680 341 130 325 308 -681 87 61 57 58 -682 419 58 564 72 -683 414 289 327 364 -684 320 378 435 94 -685 364 528 287 289 -686 212 221 205 240 -687 134 172 149 354 -688 134 172 354 184 -689 319 147 191 307 -690 589 641 606 436 -691 347 79 59 476 -692 345 79 476 92 -693 92 138 144 328 -694 86 92 144 328 -695 32 399 34 38 -696 306 309 336 310 -697 347 604 468 476 -698 347 468 79 476 -699 614 345 79 468 -700 384 310 336 270 -701 439 25 26 422 -702 196 192 314 420 -703 348 420 196 314 -704 132 143 142 318 -705 164 142 143 318 -706 386 406 423 221 -707 35 527 38 40 -708 158 354 96 162 -709 169 302 354 162 -710 334 475 564 363 -711 155 61 303 75 -712 94 353 378 339 -713 224 233 219 212 -714 214 215 204 194 -715 204 243 230 241 -716 204 230 212 241 -717 391 474 369 136 -718 286 588 528 356 -719 35 620 527 47 -720 136 474 361 565 -721 566 526 632 64 -722 490 439 11 14 -723 209 330 420 348 -724 35 527 40 47 -725 76 342 73 98 -726 77 353 102 320 -727 268 308 261 260 -728 167 155 339 378 -729 465 289 385 344 -730 255 308 260 259 -731 335 24 470 33 -732 559 24 470 335 -733 522 1 371 428 -734 347 53 496 54 -735 559 24 607 470 -736 476 347 496 54 -737 312 204 243 307 -738 230 215 243 204 -739 241 218 212 386 -740 241 238 218 386 -741 29 33 28 23 -742 23 335 559 470 -743 297 382 361 341 -744 336 611 185 331 -745 388 185 336 611 -746 353 373 102 320 -747 373 102 314 353 -748 44 527 606 610 -749 74 110 84 353 -750 610 527 606 413 -751 325 341 375 98 -752 369 136 137 391 -753 169 354 342 313 -754 274 366 279 281 -755 281 366 279 276 -756 322 313 206 308 -757 414 289 344 385 -758 114 546 367 434 -759 367 391 434 369 -760 155 163 303 61 -761 47 620 527 44 -762 384 304 552 336 -763 384 310 306 336 -764 99 378 339 94 -765 506 94 378 99 -766 365 353 512 116 -767 378 99 418 506 -768 478 23 559 470 -769 328 86 633 128 -770 265 308 268 266 -771 268 308 263 266 -772 564 419 436 58 -773 460 75 564 65 -774 339 61 99 94 -775 518 564 65 460 -776 643 216 229 392 -777 342 88 76 67 -778 26 422 11 439 -779 26 440 439 571 -780 411 161 373 441 -781 442 467 412 10 -782 350 377 24 33 -783 225 409 217 223 -784 410 377 24 350 -785 24 350 33 335 -786 371 522 523 458 -787 278 324 273 276 -788 273 324 275 276 -789 170 354 172 184 -790 169 179 354 313 -791 607 16 24 580 -792 367 391 137 118 -793 35 620 37 527 -794 548 33 461 333 -795 414 385 344 294 -796 414 289 288 344 -797 65 64 484 454 -798 93 79 78 401 -799 375 382 358 90 -800 413 575 564 594 -801 187 181 368 189 -802 358 375 90 91 -803 275 276 324 323 -804 493 270 323 275 -805 532 323 276 275 -806 324 270 323 415 -807 275 323 324 270 -808 157 331 319 336 -809 454 339 61 338 -810 527 47 507 43 -811 74 87 110 353 -812 61 353 339 155 -813 444 445 618 379 -814 173 133 160 510 -815 352 604 468 347 -816 161 181 373 348 -817 23 335 470 33 -818 181 187 374 373 -819 29 35 28 33 -820 348 187 181 373 -821 562 10 412 447 -822 10 580 503 447 -823 399 351 34 38 -824 515 592 399 32 -825 434 112 637 474 -826 134 82 96 302 -827 224 230 233 212 -828 134 302 96 354 -829 302 354 162 96 -830 376 64 60 564 -831 606 640 589 45 -832 369 137 168 141 -833 113 361 583 136 -834 197 369 168 141 -835 12 7 4 14 -836 510 181 173 171 -837 61 339 353 94 -838 369 154 170 354 -839 404 607 24 21 -840 411 374 578 441 -841 500 186 189 480 -842 535 526 632 566 -843 628 441 497 483 -844 478 23 28 559 -845 28 335 559 23 -846 93 92 78 79 -847 554 473 631 453 -848 198 178 193 141 -849 187 444 209 500 -850 226 388 336 514 -851 287 464 285 528 -852 528 301 285 372 -853 497 629 426 373 -854 394 302 70 82 -855 64 61 454 75 -856 444 587 618 445 -857 467 458 371 523 -858 371 523 520 467 -859 371 520 551 467 -860 385 465 294 292 -861 468 604 345 476 -862 584 517 63 345 -863 176 136 137 369 -864 439 440 18 571 -865 490 26 11 439 -866 324 366 227 357 -867 606 413 419 436 -868 527 48 477 507 -869 527 477 48 457 -870 527 492 48 507 -871 527 626 48 492 -872 134 354 96 158 -873 62 64 489 60 -874 52 57 370 594 -875 326 52 55 564 -876 524 425 17 19 -877 373 441 161 540 -878 373 161 140 540 -879 66 326 55 58 -880 58 326 55 564 -881 310 309 336 270 -882 324 270 336 309 -883 157 336 185 331 -884 181 411 171 161 -885 640 589 641 606 -886 537 557 621 54 -887 282 285 340 288 -888 372 285 288 340 -889 382 100 98 341 -890 502 294 465 292 -891 43 34 351 38 -892 221 240 213 205 -893 438 240 205 213 -894 425 466 524 29 -895 354 302 146 108 -896 435 426 506 629 -897 497 506 426 629 -898 187 181 374 368 -899 517 79 614 345 -900 342 90 73 98 -901 180 141 178 152 -902 178 152 141 168 -903 193 180 141 178 -904 140 161 348 510 -905 9 442 13 362 -906 442 9 13 467 -907 408 505 503 580 -908 607 580 408 16 -909 327 289 414 385 -910 372 284 283 340 -911 359 89 526 566 -912 607 539 478 470 -913 140 373 125 348 -914 328 86 92 517 -915 527 47 44 606 -916 155 163 61 353 -917 367 391 118 434 -918 338 64 61 454 -919 64 338 484 454 -920 359 89 566 338 -921 489 526 566 64 -922 448 192 378 373 -923 350 39 377 33 -924 369 137 176 168 -925 377 350 553 39 -926 325 313 375 341 -927 340 288 625 282 -928 342 313 375 325 -929 524 466 19 20 -930 425 466 19 524 -931 348 395 186 202 -932 610 44 42 45 -933 409 433 217 223 -934 217 433 529 223 -935 582 375 471 115 -936 434 474 637 369 -937 382 375 471 582 -938 98 90 382 375 -939 382 100 90 98 -940 123 105 122 85 -941 122 85 105 80 -942 43 40 34 38 -943 369 474 361 136 -944 469 452 564 460 -945 46 41 527 457 -946 415 366 274 323 -947 191 387 316 438 -948 191 387 156 316 -949 434 391 474 369 -950 502 294 344 465 -951 502 294 292 293 -952 476 59 92 79 -953 306 309 319 336 -954 528 301 464 285 -955 301 282 464 285 -956 208 449 210 379 -957 210 379 220 208 -958 551 520 10 467 -959 359 89 339 106 -960 110 353 365 116 -961 353 511 110 365 -962 118 141 145 152 -963 34 28 466 29 -964 621 347 59 54 -965 59 621 79 347 -966 342 80 122 302 -967 369 123 154 342 -968 123 85 122 342 -969 122 342 85 80 -970 450 349 612 482 -971 564 55 436 413 -972 40 38 29 34 -973 606 641 413 436 -974 28 35 335 33 -975 34 25 32 29 -976 487 548 495 479 -977 187 209 196 348 -978 461 479 430 495 -979 311 513 509 186 -980 395 311 348 186 -981 187 196 209 444 -982 485 540 426 373 -983 21 580 24 447 -984 412 447 21 562 -985 412 562 21 446 -986 447 580 24 10 -987 46 527 610 413 -988 229 392 216 222 -989 323 281 366 274 -990 281 301 274 323 -991 599 625 429 282 -992 608 25 32 34 -993 372 288 284 340 -994 227 324 190 308 -995 373 196 348 187 -996 425 25 34 29 -997 628 448 373 591 -998 591 448 373 398 -999 477 43 41 527 -1000 80 71 81 302 -1001 457 477 41 527 -1002 647 487 430 479 -1003 628 373 497 441 -1004 578 628 441 374 -1005 410 24 335 350 -1006 393 311 160 150 -1007 367 118 137 141 -1008 343 488 356 396 -1009 87 72 61 58 -1010 488 588 356 396 -1011 476 54 59 347 -1012 94 353 61 77 -1013 110 353 87 107 -1014 251 245 322 201 -1015 245 179 322 201 -1016 11 422 486 14 -1017 287 588 464 528 -1018 10 467 412 551 -1019 13 551 412 467 -1020 371 467 551 13 -1021 551 10 8 412 -1022 113 164 361 136 -1023 425 25 15 26 -1024 140 348 125 160 -1025 451 588 528 286 -1026 180 152 145 141 -1027 607 16 539 470 -1028 374 570 400 373 -1029 373 374 556 400 -1030 374 373 556 628 -1031 441 628 578 483 -1032 497 642 418 629 -1033 167 89 106 339 -1034 346 440 390 521 -1035 369 123 342 375 -1036 583 382 498 361 -1037 564 75 72 61 -1038 564 61 64 75 -1039 345 517 79 92 -1040 533 529 223 222 -1041 498 582 576 375 -1042 575 376 609 49 -1043 412 10 8 447 -1044 561 472 549 468 -1045 239 322 252 231 -1046 397 12 4 14 -1047 367 369 434 576 -1048 206 313 322 179 -1049 322 179 313 354 -1050 12 2 4 7 -1051 346 638 26 608 -1052 66 87 57 58 -1053 72 58 564 61 -1054 322 207 231 239 -1055 201 354 322 207 -1056 239 255 322 201 -1057 533 402 529 222 -1058 60 518 564 65 -1059 11 486 12 14 -1060 118 168 141 152 -1061 60 376 564 518 -1062 576 375 582 115 -1063 515 34 399 351 -1064 334 564 64 363 -1065 311 331 150 305 -1066 473 538 597 519 -1067 564 594 575 475 -1068 36 30 432 410 -1069 343 396 356 279 -1070 281 279 356 396 -1071 281 274 301 356 -1072 486 7 14 422 -1073 642 153 585 629 -1074 153 642 628 629 -1075 503 447 8 10 -1076 461 430 620 416 -1077 493 270 275 280 -1078 275 493 532 323 -1079 532 493 282 323 -1080 461 495 430 416 -1081 493 532 280 275 -1082 389 381 47 413 -1083 49 413 626 527 -1084 500 189 186 181 -1085 498 382 582 375 -1086 410 30 24 377 -1087 30 410 36 377 -1088 366 265 279 272 -1089 608 34 32 31 -1090 527 40 43 38 -1091 46 527 41 38 -1092 43 527 38 41 -1093 597 639 7 486 -1094 306 298 336 331 -1095 11 26 15 543 -1096 554 11 15 543 -1097 416 430 620 649 -1098 291 290 364 327 -1099 637 498 375 361 -1100 39 548 33 461 -1101 422 634 25 543 -1102 583 582 382 113 -1103 367 114 118 141 -1104 473 422 11 554 -1105 178 197 168 141 -1106 375 369 123 115 -1107 91 123 115 375 -1108 377 350 36 553 -1109 173 181 516 186 -1110 110 95 107 87 -1111 353 107 163 87 -1112 46 527 42 610 -1113 500 209 348 202 -1114 334 61 564 57 -1115 510 103 140 161 -1116 160 104 140 133 -1117 486 11 473 422 -1118 336 611 331 514 -1119 576 434 637 369 -1120 29 466 524 20 -1121 366 279 265 258 -1122 366 279 258 274 -1123 89 484 338 454 -1124 462 621 568 534 -1125 133 104 140 103 -1126 462 534 568 531 -1127 521 440 390 563 -1128 383 440 563 390 -1129 141 154 170 369 -1130 141 193 369 170 -1131 173 181 510 516 -1132 348 510 181 516 -1133 324 366 276 272 -1134 415 324 366 323 -1135 477 527 507 43 -1136 26 25 440 346 -1137 430 333 42 479 -1138 460 452 564 75 -1139 31 515 32 592 -1140 181 189 187 500 -1141 389 527 413 47 -1142 413 389 626 527 -1143 376 590 49 575 -1144 331 611 185 508 -1145 223 392 407 219 -1146 223 233 392 219 -1147 538 648 597 519 -1148 597 648 538 486 -1149 557 537 568 499 -1150 553 39 461 416 -1151 290 528 451 287 -1152 554 453 332 560 -1153 601 467 458 9 -1154 623 525 535 566 -1155 566 525 535 526 -1156 378 106 431 418 -1157 53 496 352 347 -1158 564 300 419 72 -1159 564 452 300 72 -1160 2 6 7 486 -1161 421 451 528 286 -1162 451 528 588 287 -1163 409 595 433 491 -1164 79 621 78 401 -1165 401 621 78 555 -1166 78 537 555 621 -1167 599 340 282 301 -1168 493 599 282 301 -1169 430 620 42 333 -1170 565 498 112 637 -1171 583 498 112 565 -1172 599 429 536 282 -1173 599 625 459 429 -1174 543 554 332 15 -1175 474 112 637 565 -1176 364 290 528 327 -1177 548 461 479 333 -1178 461 333 430 479 -1179 383 390 346 440 -1180 65 60 64 564 -1181 65 64 75 564 -1182 383 638 346 390 -1183 380 468 614 549 -1184 532 282 276 323 -1185 157 331 504 150 -1186 89 454 338 339 -1187 167 454 89 339 -1188 8 5 10 551 -1189 5 520 10 551 -1190 492 626 545 389 -1191 389 626 545 469 -1192 37 33 35 29 -1193 615 568 499 557 -1194 500 186 480 202 -1195 54 56 53 496 -1196 294 295 291 385 -1197 295 291 385 327 -1198 295 294 292 385 -1199 474 637 361 565 -1200 497 373 426 540 -1201 40 29 28 34 -1202 535 525 581 526 -1203 328 92 79 517 -1204 496 56 352 604 -1205 459 536 646 493 -1206 459 429 624 536 -1207 493 536 280 532 -1208 25 346 26 608 -1209 351 399 41 38 -1210 43 41 38 351 -1211 527 413 47 606 -1212 308 252 322 231 -1213 308 255 322 252 -1214 256 231 252 308 -1215 256 308 259 247 -1216 21 30 24 410 -1217 21 30 562 24 -1218 315 621 555 568 -1219 217 219 223 407 -1220 225 223 219 233 -1221 407 217 529 223 -1222 381 452 300 564 -1223 595 635 433 491 -1224 414 385 291 327 -1225 416 39 461 495 -1226 461 39 548 495 -1227 461 548 479 495 -1228 301 282 281 464 -1229 301 282 285 340 -1230 315 621 568 462 -1231 372 289 288 285 -1232 289 288 285 414 -1233 431 153 106 378 -1234 55 641 589 436 -1235 651 572 638 608 -1236 564 452 72 75 -1237 573 534 567 613 -1238 567 645 600 534 -1239 499 568 577 537 -1240 414 327 291 364 -1241 561 549 614 468 -1242 338 489 566 64 -1243 89 484 489 338 -1244 385 294 465 344 -1245 445 196 444 209 -1246 209 550 444 427 -1247 490 14 11 12 -1248 490 18 14 12 -1249 597 648 486 7 -1250 486 639 7 422 -1251 639 473 597 631 -1252 529 491 616 533 -1253 435 320 125 373 -1254 616 491 529 541 -1255 497 628 642 629 -1256 46 52 413 602 -1257 623 359 566 338 -1258 497 506 629 418 -1259 99 359 623 338 -1260 65 64 454 75 -1261 209 617 550 427 -1262 86 328 144 128 -1263 570 187 374 368 -1264 403 86 633 328 -1265 601 522 458 523 -1266 604 352 472 56 -1267 273 312 319 324 -1268 380 614 63 549 -1269 561 549 63 614 -1270 623 525 566 359 -1271 359 525 566 526 -1272 566 89 526 489 -1273 113 382 358 471 -1274 582 471 382 113 -1275 523 467 458 601 -1276 268 308 260 263 -1277 374 628 556 578 -1278 498 582 382 583 -1279 586 645 534 557 -1280 361 176 369 136 -1281 277 356 274 279 -1282 576 637 375 369 -1283 637 375 369 361 -1284 373 556 569 400 -1285 556 373 569 628 -1286 447 562 24 21 -1287 47 492 527 507 -1288 495 39 548 487 -1289 572 608 651 650 -1290 541 619 542 574 -1291 27 562 21 30 -1292 21 446 562 27 -1293 517 328 614 79 -1294 545 530 622 575 -1295 522 371 523 558 -1296 523 371 520 558 -1297 471 91 115 375 -1298 578 127 628 556 -1299 127 153 628 556 -1300 641 413 55 52 -1301 55 564 436 58 -1302 564 334 57 594 -1303 55 641 436 413 -1304 575 413 49 594 -1305 15 17 596 560 -1306 521 440 563 571 -1307 632 581 62 526 -1308 285 372 301 340 -1309 290 451 528 421 -1310 326 57 564 58 -1311 205 212 241 204 -1312 564 452 469 381 -1313 239 322 207 201 -1314 223 392 529 407 -1315 381 564 413 469 -1316 395 513 311 186 -1317 389 469 413 626 -1318 136 361 583 565 -1319 586 645 567 534 -1320 32 25 608 346 -1321 369 367 137 141 -1322 469 575 545 622 -1323 593 543 634 422 -1324 373 569 628 591 -1325 556 569 153 628 -1326 196 187 373 570 -1327 167 454 339 155 -1328 590 626 575 530 -1329 536 493 282 532 -1330 133 140 160 510 -1331 376 363 64 564 -1332 209 427 444 587 -1333 571 440 563 383 -1334 498 375 576 637 -1335 531 534 568 579 -1336 534 568 557 621 -1337 218 392 643 238 -1338 568 555 577 537 -1339 475 609 363 49 -1340 363 609 475 564 -1341 393 311 150 305 -1342 19 425 17 596 -1343 596 17 603 560 -1344 522 428 371 558 -1345 127 628 497 483 -1346 492 48 545 626 -1347 21 607 24 580 -1348 132 117 318 128 -1349 633 132 547 142 -1350 437 381 419 413 -1351 419 381 437 300 -1352 173 181 186 171 -1353 405 613 600 534 -1354 632 526 62 64 -1355 489 484 64 338 -1356 600 54 53 621 -1357 29 20 28 466 -1358 20 28 466 443 -1359 49 48 626 590 -1360 63 345 614 380 -1361 584 345 63 380 -1362 470 607 559 478 -1363 28 23 22 20 -1364 478 23 22 28 -1365 473 422 554 631 -1366 555 537 568 621 -1367 18 490 14 439 -1368 596 17 19 603 -1369 571 440 18 521 -1370 542 491 616 541 -1371 534 568 615 557 -1372 534 568 579 615 -1373 392 222 229 238 -1374 626 48 530 590 -1375 238 406 229 423 -1376 629 585 642 418 -1377 418 506 629 378 -1378 378 431 629 418 -1379 153 448 628 591 -1380 591 569 628 153 -1381 550 209 500 627 -1382 515 31 32 34 -1383 209 627 550 617 -1384 569 556 153 400 -1385 645 621 557 54 -1386 529 491 533 223 -1387 601 1 458 522 -1388 522 601 1 3 -1389 359 339 99 106 -1390 338 99 359 339 -1391 49 575 626 413 -1392 473 597 631 453 -1393 605 564 518 460 -1394 222 392 402 529 -1395 113 382 583 361 -1396 33 335 28 23 -1397 370 52 594 46 -1398 408 505 580 607 -1399 413 640 602 641 -1400 630 376 564 609 -1401 49 376 609 363 -1402 363 376 609 564 -1403 393 456 311 305 -1404 218 221 386 643 -1405 643 386 423 221 -1406 141 123 369 367 -1407 498 382 375 361 -1408 474 637 369 361 -1409 558 371 520 551 -1410 558 428 371 551 -1411 374 441 411 373 -1412 422 25 26 543 -1413 25 17 15 634 -1414 606 44 610 45 -1415 367 115 369 576 -1416 367 576 546 115 -1417 636 573 567 613 -1418 615 51 579 573 -1419 50 51 615 636 -1420 55 413 564 52 -1421 594 52 413 46 -1422 564 326 52 57 -1423 367 434 546 576 -1424 208 449 379 445 -1425 379 445 544 208 -1426 26 439 440 25 -1427 622 575 605 469 -1428 636 586 567 573 -1429 573 586 567 534 -1430 599 625 340 283 -1431 605 630 518 564 -1432 171 510 181 161 -1433 32 29 38 34 -1434 402 216 392 222 -1435 223 222 392 238 -1436 389 492 527 47 -1437 389 492 626 527 -1438 577 555 78 537 -1439 315 621 401 555 -1440 15 598 634 560 -1441 634 17 15 560 -1442 481 142 328 633 -1443 128 328 144 138 -1444 413 610 640 606 -1445 640 606 610 45 -1446 379 449 444 445 -1447 187 449 196 444 -1448 445 449 444 196 -1449 605 564 460 469 -1450 575 564 605 469 -1451 541 200 619 574 -1452 564 436 419 413 -1453 517 482 63 614 -1454 154 369 141 123 -1455 583 498 565 361 -1456 498 361 637 565 -1457 622 530 630 575 -1458 21 30 432 27 -1459 173 510 160 516 -1460 311 160 348 516 -1461 485 140 540 373 -1462 21 505 580 447 -1463 490 26 439 571 -1464 379 544 220 208 -1465 348 516 181 186 -1466 186 509 311 516 -1467 209 202 627 617 -1468 433 635 529 491 -1469 430 42 620 44 -1470 649 430 620 44 -1471 529 635 541 491 -1472 404 24 410 21 -1473 404 410 24 335 -1474 89 338 359 339 -1475 450 328 482 517 -1476 517 328 482 614 -1477 78 59 537 621 -1478 588 396 281 356 -1479 286 488 588 356 -1480 424 543 593 422 -1481 463 607 408 16 -1482 389 381 413 469 -1483 413 469 575 626 -1484 626 469 575 545 -1485 554 11 543 422 -1486 459 624 646 536 -1487 332 543 593 424 -1488 631 554 424 422 -1489 153 431 629 378 -1490 545 48 530 626 -1491 626 530 545 575 -1492 59 621 78 79 -1493 160 510 348 516 -1494 626 590 575 49 -1495 576 434 112 637 -1496 498 576 112 637 -1497 346 651 638 608 -1498 13 442 412 362 -1499 13 467 412 442 -1500 132 142 633 128 -1501 184 180 172 170 -1502 631 332 424 554 -1503 531 573 579 51 -1504 521 571 563 18 -1505 599 625 282 340 -1506 622 630 605 575 -1507 562 442 362 412 -1508 193 180 170 141 -1509 50 644 636 615 -1510 443 466 20 19 -1511 616 542 533 491 -1512 413 594 564 52 -1513 621 53 600 405 -1514 362 562 446 27 -1515 403 547 321 481 -1516 403 481 321 329 -1517 562 442 412 10 -1518 493 459 536 599 -1519 493 599 536 282 -1520 450 86 328 517 -1521 413 602 610 46 -1522 29 23 28 20 -1523 223 409 433 491 -1524 621 59 537 54 -1525 13 362 412 446 -1526 439 422 11 14 -1527 639 473 631 422 -1528 450 612 584 517 -1529 450 482 612 517 -1530 413 641 602 52 -1531 447 10 24 562 -1532 531 573 534 579 -1533 380 345 468 604 -1534 587 427 444 618 -1535 613 567 600 534 -1536 218 386 238 643 -1537 643 238 423 386 -1538 347 496 352 604 -1539 63 345 517 614 -1540 584 612 63 517 -1541 629 431 585 418 -1542 153 431 585 629 -1543 463 539 478 607 -1544 463 539 607 16 -1545 564 609 475 575 -1546 533 529 402 616 -1547 376 630 564 518 -1548 645 54 600 621 -1549 380 468 472 604 -1550 604 468 472 352 -1551 380 468 549 472 -1552 570 187 373 374 -1553 606 413 641 640 -1554 413 610 602 640 -1555 458 467 13 9 -1556 467 458 13 371 -1557 11 422 26 543 -1558 25 17 425 15 -1559 646 536 280 493 -1560 646 624 280 536 -1561 647 430 44 42 -1562 618 544 220 379 -1563 648 6 486 7 -1564 648 6 538 486 -1565 403 633 547 481 -1566 403 328 633 481 -1567 483 127 628 578 -1568 486 7 12 14 -1569 53 56 352 496 -1570 340 288 284 625 -1571 283 340 284 625 -1572 561 352 472 468 -1573 86 450 328 403 -1574 329 403 481 328 -1575 455 288 284 372 -1576 501 288 284 455 -1577 376 530 575 630 -1578 630 376 609 575 -1579 430 479 42 647 -1580 621 405 600 534 -1581 22 28 20 443 -1582 643 238 229 423 -1583 481 633 547 142 -1584 558 428 551 652 -1585 509 611 331 508 -1586 513 514 331 611 -1587 509 513 331 611 -1588 601 9 1 3 -1589 289 288 344 501 -1590 515 32 399 34 -1591 403 321 349 329 -1592 392 229 643 238 -1593 618 445 544 379 -1594 618 587 544 445 -1595 531 613 534 573 -1596 629 153 448 628 -1597 538 473 597 486 -1598 597 473 639 486 -1599 650 31 608 346 -1600 607 505 580 21 -1601 288 455 289 372 -1602 289 455 288 501 -1603 376 530 590 575 -1604 49 594 475 575 -1605 356 279 281 274 -1606 550 209 444 500 -1607 362 412 446 562 -1608 529 433 491 223 -1609 455 372 284 283 -1610 465 501 455 289 -1611 465 289 344 501 -1612 445 209 444 587 -1613 153 642 127 628 -1614 294 385 291 414 -1615 283 625 459 599 -1616 613 531 51 573 -1617 636 573 613 51 -1618 557 621 568 537 -1619 558 551 520 5 -1620 500 209 202 627 -1621 635 200 541 574 -1622 595 200 635 574 -1623 558 652 551 5 -1624 534 579 573 615 -1625 605 575 630 564 -1626 31 346 32 608 -1627 631 424 639 422 -1628 383 346 638 26 -1629 469 575 564 413 -1630 15 560 332 598 -1631 15 554 332 560 -1632 586 557 534 615 -1633 573 586 534 615 -1634 332 543 598 593 -1635 543 332 598 15 -1636 609 575 564 630 -1637 554 631 332 453 -1638 424 554 543 422 -1639 608 346 651 650 -1640 487 495 430 479 -1641 645 621 534 557 -1642 645 621 600 534 -1643 542 491 541 574 -1644 541 635 574 491 -1645 636 644 586 573 -1646 573 586 615 644 -1647 543 634 598 593 -1648 497 127 642 628 -1649 598 543 15 634 -1650 25 15 543 634 -1651 473 519 597 453 -1652 595 574 635 491 -1653 636 51 615 573 -1654 644 573 636 615 -$EndElements diff --git a/test/user/testdata/shark_41_binary_gmshApp.msh b/test/user/testdata/shark_41_binary_gmshApp.msh deleted file mode 100644 index 7347169add4a468fa6c09cac527614c874a66c86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87334 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 UAJXGjAzu# Date: Thu, 30 May 2024 05:37:03 -0700 Subject: [PATCH 53/62] Add documentation on pipeline stages and mjData self-consistency. Fixes #1667 PiperOrigin-RevId: 638619787 Change-Id: Ic8dd0fbd178c4946757a07d74fca3b2c905f9080 --- doc/APIreference/functions.rst | 16 ++--- doc/APIreference/functions_override.rst | 16 ++--- doc/computation/index.rst | 88 ++++++++++++++++++------- doc/programming/simulation.rst | 18 ++--- 4 files changed, 91 insertions(+), 47 deletions(-) diff --git a/doc/APIreference/functions.rst b/doc/APIreference/functions.rst index f171b635..7bc60256 100644 --- a/doc/APIreference/functions.rst +++ b/doc/APIreference/functions.rst @@ -57,18 +57,18 @@ Main simulation These are the main entry points to the simulator. Most users will only need to call :ref:`mj_step`, which computes everything and advanced the simulation state by one time step. Controls and applied forces must either be set in advance -(in mjData.{ctrl, qfrc_applied, xfrc_applied}), or a control callback :ref:`mjcb_control` must be installed which will -be called just before the controls and applied forces are needed. Alternatively, one can use :ref:`mj_step1` and +(in ``mjData.{ctrl, qfrc_applied, xfrc_applied}``), or a control callback :ref:`mjcb_control` must be installed which +will be called just before the controls and applied forces are needed. Alternatively, one can use :ref:`mj_step1` and :ref:`mj_step2` which break down the simulation pipeline into computations that are executed before and after the controls are needed; in this way one can set controls that depend on the results from :ref:`mj_step1`. Keep in mind -though that the RK4 solver does not work with mj_step1/2. +though that the RK4 solver does not work with mj_step1/2. See :ref:`Pipeline` for a more detailed description. mj_forward performs the same computations as :ref:`mj_step` but without the integration. It is useful after loading or resetting a model (to put the entire mjData in a valid state), and also for out-of-order computations that involve sampling or finite-difference approximations. -mj_inverse runs the inverse dynamics, and writes its output in ``mjData.qfrc_inverse``. Note that ``mjData.qacc`` must -be set before calling this function. Given the state (qpos, qvel, act), mj_forward maps from force to acceleration, +:ref:`mj_inverse` runs the inverse dynamics, and writes its output in ``mjData.qfrc_inverse``. Note that ``mjData.qacc`` +must be set before calling this function. Given the state (qpos, qvel, act), mj_forward maps from force to acceleration, while mj_inverse maps from acceleration to force. Mathematically these functions are inverse of each other, but numerically this may not always be the case because the forward dynamics rely on a constraint optimization algorithm which is usually terminated early. The difference between the results of forward and inverse dynamics can be computed @@ -77,7 +77,7 @@ general sanity check). The skip version of :ref:`mj_forward` and :ref:`mj_inverse` are useful for example when qpos was unchanged but qvel was changed (usually in the context of finite differencing). Then there is no point repeating the computations that only -depend on qpos. Calling the dynamics with skipstage = mjSTAGE_POS will achieve these savings. +depend on qpos. Calling the dynamics with skipstage = :ref:`mjSTAGE_POS` will achieve these savings. .. _mj_step: @@ -249,8 +249,8 @@ degrees-of-freedom and a given point. Given a body specified by its integer id ( frame (``point``) treated as attached to the body, the Jacobian has both translational (``jacp``) and rotational (``jacr``) components. Passing ``NULL`` for either pointer will skip that part of the computation. Each component is a 3-by-nv matrix. Each row of this matrix is the gradient of the corresponding coordinate of the specified point with -respect to the degrees-of-freedom. The ability to compute end-effector Jacobians efficiently and analytically is one of -the advantages of working in minimal coordinates. +respect to the degrees-of-freedom. The :ref:`pipeline stages` required for Jacobian computations to be +consistenst with the current generalized positions ``mjData.qpos`` are :ref:`mj_kinematics` and :ref:`mj_comPos`. .. _mj_jacBody: diff --git a/doc/APIreference/functions_override.rst b/doc/APIreference/functions_override.rst index 0724fd4f..9f39042d 100644 --- a/doc/APIreference/functions_override.rst +++ b/doc/APIreference/functions_override.rst @@ -33,18 +33,18 @@ The model and all files referenced in it can be loaded from disk or from a VFS w These are the main entry points to the simulator. Most users will only need to call :ref:`mj_step`, which computes everything and advanced the simulation state by one time step. Controls and applied forces must either be set in advance -(in mjData.{ctrl, qfrc_applied, xfrc_applied}), or a control callback :ref:`mjcb_control` must be installed which will -be called just before the controls and applied forces are needed. Alternatively, one can use :ref:`mj_step1` and +(in ``mjData.{ctrl, qfrc_applied, xfrc_applied}``), or a control callback :ref:`mjcb_control` must be installed which +will be called just before the controls and applied forces are needed. Alternatively, one can use :ref:`mj_step1` and :ref:`mj_step2` which break down the simulation pipeline into computations that are executed before and after the controls are needed; in this way one can set controls that depend on the results from :ref:`mj_step1`. Keep in mind -though that the RK4 solver does not work with mj_step1/2. +though that the RK4 solver does not work with mj_step1/2. See :ref:`Pipeline` for a more detailed description. mj_forward performs the same computations as :ref:`mj_step` but without the integration. It is useful after loading or resetting a model (to put the entire mjData in a valid state), and also for out-of-order computations that involve sampling or finite-difference approximations. -mj_inverse runs the inverse dynamics, and writes its output in ``mjData.qfrc_inverse``. Note that ``mjData.qacc`` must -be set before calling this function. Given the state (qpos, qvel, act), mj_forward maps from force to acceleration, +:ref:`mj_inverse` runs the inverse dynamics, and writes its output in ``mjData.qfrc_inverse``. Note that ``mjData.qacc`` +must be set before calling this function. Given the state (qpos, qvel, act), mj_forward maps from force to acceleration, while mj_inverse maps from acceleration to force. Mathematically these functions are inverse of each other, but numerically this may not always be the case because the forward dynamics rely on a constraint optimization algorithm which is usually terminated early. The difference between the results of forward and inverse dynamics can be computed @@ -53,7 +53,7 @@ general sanity check). The skip version of :ref:`mj_forward` and :ref:`mj_inverse` are useful for example when qpos was unchanged but qvel was changed (usually in the context of finite differencing). Then there is no point repeating the computations that only -depend on qpos. Calling the dynamics with skipstage = mjSTAGE_POS will achieve these savings. +depend on qpos. Calling the dynamics with skipstage = :ref:`mjSTAGE_POS` will achieve these savings. .. _Initialization: @@ -165,8 +165,8 @@ degrees-of-freedom and a given point. Given a body specified by its integer id ( frame (``point``) treated as attached to the body, the Jacobian has both translational (``jacp``) and rotational (``jacr``) components. Passing ``NULL`` for either pointer will skip that part of the computation. Each component is a 3-by-nv matrix. Each row of this matrix is the gradient of the corresponding coordinate of the specified point with -respect to the degrees-of-freedom. The ability to compute end-effector Jacobians efficiently and analytically is one of -the advantages of working in minimal coordinates. +respect to the degrees-of-freedom. The :ref:`pipeline stages` required for Jacobian computations to be +consistenst with the current generalized positions ``mjData.qpos`` are :ref:`mj_kinematics` and :ref:`mj_comPos`. .. _mj_jacBody: diff --git a/doc/computation/index.rst b/doc/computation/index.rst index 9512537d..eb1bf285 100644 --- a/doc/computation/index.rst +++ b/doc/computation/index.rst @@ -1575,11 +1575,23 @@ Top level pipeline does not support the Runge Kutta integrator. - :ref:`mj_fwdPosition` invokes stages **2-11**, the position-dependent part of the pipeline. +.. _piStages: + Stages ^^^^^^ +Below we describe the pipeline stages and API functions corresponding to each stage. All functions write their outputs +into attributes of :ref:`mjData`. It is informative to compare the list below with the :ref:`mjData` struct definition, +wherein comments above blocks of attributes specify the function that computes them. Note that each stage depends on +the values computed in some or all of the previous stages. + 1. Check the positions and velocities for invalid or unacceptably large real values indicating divergence. If divergence is detected, the state is automatically reset and the corresponding warning is raised: :ref:`mj_checkPos`, :ref:`mj_checkVel` + +Position +'''''''' +The stages below compute quantities that depend on the generalized positions ``mjData.qpos``. + 2. Compute the forward kinematics. This yields the global positions and orientations of all bodies, geoms, sites, cameras and lights. It also normalizes all quaternions: :ref:`mj_kinematics`, :ref:`mj_camLight` 3. Compute the body inertias and joint axes, in global frames centered at the centers of mass of the corresponding @@ -1596,6 +1608,12 @@ Stages 11. Compute the matrices and vectors needed by the constraint solvers: :ref:`mj_projectConstraint` 12. Compute sensor data that only depends on position, and the potential energy if enabled: :ref:`mj_sensorPos`, :ref:`mj_energyPos` + +Velocity +'''''''' +The stages below compute quantities that depend on the generalized velocity ``mjData.qvel``. Due to the sequential +dependence structure of the pipeline, the actual dependence is on both ``qpos`` and ``qvel``. + 13. Compute the tendon, flex edge and actuator velocities: :ref:`mj_fwdVelocity` 14. Compute the body velocities and rates of change of the joint axes, again in the global coordinate frames centered at the subtree centers of mass: :ref:`mj_comVel` @@ -1604,6 +1622,12 @@ Stages (if required by sensors, call :ref:`mj_subtreeVel`): :ref:`mj_sensorVel` 17. Compute the reference constraint acceleration: :ref:`mj_referenceConstraint` 18. Compute the vector of Coriolis, centrifugal and gravitational forces: :ref:`mj_rne` + +Force/acceleration +'''''''''''''''''' +The stages below compute quantities that depend on :ref:`user inputs`. Due to the sequential nature +of the pipeline, the actual dependence is on the entire :ref:`integration state`. + 19. Compute the actuator forces and activation dynamics if defined: :ref:`mj_fwdActuation` 20. Compute the joint acceleration resulting from all forces except for the (still unknown) constraint forces: :ref:`mj_fwdAcceleration` @@ -1620,12 +1644,53 @@ Stages repeats the above sequence three more times, except for the optional computations which are performed only once: one of :ref:`mj_Euler`, :ref:`mj_RungeKutta`, :ref:`mj_implicit` +.. _piConsistency: + +Consistency in ``mjData`` +~~~~~~~~~~~~~~~~~~~~~~~~~ +The MuJoCo computation pipeline is entirely imperative, nothing happens automatically. This leads to behavior which +can seem unexpected to users more familiar with other paradigms. Here are two examples of intended behaviors which can +sometimes be surprising: + +- After setting :ref:`the state`, state-derived quantities do not automatically correspond to the new state. + The required stage or stages must be manually invoked. For example after setting the generalized positions + ``mjData.qpos``, Cartesian positions and orientations will not be consistent with ``qpos`` without first calling + :ref:`mj_kinematics`. +- After an :ref:`mj_step`, which terminates immediately after updating the state, quantities in ``mjData`` correspond + to the *previous* state (or more precisely, the *transition* between the previous and current state). + In particular, all position-dependent sensor values and position-dependent computations like kinematic + :ref:`Jacobians`, will be with respect to the *previous positions*. + + + +.. _piReproducibility: + +Reproducibility +~~~~~~~~~~~~~~~ + +MuJoCo's simulation pipeline is entirely deterministic and reproducible -- if a :ref:`state` in a trajectory is +saved and reloaded and :ref:`mj_step` called again, the resulting next state will be identical. However, there are some +important caveats: + +- Save all the required :ref:`integration state` components. In particular :ref:`warmstart + accelerations` have only a very small effect on the next state, but should be saved if bit-wise equality + is required. +- Any numerical difference between states, no matter how small, will become significant upon integration, especially for + systems with contact. Contact events have high `Lyapunov exponents + `__; this is a property of any rigid-body simulator (and indeed of + `real-world physics `__) and is not MuJoCo-specific. +- Exact reproducibility is only guaranteed within a **single version**, on the **same architecture**. Small numerical + differences are quite common between versioned releases, for example due to code optimizations. This means that when + saving an initial state and an open-loop control sequence, the resulting rolled-out trajectory will be identical + within the same version, but will likely be different between MuJoCo versions or different operating systems. + .. _piInverse: Inverse dynamics ~~~~~~~~~~~~~~~~ -The top-level function :ref:`mj_inverse` invokes the following sequence of computations. +The top-level function :ref:`mj_inverse` invokes the following sequence of computations. The notes above regarding +:ref:`consistency` and :ref:`reproducibility` apply here as well. #. Compute the forward kinematics. #. Compute the body inertias and joint axes. @@ -1652,27 +1717,6 @@ The top-level function :ref:`mj_inverse` invokes the following sequence of compu equals the sum of external and actuation forces. -.. _piReproducibility: - -Reproducibility -~~~~~~~~~~~~~~~ - -MuJoCo's simulation pipeline is entirely deterministic and reproducible -- if a :ref:`state` in a trajectory is -saved and reloaded and :ref:`mj_step` called again, the resulting next state will be identical. However, there are some -important caveats: - -- Save all the required :ref:`integration state` components. In particular :ref:`warmstart - accelerations` have only a very small effect on the next state, but should be saved if bit-wise equality - is required. -- Any numerical difference between states, no matter how small, will become significant upon integration, especially for - systems with contact. Contact events have high `Lyapunov exponents - `__; this is a property of any rigid-body simulator (and indeed of - `real-world physics `__) and is not MuJoCo-specific. -- Exact reproducibility is only guaranteed within a **single version**, on the **same architecture**. Small numerical - differences are quite common between versioned releases, for example due to code optimizations. This means that when - saving an initial state and an open-loop control sequence, the resulting rolled-out trajectory will be identical - within the same version, but will likely be different between MuJoCo versions or different operating systems. - .. _derivatives: Derivatives diff --git a/doc/programming/simulation.rst b/doc/programming/simulation.rst index cc5aa5e5..5b3d50f8 100644 --- a/doc/programming/simulation.rst +++ b/doc/programming/simulation.rst @@ -150,10 +150,10 @@ continuous time, and then integrate over a time period specified by ``mjModel.op the acceleration ``mjData.qacc`` at time ``mjData.time``, given the :ref:`state and control ` at time ``mjData.time``. The numerical integrator then advances the state and time to ``mjData.time + mjModel.opt.timestep``. Now, the control is required to be a function of the state at time ``mjData.time``. However a general feedback -controller can be a very complex function, depending on various features of the state - in particular all the features +controller can be a very complex function, depending on various features of the state -- in particular all the features computed by MuJoCo as intermediate results of the simulation. These may include contacts, Jacobians, passive forces. -None of these quantities are available before ``mj_step`` is called (or rather, they are available but outdated by one -time step). In contrast, when ``mj_step`` calls our control callback, it does so as late in the computation as possible +None of these quantities are available before ``mj_step`` is called (or rather, they are available but *outdated by one +time step*). In contrast, when ``mj_step`` calls our control callback, it does so as late in the computation as possible - namely after all the intermediate results dependent on the state but not on the control have been computed. The same effect can be achieved without using a control callback. This is done by breaking ``mj_step`` in two parts: @@ -253,7 +253,7 @@ notion of state of a dynamical system. Dynamical systems are usually described i where ``t`` is the time, ``x`` is the state vector, ``u`` is the control vector, and ``f`` is the function that computes the time-derivative of the state. This is a continuous-time formulation, and indeed the physics model simulated by MuJoCo is defined in continuous time. Even though the numerical integrator operates in discrete time, the -main part of the computation - namely the function :ref:`mj_forward` - corresponds to the +main part of the computation---namely the function :ref:`mj_forward`---corresponds to the continuous-time dynamics function ``f(t,x,u)`` above. Here we explain this correspondence. The state vector in MuJoCo is: @@ -426,7 +426,7 @@ the first and second sections (position and velocity dependent) have already bee When can we use the above machinery and skip some of the computations? In a regular simulation this is not possible. However, MuJoCo is designed not only for simulation but also for more advanced applications such as model-based optimization, machine learning etc. In such settings one often needs to sample the dynamics at a cloud of nearby -states, or approximate derivatives via finite differences - which is another form of sampling. If the samples are +states, or approximate derivatives via finite differences -- which is another form of sampling. If the samples are arranged on a grid, where only the position or only the velocity or only the control is different from the center point, then the above mechanism can improve performance by about a factor of 2. @@ -591,7 +591,7 @@ The only way to guarantee that all changes are saved is to save the model as a b changes need to be made programmatically, as in system identification for example, and this can only be done with the compiled model. So in summary, we have reasonable but not perfect mechanisms for saving model changes. The reason for this lack of perfection is that we are working with a compiled model, so this is like changing a binary executable and -asking a "decompiler" to make corresponding changes to the C code - it is just not possible in general. +asking a "decompiler" to make corresponding changes to the C code -- it is just not possible in general. .. _siLayout: @@ -642,7 +642,7 @@ spread out the data so that we do not have to perform many memory moves when ins layout "uncompressed". It is still a valid layout, but instead of A_rowadr[r] = A_rowadr[r-1] + A_rownnz[r] which is the standard convention, we set A_rowadr[r] = r*n. MuJoCo uses sparse matrices internally -To represent 3D orientations and rotations, MuJoCo uses unit quaternions - namely 4D unit vectors arranged as q = (w, +To represent 3D orientations and rotations, MuJoCo uses unit quaternions -- namely 4D unit vectors arranged as q = (w, x, y, z). Here (x, y, z) is the rotation axis unit vector scaled by sin(a/2), where a is the rotation angle in radians, and w = cos(a/2). Thus the quaternion corresponding to a null rotation is (1, 0, 0, 0). This is the default setting of all quaternions in MJCF. @@ -841,7 +841,7 @@ Jacobians The derivative of any vector function with respect to its vector argument is called Jacobian. When this term is used in multi-joint kinematics and dynamics, it refers to the derivative of some spatial quantity as a function of the system configuration. In that case the Jacobian is also a linear map that operates on vectors in the (co)tangent space -to the configuration manifold - such as velocities, momenta, accelerations, forces. One caveat here is that the system +to the configuration manifold -- such as velocities, momenta, accelerations, forces. One caveat here is that the system configuration encoded in ``mjData.qpos`` has dimensionality ``mjModel.nq``, while the tangent space has dimensionality ``mjModel.nv``, and the latter is smaller when quaternion joints are present. So the size of the Jacobian matrix is N-by-``mjModel.nv`` where N is the dimensionality of the spatial quantity being differentiated. @@ -861,7 +861,7 @@ Jacobians, which tell us how a spatial frame anchored at the given point will tr change to the kinematic configuration. More precisely, the Jacobian maps joint velocities to end-effector velocities, while the transpose of the Jacobian maps end-effector forces to joint forces. There are also several other ``mj_jacXXX`` functions; these are convenience functions that call the main ``mj_jac`` function with different points -of interest - such as a body center of mass, geom center etc. +of interest -- such as a body center of mass, geom center etc. The ability to compute end-effector Jacobians exactly and efficiently is a key advantage of working in joint coordinates. Such Jacobians are the foundation of many control schemes that map end-effector errors to actuator From f616975e28d6bcae3c5364da5c3ea7ae4f80809c Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Fri, 31 May 2024 01:17:08 -0700 Subject: [PATCH 54/62] Forward fix for MJCF parsing: A recent libc++ update does not natively accept ".x" float format ('.' being the first character) but rather requires "0.x". PiperOrigin-RevId: 638946382 Change-Id: I3ccb1b5fedc6749a3459916b41148629933fb8c4 --- src/xml/xml_util.cc | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/xml/xml_util.cc b/src/xml/xml_util.cc index eec0dd39..651e3586 100644 --- a/src/xml/xml_util.cc +++ b/src/xml/xml_util.cc @@ -481,6 +481,16 @@ bool mjXUtil::ReadAttrValues(XMLElement* elem, const char* attr, // read numbers for (int i = 0; (max < 0 || i < max) && !strm.eof(); ++i) { strm >> token; + + // some C++ libraries do not allow .x instead of 0.x + if (!token.empty()) { + if (token[0] == std::string(".")[0]) { + token = "0" + token; + } else if (token[0] == std::string("-")[0] && token[1] == std::string(".")[0]) { + token.insert(1, "0"); + } + } + std::istringstream token_strm(token); token_strm >> item; if (token_strm.fail() || !token_strm.eof()) { From b38998eff26098f9d940cda44719da81bc4d42d3 Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Fri, 31 May 2024 09:23:59 -0700 Subject: [PATCH 55/62] Replace mjs_deleteBody with mjs_delete. PiperOrigin-RevId: 639058333 Change-Id: I9ac9ca8c6b8c0219f0130cd65dc83602f1829684 --- src/user/user_api.cc | 10 +++++----- src/user/user_api.h | 4 ++-- src/user/user_objects.h | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/user/user_api.cc b/src/user/user_api.cc index d818f778..0bf072f1 100644 --- a/src/user/user_api.cc +++ b/src/user/user_api.cc @@ -118,7 +118,7 @@ int mjs_detachBody(mjSpec* s, mjsBody* b) { mjCModel* model = static_cast(s->element); mjCBody* body = static_cast(b->element); *model -= *body; - mjs_deleteBody(b); + mjs_delete(b->element); return 0; } @@ -140,10 +140,10 @@ void mjs_deleteSpec(mjSpec* s) { -// delete body -void mjs_deleteBody(mjsBody* b) { - mjCBody* body = static_cast(b->element); - delete body; +// delete object, it will call the appropriate destructor since ~mjCBase is virtual +void mjs_delete(mjElement* element) { + mjCBase* object = static_cast(element); + delete object; } diff --git a/src/user/user_api.h b/src/user/user_api.h index e69c7602..400325c4 100644 --- a/src/user/user_api.h +++ b/src/user/user_api.h @@ -810,8 +810,8 @@ MJAPI mjsLight* mjs_addLight(mjsBody* body, mjsDefault* def); // Add frame to body. MJAPI mjsFrame* mjs_addFrame(mjsBody* body, mjsFrame* parentframe); -// Delete body. TODO: make this a general mjs_deleteElement function -MJAPI void mjs_deleteBody(mjsBody* b); +// Delete object corresponding to the given element. +MJAPI void mjs_delete(mjElement* element); //---------------------------------- Add non-tree elements ----------------------------------------- diff --git a/src/user/user_objects.h b/src/user/user_objects.h index b173d1e0..0ed56b4e 100644 --- a/src/user/user_objects.h +++ b/src/user/user_objects.h @@ -208,10 +208,11 @@ class mjCBase : public mjCBase_ { mjCFrame* frame; // pointer to frame transformation mjCModel* model; // pointer to model that created object + virtual ~mjCBase() = default; // destructor + protected: mjCBase(); // constructor mjCBase(const mjCBase& other); // copy constructor - virtual ~mjCBase() = default; // destructor }; From 5c71c7de5d6df866192f5d3b47464104628a42ec Mon Sep 17 00:00:00 2001 From: Kevin Zakka Date: Fri, 31 May 2024 10:57:05 -0700 Subject: [PATCH 56/62] Add Boston Dynamics Spot. PiperOrigin-RevId: 639086847 Change-Id: I8ef6d87d93dc730135a46ce361efbee1bf68c6c8 --- doc/models.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/models.rst b/doc/models.rst index 39057ab9..5e772a30 100644 --- a/doc/models.rst +++ b/doc/models.rst @@ -76,6 +76,8 @@ Quadrupeds - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/google_barkour_v0/barkour_v0.png * - `Google Barkour vB `_ - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/google_barkour_vb/barkour_vb.png + * - Boston Dynamics Spot `_ + - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/boston_dynamics_spot/spot.png Grippers & Hands ^^^^^^^^^^^^^^^^ From 16e9db3ad6b495c2f4463ce28cee377777aa8f65 Mon Sep 17 00:00:00 2001 From: Kevin Zakka Date: Fri, 31 May 2024 11:48:03 -0700 Subject: [PATCH 57/62] Add Franka Robotics FR3 robot. PiperOrigin-RevId: 639104288 Change-Id: Ib8c834f9f07f36bcbb62d92cbeba8c28ffd8da67 --- doc/models.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/models.rst b/doc/models.rst index 5e772a30..5c0d4d02 100644 --- a/doc/models.rst +++ b/doc/models.rst @@ -104,6 +104,8 @@ Arms - Preview * - `Franka Emika Panda `_ - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/franka_emika_panda/panda.png + * - `Franka FR3 `_ + - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/franka_fr3/fr3.png * - `Universal Robots UR5e `_ - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/universal_robots_ur5e/ur5e.png * - `Universal Robots UR10e `_ From 814deb0e9f8422aae686e369fb40fe7935df5d84 Mon Sep 17 00:00:00 2001 From: Kevin Zakka Date: Fri, 31 May 2024 22:32:18 -0700 Subject: [PATCH 58/62] Fix bug in hyperlink. PiperOrigin-RevId: 639255722 Change-Id: I0419169ac6d82e2fa64a36a33538ee33a2e22c50 --- doc/models.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/models.rst b/doc/models.rst index 5c0d4d02..54cdf4a9 100644 --- a/doc/models.rst +++ b/doc/models.rst @@ -76,7 +76,7 @@ Quadrupeds - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/google_barkour_v0/barkour_v0.png * - `Google Barkour vB `_ - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/google_barkour_vb/barkour_vb.png - * - Boston Dynamics Spot `_ + * - `Boston Dynamics Spot `_ - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/boston_dynamics_spot/spot.png Grippers & Hands From 936866be0fa8e18a99c94e3084b62c88ae5bd567 Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Sat, 1 Jun 2024 01:07:50 -0700 Subject: [PATCH 59/62] Add mjModel and mjData arguments to mj_makeModel and mj_makeRawData. If they are NULL, then the functions allocate the memory, otherwise they will use the memory allocated by the caller. PiperOrigin-RevId: 639283021 Change-Id: I765f95fe1b5c27202ae033b05a13ae7b5fb8dbc3 --- src/engine/engine_io.c | 161 +++++++++++++++++++++++++---------------- src/engine/engine_io.h | 29 ++++---- src/user/user_model.cc | 23 +++--- 3 files changed, 127 insertions(+), 86 deletions(-) diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index 42319202..ee836546 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -447,22 +447,40 @@ static int safeAddToBufferSize(intptr_t* offset, size_t* nbuffer, +// free model memory without destroying the struct +static void freeModelBuffers(mjModel* m) { + mju_free(m->buffer); +} + + + // allocate and initialize mjModel structure -mjModel* mj_makeModel( - int nq, int nv, int nu, int na, int nbody, int nbvh, int nbvhstatic, int nbvhdynamic, int njnt, - int ngeom, int nsite, int ncam, int nlight, int nflex, int nflexvert, int nflexedge, - int nflexelem, int nflexelemdata, int nflexshelldata, int nflexevpair, int nflextexcoord, - int nmesh, int nmeshvert, int nmeshnormal, int nmeshtexcoord, int nmeshface, int nmeshgraph, - int nskin, int nskinvert, int nskintexvert, int nskinface, int nskinbone, int nskinbonevert, - int nhfield, int nhfielddata, int ntex, int ntexdata, int nmat, int npair, int nexclude, int neq, - int ntendon, int nwrap, int nsensor, int nnumeric, int nnumericdata, int ntext, int ntextdata, - int ntuple, int ntupledata, int nkey, int nmocap, int nplugin, int npluginattr, int nuser_body, - int nuser_jnt, int nuser_geom, int nuser_site, int nuser_cam, int nuser_tendon, - int nuser_actuator, int nuser_sensor, int nnames, int npaths) { +void mj_makeModel(mjModel** dest, + int nq, int nv, int nu, int na, int nbody, int nbvh, + int nbvhstatic, int nbvhdynamic, int njnt, int ngeom, int nsite, int ncam, + int nlight, int nflex, int nflexvert, int nflexedge, int nflexelem, + int nflexelemdata, int nflexshelldata, int nflexevpair, int nflextexcoord, + int nmesh, int nmeshvert, int nmeshnormal, int nmeshtexcoord, int nmeshface, + int nmeshgraph, int nskin, int nskinvert, int nskintexvert, int nskinface, + int nskinbone, int nskinbonevert, int nhfield, int nhfielddata, int ntex, + int ntexdata, int nmat, int npair, int nexclude, int neq, int ntendon, + int nwrap, int nsensor, int nnumeric, int nnumericdata, int ntext, + int ntextdata, int ntuple, int ntupledata, int nkey, int nmocap, + int nplugin, int npluginattr, int nuser_body, int nuser_jnt, int nuser_geom, + int nuser_site, int nuser_cam, int nuser_tendon, int nuser_actuator, + int nuser_sensor, int nnames, int npaths) { intptr_t offset = 0; + int allocate = *dest ? 0 : 1; + mjModel* m = NULL; // allocate mjModel - mjModel* m = (mjModel*)mju_malloc(sizeof(mjModel)); + if (!allocate) { + m = *dest; + freeModelBuffers(m); + } else { + m = (mjModel*)mju_malloc(sizeof(mjModel)); + } + if (!m) { mjERROR("could not allocate mjModel"); } @@ -536,43 +554,43 @@ mjModel* mj_makeModel( nhfield + ntex + nmat + npair + nexclude + neq + ntendon + nu + nsensor + nnumeric + ntext + ntuple + nkey + nplugin; if (nnames_map >= INT_MAX / mjLOAD_MULTIPLE) { - mju_free(m); + if (allocate) mju_free(m); mju_warning("Invalid model: size of nnames_map is larger than INT_MAX"); - return 0; + return; } m->nnames_map = mjLOAD_MULTIPLE * nnames_map; m->npaths = npaths; #define X(name) \ if ((m->name) < 0) { \ - mju_free(m); \ + if (allocate) mju_free(m); \ mju_warning("Invalid model: negative " #name); \ - return 0; \ + return; \ } MJMODEL_INTS; #undef X // nbody should always be positive if (m->nbody == 0) { - mju_free(m); + if (allocate) mju_free(m); mju_warning("Invalid model: nbody == 0"); - return 0; + return; } // nmocap is going to get multiplied by 4, and shouldn't overflow if (m->nmocap >= MAX_ARRAY_SIZE) { - mju_free(m); + if (allocate) mju_free(m); mju_warning("Invalid model: nmocap too large"); - return 0; + return; } // compute buffer size m->nbuffer = 0; #define X(type, name, nr, nc) \ if (!safeAddToBufferSize(&offset, &m->nbuffer, sizeof(type), m->nr, nc)) { \ - mju_free(m); \ + if (allocate) mju_free(m); \ mju_warning("Invalid model: " #name " too large."); \ - return 0; \ + return; \ } MJMODEL_POINTERS @@ -581,7 +599,7 @@ mjModel* mj_makeModel( // allocate buffer m->buffer = mju_malloc(m->nbuffer); if (!m->buffer) { - mju_free(m); + if (allocate) mju_free(m); mjERROR("could not allocate mjModel buffer"); } @@ -598,18 +616,19 @@ mjModel* mj_makeModel( mj_defaultVisual(&m->vis); mj_defaultStatistic(&m->stat); - return m; + // copy pointer if allocated here + if (allocate) { + *dest = m; + } } - - // copy mjModel, if dest==NULL create new model mjModel* mj_copyModel(mjModel* dest, const mjModel* src) { void* save_bufptr; // allocate new model if needed if (!dest) { - dest = mj_makeModel( + mj_makeModel(&dest, src->nq, src->nv, src->nu, src->na, src->nbody, src->nbvh, src->nbvhstatic, src->nbvhdynamic, src->njnt, src->ngeom, src->nsite, src->ncam, src->nlight, src->nflex, src->nflexvert, src->nflexedge, @@ -764,16 +783,17 @@ mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz) { bufread(sizes, sizeof(size_t)*getnsize(), buffer_sz, buffer, &ptrbuf); // allocate new mjModel, check sizes - m = mj_makeModel(ints[0], ints[1], ints[2], ints[3], ints[4], ints[5], ints[6], - ints[7], ints[8], ints[9], ints[10], ints[11], ints[12], ints[13], - ints[14], ints[15], ints[16], ints[17], ints[18], ints[19], ints[20], - ints[21], ints[22], ints[23], ints[24], ints[25], ints[26], ints[27], - ints[28], ints[29], ints[30], ints[31], ints[32], ints[33], ints[34], - ints[35], ints[36], ints[37], ints[38], ints[39], ints[40], ints[41], - ints[42], ints[43], ints[44], ints[45], ints[46], ints[47], ints[48], - ints[49], ints[50], ints[51], ints[52], ints[53], ints[54], ints[55], - ints[56], ints[57], ints[58], ints[59], ints[60], ints[61], ints[62], - ints[63]); + mj_makeModel(&m, + ints[0], ints[1], ints[2], ints[3], ints[4], ints[5], ints[6], + ints[7], ints[8], ints[9], ints[10], ints[11], ints[12], ints[13], + ints[14], ints[15], ints[16], ints[17], ints[18], ints[19], ints[20], + ints[21], ints[22], ints[23], ints[24], ints[25], ints[26], ints[27], + ints[28], ints[29], ints[30], ints[31], ints[32], ints[33], ints[34], + ints[35], ints[36], ints[37], ints[38], ints[39], ints[40], ints[41], + ints[42], ints[43], ints[44], ints[45], ints[46], ints[47], ints[48], + ints[49], ints[50], ints[51], ints[52], ints[53], ints[54], ints[55], + ints[56], ints[57], ints[58], ints[59], ints[60], ints[61], ints[62], + ints[63]); if (!m || m->nbuffer != sizes[getnsize()-1]) { mju_warning("Corrupted model, wrong size parameters"); mj_deleteModel(m); @@ -834,7 +854,7 @@ mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz) { // de-allocate mjModel void mj_deleteModel(mjModel* m) { if (m) { - mju_free(m->buffer); + freeModelBuffers(m); mju_free(m); } } @@ -1089,12 +1109,40 @@ static void _initPlugin(const mjModel* m, mjData* d) { +// free mjData memory without destroying the struct +static void freeDataBuffers(mjData* d) { +#ifdef ADDRESS_SANITIZER + // raise an error if there's a dangling stack frame + mj_freeStack(d); +#endif + + // destroy plugin instances + for (int i = 0; i < d->nplugin; ++i) { + const mjpPlugin* plugin = mjp_getPluginAtSlot(d->plugin[i]); + if (plugin->destroy) { + plugin->destroy(d, i); + } + } + mju_free(d->buffer); + mju_free(d->arena); +} + + + // allocate and initialize raw mjData structure -mjData* mj_makeRawData(const mjModel* m) { +void mj_makeRawData(mjData** dest, const mjModel* m) { intptr_t offset = 0; + int allocate = *dest ? 0 : 1; + mjData* d = NULL; // allocate mjData - mjData* d = (mjData*) mju_malloc(sizeof(mjData)); + if (!allocate) { + d = *dest; + freeDataBuffers(d); + } else { + d = (mjData*) mju_malloc(sizeof(mjData)); + } + if (!d) { mjERROR("could not allocate mjData"); } @@ -1107,9 +1155,9 @@ mjData* mj_makeRawData(const mjModel* m) { d->buffer = d->arena = NULL; #define X(type, name, nr, nc) \ if (!safeAddToBufferSize(&offset, &d->nbuffer, sizeof(type), m->nr, nc)) { \ - mju_free(d); \ + if (allocate) mju_free(d); \ mju_warning("Invalid data: " #name " too large."); \ - return 0; \ + return; \ } MJDATA_POINTERS @@ -1121,7 +1169,7 @@ mjData* mj_makeRawData(const mjModel* m) { // allocate buffer d->buffer = mju_malloc(d->nbuffer); if (!d->buffer) { - mju_free(d); + if (allocate) mju_free(d); mjERROR("could not allocate mjData buffer"); } @@ -1129,7 +1177,7 @@ mjData* mj_makeRawData(const mjModel* m) { d->arena = mju_malloc(d->narena); if (!d->arena) { mju_free(d->buffer); - mju_free(d); + if (allocate) mju_free(d); mjERROR("could not allocate mjData arena"); } @@ -1142,14 +1190,18 @@ mjData* mj_makeRawData(const mjModel* m) { // clear nplugin (overwritten by _initPlugin) d->nplugin = 0; - return d; + // copy pointer if allocated here + if (allocate) { + *dest = d; + } } // allocate and initialize mjData structure mjData* mj_makeData(const mjModel* m) { - mjData* d = mj_makeRawData(m); + mjData* d = NULL; + mj_makeRawData(&d, m); if (d) { _initPlugin(m, d); mj_resetData(m, d); @@ -1166,7 +1218,7 @@ mjData* mj_copyData(mjData* dest, const mjModel* m, const mjData* src) { // allocate new data if needed if (!dest) { - dest = mj_makeRawData(m); + mj_makeRawData(&dest, m); _initPlugin(m, dest); } @@ -1697,20 +1749,7 @@ void mj_resetDataKeyframe(const mjModel* m, mjData* d, int key) { // de-allocate mjData void mj_deleteData(mjData* d) { if (d) { -#ifdef ADDRESS_SANITIZER - // raise an error if there's a dangling stack frame - mj_freeStack(d); -#endif - - // destroy plugin instances - for (int i = 0; i < d->nplugin; ++i) { - const mjpPlugin* plugin = mjp_getPluginAtSlot(d->plugin[i]); - if (plugin->destroy) { - plugin->destroy(d, i); - } - } - mju_free(d->buffer); - mju_free(d->arena); + freeDataBuffers(d); mju_free(d); } } diff --git a/src/engine/engine_io.h b/src/engine/engine_io.h index fb0b454a..1c733a8a 100644 --- a/src/engine/engine_io.h +++ b/src/engine/engine_io.h @@ -51,19 +51,20 @@ void mj_defaultStatistic(mjStatistic* stat); //------------------------------- mjModel ---------------------------------------------------------- // allocate mjModel -mjModel* mj_makeModel(int nq, int nv, int nu, int na, int nbody, int nbvh, int nbvhstatic, int nbvhdynamic, - int njnt, int ngeom, int nsite, int ncam, int nlight, int nflex, int nflexvert, - int nflexedge, int nflexelem, int nflexelemdata, int nflexshelldata, int nflexevpair, - int nflextexcoord, int nmesh, int nmeshvert, int nmeshnormal, int nmeshtexcoord, int nmeshface, - int nmeshgraph, int nskin, int nskinvert, int nskintexvert, int nskinface, - int nskinbone, int nskinbonevert, int nhfield, int nhfielddata, - int ntex, int ntexdata, int nmat, int npair, int nexclude, - int neq, int ntendon, int nwrap, int nsensor, - int nnumeric, int nnumericdata, int ntext, int ntextdata, - int ntuple, int ntupledata, int nkey, int nmocap, int nplugin, - int npluginattr, int nuser_body, int nuser_jnt, int nuser_geom, - int nuser_site, int nuser_cam, int nuser_tendon, int nuser_actuator, - int nuser_sensor, int nnames, int npaths); +void mj_makeModel(mjModel** dest, + int nq, int nv, int nu, int na, int nbody, int nbvh, int nbvhstatic, int nbvhdynamic, + int njnt, int ngeom, int nsite, int ncam, int nlight, int nflex, int nflexvert, + int nflexedge, int nflexelem, int nflexelemdata, int nflexshelldata, int nflexevpair, + int nflextexcoord, int nmesh, int nmeshvert, int nmeshnormal, int nmeshtexcoord, int nmeshface, + int nmeshgraph, int nskin, int nskinvert, int nskintexvert, int nskinface, + int nskinbone, int nskinbonevert, int nhfield, int nhfielddata, + int ntex, int ntexdata, int nmat, int npair, int nexclude, + int neq, int ntendon, int nwrap, int nsensor, + int nnumeric, int nnumericdata, int ntext, int ntextdata, + int ntuple, int ntupledata, int nkey, int nmocap, int nplugin, + int npluginattr, int nuser_body, int nuser_jnt, int nuser_geom, + int nuser_site, int nuser_cam, int nuser_tendon, int nuser_actuator, + int nuser_sensor, int nnames, int npaths); // copy mjModel; allocate new if dest is NULL MJAPI mjModel* mj_copyModel(mjModel* dest, const mjModel* src); @@ -91,7 +92,7 @@ MJAPI const char* mj_validateReferences(const mjModel* m); MJAPI mjData* mj_makeData(const mjModel* m); // allocate mjData corresponding to given model, used internally -MJAPI mjData* mj_makeRawData(const mjModel* m); +MJAPI void mj_makeRawData(mjData** dest, const mjModel* m); // Copy mjData. // m is only required to contain the size fields from MJMODEL_INTS. diff --git a/src/user/user_model.cc b/src/user/user_model.cc index 8a290b82..7ff79c2c 100644 --- a/src/user/user_model.cc +++ b/src/user/user_model.cc @@ -3303,16 +3303,17 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { } // create low-level model - m = mj_makeModel(nq, nv, nu, na, nbody, nbvh, nbvhstatic, nbvhdynamic, njnt, ngeom, nsite, - ncam, nlight, nflex, nflexvert, nflexedge, nflexelem, - nflexelemdata, nflexshelldata, nflexevpair, nflextexcoord, - nmesh, nmeshvert, nmeshnormal, nmeshtexcoord, nmeshface, nmeshgraph, - nskin, nskinvert, nskintexvert, nskinface, nskinbone, nskinbonevert, - nhfield, nhfielddata, ntex, ntexdata, nmat, npair, nexclude, - neq, ntendon, nwrap, nsensor, nnumeric, nnumericdata, ntext, ntextdata, - ntuple, ntupledata, nkey, nmocap, nplugin, npluginattr, - nuser_body, nuser_jnt, nuser_geom, nuser_site, nuser_cam, - nuser_tendon, nuser_actuator, nuser_sensor, nnames, npaths); + mj_makeModel(&m, + nq, nv, nu, na, nbody, nbvh, nbvhstatic, nbvhdynamic, njnt, ngeom, nsite, + ncam, nlight, nflex, nflexvert, nflexedge, nflexelem, + nflexelemdata, nflexshelldata, nflexevpair, nflextexcoord, + nmesh, nmeshvert, nmeshnormal, nmeshtexcoord, nmeshface, nmeshgraph, + nskin, nskinvert, nskintexvert, nskinface, nskinbone, nskinbonevert, + nhfield, nhfielddata, ntex, ntexdata, nmat, npair, nexclude, + neq, ntendon, nwrap, nsensor, nnumeric, nnumericdata, ntext, ntextdata, + ntuple, ntupledata, nkey, nmocap, nplugin, npluginattr, + nuser_body, nuser_jnt, nuser_geom, nuser_site, nuser_cam, + nuser_tendon, nuser_actuator, nuser_sensor, nnames, npaths); if (!m) { throw mjCError(0, "could not create mjModel"); } @@ -3464,7 +3465,7 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) { // create data int disableflags = m->opt.disableflags; m->opt.disableflags |= mjDSBL_CONTACT; - d = mj_makeRawData(m); + mj_makeRawData(&d, m); if (!d) { mj_deleteModel(m); throw mjCError(0, "could not create mjData"); From 14a3ce5ffac0550a645ca391119014f489f70b55 Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Sat, 1 Jun 2024 01:26:05 -0700 Subject: [PATCH 60/62] Add tree traversal utilities to C API. PiperOrigin-RevId: 639285787 Change-Id: Ieb52da87fb5e1c674985f03c9ff2b18783d1d657 --- src/user/user_api.cc | 16 +++++++++++++ src/user/user_api.h | 9 ++++++++ src/user/user_objects.cc | 47 ++++++++++++++++++++++++++++++++++++++ src/user/user_objects.h | 3 +++ test/user/user_api_test.cc | 39 +++++++++++++++++++++++++++++-- 5 files changed, 112 insertions(+), 2 deletions(-) diff --git a/src/user/user_api.cc b/src/user/user_api.cc index 0bf072f1..34cfa704 100644 --- a/src/user/user_api.cc +++ b/src/user/user_api.cc @@ -554,6 +554,22 @@ void mjs_setDefault(mjElement* element, mjsDefault* defspec) { +// return first child of selected type +mjElement* mjs_firstChild(mjsBody* body, mjtObj type) { + mjCBody* bodyC = static_cast(body->element); + return bodyC->NextChild(NULL, type); +} + + + +// return body's next child; return NULL if child is last +mjElement* mjs_nextChild(mjsBody* body, mjElement* child) { + mjCBody* bodyC = static_cast(body->element); + return bodyC->NextChild(child); +} + + + // set string void mjs_setString(mjString dest, const char* text) { std::string* str = reinterpret_cast(dest); diff --git a/src/user/user_api.h b/src/user/user_api.h index 400325c4..3f6ae15e 100644 --- a/src/user/user_api.h +++ b/src/user/user_api.h @@ -916,6 +916,15 @@ MJAPI mjsDefault* mjs_getSpecDefault(mjSpec* s); MJAPI int mjs_getId(mjElement* element); +//---------------------------------- Tree traversal ------------------------------------------------ + +// Return body's first child of given type. +MJAPI mjElement* mjs_firstChild(mjsBody* body, mjtObj type); + +// Return body's next child of the same type; return NULL if child is last. +MJAPI mjElement* mjs_nextChild(mjsBody* body, mjElement* child); + + //---------------------------------- Attribute setters --------------------------------------------- // Copy text to string. diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index 6691143f..034abae6 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -1255,6 +1255,53 @@ mjCBase* mjCBody::FindObject(mjtObj type, string _name, bool recursive) { +template +static mjElement* GetNext(std::vector& list, mjElement* child) { + for (unsigned int i = 0; i < list.size()-1; i++) { + if (list[i]->spec.element == child) { + return list[i+1]->spec.element; + } + } + return nullptr; +} + + + +// get next child of given type +mjElement* mjCBody::NextChild(mjElement* child, mjtObj type) { + if (type == mjOBJ_UNKNOWN) { + if (!child) { + throw mjCError(this, "child type must be specified if no child element is given"); + } else { + type = child->elemtype; + } + } else if (child && child->elemtype != type) { + throw mjCError(this, "child element is not of requested type"); + } + + switch (type) { + case mjOBJ_BODY: + case mjOBJ_XBODY: + return child ? GetNext(bodies, child) : bodies[0]; + case mjOBJ_JOINT: + return child ? GetNext(joints, child) : joints[0]; + case mjOBJ_GEOM: + return child ? GetNext(geoms, child) : geoms[0]; + case mjOBJ_SITE: + return child ? GetNext(sites, child) : sites[0]; + case mjOBJ_CAMERA: + return child ? GetNext(cameras, child) : cameras[0]; + case mjOBJ_LIGHT: + return child ? GetNext(lights, child) : lights[0]; + case mjOBJ_FRAME: + return child ? GetNext(frames, child) : frames[0]; + default: + return nullptr; + } +} + + + // compute geom inertial frame: ipos, iquat, mass, inertia void mjCBody::GeomFrame(void) { int sz; diff --git a/src/user/user_objects.h b/src/user/user_objects.h index 0ed56b4e..d5773515 100644 --- a/src/user/user_objects.h +++ b/src/user/user_objects.h @@ -308,6 +308,9 @@ class mjCBody : public mjCBody_, private mjsBody { // used by mjXWriter and mjCModel const std::vector& get_userdata() { return userdata_; } + // get next child of given type + mjElement* NextChild(mjElement* child, mjtObj type = mjOBJ_UNKNOWN); + private: mjCBody(const mjCBody& other, mjCModel* _model); // copy constructor mjCBody& operator=(const mjCBody& other); // copy assignment diff --git a/test/user/user_api_test.cc b/test/user/user_api_test.cc index 6db3b558..440f0c96 100644 --- a/test/user/user_api_test.cc +++ b/test/user/user_api_test.cc @@ -36,9 +36,9 @@ using ::testing::HasSubstr; using ::testing::NotNull; -// ----------------------------- test set/get --------------------------------- +// -------------------------- test model manipulation ------------------------- -TEST_F(MujocoTest, ReadWriteData) { +TEST_F(MujocoTest, GetSetData) { mjSpec* spec = mjs_createSpec(); mjsBody* world = mjs_findBody(spec, "world"); mjsBody* body = mjs_addBody(world, 0); @@ -63,6 +63,41 @@ TEST_F(MujocoTest, ReadWriteData) { mjs_deleteSpec(spec); } +TEST_F(MujocoTest, TreeTraversal) { + mjSpec* spec = mjs_createSpec(); + mjsBody* world = mjs_findBody(spec, "world"); + mjsBody* body = mjs_addBody(world, 0); + + mjsSite* site1 = mjs_addSite(body, 0); + mjsGeom* geom1 = mjs_addGeom(body, 0); + mjsGeom* geom2 = mjs_addGeom(body, 0); + mjsSite* site2 = mjs_addSite(body, 0); + mjsSite* site3 = mjs_addSite(body, 0); + mjsGeom* geom3 = mjs_addGeom(body, 0); + + mjElement* t_el1 = mjs_firstChild(body, mjOBJ_TENDON); + mjElement* s_el1 = mjs_firstChild(body, mjOBJ_SITE); + mjElement* s_el2 = mjs_nextChild(body, s_el1); + mjElement* s_el3 = mjs_nextChild(body, s_el2); + mjElement* s_el4 = mjs_nextChild(body, s_el3); + mjElement* g_el1 = mjs_firstChild(body, mjOBJ_GEOM); + mjElement* g_el2 = mjs_nextChild(body, g_el1); + mjElement* g_el3 = mjs_nextChild(body, g_el2); + mjElement* g_el4 = mjs_nextChild(body, g_el3); + + EXPECT_EQ(t_el1, nullptr); + EXPECT_EQ(s_el1, site1->element); + EXPECT_EQ(s_el2, site2->element); + EXPECT_EQ(s_el3, site3->element); + EXPECT_EQ(g_el1, geom1->element); + EXPECT_EQ(g_el2, geom2->element); + EXPECT_EQ(g_el3, geom3->element); + EXPECT_EQ(g_el4, nullptr); + EXPECT_EQ(s_el4, nullptr); + + mjs_deleteSpec(spec); +} + // ------------------- test recompilation multiple files ----------------------- TEST_F(PluginTest, RecompileCompare) { mjtNum tol = 0; From 8fa0fea02d0646f831bae14debadc1921dc7a378 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Mon, 3 Jun 2024 03:41:58 -0700 Subject: [PATCH 61/62] Allow partial specification of `polycoef` attribute of equality constraints. - Usually the user only wants to tweak `polycoef[1]`, after this change `"0 2"` is equivalent to `"0 2 0 0 0"`. - Also improve documentation of this attribute. - Tighten margins of documentation display equations. PiperOrigin-RevId: 639720742 Change-Id: Ibafa0e093cebe1c1c75bf2e47ff3bd2ad7619414 --- doc/XMLreference.rst | 14 ++++++---- doc/css/theme_overrides.css | 6 +++++ src/xml/xml_native_reader.cc | 4 +-- test/xml/xml_native_reader_test.cc | 42 +++++++++++++++++++++++++++++- 4 files changed, 58 insertions(+), 8 deletions(-) diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index 86bff885..5f664c0f 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -4275,11 +4275,15 @@ joint types (slide and hinge) can be used. .. _equality-joint-polycoef: :at:`polycoef`: :at-val:`real(5), "0 1 0 0 0"` - Coefficients a0 ... a4 of the quartic polynomial. If the two joint values are y and x, and their reference positions - (corresponding to the joint values in the initial model configuration) are y0 and x0, the constraint is: - y-y0 = a0 + a1*(x-x0) + a2*(x-x0)^2 + a3*(x-x0)^3 + a4*(x-x0)^4. - Omitting the second joint is equivalent to setting x = x0, in which case the constraint is y = y0 + a0. + Coefficients :math:`a_0 \ldots a_4` of the quartic polynomial. If the joint values of :at:`joint1` and :at:`joint2` + are respectively :math:`y` and :math:`x`, and their reference positions (corresponding to the joint values in the + initial model configuration) are :math:`y_0` and :math:`x_0`, the constraint is: + .. math:: + y-y_0 = a_0 + a_1(x-x_0) + a_2(x-x_0)^2 + a_3(x-x_0)^3 + a_4(x-x_0)^4 + + Omitting :at:`joint2` is equivalent to setting :math:`x = x_0`, in which case the constraint is + :math:`y = y_0 + a_0`. .. _equality-tendon: @@ -4315,7 +4319,7 @@ This element constrains the length of one tendon to be a quartic polynomial of a .. _equality-tendon-polycoef: :at:`polycoef`: :at-val:`real(5), "0 1 0 0 0"` - Same as in the equality/ :ref:`joint ` element above, but applied to tendon lengths instead of joint + Same as in the :ref:`equality/joint ` element above, but applied to tendon lengths instead of joint positions. diff --git a/doc/css/theme_overrides.css b/doc/css/theme_overrides.css index 5d0bc476..6b607bda 100644 --- a/doc/css/theme_overrides.css +++ b/doc/css/theme_overrides.css @@ -260,6 +260,12 @@ dt .at { margin-left: 0.5em; } +/* Reduce top and bottom margins around displayed KaTeX equations */ +.katex-display { + margin-top: 0.3em; + margin-bottom: 0.3em; +} + details summary { font-weight: 600; } diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index 2ea4ec75..92731593 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -1884,13 +1884,13 @@ void mjXReader::OneEquality(XMLElement* elem, mjsEquality* pequality) { case mjEQ_JOINT: ReadAttrTxt(elem, "joint1", name1, true); ReadAttrTxt(elem, "joint2", name2); - ReadAttr(elem, "polycoef", 5, pequality->data, text); + ReadAttr(elem, "polycoef", 5, pequality->data, text, false, false); break; case mjEQ_TENDON: ReadAttrTxt(elem, "tendon1", name1, true); ReadAttrTxt(elem, "tendon2", name2); - ReadAttr(elem, "polycoef", 5, pequality->data, text); + ReadAttr(elem, "polycoef", 5, pequality->data, text, false, false); break; case mjEQ_FLEX: diff --git a/test/xml/xml_native_reader_test.cc b/test/xml/xml_native_reader_test.cc index 12d38ce5..41a1ca73 100644 --- a/test/xml/xml_native_reader_test.cc +++ b/test/xml/xml_native_reader_test.cc @@ -34,8 +34,13 @@ namespace mujoco { namespace { +std::vector AsVector(const mjtNum* array, int n) { + return std::vector(array, array + n); +} + using ::std::string; using ::testing::AllOf; +using ::testing::ElementsAre; using ::testing::Eq; using ::testing::FloatEq; using ::testing::HasSubstr; @@ -834,8 +839,43 @@ TEST_F(XMLReaderTest, IncludeAbsoluteTest) { mj_deleteModel(model); } -// ------------------------ test frame parsing --------------------------------- +TEST_F(XMLReaderTest, ParsePolycoef) { + static constexpr char xml[] = R"( + + + + + + + + + + + + + + + + + + + )"; + std::array error; + mjModel* m = LoadModelFromString(xml, error.data(), error.size()); + EXPECT_THAT(m, NotNull()) << error.data(); + EXPECT_THAT(AsVector(m->eq_data + 0*mjNEQDATA, 5), + ElementsAre(0, 1, 0, 0, 0)); + EXPECT_THAT(AsVector(m->eq_data + 1*mjNEQDATA, 5), + ElementsAre(2, 1, 0, 0, 0)); + EXPECT_THAT(AsVector(m->eq_data + 2*mjNEQDATA, 5), + ElementsAre(3, 4, 0, 0, 0)); + EXPECT_THAT(AsVector(m->eq_data + 3*mjNEQDATA, 5), + ElementsAre(5, 6, 7, 8, 9)); + mj_deleteModel(m); +} + +// ------------------------ test frame parsing --------------------------------- TEST_F(XMLReaderTest, ParseFrame) { static constexpr char xml[] = R"( From 2830a4071f85d194009260a852204a715bf938ee Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Mon, 3 Jun 2024 05:26:14 -0700 Subject: [PATCH 62/62] Add `dampratio` attribute to `position` and `intvelocity` actuators. PiperOrigin-RevId: 639745135 Change-Id: I94ba4c346d2750c6c454a60a568f2e6f6bce19d4 --- doc/XMLreference.rst | 27 +++++- doc/XMLschema.rst | 10 ++- doc/changelog.rst | 9 +- src/engine/engine_setconst.c | 38 ++++++++- src/xml/xml_native_reader.cc | 45 ++++++---- test/engine/engine_forward_test.cc | 78 +++++++++++++++++ test/engine/testdata/actuation/dampratio.xml | 44 ++++++++++ test/engine/testdata/actuation/refsite.xml | 5 +- .../testdata/actuation/tendon_dampratio.xml | 84 +++++++++++++++++++ 9 files changed, 314 insertions(+), 26 deletions(-) create mode 100644 test/engine/testdata/actuation/dampratio.xml create mode 100644 test/engine/testdata/actuation/tendon_dampratio.xml diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index 5f664c0f..0b01759a 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -5045,10 +5045,26 @@ This element has one custom attribute in addition to the common attributes: Damping applied by the actuator. When using this attribute, it is recommended to use the implicitfast or implicit :ref:`integrators`. +.. _actuator-position-dampratio: + +:at:`dampratio`: :at-val:`real, "0"` + Damping applied by the actuator, using damping ratio units. + This attribute is exclusive with :at:`kv` and has similar meaning, but instead of units of force/velocity, the units + are :math:`2 \sqrt{k_p \cdot m}`, corresponding to a harmonic oscillator's + `damping ratio `__. + A value of 1 corresponds to a *critically damped* oscillator, which often produces desirable behavior. + Values smaller or larger than 1 correspond to underdamped and overdamped oscillations, respectively. + The mass :math:`m` is computed at the reference configuration ``mjModel.qpos0``, taking into account joint + :ref:`armature `. + However, passive :ref:`damping ` or :ref:`frictionloss ` in the affected + joints are not taken into account; if they are non-negligible, :at:`dampratio` values smaller than 1 might be + required to achieve desirable motion. + When using this attribute, it is recommended to use the implicitfast or implicit :ref:`integrators`. + .. _actuator-position-timeconst: :at:`timeconst`: :at-val:`real, "0"` - Time-constant of the first-order filter. If larger than zero, the actuator uses the :at:`filterexact` + Time-constant of optional first-order filter. If larger than zero, the actuator uses the :at:`filterexact` :ref:`dynamics type`, if zero (the default) no filter is used. @@ -5214,6 +5230,11 @@ This element has one custom attribute in addition to the common attributes: Damping applied by the actuator. When using this attribute, it is recommended to use the implicitfast or implicit :ref:`integrators`. +.. _actuator-intvelocity-dampratio: + +:at:`dampratio`: :at-val:`real, "0"` + See :ref:`position/dampratio`. + .. _actuator-intvelocity-inheritrange: :at:`inheritrange`: :at-val:`real, "0"` @@ -8097,6 +8118,8 @@ tendon, slidersite, cranksite. .. _default-position-kv: +.. _default-position-dampratio: + .. _default-position-timeconst: :el-prefix:`default/` |-| **position** (?) @@ -8159,6 +8182,8 @@ refsite, tendon, slidersite, cranksite. .. _default-intvelocity-kv: +.. _default-intvelocity-dampratio: + :el-prefix:`default/` |-| **intvelocity** (?) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/XMLschema.rst b/doc/XMLschema.rst index 05b91a64..42a4131a 100644 --- a/doc/XMLschema.rst +++ b/doc/XMLschema.rst @@ -705,7 +705,7 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`cranksite` | :ref:`site` | :ref:`refsite` | :ref:`kp` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`kv` | :ref:`timeconst` | | | | +| | | | :ref:`kv` | :ref:`dampratio` | :ref:`timeconst` | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| actuator |br| |_| |L| | | .. table:: | @@ -737,7 +737,7 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`slidersite` | :ref:`cranksite` | :ref:`site` | :ref:`refsite` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`kp` | :ref:`kv` | | | | +| | | | :ref:`kp` | :ref:`kv` | :ref:`dampratio` | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| actuator |br| |_| |L| | | .. table:: | @@ -1477,7 +1477,9 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`forcerange` | :ref:`gear` | :ref:`cranklength` | :ref:`user` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`group` | :ref:`kp` | :ref:`kv` | :ref:`timeconst` | | +| | | | :ref:`group` | :ref:`kp` | :ref:`kv` | :ref:`dampratio` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`timeconst` | | | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| default |br| |_| |L| | | .. table:: | @@ -1501,6 +1503,8 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`user` | :ref:`group` | :ref:`kp` | :ref:`kv` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`dampratio` | | | | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| default |br| |_| |L| | | .. table:: | | :ref:`damper | ? | :class: mjcf-attributes | diff --git a/doc/changelog.rst b/doc/changelog.rst index 59bbad37..b56a0ec8 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -11,8 +11,13 @@ General 1. Added :ref:`mj_geomDistance` for computing the shortest signed distance between two geoms and optionally a segment connecting them. Relatedly, added the 3 sensors: :ref:`distance`, :ref:`normal`, :ref:`fromto`. See the function and sensor documentation for details. Fixes :github:issue:`51`. -2. Added :ref:`timeconst` attribute to the :ref:`position actuator`. - When set to a positive value, the actuator is made stateful with :at:`filterexact` dynamics. +2. Improvements to position actuators: + + - Added :ref:`timeconst` attribute to the :ref:`position actuator`. + When set to a positive value, the actuator is made stateful with :at:`filterexact` dynamics. + - Added :ref:`dampratio` to both :el:`position` and :el:`intvelocity` actuators. An + alternative to the :at:`kv` attribute, it provides a convenient way to set actuator damping using natural units. + See attribute documentation for details. MJX ^^^ diff --git a/src/engine/engine_setconst.c b/src/engine/engine_setconst.c index e1cd4907..ec936192 100644 --- a/src/engine/engine_setconst.c +++ b/src/engine/engine_setconst.c @@ -341,12 +341,48 @@ static void set0(mjModel* m, mjData* d) { // compute positional offsets mju_sub3(m->light_pos0+3*i, d->light_xpos+3*i, d->xpos+3*id); - mju_sub3(m->light_poscom0+3*i, d->light_xpos+3*i, d->subtree_com+ (id1 >= 0 ? 3*id1 : 3*id)); + mju_sub3(m->light_poscom0+3*i, d->light_xpos+3*i, d->subtree_com + (id1 >= 0 ? 3*id1 : 3*id)); // copy dir mju_copy3(m->light_dir0+3*i, d->light_xdir+3*i); } + // compute actuator damping from dampratio + for (int i=0; i < m->nu; i++) { + // get bias, gain parameters + mjtNum* biasprm = m->actuator_biasprm + i*mjNBIAS; + mjtNum* gainprm = m->actuator_gainprm + i*mjNGAIN; + + // not a position-like actuator: skip + if (gainprm[0] != -biasprm[1]) { + continue; + } + + // damping is 0 or negative (interpreted as regular "kv"): skip + if (biasprm[2] <= 0) { + continue; + } + + // === interpret biasprm[2] > 0 as dampratio for position-like actuators + + // "reflected" inertia (inversely scaled by transmission squared) + mjtNum* transmission = d->actuator_moment + i*nv; + mjtNum mass = 0; + for (int j=0; j < nv; j++) { + mjtNum trn = mju_abs(transmission[j]); + mjtNum trn2 = trn*trn; // transmission squared + if (trn2 > mjMINVAL) { + mass += m->dof_M0[j] / trn2; + } + } + + // damping = dampratio * 2 * sqrt(kp * mass) + mjtNum damping = biasprm[2] * 2 * mju_sqrt(gainprm[0] * mass); + + // set biasprm[2] to negative damping + biasprm[2] = -damping; + } + mj_freeStack(d); } diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index 92731593..72a398b9 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -177,18 +177,16 @@ const char* MJCF[nMJCF][mjXATTRNUM] = { "dyntype", "gaintype", "biastype", "dynprm", "gainprm", "biasprm", "actearly"}, {"motor", "?", "8", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "gear", "cranklength", "user", "group"}, - {"position", "?", "12", "ctrllimited", "forcelimited", "ctrlrange", "inheritrange", - "forcerange", "gear", "cranklength", "user", "group", "kp", "kv", "timeconst"}, + {"position", "?", "13", "ctrllimited", "forcelimited", "ctrlrange", "inheritrange", + "forcerange", "gear", "cranklength", "user", "group", "kp", "kv", "dampratio", "timeconst"}, {"velocity", "?", "9", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", - "gear", "cranklength", "user", "group", - "kv"}, - {"intvelocity", "?", "12", "ctrllimited", "forcelimited", + "gear", "cranklength", "user", "group", "kv"}, + {"intvelocity", "?", "13", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "actrange", "inheritrange", "gear", "cranklength", "user", "group", - "kp", "kv"}, + "kp", "kv", "dampratio"}, {"damper", "?", "8", "forcelimited", "ctrlrange", "forcerange", - "gear", "cranklength", "user", "group", - "kv"}, + "gear", "cranklength", "user", "group", "kv"}, {"cylinder", "?", "12", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "gear", "cranklength", "user", "group", "timeconst", "area", "diameter", "bias"}, @@ -389,22 +387,22 @@ const char* MJCF[nMJCF][mjXATTRNUM] = { "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "lengthrange", "gear", "cranklength", "user", "joint", "jointinparent", "tendon", "slidersite", "cranksite", "site", "refsite"}, - {"position", "*", "22", "name", "class", "group", + {"position", "*", "23", "name", "class", "group", "ctrllimited", "forcelimited", "ctrlrange", "inheritrange", "forcerange", "lengthrange", "gear", "cranklength", "user", "joint", "jointinparent", "tendon", "slidersite", "cranksite", "site", "refsite", - "kp", "kv", "timeconst"}, + "kp", "kv", "dampratio", "timeconst"}, {"velocity", "*", "19", "name", "class", "group", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "lengthrange", "gear", "cranklength", "user", "joint", "jointinparent", "tendon", "slidersite", "cranksite", "site", "refsite", "kv"}, - {"intvelocity", "*", "22", "name", "class", "group", + {"intvelocity", "*", "23", "name", "class", "group", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "actrange", "inheritrange", "lengthrange", "gear", "cranklength", "user", "joint", "jointinparent", "tendon", "slidersite", "cranksite", "site", "refsite", - "kp", "kv"}, + "kp", "kv", "dampratio"}, {"damper", "*", "18", "name", "class", "group", "forcelimited", "ctrlrange", "forcerange", "lengthrange", "gear", "cranklength", "user", @@ -2087,18 +2085,33 @@ void mjXReader::OneActuator(XMLElement* elem, mjsActuator* pact) { ReadAttr(elem, "kp", 1, pact->gainprm, text); pact->biasprm[1] = -pact->gainprm[0]; - if (ReadAttr(elem, "kv", 1, pact->biasprm + 2, text)) { - if (pact->biasprm[2] < 0) - throw mjXError(elem, "kv cannot be negative"); - pact->biasprm[2] *= -1; + // read kv + double kv = -1; // -1: undefined + if (ReadAttr(elem, "kv", 1, &kv, text)) { + if (kv < 0) throw mjXError(elem, "kv cannot be negative"); } + // read dampratio + double dampratio = -1; // -1: undefined + if (ReadAttr(elem, "dampratio", 1, &dampratio, text)) { + if (dampratio < 0) throw mjXError(elem, "dampratio cannot be negative"); + } + + // set biasprm[2]; negative: regular damping, positive: dampratio + if (dampratio > 0 && kv > 0) { + throw mjXError(elem, "kv and dampratio cannot both be defined"); + } + if (kv > 0) pact->biasprm[2] = -kv; + if (dampratio > 0) pact->biasprm[2] = dampratio; + + // read timeconst, set dyntype if (ReadAttr(elem, "timeconst", 1, pact->dynprm, text)) { if (pact->dynprm[0] < 0) throw mjXError(elem, "timeconst cannot be negative"); pact->dyntype = pact->dynprm[0] ? mjDYN_FILTEREXACT : mjDYN_NONE; } + // handle inheritrange ReadAttr(elem, "inheritrange", 1, &pact->inheritrange, text); if (pact->inheritrange > 0) { if (type == "position") { diff --git a/test/engine/engine_forward_test.cc b/test/engine/engine_forward_test.cc index 6f5087d9..41d58a71 100644 --- a/test/engine/engine_forward_test.cc +++ b/test/engine/engine_forward_test.cc @@ -18,6 +18,7 @@ #include #include +#include #include #include @@ -839,6 +840,83 @@ TEST_F(ActuatorTest, ActuatorGravcomp) { mj_deleteModel(model); } +// Check that dampratio works as expected +TEST_F(ActuatorTest, DampRatio) { + static constexpr char xml[] = R"( + + + )"; + mjModel* model = LoadModelFromString(xml); + mjData* data = mj_makeData(model); + + data->qpos[0] = data->qpos[1] = -0.1; + + mjtNum under_damped = data->qpos[0]; + mjtNum over_damped = data->qpos[1]; + while (data->time < 10) { + mj_step(model, data); + under_damped = mju_max(under_damped, data->qpos[0]); + over_damped = mju_max(over_damped, data->qpos[1]); + } + + // expect slightly underdamped to slightly overshoot + EXPECT_GT(under_damped, 0); + EXPECT_LT(under_damped, 1e-6); + + // expect slightly overdamped to slightly undershoot + EXPECT_LT(over_damped, 0); + EXPECT_GT(over_damped, -1e-6); + + mj_deleteData(data); + mj_deleteModel(model); +} + + +// Check dampratio for actuators with nontrivial transmission +TEST_F(ActuatorTest, DampRatioTendon) { + const std::string xml_path = + GetTestDataFilePath("engine/testdata/actuation/tendon_dampratio.xml"); + char error[1000]; + mjModel* model = mj_loadXML(xml_path.c_str(), nullptr, error, sizeof(error)); + ASSERT_THAT(model, NotNull()) << error; + mjData* data = mj_makeData(model); + + data->ctrl[0] = 1; + data->ctrl[1] = 4; + + while (data->time < 1) { + mj_step(model, data); + } + + // expect first and second fingers to move together + double tol = 1e-10; + EXPECT_THAT(AsVector(data->qpos, 4), + Pointwise(DoubleNear(tol), AsVector(data->qpos + 4, 4))); + EXPECT_THAT(AsVector(data->qvel, 4), + Pointwise(DoubleNear(tol), AsVector(data->qvel + 4, 4))); + + mj_deleteData(data); + mj_deleteModel(model); +} + // ----------------------- filterexact actuators ------------------------------- using FilterExactTest = MujocoTest; diff --git a/test/engine/testdata/actuation/dampratio.xml b/test/engine/testdata/actuation/dampratio.xml new file mode 100644 index 00000000..1beb2704 --- /dev/null +++ b/test/engine/testdata/actuation/dampratio.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + diff --git a/test/engine/testdata/actuation/refsite.xml b/test/engine/testdata/actuation/refsite.xml index 7374d624..f839e363 100644 --- a/test/engine/testdata/actuation/refsite.xml +++ b/test/engine/testdata/actuation/refsite.xml @@ -3,7 +3,6 @@

GQCIJ_1a)|{^1w5vn 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%0A<)?x6F&@uz zi;RX}FOLfK9xR4gt!ep@qge=cI?y_H1%s_<*14Mf5oqaU7jK(cEskp=LB(=xTxP@- zi3t45aMl1byFmRtk$CWa{J`S-?@9=Ys8emAjX~k&R~O>)Lm_YJc~utEHRusItgOsf zg@$!*-x-X`hdg8d0e4AvbY9r`fwBe>skr_+ykjj35?e3c*J`f->7Tv}bx?rrOGqso zObUg~QFNGcCk5yp*9;y6%qXm^zBr7;tdoAg)h!dAEK*5UcuD!eKoDX zPLJj{zZJrzZ+ql4Kb9ju?UbDsyPDzEjW0KYkA{N6#c`DEmyUwxdSi;N#h|K%*ZLZ4 z9x(OfydrO*J@A`zf3eo90_}L|hj$#aLG8Rx4_%@==-+&}MD%Gvx8(E_j@4&C?ajjn zE}U^dna9pQJ|$O!4(^^2NG8WC6QjOYx27w=A-{T?drTg(W+v>Jx)20xcG<}fKjp!0 z*ZR0A+iX-=dhim-#UDOV?MkKE?u+jHvgx$2sYdILC++qE_(k> z1hy~SRXa->k>1vdv|}L&QWzM`w$9apwSzp@>eqCXbLumk;b?@z>umMnW3ll3Nt*pm z%SPaMwIKH+E)Dh6G8*SrhQQ25_mEDA1|mu`ylE+{0DYcNv#Slo(3szKcCxk@o|>~+ z>oMh^29^m6?g|1NHK3c~QItZbexK)+b!tGu+YhWPlH2E1n$aISt)szC@q7GPseGVZ zKUkN~=mzb+B{9Y|_OOfbJIjsgdKCR4SBugu5ja>#le<6VqIk%&eoWa2UK``l-xV`J zCh5mJ>cwU>>i=x{(FnPoVaH*KnD`p#yRi6iLaPQyA1rcS%EciX3S?7E7YxSlPd+)# z7z~a9uN+#Y$M_wBeQy)oZvNOMN6r)ZjWO@_Q>sF4Jd&-iiG1DiHQ8p?oDB3p;0{C4TNsg>P3+9nGCDg3X!1^sNb;j)2M~!SC72O+XBl^FE#!fZRI!kL{!i09_3l+dUVu;X23pL$j}g(e~^Y zH=l0QLjV0ER%54Qz@p^zXS3J@CNEx%BY0&DiQiA|4mHm&`7Z@=RNKw2+=eM-lJm)JL=*+ymBRx zq|^FqkH@traq73FJw+Hq9}@~le3=IMJFSYIO!s$u71zx}qJqPIjTKQ~bzkWFw@M>7zle@wI z=owJTH+fS6;?KB`Mdx^f{CTN}uOl(Y<<|q1P!=ON(h_#pM<@XP1f4c)A?J(g%JjOu zNmqdxv4w0Iwm`r;*$dOD?&z|D#qt-2EcEH)Me##d2%vscAmi52dStL?lGRg-gzKV; z;lI`W%^bv7Q|^1uSpkLJe{1W>=m60}Kk0PiG9hN<^OllIEQqfKh$2_ zD-13@n|r^rq8W&eKkAt_Yf!%45Mz)ud7~`nL}q0}DFg~o7!H%~dlo+iuhF*!V8*hk zbn}=Ga6L(_@Rw^s#}9ImOG8MYNiWir^sNd$3IZ?f?mSdi(0TN(6S0B`S^-+RAiBF2#RI=z%;_$=g_yVj5an@2?T#g)^5!hP#EMZuq&^~ z1x_<_>A%sQkp9#4oRV$}3Lmu_coVGfU&^j#QzLZ)YQYWTqLOUi%=i_qQcdxlrZ5 zo=}Tk+;qEO6dnV+szZe-=qyo!>g>;B&r9Gghm@0cRy4efalJ$m%tBY+F}b>*Y=(UL ziNkIev*CCYaOza&pcB-W&V_Qf!20Lnqm;3!5PU0^@i$L0#9#hMb#6}-QtPRVVCk=f zqU#5mMj0AW=eA-Y^NUUJDl=M z@19nWYN1?j4Iy6iRDBABOn zw(avfU-0asc{}^I0X<>3GVt^<2@W$YUYWdF0}8e#qsn`T=&=;#Il~?j2({i7lX9ZxfO>)jpuVkO9pZtf6l+TODqgzFvVULvB1TQoseCE-`7hd45^!IU_Z77l;Id-Y2HG+Rd z^j4x&97vR&RzCQ<7T%XhxQuW3As(t!RRxC-c=!CwPZ2SH_+m)=lujfOzI1E-%3z9s zkE1IwR*A*vuEbu>qe(;<&F}1|+KL6?|8DeVB(E`f@BU{J1Z~sG6Yr>lzZCvoKXzBZ zMPpf0>S=#exl;Vn(>W5ldIdGRM3PZRAH|O2dPL}=Z!`K-9}hdOL~__Kl_LpD8Q@5 zBlRf#-}Gp*1^8d;>hF(A0I{$_R`HKSl&TkR!r?#ydnxXf=cj5xG3kUIrgZ_S!SU7J&Y&JD9H7Jr+u=2JWYV`Ocd`vPi{XYo5x=kw*vDc z8%`^`d?>W!ON;dMK%LiPsUuF;ASJgA#t*lW;9~B5a;0Y~a_{zNb0H-nwG6F`7bW~4 zcttU8g1m0Mhc3g3g8aUDu>Sb$^uZOlC2JU@wY1Rx)#cTo<>P~zN_~;=vm^QUTiR^o zE$-4~Y(^F(Qc51?A1CrJfB6v@rX-S z3~mvKw{lnWucPVcms`?#4}%c!erVzP@VyDB4TQ^-YL~zU%~X!|z92YtzxpptYXmx| zw>Qa8rU91d<%CjCMFFGOLPItG33P1fu>dVO{@QVXVt*o6Bs>w4D5qH?qP2hjXX1Pl zObwY^NK05i&m!f%fs!(G=j-Qwea9BCe%t&j=wSg=#@y#H?yZ8F0_x_8$9ZV2ZhXJz zn?TUabvt=iF&Zsxh16dusE1;&m0xy35#ZoX+pXT+i1sLmHG4g3fI#H{O`)6OP{FP# zGWIzY41v?@W{V$u4OY5ZO|BzedLy(ebuJHe)P%lw|4ankbMdaE90Dvvus>^lS_Uh9 z^Sm?=j-+#f*Hm+(z)ke_IM;&!^mtusgkVyS&eLY>yY#LQ=+F1wzCK!pqUA$4l+#+^ zSanqC{Coj09EwudWJpIwj>k_py$eT8p%o=_KLUYMMO2rCNdvU3*u2ASOTb`Ss=jnb zD6Ax&sN>JFM5a3C@~>oT(1n4KYA-2reEHa4mZ+YAN}eARVLjyzLKVAry*cI&Uh({b ziH{PX`N6*%GY6En9?Z<|4S==`RcDcsIvC!hU2`e&K^oTek1guM@I0*v@@lW?#H%8i-}*aeLxA%Rak7Lu1|G?x z3a!#Oh!vj>2_)z1{*8X2dH%2FtIheFf{su_pf{w*3wGEUPwtUl_P>A!{>CNcRnC(8fsKrPp&Ux z`dJ#ilnTi@a>n(Wp}?!}9qrs1g;p1r3TNF?(0%s%@ezBXATZvzC9^6S?XL4V`mMhS z(&K;15M>D9R(&40_?uCb<*mp9ay{@}L&p6%&hBvF?z8QG&NrhK*#m1|E|P#{!I))W zcMW(QpQ|l@(J2}s@`;J7VxIO{oNzIP+hojJGIUkbi zgIX{<6}^FVwzBM$5933c z$Q2yPFyYxT957u2*X+ZcV!5+WX7Hnk5^6vAM4@&$-z61ZJoVRlRb>Zr4%3$uXj|Y# z*X?JSY}sgaWusHtf?Pj*r|nAA909gFnmxI4I2$Q$ABkQ1;tlT(&K?d>b_UwjQmeF< zG7x?g*jaKu8m;UZw?CYf02kOss)!A#pq;B+7f){iM=s1NC0De7Wct<|8xQ&Sf81Q_ zC%Hi5;7^aQiB6EC^v86jBN{1t%)Bo|wJ_09r_M$2gY#8o0_#ELa7R2a*grB1oqIsP zII~88gPwOkR4J#TUbP2VY3X9=kZ1Ix^}te&T3wAJ^h|0s7?ka`fVIf+vf43%oJ7vn=Oc0I~r)7hzi*(CEv z&jma|b~KP22_+-Vk9StO3N7H#+Ow^{ZUIoHazjv`*Bw&IulxvG&TkLfl!33OafO6l74wy@oOXrlug-m_}i;N&8j}7ox2`s z`#bQS=Ouw%Ra^&?Mj@1XoL#QxBcike&iq~E_>kpr)?uCE5LmZm*?o5`2|3)|)@*n? z8OeFFi7R~afnfR7>8F+rNb0|d9tk3A-@Y)AsfMN76hxK6dPK*?Bu}l{2;$Z+)9$@D z0`-Y=6?G?5(Va&;=h8ZwKvM6^LqR+KXww*{)Ti#lHPdJ020Bgw9x| z>~0hqTo9{TzFi9r)CW~q{)WK+wVPZ-F8-rTN_GTps^5#3KDog#{Wqbs)pX<)N!1{w z?+W|en9kE3@rL5F%W($|`hu3{%Z>h@r9g3uB*``75A0jN&2L&pLLT?QvZ39@;6F$$ zI4~0cj-wluMZ672zQOK|D|vm1+Doy5+e91Cm+4ONuQe!O$+lZ~2N6W|K8Fg-S_9Ko zM~hBc4(f7$$d)_j4qo0KiG2cYAoAahmjXxlE>=af27+WnCcEN$@;I(`XnsdvCi*wa z`0YvVpP6ef3|}GF4QjJy_-a_8Y2IZ$6_r|~#8&5~D3Ji^=O%Z&;YmT1X;Ruq+6tN& zI1*Pr2Sdt4+}gWTGuWK`SC~}-^><27cvky?1z#ssl}t8r=Krg;?BWeuA_irgrLK^0 zlG80QqY34BzZa5WA;AZ_l`w&WrLb=JwdW^^fOtByyWKC>L0APxomQAPy!kTk^DfN^ z$$j+tkwH^~)}R{p7;o@cV6Tror?`r9d>N>O?u5zcNtYH4+HBlY8#m3d}{_!;VT93SHpx=)jT9 za8GzACP}+OuHV0H#IPffyw7K}`LM7WR|TiESf{D&bJ5&N8tGI`1Q5#1 z7K|fQJ@jMe0rI|ve_7a4*IYF2v;D#I zea0YuwIX?<-VL6qnQfE$-HaA86!|KxN$}-m#KYC~I{0rJOkq9>_4>CFjR>LpGX-1k zX2JWRz;uV9Mzrp|hvF?Ad7qKV&2{IFNXQ(zzSl+}9o@X%BKf%@7In_}%qe>Zz=jwn zH&1se+RHli*O2^s?D}@2JSPHZHyKj({whQfCP{)*-7Bpcq?H;n4rG@yl% z1A|L4B%mQj%ZBX5aEd-<B2D2P=<;wsoo5z-RPQorzp0F5i}O+FrIseO{`WLge0uD`hwcy%t$gAZB$SJ4EsxxM{J|Dduf_G~$=kzk@3RJ} zs|0lT`wRY4?MX;sd(O03w;#B>&&17N$w8#sG>!ZA`GWy`lJv~;0{R~=`~G&PK>ezk zx*fv}Xn5pNXj9q(11}?m`>RrbG#xy27_y-^{qRw1Rv%E|_h23mNCUJZXoHTPJf8ld zYQ4GO3SR7XHJuzO@MO+_^=p719H3cMs^@A2eO4p3#Q0KlSFk7eb||_1{JzrVv?m+t zpT!M4A5KHAs3;WJRcZ-r;U-{c}X zo-|(&P_kl~TXTSA8~Q=Xno^)kT62ve*Q0Sf*f!hYHX@_)(4O+pLKzHSUU=8N91cOd zhYMW!Gtrxm>7^^@h~Tq}=Xg*&0agY$w+`PSBIB;uc!o1kiO1qgGd zzgKugM7kRFjfJ0^VA11gX>gto4Dxy%eVbo|QjR!qbf0Mkc;&aMla&q4HXijq@8zLp z(^DK>{6tW_w*CC;o-9!RLVEc0nhacCRv>X`mw}ktkWz*?Illd5My||D2P(0jTVpYi zsL}Dld4Bx{$ot51lchTsNh#Gb?TYt?g}~<1iTgc4@RhN*$@yHA*lE7?(bNKL)QIL* ztDdkL!MyrYwj7=(>>K%i3Onm)FN^O{BOndZU5D_Uw5-hu13QMjvXI{?Mb^3#V6n z^XTMmR}QW@bnZsJC0pa{s2C&n>BT2@F0D8?&v(nNHhJ&RldQkI|I5y86&r1Bk|p=q z0TpkZ&VK4(g0+WsE{*?nfeAY*e)8RdhE>lltyn7IiSEx5Z90^9$K{5-3U9ACd&Y^3 zM`QG^c<=uE2@bZ}e5lfqtW{rKv903qWTP+aE7YT6{+SOZ7f86{(6w4~rxyF4-^4Ku0wjtUP5N! zA7ZCNM~&f!u8LF94}|&QFx&8hUY+3l0N6VG{qH{f@Bh`IyeQHSRQTbx7yrd#_#wEO za1*f4LNeqSeo(^?o+PK-4;;ir?}MKRWESK~WIVV$=nauYkol1D;r#HzI_w3IW048q z{Gg2=U>HidA2>(|=Z8c5P>KHl-w(=*2v-bX^u>Wy&1aesv3G}q|eb0{guH!j`~B8DUf53 z72uYmPe!Ih`k}PSaDH&kex!nHOL-||Z02zv<*AX=k*?p0@P2?W4dvlDUJm@Hh4X_q zei)-5oF77QfBM0k2H2d%Ghp{QHbVFLk3!Fg?1%rD$UE4(qGv+) z12VnQV=#Zlhs@YrPn*%B@UsOy3oLKs*jev8VtU~v>9YfECT#6ix zbUs|q&ijk>&vs&=$42I${uHF~Z34Re$%*a<|DK}zAwWNrm<#)Dq|d<*{#B*j+>}?0 z`S1VnLneLzsVL=nknYzu=#INJdS0aCa=d;p@Gr{qAz!3jKa^4t`)&G{AAJOJC~`8= z=U4#Uc?!#24+Y`eZ$4M|vHPx2(2nif-XzKkBg69k*zIo-bm!w;bmL18#_N19rrdaE z{BwO5qdep+*Z<3K?pNcv>(u>R9M1jdK6Ibvt0Ka1py7-h2gpB+}2JCX>(AUs^pR>=S z9Cqg;Ecf|azXJaJFp+tMA4tPp4EKv4OxsF9TK1J6I*P>K1?102*Ps2Vgx&KbJZHM# zzcQTT@_FdTaaVzJT^vA{yNg~G>3RywtzRwRw7VXyR~^pwGj7_?U$NVdy3w?2dk-kDhqOK0--LZ4 zvOaPJ(l}{;Za&k1a`XOU=$ zb-lR`Kcn3C)Gc=(TdxoNW8}BUi%7@iy;M%S+%@=q$b`&OYUC@(WJvP~Im_b&+yMMJ z4*Opj&Uii$&gZG!dd}A%xcNxq^D1=X_F#1Pi}e%GZc^kBILGhvnnAhqG!)KtXFPU& zxvqx6S#G=5lOGOe+%zuQ&Sc8XuP2~eEw(u-m@}k)C6x;fxFG(dQx^ujj~k?0+N8Prpa^UNZsRb3$$r zcJtYZ=ym9qe)RvGa>wI&YyXXd)^|Rf2j|7-zYTv=kggZkv*VSY3a1}=%Ux&F;EeB% z*SP3&m=3oQ>2n^%_zz>Bfiw=-uKOo3{LFw$iCxZmv)~+OxNki_X2Tg@%nOV&zfe90 z>GL%&u-tmD!iCQxoM+dY`@?;)nfmUJdFZZxARulwR%{J)8GAG$By zXYTVQaN1|np1k{XDV*yvKAi2Fhq)ij6I^HR!{@d8y{Rxt{=}; z?-2>`=kv0j&(nCW-RCKPhjxv7<{O^Rzfvy$HoE?8-?(Qxo8YD+eGWc1_n&bj4_tO+ zMr0=BJIIzu_vu7*?~z;3eNU!c-uheNT#x2G#tG-meOC|O^FES!Z;#!5>V7ltbG)99 z+u^kv2b>R|vw6r-+Np)SjjV~>fxq{W#{F;{J1IYa>`8t5a{~J=q|eWK#wF)tH=Of# z9NqQpdAkR@=WSDT=iB+T|8mZ^yqxEa@z!yM^SPIHoDZLe=b!s(U%**zTr!UBkA~B) zyz@H&-gC*gG6wrWr1hLfOb^jJ4fJLx6ZHY z+q~o`obzmb=gsjQgL8d*-uoQvzw5|#zle3(4(UE{y_)CerMxTcn2(%9A4j?IRnB^z zHv{3UR~h{Xem+JTAB}&;J>#JF4C_bX$9VTSeoiChEVn&5pS%0Oec?Xpho4W8)scm0 zw<>xQ1^T*is715Q8TJl%$yhFpnseMT{V=2^c} zu0MYd{uBFMWL)aW#YX>&@^6sFcjNOa?4CE@qL-k)=T#WjT_?t6Oj``vwDzg_PS z;aeh&AMW#qjO!=LJ@3Nv(DT-HYq@so`FtMZZyeJ2{5raEeEv|K{0a(f>gD++DBc z4|}NZezM&2F61nCoX)@Fblwen9@x)2 zjMMQ|#lPo}?Rn3)d=*?Hq90N&t=Pv=PBXB{K4no{HKCzfWMmPv(VcjQ)74ig!g^t zD-E1+aU1m=@4M(};oR@ekDTL97jW+TXMx}JaIQbcX+EIe3<0NIPX8I<%!gj1y;<0u z_e|(bC|`^0h%7{TX5<>|#(_ELZ7I)!^qj5|_^FDX6;A)1uvLzV^t^EXt7CWkjnF+$JlEWR#!usR z9@dKjVk{MSsS<{BV`&Z)s$8>}AmX`)c>^4D8#HJ>k8#uE1Ug zyXVLs=+2XVtgrv|)GrKg{^a@LxZMAqyEUk%f9J`0DH{0m-edl49_jh*bJU;y^=H26 z{&QdUp&#B?-Pf*j^JLfENARwbr}T3aawpRN(42XZ^RkC>=fiQCH+Blu zj+*DoSN^s^~;+w=MQ zT-_hmcU{Qa4|(UIJpS!RXLS4Df_9Bx-q(D7hu~Ync|LevJ;Uz!TcKZ|p7F!+`kY$_ zoaJk<%e6r_UTfFCd|SB7wCnxzTXe@|dE3vA4xl&L$2HY+TlF6{LRZ8+`58^_fH&V6P6=el#>^^Asd-^=%cQ-4nT`q6)HIOo&;`5#Ws zLwO&h?bvU}VZFYAKkJ9%_xb22y7v3yZxQ`}AL+hzz6QXhN2WujM0!pR49c}z&-`@| zTwmH7jx^60g+3V0bukb7P^9O_kiehy_1DmPaK?*po{~~NENItuoX-#OH$339n}1nv z1f223cw&6Hh`*6=x6rj)PkvO;uJdAhwm%v!9@23;js)1p1YBZtIqw5wu}`6YK8LXV zad4hbK0nW&5!4?Kr(NFiD7Xo5sgRyKUC`4YCnC+W9Pc*#7#AnOx&FL|7++mK<`Z(- zoXTrIT zqKikKH!0wgAoW)Q-SMl3?dpFHym3)~A^$2|GNgX(hwaa$d=auHvKI0vavsw4>iqe9 zd>-@RdLk<$U0?DG0#3V}{uaV{9yeqDYav@B?Z2Gm^2W8r_%q%*55~8Yl)o1A&;A%M zoQK!pI?@mG|0d{#D1QT45WD|j^aAMlkZ;26M2|v0h5jCL3HB1`{)gjBqMOexg){z) zp?osZ^}7tt`-1mB^FX=faGqZ$@pAOe!#t+xkH2Uv+ zZh+Ij^XoXB$Bl5tXXCj2a6aFLJA|wn^WO%4NB z_&bz)Uf3_k>G`n*?o<4{jBY-56#G`}=4a9I@4~sC&9glhjC0!pPP?4(Ydf6##eCfN zEAFfJ;QV)&>Cnylx}fhswqRV|GwY$3M(%_Q+x7i{?eBt%OT9!$9&?OuDc_BB|2vO9 zxAK(lL7v6WapV!~2a)e1Jr9f@#y9hg58$+~#Gi3*E&ASo+l1Y6zPJ(tWk{@afMcZc@n4pSbktFzc$Up}AV z*zK45z;PX={3Nmt?YRz@p&z5X6VmnBl=9lhAmzu+g78%JkS z-+1~q`lo?E=j8$AvnfA=RJVP3+x-l#9rafreJ^bM`W(*v;J*9--u>Y^dm|cuwsQ`D z_2INz&-Ty5`Fvg9zCT?;{R?p2(958YLm!L07}$pdy!9`^m8ZNWvM_e{!DaN^lsoV3 zvFGLaUP0F`9}(310xn$lJ};l=)o3{P)8CX|L%J^=pY!ARufusxUZG#VAU$WlgmYgx z|L!-R(^s}j{k6y@NYC{faJ{kH&yUdkefB1tdH4a!&Bxu(x8N30ZoHU{J{|croN>x_ zJ!g$qx8W@Rg!=Z+dAtK>f3;gr{w`cj{NzGrLS{#P1E-vWeJFOC6xciaJ^K?6 zF1mSh-^CBwHU8NCW7Nm3^H0B9S%q@rP&)LK$gKF&|9b4UZ$1S{K;8v9GCMu!6ElPe&x&I&pg2R7#WPaJX}@kcS45u-wJSTsQ(Dr7WldGO~w)P0l*du6yj)QdpYKziO+f%D#1f^zfd zWa$2$;QYBBoWJ(8>p9kqdTp>@K_8B+PP@}6pM|{;G74D(&hppb`yl0N!fgrc=E>Hp z1vd`=_A~5XZMd%ZlW&b~y*hBSk*)DN4t*MWUG&gT7yQ{yJvif>_XYRA?|bUQ4aC3q zC+D{^_6Bh3-mk)X4dI$ouNpFn{yju*1ZR0^?2F;7Z@<;$?Vo;|;BPSX?bm4Z{`hYS zr$6i04f@v%PCvF68MMOzGy@}_d^@F=;F#S+BGhvr~U`nji2Mu+u=`6yX)F|?cpxquLt#uBR|7# zp5i^NHg@lizK`jMKljx@IQND7rW4#T%BRqt^LHD&_mjuy_mS6-50U=6%w_1|Iq3T6 zLc5-)zVGooHQslHyM(`T^luGv8+OlQ@0W7clk1K@^K8$-IQTP8_ki1p-S>~1(LHB+ z2AuY>^vim^;PO+yB+_+lp4l7D^|A@h_i@?qYkoHjeGt<9y@PuGJ%s+OuRqsGKia*C zpBqT;r!(-^AMPcj=VeZK&&>gpYnS(aWW9lK#v$WWYy25+21Ua)gOeW&XTIN_en$lT z8v+dn; z`gJ{y!cSq!y$={i{9R`>+yneSM}Cj=em(}S8UCUu_gw0XeJq^)Fdv&wx%sQ-`&{gD z){`5LzoN9~y(C;;69Ue4CwGc=CI+1AtO)+)C&3y2KBe4y`BU`Cfj{f(&vvK4xv#EK z-?(Z#oeHO2-g5WrG`Jo3If*nsc@=#+Ty*80^E2Sgce62HS&-(tGvU@@_x@NMyU%A9 zy1xU|r$5I1vgqc0htYlh<`149bMQBbc3($2FaDj+t8m6e$2SxI)2TNXZa2F9c3hs% z^WZF(FN{CA`EWmBe}*(~{0Dsj+)3JXUwUpXgIfrf4gEa4=Y#i@MQ~riIX}L4@qNQ$ zxN>lj$ou%ci+l}Ey%Jnl?{&C~l-sWB+Wx!&=RUGO^45Pd;C!zvFSi8FyvX-HN$JOB z#<3L6b2A_1;rX--PP^|_snA!! z4aSa$kpTN?46D(NKd#UG`0>8G2Cga6^^^?mCFEMlXX5{3+o8M^`Z~CN*gGJ@`B@LQ zI;gMT*p$D8jDh@zcKRYWP=5pE#)puz{zkY7)SHj2fWKMjZ^JdiJ_)<$o9Fr_ILGJy zH6JfSz0GjO6Ya)H&);|8R?=<+()SF;<1KK$FBk=9zUupft#H;eZX3t-|1O;S%KaMd zyKQjO7}pl$Yse`2u{|2j^8fx`2CgFY7UAa*@@4Eh;JnX!ZX0iRIes|bBQ?N}=Zp7> zU2x(3!*b85-Eiuz57$ji+T8=!oc82H?tQqdaPz324Luj~132#oCE&c5d4Jdo=XkxB zhWDs_0cW}MCehj7QSA4YoauZKGX z*A`v7_2du3O~KDRZWgqi~*6<{Rc2?w4b5-h+(4K3C)Jak!QA$9>Te zeJ%0?+$MD2Tgc0ugsacI_+HES(i{6naOM@pEAIt$Xy;=% z9J|lge8A^i7=LHs^l!VK_a!Jlhb)Oqg7p3uiNEvMzo#GWr-YOzL0*76hh7`red4~k z2g&u{x4CnhN*Go6bJ*Td~CBjc}r1#_4=wHBXq`vFbb>}*~ z3U`iro@W!$TOzN)nRnZ+?Ztw-4%YzPeDX4S1pWCEt}rs>tp63|=4ZHxF_{0e1$hI` zI9`Hw9#LKr{bn@nn*Z9*TX4p8{f7R&hVy+`xbHlFZ^OCI+`sNm>)nBK|C#^0FO8pf z1MVT?lb8DjE)(Su$c)G|$Zz4)oqwN?^KuU^FY`JM>Ap1I`wq_YtTXyv+Vefgee6^4 zV|iHbdpP&SQ220v`~Vl0mw~tb1Gob8$Ng(Q6h--u$l7rIkWG>LdkAN}(4Y6+pWw`c zoiE?hMd9}mTo`A=d-r2F&o|FC@2F;UbX6m5J!T!TBCG8+w1reINUKVE0_I-1+(g&bYUZeig=_=k}j)#_RAra(z67 zGhZu$pFG%IuYUzxNjURRxo2>l>6h`?_-x+rH{4VFXqUJCb2#sHu1oK2Lult8xUl|O z{M$~9SpQbIf!(+e#)B8&%;U}9N7Bv&+KmYpAAhb7&#?s9W5H>ci%Yp&Y&i2X?}fYI zydS;@_bGPsGwW5Ne{tZPf7eH6%ANPPaB&!4=*M>A!A*wy0zcm%XV9PcaPHTZl-EU8 zK_-9;^M3P}|MHoD`+#;VFH3(C!7ZbF4eb~=_hL^Bw-5aSayc>q^^(A~$37D2xgG)c z65QA5OW>}e-$W*bTS|H8&vuf**^YMG^BhYKHyD5B6A77*)7VqMrADucOomLUgwrmU z!g6FPxXp~q_`C)E17vDA=^^jb0I6`@|oZ&(Ox9-E}ZXuGsCr`yaBR4 zashl6IM3U0*t;QH!)Jx_+^)#D-S3T^2e|#z+l?H6zk}%6;B3eCZLbYncDQgIxxT94 zHwWC0=t+>4TR$gUO8RTL>sT%qob81ER^dN)&_Df!_42^2U|i;VzNhjW%nRppY(hK6 z-^S?q;9QTM*MCu-pLX)YnXk3LZrbtIt&)!3e!g)R$?=Is%g8Iea^y7LR2B+Vb;WAM#JJS1t z{))rd5B=$1eHu{+h`3hVt+HHumURJo$ zaORH#u#bhmhW|2f(9i@rPL44?HX{4nP<;o&)-zks|ja*`>1~qc?)}OxHQxc-*fr?s}9_dpqch38-))hezn;ep;PTPGtF%8H{RDbLxRdztcljgeuD?cb#vkLf@9&(~#&EZ(KgD*C zF=@XETo&wSk(rRb&uj{(UNGQ>pf`ha{)f`eX3C9|&EaNYcfVJszs8#uaFN(u*Pfr= zZ(71RA9ZNgbIWtA72E~dH4h$)ZhqVvF0{wPul3smoaMO#t}Wa|+Bt{Jh0K9$2X_(O z^RgBCm&o>THEHKXWJTslz60EL?8YbKoBO{bocAX0QOT+2J*pGj_w*w@<>9?73eG&K zAN(EouIQcNjL+tu>nPua>;h*#R0Ka?QEpz;HQ+3lKLy_{;2vO?(_i<18^k=zS+572 z=cVUXNBX%E*%Ph;dL;5b?R$Rpf-6pWY2+X{^YPwr)v?Q$g7+Nk1DA;YZ-P$-mjc-r z&V6d!UPF0C>h}vc%jX1Kf4Iun?Wg@KgM9#;ddNABfp8`1e+i`dbrSSJaIQb?a@HFR zw}O6H?t5AD_#tqfyPk8NyN-V-T$pEszdsLyOUHZ`MD|7c{(d-Idd8Ir*%ayhaRi)k zSk7|!k#ODvyD;u3WHbDZg8L2KIAz>2UX6y!PyK92^VD4EW8l6*e}ue*JcAqyw}*D+ zESDb#=Q=(Q@A}S!zwvPHN6(psl=neSfZK^5&#R~Co?{c?Jl`yrmzxCVIqkYJFB*W~ z$#BMR^M>&E^eJ%7sn?o**FyUIro!#QZr)%%@h0|ZaG_n^JaszU5$Z+fcLtpMe+_(F z`fJ`g6D~gG`zTM0-V1#eoaORzp1-r<-lX22NbgbJtLDI&ziPK$QrdqNt_FT0kSmd% z-*e&IZy71ifONmjgX@mH744YMn#ax$`j>$?V7_{p`U~KkXXEr({5szY;llUS=Bci? zMR1<0zGoaF)y8rCjb! zxNx4GU+XP_^Slk8gY7JZJ4`!=>E9@H=Y1Jmd+fR4MxsZcFNZVVGXL66x%+Jeob~ma zm-V3km2m#9R+{#F&t@E71?PJ7Jn--6(^GFXobe^}XFF@)jI-ydZ~l;y@vMaloXta1(9#TEy2%w$nbsp1~~0<$(U!~%Ws6Mj@|jag5SZk z`!?JT?AMUKSMj-Tf*VJ9=+AaG!$slWcpuh#C-CQaE^qxUaHH|p6FCam47n99w97Yy zdl$}gKM(e7NYDLkaE{-3>B;!Lk8Fp#g#9?uywBg6-h(SdJ9&}DuT#|90k;a>`$uwg z-{bCtJA|Lfl$S&9LGFr%TTVUs-Egi0S%Z(gw%t{7YiWJRR;?>@NjzJC_Z{Bl2>?*oh{A$I`oEd4rypY!OW(GS9f_AlYA z{~?_BZ13H^Pc=U{1Q(tQO=zzdehcHf&Pe+1{cHGV9mpVt2v&T`|4 z{^U-`4HR} zaLduPThHHPt_GZTxeuv-4NgB{yT+O8aGpn=L*^;2n=j$QzlZpOaos?E1?Tycj{bz_ z*9|z!jlbdfb`!1z&(*wdD}IgFx8OR$h3hmM{rehj2=&b;GoqVk-iEv5bEEu2^y27u z;LN98FRm-s`CT~kN&9EN+(+NQ4PhMS@A_|m{aZNokef^Y?!kS9ZoU)d9pAwjziKef zMo8o7eK_+J{f7R&hnr4+jSKEy zCH_4}%i_oL@(Emf?4JL&TMzrMaOMMYEhz7e{0;6e>me)Ck5lNs!~KfBGaBv>xP+8% zz|XhHB-sCi%Yxl`F<&#^dkSZqGoLcPns@yLml*%r<*fG%ZZPd?m$&}kaN2D@9{%E=BLf!h9eWf)u5jD=$|Qf-6V!9 z4p)c%g>fcHz!?W3;jQ-)Tr1k~y_@;C_p_vMsc1KR4`F_g49XE&-0)( zy609VIM}pPcn0;9RE*Y2WqgI?V=G z4nJ|27spWvdv-X_Ezc|G-F1)y&ivtR>KjLmuQ`KuUH7(YKXSpje%v?iC*SMkhV$>L zveE85#@zv#2d+N4?M1@(#-10h6uQ4JnlBZ_o)7LSdV1!s88R+1Kb-CPyRiHII`s>{ z<)A;Ak=rRZ-zx~$0=s#ac~ctfh2YYmYnQWL;ebmH?|ntS2%OK~{pIuDK)s@Ho-a!n zM=j>V-`|SCSuQ^$;9iFN9skC=c=$CQ7Kb|nXCB@Mf2*;Vfcp_W2{HvTEwUt>cKMX} z^Zr)~PP<%s{K&l$^zSFi?Wg@K9rRDX_RId1ft!k-vB<*Ai}%{HaGodH2Qd!s!{y+f z;O8KI_91s8%forTc}}}8hf}`-oa@&0?0sbcvO8u9Koyf-|mX z!%tRZ7Gz~O$Dap#ex&c8s=yV(E}u8xs=`@cPCxS1;EWUFc@FL;_g8heVvH*vvLVvA zR0GcV?78+5{mX*?nsEM|n|#RCf^$8(KHWz%@mCuzJN?Oq?1QXfKjHkH#dYI4F|Vr& zmz#e3ek}sseO(XEcr%LrqzlGdAI^Nz_33)`UeW;0{ACb+JjXo08p0XxZQprxUK_#r zyS;y38lH!Z;hYEarqQ(T`PKxk4fe3y`c2{7FYTHC9Mtpo$!2g{vAeHhGmq}~=5YPs zIv{%^&5v5Zd5^YyUBI=33-?hzxG36h1!o*ON4fXC)99_?>N8IBuHyJHZ)*eh9IiX{ zy+^LmKiq2c9s%dy&$okfpZfg6bGIMpB>=Lb9T^A_lxVIBU~o>bsjDe ze*9gx6P$6<_-MS0Nxi6OILnj6b%tw2yLYiSMxI1=f%^>I-!)#Lf2omO;hfKKo_#*u z0)N)mUkdznhx5Mq0qsviz6{p`Zaj85%jJ8*x$l=U?#)P_N3Vc85|qpLh70$b>(PDJ z2hMeFdAL9O!c}D)KIfF^o`e11R$&i$^OF8>zUTDZ`ipw`8P@$380H?gzZwXgKdDGw7fB zhxe2*aN6apXS^E=R}eq`eWd&H7y3C4&U43e-E-XhVmzGrgYW5%;U^1n0-WdU3G8)| zMd;5&xK`*FC_jyi&pb_n>kpS0>Az?2?~*3NsfV0@pELz-6z%k)oo(oAkyGJHQ2q#e zN2Kqwr@^@&3Q)cdS(EzH1I~RUFE;~@VaA9<{kTY$^@Zx86KBe}8LAJL!=Hk@Mkx zM3)b_1#rec^Je3p@o*tr3Htjpeg`mK&;Lbm=CL7X{l#$hYb*ZJ;@^J07I6OF_zArA zUWfDk;J$Oed2e_F?piecw|{TK^??ibyZ419aOVGK;5|2-zol@NYj@t|m%)w4kLP@A zbkDElaFv*U--|_}yAM|coaLTZaw~&&eeYB82$!&mp zKtDWpBk<#Syb(@437=UPGRo8inWyf@vVz0>%82d*Ug zE66bZZ-L82{oKgx$cf0UaM6{!kKPS9{pJY#ZG&_F8h5;xyMMRCJ*K|DNBQ?4{(Z=M zaCw4x&4`{2xdYDgHZk*B4e7bM6VAVrZcBa734gEI1?PF{JbSMC@3eNq8Sjjb(`ffc z#X}!YpPQE-hx;1Na(VOf6L8kkufNY&?+~FWW!#smPW{>s^8K z-sk*Qf-~>_0?v7Iy}AC(3$McYJ9bX|m=9fKUarBJuiVG(JuQ-Xy$;t3{Vtrm^}mF3 zUwB@ggKvra3hp5Kar_=Y_kHCJIQ3kNL+%~;n{eNwC&6Drq`$M?3b^Ey%gcQY*NpbO z$A61|?|Zl5w1>Y#Y=FN5XSwe=^*@|;?!pXE^h+j`;loY5w*LTr%y*ipZ+SCve`Qj29Idk8$KzxG=uR zS?@PEpOg8i>%iyuJDhsRnaBPCXMN+5<;J5w;Re$0ag47U@(S`PTy^GCyS(-Pf^*(4 zP~Yd_b9x4si1Omd*vPoZzu{aT?zaN;qcZY2+|SgrpZ3r98UMi5rk>|aYV?B07+e^= zmuzQ#2I7AP`U`NWuy;WwN2Wo>g!6Y7?>)mQ*KaJi=*sO+Y&heW^HG}q&&ThJaF)x< zIiGRh4pA@6U(JK#!uj6X`?C4I@A2conQxibnUCG0o%nF(8Ri$}AF~)w0yyJvZ|s?o z6_5$xGVpvHhy6E?PXwp^!(iOjPYm}W{*62CTknNQ;Cx?@9KIjY_wp~n8K(x*uKT4B zd{Q{=a=yQiO9tnDY{R(yJ=gV>9M1hR9?s|Q`bYt1x%p(srGzt&^jtH)^t?+2_n)2d znQxY%AF1JrQ(m8WDNT7}>}djjwy!_?krvK**IqR6mk!SNi^(W&N_)QNPY)OV?&t4$ zeh(!B+z9GdLsr1A@i!w}CdN4g>3yUrdL}sEUmnBm`*Gi!XNIdzx%1|HI?q|)&d{HW z$j8V}ky+uae;mJ;kYkY%a6eJc`}^nUr;yp;ZlceizWLP~=-J`)Z~Hz!+s^?vn|d!W z&!y0PKb8~D_jT6S-yrJcf-|lgXFWGcz~zPu&kyf2o+EkSvNGOuNaI^;`k5Eb_}?G< zOn846&If1zUDw7N<4k_IM)Wreaum`$y8zr!+6&Kv2Ji*pj1O{QTqp#0oPL|v>EC>> zFx*Bs^UWsoV;S}$aP{ej&&hEcUyH(}h4a0b_xY6Ai@{CBzkiRh8vQx#zYI45y*Dxv z&h=Ov?i_aWVDDRXXtxBM@!}UvMk(n#?=YC^Jx4n2d7=mdd_osxS9BKfBU;aQS24q zQqbQ`*u!{U5w0oyvb+tt@jepHb9xK@Jcm7hE5UhQ4#Cf3_&dnTaOO)z=%@SF^<4$d zyrcvEeD7Ely(-)k{0v1_puGv`)!;@_Pd+>PT)66RyQy#dU59SGtO2K8&UyvlYr=(p zhhkiQhjwehy+*yR^s6P(^;;Wm1a{9+&(%o$)q%T@zq?4wz5mvQvmJjgDS;pNM?E-y zukr7mGQyq5e|@;<%J;)HfO8+X4t)N`yM}NTX{QzS%{#q!HiE0kyvSKkt})zY{J5?P zQ||`$CUA}~4eh5!I=-fG)(bi7H-qy%j^|H4+Vy=-b2#IQ@x*xJ^JoF*`>60e*87a3 zC0w}AjSuekR&Zf_*1!2)YdG&4KhTcvi@cY#fpgv3e}CUI{56hJDh&3uYcc<^?Q7u(1*dj3HK+`^WJzp9L{-~ zfFIu{PedO9H%#63(apC;!udSRdo4FV8wIBxa?bl`IPUOJHh_J`94m6aueaq2h9(CPm`PZo)mCl zJ}EaD&i9>rX@42g`_vRT&(m~_H$5^7?M{WWJQ?M_@99=RMW; zOwNnP-;5-*!razvS)|(AijB+{a+0Gm|-%GilT*vOy zSK-{R+U4E9bK$ICo#!QAn*Pj#bN+U~IWNxBe7LjJI|4Tvc@Vh(F0^N59<9F+&h=rQ zVJXe;%c^+$*Gw)gs=X)vdg)cGg z!uVei4d;0&zY?wz_06N}<0l>VRd8jQ5A%%$=+;{eXPjtGedC4q znM=QFqL0M?I=Bfz`F!+Q$n|jUL*vv0{20gH(qCYgH?D1fb04|ie4pcf+X(0TEjizN z$-fO}JvqzeH^I4{UBBin?zhcw?ngQ6$-M)YiSd5SeDy~6cakk|`q{;E@Lun{ZiRc1 z`nTb{Uv|U(F5FVu^E?R8<85#?sOLFc0^M_UJDla($HK|K2WPxWPPuWx`Pu>JdzH-e zb35b7fW8xME4p!GHF|9P?}9V0vAiw*EYZ#^d-M?|!&*)bsCBy(f7;Iso?`envAN=HcFN z4#N3&*7@+;2i`p8L%5mPh|eRv#BJ>=Y%C*V8>%F@2)f${$&TwUgG4(+Ey`n&c=aG9}xhqRvD z$8c{`Za&%w|K_cy;68`zK)Lszq^=`4&&#p!#wp|9Cvc(NIN-VYDV)0Xz+HuFji1@f+c;!LV_`ob|qh^L@Peka^Gq+W89Z1N2?U zEy&Ht8*r`{*O%+X^>Y)>-;c^OKJQW9mu|tur`&VpWpv+;O6XrB9|W9s zxms{P!r7kB!{?BId3gxu@2|!|~q%4OK8tL#pnA3&gW(v^j!75?XPgg4WFO$=kxmw&U?A>-SZ|1 z2Ap|@yxdbb=XoOjoNw3jUvTEDt`GAe*U>Y$ zFb<{0ukq+_xG{{g74jmoE&Ox1I_U3EegN4E`#*49(MuuSZ?^A0SiQ!)Pr}bb^vTqF zfq&SlZn^I#trrun4SpUW{X1005ev@ymE-j}nAgRI^LhHbtSA2>ocVzHK`r{fmVU&6 z3-bs$>&JyNU(0}>8~Evf9xocsa`U?QaK^<>)W42D&xHhV##!_Cg>c5>gmAu}_MFjw z9Q-GOn~Ls!bse~`6T`XwTz6m4uFowAoO;OloL`E@Urzd=-=uJ5u0 z`R^ezM#H72o_r=a&vWxb&vno3%mL>)DKD1=&c90;&-jMWZe?UvIQwD06Ty2PMZlT2 zyh6F_-8h#G&U`Q{^N|rbkan}fWxy^Uayj6NQqT6>KkmPraOMw3@$39JuespNd$c=m z^10zY!cRDkA=vZ4{TdBt{k(7^;F2>Q-QD78Q6Uelksn!QX0; z*FJCKL1j4Ya@KPlRDpAU8xO+wAywggFVdKPU8kSMgKBWTmrFx=I%INWb+}yk@%`-q z%AX)>z(seDF~6?~XPy?`pKdbmwcwl&=gWBSIZzw!9Q|;cUE^&$%DFzpXbR`LaQ;s7TnEE9gY!MRzei=F+~1>`!!^M!XFa(V zLH|4l?5F)}31{4?f?wySJ9;a)cIfUK&spyct>KIp#)+&!{AdH`ef({nt8r)pdRsXE z{#$?J=!f}nJGe{Kvw!w$1@`uE=E?r<>U+TE`0WsI`LN4buOnP-%3U|kr}Nhd&Uuv& zxhOc>$%0?|)d;;aoaORzj;{+`nEyC0!|>M?&T;x&^y}Y|b%XPH$=eT~TX(qdyzss8 zEZXe>caP`u6Ee)pdcsYmp8L}IbKZMJ!-e@;Z@A3(`+;`D{niIgd$`Z6*B8$CG6lar zXPpU>BIFaYi`{Wsnkf6WgD!dYLxt`q$ag7bc9xxCz9IP-_N z^v}G)^)dv`cx8NY9-Y6TaL%9c*m-fjhQT>c+N~#_AV;-+U8?oz+P7=JA%heAFX`w4 AWB>pF diff --git a/test/user/user_flex_test.cc b/test/user/user_flex_test.cc index 257d6dca..d55f433e 100644 --- a/test/user/user_flex_test.cc +++ b/test/user/user_flex_test.cc @@ -245,13 +245,13 @@ TEST_F(UserFlexTest, RigidFlex) { TEST_F(UserFlexTest, LoadMSHBinaryGMSH_41_Success) { const std::string xml_path = - GetTestDataFilePath("user/testdata/shark_41_binary_gmshApp.xml"); + GetTestDataFilePath("user/testdata/cube_41_binary_vol_gmshApp.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); ASSERT_THAT(m, NotNull()) << error.data(); mjData* d = mj_makeData(m); - EXPECT_EQ(m->nflexvert, 652); - EXPECT_EQ(m->nflexelem, 1654); + EXPECT_EQ(m->nflexvert, 14); + EXPECT_EQ(m->nflexelem, 24); mj_step(m, d); mj_deleteModel(m); mj_deleteData(d); @@ -259,13 +259,13 @@ TEST_F(UserFlexTest, LoadMSHBinaryGMSH_41_Success) { TEST_F(UserFlexTest, LoadMSHBinaryGMSH_22_Success) { const std::string xml_path = - GetTestDataFilePath("user/testdata/shark_22_binary_gmshApp.xml"); + GetTestDataFilePath("user/testdata/cube_22_binary_vol_gmshApp.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); ASSERT_THAT(m, NotNull()) << error.data(); mjData* d = mj_makeData(m); - EXPECT_EQ(m->nflexvert, 644); - EXPECT_EQ(m->nflexelem, 1635); + EXPECT_EQ(m->nflexvert, 14); + EXPECT_EQ(m->nflexelem, 24); mj_step(m, d); mj_deleteModel(m); mj_deleteData(d); @@ -328,8 +328,8 @@ TEST_F(UserFlexTest, LoadMSHBinaryFTETWILD_22_Success) { mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); ASSERT_THAT(m, NotNull()) << error.data(); mjData* d = mj_makeData(m); - EXPECT_EQ(m->nflexvert, 644); - EXPECT_EQ(m->nflexelem, 1635); + EXPECT_EQ(m->nflexvert, 429); + EXPECT_EQ(m->nflexelem, 1073); mj_step(m, d); mj_deleteModel(m); mj_deleteData(d); @@ -337,13 +337,13 @@ TEST_F(UserFlexTest, LoadMSHBinaryFTETWILD_22_Success) { TEST_F(UserFlexTest, LoadMSHASCIIGMSH_41_Success) { const std::string xml_path = - GetTestDataFilePath("user/testdata/shark_41_ascii_gmshApp.xml"); + GetTestDataFilePath("user/testdata/cube_41_ascii_vol_gmshApp.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); ASSERT_THAT(m, NotNull()) << error.data(); mjData* d = mj_makeData(m); - EXPECT_EQ(m->nflexvert, 652); - EXPECT_EQ(m->nflexelem, 1654); + EXPECT_EQ(m->nflexvert, 14); + EXPECT_EQ(m->nflexelem, 24); mj_step(m, d); mj_deleteModel(m); mj_deleteData(d); @@ -351,13 +351,13 @@ TEST_F(UserFlexTest, LoadMSHASCIIGMSH_41_Success) { TEST_F(UserFlexTest, LoadMSHASCIIGMSH_22_Success) { const std::string xml_path = - GetTestDataFilePath("user/testdata/shark_22_ascii_gmshApp.xml"); + GetTestDataFilePath("user/testdata/cube_22_ascii_vol_gmshApp.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); ASSERT_THAT(m, NotNull()) << error.data(); mjData* d = mj_makeData(m); - EXPECT_EQ(m->nflexvert, 652); - EXPECT_EQ(m->nflexelem, 1654); + EXPECT_EQ(m->nflexvert, 14); + EXPECT_EQ(m->nflexelem, 24); mj_step(m, d); mj_deleteModel(m); mj_deleteData(d); @@ -420,8 +420,8 @@ TEST_F(UserFlexTest, LoadMSHASCIIFTETWILD_22_Success) { mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); ASSERT_THAT(m, NotNull()) << error.data(); mjData* d = mj_makeData(m); - EXPECT_EQ(m->nflexvert, 652); - EXPECT_EQ(m->nflexelem, 1654); + EXPECT_EQ(m->nflexvert, 425); + EXPECT_EQ(m->nflexelem, 1070); mj_step(m, d); mj_deleteModel(m); mj_deleteData(d); @@ -430,7 +430,7 @@ TEST_F(UserFlexTest, LoadMSHASCIIFTETWILD_22_Success) { TEST_F(UserFlexTest, LoadMSHASCII_41_MissingNodeHeader_Fail) { const std::string xml_path = GetTestDataFilePath( - "user/testdata/malformed_shark_41_ascii_missing_node_header.xml"); + "user/testdata/malformed_cube_41_ascii_missing_node_header.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); EXPECT_THAT(error.data(), HasSubstr( @@ -441,7 +441,7 @@ TEST_F(UserFlexTest, LoadMSHASCII_41_MissingNodeHeader_Fail) { TEST_F(UserFlexTest, LoadMSHASCII_41_MissingNodeIndex_Fail) { const std::string xml_path = GetTestDataFilePath( - "user/testdata/malformed_shark_41_ascii_missing_node_index.xml"); + "user/testdata/malformed_cube_41_ascii_missing_node_index.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); EXPECT_THAT(error.data(), HasSubstr( @@ -452,7 +452,7 @@ TEST_F(UserFlexTest, LoadMSHASCII_41_MissingNodeIndex_Fail) { TEST_F(UserFlexTest, LoadMSHASCII_41_MissingElementHeader_Fail) { const std::string xml_path = GetTestDataFilePath( - "user/testdata/malformed_shark_41_ascii_missing_element_header.xml"); + "user/testdata/malformed_cube_41_ascii_missing_element_header.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); EXPECT_THAT(error.data(), HasSubstr( @@ -463,7 +463,7 @@ TEST_F(UserFlexTest, LoadMSHASCII_41_MissingElementHeader_Fail) { TEST_F(UserFlexTest, LoadMSHASCII_41_MissingElement_Fail) { const std::string xml_path = GetTestDataFilePath( - "user/testdata/malformed_shark_41_ascii_missing_element.xml"); + "user/testdata/malformed_cube_41_ascii_missing_element.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); EXPECT_THAT(error.data(), HasSubstr( @@ -474,7 +474,7 @@ TEST_F(UserFlexTest, LoadMSHASCII_41_MissingElement_Fail) { TEST_F(UserFlexTest, LoadMSHASCII_22_MissingNumNodes_Fail) { const std::string xml_path = GetTestDataFilePath( - "user/testdata/malformed_shark_22_ascii_missing_num_nodes.xml"); + "user/testdata/malformed_cube_22_ascii_missing_num_nodes.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); // TODO(mohammadhamid): Replace with an assertion about the error message. For @@ -486,7 +486,7 @@ TEST_F(UserFlexTest, LoadMSHASCII_22_MissingNumNodes_Fail) { TEST_F(UserFlexTest, LoadMSHASCII_22_MissingNode_Fail) { const std::string xml_path = GetTestDataFilePath( - "user/testdata/malformed_shark_22_ascii_missing_node.xml"); + "user/testdata/malformed_cube_22_ascii_missing_node.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); EXPECT_THAT(error.data(), HasSubstr( @@ -509,7 +509,7 @@ TEST_F(UserFlexTest, LoadMSHASCII_22_MissingNumElements_Fail) { TEST_F(UserFlexTest, LoadMSHASCII_22_MissingElement_Fail) { const std::string xml_path = GetTestDataFilePath( - "user/testdata/malformed_shark_22_ascii_missing_element.xml"); + "user/testdata/malformed_cube_22_ascii_missing_element.xml"); std::array error; mjModel* m = mj_loadXML(xml_path.c_str(), 0, error.data(), error.size()); EXPECT_THAT(error.data(), HasSubstr( From 1d181786a25da07a9ac536ae0e78291b221e27f0 Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Thu, 9 May 2024 01:41:25 -0700 Subject: [PATCH 19/62] Prevent visualization of SDF iterations from writing outside the maximum allocated vector. Fixes #1539. PiperOrigin-RevId: 632071103 Change-Id: Idf91ede1661e717ad338f601a5482ab171d7f625 --- doc/changelog.rst | 6 ++++-- plugin/sdf/sdf.cc | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/changelog.rst b/doc/changelog.rst index c6473e62..49e04ebc 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -9,7 +9,9 @@ Bug fixes ^^^^^^^^^ 1. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is - often the case for URDF imports. + often the case for URDF imports. Fixes :github:issue:`1069`, :github:issue:`1577`. +2. Fixed a bug that was causing the visualization of SDF iterations to write outside the size of the vector storing + them. Fixes :github:issue:`1539`. Version 3.1.5 (May 7, 2024) --------------------------- @@ -70,7 +72,7 @@ Bug fixes 22. Prevent overwriting of frame names by body names when saving an XML. Bug introduced in 3.1.4. 23. Fixed bug in Python binding of :ref:`mj_saveModel`: ``buffer`` argument was documented as optional but was actually not optional. -24. Fixed bug that prevented memory allocations larger than 2.15 GB. +24. Fixed bug that prevented memory allocations larger than 2.15 GB. Fixes :github:issue:`1606`. Version 3.1.4 (April 10th, 2024) diff --git a/plugin/sdf/sdf.cc b/plugin/sdf/sdf.cc index 31599794..e3073393 100644 --- a/plugin/sdf/sdf.cc +++ b/plugin/sdf/sdf.cc @@ -38,7 +38,7 @@ SdfVisualizer::SdfVisualizer() { } void SdfVisualizer::AddPoint(const mjtNum point[3]) { - if (!npoints_.empty()) { + if (!npoints_.empty() && npoints_.back() < points_.size()/3) { points_[3*npoints_.back()+0] = point[0]; points_[3*npoints_.back()+1] = point[1]; points_[3*npoints_.back()+2] = point[2]; From 39601b0f52380d3cf5b509f899dc3582ac1011be Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Fri, 10 May 2024 00:38:59 -0700 Subject: [PATCH 20/62] Fix bug in compiler error string construction. PiperOrigin-RevId: 632404023 Change-Id: I79e24e44fc4eec67b76fbf62b053b169ba3070a3 --- src/user/user_objects.cc | 2 +- test/xml/xml_native_reader_test.cc | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index 8a27ed76..8d88b6e3 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -70,7 +70,7 @@ static void checksize(double* size, mjtGeom type, mjCBase* object, const char* n else { for (int i=0; i + + + + + + + + )"; + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, IsNull()); + EXPECT_THAT(error.data(), HasSubstr("size 2 must be positive")); + EXPECT_THAT(error.data(), HasSubstr("line 6")); +} + TEST_F(XMLReaderTest, AllowsSpaces) { static constexpr char xml[] = R"( From 31de1dad9d9e583075d1a8ab46ffc3cafb63a3b8 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Fri, 10 May 2024 03:29:04 -0700 Subject: [PATCH 21/62] Update requirements.txt for mujoco and mjx. PiperOrigin-RevId: 632441444 Change-Id: Ia9ff35b453476b2f1f5a7a8facc819a8925dcd8b --- mjx/requirements.txt | 6 ++++-- python/build_requirements.txt | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/mjx/requirements.txt b/mjx/requirements.txt index 9ac5f83d..bc3ba44b 100644 --- a/mjx/requirements.txt +++ b/mjx/requirements.txt @@ -66,7 +66,8 @@ scipy==1.11.3; python_version >= '3.9' \ --hash=sha256:9ea7f579182d83d00fed0e5c11a4aa5ffe01460444219dedc448a36adf0c3917 \ --hash=sha256:5305792c7110e32ff155aed0df46aa60a60fc6e52cd4ee02cdeb67eaccd5356e \ --hash=sha256:a63d1ec9cadecce838467ce0631c17c15c7197ae61e49429434ba01d618caa83 \ - --hash=sha256:715c9966eb8906bc67e450e962bd07a5254420077178f98258904da4004a172f + --hash=sha256:715c9966eb8906bc67e450e962bd07a5254420077178f98258904da4004a172f \ + --hash=sha256:d4d88a6fc091614b842a739b3db6ae15f95c77b308113bd6daefd4b05539b103 setuptools==68.2.2 \ --hash=sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a trimesh==4.0.0 \ @@ -135,7 +136,8 @@ numpy==1.26.0; python_version >= '3.9' \ --hash=sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8 \ --hash=sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f \ --hash=sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c \ - --hash=sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2 + --hash=sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2 \ + --hash=sha256:d6fa6d17727169ff1385ad3cb8f290bbcc3f2097322d90507c1956a4f9f870fc opt-einsum==3.3.0 \ --hash=sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 diff --git a/python/build_requirements.txt b/python/build_requirements.txt index cee4ffae..48f78504 100644 --- a/python/build_requirements.txt +++ b/python/build_requirements.txt @@ -40,7 +40,8 @@ numpy==1.26.0; python_version >= '3.9' \ --hash=sha256:914b28d3215e0c721dc75db3ad6d62f51f630cb0c277e6b3bcb39519bed10bd8 \ --hash=sha256:c78a22e95182fb2e7874712433eaa610478a3caf86f28c621708d35fa4fd6e7f \ --hash=sha256:86f737708b366c36b76e953c46ba5827d8c27b7a8c9d0f471810728e5a2fe57c \ - --hash=sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2 + --hash=sha256:020cdbee66ed46b671429c7265cf00d8ac91c046901c55684954c3958525dab2 \ + --hash=sha256:d6fa6d17727169ff1385ad3cb8f290bbcc3f2097322d90507c1956a4f9f870fc pip==23.3.1 \ --hash=sha256:55eb67bb6171d37447e82213be585b75fe2b12b359e993773aca4de9247a052b PyOpenGL==3.1.7 \ From 02d015458c33117c14b3923730293c0207e9aea4 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Fri, 10 May 2024 04:51:46 -0700 Subject: [PATCH 22/62] Add `mj_geomDistance` API function and sensors for geometric distance, normal direction and segment between between two geoms. Fixes #51 PiperOrigin-RevId: 632458301 Change-Id: I65b7e5bb0df59008028114cf4a07e0d6365ff3d3 --- doc/APIreference/functions.rst | 30 ++- doc/APIreference/functions_override.rst | 25 ++- doc/XMLreference.rst | 180 ++++++++++++++++++ doc/XMLschema.rst | 27 +++ doc/changelog.rst | 11 +- doc/includes/references.h | 7 + include/mujoco/mjmodel.h | 5 + include/mujoco/mujoco.h | 4 + introspect/enums.py | 9 +- introspect/functions.py | 39 ++++ python/mujoco/bindings_test.py | 8 + python/mujoco/functions.cc | 12 ++ src/engine/engine_io.c | 5 + src/engine/engine_ray.c | 9 +- src/engine/engine_sensor.c | 134 +++++++++++-- src/engine/engine_support.c | 43 +++++ src/engine/engine_support.h | 4 + src/engine/engine_vis_visualize.c | 14 ++ src/user/user_objects.cc | 52 +++-- src/xml/xml_native_reader.cc | 26 +++ src/xml/xml_native_reader.h | 2 +- src/xml/xml_native_writer.cc | 57 +++++- test/engine/engine_sensor_test.cc | 89 ++++++++- test/engine/engine_support_test.cc | 77 +++++++- .../testdata/sensor/fromto_body_body.xml | 29 +++ test/engine/testdata/sensor/fromto_convex.xml | 83 ++++++++ .../testdata/sensor/fromto_primitive.xml | 71 +++++++ test/user/user_objects_test.cc | 4 +- unity/Runtime/Bindings/MjBindings.cs | 12 +- 29 files changed, 1002 insertions(+), 66 deletions(-) create mode 100644 test/engine/testdata/sensor/fromto_body_body.xml create mode 100644 test/engine/testdata/sensor/fromto_convex.xml create mode 100644 test/engine/testdata/sensor/fromto_primitive.xml diff --git a/doc/APIreference/functions.rst b/doc/APIreference/functions.rst index 182f708e..f171b635 100644 --- a/doc/APIreference/functions.rst +++ b/doc/APIreference/functions.rst @@ -57,8 +57,8 @@ Main simulation These are the main entry points to the simulator. Most users will only need to call :ref:`mj_step`, which computes everything and advanced the simulation state by one time step. Controls and applied forces must either be set in advance -(in mjData.{ctrl, qfrc_applied, xfrc_applied}), or a control callback :ref:`mjcb_control` must be installed which will be -called just before the controls and applied forces are needed. Alternatively, one can use :ref:`mj_step1` and +(in mjData.{ctrl, qfrc_applied, xfrc_applied}), or a control callback :ref:`mjcb_control` must be installed which will +be called just before the controls and applied forces are needed. Alternatively, one can use :ref:`mj_step1` and :ref:`mj_step2` which break down the simulation pipeline into computations that are executed before and after the controls are needed; in this way one can set controls that depend on the results from :ref:`mj_step1`. Keep in mind though that the RK4 solver does not work with mj_step1/2. @@ -72,8 +72,8 @@ be set before calling this function. Given the state (qpos, qvel, act), mj_forwa while mj_inverse maps from acceleration to force. Mathematically these functions are inverse of each other, but numerically this may not always be the case because the forward dynamics rely on a constraint optimization algorithm which is usually terminated early. The difference between the results of forward and inverse dynamics can be computed -with the function :ref:`mj_compareFwdInv`, which can be thought of as another solver accuracy check (as well as a general -sanity check). +with the function :ref:`mj_compareFwdInv`, which can be thought of as another solver accuracy check (as well as a +general sanity check). The skip version of :ref:`mj_forward` and :ref:`mj_inverse` are useful for example when qpos was unchanged but qvel was changed (usually in the context of finite differencing). Then there is no point repeating the computations that only @@ -408,6 +408,28 @@ Compute object 6D acceleration (rot:lin) in object-centered frame, world/local o sensors are not present in the model, :ref:`mj_rnePostConstraint` must be manually called in order to calculate mjData.cacc -- the total body acceleration, including contributions from the constraint solver. +.. _mj_geomDistance: + +mj_geomDistance +~~~~~~~~~~~~~~~ + +.. mujoco-include:: mj_geomDistance + +Returns the smallest signed distance between two geoms and optionally the segment from ``geom1`` to ``geom2``. +Returned distances are bounded from above by ``distmax``. |br| If no collision of distance smaller than ``distmax`` is +found, the function will return ``distmax`` and ``fromto``, if given, will be set to (0, 0, 0, 0, 0, 0). + +.. admonition:: Positive ``distmax`` values + :class: note + + .. TODO: b/339596989 - Improve mjc_Convex. + + For some colliders, a large, positive ``distmax`` will result in an accurate measurement. However, for collision + pairs which use the general ``mjc_Convex`` collider, the result will be approximate and likely innacurate. + This is considered a bug to be fixed in a future release. + In order to determine whether a geom pair uses ``mjc_Convex``, inspect the table at the top of + `engine_collision_driver.c `__. + .. _mj_contactForce: mj_contactForce diff --git a/doc/APIreference/functions_override.rst b/doc/APIreference/functions_override.rst index ea7ec0cc..0724fd4f 100644 --- a/doc/APIreference/functions_override.rst +++ b/doc/APIreference/functions_override.rst @@ -33,8 +33,8 @@ The model and all files referenced in it can be loaded from disk or from a VFS w These are the main entry points to the simulator. Most users will only need to call :ref:`mj_step`, which computes everything and advanced the simulation state by one time step. Controls and applied forces must either be set in advance -(in mjData.{ctrl, qfrc_applied, xfrc_applied}), or a control callback :ref:`mjcb_control` must be installed which will be -called just before the controls and applied forces are needed. Alternatively, one can use :ref:`mj_step1` and +(in mjData.{ctrl, qfrc_applied, xfrc_applied}), or a control callback :ref:`mjcb_control` must be installed which will +be called just before the controls and applied forces are needed. Alternatively, one can use :ref:`mj_step1` and :ref:`mj_step2` which break down the simulation pipeline into computations that are executed before and after the controls are needed; in this way one can set controls that depend on the results from :ref:`mj_step1`. Keep in mind though that the RK4 solver does not work with mj_step1/2. @@ -48,8 +48,8 @@ be set before calling this function. Given the state (qpos, qvel, act), mj_forwa while mj_inverse maps from acceleration to force. Mathematically these functions are inverse of each other, but numerically this may not always be the case because the forward dynamics rely on a constraint optimization algorithm which is usually terminated early. The difference between the results of forward and inverse dynamics can be computed -with the function :ref:`mj_compareFwdInv`, which can be thought of as another solver accuracy check (as well as a general -sanity check). +with the function :ref:`mj_compareFwdInv`, which can be thought of as another solver accuracy check (as well as a +general sanity check). The skip version of :ref:`mj_forward` and :ref:`mj_inverse` are useful for example when qpos was unchanged but qvel was changed (usually in the context of finite differencing). Then there is no point repeating the computations that only @@ -180,6 +180,23 @@ generalized velocities to subtree angular momentum. More precisely if :math:`h` body index ``body`` in ``mjData.subtree_angmom`` (reported by the :ref:`subtreeangmom` sensor) and :math:`\dot q` is the generalized velocity ``mjData.qvel``, then :math:`h = H \dot q`. +.. _mj_geomDistance: + +Returns the smallest signed distance between two geoms and optionally the segment from ``geom1`` to ``geom2``. +Returned distances are bounded from above by ``distmax``. |br| If no collision of distance smaller than ``distmax`` is +found, the function will return ``distmax`` and ``fromto``, if given, will be set to (0, 0, 0, 0, 0, 0). + +.. admonition:: Positive ``distmax`` values + :class: note + + .. TODO: b/339596989 - Improve mjc_Convex. + + For some colliders, a large, positive ``distmax`` will result in an accurate measurement. However, for collision + pairs which use the general ``mjc_Convex`` collider, the result will be approximate and likely innacurate. + This is considered a bug to be fixed in a future release. + In order to determine whether a geom pair uses ``mjc_Convex``, inspect the table at the top of + `engine_collision_driver.c `__. + .. _mj_mulM: This function multiplies the joint-space inertia matrix stored in mjData.qM by a vector. qM has a custom sparse format diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index 27a911b8..1441d293 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -6723,6 +6723,186 @@ The presence of this sensor in a model triggers a call to :ref:`mj_subtreeVel` d :at:`body`: :at-val:`string, required` Name of the body where the kinematic subtree is rooted. +.. _collision-sensors: + +collision sensors +^^^^^^^^^^^^^^^^^ + +The following 3 sensor types, :ref:`sensor/distance`, :ref:`sensor/normal` and +:ref:`sensor/fromto`, respectively measure the distance, normal direction and line segment of the +smallest signed distance between the surfaces of two geoms using the narrow-phase geom-geom colliders. The collision +computation is always performed, independently of the standard collision :ref:`selection and filtering` +pipeline. These 3 sensors share some common properties: + +.. _collision-sensors-cutoff: + +:at:`cutoff` + For most sensors, the :at:`cutoff` attribute simply defines a clipping operation on sensor values. For collision + sensors, it defines the maximum distance at which collisions will be detected, corresponding to the ``dismax`` + argument of :ref:`mj_geomDistance`. For example, at the default value of 0, only negative distances (corresponding + to geom-geom penetration) will be reported by :ref:`sensor/distance`. + In order to determine collision properties of non-penetrating geom pairs, a positive :at:`cutoff` is required. + + .. admonition:: Positive cutoff values + :class: note + + .. TODO: b/339596989 - Improve mjc_Convex. + + For some colliders, a positive :at:`cutoff` will result in an accurate measurement. However, for collision + pairs which use the general ``mjc_Convex`` collider, the result will be approximate and likely innacurate. + This is considered a bug to be fixed in a future release. + In order to determine whether a geom pair uses ``mjc_Convex``, inspect the table at the top of + `engine_collision_driver.c `__. + +:at:`geom1`, :at:`geom2`, :at:`body1`, :at:`body2` + For all 3 collision sensor types, the two colliding geoms can be specified explicitly using the :at:`geom1` and + :at:`geom2` attributes or implicitly, using :at:`body1`, :at:`body2`. In the latter case the sensor will iterate over + all geoms of the specified body or bodies (mixed specification like :at:`geom1`, :at:`body2` are allowed), and + select the collision with the smallest signed distance. + +sequential sensors + When multiple collision sensors are defined sequentially and have identical attributes (:at:`geom1`, :at:`body1`, + :at:`geom2`, :at:`body2`, :at:`cutoff`), for example when both distance and normal are queried for the same geom + pair, the collision functions will be called once for the whole sensor block, avoiding repeated computation. + +.. _sensor-distance: + +:el-prefix:`sensor/` |-| **distance** (*) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This element creates a sensor that returns the smallest signed distance between the surfaces of two geoms. +See :ref:`collision-sensors` for more details about sensors of this type. + +.. _sensor-distance-cutoff: + +:at:`cutoff` + See :ref:`collision-sensors` for the sematics of this attribute, which is different than for other sensor catagories. + If no collision is detected, the distance sensor returns the :at:`cutoff` value, so in this case + :at:`cutoff` acts as a maximum clipping value, in addition to the special semantics. + +.. _sensor-distance-geom1: + +:at:`geom1`: :at-val:`string, optional` + Name of the first geom. Exactly one of (:at:`geom1`, :at:`body1`) must be specified. + +.. _sensor-distance-geom2: + +:at:`geom2`: :at-val:`string, optional` + Name of the second geom. Exactly one of (:at:`geom2`, :at:`body2`) must be specified. + +.. _sensor-distance-body1: + +:at:`body1`: :at-val:`string, optional` + Name of the first body. Exactly one of (:at:`geom1`, :at:`body1`) must be specified. + +.. _sensor-distance-body2: + +:at:`body2`: :at-val:`string, optional` + Name of the second body. Exactly one of (:at:`geom2`, :at:`body2`) must be specified. + +.. _sensor-distance-name: + +.. _sensor-distance-noise: + +.. _sensor-distance-user: + +:at:`name`, :at:`noise`, :at:`user` + See :ref:`CSensor`. + + +.. _sensor-normal: + +:el-prefix:`sensor/` |-| **normal** (*) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This element creates a sensor that returns the normal direction of the smallest signed distance between the surfaces of +two geoms. It is guaranteed to point from the surface of geom1 to the surface of geom2, though note that in the case of +penetration, this direction is generally in the opposite direction to that of the centroids. +See :ref:`collision-sensors` for more details about sensors of this type. + +.. _sensor-normal-cutoff: + +:at:`cutoff` + See :ref:`collision-sensors` for the sematics of this attribute, which is different than for other sensor catagories. + If no collision is detected, the :ref:`normal` sensor returns (0, 0, 0), otherwise it returns a + normalized direction vector. For this sensor, :at:`cutoff` does not lead to any clamping. + +.. _sensor-normal-geom1: + +:at:`geom1`: :at-val:`string, optional` + Name of the first geom. Exactly one of (:at:`geom1`, :at:`body1`) must be specified. + +.. _sensor-normal-geom2: + +:at:`geom2`: :at-val:`string, optional` + Name of the second geom. Exactly one of (:at:`geom2`, :at:`body2`) must be specified. + +.. _sensor-normal-body1: + +:at:`body1`: :at-val:`string, optional` + Name of the first body. Exactly one of (:at:`geom1`, :at:`body1`) must be specified. + +.. _sensor-normal-body2: + +:at:`body2`: :at-val:`string, optional` + Name of the second body. Exactly one of (:at:`geom2`, :at:`body2`) must be specified. + +.. _sensor-normal-name: + +.. _sensor-normal-noise: + +.. _sensor-normal-user: + +:at:`name`, :at:`noise`, :at:`user` + See :ref:`CSensor`. + + +.. _sensor-fromto: + +:el-prefix:`sensor/` |-| **fromto** (*) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This element creates a sensor that returns the segment defining the smallest signed distance between the surfaces of two +geoms. The segment is defined by 6 numbers (x1, y1, z1, x2, y2, z2) corresponding to two points in the world frame. +(x1, y1, z1) is on the surface of geom1, (x2, y2, z2) is on the surface of geom2. When this sensor is present and the +:ref:`mjVIS_RANGEFINDER` visualization flag is set, segments will be visualized as rangefinder rays. +See :ref:`collision-sensors` for more details about sensors of this type. + +.. _sensor-fromto-cutoff: + +:at:`cutoff` + See :ref:`collision-sensors` for the sematics of this attribute, which is different than for other sensor catagories. + If no collision is detected, the :ref:`fromto` sensor returns 6 zeros. + For this sensor, :at:`cutoff` does not lead to any clamping. + +.. _sensor-fromto-geom1: + +:at:`geom1`: :at-val:`string, optional` + Name of the first geom. Exactly one of (:at:`geom1`, :at:`body1`) must be specified. + +.. _sensor-fromto-geom2: + +:at:`geom2`: :at-val:`string, optional` + Name of the second geom. Exactly one of (:at:`geom2`, :at:`body2`) must be specified. + +.. _sensor-fromto-body1: + +:at:`body1`: :at-val:`string, optional` + Name of the first body. Exactly one of (:at:`geom1`, :at:`body1`) must be specified. + +.. _sensor-fromto-body2: + +:at:`body2`: :at-val:`string, optional` + Name of the second body. Exactly one of (:at:`geom2`, :at:`body2`) must be specified. + +.. _sensor-fromto-name: + +.. _sensor-fromto-noise: + +.. _sensor-fromto-user: + +:at:`name`, :at:`noise`, :at:`user` + See :ref:`CSensor`. .. _sensor-clock: diff --git a/doc/XMLschema.rst b/doc/XMLschema.rst index cb96f80c..31278134 100644 --- a/doc/XMLschema.rst +++ b/doc/XMLschema.rst @@ -1163,6 +1163,33 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| sensor |br| |_| |L| | | .. table:: | +| :ref:`distance | \* | :class: mjcf-attributes | +| ` | | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`name` | :ref:`geom1` | :ref:`geom2` | :ref:`body1` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`body2` | :ref:`cutoff` | :ref:`noise` | :ref:`user` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | ++------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| |_| sensor |br| |_| |L| | | .. table:: | +| :ref:`normal | \* | :class: mjcf-attributes | +| ` | | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`name` | :ref:`geom1` | :ref:`geom2` | :ref:`body1` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`body2` | :ref:`cutoff` | :ref:`noise` | :ref:`user` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | ++------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| |_| sensor |br| |_| |L| | | .. table:: | +| :ref:`fromto | \* | :class: mjcf-attributes | +| ` | | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`name` | :ref:`geom1` | :ref:`geom2` | :ref:`body1` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +| | | | :ref:`body2` | :ref:`cutoff` | :ref:`noise` | :ref:`user` | | +| | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | ++------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ +| |_| sensor |br| |_| |L| | | .. table:: | | :ref:`clock | \* | :class: mjcf-attributes | | ` | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | diff --git a/doc/changelog.rst b/doc/changelog.rst index 49e04ebc..ad37c39b 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -5,12 +5,19 @@ Changelog Upcoming version (not yet released) ----------------------------------- +General +^^^^^^^ + +1. Added :ref:`mj_geomDistance` for computing the shortest signed distance between two geoms and optionally a segment + connecting them. Relatedly, added the 3 sensors: :ref:`distance`, :ref:`normal`, + :ref:`fromto`. See the function and sensor documentation for details. Fixes :github:issue:`51`. + Bug fixes ^^^^^^^^^ -1. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is +2. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is often the case for URDF imports. Fixes :github:issue:`1069`, :github:issue:`1577`. -2. Fixed a bug that was causing the visualization of SDF iterations to write outside the size of the vector storing +3. Fixed a bug that was causing the visualization of SDF iterations to write outside the size of the vector storing them. Fixes :github:issue:`1539`. Version 3.1.5 (May 7, 2024) diff --git a/doc/includes/references.h b/doc/includes/references.h index 1be65826..18473228 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -643,6 +643,11 @@ typedef enum mjtSensor_ { // type of sensor mjSENS_SUBTREELINVEL, // 3D linear velocity of subtree mjSENS_SUBTREEANGMOM, // 3D angular momentum of subtree + // sensors for geometric distance; attached to geoms or bodies + mjSENS_GEOMDIST, // signed distance between two geoms + mjSENS_GEOMNORMAL, // normal direction between two geoms + mjSENS_GEOMFROMTO, // segment between two geoms + // global sensors mjSENS_CLOCK, // simulation time @@ -2542,6 +2547,8 @@ void mj_objectVelocity(const mjModel* m, const mjData* d, int objtype, int objid, mjtNum res[6], int flg_local); void mj_objectAcceleration(const mjModel* m, const mjData* d, int objtype, int objid, mjtNum res[6], int flg_local); +mjtNum mj_geomDistance(const mjModel* m, const mjData* d, int geom1, int geom2, + mjtNum distmax, mjtNum fromto[6]); void mj_contactForce(const mjModel* m, const mjData* d, int id, mjtNum result[6]); void mj_differentiatePos(const mjModel* m, mjtNum* qvel, mjtNum dt, const mjtNum* qpos1, const mjtNum* qpos2); diff --git a/include/mujoco/mjmodel.h b/include/mujoco/mjmodel.h index 9bad4ef6..f8384c74 100644 --- a/include/mujoco/mjmodel.h +++ b/include/mujoco/mjmodel.h @@ -327,6 +327,11 @@ typedef enum mjtSensor_ { // type of sensor mjSENS_SUBTREELINVEL, // 3D linear velocity of subtree mjSENS_SUBTREEANGMOM, // 3D angular momentum of subtree + // sensors for geometric distance; attached to geoms or bodies + mjSENS_GEOMDIST, // signed distance between two geoms + mjSENS_GEOMNORMAL, // normal direction between two geoms + mjSENS_GEOMFROMTO, // segment between two geoms + // global sensors mjSENS_CLOCK, // simulation time diff --git a/include/mujoco/mujoco.h b/include/mujoco/mujoco.h index ac5ed0b2..72bfc367 100644 --- a/include/mujoco/mujoco.h +++ b/include/mujoco/mujoco.h @@ -464,6 +464,10 @@ MJAPI void mj_objectVelocity(const mjModel* m, const mjData* d, MJAPI void mj_objectAcceleration(const mjModel* m, const mjData* d, int objtype, int objid, mjtNum res[6], int flg_local); +// Returns smallest signed distance between two geoms and optionally segment from geom1 to geom2. +MJAPI mjtNum mj_geomDistance(const mjModel* m, const mjData* d, int geom1, int geom2, + mjtNum distmax, mjtNum fromto[6]); + // Extract 6D force:torque given contact id, in the contact frame. MJAPI void mj_contactForce(const mjModel* m, const mjData* d, int id, mjtNum result[6]); diff --git a/introspect/enums.py b/introspect/enums.py index c2efcc25..36a9e3a3 100644 --- a/introspect/enums.py +++ b/introspect/enums.py @@ -338,9 +338,12 @@ ENUMS: Mapping[str, EnumDecl] = dict([ ('mjSENS_SUBTREECOM', 34), ('mjSENS_SUBTREELINVEL', 35), ('mjSENS_SUBTREEANGMOM', 36), - ('mjSENS_CLOCK', 37), - ('mjSENS_PLUGIN', 38), - ('mjSENS_USER', 39), + ('mjSENS_GEOMDIST', 37), + ('mjSENS_GEOMNORMAL', 38), + ('mjSENS_GEOMFROMTO', 39), + ('mjSENS_CLOCK', 40), + ('mjSENS_PLUGIN', 41), + ('mjSENS_USER', 42), ]), )), ('mjtStage', diff --git a/introspect/functions.py b/introspect/functions.py index 300b6c9c..d643828b 100644 --- a/introspect/functions.py +++ b/introspect/functions.py @@ -2743,6 +2743,45 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ ), doc='Compute object 6D acceleration (rot:lin) in object-centered frame, world/local orientation.', # pylint: disable=line-too-long )), + ('mj_geomDistance', + FunctionDecl( + name='mj_geomDistance', + return_type=ValueType(name='mjtNum'), + parameters=( + FunctionParameterDecl( + name='m', + type=PointerType( + inner_type=ValueType(name='mjModel', is_const=True), + ), + ), + FunctionParameterDecl( + name='d', + type=PointerType( + inner_type=ValueType(name='mjData', is_const=True), + ), + ), + FunctionParameterDecl( + name='geom1', + type=ValueType(name='int'), + ), + FunctionParameterDecl( + name='geom2', + type=ValueType(name='int'), + ), + FunctionParameterDecl( + name='distmax', + type=ValueType(name='mjtNum'), + ), + FunctionParameterDecl( + name='fromto', + type=ArrayType( + inner_type=ValueType(name='mjtNum'), + extents=(6,), + ), + ), + ), + doc='Returns smallest signed distance between two geoms and optionally segment from geom1 to geom2.', # pylint: disable=line-too-long + )), ('mj_contactForce', FunctionDecl( name='mj_contactForce', diff --git a/python/mujoco/bindings_test.py b/python/mujoco/bindings_test.py index 42065d35..8faa6db6 100644 --- a/python/mujoco/bindings_test.py +++ b/python/mujoco/bindings_test.py @@ -1194,6 +1194,14 @@ Euler integrator, semi-implicit in velocity. mujoco.mjd_inverseFD(self.model, self.data, eps, flg_centered, None, None, None, None, None, None, None) + def test_geom_distance(self): + mujoco.mj_forward(self.model, self.data) + fromto = np.empty(6, np.float64) + dist = mujoco.mj_geomDistance(self.model, self.data, 0, 2, 200, fromto) + self.assertEqual(dist, 41.9) + np.testing.assert_array_equal(fromto, + np.array((42., 0., 0., 42., 0., 41.9))) + def test_inverse_fd(self): eps = 1e-6 flg_centered = 0 diff --git a/python/mujoco/functions.cc b/python/mujoco/functions.cc index 8cb6b65c..3c0809cb 100644 --- a/python/mujoco/functions.cc +++ b/python/mujoco/functions.cc @@ -531,6 +531,18 @@ PYBIND11_MODULE(_functions, pymodule) { Def(pymodule); Def(pymodule); Def(pymodule); + Def( + pymodule, + [](const raw::MjModel* m, const raw::MjData* d, + int geom1, int geom2, mjtNum distmax, + std::optional> fromto) { + if (fromto.has_value() && fromto->size() != 6) { + throw py::type_error("fromto should be of size 6"); + } + return InterceptMjErrors(::mj_geomDistance)( + m, d, geom1, geom2, distmax, + fromto.has_value() ? fromto->data() : nullptr); + }); Def( pymodule, [](const raw::MjModel* m, Eigen::Ref qvel, diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index c00ceb1f..49862691 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -1773,6 +1773,7 @@ static int sensorSize(mjtSensor sensor_type, int sensor_dim) { case mjSENS_TENDONLIMITPOS: case mjSENS_TENDONLIMITVEL: case mjSENS_TENDONLIMITFRC: + case mjSENS_GEOMDIST: case mjSENS_CLOCK: return 1; @@ -1797,8 +1798,12 @@ static int sensorSize(mjtSensor sensor_type, int sensor_dim) { case mjSENS_SUBTREECOM: case mjSENS_SUBTREELINVEL: case mjSENS_SUBTREEANGMOM: + case mjSENS_GEOMNORMAL: return 3; + case mjSENS_GEOMFROMTO: + return 6; + case mjSENS_BALLQUAT: case mjSENS_FRAMEQUAT: return 4; diff --git a/src/engine/engine_ray.c b/src/engine/engine_ray.c index b520a818..f3fb2705 100644 --- a/src/engine/engine_ray.c +++ b/src/engine/engine_ray.c @@ -1137,14 +1137,13 @@ static int point_in_box(const mjtNum aabb[6], const mjtNum xpos[3], -//---------------------------- main entry point --------------------------------------------------- +//---------------------------- main entry point ---------------------------------------------------- // intersect ray (pnt+x*vec, x>=0) with visible geoms, except geoms on bodyexclude // return geomid and distance (x) to nearest surface, or -1 if no intersection // geomgroup, flg_static are as in mjvOption; geomgroup==NULL skips group exclusion mjtNum mj_ray(const mjModel* m, const mjData* d, const mjtNum* pnt, const mjtNum* vec, - const mjtByte* geomgroup, mjtByte flg_static, int bodyexclude, - int geomid[1]) { + const mjtByte* geomgroup, mjtByte flg_static, int bodyexclude, int geomid[1]) { mjtNum dist, newdist; // check vector length @@ -1154,7 +1153,7 @@ mjtNum mj_ray(const mjModel* m, const mjData* d, const mjtNum* pnt, const mjtNum // clear result dist = -1; - *geomid = -1; + if (geomid) *geomid = -1; // loop over geoms not eliminated by mask and bodyexclude for (int i=0; i < m->ngeom; i++) { @@ -1177,7 +1176,7 @@ mjtNum mj_ray(const mjModel* m, const mjData* d, const mjtNum* pnt, const mjtNum // update if closer intersection found if (newdist >= 0 && (newdist < dist || dist < 0)) { dist = newdist; - *geomid = i; + if (geomid) *geomid = i; } } } diff --git a/src/engine/engine_sensor.c b/src/engine/engine_sensor.c index e1758260..c7150255 100644 --- a/src/engine/engine_sensor.c +++ b/src/engine/engine_sensor.c @@ -40,6 +40,11 @@ static void apply_cutoff(const mjModel* m, mjData* d, mjtStage stage) { // process sensors matching stage and having positive cutoff for (int i=0; i < m->nsensor; i++) { if (m->sensor_needstage[i] == stage && m->sensor_cutoff[i] > 0) { + // skip fromto sensors + if (m->sensor_type[i] == mjSENS_GEOMFROMTO) { + continue; + } + // get sensor info int adr = m->sensor_adr[i]; int dim = m->sensor_dim[i]; @@ -214,9 +219,8 @@ static void cam_project(mjtNum sensordata[2], const mjtNum target_xpos[3], // position-dependent sensors void mj_sensorPos(const mjModel* m, mjData* d) { - int rgeomid, objtype, objid, reftype, refid, adr, offset, nusersensor = 0; - int ne = d->ne, nf = d->nf, nefc = d->nefc; - mjtNum rvec[3], *xpos, *xmat, *xpos_ref, *xmat_ref; + int ne = d->ne, nf = d->nf, nefc = d->nefc, nsensor = m->nsensor; + int nusersensor = 0; // disabled sensors: return if (mjDISABLED(mjDSBL_SENSOR)) { @@ -224,22 +228,26 @@ void mj_sensorPos(const mjModel* m, mjData* d) { } // process sensors matching stage - for (int i=0; i < m->nsensor; i++) { + for (int i=0; i < nsensor; i++) { + mjtSensor type = (mjtSensor) m->sensor_type[i]; + // skip sensor plugins -- these are handled after builtin sensor types - if (m->sensor_type[i] == mjSENS_PLUGIN) { + if (type == mjSENS_PLUGIN) { continue; } if (m->sensor_needstage[i] == mjSTAGE_POS) { // get sensor info - objtype = m->sensor_objtype[i]; - objid = m->sensor_objid[i]; - refid = m->sensor_refid[i]; - reftype = m->sensor_reftype[i]; - adr = m->sensor_adr[i]; + int objtype = m->sensor_objtype[i]; + int objid = m->sensor_objid[i]; + int refid = m->sensor_refid[i]; + int reftype = m->sensor_reftype[i]; + int adr = m->sensor_adr[i]; + + mjtNum rvec[3], *xpos, *xmat, *xpos_ref, *xmat_ref; // process according to type - switch ((mjtSensor) m->sensor_type[i]) { + switch (type) { case mjSENS_MAGNETOMETER: // magnetometer mju_mulMatTVec(d->sensordata+adr, d->site_xmat+9*objid, m->opt.magnetic, 3, 3); break; @@ -255,7 +263,8 @@ void mj_sensorPos(const mjModel* m, mjData* d) { rvec[1] = d->site_xmat[9*objid+5]; rvec[2] = d->site_xmat[9*objid+8]; d->sensordata[adr] = mj_ray(m, d, d->site_xpos+3*objid, rvec, NULL, 1, - m->site_bodyid[objid], &rgeomid); + m->site_bodyid[objid], NULL); + break; case mjSENS_JOINTPOS: // jointpos @@ -303,11 +312,11 @@ void mj_sensorPos(const mjModel* m, mjData* d) { // reference frame unspecified: global frame if (refid == -1) { - if (m->sensor_type[i] == mjSENS_FRAMEPOS) { + if (type == mjSENS_FRAMEPOS) { mju_copy3(d->sensordata+adr, xpos); } else { // offset = (0 or 1 or 2) for (x or y or z)-axis sensors, respectively - offset = m->sensor_type[i] - mjSENS_FRAMEXAXIS; + int offset = type - mjSENS_FRAMEXAXIS; d->sensordata[adr] = xmat[offset]; d->sensordata[adr+1] = xmat[offset+3]; d->sensordata[adr+2] = xmat[offset+6]; @@ -317,12 +326,12 @@ void mj_sensorPos(const mjModel* m, mjData* d) { // reference frame specified else { get_xpos_xmat(d, reftype, refid, i, &xpos_ref, &xmat_ref); - if (m->sensor_type[i] == mjSENS_FRAMEPOS) { + if (type == mjSENS_FRAMEPOS) { mju_sub3(rvec, xpos, xpos_ref); mju_rotVecMatT(d->sensordata+adr, rvec, xmat_ref); } else { // offset = (0 or 1 or 2) for (x or y or z)-axis sensors, respectively - offset = m->sensor_type[i] - mjSENS_FRAMEXAXIS; + int offset = type - mjSENS_FRAMEXAXIS; mjtNum axis[3] = {xmat[offset], xmat[offset+3], xmat[offset+6]}; mju_rotVecMatT(d->sensordata+adr, axis, xmat_ref); } @@ -354,6 +363,99 @@ void mj_sensorPos(const mjModel* m, mjData* d) { mju_copy3(d->sensordata+adr, d->subtree_com+3*objid); break; + case mjSENS_GEOMDIST: // signed distance between two geoms + case mjSENS_GEOMNORMAL: // normal direction between two geoms + case mjSENS_GEOMFROMTO: // segment between two geoms + { + // use cutoff for collision margin + mjtNum margin = m->sensor_cutoff[i]; + + // initialize outputs + mjtNum dist = margin; // collision distance + mjtNum fromto[6] = {0}; // segment between geoms + + // get lists of geoms to collide + int n1, id1; + if (objtype == mjOBJ_BODY) { + n1 = m->body_geomnum[objid]; + id1 = m->body_geomadr[objid]; + } else { + n1 = 1; + id1 = objid; + } + int n2, id2; + if (reftype == mjOBJ_BODY) { + n2 = m->body_geomnum[refid]; + id2 = m->body_geomadr[refid]; + } else { + n2 = 1; + id2 = refid; + } + + // collide all pairs + for (int geom1=id1; geom1 < id1+n1; geom1++) { + for (int geom2=id2; geom2 < id2+n2; geom2++) { + mjtNum fromto_new[6] = {0}; + mjtNum dist_new = mj_geomDistance(m, d, geom1, geom2, margin, fromto_new); + if (dist_new < dist) { + dist = dist_new; + mju_copy(fromto, fromto_new, 6); + } + } + } + + // write sensordata for this sensor and all subsequent sensors with identical signature + int write_sensor = 1; + while (write_sensor) { + // write geom distance + if (type == mjSENS_GEOMDIST) { + d->sensordata[adr] = dist; + } + + // write distance normal + else if (type == mjSENS_GEOMNORMAL) { + mjtNum normal[3] = {fromto[3]-fromto[0], fromto[4]-fromto[1], fromto[5]-fromto[2]}; + if (normal[0] || normal[1] || normal[2]) { + mju_normalize3(normal); + } + mju_copy3(d->sensordata + adr, normal); + } + + // write distance fromto + else { + mju_copy(d->sensordata + adr, fromto, 6); + } + + // if this is the last sensor, break + if (i+1 == nsensor) { + break; + } + + // type of the next sensor + mjtSensor type_next = m->sensor_type[i+1]; + + // check if signature of next sensor matches this sensor + write_sensor = (type_next == mjSENS_GEOMDIST || + type_next == mjSENS_GEOMNORMAL || + type_next == mjSENS_GEOMFROMTO) && + m->sensor_objtype[i+1] == objtype && + m->sensor_objid[i+1] == objid && + m->sensor_reftype[i+1] == reftype && + m->sensor_refid[i+1] == refid && + m->sensor_cutoff[i+1] == margin; + + // if signature matches, increment external loop variable i + if (write_sensor) { + i++; + + // update adr and type, everything else is the same + adr = m->sensor_adr[i]; + type = type_next; + } + } + } + break; + case mjSENS_CLOCK: // clock d->sensordata[adr] = d->time; break; diff --git a/src/engine/engine_support.c b/src/engine/engine_support.c index ba2f6a8a..1b3ee7a3 100644 --- a/src/engine/engine_support.c +++ b/src/engine/engine_support.c @@ -20,6 +20,7 @@ #include #include +#include "engine/engine_collision_driver.h" #include "engine/engine_core_constraint.h" #include "engine/engine_crossplatform.h" #include "engine/engine_io.h" @@ -1703,6 +1704,48 @@ void mj_objectAcceleration(const mjModel* m, const mjData* d, //-------------------------- miscellaneous --------------------------------------------------------- +// returns the smallest distance between two geoms +mjtNum mj_geomDistance(const mjModel* m, const mjData* d, int geom1, int geom2, mjtNum distmax, + mjtNum fromto[6]) { + mjContact con[mjMAXCONPAIR]; + mjtNum dist = distmax; + if (fromto) mju_zero(fromto, 6); + + // flip geom order if required + int flip = m->geom_type[geom1] > m->geom_type[geom2]; + int g1 = flip ? geom2 : geom1; + int g2 = flip ? geom1 : geom2; + int type1 = m->geom_type[g1]; + int type2 = m->geom_type[g2]; + + // call collision function if it exists + if (!mjCOLLISIONFUNC[type1][type2]) { + return dist; + } + int num = mjCOLLISIONFUNC[type1][type2](m, d, con, g1, g2, distmax); + + // find smallest distance + int smallest = -1; + for (int i=0; i < num; i++) { + mjtNum dist_i = con[i].dist; + if (dist_i < dist) { + dist = dist_i; + smallest = i; + } + } + + // write fromto if given and a collision has been found + if (fromto && smallest >= 0) { + mjtNum sign = flip ? -1 : 1; + mju_addScl3(fromto+0, con[smallest].pos, con[smallest].frame, -0.5*sign*dist); + mju_addScl3(fromto+3, con[smallest].pos, con[smallest].frame, 0.5*sign*dist); + } + + return dist; +} + + + // extract 6D force:torque for one contact, in contact frame void mj_contactForce(const mjModel* m, const mjData* d, int id, mjtNum result[6]) { mjContact* con; diff --git a/src/engine/engine_support.h b/src/engine/engine_support.h index a5d3c7ae..d4b6fd46 100644 --- a/src/engine/engine_support.h +++ b/src/engine/engine_support.h @@ -189,6 +189,10 @@ MJAPI void mj_objectAcceleration(const mjModel* m, const mjData* d, //-------------------------- miscellaneous --------------------------------------------------------- +// returns the smallest distance between two geoms +MJAPI mjtNum mj_geomDistance(const mjModel* m, const mjData* d, int geom1, int geom2, + mjtNum distmax, mjtNum fromto[6]); + // extract 6D force:torque for one contact, in contact frame MJAPI void mj_contactForce(const mjModel* m, const mjData* d, int id, mjtNum result[6]); diff --git a/src/engine/engine_vis_visualize.c b/src/engine/engine_vis_visualize.c index 5de671f1..9dca56bd 100644 --- a/src/engine/engine_vis_visualize.c +++ b/src/engine/engine_vis_visualize.c @@ -1974,6 +1974,20 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt, mjv_connector(thisgeom, mjGEOM_LINE, 3, from, to); f2f(thisgeom->rgba, m->vis.rgba.rangefinder, 4); FINISH + } else if (m->sensor_type[i] == mjSENS_GEOMFROMTO) { + // sensor data + mjtNum* fromto = d->sensordata + m->sensor_adr[i]; + + // null output: nothing to render + if (mju_isZero(fromto, 6)) { + continue; + } + + // make ray + START + mjv_connector(thisgeom, mjGEOM_LINE, 3, fromto, fromto+3); + f2f(thisgeom->rgba, m->vis.rgba.rangefinder, 4); + FINISH } } } diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index 8d88b6e3..8ed146e1 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -5388,7 +5388,6 @@ void mjCSensor::ResolveReferences(const mjCModel* m) { ((mjCGeom*)obj)->SetNotVisual(); } - // get sensorized object id } else if (type != mjSENS_CLOCK && type != mjSENS_PLUGIN && type != mjSENS_USER) { throw mjCError(this, "invalid type in sensor"); } @@ -5402,7 +5401,7 @@ void mjCSensor::ResolveReferences(const mjCModel* m) { // find name if (!ref) { - throw mjCError(this, "unrecognized name '%s' of reference frame object", refname_.c_str()); + throw mjCError(this, "unrecognized name '%s' of object", refname_.c_str()); } // must be attached to object with spatial frame @@ -5460,7 +5459,7 @@ void mjCSensor::Compile(void) { case mjSENS_CAMPROJECTION: // must be attached to site if (objtype!=mjOBJ_SITE) { - throw mjCError(this, "sensor must be attached to site: sensor"); + throw mjCError(this, "sensor must be attached to site"); } // set dim and datatype @@ -5498,7 +5497,7 @@ void mjCSensor::Compile(void) { case mjSENS_JOINTACTFRC: // must be attached to joint if (objtype!=mjOBJ_JOINT) { - throw mjCError(this, "sensor must be attached to joint: sensor"); + throw mjCError(this, "sensor must be attached to joint"); } // make sure joint is slide or hinge @@ -5522,7 +5521,7 @@ void mjCSensor::Compile(void) { case mjSENS_TENDONVEL: // must be attached to tendon if (objtype!=mjOBJ_TENDON) { - throw mjCError(this, "sensor must be attached to tendon: sensor"); + throw mjCError(this, "sensor must be attached to tendon"); } // set @@ -5540,7 +5539,7 @@ void mjCSensor::Compile(void) { case mjSENS_ACTUATORFRC: // must be attached to actuator if (objtype!=mjOBJ_ACTUATOR) { - throw mjCError(this, "sensor must be attached to actuator: sensor"); + throw mjCError(this, "sensor must be attached to actuator"); } // set @@ -5559,7 +5558,7 @@ void mjCSensor::Compile(void) { case mjSENS_BALLANGVEL: // must be attached to joint if (objtype!=mjOBJ_JOINT) { - throw mjCError(this, "sensor must be attached to joint: sensor"); + throw mjCError(this, "sensor must be attached to joint"); } // make sure joint is ball @@ -5584,7 +5583,7 @@ void mjCSensor::Compile(void) { case mjSENS_JOINTLIMITFRC: // must be attached to joint if (objtype!=mjOBJ_JOINT) { - throw mjCError(this, "sensor must be attached to joint: sensor"); + throw mjCError(this, "sensor must be attached to joint"); } // make sure joint has limit @@ -5609,7 +5608,7 @@ void mjCSensor::Compile(void) { case mjSENS_TENDONLIMITFRC: // must be attached to tendon if (objtype!=mjOBJ_TENDON) { - throw mjCError(this, "sensor must be attached to tendon: sensor"); + throw mjCError(this, "sensor must be attached to tendon"); } // make sure tendon has limit @@ -5675,7 +5674,7 @@ void mjCSensor::Compile(void) { case mjSENS_SUBTREEANGMOM: // must be attached to body if (objtype!=mjOBJ_BODY) { - throw mjCError(this, "sensor must be attached to body: sensor"); + throw mjCError(this, "sensor must be attached to body"); } // set @@ -5688,6 +5687,34 @@ void mjCSensor::Compile(void) { } break; + case mjSENS_GEOMDIST: + case mjSENS_GEOMNORMAL: + case mjSENS_GEOMFROMTO: + // must be attached to body or geom + if ((objtype!=mjOBJ_BODY && objtype!=mjOBJ_GEOM) || + (reftype!=mjOBJ_BODY && reftype!=mjOBJ_GEOM)) { + throw mjCError(this, "sensor must be attached to body or geom"); + } + + // objects must be different + if (objtype == reftype && obj == ref) { + throw mjCError(this, "1st body/geom must be different from 2nd body/geom"); + } + + // set + needstage = mjSTAGE_POS; + if (type==mjSENS_GEOMDIST) { + dim = 1; + datatype = mjDATATYPE_POSITIVE; + } else if (type==mjSENS_GEOMNORMAL) { + dim = 3; + datatype = mjDATATYPE_AXIS; + } else { + dim = 6; + datatype = mjDATATYPE_REAL; + } + break; + case mjSENS_CLOCK: dim = 1; needstage = mjSTAGE_POS; @@ -5705,7 +5732,7 @@ void mjCSensor::Compile(void) { throw mjCError(this, "datatype AXIS requires dim=3 in sensor"); } - if (datatype==mjDATATYPE_QUATERNION && dim!=4) { + if (datatype==mjDATATYPE_QUATERNION && dim != 4) { throw mjCError(this, "datatype QUATERNION requires dim=4 in sensor"); } break; @@ -5737,7 +5764,8 @@ void mjCSensor::Compile(void) { } // check cutoff for incompatible data types - if (cutoff>0 && (datatype==mjDATATYPE_AXIS || datatype==mjDATATYPE_QUATERNION)) { + if (cutoff > 0 && (datatype == mjDATATYPE_QUATERNION || + (datatype == mjDATATYPE_AXIS && type != mjSENS_GEOMNORMAL))) { throw mjCError(this, "cutoff applied to axis or quaternion datatype in sensor"); } } diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index da9f41e5..1a6c47a2 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -472,6 +472,9 @@ const char* MJCF[nMJCF][mjXATTRNUM] = { {"subtreecom", "*", "5", "name", "body", "cutoff", "noise", "user"}, {"subtreelinvel", "*", "5", "name", "body", "cutoff", "noise", "user"}, {"subtreeangmom", "*", "5", "name", "body", "cutoff", "noise", "user"}, + {"distance", "*", "8", "name", "geom1", "geom2", "body1", "body2", "cutoff", "noise", "user"}, + {"normal", "*", "8", "name", "geom1", "geom2", "body1", "body2", "cutoff", "noise", "user"}, + {"fromto", "*", "8", "name", "geom1", "geom2", "body1", "body2", "cutoff", "noise", "user"}, {"clock", "*", "4", "name", "cutoff", "noise", "user"}, {"user", "*", "9", "name", "objtype", "objname", "datatype", "needstage", "dim", "cutoff", "noise", "user"}, @@ -3949,6 +3952,29 @@ void mjXReader::Sensor(XMLElement* section) { ReadAttrTxt(elem, "body", objname, true); } + // sensors for geometric distance; attached to geoms or bodies + else if (type=="distance" || type=="normal" || type=="fromto") { + bool has_body1 = ReadAttrTxt(elem, "body1", objname); + bool has_geom1 = ReadAttrTxt(elem, "geom1", objname); + if (has_body1 == has_geom1) { + throw mjXError(elem, "exactly one of (geom1, body1) must be specified"); + } + psen->objtype = has_body1 ? mjOBJ_BODY : mjOBJ_GEOM; + bool has_body2 = ReadAttrTxt(elem, "body2", refname); + bool has_geom2 = ReadAttrTxt(elem, "geom2", refname); + if (has_body2 == has_geom2) { + throw mjXError(elem, "exactly one of (geom2, body2) must be specified"); + } + psen->reftype = has_body2 ? mjOBJ_BODY : mjOBJ_GEOM; + if (type=="distance") { + psen->type = mjSENS_GEOMDIST; + } else if (type=="normal") { + psen->type = mjSENS_GEOMNORMAL; + } else { + psen->type = mjSENS_GEOMFROMTO; + } + } + // global sensors else if (type=="clock") { psen->type = mjSENS_CLOCK; diff --git a/src/xml/xml_native_reader.h b/src/xml/xml_native_reader.h index 69059900..e0f857db 100644 --- a/src/xml/xml_native_reader.h +++ b/src/xml/xml_native_reader.h @@ -99,7 +99,7 @@ class mjXReader : public mjXBase { }; // MJCF schema -#define nMJCF 227 +#define nMJCF 230 extern const char* MJCF[nMJCF][mjXATTRNUM]; #endif // MUJOCO_SRC_XML_XML_NATIVE_READER_H_ diff --git a/src/xml/xml_native_writer.cc b/src/xml/xml_native_writer.cc index 3ebc2718..65e21c02 100644 --- a/src/xml/xml_native_writer.cc +++ b/src/xml/xml_native_writer.cc @@ -1875,46 +1875,82 @@ void mjXWriter::Sensor(XMLElement* root) { elem = InsertEnd(section, "framepos"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; case mjSENS_FRAMEQUAT: elem = InsertEnd(section, "framequat"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; case mjSENS_FRAMEXAXIS: elem = InsertEnd(section, "framexaxis"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; case mjSENS_FRAMEYAXIS: elem = InsertEnd(section, "frameyaxis"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; case mjSENS_FRAMEZAXIS: elem = InsertEnd(section, "framezaxis"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; case mjSENS_FRAMELINVEL: elem = InsertEnd(section, "framelinvel"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; case mjSENS_FRAMEANGVEL: elem = InsertEnd(section, "frameangvel"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; case mjSENS_FRAMELINACC: elem = InsertEnd(section, "framelinacc"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; case mjSENS_FRAMEANGACC: elem = InsertEnd(section, "frameangacc"); WriteAttrTxt(elem, "objtype", mju_type2Str(psen->objtype)); WriteAttrTxt(elem, "objname", psen->get_objname()); + if (psen->reftype != mjOBJ_UNKNOWN) { + WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); + WriteAttrTxt(elem, "refname", psen->get_refname()); + } break; // sensors related to kinematic subtrees; attached to a body (which is the subtree root) @@ -1930,6 +1966,21 @@ void mjXWriter::Sensor(XMLElement* root) { elem = InsertEnd(section, "subtreeangmom"); WriteAttrTxt(elem, "body", psen->get_objname()); break; + case mjSENS_GEOMDIST: + elem = InsertEnd(section, "distance"); + WriteAttrTxt(elem, psen->objtype == mjOBJ_BODY ? "body1" : "geom1", psen->get_objname()); + WriteAttrTxt(elem, psen->reftype == mjOBJ_BODY ? "body2" : "geom2", psen->get_refname()); + break; + case mjSENS_GEOMNORMAL: + elem = InsertEnd(section, "normal"); + WriteAttrTxt(elem, psen->objtype == mjOBJ_BODY ? "body1" : "geom1", psen->get_objname()); + WriteAttrTxt(elem, psen->reftype == mjOBJ_BODY ? "body2" : "geom2", psen->get_refname()); + break; + case mjSENS_GEOMFROMTO: + elem = InsertEnd(section, "fromto"); + WriteAttrTxt(elem, psen->objtype == mjOBJ_BODY ? "body1" : "geom1", psen->get_objname()); + WriteAttrTxt(elem, psen->reftype == mjOBJ_BODY ? "body2" : "geom2", psen->get_refname()); + break; // global sensors case mjSENS_CLOCK: @@ -1968,12 +2019,6 @@ void mjXWriter::Sensor(XMLElement* root) { WriteAttr(elem, "noise", 1, &psen->noise, &zero); } WriteVector(elem, "user", psen->get_userdata()); - - // add reference if present - if (psen->reftype != mjOBJ_UNKNOWN && psen->type != mjSENS_CAMPROJECTION) { - WriteAttrTxt(elem, "reftype", mju_type2Str(psen->reftype)); - WriteAttrTxt(elem, "refname", psen->get_refname()); - } } // remove section if empty diff --git a/test/engine/engine_sensor_test.cc b/test/engine/engine_sensor_test.cc index 53101197..0667c321 100644 --- a/test/engine/engine_sensor_test.cc +++ b/test/engine/engine_sensor_test.cc @@ -14,6 +14,8 @@ // Tests for engine/engine_sensor.c. +#include + #include #include #include @@ -44,7 +46,7 @@ using ::testing::StrEq; using SensorTest = MujocoTest; -// --------------------- test sensor disableflag ----------------------------- +// --------------------- test sensor disableflag ------------------------------ // hand-picked positions and orientations for simple expected values TEST_F(SensorTest, DisableSensors) { @@ -255,7 +257,7 @@ TEST_F(RelativeFrameSensorTest, FrameVelLinearFixed) { mj_deleteModel(model); } -// object and reference in the same body, expect angular velocites to be zero +// object and reference in the same body, expect angular velocities to be zero TEST_F(RelativeFrameSensorTest, FrameVelAngFixed) { constexpr char xml[] = R"( @@ -279,7 +281,7 @@ TEST_F(RelativeFrameSensorTest, FrameVelAngFixed) { data->qvel[0] = 1; mj_forward(model, data); - // obj and ref rotate together, relative angular velocites should be zero + // obj and ref rotate together, relative angular velocities should be zero std::vector angvel = GetSensor(model, data, 0); EXPECT_THAT(angvel, Pointwise(DoubleNear(tol), {0, 0, 0})); @@ -415,14 +417,14 @@ TEST_F(SensorTest, Clock) { mjData* data = mj_makeData(model); // call step 4 times, checking that clock works as expected - for (int i=0; i<5; i++) { + for (int i=0; i < 5; i++) { mj_step(model, data); - mj_step1(model, data); // update values of position-based sensors + mj_step1(model, data); // update values of position-based sensors EXPECT_EQ(data->sensordata[0], data->time); EXPECT_EQ(data->sensordata[1], mju_min(data->time, 3e-3)); } - // chack names + // check names const char* name0 = mj_id2name(model, mjOBJ_SENSOR, 0); EXPECT_EQ(name0, nullptr); const char* name1 = mj_id2name(model, mjOBJ_SENSOR, 1); @@ -432,7 +434,80 @@ TEST_F(SensorTest, Clock) { mj_deleteModel(model); } -// ------------------------- camera sensor tests ----------------------------- +// test clock sensor +TEST_F(SensorTest, CollisionSequential) { + constexpr char xml[] = R"( + + + + + + + + + + + + + + + + + + + + + + + + + + + )"; + mjModel* model = LoadModelFromString(xml); + mjData* data = mj_makeData(model); + mj_forward(model, data); + + EXPECT_DOUBLE_EQ(data->sensordata[0], 0.8); + EXPECT_DOUBLE_EQ(data->sensordata[1], 0.7); + EXPECT_DOUBLE_EQ(data->sensordata[2], 0.5); + + mjtNum eps = 1e-14; + + EXPECT_THAT(GetSensor(model, data, 3), + Pointwise(DoubleNear(eps), std::vector{0, 0, 1})); + EXPECT_THAT(GetSensor(model, data, 4), + Pointwise(DoubleNear(eps), std::vector{0, 0, -1})); + EXPECT_THAT(GetSensor(model, data, 5), + Pointwise(DoubleNear(eps), std::vector{1, 0, 0})); + EXPECT_THAT(GetSensor(model, data, 6), + Pointwise(DoubleNear(eps), + std::vector{0, 0, 0, 0, 0, .8})); + EXPECT_THAT(GetSensor(model, data, 7), + Pointwise(DoubleNear(eps), + std::vector{1, 0, .7, 1, 0, 0})); + EXPECT_THAT(GetSensor(model, data, 8), + Pointwise(DoubleNear(eps), + std::vector{.2, 0, 1, .7, 0, 1})); + + EXPECT_THAT(GetSensor(model, data, 9), + Pointwise(DoubleNear(eps), GetSensor(model, data, 0))); + EXPECT_THAT(GetSensor(model, data, 10), + Pointwise(DoubleNear(eps), GetSensor(model, data, 6))); + EXPECT_THAT(GetSensor(model, data, 11), + Pointwise(DoubleNear(eps), GetSensor(model, data, 3))); + EXPECT_THAT(GetSensor(model, data, 12), + Pointwise(DoubleNear(eps), GetSensor(model, data, 5))); + EXPECT_THAT(GetSensor(model, data, 13), + Pointwise(DoubleNear(eps), GetSensor(model, data, 8))); + EXPECT_THAT(GetSensor(model, data, 14), + Pointwise(DoubleNear(eps), GetSensor(model, data, 2))); + + mj_deleteData(data); + mj_deleteModel(model); +} + +// ------------------------- camera sensor tests ------------------------------ // test clock sensor TEST_F(SensorTest, CameraProjection) { diff --git a/test/engine/engine_support_test.cc b/test/engine/engine_support_test.cc index d6a892c1..52e2c5a7 100644 --- a/test/engine/engine_support_test.cc +++ b/test/engine/engine_support_test.cc @@ -34,7 +34,8 @@ std::vector AsVector(const mjtNum* array, int n) { } using ::testing::DoubleNear; -using ::testing::ContainsRegex; +using ::testing::Eq; +using ::testing::ContainsRegex; // NOLINT using ::testing::MatchesRegex; using ::testing::Pointwise; using ::testing::ElementsAreArray; @@ -647,5 +648,79 @@ TEST_F(SupportTest, MulMIsland) { mj_deleteModel(model); } +static constexpr char GeomDistanceTestingModel[] = R"( + + + + + + + + + + + + +)"; + +TEST_F(SupportTest, GeomDistance) { + mjModel* model = LoadModelFromString(GeomDistanceTestingModel); + mjData* data = mj_makeData(model); + mj_kinematics(model, data); + + // plane-sphere, distmax too small + mjtNum distmax = 0.5; + EXPECT_EQ(mj_geomDistance(model, data, 0, 1, distmax, nullptr), 0.5); + mjtNum fromto[6]; + EXPECT_EQ(mj_geomDistance(model, data, 0, 1, distmax, fromto), 0.5); + EXPECT_THAT(fromto, Pointwise(Eq(), std::vector{0, 0, 0, 0, 0, 0})); + + // plane-sphere + distmax = 1.0; + EXPECT_DOUBLE_EQ(mj_geomDistance(model, data, 0, 1, 1.0, fromto), 0.8); + mjtNum eps = 1e-12; + EXPECT_THAT(fromto, Pointwise(DoubleNear(eps), + std::vector{0, 0, 0, 0, 0, 0.8})); + + // sphere-plane + EXPECT_DOUBLE_EQ(mj_geomDistance(model, data, 1, 0, 1.0, fromto), 0.8); + EXPECT_THAT(fromto, Pointwise(DoubleNear(eps), + std::vector{0, 0, 0.8, 0, 0, 0})); + + // sphere-sphere + EXPECT_DOUBLE_EQ(mj_geomDistance(model, data, 1, 2, 1.0, fromto), 0.5); + EXPECT_THAT(fromto, Pointwise(DoubleNear(eps), + std::vector{.2, 0, 1, .7, 0, 1})); + + // sphere-sphere, flipped order + EXPECT_DOUBLE_EQ(mj_geomDistance(model, data, 2, 1, 1.0, fromto), 0.5); + EXPECT_THAT(fromto, Pointwise(DoubleNear(eps), + std::vector{.7, 0, 1, .2, 0, 1})); + + // TODO: b/339596989 - Improve the bounds below (mjc_Convex). + + // mesh-sphere (close distmax) + distmax = 0.701; + eps = 1e-5; + EXPECT_THAT(mj_geomDistance(model, data, 3, 1, distmax, fromto), + DoubleNear(0.7, eps)); + eps = 1e-3; + EXPECT_THAT(fromto, Pointwise(DoubleNear(eps), + std::vector{0, 0, .1, 0, 0, .8})); + + // mesh-sphere (far distmax) + distmax = 1.0; + eps = 1e-3; + EXPECT_THAT(mj_geomDistance(model, data, 3, 1, distmax, fromto), + DoubleNear(0.7, eps)); + eps = 2e-2; + EXPECT_THAT(fromto, Pointwise(DoubleNear(eps), + std::vector{0, 0, .1, 0, 0, .8})); + + mj_deleteData(data); + mj_deleteModel(model); +} + } // namespace } // namespace mujoco diff --git a/test/engine/testdata/sensor/fromto_body_body.xml b/test/engine/testdata/sensor/fromto_body_body.xml new file mode 100644 index 00000000..e185a3ae --- /dev/null +++ b/test/engine/testdata/sensor/fromto_body_body.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/engine/testdata/sensor/fromto_convex.xml b/test/engine/testdata/sensor/fromto_convex.xml new file mode 100644 index 00000000..e46deceb --- /dev/null +++ b/test/engine/testdata/sensor/fromto_convex.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/engine/testdata/sensor/fromto_primitive.xml b/test/engine/testdata/sensor/fromto_primitive.xml new file mode 100644 index 00000000..2d39eaca --- /dev/null +++ b/test/engine/testdata/sensor/fromto_primitive.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/user/user_objects_test.cc b/test/user/user_objects_test.cc index 93043166..f23a7574 100644 --- a/test/user/user_objects_test.cc +++ b/test/user/user_objects_test.cc @@ -542,7 +542,7 @@ TEST_F(RelativeFrameSensorParsingTest, BadRefName) { std::array error; LoadModelFromString(xml, error.data(), error.size()); EXPECT_THAT(error.data(), - HasSubstr("unrecognized name 'wrong_name' of reference frame")); + HasSubstr("unrecognized name 'wrong_name' of object")); EXPECT_THAT(error.data(), HasSubstr("line 8")); } @@ -601,7 +601,7 @@ TEST_F(RelativeFrameSensorParsingTest, BadObjRefName) { ASSERT_THAT(model, IsNull()); EXPECT_THAT( error.data(), - HasSubstr("unrecognized name 'alessio' of reference frame object")); + HasSubstr("unrecognized name 'alessio' of object")); EXPECT_THAT(error.data(), HasSubstr("name 'tom'")); EXPECT_THAT(error.data(), HasSubstr("line 7")); } diff --git a/unity/Runtime/Bindings/MjBindings.cs b/unity/Runtime/Bindings/MjBindings.cs index 79dac388..ca8a3729 100644 --- a/unity/Runtime/Bindings/MjBindings.cs +++ b/unity/Runtime/Bindings/MjBindings.cs @@ -358,9 +358,12 @@ public enum mjtSensor : int{ mjSENS_SUBTREECOM = 34, mjSENS_SUBTREELINVEL = 35, mjSENS_SUBTREEANGMOM = 36, - mjSENS_CLOCK = 37, - mjSENS_PLUGIN = 38, - mjSENS_USER = 39, + mjSENS_GEOMDIST = 37, + mjSENS_GEOMNORMAL = 38, + mjSENS_GEOMFROMTO = 39, + mjSENS_CLOCK = 40, + mjSENS_PLUGIN = 41, + mjSENS_USER = 42, } public enum mjtStage : int{ mjSTAGE_NONE = 0, @@ -6668,6 +6671,9 @@ public static unsafe extern void mj_objectVelocity(mjModel_* m, mjData_* d, int [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mj_objectAcceleration(mjModel_* m, mjData_* d, int objtype, int objid, double* res, int flg_local); +[DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] +public static unsafe extern double mj_geomDistance(mjModel_* m, mjData_* d, int geom1, int geom2, double distmax, double* fromto); + [DllImport("mujoco", CallingConvention = CallingConvention.Cdecl)] public static unsafe extern void mj_contactForce(mjModel_* m, mjData_* d, int id, double* result); From 65d4f04cd42a74411555742febde22adbac0721c Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Fri, 10 May 2024 05:19:33 -0700 Subject: [PATCH 23/62] Add some missing `const` qualifiers. PiperOrigin-RevId: 632463634 Change-Id: Id3e3e53371f8ed53d970ad7c471bbefd2a70cf5a --- doc/includes/references.h | 6 +++--- include/mujoco/mujoco.h | 6 +++--- introspect/functions.py | 6 +++--- src/engine/engine_vis_visualize.c | 8 ++++---- src/engine/engine_vis_visualize.h | 8 ++++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/doc/includes/references.h b/doc/includes/references.h index 18473228..a9a50278 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -2639,9 +2639,9 @@ void mjv_updateSceneState(const mjModel* m, mjData* d, const mjvOption* opt, mjvSceneState* scnstate); void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt, const mjvPerturb* pert, int catmask, mjvScene* scn); -void mjv_makeLights(const mjModel* m, mjData* d, mjvScene* scn); -void mjv_updateCamera(const mjModel* m, mjData* d, mjvCamera* cam, mjvScene* scn); -void mjv_updateSkin(const mjModel* m, mjData* d, mjvScene* scn); +void mjv_makeLights(const mjModel* m, const mjData* d, mjvScene* scn); +void mjv_updateCamera(const mjModel* m, const mjData* d, mjvCamera* cam, mjvScene* scn); +void mjv_updateSkin(const mjModel* m, const mjData* d, mjvScene* scn); void mjr_defaultContext(mjrContext* con); void mjr_makeContext(const mjModel* m, mjrContext* con, int fontscale); void mjr_changeFont(int fontscale, mjrContext* con); diff --git a/include/mujoco/mujoco.h b/include/mujoco/mujoco.h index 72bfc367..a6506395 100644 --- a/include/mujoco/mujoco.h +++ b/include/mujoco/mujoco.h @@ -688,13 +688,13 @@ MJAPI void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt, const mjvPerturb* pert, int catmask, mjvScene* scn); // Make list of lights. -MJAPI void mjv_makeLights(const mjModel* m, mjData* d, mjvScene* scn); +MJAPI void mjv_makeLights(const mjModel* m, const mjData* d, mjvScene* scn); // Update camera. -MJAPI void mjv_updateCamera(const mjModel* m, mjData* d, mjvCamera* cam, mjvScene* scn); +MJAPI void mjv_updateCamera(const mjModel* m, const mjData* d, mjvCamera* cam, mjvScene* scn); // Update skins. -MJAPI void mjv_updateSkin(const mjModel* m, mjData* d, mjvScene* scn); +MJAPI void mjv_updateSkin(const mjModel* m, const mjData* d, mjvScene* scn); //---------------------------------- OpenGL rendering ---------------------------------------------- diff --git a/introspect/functions.py b/introspect/functions.py index d643828b..2bb72499 100644 --- a/introspect/functions.py +++ b/introspect/functions.py @@ -4478,7 +4478,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ FunctionParameterDecl( name='d', type=PointerType( - inner_type=ValueType(name='mjData'), + inner_type=ValueType(name='mjData', is_const=True), ), ), FunctionParameterDecl( @@ -4504,7 +4504,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ FunctionParameterDecl( name='d', type=PointerType( - inner_type=ValueType(name='mjData'), + inner_type=ValueType(name='mjData', is_const=True), ), ), FunctionParameterDecl( @@ -4536,7 +4536,7 @@ FUNCTIONS: Mapping[str, FunctionDecl] = dict([ FunctionParameterDecl( name='d', type=PointerType( - inner_type=ValueType(name='mjData'), + inner_type=ValueType(name='mjData', is_const=True), ), ), FunctionParameterDecl( diff --git a/src/engine/engine_vis_visualize.c b/src/engine/engine_vis_visualize.c index 9dca56bd..f35df109 100644 --- a/src/engine/engine_vis_visualize.c +++ b/src/engine/engine_vis_visualize.c @@ -2063,7 +2063,7 @@ void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* vopt, // make list of lights only -void mjv_makeLights(const mjModel* m, mjData* d, mjvScene* scn) { +void mjv_makeLights(const mjModel* m, const mjData* d, mjvScene* scn) { mjvLight* thislight; // clear counter @@ -2130,7 +2130,7 @@ void mjv_makeLights(const mjModel* m, mjData* d, mjvScene* scn) { // update camera only -void mjv_updateCamera(const mjModel* m, mjData* d, mjvCamera* cam, mjvScene* scn) { +void mjv_updateCamera(const mjModel* m, const mjData* d, mjvCamera* cam, mjvScene* scn) { mjtNum ca, sa, ce, se, move[3], *mat; mjtNum headpos[3], forward[3], up[3], right[3], ipd; @@ -2560,7 +2560,7 @@ void mjv_updateActiveFlex(const mjModel* m, mjData* d, mjvScene* scn, const mjvO // update all skins, here for backward API compatibility -void mjv_updateSkin(const mjModel* m, mjData* d, mjvScene* scn) { +void mjv_updateSkin(const mjModel* m, const mjData* d, mjvScene* scn) { mjvOption opt; mjv_defaultOption(&opt); mjv_updateActiveSkin(m, d, scn, &opt); @@ -2570,7 +2570,7 @@ void mjv_updateSkin(const mjModel* m, mjData* d, mjvScene* scn) { // update visible skins only -void mjv_updateActiveSkin(const mjModel* m, mjData* d, mjvScene* scn, const mjvOption* opt) { +void mjv_updateActiveSkin(const mjModel* m, const mjData* d, mjvScene* scn, const mjvOption* opt) { // process skins for (int i=0; i < m->nskin; i++) { // get info diff --git a/src/engine/engine_vis_visualize.h b/src/engine/engine_vis_visualize.h index 33e8d2e2..e5437624 100644 --- a/src/engine/engine_vis_visualize.h +++ b/src/engine/engine_vis_visualize.h @@ -48,19 +48,19 @@ MJAPI void mjv_addGeoms(const mjModel* m, mjData* d, const mjvOption* opt, const mjvPerturb* pert, int catmask, mjvScene* scn); // make list of lights only -MJAPI void mjv_makeLights(const mjModel* m, mjData* d, mjvScene* scn); +MJAPI void mjv_makeLights(const mjModel* m, const mjData* d, mjvScene* scn); // update camera only -MJAPI void mjv_updateCamera(const mjModel* m, mjData* d, mjvCamera* cam, mjvScene* scn); +MJAPI void mjv_updateCamera(const mjModel* m, const mjData* d, mjvCamera* cam, mjvScene* scn); // update visible flexes only MJAPI void mjv_updateActiveFlex(const mjModel* m, mjData* d, mjvScene* scn, const mjvOption* opt); // update skins only -MJAPI void mjv_updateSkin(const mjModel* m, mjData* d, mjvScene* scn); +MJAPI void mjv_updateSkin(const mjModel* m, const mjData* d, mjvScene* scn); // update visible skins only -MJAPI void mjv_updateActiveSkin(const mjModel* m, mjData* d, mjvScene* scn, const mjvOption* opt); +MJAPI void mjv_updateActiveSkin(const mjModel* m, const mjData* d, mjvScene* scn, const mjvOption* opt); #define mjNCATENARY 31 From a9308a4420538cb7bf631a46b9b9eb3a63d51351 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Hodossy?= Date: Fri, 10 May 2024 16:12:51 +0100 Subject: [PATCH 24/62] Remove sensor noise properties --- unity/Runtime/Components/MjGlobalSettings.cs | 4 ---- unity/Runtime/Components/Sensors/MjBaseSensor.cs | 6 ------ 2 files changed, 10 deletions(-) diff --git a/unity/Runtime/Components/MjGlobalSettings.cs b/unity/Runtime/Components/MjGlobalSettings.cs index 171039a1..cd1bbe40 100644 --- a/unity/Runtime/Components/MjGlobalSettings.cs +++ b/unity/Runtime/Components/MjGlobalSettings.cs @@ -73,7 +73,6 @@ public struct MjcfOptionFlag { public EnableDisableFlag Override; public EnableDisableFlag Energy; public EnableDisableFlag FwdInv; - public EnableDisableFlag SensorNoise; public EnableDisableFlag MultiCCD; public static MjcfOptionFlag Default = new MjcfOptionFlag() { Constraint = EnableDisableFlag.enable, @@ -91,7 +90,6 @@ public struct MjcfOptionFlag { Override = EnableDisableFlag.disable, Energy = EnableDisableFlag.disable, FwdInv = EnableDisableFlag.disable, - SensorNoise = EnableDisableFlag.disable, MultiCCD = EnableDisableFlag.disable }; @@ -114,7 +112,6 @@ public struct MjcfOptionFlag { Override = mjcf.GetEnumAttribute("override", localDefault.Override); Energy = mjcf.GetEnumAttribute("energy", localDefault.Energy); FwdInv = mjcf.GetEnumAttribute("fwdinv", localDefault.FwdInv); - SensorNoise = mjcf.GetEnumAttribute("sensornoise", localDefault.SensorNoise); MultiCCD = mjcf.GetEnumAttribute("multiccd", localDefault.MultiCCD); } @@ -134,7 +131,6 @@ public struct MjcfOptionFlag { mjcf.SetAttribute("override", Override.ToString()); mjcf.SetAttribute("energy", Energy.ToString()); mjcf.SetAttribute("fwdinv", FwdInv.ToString()); - mjcf.SetAttribute("sensornoise", SensorNoise.ToString()); mjcf.SetAttribute("multiccd", MultiCCD.ToString()); } } diff --git a/unity/Runtime/Components/Sensors/MjBaseSensor.cs b/unity/Runtime/Components/Sensors/MjBaseSensor.cs index d3a5294c..2628a648 100644 --- a/unity/Runtime/Components/Sensors/MjBaseSensor.cs +++ b/unity/Runtime/Components/Sensors/MjBaseSensor.cs @@ -38,10 +38,6 @@ namespace Mujoco { // supported observation types. public abstract class MjBaseSensor : MjComponent { - [Tooltip("The standard deviation of zero-mean Gaussian noise added to the sensor output.")] - [AbsoluteValue] - public float Noise = 0.0f; - [Tooltip("When this value is positive, it limits the absolute value of the sensor output.")] [AbsoluteValue] public float Cutoff = 0.0f; @@ -53,7 +49,6 @@ public abstract class MjBaseSensor : MjComponent { // Parse the component settings from an external Mjcf. protected override void OnParseMjcf(XmlElement mjcf) { - Noise = mjcf.GetFloatAttribute("noise", defaultValue: 0.0f); Cutoff = mjcf.GetFloatAttribute("cutoff", defaultValue: 0.0f); FromMjcf(mjcf); } @@ -61,7 +56,6 @@ public abstract class MjBaseSensor : MjComponent { // Generate implementation specific XML element. protected override XmlElement OnGenerateMjcf(XmlDocument doc) { var mjcf = ToMjcf(doc); - mjcf.SetAttribute("noise", Noise.ToString()); mjcf.SetAttribute("cutoff", Cutoff.ToString()); return mjcf; } From c6b1293e58fe9dbbcd144e4cbf9bed423439f473 Mon Sep 17 00:00:00 2001 From: Baruch Tabanpour Date: Fri, 10 May 2024 13:40:29 -0700 Subject: [PATCH 25/62] Add contact force support function. #1555 PiperOrigin-RevId: 632591177 Change-Id: I15aa00686d9f885330506d2d63443c700cc029f6 --- mjx/mujoco/mjx/_src/support.py | 40 +++++++++++++++++++ mjx/mujoco/mjx/_src/support_test.py | 59 +++++++++++++++++++++++++++++ mjx/mujoco/mjx/test_data/convex.xml | 4 -- 3 files changed, 99 insertions(+), 4 deletions(-) diff --git a/mjx/mujoco/mjx/_src/support.py b/mjx/mujoco/mjx/_src/support.py index 7b17fcfa..421126f9 100644 --- a/mjx/mujoco/mjx/_src/support.py +++ b/mjx/mujoco/mjx/_src/support.py @@ -277,3 +277,43 @@ def name2id( } return names_map.get(name, -1) + + +def _decode_pyramid( + pyramid: jax.Array, mu: jax.Array, condim: int +) -> jax.Array: + """Converts pyramid representation to contact force.""" + force = jp.zeros(6, dtype=float) + if condim == 1: + return force.at[0].set(pyramid[0]) + + # force_normal = sum(pyramid0_i + pyramid1_i) + force = force.at[0].set(pyramid[0 : 2 * (condim - 1)].sum()) + + # force_tangent_i = (pyramid0_i - pyramid1_i) * mu_i + i = np.arange(0, condim) + force = force.at[i + 1].set((pyramid[2 * i] - pyramid[2 * i + 1]) * mu[i]) + + return force + + +def contact_force( + m: Model, d: Data, contact_id: int, to_world_frame: bool = False +) -> jax.Array: + """Extract 6D force:torque for one contact, in contact frame by default.""" + efc_address = d.contact.efc_address[contact_id] + condim = d.contact.dim[contact_id] + if m.opt.cone == mujoco.mjtCone.mjCONE_PYRAMIDAL: + force = _decode_pyramid( + d.efc_force[efc_address:], d.contact.friction[contact_id], condim + ) + elif m.opt.cone == mujoco.mjtCone.mjCONE_ELLIPTIC: + raise NotImplementedError('Elliptic cone force is not implemented yet.') + else: + raise ValueError(f'Unknown cone type: {m.opt.cone}') + + if to_world_frame: + force = force.reshape((-1, 3)) @ d.contact.frame[contact_id] + force = force.reshape(-1) + + return force * (efc_address >= 0) diff --git a/mjx/mujoco/mjx/_src/support_test.py b/mjx/mujoco/mjx/_src/support_test.py index 4aaebad4..ae539f15 100644 --- a/mjx/mujoco/mjx/_src/support_test.py +++ b/mjx/mujoco/mjx/_src/support_test.py @@ -157,6 +157,65 @@ class SupportTest(parameterized.TestCase): i = i if n is not None else -1 self.assertEqual(support.name2id(mx, obj, n), i) + _CONTACTS = """ + + + + + + + + + + + + + + + + + """ + + def test_contact_force(self): + m = mujoco.MjModel.from_xml_string(self._CONTACTS) + d = mujoco.MjData(m) + mujoco.mj_step(m, d) + assert ( + np.unique(d.contact.geom).shape[0] == 3 + ), 'This test assumes all capsule are in contact.' + mx = mjx.put_model(m) + dx = mjx.put_data(m, d) + mujoco.mj_step(m, d) + dx = mjx.step(mx, dx) + + # map MJX contacts to MJ ones + def _find(g): + val = (g == dx.contact.geom).sum(axis=1) + return np.where(val == 2)[0][0] + + contact_id_map = {i: _find(d.contact.geom[i]) for i in range(d.ncon)} + + for i in range(d.ncon): + result = np.zeros(6, dtype=float) + mujoco.mj_contactForce(m, d, i, result) + + j = contact_id_map[i] + force = jax.jit(support.contact_force, static_argnums=(2,))(mx, dx, j) + np.testing.assert_allclose(result, force, rtol=1e-5, atol=2) + + # test world conversion + force = jax.jit( + support.contact_force, + static_argnums=( + 2, + 3, + ), + )(mx, dx, j, True) + # back to contact frame + force = force.at[:3].set(dx.contact.frame[j] @ force[:3]) + force = force.at[3:].set(dx.contact.frame[j] @ force[3:]) + np.testing.assert_allclose(result, force, rtol=1e-5, atol=2) + if __name__ == '__main__': absltest.main() diff --git a/mjx/mujoco/mjx/test_data/convex.xml b/mjx/mujoco/mjx/test_data/convex.xml index 1006cb7a..382273d7 100644 --- a/mjx/mujoco/mjx/test_data/convex.xml +++ b/mjx/mujoco/mjx/test_data/convex.xml @@ -1,8 +1,4 @@ - - - - From 3809951172f6655e291b1f7ca8cd8c720fe6152a Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Mon, 13 May 2024 08:05:39 -0700 Subject: [PATCH 26/62] Add sensor to replicate example model. Fixes #1654 PiperOrigin-RevId: 633213086 Change-Id: I1672cf31871637497bcb0f26880e0a41a9f510bc --- doc/XMLreference.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index 1441d293..fbb6f9fb 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -214,6 +214,10 @@ and namespaced appropriately. Detailed examples of models using replicate can be + + + + Results in this model: @@ -227,6 +231,13 @@ and namespaced appropriately. Detailed examples of models using replicate can be + + + + + + + .. _include: From c6e88d3a721ec5c75247d3c8531cd9c6640ca048 Mon Sep 17 00:00:00 2001 From: Nimrod Gileadi Date: Tue, 14 May 2024 04:57:29 -0700 Subject: [PATCH 27/62] Add hash for jaxlib wheel. PiperOrigin-RevId: 633543166 Change-Id: I36df252d8fc213a3025c017bff0d706f66154cdd --- mjx/requirements.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mjx/requirements.txt b/mjx/requirements.txt index bc3ba44b..7db3f624 100644 --- a/mjx/requirements.txt +++ b/mjx/requirements.txt @@ -32,7 +32,8 @@ jaxlib==0.4.18; python_version >= '3.9' \ --hash=sha256:f7787a5531d226d6cc9ec2baa7141260bb713435e1cfc053cb9f5cefa9756ac3 \ --hash=sha256:6cb20bbbdafd90e71ad0deb9295519a0175c108c8c557b84fb9fe94f751daee4 \ --hash=sha256:116a0d6aedd3e856b52493d7e392fb1b40952b84fb72448fde1c1ab5687db667 \ - --hash=sha256:9593ff69f424947567e206f3e356b2a2df55ca68e6d815d5adc6cae308e8f652 + --hash=sha256:9593ff69f424947567e206f3e356b2a2df55ca68e6d815d5adc6cae308e8f652 \ + --hash=sha256:2b17b3f05b3bbf8e0ddb85fba339525ac03bac21c9f26d0f83dcea1b1654353e pip==23.3.1 \ --hash=sha256:55eb67bb6171d37447e82213be585b75fe2b12b359e993773aca4de9247a052b pytest==7.4.2 \ From b8a8d811e1a007066a84c5e81873c87cff8ce5b9 Mon Sep 17 00:00:00 2001 From: Yuval Tassa Date: Tue, 14 May 2024 06:00:31 -0700 Subject: [PATCH 28/62] Update documentation for URDF parsing, noting different default values for compiler attributes. PiperOrigin-RevId: 633556582 Change-Id: Ibf99b034706afc14f54bfc34e082465d025719d2 --- doc/modeling.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/modeling.rst b/doc/modeling.rst index 27f2f6aa..6fbd46af 100644 --- a/doc/modeling.rst +++ b/doc/modeling.rst @@ -1489,7 +1489,9 @@ sub-elements :ref:`compiler `, :ref:`option diff --git a/test/user/testdata/shark_22_binary_fTetWild.xml b/test/user/testdata/shark_22_binary_fTetWild.xml index 95ce1873..e4ecc6b1 100644 --- a/test/user/testdata/shark_22_binary_fTetWild.xml +++ b/test/user/testdata/shark_22_binary_fTetWild.xml @@ -20,6 +20,7 @@ + From 727893f0f293da9bbdb9c9b5a92275fe48707087 Mon Sep 17 00:00:00 2001 From: Tom Erez Date: Sat, 18 May 2024 03:37:10 -0700 Subject: [PATCH 36/62] Add timeconst attribute to position actuator. PiperOrigin-RevId: 635018979 Change-Id: I919573f4241ecb4a4c61c3b8b6641b31aa79eca4 --- doc/XMLreference.rst | 26 ++++++--- doc/XMLschema.rst | 4 +- doc/changelog.rst | 6 +- src/user/user_objects.cc | 2 +- src/xml/xml_native_reader.cc | 15 +++-- test/xml/xml_native_reader_test.cc | 92 ++++++++++++++++++++++++++++++ 6 files changed, 127 insertions(+), 18 deletions(-) diff --git a/doc/XMLreference.rst b/doc/XMLreference.rst index 71250379..86bff885 100644 --- a/doc/XMLreference.rst +++ b/doc/XMLreference.rst @@ -4972,15 +4972,16 @@ This element does not have custom attributes. It only has common attributes, whi :el-prefix:`actuator/` |-| **position** (*) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -This element creates a position servo. The underlying :el:`general` attributes are set as follows: +This element creates a position servo with an optional first-order filter. The underlying :el:`general` attributes are +set as follows: -========= ======= ========= ========= -Attribute Setting Attribute Setting -========= ======= ========= ========= -dyntype none dynprm 1 0 0 -gaintype fixed gainprm kp 0 0 -biastype affine biasprm 0 -kp -kv -========= ======= ========= ========= +========= =================== ========= ============= +Attribute Setting Attribute Setting +========= =================== ========= ============= +dyntype none or filterexact dynprm timeconst 0 0 +gaintype fixed gainprm kp 0 0 +biastype affine biasprm 0 -kp -kv +========= =================== ========= ============= This element has one custom attribute in addition to the common attributes: @@ -5040,6 +5041,13 @@ This element has one custom attribute in addition to the common attributes: Damping applied by the actuator. When using this attribute, it is recommended to use the implicitfast or implicit :ref:`integrators`. +.. _actuator-position-timeconst: + +:at:`timeconst`: :at-val:`real, "0"` + Time-constant of the first-order filter. If larger than zero, the actuator uses the :at:`filterexact` + :ref:`dynamics type`, if zero (the default) no filter is used. + + .. _actuator-position-inheritrange: :at:`inheritrange`: :at-val:`real, "0"` @@ -8085,6 +8093,8 @@ tendon, slidersite, cranksite. .. _default-position-kv: +.. _default-position-timeconst: + :el-prefix:`default/` |-| **position** (?) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/doc/XMLschema.rst b/doc/XMLschema.rst index 31278134..05b91a64 100644 --- a/doc/XMLschema.rst +++ b/doc/XMLschema.rst @@ -705,7 +705,7 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`cranksite` | :ref:`site` | :ref:`refsite` | :ref:`kp` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`kv` | | | | | +| | | | :ref:`kv` | :ref:`timeconst` | | | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| actuator |br| |_| |L| | | .. table:: | @@ -1477,7 +1477,7 @@ | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | | | | | :ref:`forcerange` | :ref:`gear` | :ref:`cranklength` | :ref:`user` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | -| | | | :ref:`group` | :ref:`kp` | :ref:`kv` | | | +| | | | :ref:`group` | :ref:`kp` | :ref:`kv` | :ref:`timeconst` | | | | | +-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+-----------------------------------------------------------------+ | +------------------------------------+----+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | |_| default |br| |_| |L| | | .. table:: | diff --git a/doc/changelog.rst b/doc/changelog.rst index ad37c39b..a2f528fc 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -11,13 +11,15 @@ General 1. Added :ref:`mj_geomDistance` for computing the shortest signed distance between two geoms and optionally a segment connecting them. Relatedly, added the 3 sensors: :ref:`distance`, :ref:`normal`, :ref:`fromto`. See the function and sensor documentation for details. Fixes :github:issue:`51`. +2. Added :ref:`timeconst` attribute to the :ref:`position actuator`. + When set to a positive value, the actuator is made stateful with :at:`filterexact` dynamics. Bug fixes ^^^^^^^^^ -2. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is +3. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is often the case for URDF imports. Fixes :github:issue:`1069`, :github:issue:`1577`. -3. Fixed a bug that was causing the visualization of SDF iterations to write outside the size of the vector storing +4. Fixed a bug that was causing the visualization of SDF iterations to write outside the size of the vector storing them. Fixes :github:issue:`1539`. Version 3.1.5 (May 7, 2024) diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index eaf2dfaf..17b314ec 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -5125,7 +5125,7 @@ void mjCActuator::Compile(void) { gainprm[0] == -biasprm[1] && inheritrange > 0) { // semantic of actuator is the same as transmission, inheritrange is applicable double* range; - if (dyntype == mjDYN_NONE) { + if (dyntype == mjDYN_NONE || dyntype == mjDYN_FILTEREXACT) { // position actuator range = ctrlrange; } else if (dyntype == mjDYN_INTEGRATOR) { diff --git a/src/xml/xml_native_reader.cc b/src/xml/xml_native_reader.cc index 1a6c47a2..2ea4ec75 100644 --- a/src/xml/xml_native_reader.cc +++ b/src/xml/xml_native_reader.cc @@ -177,9 +177,8 @@ const char* MJCF[nMJCF][mjXATTRNUM] = { "dyntype", "gaintype", "biastype", "dynprm", "gainprm", "biasprm", "actearly"}, {"motor", "?", "8", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "gear", "cranklength", "user", "group"}, - {"position", "?", "11", "ctrllimited", "forcelimited", "ctrlrange", "inheritrange", - "forcerange", "gear", "cranklength", "user", "group", - "kp", "kv"}, + {"position", "?", "12", "ctrllimited", "forcelimited", "ctrlrange", "inheritrange", + "forcerange", "gear", "cranklength", "user", "group", "kp", "kv", "timeconst"}, {"velocity", "?", "9", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "gear", "cranklength", "user", "group", "kv"}, @@ -390,11 +389,11 @@ const char* MJCF[nMJCF][mjXATTRNUM] = { "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "lengthrange", "gear", "cranklength", "user", "joint", "jointinparent", "tendon", "slidersite", "cranksite", "site", "refsite"}, - {"position", "*", "21", "name", "class", "group", + {"position", "*", "22", "name", "class", "group", "ctrllimited", "forcelimited", "ctrlrange", "inheritrange", "forcerange", "lengthrange", "gear", "cranklength", "user", "joint", "jointinparent", "tendon", "slidersite", "cranksite", "site", "refsite", - "kp", "kv"}, + "kp", "kv", "timeconst"}, {"velocity", "*", "19", "name", "class", "group", "ctrllimited", "forcelimited", "ctrlrange", "forcerange", "lengthrange", "gear", "cranklength", "user", @@ -2094,6 +2093,12 @@ void mjXReader::OneActuator(XMLElement* elem, mjsActuator* pact) { pact->biasprm[2] *= -1; } + if (ReadAttr(elem, "timeconst", 1, pact->dynprm, text)) { + if (pact->dynprm[0] < 0) + throw mjXError(elem, "timeconst cannot be negative"); + pact->dyntype = pact->dynprm[0] ? mjDYN_FILTEREXACT : mjDYN_NONE; + } + ReadAttr(elem, "inheritrange", 1, &pact->inheritrange, text); if (pact->inheritrange > 0) { if (type == "position") { diff --git a/test/xml/xml_native_reader_test.cc b/test/xml/xml_native_reader_test.cc index 4c387975..12d38ce5 100644 --- a/test/xml/xml_native_reader_test.cc +++ b/test/xml/xml_native_reader_test.cc @@ -1407,6 +1407,98 @@ TEST_F(ActuatorTest, ReadsByte) { using ActuatorParseTest = MujocoTest; +TEST_F(ActuatorParseTest, PositionTimeconst) { + static constexpr char xml[] = R"( + + + + + + + + + + + + )"; + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, NotNull()); + ASSERT_NEAR(model->actuator_dynprm[0], 2.0, 1e-6); + EXPECT_THAT(model->actuator_dyntype[0], Eq(mjDYN_FILTEREXACT)); + mj_deleteModel(model); +} + +TEST_F(ActuatorParseTest, PositionTimeconstInheritrange) { + static constexpr char xml[] = R"( + + + + + + + + + + + + )"; + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, NotNull()); + mj_deleteModel(model); +} + +TEST_F(ActuatorParseTest, PositionTimeconstDefault) { + static constexpr char xml[] = R"( + + + + + + + + + + + + + + + )"; + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, NotNull()); + ASSERT_NEAR(model->actuator_dynprm[0], 1.0, 1e-6); + EXPECT_THAT(model->actuator_dyntype[0], Eq(mjDYN_FILTEREXACT)); + mj_deleteModel(model); +} + +TEST_F(ActuatorParseTest, PositionTimeconstDefaultOverride) { + static constexpr char xml[] = R"( + + + + + + + + + + + + + + + )"; + std::array error; + mjModel* model = LoadModelFromString(xml, error.data(), error.size()); + ASSERT_THAT(model, NotNull()); + EXPECT_FALSE(model->actuator_dynprm[0]); + EXPECT_THAT(model->actuator_dyntype[0], Eq(mjDYN_NONE)); + mj_deleteModel(model); +} + TEST_F(ActuatorParseTest, ReadsDamper) { static constexpr char xml[] = R"( From f2732c336ebd4162c4a5e3602df006c0480d2b84 Mon Sep 17 00:00:00 2001 From: Kevin Zakka Date: Mon, 20 May 2024 08:33:42 -0700 Subject: [PATCH 37/62] Add Unitree G1 to model docs. PiperOrigin-RevId: 635464942 Change-Id: I970351ebc3723bff6ae14e08595a7365c861004e --- doc/models.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/models.rst b/doc/models.rst index c6bbc815..39057ab9 100644 --- a/doc/models.rst +++ b/doc/models.rst @@ -34,6 +34,8 @@ Humanoids * - Model - Preview + * - `Unitree G1 `_ + - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/unitree_g1/g1.png * - `Unitree H1 `_ - .. image:: https://raw.githubusercontent.com/google-deepmind/mujoco_menagerie/main/unitree_h1/h1.png * - `Robotis OP3 `_ From f0b633de6a7f445b6b93c16766a7473495c4e7ec Mon Sep 17 00:00:00 2001 From: Kevin Zakka Date: Mon, 20 May 2024 23:47:38 -0700 Subject: [PATCH 38/62] Fix typos in `least_squares` notebook. PiperOrigin-RevId: 635696410 Change-Id: Iba9a2c8f121ca4994678ba933e19dce5323da27b --- python/least_squares.ipynb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/python/least_squares.ipynb b/python/least_squares.ipynb index ed3b8063..80819e91 100644 --- a/python/least_squares.ipynb +++ b/python/least_squares.ipynb @@ -2179,7 +2179,7 @@ "source": [ "### Non-quadratic norms\n", "\n", - "As explained in the background section, Least Squares can be generalized to norms other than the quadratic. We are now in a position to show how to define a non-quadratic norm, which is important in the estimation and system-identification contexts, where long-taled, disturbance-rejecting distributions are proportional to the exponent of a non-quadratic function.\n", + "As explained in the background section, Least Squares can be generalized to norms other than the quadratic. We are now in a position to show how to define a non-quadratic norm, which is important in the estimation and system-identification contexts, where long-tailed, disturbance-rejecting distributions are proportional to the exponent of a non-quadratic function.\n", "\n", "Let's say that we wish the task residual i.e., the vector from the hand to the target, to be evaluated with the \"Smooth L2\" function $c(r)$ which, for a given smoothing radius $d \\gt 0$ is\n", "$$\n", @@ -2193,7 +2193,7 @@ "H &=\\tfrac{\\partial^2 c}{\\partial r^2} = \\frac{I_{n_r} - g\\cdot g^T}{s}\n", "\\end{align}\n", "$$\n", - "There is no particularly good reason to use this norm for this optimization task, it is meerly an example.\n", + "There is no particularly good reason to use this norm for this optimization task, it is merely an example.\n", "\n", "Let's read the documentation of the `minimize.Norm` class:\n" ] @@ -2215,7 +2215,7 @@ "id": "3JGpR47DQ9S2" }, "source": [ - "Our sensors are 3 `r_pos` residual values for the hand-to-object vector followed by 21 `r_torque` actuator torques, for a total of `ns = 24` sensors. These are concatented for the entire trajectory, leading to a residual of size `24*N`, where `N` is the number of timesteps in a trajectory. After reshaping and slicing appropriately, the norm implementation looks like" + "Our sensors are 3 `r_pos` residual values for the hand-to-object vector followed by 21 `r_torque` actuator torques, for a total of `ns = 24` sensors. These are concatenated for the entire trajectory, leading to a residual of size `24*N`, where `N` is the number of timesteps in a trajectory. After reshaping and slicing appropriately, the norm implementation looks as follows:" ] }, { @@ -2291,7 +2291,7 @@ "id": "J0brs9pG0-8Y" }, "source": [ - "Now that we are confident of our implemetation, we can see what the solution looks like:" + "Now that we are confident in our implemetation, we can see what the solution looks like:" ] }, { From 9e0a437e2aab43a0bcdb55106963b97a04f18156 Mon Sep 17 00:00:00 2001 From: JunYoung Kim Date: Tue, 21 May 2024 16:32:54 +0900 Subject: [PATCH 39/62] fixed minimal example shown at mjx.rst --- doc/mjx.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/mjx.rst b/doc/mjx.rst index 22a13490..0e3c52f8 100644 --- a/doc/mjx.rst +++ b/doc/mjx.rst @@ -100,7 +100,7 @@ Neither ``mjx.Model`` nor ``mjx.Data`` are meant to be constructed manually. An .. code-block:: python model = mujoco.MjModel.from_xml_string("...") - mjx_model = mjx.device_put(model) + mjx_model = mjx.put_model(model) mjx_data = mjx.make_data(model) Using ``mjx.make_data`` may be preferable when constructing batched ``mjx.Data`` structures inside of a ``vmap``. @@ -151,7 +151,7 @@ Minimal example """ model = mujoco.MjModel.from_xml_string(XML) - mjx_model = mjx.device_put(model) + mjx_model = mjx.put_model(model) @jax.vmap def batched_step(vel): From 2f19941fcfb2b5c87f0832b88cabb551cb6deb56 Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Tue, 21 May 2024 03:36:21 -0700 Subject: [PATCH 40/62] Move mj_loadModel to xml_api.cc. PiperOrigin-RevId: 635748029 Change-Id: Ie4c7d34c9738e5497ec700089d4dba780ba7d5ed --- src/engine/engine_io.c | 38 ++------------------------------------ src/engine/engine_io.h | 5 ++--- src/xml/xml_api.cc | 31 +++++++++++++++++++++++++++++++ src/xml/xml_api.h | 3 +++ 4 files changed, 38 insertions(+), 39 deletions(-) diff --git a/src/engine/engine_io.c b/src/engine/engine_io.c index 49862691..42319202 100644 --- a/src/engine/engine_io.c +++ b/src/engine/engine_io.c @@ -27,13 +27,11 @@ #include #include #include "engine/engine_crossplatform.h" -#include "engine/engine_resource.h" #include "engine/engine_macro.h" #include "engine/engine_plugin.h" #include "engine/engine_util_blas.h" #include "engine/engine_util_errmem.h" #include "engine/engine_util_misc.h" -#include "engine/engine_vfs.h" #include "thread/thread_pool.h" #ifdef ADDRESS_SANITIZER @@ -714,36 +712,17 @@ void mj_saveModel(const mjModel* m, const char* filename, void* buffer, int buff } - -// load model from binary MJB resource -mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { +// load binary MJB model +mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz) { int header[NHEADER] = {0}; int expected_header[NHEADER] = {ID, sizeof(mjtNum), getnint(), getnsize(), getnptr()}; int ints[256]; size_t sizes[8]; int ptrbuf = 0; mjModel *m = 0; - mjResource* r = NULL; - - // first try vfs, otherwise try a provider or OS filesystem - if (!(r = mju_openVfsResource(filename, vfs))) { - char error[1024]; - if (!(r = mju_openResource(filename, error, 1024))) { - mju_warning("%s", error); - return NULL; - } - } - - const void* buffer = NULL; - int buffer_sz = mju_readResource(r, &buffer); - if (buffer_sz <= 0) { - mju_closeResource(r); - return NULL; - } if (buffer_sz < NHEADER*sizeof(int)) { mju_warning("Model file has an incomplete header"); - mju_closeResource(r); return NULL; } @@ -755,27 +734,22 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { switch (i) { case 0: mju_warning("Model missing header ID"); - mju_closeResource(r); return NULL; case 1: mju_warning("Model and executable have different floating point precision"); - mju_closeResource(r); return NULL; case 2: mju_warning("Model and executable have different number of ints in mjModel"); - mju_closeResource(r); return NULL; case 3: mju_warning("Model and executable have different number of size_t members in mjModel"); - mju_closeResource(r); return NULL; default: mju_warning("Model and executable have different number of pointers in mjModel"); - mju_closeResource(r); return NULL; } } @@ -783,7 +757,6 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { // read mjModel structure: info only if (ptrbuf + sizeof(int)*getnint() + sizeof(size_t)*getnsize() > buffer_sz) { - mju_closeResource(r); mju_warning("Truncated model file - ran out of data while reading sizes"); return NULL; } @@ -802,7 +775,6 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { ints[56], ints[57], ints[58], ints[59], ints[60], ints[61], ints[62], ints[63]); if (!m || m->nbuffer != sizes[getnsize()-1]) { - mju_closeResource(r); mju_warning("Corrupted model, wrong size parameters"); mj_deleteModel(m); return NULL; @@ -820,7 +792,6 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { // read options and buffer if (ptrbuf + sizeof(mjOption) + sizeof(mjVisual) + sizeof(mjStatistic) > buffer_sz) { - mju_closeResource(r); mju_warning("Truncated model file - ran out of data while reading structs"); return NULL; } @@ -831,7 +802,6 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { MJMODEL_POINTERS_PREAMBLE(m) #define X(type, name, nr, nc) \ if (ptrbuf + sizeof(type) * (m->nr) * (nc) > buffer_sz) { \ - mju_closeResource(r); \ mju_warning( \ "Truncated model file - ran out of data while reading " #name); \ mj_deleteModel(m); \ @@ -845,7 +815,6 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { // make sure buffer is the correct size if (ptrbuf != buffer_sz) { - mju_closeResource(r); mju_warning("Model file is too large"); mj_deleteModel(m); return NULL; @@ -853,18 +822,15 @@ mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { const char* validationError = mj_validateReferences(m); if (validationError) { - mju_closeResource(r); mju_warning("%s", validationError); mj_deleteModel(m); return NULL; } - mju_closeResource(r); return m; } - // de-allocate mjModel void mj_deleteModel(mjModel* m) { if (m) { diff --git a/src/engine/engine_io.h b/src/engine/engine_io.h index 7d64ec55..fb0b454a 100644 --- a/src/engine/engine_io.h +++ b/src/engine/engine_io.h @@ -71,9 +71,8 @@ MJAPI mjModel* mj_copyModel(mjModel* dest, const mjModel* src); // save model to binary file MJAPI void mj_saveModel(const mjModel* m, const char* filename, void* buffer, int buffer_sz); -// load model from binary MJB file -// if vfs is not NULL, look up file in vfs before reading from disk -MJAPI mjModel* mj_loadModel(const char* filename, const mjVFS* vfs); +// load binary MJB +mjModel* mj_loadModelBuffer(const void* buffer, int buffer_sz); // de-allocate model MJAPI void mj_deleteModel(mjModel* m); diff --git a/src/xml/xml_api.cc b/src/xml/xml_api.cc index c3cab08d..9b8a3cc6 100644 --- a/src/xml/xml_api.cc +++ b/src/xml/xml_api.cc @@ -26,6 +26,9 @@ #include #include +#include "engine/engine_io.h" +#include "engine/engine_resource.h" +#include "engine/engine_vfs.h" #include "user/user_api.h" #include "xml/xml.h" #include "xml/xml_native_reader.h" @@ -178,3 +181,31 @@ int mj_printSchema(const char* filename, char* buffer, int buffer_sz, int flg_ht // return string length return str.str().size(); } + + + +// load model from binary MJB resource +mjModel* mj_loadModel(const char* filename, const mjVFS* vfs) { + mjResource* resource = nullptr; + + // first try vfs, otherwise try a provider or OS filesystem + if (!(resource = mju_openVfsResource(filename, vfs))) { + char error[1024]; + if (!(resource = mju_openResource(filename, error, 1024))) { + mju_warning("%s", error); + return nullptr; + } + } + + const void* buffer = NULL; + int buffer_sz = mju_readResource(resource, &buffer); + if (buffer_sz < 1) { + mju_closeResource(resource); + return nullptr; + } + + mjModel* m = mj_loadModelBuffer(buffer, buffer_sz); + mju_closeResource(resource); + return m; +} + diff --git a/src/xml/xml_api.h b/src/xml/xml_api.h index 683e36c1..bc2a5a71 100644 --- a/src/xml/xml_api.h +++ b/src/xml/xml_api.h @@ -39,6 +39,9 @@ MJAPI void mj_freeLastXML(void); MJAPI int mj_printSchema(const char* filename, char* buffer, int buffer_sz, int flg_html, int flg_pad); +// load model from binary MJB file +// if vfs is not NULL, look up file in vfs before reading from disk +MJAPI mjModel* mj_loadModel(const char* filename, const mjVFS* vfs); #ifdef __cplusplus } From 0108b7b569fe21b1cda38ae6dcff18a6036a1641 Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Tue, 21 May 2024 12:45:05 -0700 Subject: [PATCH 41/62] Group CCD common initialization options together. PiperOrigin-RevId: 635896664 Change-Id: Ib3135b1137484df5606a0377052c7db001b746c9 --- src/engine/engine_collision_convex.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/src/engine/engine_collision_convex.c b/src/engine/engine_collision_convex.c index 08db81d3..f873e612 100644 --- a/src/engine/engine_collision_convex.c +++ b/src/engine/engine_collision_convex.c @@ -269,6 +269,16 @@ void mjccd_support(const void *obj, const ccd_vec3_t *_dir, ccd_vec3_t *vec) { +// initialize CCD structure +static void mjc_initCCD(ccd_t* ccd, const mjModel* m) { + CCD_INIT(ccd); + ccd->mpr_tolerance = m->opt.mpr_tolerance; + ccd->epa_tolerance = m->opt.mpr_tolerance; // use MPR tolerance for EPA + ccd->max_iterations = m->opt.mpr_iterations; +} + + + // find single convex-convex collision, using libccd static int mjc_MPRIteration(mjtCCD* obj1, mjtCCD* obj2, const ccd_t* ccd, const mjModel* m, const mjData* d, @@ -345,17 +355,13 @@ int mjc_Convex(const mjModel* m, const mjData* d, mjtCCD obj2 = {m, d, g2, -1, -1, -1, -1, margin, {1, 0, 0, 0}}; // init ccd structure - CCD_INIT(&ccd); + mjc_initCCD(&ccd, m); ccd.first_dir = ccdFirstDirDefault; ccd.center1 = mjccd_center; ccd.center2 = mjccd_center; ccd.support1 = mjccd_support; ccd.support2 = mjccd_support; - // set ccd parameters - ccd.max_iterations = m->opt.mpr_iterations; - ccd.mpr_tolerance = m->opt.mpr_tolerance; - // find initial contact int ncon = mjc_MPRIteration(&obj1, &obj2, &ccd, m, d, con, margin); @@ -750,17 +756,13 @@ int mjc_ConvexHField(const mjModel* m, const mjData* d, //------------------------------------- collision testing // init ccd structure - CCD_INIT(&ccd); + mjc_initCCD(&ccd, m); ccd.first_dir = prism_firstdir; ccd.center1 = prism_center; ccd.center2 = mjccd_center; ccd.support1 = prism_support; ccd.support2 = mjccd_support; - // set ccd parameters - ccd.max_iterations = m->opt.mpr_iterations; - ccd.mpr_tolerance = m->opt.mpr_tolerance; - // geom margin needed for actual collision test obj.margin = margin; @@ -1096,17 +1098,13 @@ int mjc_ConvexElem(const mjModel* m, const mjData* d, mjContact* con, mjtCCD obj2 = {m, d, -1, -1, f2, e2, -1, margin, {1, 0, 0, 0}}; // init ccd structure - CCD_INIT(&ccd); + mjc_initCCD(&ccd, m); ccd.first_dir = ccdFirstDirDefault; ccd.center1 = mjccd_center; ccd.center2 = mjccd_center; ccd.support1 = mjccd_support; ccd.support2 = mjccd_support; - // set ccd parameters - ccd.max_iterations = m->opt.mpr_iterations; - ccd.mpr_tolerance = m->opt.mpr_tolerance; - // find contacts int ncon = mjc_MPRIteration(&obj1, &obj2, &ccd, m, d, con, margin); From 50aab2dd4809240d6ef0fdfb4c9f83b1c7b1eca8 Mon Sep 17 00:00:00 2001 From: Kyle Bayes Date: Wed, 22 May 2024 10:43:35 -0700 Subject: [PATCH 42/62] Move engine/engine_vfs.{c,h} to user/user_vfs.{c,h}. PiperOrigin-RevId: 636219666 Change-Id: I820de511948e82256784edb0893f209a73b221e6 --- src/engine/CMakeLists.txt | 2 -- src/user/CMakeLists.txt | 2 ++ src/user/user_objects.cc | 2 +- src/{engine/engine_vfs.c => user/user_vfs.c} | 2 +- src/{engine/engine_vfs.h => user/user_vfs.h} | 8 +++++--- src/xml/xml.cc | 2 +- src/xml/xml_api.cc | 2 +- test/engine/CMakeLists.txt | 3 --- test/user/CMakeLists.txt | 3 +++ test/{engine/engine_vfs_test.cc => user/user_vfs_test.cc} | 2 +- 10 files changed, 15 insertions(+), 13 deletions(-) rename src/{engine/engine_vfs.c => user/user_vfs.c} (99%) rename src/{engine/engine_vfs.h => user/user_vfs.h} (88%) rename test/{engine/engine_vfs_test.cc => user/user_vfs_test.cc} (99%) diff --git a/src/engine/CMakeLists.txt b/src/engine/CMakeLists.txt index 0f56e84a..0aacf637 100644 --- a/src/engine/CMakeLists.txt +++ b/src/engine/CMakeLists.txt @@ -76,8 +76,6 @@ set(MUJOCO_ENGINE_SRCS engine_util_sparse_avx.h engine_util_spatial.c engine_util_spatial.h - engine_vfs.c - engine_vfs.h engine_vis_init.c engine_vis_init.h engine_vis_interact.c diff --git a/src/user/CMakeLists.txt b/src/user/CMakeLists.txt index 73c2050e..c5d02994 100644 --- a/src/user/CMakeLists.txt +++ b/src/user/CMakeLists.txt @@ -29,6 +29,8 @@ set(MUJOCO_USER_SRCS user_objects.h user_util.cc user_util.h + user_vfs.c + user_vfs.h ) target_sources(mujoco PRIVATE ${MUJOCO_USER_SRCS}) diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index 17b314ec..6691143f 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -45,11 +45,11 @@ #include "engine/engine_util_misc.h" #include "engine/engine_util_solve.h" #include "engine/engine_util_spatial.h" -#include "engine/engine_vfs.h" #include "user/user_api.h" #include "user/user_cache.h" #include "user/user_model.h" #include "user/user_util.h" +#include "user/user_vfs.h" namespace { namespace mju = ::mujoco::util; diff --git a/src/engine/engine_vfs.c b/src/user/user_vfs.c similarity index 99% rename from src/engine/engine_vfs.c rename to src/user/user_vfs.c index f6afa0c6..c4448bf4 100644 --- a/src/engine/engine_vfs.c +++ b/src/user/user_vfs.c @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "engine/engine_vfs.h" +#include "user/user_vfs.h" #include #include diff --git a/src/engine/engine_vfs.h b/src/user/user_vfs.h similarity index 88% rename from src/engine/engine_vfs.h rename to src/user/user_vfs.h index 1276c9a5..80a7fcef 100644 --- a/src/engine/engine_vfs.h +++ b/src/user/user_vfs.h @@ -11,9 +11,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +// IWYU pragma: private, include "third_party/mujoco/include/mujoco.h" +// IWYU pragma: friend "third_party/mujoco/src/.*" -#ifndef MUJOCO_SRC_ENGINE_ENGINE_VFS_H_ -#define MUJOCO_SRC_ENGINE_ENGINE_VFS_H_ +#ifndef MUJOCO_SRC_USER_USER_VFS_H_ +#define MUJOCO_SRC_USER_USER_VFS_H_ #include @@ -53,4 +55,4 @@ MJAPI mjResource* mju_openVfsResource(const char* name, const mjVFS* vfs); } #endif -#endif // MUJOCO_SRC_ENGINE_ENGINE_VFS_H_ +#endif // MUJOCO_SRC_USER_USER_VFS_H_ diff --git a/src/xml/xml.cc b/src/xml/xml.cc index b765f01d..dfd60c61 100644 --- a/src/xml/xml.cc +++ b/src/xml/xml.cc @@ -35,9 +35,9 @@ #include "cc/array_safety.h" #include "engine/engine_crossplatform.h" #include "engine/engine_resource.h" -#include "engine/engine_vfs.h" #include "user/user_api.h" #include "user/user_util.h" +#include "user/user_vfs.h" #include "xml/xml_native_reader.h" #include "xml/xml_native_writer.h" #include "xml/xml_urdf.h" diff --git a/src/xml/xml_api.cc b/src/xml/xml_api.cc index 9b8a3cc6..1f30e8a5 100644 --- a/src/xml/xml_api.cc +++ b/src/xml/xml_api.cc @@ -28,8 +28,8 @@ #include #include "engine/engine_io.h" #include "engine/engine_resource.h" -#include "engine/engine_vfs.h" #include "user/user_api.h" +#include "user/user_vfs.h" #include "xml/xml.h" #include "xml/xml_native_reader.h" #include "xml/xml_util.h" diff --git a/test/engine/CMakeLists.txt b/test/engine/CMakeLists.txt index 727cf955..f35bb8b6 100644 --- a/test/engine/CMakeLists.txt +++ b/test/engine/CMakeLists.txt @@ -96,9 +96,6 @@ target_link_libraries(engine_util_solve_test fixture gmock) mujoco_test(engine_util_spatial_test) target_link_libraries(engine_util_spatial_test fixture gmock) -mujoco_test(engine_vfs_test) -target_link_libraries(engine_vfs_test fixture gmock) - mujoco_test( engine_vis_state_test PROPERTIES diff --git a/test/user/CMakeLists.txt b/test/user/CMakeLists.txt index 66f8615a..16441519 100644 --- a/test/user/CMakeLists.txt +++ b/test/user/CMakeLists.txt @@ -39,3 +39,6 @@ target_link_libraries( mujoco_test(user_composite_test) target_link_libraries(user_composite_test fixture gmock) + +mujoco_test(user_vfs_test) +target_link_libraries(user_vfs_test fixture gmock) diff --git a/test/engine/engine_vfs_test.cc b/test/user/user_vfs_test.cc similarity index 99% rename from test/engine/engine_vfs_test.cc rename to test/user/user_vfs_test.cc index fdc0cbdf..cc3ce120 100644 --- a/test/engine/engine_vfs_test.cc +++ b/test/user/user_vfs_test.cc @@ -21,7 +21,7 @@ #include #include #include "src/engine/engine_resource.h" -#include "src/engine/engine_vfs.h" +#include "src/user/user_vfs.h" #include "test/fixture.h" namespace mujoco { From 2a9067a6b3147d42a7efa7288b2436468f094e12 Mon Sep 17 00:00:00 2001 From: Baruch Tabanpour Date: Fri, 24 May 2024 11:34:26 -0700 Subject: [PATCH 43/62] Replace dt with opt.timestep. PiperOrigin-RevId: 636984197 Change-Id: I2b5eaae0c5e5be840f93c4fe8f725884959703cd --- mjx/tutorial.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mjx/tutorial.ipynb b/mjx/tutorial.ipynb index a839c308..7855fa9d 100644 --- a/mjx/tutorial.ipynb +++ b/mjx/tutorial.ipynb @@ -977,7 +977,7 @@ " path = epath.Path('mujoco_menagerie/google_barkour_vb/scene_mjx.xml')\n", " sys = mjcf.load(path.as_posix())\n", " self._dt = 0.02 # this environment is 50 fps\n", - " sys = sys.tree_replace({'opt.timestep': 0.004, 'dt': 0.004})\n", + " sys = sys.tree_replace({'opt.timestep': 0.004})\n", "\n", " # override menagerie params for smoother policy\n", " sys = sys.replace(\n", @@ -1448,7 +1448,7 @@ }, "outputs": [], "source": [ - "HTML(html.render(eval_env.sys.replace(dt=eval_env.dt), rollout))" + "HTML(html.render(eval_env.sys.tree_replace({'opt.timestep': eval_env.dt}), rollout))" ] } ], From 255a59487c6a52a0fab8209e0a59b76796e8a0ba Mon Sep 17 00:00:00 2001 From: Erik Frey Date: Fri, 24 May 2024 16:53:06 -0700 Subject: [PATCH 44/62] Corrects function reference in class comments. PiperOrigin-RevId: 637070006 Change-Id: I0d9dcf0401a107de67cd0a663df6c876287ba772 --- doc/includes/references.h | 2 +- include/mujoco/mjdata.h | 2 +- introspect/structs.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/includes/references.h b/doc/includes/references.h index a9a50278..c85c07eb 100644 --- a/doc/includes/references.h +++ b/doc/includes/references.h @@ -94,7 +94,7 @@ struct mjContact_ { // result of collision detection functions // internal storage used by solver mjtNum mu; // friction of regularized cone, set by mj_makeConstraint - mjtNum H[36]; // cone Hessian, set by mj_updateConstraint + mjtNum H[36]; // cone Hessian, set by mj_constraintUpdate // contact descriptors set by mj_collideXXX int dim; // contact space dimensionality: 1, 3, 4 or 6 diff --git a/include/mujoco/mjdata.h b/include/mujoco/mjdata.h index 65886b38..344c688e 100644 --- a/include/mujoco/mjdata.h +++ b/include/mujoco/mjdata.h @@ -110,7 +110,7 @@ struct mjContact_ { // result of collision detection functions // internal storage used by solver mjtNum mu; // friction of regularized cone, set by mj_makeConstraint - mjtNum H[36]; // cone Hessian, set by mj_updateConstraint + mjtNum H[36]; // cone Hessian, set by mj_constraintUpdate // contact descriptors set by mj_collideXXX int dim; // contact space dimensionality: 1, 3, 4 or 6 diff --git a/introspect/structs.py b/introspect/structs.py index 3d7e9cf5..f5c26e18 100644 --- a/introspect/structs.py +++ b/introspect/structs.py @@ -4011,7 +4011,7 @@ STRUCTS: Mapping[str, StructDecl] = dict([ inner_type=ValueType(name='mjtNum'), extents=(36,), ), - doc='cone Hessian, set by mj_updateConstraint', + doc='cone Hessian, set by mj_constraintUpdate', ), StructFieldDecl( name='dim', From 7ca8a629a2f1be89d7c27c36fd5720532cad2471 Mon Sep 17 00:00:00 2001 From: Baruch Tabanpour Date: Fri, 24 May 2024 20:00:34 -0700 Subject: [PATCH 45/62] Speed up primitive sdf slightly. PiperOrigin-RevId: 637105250 Change-Id: Iec73b0b30d5222617d01622771afbc95a646da45 --- mjx/mujoco/mjx/_src/collision_sdf.py | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/mjx/mujoco/mjx/_src/collision_sdf.py b/mjx/mujoco/mjx/_src/collision_sdf.py index 68164a32..e6f04dce 100644 --- a/mjx/mujoco/mjx/_src/collision_sdf.py +++ b/mjx/mujoco/mjx/_src/collision_sdf.py @@ -122,8 +122,16 @@ def cylinder_jvp(primals, tangents): return primal_out, tangent_out -def _to_local(f: SDFFn, pos: jax.Array, mat: jax.Array)-> SDFFn: - return lambda p: f(mat.T @ (p - pos)) +def _from_to( + f: SDFFn, + from_pos: jax.Array, + from_mat: jax.Array, + to_pos: jax.Array, + to_mat: jax.Array, +) -> SDFFn: + relmat = math.matmul_unroll(to_mat.T, from_mat) + relpos = to_mat.T @ (from_pos - to_pos) + return lambda p: f(relmat @ p + relpos) def _intersect(d1: SDFFn, d2: SDFFn) -> SDFFn: @@ -175,13 +183,16 @@ def _optim( ) -> Collision: """Optimizes the clearance function.""" d1 = functools.partial(d1, size=info1.size) - d1 = _to_local(d1, info1.pos, info1.mat) + # evaluate d1 in d2 frame + d1 = _from_to(d1, info2.pos, info2.mat, info1.pos, info1.mat) d2 = functools.partial(d2, size=info2.size) - d2 = _to_local(d2, info2.pos, info2.mat) + x0 = info2.mat.T @ (x0 - info2.pos) fn = _clearance(d1, d2) _, pos = _gradient_descent(fn, x0, 10) dist = d1(pos) + d2(pos) n = jax.grad(d1)(pos) - jax.grad(d2)(pos) + pos = info2.mat @ pos + info2.pos # d2 to global frame + n = info2.mat @ n return dist, pos, math.make_frame(n) @@ -240,4 +251,3 @@ def cylinder_cylinder(c1: GeomInfo, c2: GeomInfo) -> Collision: ]) optim_ = functools.partial(_optim, _cylinder, _cylinder, c1, c2) return jax.vmap(optim_)(x0) - From 161ed2229935028c36e43373d49946ae76e31f22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Hodossy?= Date: Mon, 27 May 2024 11:29:04 +0100 Subject: [PATCH 46/62] Fix Unity tests for sensornoise attribute --- unity/Runtime/Components/MjGlobalSettings.cs | 4 ++-- unity/Tests/Editor/Components/MjGlobalSettingsTests.cs | 1 - unity/Tests/Editor/Components/Sensors/MjBaseSensorTests.cs | 5 +---- unity/Tests/Editor/Importer/MjcfImporterTests.cs | 3 +-- 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/unity/Runtime/Components/MjGlobalSettings.cs b/unity/Runtime/Components/MjGlobalSettings.cs index cd1bbe40..51a245c5 100644 --- a/unity/Runtime/Components/MjGlobalSettings.cs +++ b/unity/Runtime/Components/MjGlobalSettings.cs @@ -335,8 +335,8 @@ public class MjGlobalSettings : MonoBehaviour { } else if (instances.Length == 1) { _instance = instances[0]; } - } - return _instance; + } + return _instance; } } diff --git a/unity/Tests/Editor/Components/MjGlobalSettingsTests.cs b/unity/Tests/Editor/Components/MjGlobalSettingsTests.cs index 6575bbf1..4069f45b 100644 --- a/unity/Tests/Editor/Components/MjGlobalSettingsTests.cs +++ b/unity/Tests/Editor/Components/MjGlobalSettingsTests.cs @@ -101,7 +101,6 @@ public class MjGlobalSettingsGenerationTests { Assert.That(_doc.OuterXml, Does.Contain(@"override=")); Assert.That(_doc.OuterXml, Does.Contain(@"energy=")); Assert.That(_doc.OuterXml, Does.Contain(@"fwdinv=")); - Assert.That(_doc.OuterXml, Does.Contain(@"sensornoise=")); } } diff --git a/unity/Tests/Editor/Components/Sensors/MjBaseSensorTests.cs b/unity/Tests/Editor/Components/Sensors/MjBaseSensorTests.cs index 8a15152f..c1448167 100644 --- a/unity/Tests/Editor/Components/Sensors/MjBaseSensorTests.cs +++ b/unity/Tests/Editor/Components/Sensors/MjBaseSensorTests.cs @@ -53,19 +53,16 @@ public class MjBaseSensorTests { [Test] public void GeneratingNoiseAndCutoffMjcf() { - _sensor.Noise = 2.0f; _sensor.Cutoff = 3.0f; _doc.AppendChild(_sensor.GenerateMjcf("name", _doc)); - Assert.That(_doc.OuterXml, Does.Contain("noise=\"2\"")); Assert.That(_doc.OuterXml, Does.Contain("cutoff=\"3\"")); } [Test] public void ParsingShapePropertiesMjcf() { - var mjcfString = ""; + var mjcfString = ""; var mjcfElement = Parse(mjcfString, "sensor"); _sensor.ParseMjcf(mjcfElement); - Assert.That(_sensor.Noise, Is.EqualTo(3.0f)); Assert.That(_sensor.Cutoff, Is.EqualTo(4.0f)); } } diff --git a/unity/Tests/Editor/Importer/MjcfImporterTests.cs b/unity/Tests/Editor/Importer/MjcfImporterTests.cs index a4bc5a1b..bf4e54b2 100644 --- a/unity/Tests/Editor/Importer/MjcfImporterTests.cs +++ b/unity/Tests/Editor/Importer/MjcfImporterTests.cs @@ -274,7 +274,7 @@ public class MjcfImporterTests { public void ReadingOptionFlags() { var mjcfString = @" "; @@ -283,7 +283,6 @@ public class MjcfImporterTests { var settings = _sceneRoot.GetComponentInChildren(); Assert.That(settings.GlobalOptions.Flag.Gravity, Is.EqualTo(EnableDisableFlag.disable)); Assert.That(settings.GlobalOptions.Flag.Contact, Is.EqualTo(EnableDisableFlag.disable)); - Assert.That(settings.GlobalOptions.Flag.SensorNoise, Is.EqualTo(EnableDisableFlag.enable)); } [Test] From adbbcc4ff52674634a0afc13683ca9d9ffdefb98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Hodossy?= Date: Mon, 27 May 2024 11:48:11 +0100 Subject: [PATCH 47/62] Track separate kv property for position actuators --- unity/Editor/Components/MjActuatorEditor.cs | 3 +++ unity/Runtime/Components/MjActuator.cs | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/unity/Editor/Components/MjActuatorEditor.cs b/unity/Editor/Components/MjActuatorEditor.cs index 9ac963cc..10fc7de8 100644 --- a/unity/Editor/Components/MjActuatorEditor.cs +++ b/unity/Editor/Components/MjActuatorEditor.cs @@ -35,6 +35,7 @@ namespace Mujoco { private SerializedProperty _biasPrm; // Position actuator properties. private SerializedProperty _kp; + private SerializedProperty _kvp; // Velocity actuator properties. private SerializedProperty _kv; // Cylinder actuator properties. @@ -70,6 +71,7 @@ namespace Mujoco { _biasPrm = customParams.FindPropertyRelative("BiasPrm"); // Position actuator properties. _kp = customParams.FindPropertyRelative("Kp"); + _kvp = customParams.FindPropertyRelative("Kvp"); // Velocity actuator properties. _kv = customParams.FindPropertyRelative("Kv"); // Cylinder actuator properties. @@ -166,6 +168,7 @@ namespace Mujoco { private void EditPositionParams(MjActuator.CustomParameters parameters) { EditorGUILayout.PropertyField(_kp); + EditorGUILayout.PropertyField(_kvp, new GUIContent("Kv")); } private void EditVelocityParams(MjActuator.CustomParameters parameters) { diff --git a/unity/Runtime/Components/MjActuator.cs b/unity/Runtime/Components/MjActuator.cs index e44b8579..da643c15 100644 --- a/unity/Runtime/Components/MjActuator.cs +++ b/unity/Runtime/Components/MjActuator.cs @@ -164,11 +164,16 @@ public class MjActuator : MjComponent { [AbsoluteValue] public float Kp = 1.0f; - public void PositionToMjcf(XmlElement mjcf) { + [AbsoluteValue] + public float Kvp; + + public void PositionToMjcf(XmlElement mjcf) { mjcf.SetAttribute("kp", MjEngineTool.MakeLocaleInvariant($"{Math.Abs(Kp)}")); + mjcf.SetAttribute("kv", MjEngineTool.MakeLocaleInvariant($"{Math.Abs(Kvp)}")); } public void PositionFromMjcf(XmlElement mjcf) { Kp = mjcf.GetFloatAttribute("kp", defaultValue: 1.0f); + Kvp = mjcf.GetFloatAttribute("kv", defaultValue: 0f); } //// Velocity actuator parameters. From 2aa30b188cc8fa27a045d551f934550a4af36bab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Hodossy?= Date: Mon, 27 May 2024 11:49:26 +0100 Subject: [PATCH 48/62] Adjust formatting --- unity/Runtime/Components/MjActuator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/unity/Runtime/Components/MjActuator.cs b/unity/Runtime/Components/MjActuator.cs index da643c15..1c5ff755 100644 --- a/unity/Runtime/Components/MjActuator.cs +++ b/unity/Runtime/Components/MjActuator.cs @@ -167,7 +167,7 @@ public class MjActuator : MjComponent { [AbsoluteValue] public float Kvp; - public void PositionToMjcf(XmlElement mjcf) { + public void PositionToMjcf(XmlElement mjcf) { mjcf.SetAttribute("kp", MjEngineTool.MakeLocaleInvariant($"{Math.Abs(Kp)}")); mjcf.SetAttribute("kv", MjEngineTool.MakeLocaleInvariant($"{Math.Abs(Kvp)}")); } From 45ccc2a6dffee54714919bf80ebfff5edf05b70c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20Hodossy?= Date: Mon, 27 May 2024 12:11:15 +0100 Subject: [PATCH 49/62] Add tests for kv param in position actuators --- unity/Tests/Editor/Components/MjActuatorTests.cs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/unity/Tests/Editor/Components/MjActuatorTests.cs b/unity/Tests/Editor/Components/MjActuatorTests.cs index 175a59f4..437674b1 100644 --- a/unity/Tests/Editor/Components/MjActuatorTests.cs +++ b/unity/Tests/Editor/Components/MjActuatorTests.cs @@ -279,19 +279,22 @@ public class MjPositionActuatorTests { Assert.That(_doc.OuterXml, Does.Contain($""); + _doc.LoadXml(""); _actuator.ParseMjcf(_doc.GetElementsByTagName("position")[0] as XmlElement); Assert.That(_actuator.CustomParams.Kp, Is.EqualTo(2)); + Assert.That(_actuator.CustomParams.Kvp, Is.EqualTo(1)); } [Test] @@ -299,6 +302,7 @@ public class MjPositionActuatorTests { _doc.LoadXml(""); _actuator.ParseMjcf(_doc.GetElementsByTagName("position")[0] as XmlElement); Assert.That(_actuator.CustomParams.Kp, Is.EqualTo(1)); + Assert.That(_actuator.CustomParams.Kvp, Is.EqualTo(0)); } } From 195bd32aa6bd9361245e0832f22651df7c44e81d Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Tue, 28 May 2024 08:17:11 -0700 Subject: [PATCH 50/62] Add a check for mesh dimension in the elasticity.solid plugin. Fixes #1647. PiperOrigin-RevId: 637905358 Change-Id: I1432a8fe054752bc962174548da3c1f81deb6555 --- plugin/elasticity/solid.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugin/elasticity/solid.cc b/plugin/elasticity/solid.cc index 5660e144..bbb35b88 100644 --- a/plugin/elasticity/solid.cc +++ b/plugin/elasticity/solid.cc @@ -123,6 +123,9 @@ Solid::Solid(const mjModel* m, mjData* d, int instance, mjtNum nu, mjtNum E, if (m->flex_vertbodyid[m->flex_vertadr[i]+j] == i0) { f0 = i; nv = m->flex_vertnum[f0]; + if (m->flex_dim[i] != 3) { // SHOULD NOT OCCUR + mju_error("mujoco.elasticity.solid requires a 3D mesh"); + } } } } From dec55b59fa857efe60fa917a8f1183b708b40b15 Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Wed, 29 May 2024 08:46:19 -0700 Subject: [PATCH 51/62] Allow detaching from a compiled model. PiperOrigin-RevId: 638299270 Change-Id: I944d2a24578b63463eddfa55d89f39fcfbafd2b4 --- src/user/user_model.cc | 49 ++++++++++++++++++++++++++++---------- test/user/user_api_test.cc | 11 ++++++++- 2 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/user/user_model.cc b/src/user/user_model.cc index 2a2e29ac..8a290b82 100644 --- a/src/user/user_model.cc +++ b/src/user/user_model.cc @@ -132,6 +132,7 @@ mjCModel::mjCModel() { mjCModel::mjCModel(const mjCModel& other) { + CreateObjectLists(); *this = other; } @@ -206,8 +207,19 @@ static void resetlist(std::vector& list) { mjCModel& mjCModel::operator+=(const mjCModel& other) { // create global lists - MakeLists(bodies_[0]); - CreateObjectLists(); + mjCBody *world = bodies_[0]; + if (compiled) { + resetlist(bodies_); + resetlist(joints_); + resetlist(geoms_); + resetlist(sites_); + resetlist(cameras_); + resetlist(lights_); + resetlist(frames_); + world->id = 0; + bodies_.push_back(world); + } + MakeLists(world); ProcessLists(/*checkrepeat=*/false); // copy all elements not in the tree @@ -264,9 +276,8 @@ mjCModel& mjCModel::operator+=(const mjCModel& other) { lights_[i]->def= defaults_[def_map[other.lights_[i]->def]]; } - // restore to the same state as other + // restore to the original state if (!compiled) { - mjCBody *world = bodies_[0]; resetlist(bodies_); resetlist(joints_); resetlist(geoms_); @@ -317,16 +328,30 @@ void mjCModel::RemoveFromList(std::vector& list, const mjCModel& other) { mjCModel& mjCModel::operator-=(const mjCBody& subtree) { mjCModel oldmodel(*this); - oldmodel.MakeLists(oldmodel.bodies_[0]); - oldmodel.CreateObjectLists(); - oldmodel.ProcessLists(/*checkrepeat=*/false); + + // create global lists in the old model if not compiled + if (!oldmodel.IsCompiled()) { + oldmodel.MakeLists(oldmodel.bodies_[0]); + oldmodel.ProcessLists(/*checkrepeat=*/false); + } // remove body from tree - *bodies_[0] -= subtree; + mjCBody* world = bodies_[0]; + *world -= subtree; // create global lists - MakeLists(bodies_[0]); - CreateObjectLists(); + if (compiled) { + resetlist(bodies_); + resetlist(joints_); + resetlist(geoms_); + resetlist(sites_); + resetlist(cameras_); + resetlist(lights_); + resetlist(frames_); + world->id = 0; + bodies_.push_back(world); + } + MakeLists(world); ProcessLists(/*checkrepeat=*/false); // check if we have to remove anything else @@ -337,9 +362,8 @@ mjCModel& mjCModel::operator-=(const mjCBody& subtree) { RemoveFromList(actuators_, oldmodel); RemoveFromList(sensors_, oldmodel); - // restore to the same state as before call + // restore to the original state if (!compiled) { - mjCBody* world = bodies_[0]; resetlist(bodies_); resetlist(joints_); resetlist(geoms_); @@ -527,6 +551,7 @@ void mjCModel::Clear() { sites_.clear(); cameras_.clear(); lights_.clear(); + frames_.clear(); // internal variables hasImplicitPluginElem = false; diff --git a/test/user/user_api_test.cc b/test/user/user_api_test.cc index 52a0a8ad..6db3b558 100644 --- a/test/user/user_api_test.cc +++ b/test/user/user_api_test.cc @@ -650,7 +650,7 @@ TEST_F(MujocoTest, AttachFrame) { mj_deleteModel(m_expected); } -TEST_F(MujocoTest, DetachBody) { +void TestDetachBody(bool compile) { std::array er; mjtNum tol = 0; std::string field = ""; @@ -679,6 +679,9 @@ TEST_F(MujocoTest, DetachBody) { mjSpec* child = ParseSpecFromString(xml_child, er.data(), er.size()); EXPECT_THAT(child, NotNull()) << er.data(); + // compile model (for testing double compilation) + mjModel* m_child = compile ? mjs_compile(child, 0) : nullptr; + // get subtree mjsBody* body = mjs_findBody(child, "body"); EXPECT_THAT(body, NotNull()); @@ -701,6 +704,12 @@ TEST_F(MujocoTest, DetachBody) { mjs_deleteSpec(child); mj_deleteModel(m_detached); mj_deleteModel(m_expected); + if (m_child) mj_deleteModel(m_child); +} + +TEST_F(MujocoTest, DetachBody) { + TestDetachBody(/*compile=*/false); + TestDetachBody(/*compile=*/true); } } // namespace From c511d02265c9c37cb5dbd461808c02f176df77e3 Mon Sep 17 00:00:00 2001 From: Baruch Tabanpour Date: Wed, 29 May 2024 16:20:27 -0700 Subject: [PATCH 52/62] Add hfield. Fixes #1655 #1491 #1695 PiperOrigin-RevId: 638447127 Change-Id: Ib1e5020a8407bc100145a6b382e985c03dd4a848 --- doc/changelog.rst | 13 +- doc/mjx.rst | 4 +- mjx/mujoco/mjx/_src/collision_convex.py | 327 +++++++++++++++--- mjx/mujoco/mjx/_src/collision_driver.py | 25 +- mjx/mujoco/mjx/_src/collision_driver_test.py | 89 +++++ mjx/mujoco/mjx/_src/collision_types.py | 70 ++-- mjx/mujoco/mjx/_src/dataclasses.py | 2 +- mjx/mujoco/mjx/_src/io.py | 24 +- mjx/mujoco/mjx/_src/mesh.py | 113 +++++- mjx/mujoco/mjx/_src/support.py | 2 + mjx/mujoco/mjx/_src/types.py | 37 +- .../barkour_v0/assets/barkour_v0_mjx.xml | 4 +- .../barkour_v0/assets/hfield_240_280.png | Bin 0 -> 174417 bytes 13 files changed, 604 insertions(+), 106 deletions(-) create mode 100644 mjx/mujoco/mjx/test_data/barkour_v0/assets/hfield_240_280.png diff --git a/doc/changelog.rst b/doc/changelog.rst index a2f528fc..59bbad37 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -14,12 +14,21 @@ General 2. Added :ref:`timeconst` attribute to the :ref:`position actuator`. When set to a positive value, the actuator is made stateful with :at:`filterexact` dynamics. +MJX +^^^ + +3. Add height-field collision support. Fixes :github:issue:`1491`. +4. Add a pre-compiled field ``mesh_convex`` to ``mjx.Model`` so that mesh properties can be vmapped over. + Fixes :github:issue:`1655`. +5. Fix a bug in convex mesh collisions, where erroneous edge contacts were being created even though face + separating axes were found. Fixes :github:issue:`1695`. + Bug fixes ^^^^^^^^^ -3. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is +6. Fixed a bug the could cause collisions to be missed when :ref:`fusestatic` is enabled, as is often the case for URDF imports. Fixes :github:issue:`1069`, :github:issue:`1577`. -4. Fixed a bug that was causing the visualization of SDF iterations to write outside the size of the vector storing +7. Fixed a bug that was causing the visualization of SDF iterations to write outside the size of the vector storing them. Fixes :github:issue:`1539`. Version 3.1.5 (May 7, 2024) diff --git a/doc/mjx.rst b/doc/mjx.rst index 0e3c52f8..361c9cc4 100644 --- a/doc/mjx.rst +++ b/doc/mjx.rst @@ -196,7 +196,7 @@ The following features are **fully supported** in MJX: * - :ref:`Actuator Bias ` - ``NONE``, ``AFFINE`` * - :ref:`Geom ` - - ``PLANE``, ``SPHERE``, ``CAPSULE``, ``BOX``, ``MESH`` + - ``PLANE``, ``HFIELD``, ``SPHERE``, ``CAPSULE``, ``BOX``, ``MESH`` are fully implemented. ``ELLIPSOID`` and ``CYLINDER`` are implemented but only collide with other primitives. * - :ref:`Constraint ` - ``EQUALITY``, ``LIMIT_JOINT``, ``CONTACT_FRICTIONLESS``, ``CONTACT_PYRAMIDAL`` * - :ref:`Equality ` @@ -223,7 +223,7 @@ The following features are **in development** and coming soon: * - Category - Feature * - :ref:`Geom ` - - ``SDF``, ``HFIELD``, ``ELLIPSOID``, ``CYLINDER`` + - ``SDF``. Collisions between (``SPHERE``, ``BOX``, ``MESH``, ``HFIELD``) and ``CYLINDER``. Collisions between (``BOX``, ``MESH``, ``HFIELD``) and ``ELLIPSOID``. * - :ref:`Constraint ` - :ref:`Frictionloss `, ``CONTACT_ELLIPTIC``, ``FRICTION_DOF`` * - :ref:`Integrator ` diff --git a/mjx/mujoco/mjx/_src/collision_convex.py b/mjx/mujoco/mjx/_src/collision_convex.py index 3c3efd5c..7d2c10dd 100644 --- a/mjx/mujoco/mjx/_src/collision_convex.py +++ b/mjx/mujoco/mjx/_src/collision_convex.py @@ -14,8 +14,9 @@ # ============================================================================== """Convex collisions.""" +from collections.abc import Callable import functools -from typing import Tuple +from typing import Tuple, Union import jax from jax import numpy as jp @@ -26,16 +27,19 @@ from mujoco.mjx._src.collision_types import Collision from mujoco.mjx._src.collision_types import ConvexInfo from mujoco.mjx._src.collision_types import FunctionKey from mujoco.mjx._src.collision_types import GeomInfo +from mujoco.mjx._src.collision_types import HFieldInfo from mujoco.mjx._src.types import Data from mujoco.mjx._src.types import GeomType from mujoco.mjx._src.types import Model # pylint: enable=g-importing-member +_GeomInfo = Union[GeomInfo, ConvexInfo] + def collider(ncon: int): """Wraps collision functions for use by collision_driver.""" - def wrapper(func): + def wrapper(collision_fn): def collide( m: Model, d: Data, key: FunctionKey, geom: jax.Array ) -> Collision: @@ -45,18 +49,25 @@ def collider(ncon: int): GeomInfo(d.geom_xpos[g2], d.geom_xmat[g2], m.geom_size[g2]), ] in_axes = [0, 0] + fn = collision_fn for i in [0, 1]: if key.types[i] == GeomType.BOX: infos[i] = mesh.box(infos[i]) in_axes[i] = jax.tree_util.tree_map(lambda x: None, infos[i]).replace( - pos=0, mat=0, face=0, vert=0 + pos=0, mat=0, size=0, face=0, vert=0 ) elif key.types[i] == GeomType.MESH: - infos[i] = mesh.convex(m, key.data_ids[i], infos[i]) + c, cm = infos[i], m.mesh_convex[key.data_ids[i]] + infos[i] = ConvexInfo(**vars(c), **vars(cm)) in_axes[i] = jax.tree_util.tree_map(lambda x: None, infos[i]).replace( - pos=0, mat=0 + pos=0, mat=0, size=0 ) - dist, pos, frame = jax.vmap(func, in_axes=in_axes)(*infos) + elif key.types[i] == GeomType.HFIELD: + hfield_info = mesh.hfield(m, key.data_ids[i]) + infos[i] = hfield_info.replace(pos=infos[i].pos, mat=infos[i].mat) + in_axes[i] = hfield_info.replace(pos=0, mat=0, data=None) + fn = functools.partial(fn, subgrid_size=key.subgrid_size) + dist, pos, frame = jax.vmap(fn, in_axes=in_axes)(*infos) if ncon > 1: return jax.tree_util.tree_map(jp.concatenate, (dist, pos, frame)) return dist, pos, frame @@ -242,9 +253,8 @@ def plane_convex(plane: GeomInfo, convex: ConvexInfo) -> Collision: return dist, pos, frame -@collider(ncon=1) -def sphere_convex(sphere: GeomInfo, convex: ConvexInfo) -> Collision: - """Calculates contact between a sphere and a convex object.""" +def _sphere_convex(sphere: GeomInfo, convex: ConvexInfo) -> Collision: + """Calculates contact between a sphere and a convex mesh.""" faces = convex.face normals = convex.face_normal @@ -276,7 +286,7 @@ def sphere_convex(sphere: GeomInfo, convex: ConvexInfo) -> Collision: face_normal, ) edge_dist = jax.vmap( - lambda plane_pt, plane_norm: (pt - plane_pt).dot(plane_norm) + lambda plane_pt, plane_norm, pt=pt: (pt - plane_pt).dot(plane_norm) )(edge_p0, side_normals) pt_on_face = jp.all(edge_dist <= 0) # lte to handle degenerate edges @@ -291,7 +301,8 @@ def sphere_convex(sphere: GeomInfo, convex: ConvexInfo) -> Collision: # Get the normal, dist, and contact position. pt_normal, d = math.normalize_with_norm(pt - sphere_pos) - # Ensure normal points towards convex centroid. + # Ensure normal points towards convex centroid. Assume convex centroid is at + # the origin. inside = jp.dot(pt, pt_normal) > 0 sign = jp.where(inside, -1, 1) n = jp.where(pt_on_face | (d < 1e-6), -face_normal, sign * pt_normal) @@ -305,11 +316,17 @@ def sphere_convex(sphere: GeomInfo, convex: ConvexInfo) -> Collision: n = convex.mat @ n pos = convex.mat @ pos + convex.pos + return dist, pos, n + + +@collider(ncon=1) +def sphere_convex(sphere: GeomInfo, convex: ConvexInfo) -> Collision: + """Calculates contact between a sphere and a convex mesh.""" + dist, pos, n = _sphere_convex(sphere, convex) return dist, pos, math.make_frame(n) -@collider(ncon=2) -def capsule_convex(cap: GeomInfo, convex: ConvexInfo) -> Collision: +def _capsule_convex(cap: GeomInfo, convex: ConvexInfo) -> Collision: """Calculates contacts between a capsule and a convex object.""" # Get convex transformed normals, faces, and vertices. faces = convex.face @@ -431,6 +448,13 @@ def capsule_convex(cap: GeomInfo, convex: ConvexInfo) -> Collision: dist = -jp.where( has_edge_contact, jp.array([edge_penetration, -1]), face_penetration ) + return dist, pos, n + + +@collider(ncon=2) +def capsule_convex(cap: GeomInfo, convex: ConvexInfo) -> Collision: + """Calculates contacts between a capsule and a convex object.""" + dist, pos, n = _capsule_convex(cap, convex) frame = jax.vmap(math.make_frame)(n) return dist, pos, frame @@ -851,6 +875,7 @@ def _sat_gaussmap( incident_face_norm, -best_axis, ) + dist = jp.where(is_face_separating, 1.0, dist) # Handle edge separating axes by checking all edge pairs. a_idx = jp.tile(jp.arange(edges_a.shape[0]), reps=edges_b.shape[0]) @@ -891,8 +916,9 @@ def _sat_gaussmap( best_edge_idx = edge_dist.argmax() best_edge_dist = edge_dist[best_edge_idx] is_edge_contact = jp.where( - dist.max() < 0, best_edge_dist > dist.max() - 1e-6, - (best_edge_dist < 0) & ~jp.isinf(best_edge_dist) + dist.max() < 0.0, + best_edge_dist > dist.max() - 1e-6, + (best_edge_dist < 0) & ~jp.isinf(best_edge_dist), ) is_edge_contact = is_edge_contact & ~is_face_separating normal = jp.where(is_edge_contact, edge_axes[best_edge_idx], normal) @@ -911,9 +937,45 @@ def _sat_gaussmap( return dist, pos, normal -@collider(ncon=4) -def convex_convex(c1: ConvexInfo, c2: ConvexInfo) -> Collision: - """Calculates contacts between two convex objects.""" +def _box_box(b1: ConvexInfo, b2: ConvexInfo) -> Collision: + """Calculates contacts between two boxes.""" + faces1 = b1.face + faces2 = b2.face + + to_local_pos = b2.mat.T @ (b1.pos - b2.pos) + to_local_mat = b2.mat.T @ b1.mat + + faces1 = to_local_pos + faces1 @ to_local_mat.T + normals1 = b1.face_normal @ to_local_mat.T + normals2 = b2.face_normal + + vertices1 = to_local_pos + b1.vert @ to_local_mat.T + vertices2 = b2.vert + + unique_edges1 = jp.take(vertices1, b1.edge_dir, axis=0) + unique_edges2 = jp.take(vertices2, b2.edge_dir, axis=0) + + # brute-force SAT is more performant for box-box + dist, pos, normal = _sat_bruteforce( + faces1, + faces2, + vertices1, + vertices2, + normals1, + normals2, + unique_edges1, + unique_edges2, + ) + + # Go back to world frame. + pos = b2.pos + pos @ b2.mat.T + n = normal @ b2.mat.T + + return dist, pos, n + + +def _convex_convex(c1: ConvexInfo, c2: ConvexInfo) -> Collision: + """Calculates contacts between two convex meshes.""" # pad face vertices so that we can broadcast between geom1 and geom2 # face has shape (n_face, n_vert, 3) nvert1, nvert2 = c1.face.shape[1], c2.face.shape[1] @@ -932,6 +994,7 @@ def convex_convex(c1: ConvexInfo, c2: ConvexInfo) -> Collision: faces1 = c1.face faces2 = c2.face + # convert to c2 frame to_local_pos = c2.mat.T @ (c1.pos - c2.pos) to_local_mat = c2.mat.T @ c1.mat @@ -942,49 +1005,209 @@ def convex_convex(c1: ConvexInfo, c2: ConvexInfo) -> Collision: vertices1 = to_local_pos + c1.vert @ to_local_mat.T vertices2 = c2.vert - unique_edges1 = jp.take(vertices1, c1.edge_dir, axis=0) - unique_edges2 = jp.take(vertices2, c2.edge_dir, axis=0) - edges1 = jp.take(vertices1, c1.edge, axis=0) edges2 = jp.take(vertices2, c2.edge, axis=0) edge_face_normals1 = c1.edge_face_normal @ to_local_mat.T edge_face_normals2 = c2.edge_face_normal - enable_bruteforce = ( - unique_edges1.shape[0] * unique_edges2.shape[0] - < edges1[0].shape[0] * edges2[0].shape[0] + dist, pos, normal = _sat_gaussmap( + to_local_pos, + faces1, + faces2, + vertices1, + vertices2, + normals1, + normals2, + edges1, + edges2, + edge_face_normals1, + edge_face_normals2, ) - if enable_bruteforce: - dist, pos, normal = _sat_bruteforce( - faces1, - faces2, - vertices1, - vertices2, - normals1, - normals2, - unique_edges1, - unique_edges2, - ) - else: - dist, pos, normal = _sat_gaussmap( - to_local_pos, - faces1, - faces2, - vertices1, - vertices2, - normals1, - normals2, - edges1, - edges2, - edge_face_normals1, - edge_face_normals2, - ) # Go back to world frame. pos = c2.pos + pos @ c2.mat.T - normal = normal @ c2.mat.T - normal = -normal if swapped else normal - frame = jax.vmap(math.make_frame)(normal) + n = normal @ c2.mat.T + n = -n if swapped else n + return dist, pos, n + + +@collider(ncon=4) +def box_box(b1: ConvexInfo, b2: ConvexInfo) -> Collision: + """Calculates contacts between two boxes.""" + dist, pos, n = _box_box(b1, b2) + frame = jax.vmap(math.make_frame)(n) return dist, pos, frame + + +@collider(ncon=4) +def convex_convex(c1: ConvexInfo, c2: ConvexInfo) -> Collision: + """Calculates contacts between two convex objects.""" + dist, pos, n = _convex_convex(c1, c2) + frame = jax.vmap(math.make_frame)(n) + return dist, pos, frame + + +def _hfield_collision( + collider_fn: Callable[[_GeomInfo, _GeomInfo], Collision], + h: HFieldInfo, + obj: _GeomInfo, + obj_rbound: jax.Array, + subgrid_size: Tuple[int, int], +) -> Collision: + """Collides an object with prisms in a height field.""" + # put obj in hfield frame + obj_pos = h.mat.T @ (obj.pos - h.pos) + obj_mat = h.mat.T @ obj.mat + + xmin = obj_pos[0] - obj_rbound + ymin = obj_pos[1] - obj_rbound + cmin = jp.floor((xmin + h.size[0]) / (2 * h.size[0]) * (h.ncol - 1)) + cmin = cmin.astype(int) + rmin = jp.floor((ymin + h.size[1]) / (2 * h.size[1]) * (h.nrow - 1)) + rmin = rmin.astype(int) + + # compute real-valued grid step + dx = 2.0 * h.size[0] / (h.ncol - 1) + dy = 2.0 * h.size[1] / (h.nrow - 1) + + # set zbottom value using base size + bvert = jp.array([0.0, 0.0, -h.size[3]]) + bmask = jp.array([True, True, False]) + + # process all prisms in sub-grid + prisms = [] + for r in range(subgrid_size[1]): + for c in range(subgrid_size[0]): + ri, ci = rmin + r, cmin + c + + # ensure ri, ci are in the bounds of the hfield + ri = jp.clip(ri, 0, h.nrow - 2) + ci = jp.clip(ci, 0, h.ncol - 2) + + p1 = [ + dx * ci - h.size[0], + dy * ri - h.size[1], + h.data[ci, ri] * h.size[2], + ] + p2 = [ + dx * (ci + 1) - h.size[0], + dy * (ri + 1) - h.size[1], + h.data[ci + 1, ri + 1] * h.size[2], + ] + p3 = [ + dx * ci - h.size[0], + dy * (ri + 1) - h.size[1], + h.data[ci, ri + 1] * h.size[2], + ] + top = jp.array([p1, p2, p3]) + bottom = jp.array([p1, p3, p2]) * bmask + bvert + vert = jp.concatenate([bottom, top]) + prisms.append(mesh.hfield_prism(vert)) + + p3 = p2 + p2 = [ + dx * (ci + 1) - h.size[0], + dy * ri - h.size[1], + h.data[ci + 1, ri] * h.size[2], + ] + top = jp.array([p1, p2, p3]) + bottom = jp.array([p1, p3, p2]) * bmask + bvert + vert = jp.concatenate([bottom, top]) + # NB: If the order of verts is updated above, the corresponding + # hfield_prism function must be updated to ensure that all faces have the + # correct winding order. + prisms.append(mesh.hfield_prism(vert)) + + n_prisms = len(prisms) + prisms = jax.tree_util.tree_map(lambda *x: jp.stack(x), *prisms) + dist, pos, n = jax.vmap(collider_fn, in_axes=[None, 0])( + obj.replace(pos=obj_pos, mat=obj_mat), prisms + ) + + dist = dist.flatten() + pos = pos.reshape((-1, 3)) + n = n.reshape((-1, 3)) + n *= -1 # flip the normal since we flipped args in the call to collider_fn + + # Check that we're in the half-space of the hfield norm. If not, pick the top + # face norm. This resolves issues with cracks of doom. + n_repeats = dist.shape[0] // n_prisms + top_norm = jp.repeat(prisms.face_normal[:, 1], n_repeats, axis=0) + cond = jax.vmap(jp.dot, in_axes=[0, None])(n, h.mat[2]) < 1e-6 + n = jp.where(cond[:, None], top_norm, n) + + return dist, pos, n + + +@collider(ncon=4) +def hfield_sphere( + h: HFieldInfo, s: GeomInfo, subgrid_size: Tuple[int, int] +) -> Collision: + """Calculates contacts between a hfield and a sphere.""" + rbound = jp.max(s.size) + dist, pos, n = _hfield_collision(_sphere_convex, h, s, rbound, subgrid_size) + + n_mean = jp.mean(n, axis=0) + mask = dist < jp.minimum(0, dist.min() + 1e-3) + idx = _manifold_points(pos, mask, n_mean) + dist, pos, n = dist[idx], pos[idx], n[idx] + + # zero out non-unique contacts + unique = jp.tril(idx == idx[:, None]).sum(axis=1) == 1 + dist = jp.where(unique, dist, 1) + + # back to world frame, _hfield_collision returns collision in hfield frame + pos = jax.vmap(lambda p: h.mat @ p + h.pos)(pos) + n = jax.vmap(lambda n: h.mat @ n)(n) + + return dist, pos, jax.vmap(math.make_frame)(n) + + +@collider(ncon=4) +def hfield_capsule( + h: HFieldInfo, c: GeomInfo, subgrid_size: Tuple[int, int] +) -> Collision: + """Calculates contacts between a hfield and a capsule.""" + rbound = c.size[0] + c.size[1] + dist, pos, n = _hfield_collision(_capsule_convex, h, c, rbound, subgrid_size) + + n_mean = jp.mean(n, axis=0) + mask = dist < jp.minimum(0, dist.min() + 1e-3) + idx = _manifold_points(pos, mask, n_mean) + dist, pos, n = dist[idx], pos[idx], n[idx] + + # zero out non-unique contacts + unique = jp.tril(idx == idx[:, None]).sum(axis=1) == 1 + dist = jp.where(unique, dist, 1) + + # back to world frame, _hfield_collision returns collision in hfield frame + pos = jax.vmap(lambda p: h.mat @ p + h.pos)(pos) + n = jax.vmap(lambda n: h.mat @ n)(n) + + return dist, pos, jax.vmap(math.make_frame)(n) + + +@collider(ncon=4) +def hfield_convex( + h: HFieldInfo, c: ConvexInfo, subgrid_size: Tuple[int, int] +) -> Collision: + """Calculates contacts between a hfield and a capsule.""" + rbound = jp.max(c.size) + dist, pos, n = _hfield_collision(_convex_convex, h, c, rbound, subgrid_size) + + n_mean = jp.mean(n, axis=0) + mask = dist < jp.minimum(0, dist.min() + 1e-3) + idx = _manifold_points(pos, mask, n_mean) + dist, pos, n = dist[idx], pos[idx], n[idx] + + # zero out non-unique contacts + unique = jp.tril(idx == idx[:, None]).sum(axis=1) == 1 + dist = jp.where(unique, dist, 1) + + # back to world frame, _hfield_collision returns collision in hfield frame + pos = jax.vmap(lambda p: h.mat @ p + h.pos)(pos) + n = jax.vmap(lambda n: h.mat @ n)(n) + + return dist, pos, jax.vmap(math.make_frame)(n) diff --git a/mjx/mujoco/mjx/_src/collision_driver.py b/mjx/mujoco/mjx/_src/collision_driver.py index b67168d3..8791fed7 100644 --- a/mjx/mujoco/mjx/_src/collision_driver.py +++ b/mjx/mujoco/mjx/_src/collision_driver.py @@ -45,8 +45,12 @@ from jax import numpy as jp import mujoco from mujoco.mjx._src import support # pylint: disable=g-importing-member +from mujoco.mjx._src.collision_convex import box_box from mujoco.mjx._src.collision_convex import capsule_convex from mujoco.mjx._src.collision_convex import convex_convex +from mujoco.mjx._src.collision_convex import hfield_capsule +from mujoco.mjx._src.collision_convex import hfield_convex +from mujoco.mjx._src.collision_convex import hfield_sphere from mujoco.mjx._src.collision_convex import plane_convex from mujoco.mjx._src.collision_convex import sphere_convex from mujoco.mjx._src.collision_primitive import capsule_capsule @@ -78,6 +82,10 @@ _COLLISION_FUNC = { (GeomType.PLANE, GeomType.ELLIPSOID): plane_ellipsoid, (GeomType.PLANE, GeomType.CYLINDER): plane_cylinder, (GeomType.PLANE, GeomType.MESH): plane_convex, + (GeomType.HFIELD, GeomType.SPHERE): hfield_sphere, + (GeomType.HFIELD, GeomType.CAPSULE): hfield_capsule, + (GeomType.HFIELD, GeomType.BOX): hfield_convex, + (GeomType.HFIELD, GeomType.MESH): hfield_convex, (GeomType.SPHERE, GeomType.SPHERE): sphere_sphere, (GeomType.SPHERE, GeomType.CAPSULE): sphere_capsule, (GeomType.SPHERE, GeomType.BOX): sphere_convex, @@ -90,7 +98,7 @@ _COLLISION_FUNC = { (GeomType.ELLIPSOID, GeomType.ELLIPSOID): ellipsoid_ellipsoid, (GeomType.ELLIPSOID, GeomType.CYLINDER): ellipsoid_cylinder, (GeomType.CYLINDER, GeomType.CYLINDER): cylinder_cylinder, - (GeomType.BOX, GeomType.BOX): convex_convex, + (GeomType.BOX, GeomType.BOX): box_box, (GeomType.BOX, GeomType.MESH): convex_convex, (GeomType.MESH, GeomType.MESH): convex_convex, } @@ -210,6 +218,21 @@ def _geom_groups( condim = max(m.geom_condim[g1], m.geom_condim[g2]) key = FunctionKey(types, data_ids, condim) + + if types[0] == mujoco.mjtGeom.mjGEOM_HFIELD: + # add static grid bounds to the grouping key for hfield collisions + geom_rbound_hfield = ( + m.geom_rbound_hfield if isinstance(m, Model) else m.geom_rbound + ) + nrow, ncol = m.hfield_nrow[data_ids[0]], m.hfield_ncol[data_ids[0]] + xsize, ysize = m.hfield_size[data_ids[0]][:2] + xtick, ytick = (2 * xsize) / (ncol - 1), (2 * ysize) / (nrow - 1) + xbound = int(np.ceil(2 * geom_rbound_hfield[g2] / xtick)) + 1 + xbound = min(xbound, ncol) + ybound = int(np.ceil(2 * geom_rbound_hfield[g2] / ytick)) + 1 + ybound = min(ybound, nrow) + key = FunctionKey(types, data_ids, condim, (xbound, ybound)) + groups.setdefault(key, []).append((g1, g2, ip)) return groups diff --git a/mjx/mujoco/mjx/_src/collision_driver_test.py b/mjx/mujoco/mjx/_src/collision_driver_test.py index 294c6a67..5492ea7f 100644 --- a/mjx/mujoco/mjx/_src/collision_driver_test.py +++ b/mjx/mujoco/mjx/_src/collision_driver_test.py @@ -721,6 +721,95 @@ class ConvexTest(absltest.TestCase): self.assertTrue((c.dist > 0).all()) +class HFieldTest(absltest.TestCase): + _HFIELD = """ + + + + + + + + + + + + + + + + + + + + + + + + + + """ + + def test_sphere_hfield(self): + m = mujoco.MjModel.from_xml_string(self._HFIELD) + mx = mjx.put_model(m) + + d = mujoco.MjData(m) + d.qpos[:] = m.keyframe('qpos1').qpos + dx = mjx.put_data(m, d) + + collision_jit_fn = jax.jit(mjx.collision) + kinematics_jit_fn = jax.jit(mjx.kinematics) + dx = kinematics_jit_fn(mx, dx) + dx = collision_jit_fn(mx, dx) + + # check that all geoms are colliding with the hfield + for geom_id in [1, 2, 3]: + mask = (dx.contact.geom == np.array([0, geom_id])).all(axis=1) + c = jax.tree_util.tree_map(lambda x, m=mask: x[m], dx.contact) + self.assertTrue((c.dist < 0).any()) + self.assertTrue((c.dist > -1e-3).any()) + # all contact normals are roughly pointing in the right direction + self.assertTrue((c.frame[:, 0].dot(np.array([0, 0, 1])) > 0.7).all()) + + def test_hfield_outside(self): + """Tests that objects outside of the hfield do not collide.""" + positions = ['2.0 0', '-2.0 0', '0 -2.0', '0 2.0'] + for p in positions: + xml = self._HFIELD.replace('= 0).all()) + + def test_hfield_deep(self): + """Tests that objects with deep penetration do not get stuck.""" + m = mujoco.MjModel.from_xml_string(self._HFIELD) + mx = mjx.put_model(m) + + d = mujoco.MjData(m) + d.qpos[:] = m.keyframe('qpos2').qpos + dx = mjx.put_data(m, d) + + collision_jit_fn = jax.jit(mjx.collision) + kinematics_jit_fn = jax.jit(mjx.kinematics) + dx = kinematics_jit_fn(mx, dx) + dx = collision_jit_fn(mx, dx) + + # check that all geoms are colliding with the hfield + for geom_id in [1, 2, 3]: + mask = (dx.contact.geom == np.array([0, geom_id])).all(axis=1) + c = jax.tree_util.tree_map(lambda x, m=mask: x[m], dx.contact) + # all contact normals are in the top half-face of the hfield + self.assertTrue((c.frame[:, 0].dot(np.array([0, 0, 1])) > 0.7).all()) + + class BodyPairFilterTest(absltest.TestCase): """Tests that certain body pairs get filtered.""" diff --git a/mjx/mujoco/mjx/_src/collision_types.py b/mjx/mujoco/mjx/_src/collision_types.py index 49d77438..e7af8f23 100644 --- a/mjx/mujoco/mjx/_src/collision_types.py +++ b/mjx/mujoco/mjx/_src/collision_types.py @@ -15,31 +15,10 @@ """Collision base types.""" import dataclasses -from typing import Tuple +from typing import Optional, Tuple import jax -# pylint: disable=g-importing-member -from mujoco.mjx._src.dataclasses import PyTreeNode -# pylint: enable=g-importing-member - - -class GeomInfo(PyTreeNode): - """Geom propertes of primitive and SDF shapes.""" - pos: jax.Array - mat: jax.Array - size: jax.Array - - -class ConvexInfo(PyTreeNode): - """Geom propertes of convex meshes.""" - pos: jax.Array - mat: jax.Array - vert: jax.Array - face: jax.Array - face_normal: jax.Array - edge: jax.Array - edge_face_normal: jax.Array - edge_dir: jax.Array - +from mujoco.mjx._src.dataclasses import PyTreeNode # pylint: disable=g-importing-member +import numpy as np # Collision returned by collision functions: # - distance distance between nearest points; neg: penetration @@ -48,18 +27,53 @@ class ConvexInfo(PyTreeNode): Collision = Tuple[jax.Array, jax.Array, jax.Array] +class GeomInfo(PyTreeNode): + """Geom properties for primitive shapes.""" + + pos: jax.Array + mat: jax.Array + size: jax.Array + + +class ConvexInfo(PyTreeNode): + """Geom properties for convex meshes.""" + + pos: jax.Array + mat: jax.Array + size: jax.Array + vert: jax.Array + face: jax.Array + face_normal: jax.Array + edge: jax.Array + edge_face_normal: jax.Array + edge_dir: Optional[jax.Array] = None + + +class HFieldInfo(PyTreeNode): + """Geom properties for height fields.""" + + pos: jax.Array + mat: jax.Array + size: np.ndarray + nrow: int + ncol: int + data: jax.Array + + @dataclasses.dataclass(frozen=True) class FunctionKey: """Specifies how geom pairs group into collision_driver's function table. Attributes: types: geom type pair, which determines the collision function - data_ids: geom data id pair: mesh id for mesh geoms, otherwise -1. - Meshes have distinct face/vertex counts, so must occupy distinct - entries in the collision function table. + data_ids: geom data id pair: mesh id for mesh geoms, otherwise -1. Meshes + have distinct face/vertex counts, so must occupy distinct entries in the + collision function table. condim: grouping by condim of the colliision ensures that the size of the - resulting constraint jacobian is determined at compile time. + resulting constraint jacobian is determined at compile time. + subgrid_size: the size determines the hfield subgrid to collide with """ types: Tuple[int, int] data_ids: Tuple[int, int] condim: int + subgrid_size: Tuple[int, int] = (-1, -1) diff --git a/mjx/mujoco/mjx/_src/dataclasses.py b/mjx/mujoco/mjx/_src/dataclasses.py index ba513d96..a96bb966 100644 --- a/mjx/mujoco/mjx/_src/dataclasses.py +++ b/mjx/mujoco/mjx/_src/dataclasses.py @@ -30,7 +30,7 @@ def _jax_in_args(typ) -> bool: return True if dataclasses.is_dataclass(typ): return any(_jax_in_args(f.type) for f in dataclasses.fields(typ)) - if typing.get_origin(typ) in (list, dict, Union, set): + if typing.get_origin(typ) in (tuple, list, dict, Union, set): return any(_jax_in_args(t) for t in typing.get_args(typ)) return False diff --git a/mjx/mujoco/mjx/_src/io.py b/mjx/mujoco/mjx/_src/io.py index 594ca15f..5068373a 100644 --- a/mjx/mujoco/mjx/_src/io.py +++ b/mjx/mujoco/mjx/_src/io.py @@ -22,6 +22,7 @@ from jax import numpy as jp import mujoco from mujoco.mjx._src import collision_driver from mujoco.mjx._src import constraint +from mujoco.mjx._src import mesh from mujoco.mjx._src import support from mujoco.mjx._src import types import numpy as np @@ -68,14 +69,16 @@ def put_model(m: mujoco.MjModel, device=None) -> types.Model: if m.ntendon: raise NotImplementedError('tendons are not supported') + mesh_geomid = set() for g1, g2, ip in collision_driver.geom_pairs(m): t1, t2 = m.geom_type[[g1, g2]] # check collision function exists for type pair if not collision_driver.has_collision_fn(t1, t2): t1, t2 = mujoco.mjtGeom(t1), mujoco.mjtGeom(t2) raise NotImplementedError(f'({t1}, {t2}) collisions not implemented.') - # margin/gap not supported for geoms - if mujoco.mjtGeom.mjGEOM_MESH in (t1, t2): + # margin/gap not supported for meshes and height fields + no_margin = {mujoco.mjtGeom.mjGEOM_MESH, mujoco.mjtGeom.mjGEOM_HFIELD} + if no_margin.intersection({t1, t2}): if ip != -1: margin = m.pair_margin[ip] else: @@ -83,6 +86,9 @@ def put_model(m: mujoco.MjModel, device=None) -> types.Model: if margin.any(): t1, t2 = mujoco.mjtGeom(t1), mujoco.mjtGeom(t2) raise NotImplementedError(f'({t1}, {t2}) margin/gap not implemented.') + for t, g in [(t1, g1), (t2, g2)]: + if t == mujoco.mjtGeom.mjGEOM_MESH: + mesh_geomid.add(g) for enum_field, enum_type, mj_type in ( (m.actuator_biastype, types.BiasType, mujoco.mjtBias), @@ -100,12 +106,24 @@ def put_model(m: mujoco.MjModel, device=None) -> types.Model: if not np.allclose(m.dof_frictionloss, 0): raise NotImplementedError('dof_frictionloss is not implemented.') - fields = {f.name: getattr(m, f.name) for f in types.Model.fields()} + mjx_only = {'mesh_convex', 'geom_rbound_hfield'} + mj_field_names = {f.name for f in types.Model.fields()} - mjx_only + fields = {f: getattr(m, f) for f in mj_field_names} + fields['geom_rbound_hfield'] = fields['geom_rbound'] fields['geom_rgba'] = fields['geom_rgba'].reshape((-1, 4)) fields['mat_rgba'] = fields['mat_rgba'].reshape((-1, 4)) fields['cam_mat0'] = fields['cam_mat0'].reshape((-1, 3, 3)) fields['opt'] = _make_option(m.opt) fields['stat'] = _make_statistic(m.stat) + + # Pre-compile meshes for MJX collisions. + fields['mesh_convex'] = [None] * m.nmesh + for i in mesh_geomid: + dataid = m.geom_dataid[i] + if fields['mesh_convex'][dataid] is None: + fields['mesh_convex'][dataid] = mesh.convex(m, dataid) # pytype: disable=unsupported-operands + fields['mesh_convex'] = tuple(fields['mesh_convex']) + model = types.Model(**{k: copy.copy(v) for k, v in fields.items()}) return jax.device_put(model, device=device) diff --git a/mjx/mujoco/mjx/_src/mesh.py b/mjx/mujoco/mjx/_src/mesh.py index 2498aae2..31f45571 100644 --- a/mjx/mujoco/mjx/_src/mesh.py +++ b/mjx/mujoco/mjx/_src/mesh.py @@ -16,14 +16,18 @@ import collections import itertools -from typing import Tuple +from typing import Tuple, Union import warnings import jax from jax import numpy as jp +import mujoco +from mujoco.mjx._src import math # pylint: disable=g-importing-member from mujoco.mjx._src.collision_types import ConvexInfo from mujoco.mjx._src.collision_types import GeomInfo +from mujoco.mjx._src.collision_types import HFieldInfo +from mujoco.mjx._src.types import ConvexMesh from mujoco.mjx._src.types import Model # pylint: enable=g-importing-member import numpy as np @@ -141,7 +145,9 @@ def _convex_hull_2d(points: np.ndarray, normal: np.ndarray) -> np.ndarray: return hull_point_idx -def _merge_coplanar(m: Model, tm: trimesh.Trimesh, meshid: int) -> np.ndarray: +def _merge_coplanar( + m: Union[mujoco.MjModel, Model], tm: trimesh.Trimesh, meshid: int +) -> np.ndarray: """Merges coplanar facets.""" if not tm.facets: return tm.faces.copy() # no facets @@ -221,6 +227,7 @@ def box(info: GeomInfo) -> ConvexInfo: c = ConvexInfo( info.pos, info.mat, + info.size, vert, face, face_normal, @@ -236,22 +243,21 @@ def box(info: GeomInfo) -> ConvexInfo: return c -def convex(m: Model, mesh_id: int, info: GeomInfo) -> ConvexInfo: +def convex(m: Union[mujoco.MjModel, Model], data_id: int) -> ConvexMesh: """Processes a mesh for use in convex collision algorithms. Args: m: an MJX model - mesh_id: the mesh id to process - info: pos, mat, size of this geom + data_id: the mesh id to process Returns: - a convex mesh info + a convex mesh """ - vert_beg = m.mesh_vertadr[mesh_id] - vert_end = m.mesh_vertadr[mesh_id + 1] if mesh_id < m.nmesh - 1 else None + vert_beg = m.mesh_vertadr[data_id] + vert_end = m.mesh_vertadr[data_id + 1] if data_id < m.nmesh - 1 else None vert = m.mesh_vert[vert_beg:vert_end] - graphadr = m.mesh_graphadr[mesh_id] + graphadr = m.mesh_graphadr[data_id] graph = m.mesh_graph[graphadr:] graph_idx = 0 @@ -273,21 +279,98 @@ def convex(m: Model, mesh_id: int, info: GeomInfo) -> ConvexInfo: tm_convex = trimesh.Trimesh(vertices=vert, faces=face) vert = np.array(tm_convex.vertices) - face = _merge_coplanar(m, tm_convex, mesh_id) + face = _merge_coplanar(m, tm_convex, data_id) face_normal = _get_face_norm(vert, face) edge, edge_face_normal = _get_edge_normals(face, face_normal) - edge_dir = _get_unique_edge_dir(vert, face) face = vert[face] # materialize full nface x nvert matrix - c = ConvexInfo( - info.pos, - info.mat, + c = ConvexMesh( vert, face, face_normal, edge, edge_face_normal, - edge_dir, ) return jax.tree_util.tree_map(jp.array, c) + + +def hfield_prism(vert: jax.Array) -> ConvexInfo: + """Builds a hfield prism.""" + # The first 3 vertices define the bottom triangle, and the next 3 vertices + # define the top triangle. The remaining triangles define the side of the + # prism. + face = np.array([ + [0, 1, 2, 0], # bottom + [3, 4, 5, 3], # top + [0, 3, 5, 1], + [0, 2, 4, 3], + [2, 1, 5, 4], + ]) + edges = np.array([ + # bottom + [0, 1], + [1, 2], + [0, 2], + # top + [3, 4], + [3, 5], + [4, 5], + # sides + [0, 3], + [1, 5], + [2, 4], + ]) + edge_face_norm = np.array([ + # bottom + [0, 2], + [0, 4], + [0, 3], + # top + [1, 3], + [1, 2], + [1, 4], + # sides + [2, 3], + [2, 4], + [3, 4], + ]) + + def get_face_norm(face): + # use ccw winding order convention, and avoid using the last vertex + edge0 = face[2, :] - face[1, :] + edge1 = face[0, :] - face[1, :] + return math.normalize(jp.cross(edge0, edge1)) + + centroid = jp.mean(vert, axis=0) + vert = vert - centroid + face = vert[face] + face_norm = jax.vmap(get_face_norm)(face) + + c = ConvexInfo( + centroid, + jp.eye(3, dtype=float), + jp.ones(3), + vert, + face, + face_norm, + edges, + face_norm[edge_face_norm], + None, + ) + + return jax.tree_util.tree_map(jp.array, c) + + +def hfield(m: Union[mujoco.MjModel, Model], data_id: int) -> HFieldInfo: + adr = m.hfield_adr[data_id] + nrow, ncol = m.hfield_nrow[data_id], m.hfield_ncol[data_id] + h = HFieldInfo( + jp.zeros(3, dtype=float), + jp.eye(3, dtype=float), + m.hfield_size[data_id], + nrow, + ncol, + m.hfield_data[adr : adr + nrow * ncol].reshape((ncol, nrow), order='F'), + ) + return h diff --git a/mjx/mujoco/mjx/_src/support.py b/mjx/mujoco/mjx/_src/support.py index 421126f9..0cd31636 100644 --- a/mjx/mujoco/mjx/_src/support.py +++ b/mjx/mujoco/mjx/_src/support.py @@ -197,6 +197,7 @@ def _getnum(m: Union[Model, mujoco.MjModel], obj: mujoco._enums.mjtObj) -> int: mujoco.mjtObj.mjOBJ_SITE: m.nsite, mujoco.mjtObj.mjOBJ_CAMERA: m.ncam, mujoco.mjtObj.mjOBJ_MESH: m.nmesh, + mujoco.mjtObj.mjOBJ_HFIELD: m.nhfield, mujoco.mjtObj.mjOBJ_PAIR: m.npair, mujoco.mjtObj.mjOBJ_EQUALITY: m.neq, mujoco.mjtObj.mjOBJ_ACTUATOR: m.nu, @@ -218,6 +219,7 @@ def _getadr( mujoco.mjtObj.mjOBJ_SITE: m.name_siteadr, mujoco.mjtObj.mjOBJ_CAMERA: m.name_camadr, mujoco.mjtObj.mjOBJ_MESH: m.name_meshadr, + mujoco.mjtObj.mjOBJ_HFIELD: m.name_hfieldadr, mujoco.mjtObj.mjOBJ_PAIR: m.name_pairadr, mujoco.mjtObj.mjOBJ_EQUALITY: m.name_eqadr, mujoco.mjtObj.mjOBJ_ACTUATOR: m.name_actuatoradr, diff --git a/mjx/mujoco/mjx/_src/types.py b/mjx/mujoco/mjx/_src/types.py index caccbea8..0036e58d 100644 --- a/mjx/mujoco/mjx/_src/types.py +++ b/mjx/mujoco/mjx/_src/types.py @@ -15,7 +15,7 @@ """Base types used in MJX.""" import enum - +from typing import Tuple import jax import mujoco from mujoco.mjx._src.dataclasses import PyTreeNode # pylint: disable=g-importing-member @@ -112,6 +112,24 @@ class GeomType(enum.IntEnum): # unsupported: NGEOMTYPES, ARROW*, LINE, SKIN, LABEL, NONE +class ConvexMesh(PyTreeNode): + """Geom properties for convex meshes. + + Attributes: + vert: vertices of the convex mesh + face: faces of the convex mesh + face_normal: normal vectors for the faces + edge: edge indexes for all edges in the convex mesh + edge_face_normal: indexes for face normals adjacent to edges in `edge` + """ + + vert: jax.Array + face: jax.Array + face_normal: jax.Array + edge: jax.Array + edge_face_normal: jax.Array + + class ConeType(enum.IntEnum): """Type of friction cone. @@ -322,6 +340,7 @@ class Model(PyTreeNode): nmesh: number of meshes nmeshvert: number of vertices in all meshes nmeshface: number of triangular faces in all meshes + nhfield: number of heightfields nmat: number of materials npair: number of predefined geom pairs nexclude: number of excluded geom pairs @@ -396,6 +415,7 @@ class Model(PyTreeNode): geom_solimp: constraint solver impedance: contact (ngeom, mjNIMP) geom_size: geom-specific size parameters (ngeom, 3) geom_rbound: radius of bounding sphere (ngeom,) + geom_rbound_hfield: static rbound for hfield grid bounds (ngeom,) geom_pos: local position offset rel. to body (ngeom, 3) geom_quat: local orientation offset rel. to body (ngeom, 4) geom_friction: friction for (slide, spin, roll) (ngeom, 3) @@ -419,6 +439,12 @@ class Model(PyTreeNode): mesh_vert: vertex positions for all meshes (nmeshvert, 3) mesh_face: vertex face data (nmeshface, 3) mesh_graph: convex graph data (nmeshgraph,) + mesh_convex: pre-compiled convex mesh info for MJX (nmesh,) + hfield_size: (x, y, z_top, z_bottom) (nhfield,) + hfield_nrow: number of rows in grid (nhfield,) + hfield_ncol: number of columns in grid (nhfield,) + hfield_adr: address in hfield_data (nhfield,) + hfield_data: elevation data (nhfielddata,) mat_rgba: rgba (nmat, 4) pair_dim: contact dimensionality (npair,) pair_geom1: id of geom1 (npair,) @@ -488,6 +514,7 @@ class Model(PyTreeNode): nmesh: int nmeshvert: int nmeshface: int + nhfield: int nmat: int npair: int nexclude: int @@ -561,6 +588,7 @@ class Model(PyTreeNode): geom_solimp: jax.Array geom_size: jax.Array geom_rbound: jax.Array + geom_rbound_hfield: np.ndarray geom_pos: jax.Array geom_quat: jax.Array geom_friction: jax.Array @@ -584,6 +612,12 @@ class Model(PyTreeNode): mesh_vert: np.ndarray mesh_face: np.ndarray mesh_graph: np.ndarray + mesh_convex: Tuple[ConvexMesh, ...] + hfield_size: np.ndarray + hfield_nrow: np.ndarray + hfield_ncol: np.ndarray + hfield_adr: np.ndarray + hfield_data: jax.Array mat_rgba: np.ndarray pair_dim: np.ndarray pair_geom1: np.ndarray @@ -632,6 +666,7 @@ class Model(PyTreeNode): name_siteadr: np.ndarray name_camadr: np.ndarray name_meshadr: np.ndarray + name_hfieldadr: np.ndarray name_pairadr: np.ndarray name_eqadr: np.ndarray name_actuatoradr: np.ndarray diff --git a/mjx/mujoco/mjx/test_data/barkour_v0/assets/barkour_v0_mjx.xml b/mjx/mujoco/mjx/test_data/barkour_v0/assets/barkour_v0_mjx.xml index a98db27b..82dd41df 100644 --- a/mjx/mujoco/mjx/test_data/barkour_v0/assets/barkour_v0_mjx.xml +++ b/mjx/mujoco/mjx/test_data/barkour_v0/assets/barkour_v0_mjx.xml @@ -77,6 +77,7 @@ + @@ -101,7 +102,8 @@ - + + diff --git a/mjx/mujoco/mjx/test_data/barkour_v0/assets/hfield_240_280.png b/mjx/mujoco/mjx/test_data/barkour_v0/assets/hfield_240_280.png new file mode 100644 index 0000000000000000000000000000000000000000..97f72d2a91ccd770a04059d455dda0e6e1bc4d2a GIT binary patch literal 174417 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%0Ag=~m}3lUz+!tzGMAV=m))6{-~M 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