From f6720271cb7f58084695e9cff2a9f3b3640b4525 Mon Sep 17 00:00:00 2001 From: Yingying Wang Date: Fri, 15 May 2020 12:20:31 -0700 Subject: [PATCH 01/67] sparce accessor exporter --- code/AssetLib/glTF2/glTF2Asset.h | 24 ++++ code/AssetLib/glTF2/glTF2Asset.inl | 130 ++++++++++++++++++- code/AssetLib/glTF2/glTF2AssetWriter.inl | 48 +++++-- code/AssetLib/glTF2/glTF2Exporter.cpp | 156 ++++++++++++++++++++++- 4 files changed, 346 insertions(+), 12 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index 48dab24a7..a60ac98f3 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -367,6 +367,7 @@ struct Object { //! An accessor provides a typed view into a BufferView or a subset of a BufferView //! similar to how WebGL's vertexAttribPointer() defines an attribute in a buffer. struct Accessor : public Object { + struct Sparse; //wangyi 0506 Ref bufferView; //!< The ID of the bufferView. (required) size_t byteOffset; //!< The offset relative to the start of the bufferView in bytes. (required) ComponentType componentType; //!< The datatype of components in the attribute. (required) @@ -374,6 +375,7 @@ struct Accessor : public Object { AttribType::Value type; //!< Specifies if the attribute is a scalar, vector, or matrix. (required) std::vector max; //!< Maximum value of each component in this attribute. std::vector min; //!< Minimum value of each component in this attribute. + std::unique_ptr sparse; //wangyi 0506 unsigned int GetNumComponents(); unsigned int GetBytesPerComponent(); @@ -385,6 +387,10 @@ struct Accessor : public Object { void ExtractData(T *&outData); void WriteData(size_t count, const void *src_buffer, size_t src_stride); + //wangyi 0506 + void WriteSparseValues(size_t count, const void *src_data, size_t src_dataStride); + void WriteSparseIndices(size_t count, const void *src_idx, size_t src_idxStride); + //! Helper class to iterate the data class Indexer { @@ -423,6 +429,22 @@ struct Accessor : public Object { Accessor() {} void Read(Value &obj, Asset &r); + + //wangyi 0506 + //sparse + struct Sparse { + size_t count; + ComponentType indicesType; + Ref indices; + size_t indicesByteOffset; + Ref values; + size_t valuesByteOffset; + + std::vector data; //!< Actual data, which may be defaulted to an array of zeros or the original data, with the sparse buffer view applied on top of it. + + void PopulateData(size_t numBytes, uint8_t *bytes); + void PatchData(unsigned int elementSize); + }; }; //! A buffer points to binary geometry, animation, or skins. @@ -555,6 +577,8 @@ struct BufferView : public Object { BufferViewTarget target; //! The target that the WebGL buffer should be bound to. void Read(Value &obj, Asset &r); + //wangyi 0506 + uint8_t *GetPointer(size_t accOffset); }; struct Camera : public Object { diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index 881fd4efc..09fd48761 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -550,10 +550,67 @@ inline void BufferView::Read(Value &obj, Asset &r) { byteStride = MemberOrDefault(obj, "byteStride", 0u); } +//wangyi 0506 +inline uint8_t *BufferView::GetPointer(size_t accOffset) { + if (!buffer) return 0; + uint8_t *basePtr = buffer->GetPointer(); + if (!basePtr) return 0; + + size_t offset = accOffset + byteOffset; + if (buffer->EncodedRegion_Current != nullptr) { + const size_t begin = buffer->EncodedRegion_Current->Offset; + const size_t end = begin + buffer->EncodedRegion_Current->DecodedData_Length; + if ((offset >= begin) && (offset < end)) + return &buffer->EncodedRegion_Current->DecodedData[offset - begin]; + } + + return basePtr + offset; +} + // // struct Accessor // +//wangyi 0506 +inline void Accessor::Sparse::PopulateData(size_t numBytes, uint8_t *bytes) { + if (bytes) { + data.assign(bytes, bytes + numBytes); + } else { + data.resize(numBytes, 0x00); + } +} + +inline void Accessor::Sparse::PatchData(unsigned int elementSize) { + uint8_t *pIndices = indices->GetPointer(indicesByteOffset); + const unsigned int indexSize = int(ComponentTypeSize(indicesType)); + uint8_t *indicesEnd = pIndices + count * indexSize; + + uint8_t *pValues = values->GetPointer(valuesByteOffset); + while (pIndices != indicesEnd) { + size_t offset; + switch (indicesType) { + case ComponentType_UNSIGNED_BYTE: + offset = *pIndices; + break; + case ComponentType_UNSIGNED_SHORT: + offset = *reinterpret_cast(pIndices); + break; + case ComponentType_UNSIGNED_INT: + offset = *reinterpret_cast(pIndices); + break; + default: + // have fun with float and negative values from signed types as indices. + throw DeadlyImportError("Unsupported component type in index."); + } + + offset *= elementSize; + std::memcpy(data.data() + offset, pValues, elementSize); + + pValues += elementSize; + pIndices += indexSize; + } +} +// wangyi 0506 inline void Accessor::Read(Value &obj, Asset &r) { if (Value *bufferViewVal = FindUInt(obj, "bufferView")) { @@ -566,6 +623,43 @@ inline void Accessor::Read(Value &obj, Asset &r) { const char *typestr; type = ReadMember(obj, "type", typestr) ? AttribType::FromString(typestr) : AttribType::SCALAR; + + //wangyi 0506 + if (Value *sparseValue = FindObject(obj, "sparse")) { + sparse.reset(new Sparse); + // count + ReadMember(*sparseValue, "count", sparse->count); + + // indices + if (Value *indicesValue = FindObject(*sparseValue, "indices")) { + //indices bufferView + Value *indiceViewID = FindUInt(*indicesValue, "bufferView"); + sparse->indices = r.bufferViews.Retrieve(indiceViewID->GetUint()); + //indices byteOffset + sparse->indicesByteOffset = MemberOrDefault(*indicesValue, "byteOffset", size_t(0)); + //indices componentType + sparse->indicesType = MemberOrDefault(*indicesValue, "componentType", ComponentType_BYTE); + //sparse->indices->Read(*indicesValue, r); + } + + // value + if (Value *valuesValue = FindObject(*sparseValue, "values")) { + //value bufferView + Value *valueViewID = FindUInt(*valuesValue, "bufferView"); + sparse->values = r.bufferViews.Retrieve(valueViewID->GetUint()); + //value byteOffset + sparse->valuesByteOffset = MemberOrDefault(*valuesValue, "byteOffset", size_t(0)); + //sparse->values->Read(*valuesValue, r); + } + + // indicesType + sparse->indicesType = MemberOrDefault(*sparseValue, "componentType", ComponentType_UNSIGNED_SHORT); + + const unsigned int elementSize = GetElementSize(); + const size_t dataSize = count * elementSize; + sparse->PopulateData(dataSize, bufferView ? bufferView->GetPointer(byteOffset) : 0); + sparse->PatchData(elementSize); + } } inline unsigned int Accessor::GetNumComponents() { @@ -580,7 +674,11 @@ inline unsigned int Accessor::GetElementSize() { return GetNumComponents() * GetBytesPerComponent(); } +// wangyi 0506 inline uint8_t *Accessor::GetPointer() { + if (sparse) + return sparse->data.data(); + if (!bufferView || !bufferView->buffer) return 0; uint8_t *basePtr = bufferView->buffer->GetPointer(); if (!basePtr) return 0; @@ -635,7 +733,8 @@ void Accessor::ExtractData(T *&outData) const size_t targetElemSize = sizeof(T); ai_assert(elemSize <= targetElemSize); - ai_assert(count * stride <= bufferView->byteLength); + //wangyi 0506 + ai_assert(count * stride <= (bufferView ? bufferView->byteLength : sparse->data.size())); outData = new T[count]; if (stride == elemSize && targetElemSize == elemSize) { @@ -660,6 +759,35 @@ inline void Accessor::WriteData(size_t _count, const void *src_buffer, size_t sr CopyData(_count, src, src_stride, dst, dst_stride); } +//wangyi 0506 +inline void Accessor::WriteSparseValues(size_t _count, const void *src_data, size_t src_dataStride) { + if (!sparse) + return; + + // values + uint8_t *value_buffer_ptr = sparse->values->buffer->GetPointer(); + size_t value_offset = sparse->valuesByteOffset + sparse->values->byteOffset; + size_t value_dst_stride = GetNumComponents() * GetBytesPerComponent(); + const uint8_t *value_src = reinterpret_cast(src_data); + uint8_t *value_dst = reinterpret_cast(value_buffer_ptr + value_offset); + ai_assert(value_dst + _count * value_dst_stride <= value_buffer_ptr + sparse->values->buffer->byteLength); + CopyData(_count, value_src, src_dataStride, value_dst, value_dst_stride); +} + +//wangyi 0506 +inline void Accessor::WriteSparseIndices(size_t _count, const void *src_idx, size_t src_idxStride) { + if (!sparse) + return; + + // indices + uint8_t *indices_buffer_ptr = sparse->indices->buffer->GetPointer(); + size_t indices_offset = sparse->indicesByteOffset + sparse->indices->byteOffset; + size_t indices_dst_stride = 1 * sizeof(unsigned short); + const uint8_t *indices_src = reinterpret_cast(src_idx); + uint8_t *indices_dst = reinterpret_cast(indices_buffer_ptr + indices_offset); + ai_assert(indices_dst + _count * indices_dst_stride <= indices_buffer_ptr + sparse->indices->buffer->byteLength); + CopyData(_count, indices_src, src_idxStride, indices_dst, indices_dst_stride); +} inline Accessor::Indexer::Indexer(Accessor &acc) : accessor(acc), data(acc.GetPointer()), elemSize(acc.GetElementSize()), stride(acc.bufferView && acc.bufferView->byteStride ? acc.bufferView->byteStride : elemSize) { } diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.inl b/code/AssetLib/glTF2/glTF2AssetWriter.inl index 798f38c1c..5e936384f 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.inl +++ b/code/AssetLib/glTF2/glTF2AssetWriter.inl @@ -107,21 +107,49 @@ namespace glTF2 { inline void Write(Value& obj, Accessor& a, AssetWriter& w) { - obj.AddMember("bufferView", a.bufferView->index, w.mAl); - obj.AddMember("byteOffset", (unsigned int)a.byteOffset, w.mAl); + //wangyi 0506 + if (a.bufferView) { + obj.AddMember("bufferView", a.bufferView->index, w.mAl); + obj.AddMember("byteOffset", (unsigned int)a.byteOffset, w.mAl); + Value vTmpMax, vTmpMin; + if (a.componentType == ComponentType_FLOAT) { + obj.AddMember("max", MakeValue(vTmpMax, a.max, w.mAl), w.mAl); + obj.AddMember("min", MakeValue(vTmpMin, a.min, w.mAl), w.mAl); + } else { + obj.AddMember("max", MakeValueCast(vTmpMax, a.max, w.mAl), w.mAl); + obj.AddMember("min", MakeValueCast(vTmpMin, a.min, w.mAl), w.mAl); + } + } obj.AddMember("componentType", int(a.componentType), w.mAl); obj.AddMember("count", (unsigned int)a.count, w.mAl); obj.AddMember("type", StringRef(AttribType::ToString(a.type)), w.mAl); - Value vTmpMax, vTmpMin; - if (a.componentType == ComponentType_FLOAT) { - obj.AddMember("max", MakeValue(vTmpMax, a.max, w.mAl), w.mAl); - obj.AddMember("min", MakeValue(vTmpMin, a.min, w.mAl), w.mAl); - } else { - obj.AddMember("max", MakeValueCast(vTmpMax, a.max, w.mAl), w.mAl); - obj.AddMember("min", MakeValueCast(vTmpMin, a.min, w.mAl), w.mAl); - } + // wangyi 0506 + if (a.sparse) { + Value sparseValue; + sparseValue.SetObject(); + + //count + sparseValue.AddMember("count", (unsigned int)a.sparse->count, w.mAl); + + //indices + Value indices; + indices.SetObject(); + indices.AddMember("bufferView", a.sparse->indices->index, w.mAl); + indices.AddMember("byteOffset", (unsigned int)a.sparse->indicesByteOffset, w.mAl); + indices.AddMember("componentType", int(a.sparse->indicesType), w.mAl); + sparseValue.AddMember("indices", indices, w.mAl); + + //values + Value values; + values.SetObject(); + values.AddMember("bufferView", a.sparse->values->index, w.mAl); + values.AddMember("byteOffset", (unsigned int)a.sparse->valuesByteOffset, w.mAl); + sparseValue.AddMember("values", values, w.mAl); + + obj.AddMember("sparse", sparseValue, w.mAl); + } } inline void Write(Value& obj, Animation& a, AssetWriter& w) diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index da6d9ab2e..8d6471db2 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -207,6 +207,152 @@ inline void SetAccessorRange(ComponentType compType, Ref acc, void* da } } +// wangyi 0506 +// compute the (data-dataBase), store the non-zero data items +template +size_t NZDiff(void *data, void *dataBase, size_t count, unsigned int numCompsIn, unsigned int numCompsOut, void *&outputNZDiff, void *&outputNZIdx) { + std::vector vNZDiff; + std::vector vNZIdx; + size_t totalComps = count * numCompsIn; + T *bufferData_ptr = static_cast(data); + T *bufferData_end = bufferData_ptr + totalComps; + T *bufferBase_ptr = static_cast(dataBase); + + // Search and set extreme values. + for (short idx = 0; bufferData_ptr < bufferData_end; idx += 1, bufferData_ptr += numCompsIn) { + bool bNonZero = false; + + //for the data, check any component Non Zero + for (unsigned int j = 0; j < numCompsOut; j++) { + double valueData = bufferData_ptr[j]; + double valueBase = bufferBase_ptr ? bufferBase_ptr[j] : 0; + if ((valueData - valueBase) != 0) { + bNonZero = true; + break; + } + } + + //all zeros, continue + if (!bNonZero) + continue; + + //non zero, store the data + for (unsigned int j = 0; j < numCompsOut; j++) { + T valueData = bufferData_ptr[j]; + T valueBase = bufferBase_ptr ? bufferBase_ptr[j] : 0; + vNZDiff.push_back(valueData - valueBase); + } + vNZIdx.push_back(idx); + } + + //process data + outputNZDiff = new T[vNZDiff.size()]; + memcpy(outputNZDiff, vNZDiff.data(), vNZDiff.size() * sizeof(T)); + + outputNZIdx = new unsigned short[vNZIdx.size()]; + memcpy(outputNZIdx, vNZIdx.data(), vNZIdx.size() * sizeof(unsigned short)); + return vNZIdx.size(); +} + +inline size_t NZDiff(ComponentType compType, void *data, void *dataBase, size_t count, unsigned int numCompsIn, unsigned int numCompsOut, void *&nzDiff, void *&nzIdx) { + switch (compType) { + case ComponentType_SHORT: + return NZDiff(data, dataBase, count, numCompsIn, numCompsOut, nzDiff, nzIdx); + case ComponentType_UNSIGNED_SHORT: + return NZDiff(data, dataBase, count, numCompsIn, numCompsOut, nzDiff, nzIdx); + case ComponentType_UNSIGNED_INT: + return NZDiff(data, dataBase, count, numCompsIn, numCompsOut, nzDiff, nzIdx); + case ComponentType_FLOAT: + return NZDiff(data, dataBase, count, numCompsIn, numCompsOut, nzDiff, nzIdx); + case ComponentType_BYTE: + return NZDiff(data, dataBase, count, numCompsIn, numCompsOut, nzDiff, nzIdx); + case ComponentType_UNSIGNED_BYTE: + return NZDiff(data, dataBase, count, numCompsIn, numCompsOut, nzDiff, nzIdx); + } + return 0; +} +// wangyi 0506 +inline Ref ExportDataSparse(Asset &a, std::string &meshName, Ref &buffer, + size_t count, void *data, AttribType::Value typeIn, AttribType::Value typeOut, ComponentType compType, BufferViewTarget target = BufferViewTarget_NONE, void *dataBase = 0) { + if (!count || !data) { + return Ref(); + } + + unsigned int numCompsIn = AttribType::GetNumComponents(typeIn); + unsigned int numCompsOut = AttribType::GetNumComponents(typeOut); + unsigned int bytesPerComp = ComponentTypeSize(compType); + + // accessor + Ref acc = a.accessors.Create(a.FindUniqueID(meshName, "accessor")); + + // if there is a basic data vector + if (dataBase) { + size_t base_offset = buffer->byteLength; + size_t base_padding = base_offset % bytesPerComp; + base_offset += base_padding; + size_t base_length = count * numCompsOut * bytesPerComp; + buffer->Grow(base_length + base_padding); + + Ref bv = a.bufferViews.Create(a.FindUniqueID(meshName, "view")); + bv->buffer = buffer; + bv->byteOffset = base_offset; + bv->byteLength = base_length; //! The target that the WebGL buffer should be bound to. + bv->byteStride = 0; + bv->target = target; + acc->bufferView = bv; + acc->WriteData(count, dataBase, numCompsIn * bytesPerComp); + } + acc->byteOffset = 0; + acc->componentType = compType; + acc->count = count; + acc->type = typeOut; + + if (data) { + void *nzDiff = 0, *nzIdx = 0; + size_t nzCount = NZDiff(compType, data, dataBase, count, numCompsIn, numCompsOut, nzDiff, nzIdx); + acc->sparse.reset(new Accessor::Sparse); + acc->sparse->count = nzCount; + + //indices + unsigned int bytesPerIdx = sizeof(unsigned short); + size_t indices_offset = buffer->byteLength; + size_t indices_padding = indices_offset % bytesPerIdx; + indices_offset += indices_padding; + size_t indices_length = nzCount * 1 * bytesPerIdx; + buffer->Grow(indices_length + indices_padding); + + Ref indicesBV = a.bufferViews.Create(a.FindUniqueID(meshName, "view")); + indicesBV->buffer = buffer; + indicesBV->byteOffset = indices_offset; + indicesBV->byteLength = indices_length; + indicesBV->byteStride = 0; + acc->sparse->indices = indicesBV; + acc->sparse->indicesType = ComponentType_UNSIGNED_SHORT; + acc->sparse->indicesByteOffset = 0; + acc->WriteSparseIndices(nzCount, nzIdx, 1 * bytesPerIdx); + + //values + size_t values_offset = buffer->byteLength; + size_t values_padding = values_offset % bytesPerComp; + values_offset += values_padding; + size_t values_length = nzCount * numCompsOut * bytesPerComp; + buffer->Grow(values_length + values_padding); + + Ref valuesBV = a.bufferViews.Create(a.FindUniqueID(meshName, "view")); + valuesBV->buffer = buffer; + valuesBV->byteOffset = values_offset; + valuesBV->byteLength = values_length; + valuesBV->byteStride = 0; + acc->sparse->values = valuesBV; + acc->sparse->valuesByteOffset = 0; + acc->WriteSparseValues(nzCount, nzDiff, numCompsIn * bytesPerComp); + + //clear + delete[] nzDiff; + delete[] nzIdx; + } + return acc; +} inline Ref ExportData(Asset& a, std::string& meshName, Ref& buffer, size_t count, void* data, AttribType::Value typeIn, AttribType::Value typeOut, ComponentType compType, BufferViewTarget target = BufferViewTarget_NONE) { @@ -828,7 +974,11 @@ void glTF2Exporter::ExportMeshes() for (unsigned int vt = 0; vt < pAnimMesh->mNumVertices; ++vt) { pPositionDiff[vt] = pAnimMesh->mVertices[vt] - aim->mVertices[vt]; } - Ref vec = ExportData(*mAsset, meshId, b, + /*Ref vec = ExportData(*mAsset, meshId, b, + pAnimMesh->mNumVertices, pPositionDiff, + AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT);*/ + //wangyi 0506 + Ref vec = ExportDataSparse(*mAsset, meshId, b, pAnimMesh->mNumVertices, pPositionDiff, AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); if (vec) { @@ -843,6 +993,10 @@ void glTF2Exporter::ExportMeshes() for (unsigned int vt = 0; vt < pAnimMesh->mNumVertices; ++vt) { pNormalDiff[vt] = pAnimMesh->mNormals[vt] - aim->mNormals[vt]; } + /*Ref vec = ExportData(*mAsset, meshId, b, + pAnimMesh->mNumVertices, pNormalDiff, + AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT);*/ + //wangyi 0506 Ref vec = ExportData(*mAsset, meshId, b, pAnimMesh->mNumVertices, pNormalDiff, AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); From b8e39b58d1a5101b88032de00029c3b40d8bf750 Mon Sep 17 00:00:00 2001 From: Yingying Wang Date: Fri, 15 May 2020 12:32:58 -0700 Subject: [PATCH 02/67] clean up --- code/AssetLib/glTF2/glTF2Asset.h | 7 ++----- code/AssetLib/glTF2/glTF2Asset.inl | 10 +--------- code/AssetLib/glTF2/glTF2AssetWriter.inl | 2 -- code/AssetLib/glTF2/glTF2Exporter.cpp | 21 ++++++++++----------- 4 files changed, 13 insertions(+), 27 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index a60ac98f3..b413f1fe7 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -367,7 +367,7 @@ struct Object { //! An accessor provides a typed view into a BufferView or a subset of a BufferView //! similar to how WebGL's vertexAttribPointer() defines an attribute in a buffer. struct Accessor : public Object { - struct Sparse; //wangyi 0506 + struct Sparse; Ref bufferView; //!< The ID of the bufferView. (required) size_t byteOffset; //!< The offset relative to the start of the bufferView in bytes. (required) ComponentType componentType; //!< The datatype of components in the attribute. (required) @@ -375,7 +375,7 @@ struct Accessor : public Object { AttribType::Value type; //!< Specifies if the attribute is a scalar, vector, or matrix. (required) std::vector max; //!< Maximum value of each component in this attribute. std::vector min; //!< Minimum value of each component in this attribute. - std::unique_ptr sparse; //wangyi 0506 + std::unique_ptr sparse; unsigned int GetNumComponents(); unsigned int GetBytesPerComponent(); @@ -387,7 +387,6 @@ struct Accessor : public Object { void ExtractData(T *&outData); void WriteData(size_t count, const void *src_buffer, size_t src_stride); - //wangyi 0506 void WriteSparseValues(size_t count, const void *src_data, size_t src_dataStride); void WriteSparseIndices(size_t count, const void *src_idx, size_t src_idxStride); @@ -430,7 +429,6 @@ struct Accessor : public Object { Accessor() {} void Read(Value &obj, Asset &r); - //wangyi 0506 //sparse struct Sparse { size_t count; @@ -577,7 +575,6 @@ struct BufferView : public Object { BufferViewTarget target; //! The target that the WebGL buffer should be bound to. void Read(Value &obj, Asset &r); - //wangyi 0506 uint8_t *GetPointer(size_t accOffset); }; diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index 09fd48761..b81d73eda 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -550,7 +550,6 @@ inline void BufferView::Read(Value &obj, Asset &r) { byteStride = MemberOrDefault(obj, "byteStride", 0u); } -//wangyi 0506 inline uint8_t *BufferView::GetPointer(size_t accOffset) { if (!buffer) return 0; uint8_t *basePtr = buffer->GetPointer(); @@ -571,7 +570,6 @@ inline uint8_t *BufferView::GetPointer(size_t accOffset) { // struct Accessor // -//wangyi 0506 inline void Accessor::Sparse::PopulateData(size_t numBytes, uint8_t *bytes) { if (bytes) { data.assign(bytes, bytes + numBytes); @@ -610,7 +608,7 @@ inline void Accessor::Sparse::PatchData(unsigned int elementSize) { pIndices += indexSize; } } -// wangyi 0506 + inline void Accessor::Read(Value &obj, Asset &r) { if (Value *bufferViewVal = FindUInt(obj, "bufferView")) { @@ -624,7 +622,6 @@ inline void Accessor::Read(Value &obj, Asset &r) { const char *typestr; type = ReadMember(obj, "type", typestr) ? AttribType::FromString(typestr) : AttribType::SCALAR; - //wangyi 0506 if (Value *sparseValue = FindObject(obj, "sparse")) { sparse.reset(new Sparse); // count @@ -674,7 +671,6 @@ inline unsigned int Accessor::GetElementSize() { return GetNumComponents() * GetBytesPerComponent(); } -// wangyi 0506 inline uint8_t *Accessor::GetPointer() { if (sparse) return sparse->data.data(); @@ -732,8 +728,6 @@ void Accessor::ExtractData(T *&outData) const size_t targetElemSize = sizeof(T); ai_assert(elemSize <= targetElemSize); - - //wangyi 0506 ai_assert(count * stride <= (bufferView ? bufferView->byteLength : sparse->data.size())); outData = new T[count]; @@ -759,7 +753,6 @@ inline void Accessor::WriteData(size_t _count, const void *src_buffer, size_t sr CopyData(_count, src, src_stride, dst, dst_stride); } -//wangyi 0506 inline void Accessor::WriteSparseValues(size_t _count, const void *src_data, size_t src_dataStride) { if (!sparse) return; @@ -774,7 +767,6 @@ inline void Accessor::WriteSparseValues(size_t _count, const void *src_data, siz CopyData(_count, value_src, src_dataStride, value_dst, value_dst_stride); } -//wangyi 0506 inline void Accessor::WriteSparseIndices(size_t _count, const void *src_idx, size_t src_idxStride) { if (!sparse) return; diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.inl b/code/AssetLib/glTF2/glTF2AssetWriter.inl index 5e936384f..6d7e28738 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.inl +++ b/code/AssetLib/glTF2/glTF2AssetWriter.inl @@ -107,7 +107,6 @@ namespace glTF2 { inline void Write(Value& obj, Accessor& a, AssetWriter& w) { - //wangyi 0506 if (a.bufferView) { obj.AddMember("bufferView", a.bufferView->index, w.mAl); obj.AddMember("byteOffset", (unsigned int)a.byteOffset, w.mAl); @@ -125,7 +124,6 @@ namespace glTF2 { obj.AddMember("count", (unsigned int)a.count, w.mAl); obj.AddMember("type", StringRef(AttribType::ToString(a.type)), w.mAl); - // wangyi 0506 if (a.sparse) { Value sparseValue; sparseValue.SetObject(); diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index 8d6471db2..41fe4c9c8 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -207,7 +207,6 @@ inline void SetAccessorRange(ComponentType compType, Ref acc, void* da } } -// wangyi 0506 // compute the (data-dataBase), store the non-zero data items template size_t NZDiff(void *data, void *dataBase, size_t count, unsigned int numCompsIn, unsigned int numCompsOut, void *&outputNZDiff, void *&outputNZIdx) { @@ -271,7 +270,7 @@ inline size_t NZDiff(ComponentType compType, void *data, void *dataBase, size_t } return 0; } -// wangyi 0506 + inline Ref ExportDataSparse(Asset &a, std::string &meshName, Ref &buffer, size_t count, void *data, AttribType::Value typeIn, AttribType::Value typeOut, ComponentType compType, BufferViewTarget target = BufferViewTarget_NONE, void *dataBase = 0) { if (!count || !data) { @@ -974,13 +973,13 @@ void glTF2Exporter::ExportMeshes() for (unsigned int vt = 0; vt < pAnimMesh->mNumVertices; ++vt) { pPositionDiff[vt] = pAnimMesh->mVertices[vt] - aim->mVertices[vt]; } - /*Ref vec = ExportData(*mAsset, meshId, b, - pAnimMesh->mNumVertices, pPositionDiff, - AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT);*/ - //wangyi 0506 - Ref vec = ExportDataSparse(*mAsset, meshId, b, + Ref vec = ExportData(*mAsset, meshId, b, pAnimMesh->mNumVertices, pPositionDiff, AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); + /* sparse + Ref vec = ExportDataSparse(*mAsset, meshId, b, + pAnimMesh->mNumVertices, pPositionDiff, + AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT);*/ if (vec) { p.targets[am].position.push_back(vec); } @@ -993,13 +992,13 @@ void glTF2Exporter::ExportMeshes() for (unsigned int vt = 0; vt < pAnimMesh->mNumVertices; ++vt) { pNormalDiff[vt] = pAnimMesh->mNormals[vt] - aim->mNormals[vt]; } - /*Ref vec = ExportData(*mAsset, meshId, b, - pAnimMesh->mNumVertices, pNormalDiff, - AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT);*/ - //wangyi 0506 Ref vec = ExportData(*mAsset, meshId, b, pAnimMesh->mNumVertices, pNormalDiff, AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); + /* sparse + Ref vec = ExportDataSparse(*mAsset, meshId, b, + pAnimMesh->mNumVertices, pNormalDiff, + AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT);*/ if (vec) { p.targets[am].normal.push_back(vec); } From 50f0a86798399d474495da22d045d4da543ed481 Mon Sep 17 00:00:00 2001 From: Yingying Wang Date: Tue, 19 May 2020 16:10:41 -0700 Subject: [PATCH 03/67] conditional export --- code/AssetLib/glTF2/glTF2Exporter.cpp | 45 +++++++++++++++++---------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index 088503636..072809dc4 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -969,10 +969,15 @@ void glTF2Exporter::ExportMeshes() /*************** Targets for blendshapes ****************/ if (aim->mNumAnimMeshes > 0) { + //wangyi 0506 + bool bUseSparse = this->mProperties->HasPropertyBool("GLTF2_SPARSE_ACCESSOR_EXP") && + this->mProperties->GetPropertyBool("GLTF2_SPARSE_ACCESSOR_EXP"); + bool bIncludeNormal = this->mProperties->HasPropertyBool("GLTF2_TARGET_NORMAL_EXP") && + this->mProperties->GetPropertyBool("GLTF2_TARGET_NORMAL_EXP"); + p.targets.resize(aim->mNumAnimMeshes); for (unsigned int am = 0; am < aim->mNumAnimMeshes; ++am) { aiAnimMesh *pAnimMesh = aim->mAnimMeshes[am]; - // position if (pAnimMesh->HasPositions()) { // NOTE: in gltf it is the diff stored @@ -980,13 +985,17 @@ void glTF2Exporter::ExportMeshes() for (unsigned int vt = 0; vt < pAnimMesh->mNumVertices; ++vt) { pPositionDiff[vt] = pAnimMesh->mVertices[vt] - aim->mVertices[vt]; } - Ref vec = ExportData(*mAsset, meshId, b, - pAnimMesh->mNumVertices, pPositionDiff, - AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); - /* sparse - Ref vec = ExportDataSparse(*mAsset, meshId, b, - pAnimMesh->mNumVertices, pPositionDiff, - AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT);*/ + //wangyi 0506 + Ref vec; + if (bUseSparse) { + vec = ExportDataSparse(*mAsset, meshId, b, + pAnimMesh->mNumVertices, pPositionDiff, + AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); + } else { + vec = ExportData(*mAsset, meshId, b, + pAnimMesh->mNumVertices, pPositionDiff, + AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); + } if (vec) { p.targets[am].position.push_back(vec); } @@ -994,18 +1003,22 @@ void glTF2Exporter::ExportMeshes() } // normal - if (pAnimMesh->HasNormals()) { + if (pAnimMesh->HasNormals() && bIncludeNormal) { aiVector3D *pNormalDiff = new aiVector3D[pAnimMesh->mNumVertices]; for (unsigned int vt = 0; vt < pAnimMesh->mNumVertices; ++vt) { pNormalDiff[vt] = pAnimMesh->mNormals[vt] - aim->mNormals[vt]; } - Ref vec = ExportData(*mAsset, meshId, b, - pAnimMesh->mNumVertices, pNormalDiff, - AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); - /* sparse - Ref vec = ExportDataSparse(*mAsset, meshId, b, - pAnimMesh->mNumVertices, pNormalDiff, - AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT);*/ + //wangyi 0506 + Ref vec; + if (bUseSparse) { + vec = ExportDataSparse(*mAsset, meshId, b, + pAnimMesh->mNumVertices, pNormalDiff, + AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); + } else { + vec = ExportData(*mAsset, meshId, b, + pAnimMesh->mNumVertices, pNormalDiff, + AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT); + } if (vec) { p.targets[am].normal.push_back(vec); } From 87584eb007df4dda029cbac5e328941742129d5d Mon Sep 17 00:00:00 2001 From: FRICOTEAUX Date: Thu, 28 May 2020 11:05:38 +0200 Subject: [PATCH 04/67] glTF2: fix "file size doesn't match" issue when importing GLB in Blender --- code/glTF2/glTF2AssetWriter.inl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/glTF2/glTF2AssetWriter.inl b/code/glTF2/glTF2AssetWriter.inl index 02c14980d..f9bbb7ef7 100644 --- a/code/glTF2/glTF2AssetWriter.inl +++ b/code/glTF2/glTF2AssetWriter.inl @@ -672,10 +672,13 @@ namespace glTF2 { // Binary chunk // + int GLB_Chunk_count = 1; uint32_t binaryChunkLength = 0; if (bodyBuffer->byteLength > 0) { binaryChunkLength = (bodyBuffer->byteLength + 3) & ~3; // Round up to next multiple of 4 - auto paddingLength = binaryChunkLength - bodyBuffer->byteLength; + + auto curPaddingLength = binaryChunkLength - bodyBuffer->byteLength; + ++GLB_Chunk_count; GLB_Chunk binaryChunk; binaryChunk.chunkLength = binaryChunkLength; @@ -690,7 +693,7 @@ namespace glTF2 { if (outfile->Write(bodyBuffer->GetPointer(), 1, bodyBuffer->byteLength) != bodyBuffer->byteLength) { throw DeadlyExportError("Failed to write body data!"); } - if (paddingLength && outfile->Write(&padding, 1, paddingLength) != paddingLength) { + if (curPaddingLength && outfile->Write(&padding, 1, paddingLength) != paddingLength) { throw DeadlyExportError("Failed to write body data padding!"); } } @@ -705,7 +708,7 @@ namespace glTF2 { header.version = 2; AI_SWAP4(header.version); - header.length = uint32_t(sizeof(GLB_Header) + 2 * sizeof(GLB_Chunk) + jsonChunkLength + binaryChunkLength); + header.length = uint32_t(sizeof(GLB_Header) + GLB_Chunk_count * sizeof(GLB_Chunk) + jsonChunkLength + binaryChunkLength); AI_SWAP4(header.length); outfile->Seek(0, aiOrigin_SET); From 206551247050a02cf21bdf1b5cf45190af38492a Mon Sep 17 00:00:00 2001 From: Yingying Wang Date: Mon, 8 Jun 2020 14:41:53 -0700 Subject: [PATCH 05/67] remove comments --- code/AssetLib/glTF2/glTF2Exporter.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index 072809dc4..def4268a1 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -969,7 +969,6 @@ void glTF2Exporter::ExportMeshes() /*************** Targets for blendshapes ****************/ if (aim->mNumAnimMeshes > 0) { - //wangyi 0506 bool bUseSparse = this->mProperties->HasPropertyBool("GLTF2_SPARSE_ACCESSOR_EXP") && this->mProperties->GetPropertyBool("GLTF2_SPARSE_ACCESSOR_EXP"); bool bIncludeNormal = this->mProperties->HasPropertyBool("GLTF2_TARGET_NORMAL_EXP") && @@ -985,7 +984,6 @@ void glTF2Exporter::ExportMeshes() for (unsigned int vt = 0; vt < pAnimMesh->mNumVertices; ++vt) { pPositionDiff[vt] = pAnimMesh->mVertices[vt] - aim->mVertices[vt]; } - //wangyi 0506 Ref vec; if (bUseSparse) { vec = ExportDataSparse(*mAsset, meshId, b, @@ -1008,7 +1006,6 @@ void glTF2Exporter::ExportMeshes() for (unsigned int vt = 0; vt < pAnimMesh->mNumVertices; ++vt) { pNormalDiff[vt] = pAnimMesh->mNormals[vt] - aim->mNormals[vt]; } - //wangyi 0506 Ref vec; if (bUseSparse) { vec = ExportDataSparse(*mAsset, meshId, b, From f18f1a35f6026ff14e1f60dc549bad8c69b5e4f0 Mon Sep 17 00:00:00 2001 From: Yingying Wang Date: Mon, 8 Jun 2020 14:49:50 -0700 Subject: [PATCH 06/67] accommodate linux build --- code/AssetLib/glTF2/glTF2Exporter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index def4268a1..eb642ca08 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -354,8 +354,8 @@ inline Ref ExportDataSparse(Asset &a, std::string &meshName, RefWriteSparseValues(nzCount, nzDiff, numCompsIn * bytesPerComp); //clear - delete[] nzDiff; - delete[] nzIdx; + delete[] (char*)nzDiff; + delete[] (char*)nzIdx; } return acc; } From 8fed101432ae4f24b69db105971089791a98fee7 Mon Sep 17 00:00:00 2001 From: Yingying Wang Date: Mon, 8 Jun 2020 16:18:11 -0700 Subject: [PATCH 07/67] avoid all zero --- code/AssetLib/glTF2/glTF2Exporter.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index eb642ca08..31cd1f1c6 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -251,6 +251,13 @@ size_t NZDiff(void *data, void *dataBase, size_t count, unsigned int numCompsIn, vNZIdx.push_back(idx); } + //avoid all-0, put 1 item + if (vNZDiff.size() == 0) { + for (unsigned int j = 0; j < numCompsOut; j++) + vNZDiff.push_back(0); + vNZIdx.push_back(0); + } + //process data outputNZDiff = new T[vNZDiff.size()]; memcpy(outputNZDiff, vNZDiff.data(), vNZDiff.size() * sizeof(T)); From 578a7ac5022f26facaef146390cedbd5229c347f Mon Sep 17 00:00:00 2001 From: Yingying Wang Date: Tue, 9 Jun 2020 11:20:48 -0700 Subject: [PATCH 08/67] add Callback API in ExporterProperties --- code/Common/Exporter.cpp | 16 ++++- include/assimp/Exporter.hpp | 135 +++++++++++++++++++----------------- 2 files changed, 87 insertions(+), 64 deletions(-) diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index c34457be5..e8ee188e6 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -580,10 +580,24 @@ ExportProperties::ExportProperties(const ExportProperties &other) : mIntProperties(other.mIntProperties) , mFloatProperties(other.mFloatProperties) , mStringProperties(other.mStringProperties) -, mMatrixProperties(other.mMatrixProperties) { +, mMatrixProperties(other.mMatrixProperties) +//wangyi 0608 +, mCallbackProperties(other.mCallbackProperties){ // empty } +//wangyi 0608 +bool ExportProperties::SetPropertyCallback(const char *szName, std::function &f) { + return SetGenericProperty>(mCallbackProperties, szName, f); +} +std::function ExportProperties::GetPropertyCallback(const char *szName) const { + return GetGenericProperty>(mCallbackProperties, szName, 0); +} +//wangyi 0608 +bool ExportProperties::HasPropertyCallback(const char *szName) const { + return HasGenericProperty>(mCallbackProperties, szName); +} + // ------------------------------------------------------------------------------------------------ // Set a configuration property bool ExportProperties::SetPropertyInteger(const char* szName, int iValue) { diff --git a/include/assimp/Exporter.hpp b/include/assimp/Exporter.hpp index dc6661c11..4abea6ad0 100644 --- a/include/assimp/Exporter.hpp +++ b/include/assimp/Exporter.hpp @@ -47,16 +47,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define AI_EXPORT_HPP_INC #ifdef __GNUC__ -# pragma GCC system_header +#pragma GCC system_header #endif #ifndef ASSIMP_BUILD_NO_EXPORT #include "cexport.h" #include +//wangyi 0608 +#include namespace Assimp { - + class ExporterPimpl; class IOSystem; class ProgressHandler; @@ -84,7 +86,7 @@ class ASSIMP_API ExportProperties; class ASSIMP_API Exporter { public: /** Function pointer type of a Export worker function */ - typedef void (*fpExportFunc)(const char*, IOSystem*, const aiScene*, const ExportProperties*); + typedef void (*fpExportFunc)(const char *, IOSystem *, const aiScene *, const ExportProperties *); /** Internal description of an Assimp export format option */ struct ExportFormatEntry { @@ -98,8 +100,7 @@ public: unsigned int mEnforcePP; // Constructor to fill all entries - ExportFormatEntry( const char* pId, const char* pDesc, const char* pExtension, fpExportFunc pFunction, unsigned int pEnforcePP = 0u) - { + ExportFormatEntry(const char *pId, const char *pDesc, const char *pExtension, fpExportFunc pFunction, unsigned int pEnforcePP = 0u) { mDescription.id = pId; mDescription.description = pDesc; mDescription.fileExtension = pExtension; @@ -108,9 +109,8 @@ public: } ExportFormatEntry() : - mExportFunction() - , mEnforcePP() - { + mExportFunction(), + mEnforcePP() { mDescription.id = NULL; mDescription.description = NULL; mDescription.fileExtension = NULL; @@ -142,7 +142,7 @@ public: * * @param pIOHandler The IO handler to be used in all file accesses * of the Importer. */ - void SetIOHandler( IOSystem* pIOHandler); + void SetIOHandler(IOSystem *pIOHandler); // ------------------------------------------------------------------- /** Retrieves the IO handler that is currently set. @@ -151,7 +151,7 @@ public: * handler is active as long the application doesn't supply its own * custom IO handler via #SetIOHandler(). * @return A valid IOSystem interface, never NULL. */ - IOSystem* GetIOHandler() const; + IOSystem *GetIOHandler() const; // ------------------------------------------------------------------- /** Checks whether a default IO handler is active @@ -171,7 +171,7 @@ public: * disable progress reporting. * @note Progress handlers can be used to abort the loading * at almost any time.*/ - void SetProgressHandler(ProgressHandler* pHandler); + void SetProgressHandler(ProgressHandler *pHandler); // ------------------------------------------------------------------- /** Exports the given scene to a chosen file format. Returns the exported @@ -191,10 +191,10 @@ public: * Any IO handlers set via #SetIOHandler are ignored here. * @note Use aiCopyScene() to get a modifiable copy of a previously * imported scene. */ - const aiExportDataBlob* ExportToBlob(const aiScene* pScene, const char* pFormatId, - unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = nullptr); - const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const std::string& pFormatId, - unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = nullptr); + const aiExportDataBlob *ExportToBlob(const aiScene *pScene, const char *pFormatId, + unsigned int pPreprocessing = 0u, const ExportProperties *pProperties = nullptr); + const aiExportDataBlob *ExportToBlob(const aiScene *pScene, const std::string &pFormatId, + unsigned int pPreprocessing = 0u, const ExportProperties *pProperties = nullptr); // ------------------------------------------------------------------- /** Convenience function to export directly to a file. Use @@ -229,10 +229,10 @@ public: * @return AI_SUCCESS if everything was fine. * @note Use aiCopyScene() to get a modifiable copy of a previously * imported scene.*/ - aiReturn Export( const aiScene* pScene, const char* pFormatId, const char* pPath, - unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = nullptr); - aiReturn Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, - unsigned int pPreprocessing = 0u, const ExportProperties* pProperties = nullptr); + aiReturn Export(const aiScene *pScene, const char *pFormatId, const char *pPath, + unsigned int pPreprocessing = 0u, const ExportProperties *pProperties = nullptr); + aiReturn Export(const aiScene *pScene, const std::string &pFormatId, const std::string &pPath, + unsigned int pPreprocessing = 0u, const ExportProperties *pProperties = nullptr); // ------------------------------------------------------------------- /** Returns an error description of an error that occurred in #Export @@ -244,17 +244,17 @@ public: * * @note The returned function remains valid until one of the * following methods is called: #Export, #ExportToBlob, #FreeBlob */ - const char* GetErrorString() const; + const char *GetErrorString() const; // ------------------------------------------------------------------- /** Return the blob obtained from the last call to #ExportToBlob */ - const aiExportDataBlob* GetBlob() const; + const aiExportDataBlob *GetBlob() const; // ------------------------------------------------------------------- /** Orphan the blob from the last call to #ExportToBlob. This means * the caller takes ownership and is thus responsible for calling * the C API function #aiReleaseExportBlob to release it. */ - const aiExportDataBlob* GetOrphanedBlob() const; + const aiExportDataBlob *GetOrphanedBlob() const; // ------------------------------------------------------------------- /** Frees the current blob. @@ -264,7 +264,7 @@ public: * automatically by the destructor. The only reason to call * it manually would be to reclaim as much storage as possible * without giving up the #Exporter instance yet. */ - void FreeBlob( ); + void FreeBlob(); // ------------------------------------------------------------------- /** Returns the number of export file formats available in the current @@ -290,7 +290,7 @@ public: * for. Valid range is 0 to #Exporter::GetExportFormatCount * @return A description of that specific export format. * NULL if pIndex is out of range. */ - const aiExportFormatDesc* GetExportFormatDescription( size_t pIndex ) const; + const aiExportFormatDesc *GetExportFormatDescription(size_t pIndex) const; // ------------------------------------------------------------------- /** Register a custom exporter. Custom export formats are limited to @@ -303,7 +303,7 @@ public: * registered. A common cause that would prevent an exporter * from being registered is that its format id is already * occupied by another format. */ - aiReturn RegisterExporter(const ExportFormatEntry& desc); + aiReturn RegisterExporter(const ExportFormatEntry &desc); // ------------------------------------------------------------------- /** Remove an export format previously registered with #RegisterExporter @@ -314,11 +314,11 @@ public: * 'id' field of #aiExportFormatDesc. * @note Calling this method on a format description not yet registered * has no effect.*/ - void UnregisterExporter(const char* id); + void UnregisterExporter(const char *id); protected: // Just because we don't want you to know how we're hacking around. - ExporterPimpl* pimpl; + ExporterPimpl *pimpl; }; class ASSIMP_API ExportProperties { @@ -332,6 +332,8 @@ public: typedef std::map FloatPropertyMap; typedef std::map StringPropertyMap; typedef std::map MatrixPropertyMap; + //wangyi 0608 + typedef std::map> CallbackPropertyMap; public: /** Standard constructor @@ -345,7 +347,7 @@ public: * This copies the configuration properties of another ExportProperties. * @see ExportProperties(const ExportProperties& other) */ - ExportProperties(const ExportProperties& other); + ExportProperties(const ExportProperties &other); // ------------------------------------------------------------------- /** Set an integer configuration property. @@ -360,7 +362,7 @@ public: * floating-point property has no effect - the loader will call * GetPropertyFloat() to read the property, but it won't be there. */ - bool SetPropertyInteger(const char* szName, int iValue); + bool SetPropertyInteger(const char *szName, int iValue); // ------------------------------------------------------------------- /** Set a boolean configuration property. Boolean properties @@ -369,27 +371,30 @@ public: * #GetPropertyBool and vice versa. * @see SetPropertyInteger() */ - bool SetPropertyBool(const char* szName, bool value) { - return SetPropertyInteger(szName,value); + bool SetPropertyBool(const char *szName, bool value) { + return SetPropertyInteger(szName, value); } // ------------------------------------------------------------------- /** Set a floating-point configuration property. * @see SetPropertyInteger() */ - bool SetPropertyFloat(const char* szName, ai_real fValue); + bool SetPropertyFloat(const char *szName, ai_real fValue); // ------------------------------------------------------------------- /** Set a string configuration property. * @see SetPropertyInteger() */ - bool SetPropertyString(const char* szName, const std::string& sValue); + bool SetPropertyString(const char *szName, const std::string &sValue); // ------------------------------------------------------------------- /** Set a matrix configuration property. * @see SetPropertyInteger() */ - bool SetPropertyMatrix(const char* szName, const aiMatrix4x4& sValue); + bool SetPropertyMatrix(const char *szName, const aiMatrix4x4 &sValue); + + //wangyi 0608 + bool SetPropertyCallback(const char *szName, std::function &f); // ------------------------------------------------------------------- /** Get a configuration property. @@ -404,8 +409,8 @@ public: * floating-point property has no effect - the loader will call * GetPropertyFloat() to read the property, but it won't be there. */ - int GetPropertyInteger(const char* szName, - int iErrorReturn = 0xffffffff) const; + int GetPropertyInteger(const char *szName, + int iErrorReturn = 0xffffffff) const; // ------------------------------------------------------------------- /** Get a boolean configuration property. Boolean properties @@ -414,16 +419,16 @@ public: * #GetPropertyBool and vice versa. * @see GetPropertyInteger() */ - bool GetPropertyBool(const char* szName, bool bErrorReturn = false) const { - return GetPropertyInteger(szName,bErrorReturn)!=0; + bool GetPropertyBool(const char *szName, bool bErrorReturn = false) const { + return GetPropertyInteger(szName, bErrorReturn) != 0; } // ------------------------------------------------------------------- /** Get a floating-point configuration property * @see GetPropertyInteger() */ - ai_real GetPropertyFloat(const char* szName, - ai_real fErrorReturn = 10e10f) const; + ai_real GetPropertyFloat(const char *szName, + ai_real fErrorReturn = 10e10f) const; // ------------------------------------------------------------------- /** Get a string configuration property @@ -431,8 +436,8 @@ public: * The return value remains valid until the property is modified. * @see GetPropertyInteger() */ - const std::string GetPropertyString(const char* szName, - const std::string& sErrorReturn = "") const; + const std::string GetPropertyString(const char *szName, + const std::string &sErrorReturn = "") const; // ------------------------------------------------------------------- /** Get a matrix configuration property @@ -440,37 +445,42 @@ public: * The return value remains valid until the property is modified. * @see GetPropertyInteger() */ - const aiMatrix4x4 GetPropertyMatrix(const char* szName, - const aiMatrix4x4& sErrorReturn = aiMatrix4x4()) const; + const aiMatrix4x4 GetPropertyMatrix(const char *szName, + const aiMatrix4x4 &sErrorReturn = aiMatrix4x4()) const; - // ------------------------------------------------------------------- - /** Determine a integer configuration property has been set. + //wangyi 0608 + std::function GetPropertyCallback(const char* szName) const; + + // ------------------------------------------------------------------- + /** Determine a integer configuration property has been set. * @see HasPropertyInteger() */ - bool HasPropertyInteger(const char* szName) const; + bool HasPropertyInteger(const char *szName) const; /** Determine a boolean configuration property has been set. * @see HasPropertyBool() */ - bool HasPropertyBool(const char* szName) const; + bool HasPropertyBool(const char *szName) const; /** Determine a boolean configuration property has been set. * @see HasPropertyFloat() */ - bool HasPropertyFloat(const char* szName) const; + bool HasPropertyFloat(const char *szName) const; /** Determine a String configuration property has been set. * @see HasPropertyString() */ - bool HasPropertyString(const char* szName) const; + bool HasPropertyString(const char *szName) const; /** Determine a Matrix configuration property has been set. * @see HasPropertyMatrix() */ - bool HasPropertyMatrix(const char* szName) const; + bool HasPropertyMatrix(const char *szName) const; + + //wangyi 0608 + bool HasPropertyCallback(const char *szName) const; protected: - /** List of integer properties */ IntPropertyMap mIntProperties; @@ -482,23 +492,22 @@ protected: /** List of Matrix properties */ MatrixPropertyMap mMatrixProperties; + + //wangyi 0608 + CallbackPropertyMap mCallbackProperties; }; // ---------------------------------------------------------------------------------- -inline -const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const std::string& pFormatId, - unsigned int pPreprocessing, const ExportProperties* pProperties) -{ - return ExportToBlob(pScene,pFormatId.c_str(),pPreprocessing, pProperties); +inline const aiExportDataBlob *Exporter::ExportToBlob(const aiScene *pScene, const std::string &pFormatId, + unsigned int pPreprocessing, const ExportProperties *pProperties) { + return ExportToBlob(pScene, pFormatId.c_str(), pPreprocessing, pProperties); } // ---------------------------------------------------------------------------------- -inline -aiReturn Exporter :: Export( const aiScene* pScene, const std::string& pFormatId, - const std::string& pPath, unsigned int pPreprocessing, - const ExportProperties* pProperties) -{ - return Export(pScene,pFormatId.c_str(),pPath.c_str(),pPreprocessing, pProperties); +inline aiReturn Exporter ::Export(const aiScene *pScene, const std::string &pFormatId, + const std::string &pPath, unsigned int pPreprocessing, + const ExportProperties *pProperties) { + return Export(pScene, pFormatId.c_str(), pPath.c_str(), pPreprocessing, pProperties); } } // namespace Assimp From f57e7221c07f385cebcc457d294e90c446995d41 Mon Sep 17 00:00:00 2001 From: ywang Date: Wed, 10 Jun 2020 13:23:29 -0700 Subject: [PATCH 09/67] temp --- code/AssetLib/glTF2/glTF2Exporter.cpp | 17 +++++++++++++++-- code/Common/Exporter.cpp | 2 +- include/assimp/Exporter.hpp | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index 566f95e80..98eb79e57 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -1,4 +1,4 @@ -/* +/* Open Asset Import Library (assimp) ---------------------------------------------------------------------- @@ -115,7 +115,20 @@ glTF2Exporter::glTF2Exporter(const char* filename, IOSystem* pIOSystem, const ai ExportScene(); ExportAnimations(); - + + //wangyi 0608 + if(mProperties->HasPropertyCallback("extras")) + { + std::function ExportExtras = mProperties->GetPropertyCallback("extras"); + char* ret = (char*)ExportExtras((void*)mAsset.get()); + + Document extrasD; + extrasD.Parse(ret); + std::string strHello = extrasD["hello"].GetString(); + + printf("wangyi 0608 ret: %s\r\n", ret); + } + AssetWriter writer(*mAsset); if (isBinary) { diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index e8ee188e6..5fef455bb 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -587,7 +587,7 @@ ExportProperties::ExportProperties(const ExportProperties &other) } //wangyi 0608 -bool ExportProperties::SetPropertyCallback(const char *szName, std::function &f) { +bool ExportProperties::SetPropertyCallback(const char *szName, const std::function &f) { return SetGenericProperty>(mCallbackProperties, szName, f); } std::function ExportProperties::GetPropertyCallback(const char *szName) const { diff --git a/include/assimp/Exporter.hpp b/include/assimp/Exporter.hpp index 4abea6ad0..87c12f374 100644 --- a/include/assimp/Exporter.hpp +++ b/include/assimp/Exporter.hpp @@ -394,7 +394,7 @@ public: bool SetPropertyMatrix(const char *szName, const aiMatrix4x4 &sValue); //wangyi 0608 - bool SetPropertyCallback(const char *szName, std::function &f); + bool SetPropertyCallback(const char *szName, const std::function &f); // ------------------------------------------------------------------- /** Get a configuration property. From e65434bf8241a5408ff213dc315d5b8d3ed2f60e Mon Sep 17 00:00:00 2001 From: ywang Date: Thu, 11 Jun 2020 17:37:06 -0700 Subject: [PATCH 10/67] extra callback --- code/AssetLib/glTF2/glTF2Asset.h | 3 ++- code/AssetLib/glTF2/glTF2AssetWriter.inl | 6 +++++- code/AssetLib/glTF2/glTF2Exporter.cpp | 10 ++-------- code/Common/Exporter.cpp | 5 ++--- include/assimp/Exporter.hpp | 12 +++--------- 5 files changed, 14 insertions(+), 22 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index fc0fe1544..de252b329 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -1,4 +1,4 @@ -/* +/* Open Asset Import Library (assimp) ---------------------------------------------------------------------- @@ -1006,6 +1006,7 @@ public: } extensionsRequired; AssetMetadata asset; + Value* extras = nullptr; // Dictionaries for each type of object diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.inl b/code/AssetLib/glTF2/glTF2AssetWriter.inl index 361af40cd..0a4d0b2f4 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.inl +++ b/code/AssetLib/glTF2/glTF2AssetWriter.inl @@ -1,4 +1,4 @@ -/* +/* Open Asset Import Library (assimp) ---------------------------------------------------------------------- @@ -600,6 +600,10 @@ namespace glTF2 { if (mAsset.scene) { mDoc.AddMember("scene", mAsset.scene->index, mAl); } + + if(mAsset.extras) { + mDoc.AddMember("extras", *mAsset.extras, mAl); + } } inline void AssetWriter::WriteFile(const char* path) diff --git a/code/AssetLib/glTF2/glTF2Exporter.cpp b/code/AssetLib/glTF2/glTF2Exporter.cpp index 98eb79e57..537787eb7 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.cpp +++ b/code/AssetLib/glTF2/glTF2Exporter.cpp @@ -116,17 +116,11 @@ glTF2Exporter::glTF2Exporter(const char* filename, IOSystem* pIOSystem, const ai ExportAnimations(); - //wangyi 0608 + // export extras if(mProperties->HasPropertyCallback("extras")) { std::function ExportExtras = mProperties->GetPropertyCallback("extras"); - char* ret = (char*)ExportExtras((void*)mAsset.get()); - - Document extrasD; - extrasD.Parse(ret); - std::string strHello = extrasD["hello"].GetString(); - - printf("wangyi 0608 ret: %s\r\n", ret); + mAsset->extras = (rapidjson::Value*)ExportExtras(0); } AssetWriter writer(*mAsset); diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index 5fef455bb..30ab3a813 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -581,19 +581,18 @@ ExportProperties::ExportProperties(const ExportProperties &other) , mFloatProperties(other.mFloatProperties) , mStringProperties(other.mStringProperties) , mMatrixProperties(other.mMatrixProperties) -//wangyi 0608 , mCallbackProperties(other.mCallbackProperties){ // empty } -//wangyi 0608 bool ExportProperties::SetPropertyCallback(const char *szName, const std::function &f) { return SetGenericProperty>(mCallbackProperties, szName, f); } + std::function ExportProperties::GetPropertyCallback(const char *szName) const { return GetGenericProperty>(mCallbackProperties, szName, 0); } -//wangyi 0608 + bool ExportProperties::HasPropertyCallback(const char *szName) const { return HasGenericProperty>(mCallbackProperties, szName); } diff --git a/include/assimp/Exporter.hpp b/include/assimp/Exporter.hpp index 87c12f374..8e47e24db 100644 --- a/include/assimp/Exporter.hpp +++ b/include/assimp/Exporter.hpp @@ -54,7 +54,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "cexport.h" #include -//wangyi 0608 #include namespace Assimp { @@ -332,7 +331,6 @@ public: typedef std::map FloatPropertyMap; typedef std::map StringPropertyMap; typedef std::map MatrixPropertyMap; - //wangyi 0608 typedef std::map> CallbackPropertyMap; public: @@ -392,8 +390,7 @@ public: * @see SetPropertyInteger() */ bool SetPropertyMatrix(const char *szName, const aiMatrix4x4 &sValue); - - //wangyi 0608 + bool SetPropertyCallback(const char *szName, const std::function &f); // ------------------------------------------------------------------- @@ -448,7 +445,6 @@ public: const aiMatrix4x4 GetPropertyMatrix(const char *szName, const aiMatrix4x4 &sErrorReturn = aiMatrix4x4()) const; - //wangyi 0608 std::function GetPropertyCallback(const char* szName) const; // ------------------------------------------------------------------- @@ -476,8 +472,7 @@ public: * @see HasPropertyMatrix() */ bool HasPropertyMatrix(const char *szName) const; - - //wangyi 0608 + bool HasPropertyCallback(const char *szName) const; protected: @@ -492,8 +487,7 @@ protected: /** List of Matrix properties */ MatrixPropertyMap mMatrixProperties; - - //wangyi 0608 + CallbackPropertyMap mCallbackProperties; }; From ba09e1ef94176a97766203f36a850c6fe9c58c8c Mon Sep 17 00:00:00 2001 From: Filip Lundgren <45687559+ifiddynine@users.noreply.github.com> Date: Sun, 21 Jun 2020 23:56:11 +0200 Subject: [PATCH 11/67] Fix Blender .fbx metalness detection --- code/AssetLib/FBX/FBXConverter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/code/AssetLib/FBX/FBXConverter.cpp b/code/AssetLib/FBX/FBXConverter.cpp index 261567e48..09711ee8d 100644 --- a/code/AssetLib/FBX/FBXConverter.cpp +++ b/code/AssetLib/FBX/FBXConverter.cpp @@ -1992,6 +1992,7 @@ void FBXConverter::SetTextureProperties(aiMaterial *out_mat, const TextureMap &_ TrySetTextureProperties(out_mat, _textures, "ShininessExponent", aiTextureType_SHININESS, mesh); TrySetTextureProperties(out_mat, _textures, "TransparencyFactor", aiTextureType_OPACITY, mesh); TrySetTextureProperties(out_mat, _textures, "EmissiveFactor", aiTextureType_EMISSIVE, mesh); + TrySetTextureProperties(out_mat, _textures, "ReflectionFactor", aiTextureType_METALNESS, mesh); //Maya counterparts TrySetTextureProperties(out_mat, _textures, "Maya|DiffuseTexture", aiTextureType_DIFFUSE, mesh); TrySetTextureProperties(out_mat, _textures, "Maya|NormalTexture", aiTextureType_NORMALS, mesh); From 0b18d27042b37429a3f82fd546500411fe1360c2 Mon Sep 17 00:00:00 2001 From: Hill Ma Date: Sun, 28 Jun 2020 15:58:20 -0700 Subject: [PATCH 12/67] Use strrchr() when finding the '.' that begins the file extension. Sometimes we encounter file paths like ../foo/bar.obj; searching from the end of the string would yield the correct result. --- samples/SimpleOpenGL/Sample_SimpleOpenGL.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/SimpleOpenGL/Sample_SimpleOpenGL.c b/samples/SimpleOpenGL/Sample_SimpleOpenGL.c index bcc964efe..01704a1e4 100644 --- a/samples/SimpleOpenGL/Sample_SimpleOpenGL.c +++ b/samples/SimpleOpenGL/Sample_SimpleOpenGL.c @@ -376,7 +376,7 @@ int main(int argc, char **argv) // Check and validate the specified model file extension. model_file = argv[1]; - const char* extension = strchr(model_file, '.'); + const char* extension = strrchr(model_file, '.'); if (!extension) { print_error("Please provide a file with a valid extension."); return EXIT_FAILURE; From 51150cb3dfa13afaf829b005b68fae00253a7c96 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Thu, 2 Jul 2020 14:53:29 +0100 Subject: [PATCH 13/67] Ensure asserts are defined where expected. --- code/PostProcessing/ArmaturePopulate.cpp | 1 - include/assimp/ai_assert.h | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/code/PostProcessing/ArmaturePopulate.cpp b/code/PostProcessing/ArmaturePopulate.cpp index 97feca31c..48dcecb15 100644 --- a/code/PostProcessing/ArmaturePopulate.cpp +++ b/code/PostProcessing/ArmaturePopulate.cpp @@ -168,7 +168,6 @@ void ArmaturePopulate::BuildBoneStack(aiNode *, const std::vector &bones, std::map &bone_stack, std::vector &node_stack) { - ai_assert(scene); ai_assert(root_node); ai_assert(!node_stack.empty()); diff --git a/include/assimp/ai_assert.h b/include/assimp/ai_assert.h index 8b2b396f4..195ebbfd0 100644 --- a/include/assimp/ai_assert.h +++ b/include/assimp/ai_assert.h @@ -42,12 +42,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_ASSERT_H_INC #define AI_ASSERT_H_INC +#include + #if defined(ASSIMP_BUILD_DEBUG) namespace Assimp { // Assert violation behavior can be customized: see AssertHandler.h. - void aiAssertViolation(const char* failedExpression, const char* file, int line); + ASSIMP_API void aiAssertViolation(const char* failedExpression, const char* file, int line); } # define ai_assert(expression) (void)((!!(expression)) || (Assimp::aiAssertViolation(#expression, __FILE__, __LINE__), 0)) From 3fb7747429c2f773fc40dd6e437a1da9cbbae9b7 Mon Sep 17 00:00:00 2001 From: Hill Ma Date: Fri, 3 Jul 2020 18:14:45 -0700 Subject: [PATCH 14/67] Improve ToBinary() for double precision. The constant 0x80000000 is specific to 32 bit types. Make the bit mask according to the size of types. --- code/Common/SpatialSort.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/code/Common/SpatialSort.cpp b/code/Common/SpatialSort.cpp index 3b8a64606..88f06b618 100644 --- a/code/Common/SpatialSort.cpp +++ b/code/Common/SpatialSort.cpp @@ -208,13 +208,14 @@ BinFloat ToBinary(const ai_real &pValue) { // floating-point numbers are of sign-magnitude format, so find out what signed number // representation we must convert negative values to. // See http://en.wikipedia.org/wiki/Signed_number_representations. + const BinFloat mask = BinFloat(1) << (CHAR_BIT * sizeof(BinFloat) - 1); // Two's complement? - const bool DefaultValue = ((-42 == (~42 + 1)) && (binValue & 0x80000000)); - const bool OneComplement = ((-42 == ~42) && (binValue & 0x80000000)); + const bool DefaultValue = ((-42 == (~42 + 1)) && (binValue & mask)); + const bool OneComplement = ((-42 == ~42) && (binValue & mask)); if (DefaultValue) - return BinFloat(BinFloat(1) << (CHAR_BIT * sizeof(BinFloat) - 1)) - binValue; + return mask - binValue; // One's complement? else if (OneComplement) return BinFloat(-0) - binValue; From abf43eaf74883a7cc763d42221af5eb4e750b138 Mon Sep 17 00:00:00 2001 From: Max Vollmer Date: Sun, 5 Jul 2020 19:22:31 +0100 Subject: [PATCH 15/67] * Added ASSIMP_BUILD_NO_GLTF1_IMPORTER, ASSIMP_BUILD_NO_GLTF2_IMPORTER, ASSIMP_BUILD_NO_GLTF1_EXPORTER, and ASSIMP_BUILD_NO_GLTF2_EXPORTER to allow disabling GLTF1 and GLTF2 independently. * ASSIMP_BUILD_NO_GLTF_IMPORTER and ASSIMP_BUILD_NO_GLTF_EXPORTER remain with same behavior as before --- code/AssetLib/glTF/glTFAsset.h | 4 ++-- code/AssetLib/glTF/glTFAssetWriter.h | 2 +- code/AssetLib/glTF/glTFExporter.h | 2 +- code/AssetLib/glTF/glTFImporter.cpp | 4 ++-- code/AssetLib/glTF2/glTF2Asset.h | 2 +- code/AssetLib/glTF2/glTF2AssetWriter.h | 2 +- code/AssetLib/glTF2/glTF2Exporter.h | 2 +- code/AssetLib/glTF2/glTF2Importer.cpp | 2 +- code/Common/Exporter.cpp | 5 ++++- code/Common/ImporterRegistry.cpp | 10 +++++++--- 10 files changed, 21 insertions(+), 14 deletions(-) diff --git a/code/AssetLib/glTF/glTFAsset.h b/code/AssetLib/glTF/glTFAsset.h index d6d1dd372..15947c8c6 100644 --- a/code/AssetLib/glTF/glTFAsset.h +++ b/code/AssetLib/glTF/glTFAsset.h @@ -1,4 +1,4 @@ -/* +/* Open Asset Import Library (assimp) ---------------------------------------------------------------------- @@ -49,7 +49,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef GLTFASSET_H_INC #define GLTFASSET_H_INC -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_IMPORTER) #include diff --git a/code/AssetLib/glTF/glTFAssetWriter.h b/code/AssetLib/glTF/glTFAssetWriter.h index f166ee532..ed81d12cd 100644 --- a/code/AssetLib/glTF/glTFAssetWriter.h +++ b/code/AssetLib/glTF/glTFAssetWriter.h @@ -50,7 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef GLTFASSETWRITER_H_INC #define GLTFASSETWRITER_H_INC -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_IMPORTER) #include "glTFAsset.h" diff --git a/code/AssetLib/glTF/glTFExporter.h b/code/AssetLib/glTF/glTFExporter.h index 415992314..fe7592566 100644 --- a/code/AssetLib/glTF/glTFExporter.h +++ b/code/AssetLib/glTF/glTFExporter.h @@ -46,7 +46,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_GLTFEXPORTER_H_INC #define AI_GLTFEXPORTER_H_INC -#ifndef ASSIMP_BUILD_NO_GLTF_EXPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_EXPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_EXPORTER) #include #include diff --git a/code/AssetLib/glTF/glTFImporter.cpp b/code/AssetLib/glTF/glTFImporter.cpp index b4ef9b06f..ef24592ae 100644 --- a/code/AssetLib/glTF/glTFImporter.cpp +++ b/code/AssetLib/glTF/glTFImporter.cpp @@ -1,4 +1,4 @@ -/* +/* Open Asset Import Library (assimp) ---------------------------------------------------------------------- @@ -39,7 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_IMPORTER) #include "AssetLib/glTF/glTFImporter.h" #include "AssetLib/glTF/glTFAsset.h" diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index f79ddee87..2168c78e3 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -50,7 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef GLTF2ASSET_H_INC #define GLTF2ASSET_H_INC -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF2_IMPORTER) #include diff --git a/code/AssetLib/glTF2/glTF2AssetWriter.h b/code/AssetLib/glTF2/glTF2AssetWriter.h index 784ab2ea5..ce58717f3 100644 --- a/code/AssetLib/glTF2/glTF2AssetWriter.h +++ b/code/AssetLib/glTF2/glTF2AssetWriter.h @@ -50,7 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef GLTF2ASSETWRITER_H_INC #define GLTF2ASSETWRITER_H_INC -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF2_IMPORTER) #include "glTF2Asset.h" diff --git a/code/AssetLib/glTF2/glTF2Exporter.h b/code/AssetLib/glTF2/glTF2Exporter.h index 421a4806e..1d28ed459 100644 --- a/code/AssetLib/glTF2/glTF2Exporter.h +++ b/code/AssetLib/glTF2/glTF2Exporter.h @@ -46,7 +46,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_GLTF2EXPORTER_H_INC #define AI_GLTF2EXPORTER_H_INC -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF2_IMPORTER) #include #include diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 4d740d8c1..323f29f8e 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -39,7 +39,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- */ -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF2_IMPORTER) #include "AssetLib/glTF2/glTF2Importer.h" #include "PostProcessing/MakeVerboseFormat.h" diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index 58fc01d91..555a886af 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -179,11 +179,14 @@ static void setupExporterArray(std::vector &exporte aiProcess_Triangulate | aiProcess_SortByPType | aiProcess_JoinIdenticalVertices)); #endif -#ifndef ASSIMP_BUILD_NO_GLTF_EXPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_EXPORTER) && !defined(ASSIMP_BUILD_NO_GLTF2_EXPORTER) exporters.push_back(Exporter::ExportFormatEntry("gltf2", "GL Transmission Format v. 2", "gltf", &ExportSceneGLTF2, aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType)); exporters.push_back(Exporter::ExportFormatEntry("glb2", "GL Transmission Format v. 2 (binary)", "glb", &ExportSceneGLB2, aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType)); +#endif + +#if !defined(ASSIMP_BUILD_NO_GLTF_EXPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_EXPORTER) exporters.push_back(Exporter::ExportFormatEntry("gltf", "GL Transmission Format", "gltf", &ExportSceneGLTF, aiProcess_JoinIdenticalVertices | aiProcess_Triangulate | aiProcess_SortByPType)); exporters.push_back(Exporter::ExportFormatEntry("glb", "GL Transmission Format (binary)", "glb", &ExportSceneGLB, diff --git a/code/Common/ImporterRegistry.cpp b/code/Common/ImporterRegistry.cpp index da51696bc..c24f39a31 100644 --- a/code/Common/ImporterRegistry.cpp +++ b/code/Common/ImporterRegistry.cpp @@ -1,4 +1,4 @@ -/* +/* --------------------------------------------------------------------------- Open Asset Import Library (assimp) --------------------------------------------------------------------------- @@ -179,8 +179,10 @@ corresponding preprocessor flag to selectively disable formats. #ifndef ASSIMP_BUILD_NO_ASSBIN_IMPORTER #include "AssetLib/Assbin/AssbinLoader.h" #endif -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF1_IMPORTER) #include "AssetLib/glTF/glTFImporter.h" +#endif +#if !defined(ASSIMP_BUILD_NO_GLTF_IMPORTER) && !defined(ASSIMP_BUILD_NO_GLTF2_IMPORTER) #include "AssetLib/glTF2/glTF2Importer.h" #endif #ifndef ASSIMP_BUILD_NO_C4D_IMPORTER @@ -339,8 +341,10 @@ void GetImporterInstanceList(std::vector &out) { #if (!defined ASSIMP_BUILD_NO_ASSBIN_IMPORTER) out.push_back(new AssbinImporter()); #endif -#if (!defined ASSIMP_BUILD_NO_GLTF_IMPORTER) +#if (!defined ASSIMP_BUILD_NO_GLTF_IMPORTER && !defined ASSIMP_BUILD_NO_GLTF1_IMPORTER) out.push_back(new glTFImporter()); +#endif +#if (!defined ASSIMP_BUILD_NO_GLTF_IMPORTER && !defined ASSIMP_BUILD_NO_GLTF2_IMPORTER) out.push_back(new glTF2Importer()); #endif #if (!defined ASSIMP_BUILD_NO_C4D_IMPORTER) From 6c29247180dc247fb9a1d9bc17cb55ce9a20bb14 Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Mon, 6 Jul 2020 17:41:14 -0400 Subject: [PATCH 16/67] add triangle strip support to AC file loader --- code/AssetLib/AC/ACLoader.cpp | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/code/AssetLib/AC/ACLoader.cpp b/code/AssetLib/AC/ACLoader.cpp index ac1631a9b..6be720f02 100644 --- a/code/AssetLib/AC/ACLoader.cpp +++ b/code/AssetLib/AC/ACLoader.cpp @@ -484,6 +484,12 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, needMat[idx].second += ((unsigned int)(*it).entries.size() - 1) << 1u; break; + // triangle strip + case 0x4: + needMat[idx].first += (unsigned int)(*it).entries.size() - 2; + needMat[idx].second += ((unsigned int)(*it).entries.size() - 2) * 3; + break; + // 0 == polygon, else unknown default: if ((*it).flags & 0xf) { @@ -570,6 +576,61 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, } } } + } else if (type == 0x4) { + for (unsigned int i = 0; i < (unsigned int)src.entries.size() - 2; ++i) { + const Surface::SurfaceEntry &entry1 = src.entries[i]; + const Surface::SurfaceEntry &entry2 = src.entries[i + 1]; + const Surface::SurfaceEntry &entry3 = src.entries[i + 2]; + + // skip degenerate triangles + if (object.vertices[entry1.first] == object.vertices[entry2.first] || + object.vertices[entry1.first] == object.vertices[entry3.first] || + object.vertices[entry2.first] == object.vertices[entry3.first]) { + mesh->mNumFaces--; + mesh->mNumVertices -= 3; + continue; + } + + aiFace &face = *faces++; + face.mNumIndices = 3; + face.mIndices = new unsigned int[face.mNumIndices]; + face.mIndices[0] = cur++; + face.mIndices[1] = cur++; + face.mIndices[2] = cur++; + if (!(i & 1)) { + *vertices++ = object.vertices[entry1.first] + object.translation; + if (uv) { + uv->x = entry1.second.x; + uv->y = entry1.second.y; + ++uv; + } + *vertices++ = object.vertices[entry2.first] + object.translation; + if (uv) { + uv->x = entry2.second.x; + uv->y = entry2.second.y; + ++uv; + } + } else { + *vertices++ = object.vertices[entry2.first] + object.translation; + if (uv) { + uv->x = entry2.second.x; + uv->y = entry2.second.y; + ++uv; + } + *vertices++ = object.vertices[entry1.first] + object.translation; + if (uv) { + uv->x = entry1.second.x; + uv->y = entry1.second.y; + ++uv; + } + } + *vertices++ = object.vertices[entry3.first] + object.translation; + if (uv) { + uv->x = entry3.second.x; + uv->y = entry3.second.y; + ++uv; + } + } } else { it2 = (*it).entries.begin(); From f753a6e7ad1c351ffbbc0d3260c2202520e09beb Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Mon, 6 Jul 2020 20:14:03 -0400 Subject: [PATCH 17/67] add acc file test using existing ac file converted to acc format --- test/models/AC/Wuson.acc | 9528 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 9528 insertions(+) create mode 100644 test/models/AC/Wuson.acc diff --git a/test/models/AC/Wuson.acc b/test/models/AC/Wuson.acc new file mode 100644 index 000000000..6e6aee582 --- /dev/null +++ b/test/models/AC/Wuson.acc @@ -0,0 +1,9528 @@ +AC3Db +MATERIAL "DefaultWhite" rgb 1 1 1 amb 1 1 1 emis 0 0 0 spec 0.5 0.5 0.5 shi 0 trans 0 +OBJECT world +kids 1 +OBJECT poly +name "MESH" +numvert 3161 +-0.343303 -1.163795 -1.072610 -0.368130 -0.808416 -0.459286 +-0.361312 -1.160513 -1.063353 -0.921609 -0.357869 0.150225 +-0.355943 -1.129597 -1.088021 -0.345433 -0.217054 -0.912997 +-0.372936 -1.126281 -1.083700 -0.914896 0.346902 0.206458 +-0.357764 -1.155275 -1.061677 -0.283888 0.500285 0.817999 +-0.363313 -1.128177 -1.076717 -0.196322 0.115199 0.973749 +-0.348236 -1.105636 -1.066348 -0.439092 -0.108607 0.891854 +-0.351197 -1.098160 -1.069294 -0.778692 0.625695 -0.046313 +-0.332530 -1.106033 -1.077487 -0.129960 0.518644 -0.845055 +-0.329556 -1.172598 -1.035929 -0.354215 0.719343 0.597559 +-0.331995 -1.180665 -1.031806 -0.725050 -0.488759 0.485198 +-0.304381 -1.184538 -1.045494 -0.192502 -0.977040 -0.091296 +-0.305743 -1.176263 -1.011915 -0.526763 0.554871 0.643925 +-0.305398 -1.183834 -1.009541 -0.459568 -0.736064 0.496999 +-0.279853 -1.188245 -1.025279 -0.035887 -0.991930 0.121604 +-0.336214 -1.117070 -1.070677 -0.067295 -0.344926 0.936214 +-0.348472 -1.131245 -1.076251 -0.013622 0.085427 0.996251 +-0.275683 -1.171798 -0.990842 -0.565770 0.588340 0.577719 +-0.292839 -1.167308 -1.027903 -0.343933 0.883692 0.317487 +-0.269625 -1.163410 -0.996001 -0.627770 0.683018 0.373351 +-0.312037 -1.163003 -1.057184 -0.022911 0.847034 0.531045 +-0.338613 -1.146774 -1.069065 0.068005 0.526146 0.847671 +-0.265898 -1.184636 -1.016200 0.175160 -0.966731 0.186413 +-0.285302 -1.182847 -0.993891 -0.391605 -0.472438 0.789587 +-0.264614 -1.166326 -0.984473 -0.466393 0.081932 0.880775 +-0.245808 -1.173403 -0.979229 0.033385 -0.844246 0.534915 +-0.239201 -1.174720 -0.997346 0.243556 -0.956868 0.158380 +-0.159733 -1.351043 -0.960337 -0.239022 -0.260069 -0.935539 +-0.149381 -1.370119 -0.954521 -0.220660 -0.628737 -0.745654 +-0.173488 -1.358508 -0.942559 -0.566451 -0.505769 -0.650639 +-0.167375 -1.369772 -0.939125 -0.476905 -0.692115 -0.541791 +-0.141802 -1.384084 -0.938632 -0.071415 -0.903737 -0.422089 +-0.162901 -1.378017 -0.929744 -0.372041 -0.885358 -0.278795 +-0.139028 -1.389196 -0.916928 -0.019344 -0.999706 0.014590 +-0.161263 -1.381035 -0.916928 -0.343948 -0.937138 0.058924 +-0.141802 -1.384084 -0.895224 -0.078381 -0.890914 0.447357 +-0.162901 -1.378017 -0.904112 -0.400130 -0.833585 0.380831 +-0.149381 -1.370119 -0.879335 -0.232714 -0.606512 0.760255 +-0.167375 -1.369772 -0.894731 -0.525584 -0.602416 0.600713 +-0.159733 -1.351043 -0.873520 -0.369964 -0.223894 0.901664 +-0.173488 -1.358508 -0.891297 -0.566429 -0.505766 0.650660 +-0.135179 -1.337718 -0.965356 -0.196599 -0.007046 -0.980459 +-0.123630 -1.359001 -0.958868 0.042811 -0.448241 -0.892887 +-0.115175 -1.374581 -0.941142 0.229247 -0.791845 -0.566063 +-0.112080 -1.380283 -0.916928 0.312801 -0.945773 -0.087579 +-0.115175 -1.374581 -0.892714 0.271020 -0.868807 0.414394 +-0.123630 -1.359001 -0.874988 0.115139 -0.581556 0.805317 +-0.135179 -1.337718 -0.868500 -0.113082 -0.160991 0.980456 +-0.146729 -1.316436 -0.874988 -0.271926 0.142550 0.951701 +-0.170085 -1.331967 -0.879335 -0.271920 0.142548 0.951704 +-0.146729 -1.316436 -0.958868 -0.271926 0.142557 -0.951701 +-0.170085 -1.331967 -0.954521 -0.271922 0.142577 -0.951699 +-0.167375 -1.369772 -0.939125 -0.787254 -0.574453 -0.224132 +-0.179524 -1.361783 -0.916928 -0.878924 -0.476962 0.000000 +-0.173488 -1.358508 -0.942559 -0.832254 -0.383619 -0.400237 +-0.162901 -1.378017 -0.929744 -0.742078 -0.657706 -0.129398 +-0.161263 -1.381035 -0.916928 -0.725534 -0.688187 0.000000 +-0.162901 -1.378017 -0.904112 -0.742078 -0.657706 0.129398 +-0.167375 -1.369772 -0.894731 -0.787254 -0.574453 0.224132 +-0.173488 -1.358508 -0.891297 -0.815145 -0.340009 0.468970 +-0.179601 -1.347243 -0.894731 -0.891526 -0.157300 0.424780 +-0.184075 -1.338998 -0.904112 -0.974488 -0.004417 0.224398 +-0.185713 -1.335980 -0.916928 -0.998550 0.039917 -0.036121 +-0.184075 -1.338998 -0.929744 -0.957262 -0.036154 -0.286953 +-0.179601 -1.347243 -0.939125 -0.861690 -0.212288 -0.460896 +-0.159733 -1.351043 -0.873520 -0.732750 -0.199300 0.650658 +-0.170085 -1.331967 -0.879335 -0.712883 0.157143 0.683450 +-0.177663 -1.318002 -0.895224 -0.796647 0.432669 0.422081 +-0.180437 -1.312890 -0.916928 -0.848727 0.528630 -0.014588 +-0.177663 -1.318002 -0.938632 -0.789690 0.419839 -0.447353 +-0.170085 -1.331967 -0.954521 -0.784588 0.122559 -0.607783 +-0.159733 -1.351043 -0.960337 -0.732770 -0.199292 -0.650639 +-0.146729 -1.316436 -0.874988 -0.482612 0.530771 0.696684 +-0.155183 -1.300856 -0.892714 -0.538967 0.623774 0.566056 +-0.158278 -1.295154 -0.916928 -0.622490 0.777712 0.087578 +-0.155183 -1.300856 -0.941142 -0.580728 0.700739 -0.414391 +-0.146729 -1.316436 -0.958868 -0.482615 0.530772 -0.696681 +-0.007777 1.583781 -1.285707 -0.694618 -0.192257 0.693213 +-0.000345 1.583852 -1.280908 -0.513488 -0.157742 0.843474 +-0.013389 1.611106 -1.283752 -0.678659 -0.191051 0.709169 +-0.000428 1.612066 -1.276136 -0.493065 -0.146496 0.857570 +-0.020758 1.612066 -1.293944 -0.799698 -0.223856 0.557110 +-0.015212 1.583690 -1.297385 -0.812305 -0.215486 0.541965 +-0.012060 1.519814 -1.281023 -0.699437 -0.147215 0.699368 +-0.000351 1.519087 -1.274030 -0.481137 -0.142013 0.865066 +-0.018614 1.595557 -1.271634 -0.711099 -0.134462 0.690115 +-0.000373 1.597562 -1.262090 -0.447717 -0.134624 0.883983 +-0.027355 1.597562 -1.291280 -0.913149 -0.093619 0.396729 +-0.022072 1.519996 -1.297424 -0.881899 -0.115633 0.457036 +-0.015475 1.475798 -1.277939 -0.777520 -0.141381 0.612759 +-0.000349 1.475675 -1.269924 -0.441888 -0.140128 0.886058 +-0.023519 1.567919 -1.266891 -0.753911 -0.146545 0.640424 +-0.000372 1.570149 -1.255745 -0.419314 -0.134843 0.897771 +-0.034452 1.570149 -1.296174 -0.930455 -0.145408 0.336318 +-0.021517 1.476233 -1.300993 -0.947124 -0.129821 0.293433 +-0.036751 1.537030 -1.295993 -0.940385 -0.168274 0.295568 +-0.021517 1.443114 -1.300993 -0.949139 -0.158746 0.271908 +-0.025818 1.534800 -1.262478 -0.949139 -0.158746 0.271908 +-0.015475 1.442679 -1.277939 -0.957204 -0.149103 0.248051 +-0.015475 1.442679 -1.277939 -0.460301 -0.196964 0.865638 +-0.000349 1.442555 -1.269924 -0.439601 -0.192197 0.877389 +-0.025818 1.534800 -1.262478 -0.439601 -0.192197 0.877389 +-0.000372 1.537030 -1.250020 -0.418642 -0.187317 0.888623 +-0.039525 1.500012 -1.289692 -0.926847 -0.120357 0.355623 +-0.028506 1.392485 -1.297365 -0.912115 -0.132629 0.387885 +-0.027067 1.497572 -1.258049 -0.912115 -0.132629 0.387885 +-0.018579 1.392218 -1.276257 -0.896099 -0.144714 0.419601 +-0.018579 1.392218 -1.276257 -0.426589 -0.187293 0.884841 +-0.000351 1.392143 -1.267485 -0.412715 -0.184418 0.891996 +-0.027067 1.497572 -1.258049 -0.412715 -0.184418 0.891996 +-0.000403 1.500012 -1.245729 -0.398737 -0.181496 0.898926 +-0.043651 1.457243 -1.289771 -0.922057 -0.154920 0.354699 +-0.028506 1.349716 -1.297365 -0.907360 -0.166177 0.386114 +-0.031193 1.454802 -1.258452 -0.907360 -0.166177 0.386114 +-0.018579 1.349450 -1.276257 -0.891456 -0.177213 0.417015 +-0.018579 1.349450 -1.276257 -0.425544 -0.200104 0.882536 +-0.000351 1.349374 -1.267485 -0.399148 -0.193555 0.896224 +-0.031193 1.454802 -1.258452 -0.399148 -0.193555 0.896224 +-0.000403 1.457243 -1.245338 -0.372382 -0.186826 0.909081 +-0.046819 1.414506 -1.287978 -0.891662 -0.144440 0.429041 +-0.029357 1.278820 -1.297367 -0.898695 -0.140587 0.415431 +-0.032103 1.411768 -1.258316 -0.898695 -0.140587 0.415431 +-0.019341 1.278735 -1.274819 -0.905504 -0.136700 0.401717 +-0.019341 1.278735 -1.274819 -0.447698 -0.152254 0.881127 +-0.000345 1.279529 -1.265030 -0.402402 -0.142552 0.904296 +-0.032103 1.411768 -1.258316 -0.402402 -0.142552 0.904296 +-0.000345 1.414506 -1.245701 -0.356026 -0.132468 0.925039 +-0.043068 1.325265 -1.289129 -0.870751 -0.100438 0.481357 +-0.032032 1.188607 -1.297680 -0.892376 -0.089747 0.442279 +-0.028351 1.322527 -1.263078 -0.892376 -0.089747 0.442279 +-0.021388 1.189144 -1.273440 -0.912119 -0.078866 0.402267 +-0.021388 1.189144 -1.273440 -0.409418 -0.091889 0.907708 +-0.000345 1.188933 -1.263970 -0.359933 -0.081660 0.929398 +-0.028351 1.322527 -1.263078 -0.359933 -0.081660 0.929398 +-0.000345 1.325265 -1.253736 -0.309359 -0.071184 0.948277 +-0.014435 1.611458 -1.309839 -0.869412 -0.422036 -0.256921 +-0.002626 1.584369 -1.305302 -0.751840 -0.267439 -0.602671 +-0.017630 1.611106 -1.298449 -0.965614 -0.240434 -0.098898 +-0.015267 1.583688 -1.297604 -0.971576 -0.090476 -0.218757 +-0.007538 1.583853 -1.285870 -0.903892 -0.149778 0.400682 +-0.014435 1.612066 -1.284791 -0.941571 -0.239245 0.237077 +-0.000428 1.612066 -1.318737 -0.493111 -0.146522 -0.857539 +-0.000345 1.583852 -1.313964 -0.513472 -0.157733 -0.843485 +-0.013389 1.611106 -1.311120 -0.678646 -0.191041 -0.709185 +-0.007777 1.583781 -1.309166 -0.694588 -0.192228 -0.693250 +-0.015212 1.583690 -1.297488 -0.812295 -0.215477 -0.541984 +-0.020758 1.612066 -1.300929 -0.799672 -0.223856 -0.557147 +-0.000373 1.597562 -1.332783 -0.447776 -0.134619 -0.883954 +-0.000351 1.519087 -1.320843 -0.481166 -0.142001 -0.865052 +-0.018613 1.595557 -1.323238 -0.711100 -0.134451 -0.690115 +-0.012060 1.519814 -1.313850 -0.699438 -0.147197 -0.699370 +-0.022072 1.519996 -1.297449 -0.881886 -0.115625 -0.457064 +-0.027355 1.597562 -1.303593 -0.913125 -0.093622 -0.396784 +-0.022081 1.597562 -1.324929 -0.962630 -0.159597 -0.218798 +-0.011751 1.520020 -1.313816 -0.905427 -0.107635 -0.410629 +-0.027835 1.595557 -1.298151 -0.993500 -0.112701 -0.016025 +-0.023238 1.519814 -1.297900 -0.997698 -0.060653 -0.030337 +-0.012708 1.519996 -1.281267 -0.919986 -0.099463 0.379121 +-0.022081 1.597562 -1.270444 -0.966419 -0.146262 0.211284 +-0.000372 1.570149 -1.339127 -0.419283 -0.134836 -0.897787 +-0.000349 1.475675 -1.324949 -0.441896 -0.140130 -0.886054 +-0.023519 1.567919 -1.327982 -0.753918 -0.146544 -0.640416 +-0.015475 1.475798 -1.316933 -0.777534 -0.141386 -0.612740 +-0.021517 1.476234 -1.293880 -0.947128 -0.129819 -0.293422 +-0.034451 1.570149 -1.298699 -0.930466 -0.145400 -0.336291 +-0.027068 1.570149 -1.329074 -0.967620 -0.146678 -0.205421 +-0.015223 1.476312 -1.317866 -0.927524 -0.105642 -0.358523 +-0.033316 1.567919 -1.298051 -0.994028 -0.109005 -0.005130 +-0.026855 1.475798 -1.297816 -0.997387 -0.069998 -0.017869 +-0.015913 1.476233 -1.277305 -0.932470 -0.098339 0.347606 +-0.027068 1.570149 -1.268926 -0.966746 -0.134247 0.217669 +-0.015475 1.442679 -1.316933 -0.957201 -0.149107 -0.248061 +-0.021517 1.443114 -1.293880 -0.949138 -0.158748 -0.271913 +-0.025818 1.534800 -1.332395 -0.949138 -0.158748 -0.271913 +-0.036751 1.537030 -1.298880 -0.940385 -0.168274 -0.295568 +-0.000372 1.537030 -1.344853 -0.418642 -0.187317 -0.888623 +-0.000349 1.442555 -1.324949 -0.439623 -0.192202 -0.877377 +-0.025818 1.534800 -1.332395 -0.439623 -0.192202 -0.877377 +-0.015475 1.442679 -1.316933 -0.460344 -0.196974 -0.865612 +-0.029367 1.537029 -1.333645 -0.967483 -0.176324 -0.181345 +-0.015223 1.443193 -1.317866 -0.928580 -0.132019 -0.346858 +-0.035616 1.534799 -1.298138 -0.990634 -0.136435 -0.005446 +-0.026855 1.442678 -1.297816 -0.995344 -0.094723 -0.017856 +-0.015913 1.443114 -1.277305 -0.933855 -0.124500 0.335282 +-0.029367 1.537029 -1.264803 -0.967490 -0.164206 0.192351 +-0.032987 1.500012 -1.334286 -0.971131 -0.154903 -0.181408 +-0.018732 1.392114 -1.318464 -0.947302 -0.128622 -0.293385 +-0.039357 1.497572 -1.298102 -0.991493 -0.129558 -0.012494 +-0.027913 1.392711 -1.297786 -0.993594 -0.108531 -0.031485 +-0.020142 1.392485 -1.276685 -0.955806 -0.120075 0.268359 +-0.032987 1.500012 -1.264132 -0.971548 -0.138489 0.192131 +-0.018579 1.392219 -1.318616 -0.896096 -0.144712 -0.419607 +-0.028506 1.392485 -1.297508 -0.912112 -0.132628 -0.387893 +-0.027067 1.497572 -1.336823 -0.912112 -0.132628 -0.387893 +-0.039525 1.500012 -1.305181 -0.926844 -0.120357 -0.355633 +-0.000403 1.500012 -1.349143 -0.398738 -0.181488 -0.898927 +-0.000351 1.392143 -1.327388 -0.412720 -0.184410 -0.891995 +-0.027067 1.497572 -1.336823 -0.412720 -0.184410 -0.891995 +-0.018579 1.392219 -1.318616 -0.426598 -0.187287 -0.884838 +-0.037113 1.457243 -1.333909 -0.964164 -0.190659 -0.184490 +-0.018732 1.349345 -1.318464 -0.941715 -0.164327 -0.293545 +-0.043483 1.454802 -1.298096 -0.985875 -0.167038 -0.012229 +-0.027913 1.349942 -1.297786 -0.988664 -0.146892 -0.031070 +-0.020142 1.349716 -1.276685 -0.950360 -0.156266 0.269068 +-0.037113 1.457243 -1.264473 -0.965051 -0.174518 0.195502 +-0.018579 1.349450 -1.318616 -0.891457 -0.177208 -0.417015 +-0.028506 1.349716 -1.297508 -0.907357 -0.166175 -0.386121 +-0.031193 1.454803 -1.336420 -0.907357 -0.166175 -0.386121 +-0.043651 1.457243 -1.305102 -0.922051 -0.154921 -0.354713 +-0.000403 1.457243 -1.349535 -0.372411 -0.186832 -0.909067 +-0.000351 1.349374 -1.327387 -0.399143 -0.193552 -0.896227 +-0.031193 1.454803 -1.336420 -0.399143 -0.193552 -0.896227 +-0.018579 1.349450 -1.318616 -0.425506 -0.200093 -0.882557 +-0.031963 1.414506 -1.332496 -0.954880 -0.131496 -0.266294 +-0.016837 1.279816 -1.320225 -0.916973 -0.104483 -0.385025 +-0.041210 1.411768 -1.297986 -0.994133 -0.106553 -0.018579 +-0.029808 1.280044 -1.297729 -0.995162 -0.086233 -0.047081 +-0.019007 1.279646 -1.274121 -0.932637 -0.093796 0.348412 +-0.031963 1.414506 -1.265585 -0.953357 -0.109396 0.281325 +-0.019341 1.278736 -1.320054 -0.905502 -0.136694 -0.401722 +-0.029357 1.278820 -1.297506 -0.898688 -0.140585 -0.415446 +-0.032102 1.411768 -1.336557 -0.898688 -0.140585 -0.415446 +-0.046819 1.414506 -1.306895 -0.891650 -0.144440 -0.429065 +-0.000345 1.414506 -1.349172 -0.356035 -0.132474 -0.925035 +-0.000345 1.279529 -1.329842 -0.402391 -0.142553 -0.904301 +-0.032102 1.411768 -1.336557 -0.402391 -0.142553 -0.904301 +-0.019341 1.278736 -1.320054 -0.447668 -0.152251 -0.881143 +-0.028212 1.325265 -1.328228 -0.952886 -0.064003 -0.296499 +-0.021185 1.189232 -1.321447 -0.933902 -0.051572 -0.353791 +-0.037459 1.322527 -1.297919 -0.998128 -0.056463 0.023495 +-0.032060 1.188684 -1.297206 -0.998460 -0.040072 0.038376 +-0.019151 1.190492 -1.273409 -0.915769 -0.053065 0.398185 +-0.028212 1.325265 -1.269463 -0.946438 -0.072841 0.314561 +-0.021388 1.189144 -1.321433 -0.912125 -0.078865 -0.402253 +-0.032032 1.188607 -1.297192 -0.892380 -0.089748 -0.442272 +-0.028351 1.322527 -1.331795 -0.892380 -0.089748 -0.442272 +-0.043068 1.325265 -1.305744 -0.870751 -0.100442 -0.481357 +-0.000345 1.325265 -1.341137 -0.309359 -0.071184 -0.948277 +-0.000345 1.188933 -1.330903 -0.359933 -0.081660 -0.929398 +-0.028351 1.322527 -1.331795 -0.359933 -0.081660 -0.929398 +-0.021388 1.189144 -1.321433 -0.409418 -0.091889 -0.907708 +0.000000 -1.276195 -0.555204 -1.000000 0.000044 0.000106 +0.000014 -1.250245 -0.434445 -1.000000 0.000025 0.000099 +0.000000 -1.188162 -0.591492 -1.000000 0.000021 0.000096 +0.000014 -1.159240 -0.439762 -1.000000 0.000007 0.000088 +0.000000 -1.063840 -0.611120 -1.000000 -0.000003 0.000086 +0.000014 -1.050621 -0.441716 -1.000000 -0.000011 0.000086 +0.000000 -0.987748 -0.589001 -1.000000 -0.000030 0.000089 +0.000014 -0.986598 -0.434334 -1.000000 -0.000033 0.000095 +0.000000 -0.931298 -0.554330 -1.000000 -0.000055 0.000098 +0.000014 -0.932663 -0.417662 -1.000000 -0.000050 0.000108 +0.000000 -0.882034 -0.516288 -1.000000 -0.000065 0.000115 +0.000014 -0.880610 -0.399948 -1.000000 -0.000059 0.000125 +0.000000 -0.820980 -0.477658 -1.000000 -0.000074 0.000130 +0.000014 -0.822789 -0.374273 -1.000000 -0.000072 0.000142 +0.000000 -0.743088 -0.427930 -1.000000 -0.000070 0.000150 +0.000014 -0.744348 -0.339557 -1.000000 -0.000057 0.000160 +0.000000 -0.682874 -0.406746 -1.000000 -0.000033 0.000152 +0.000014 -0.681405 -0.321842 -1.000000 -0.000039 0.000166 +0.000000 -0.520932 -0.408895 -1.000000 0.000011 0.000119 +0.000014 -0.518173 -0.291564 -1.000000 0.000006 0.000133 +0.000000 -0.433288 -0.424155 -1.000000 0.000034 0.000124 +0.000014 -0.422456 -0.316589 -1.000000 0.000040 0.000125 +0.000014 -0.340680 -0.343339 -1.000000 0.000049 0.000115 +0.000000 -0.365253 -0.450508 -1.000000 0.000051 0.000121 +0.000000 -0.278299 -0.498183 -1.000000 0.000038 0.000111 +0.000014 -0.278986 -0.368215 -1.000000 0.000022 0.000109 +0.000014 -0.182662 -0.379905 -1.000000 0.000017 0.000125 +0.000000 -0.181285 -0.504868 -1.000000 0.000008 0.000111 +0.000000 -0.002516 -0.511473 -1.000000 0.000018 0.000131 +0.000014 -0.003255 -0.418132 -1.000000 0.000032 0.000150 +-0.090468 -0.527023 -0.448803 -0.915722 -0.132316 0.379403 +-0.038948 -0.523525 -0.323235 -0.906733 -0.041819 0.419626 +-0.122302 -0.438939 -0.494918 -0.897874 -0.062103 0.435850 +-0.043792 -0.422016 -0.343618 -0.870977 0.054486 0.488293 +-0.044009 -0.342730 -0.376249 -0.808265 0.106176 0.579166 +-0.144772 -0.369612 -0.521974 -0.848424 0.023093 0.528814 +-0.163313 -0.268690 -0.540612 -0.792544 -0.007641 0.609766 +-0.049406 -0.273320 -0.399098 -0.751218 0.043022 0.658650 +-0.044787 -0.177356 -0.408909 -0.675643 0.215521 0.705023 +-0.173070 -0.171995 -0.533485 -0.778539 0.281322 0.561012 +0.000000 -0.002516 -0.511473 -0.700250 0.713833 0.009658 +-0.007276 -0.010464 -0.451574 -0.735097 0.562851 0.377931 +0.000000 -1.276185 -0.555181 -0.953738 -0.293920 0.063200 +-0.000071 -1.253767 -0.451994 -0.968818 -0.228921 0.094801 +-0.028426 -1.191990 -0.592592 -0.977115 -0.187074 0.101237 +-0.017762 -1.166412 -0.476638 -0.985726 -0.114760 0.123181 +-0.044876 -1.066191 -0.622134 -0.989850 -0.071612 0.122757 +-0.028477 -1.049551 -0.487267 -0.989857 -0.105042 0.095653 +-0.045709 -0.984544 -0.606913 -0.989511 -0.129959 0.063078 +-0.040666 -0.987166 -0.466243 -0.989128 -0.138085 0.050589 +-0.054009 -0.924554 -0.576160 -0.981705 -0.177060 0.070039 +-0.043304 -0.921943 -0.452843 -0.978345 -0.163908 0.126390 +-0.066690 -0.876854 -0.541092 -0.954227 -0.251133 0.162427 +-0.044857 -0.874260 -0.433364 -0.948194 -0.167567 0.269908 +-0.080293 -0.814336 -0.503604 -0.923417 -0.182051 0.337874 +-0.040422 -0.812548 -0.413537 -0.909730 -0.134698 0.392743 +-0.075641 -0.735415 -0.462425 -0.911591 -0.150866 0.382415 +-0.039930 -0.738402 -0.375737 -0.919840 -0.144710 0.364627 +-0.072233 -0.668912 -0.433957 -0.926843 -0.111684 0.358454 +-0.040244 -0.668088 -0.348705 -0.928134 -0.093480 0.360318 +-0.090468 -0.527023 -0.448803 -0.928048 -0.070966 0.365637 +-0.038948 -0.523525 -0.323235 -0.922983 -0.058735 0.380332 +-0.081137 0.746770 -1.310106 0.445926 0.283467 -0.848997 +-0.083203 0.776489 -1.299486 0.411560 0.292010 -0.863336 +-0.049248 0.745544 -1.293766 0.123347 0.417871 -0.900094 +-0.031367 0.777065 -1.277087 0.381269 0.254053 -0.888871 +-0.078983 0.672760 -1.329372 -0.479434 0.535854 -0.694985 +-0.060854 0.725216 -1.324017 -0.938781 0.308866 0.152618 +-0.229770 -0.368127 -0.574212 -0.518484 0.117324 0.847000 +-0.186971 -0.445619 -0.537279 -0.535712 0.129421 0.834424 +-0.144773 -0.369613 -0.521976 -0.535712 0.129421 0.834424 +-0.122304 -0.438939 -0.494920 -0.552618 0.141441 0.821345 +-0.348796 -0.704774 -0.000013 -0.000597 0.002011 0.999998 +-0.332202 -0.734652 0.000057 0.000868 0.001874 0.999998 +-0.349110 -0.655147 -0.000113 0.000217 0.000179 1.000000 +-0.335244 -0.615850 -0.000015 0.001307 -0.002955 0.999995 +-0.278199 -0.590617 -0.000015 0.000255 -0.001293 0.999999 +-0.222624 -0.608680 -0.000015 0.000000 0.000000 1.000000 +-0.200394 -0.636211 -0.000015 -0.000316 -0.000123 1.000000 +-0.189201 -0.700580 -0.000015 0.000000 0.000000 1.000000 +-0.208629 -0.741017 -0.000015 -0.000205 0.000287 1.000000 +-0.248955 -0.755402 -0.000014 -0.000273 0.000835 1.000000 +-0.272467 -0.735551 -0.000037 0.000378 0.000951 0.999999 +-0.295178 -0.752239 0.000018 0.001591 0.001131 0.999998 +-0.281603 -0.495410 -0.271164 0.295101 0.640769 0.708753 +-0.246942 -0.515169 -0.267732 0.357069 0.656451 0.664510 +-0.284307 -0.461224 -0.300945 0.357069 0.656451 0.664510 +-0.237075 -0.487034 -0.304912 0.416879 0.668166 0.616251 +-0.320785 -0.569750 -0.245758 -0.985638 -0.164017 -0.040210 +-0.316683 -0.593278 -0.250336 -0.960675 -0.272203 -0.054854 +-0.318454 -0.607310 -0.149689 -0.960675 -0.272203 -0.054854 +-0.309583 -0.628690 -0.151638 -0.923664 -0.376974 -0.068810 +-0.337312 -0.487621 -0.305082 -0.575286 0.620671 0.532741 +-0.284307 -0.461224 -0.300945 -0.453752 0.690854 0.562876 +-0.336212 -0.447832 -0.375617 -0.593563 0.683031 0.425619 +-0.287657 -0.420008 -0.357903 -0.560305 0.655029 0.506947 +-0.355280 -0.513678 -0.307759 -0.805873 0.273567 0.525100 +-0.383499 -0.505994 -0.385173 -0.776811 0.539922 0.324113 +-0.348767 -0.549903 -0.311345 -0.881100 -0.218222 0.419574 +-0.333531 -0.536521 -0.271928 -0.908451 0.090079 0.408169 +-0.321012 -0.513381 -0.269870 -0.591340 0.625468 0.509025 +-0.281603 -0.495410 -0.271164 -0.355068 0.741130 0.569784 +-0.343097 -0.581915 -0.315867 -0.798783 -0.482113 0.359879 +-0.328640 -0.560920 -0.275564 -0.926180 -0.213048 0.311129 +-0.320785 -0.569750 -0.245758 -0.958602 -0.199829 0.202854 +-0.325592 -0.544287 -0.241358 -0.968760 -0.007153 0.247898 +-0.314774 -0.524596 -0.238126 -0.739007 0.574149 0.352451 +-0.281356 -0.506819 -0.237638 -0.414281 0.845209 0.337629 +-0.316683 -0.593278 -0.250336 -0.852119 -0.505094 0.137014 +-0.324506 -0.588902 -0.280399 -0.863885 -0.438113 0.248517 +-0.319099 -0.611475 -0.323902 -0.598339 -0.744404 0.296400 +-0.332847 -0.626788 -0.381643 -0.641025 -0.693271 0.329335 +-0.367801 -0.587543 -0.383197 -0.715004 -0.624371 0.314532 +-0.276524 -0.635578 -0.326774 -0.439099 -0.852981 0.282161 +-0.307727 -0.608932 -0.283631 -0.611847 -0.777269 0.146615 +-0.276764 -0.624107 -0.286603 -0.362134 -0.932125 0.001411 +-0.302528 -0.611687 -0.254364 -0.597898 -0.801508 -0.010131 +-0.276524 -0.661972 -0.379310 -0.470268 -0.801589 0.369192 +-0.256416 -0.624547 -0.286227 0.018971 -0.994581 -0.102220 +-0.276371 -0.627443 -0.261753 -0.172149 -0.979258 -0.106862 +-0.258925 -0.626401 -0.262389 0.056872 -0.995820 -0.071464 +-0.376532 -0.549829 -0.385658 -0.947026 -0.210055 0.242939 +-0.383499 -0.505994 -0.385173 -0.969946 -0.096563 0.223341 +-0.402735 -0.560380 -0.492227 -0.970770 -0.117150 0.209479 +-0.405876 -0.495740 -0.495396 -0.967191 0.187757 0.171140 +-0.427755 -0.497838 -0.650739 -0.978649 0.136076 0.154044 +-0.436833 -0.575138 -0.660827 -0.959727 -0.194453 0.202761 +-0.391453 -0.418047 -0.607499 -0.684687 0.721762 0.101306 +-0.357320 -0.417054 -0.465251 -0.657338 0.736667 0.158836 +-0.398648 -0.657788 -0.643241 -0.887419 -0.414011 0.202686 +-0.387067 -0.602420 -0.479440 -0.906068 -0.352375 0.234248 +-0.367801 -0.587543 -0.383197 -0.952881 -0.206072 0.222603 +-0.325815 -0.384064 -0.553484 -0.502136 0.860629 0.084718 +-0.323346 -0.382968 -0.595645 -0.459747 0.887942 0.013822 +-0.405733 -0.421712 -0.714452 -0.461967 0.886344 0.031308 +-0.306654 -0.389007 -0.449769 -0.511117 0.848861 0.134884 +-0.347038 -0.652398 -0.457320 -0.805044 -0.512765 0.298289 +-0.352869 -0.722752 -0.593997 -0.837809 -0.482078 0.256274 +-0.229238 -0.751868 -0.513438 -0.419650 -0.735264 0.532242 +-0.294151 -0.787640 -0.616429 -0.503019 -0.714902 0.485681 +-0.188531 -0.803520 -0.548481 -0.442631 -0.719849 0.534691 +-0.271029 -0.828348 -0.649493 -0.433916 -0.715775 0.547159 +-0.294651 -0.747369 -0.556845 -0.463743 -0.725788 0.508109 +-0.352869 -0.722752 -0.593997 -0.600462 -0.685632 0.411526 +-0.368785 -0.778217 -0.725018 -0.622602 -0.690616 0.367989 +-0.233252 -0.732483 -0.490942 -0.414997 -0.724538 0.550292 +-0.130932 -0.873717 -0.601270 -0.422412 -0.722173 0.547755 +-0.218263 -0.890110 -0.686509 -0.424088 -0.703853 0.569860 +-0.318454 -0.607310 -0.149689 -0.964270 -0.136838 -0.226844 +-0.321219 -0.579032 -0.146115 -0.964789 0.263024 0.000291 +-0.320785 -0.569750 -0.245758 -0.990154 -0.138918 -0.017253 +-0.325592 -0.544287 -0.241358 -0.985428 0.140157 0.096375 +-0.303818 -0.553183 -0.141994 -0.656425 0.753346 0.039695 +-0.314774 -0.524596 -0.238126 -0.678045 0.683061 0.271446 +-0.309583 -0.628690 -0.151638 -0.812067 -0.463212 -0.354939 +-0.327569 -0.625240 -0.112006 -0.933819 -0.178188 -0.310212 +-0.314822 -0.657923 -0.112631 -0.722698 -0.491822 -0.485611 +-0.308093 -0.551433 -0.092604 -0.709991 0.685607 0.160797 +-0.330532 -0.589047 -0.108363 -0.966499 0.233573 -0.106407 +-0.294872 -0.646012 -0.153510 -0.589705 -0.722708 -0.360473 +-0.291509 -0.674280 -0.113187 -0.338451 -0.751045 -0.566906 +-0.279028 -0.540377 -0.138857 0.059338 0.990442 0.124513 +-0.279132 -0.529526 -0.087386 -0.031389 0.965129 0.259885 +-0.281356 -0.506819 -0.237638 0.235864 0.920775 0.310711 +-0.302528 -0.611687 -0.254364 -0.573314 -0.792544 -0.207809 +-0.273842 -0.653064 -0.155062 -0.146201 -0.918243 -0.368042 +-0.316683 -0.593278 -0.250336 -0.780230 -0.606145 -0.154368 +-0.249190 -0.549680 -0.142483 0.732826 0.679290 0.039130 +-0.251681 -0.526464 -0.238647 0.622102 0.732776 0.275731 +-0.336374 -0.647740 -0.079227 -0.935600 -0.135775 -0.325911 +-0.321164 -0.686016 -0.079581 -0.649956 -0.532114 -0.542598 +-0.314000 -0.565151 -0.068947 -0.625749 0.690597 0.362647 +-0.335166 -0.602167 -0.075203 -0.965446 0.260574 0.003913 +-0.247016 -0.552736 -0.092951 0.727882 0.684580 0.039206 +-0.242148 -0.565654 -0.068614 0.661515 0.654606 0.365908 +-0.278717 -0.556303 -0.063563 -0.047022 0.776609 0.628226 +-0.273588 -0.679387 -0.111205 0.016764 -0.818112 -0.574814 +-0.291303 -0.704382 -0.077706 -0.246287 -0.752975 -0.610223 +-0.274078 -0.706588 -0.077441 -0.006409 -0.821230 -0.570562 +-0.219397 -0.607375 -0.110780 0.961197 0.230352 -0.151786 +-0.214653 -0.617621 -0.076848 0.949442 0.311316 -0.040516 +-0.257647 -0.677363 -0.108988 0.168451 -0.780358 -0.602217 +-0.255760 -0.710602 -0.077899 -0.044986 -0.774366 -0.631137 +-0.222420 -0.652138 -0.114268 0.854221 -0.287278 -0.433333 +-0.229231 -0.598010 -0.149052 0.983470 0.174776 -0.047327 +-0.256660 -0.650004 -0.154840 0.245569 -0.888502 -0.387635 +-0.241496 -0.644234 -0.153820 0.521793 -0.776407 -0.353448 +-0.233185 -0.667982 -0.111233 0.455689 -0.655526 -0.602190 +-0.232306 -0.634170 -0.151996 0.866820 -0.420581 -0.267833 +-0.227821 -0.552386 -0.242999 0.892245 0.356757 0.276808 +-0.246942 -0.515169 -0.267732 0.650622 0.639985 0.408791 +-0.218390 -0.549998 -0.270212 0.853557 0.224824 0.469994 +-0.281603 -0.495410 -0.271164 0.484415 0.810796 0.328560 +-0.229813 -0.597061 -0.252879 0.961024 -0.250394 0.117200 +-0.220666 -0.594124 -0.278731 0.844691 -0.369260 0.387484 +-0.258925 -0.626401 -0.262389 0.384944 -0.914144 -0.127115 +-0.276371 -0.627443 -0.261753 -0.260287 -0.940223 -0.219617 +-0.239402 -0.611725 -0.258518 0.745425 -0.666586 0.002202 +-0.237075 -0.487034 -0.304912 0.633209 0.529518 0.564498 +-0.196859 -0.533913 -0.303928 0.871448 0.187364 0.453292 +-0.232977 -0.612466 -0.284542 0.609948 -0.719608 0.331854 +-0.198140 -0.597121 -0.314314 0.822572 -0.361696 0.438807 +-0.215880 -0.635772 -0.327812 0.621168 -0.631279 0.464367 +-0.256416 -0.624547 -0.286227 0.352859 -0.873855 0.334467 +-0.249547 -0.643542 -0.327400 0.207234 -0.874705 0.438115 +-0.346166 -0.674416 -0.040982 -0.948766 -0.158373 -0.273425 +-0.326741 -0.712820 -0.044831 -0.633953 -0.611138 -0.473934 +-0.318030 -0.594901 -0.032404 -0.625223 0.719749 0.301757 +-0.342440 -0.630348 -0.037392 -0.956823 0.287874 -0.040238 +-0.236572 -0.595298 -0.032914 0.584769 0.761518 0.279527 +-0.278297 -0.578394 -0.034141 0.004610 0.887172 0.461416 +-0.209417 -0.666078 -0.081436 0.915704 -0.174794 -0.361848 +-0.197789 -0.683783 -0.037944 0.963394 -0.097384 -0.249775 +-0.210457 -0.628753 -0.037344 0.921174 0.388789 -0.016785 +-0.292682 -0.727566 -0.046478 -0.093443 -0.857946 -0.505171 +-0.273287 -0.721296 -0.043570 0.002470 -0.912941 -0.408084 +-0.227787 -0.702231 -0.078069 0.470799 -0.629120 -0.618512 +-0.253455 -0.733264 -0.046138 -0.186049 -0.855983 -0.482367 +-0.218227 -0.725212 -0.045825 0.574979 -0.666158 -0.475008 +-0.224163 -0.441915 -0.371038 0.754452 0.517976 0.403117 +-0.178825 -0.521027 -0.378250 0.934769 0.233918 0.267376 +-0.179266 -0.601335 -0.377465 0.924076 -0.232110 0.303659 +-0.200532 -0.651395 -0.376826 0.852737 -0.357389 0.380938 +-0.132622 0.539817 -0.555258 0.631186 -0.710502 0.311111 +-0.200296 0.489186 -0.533589 0.646521 -0.689651 0.326177 +-0.116679 0.512235 -0.650594 0.646521 -0.689651 0.326177 +-0.196093 0.452835 -0.612980 0.661276 -0.668182 0.340951 +-0.220027 0.731594 -0.542794 0.160079 0.930343 0.329905 +-0.172011 0.723263 -0.542599 0.168303 0.913627 0.370081 +-0.228561 0.777364 -0.667726 0.076430 0.927313 0.366400 +-0.174726 0.772485 -0.655484 0.222638 0.893524 0.389933 +-0.112848 0.705254 -0.556160 0.333427 0.864054 0.377144 +-0.098672 0.741881 -0.649914 0.319832 0.865129 0.386341 +-0.323680 0.530277 0.000566 0.017633 -0.002622 0.999841 +-0.320365 0.485449 0.000390 0.004583 -0.000007 0.999990 +-0.307234 0.573768 0.000390 0.002514 -0.001265 0.999996 +-0.254878 0.617560 0.000566 -0.000530 -0.003385 0.999994 +-0.222234 0.612449 0.000566 -0.000616 -0.001679 0.999998 +-0.187262 0.606974 0.000566 0.000000 0.000000 1.000000 +-0.153742 0.557811 0.000566 -0.000472 -0.000128 1.000000 +-0.146152 0.501367 0.000566 0.000000 0.000000 1.000000 +-0.167233 0.459170 0.000566 0.000000 0.000000 1.000000 +-0.220789 0.442452 0.000566 0.000000 0.000000 1.000000 +-0.242179 0.466927 0.000566 -0.000985 0.000723 0.999999 +-0.269638 0.446302 0.000566 -0.001711 0.002278 0.999996 +-0.290254 0.638585 -0.489197 -0.939061 0.255295 0.230195 +-0.265205 0.675793 -0.482234 -0.861442 0.435406 0.261418 +-0.311358 0.632463 -0.562152 -0.941826 0.213494 0.259586 +-0.290660 0.682530 -0.558843 -0.881893 0.343219 0.323211 +-0.298894 0.585936 -0.492080 -0.966864 0.147248 0.208549 +-0.318289 0.563922 -0.566455 -0.967701 0.104323 0.229503 +-0.343117 0.533016 -0.669788 -0.969464 0.049683 0.240146 +-0.346101 0.613384 -0.684474 -0.962424 0.013824 0.271200 +-0.204691 0.525197 -0.474041 -0.349932 -0.812810 0.465711 +-0.257957 0.539113 -0.489777 -0.489493 -0.758511 0.430183 +-0.200296 0.489186 -0.533589 -0.368387 -0.828300 0.422149 +-0.266554 0.508384 -0.555996 -0.545675 -0.731967 0.408000 +-0.298894 0.585936 -0.492080 -0.711511 -0.599201 0.367028 +-0.318289 0.563922 -0.566455 -0.732297 -0.566630 0.377719 +-0.196093 0.452835 -0.612980 -0.344621 -0.848693 0.401195 +-0.291123 0.470982 -0.647226 -0.617888 -0.669140 0.412876 +-0.343117 0.533016 -0.669788 -0.777430 -0.526405 0.344238 +-0.265205 0.675793 -0.482234 -0.851818 0.415093 0.319538 +-0.249918 0.703367 -0.477302 -0.714576 0.651282 0.255369 +-0.290660 0.682530 -0.558843 -0.842402 0.494610 0.213823 +-0.263180 0.713418 -0.550893 -0.634938 0.739909 0.222234 +-0.207105 0.724098 -0.466516 -0.438311 0.880652 0.179823 +-0.220027 0.731594 -0.542794 -0.426874 0.862032 0.273274 +-0.310846 0.688865 -0.685292 -0.847324 0.498279 0.183740 +-0.275723 0.755235 -0.676234 -0.605431 0.733184 0.309669 +-0.311358 0.632463 -0.562152 -0.909765 0.362764 0.201818 +-0.346101 0.613384 -0.684474 -0.902014 0.391092 0.182806 +-0.228561 0.777364 -0.667726 -0.449092 0.828611 0.334246 +-0.343043 0.675234 -1.105304 -0.938880 0.319155 -0.129015 +-0.362855 0.685884 -0.934781 -0.913680 0.398231 -0.081250 +-0.315812 0.762780 -1.086902 -0.869631 0.488062 -0.074413 +-0.310224 0.786234 -0.897805 -0.764913 0.643963 -0.014852 +-0.257483 0.826472 -0.861991 -0.626019 0.778367 0.047383 +-0.251929 0.841469 -1.034970 -0.694724 0.719255 -0.005620 +-0.261987 0.648849 -0.326739 -0.946754 0.321871 0.007470 +-0.270736 0.619210 -0.325093 -0.993302 -0.076628 -0.086480 +-0.277107 0.594368 -0.159115 -0.981739 0.189928 -0.010783 +-0.277643 0.564086 -0.163536 -0.877110 -0.451148 -0.164754 +-0.250399 0.586577 -0.324189 -0.730983 -0.647758 -0.214647 +-0.249859 0.543077 -0.169297 -0.617018 -0.758195 -0.210781 +-0.268234 0.627424 -0.156155 -0.940031 0.340985 0.008402 +-0.246793 0.681763 -0.328611 -0.907333 0.419960 0.019518 +-0.200959 0.732715 -0.338152 0.344317 0.888662 0.302861 +-0.178600 0.713752 -0.333697 0.707089 0.669979 0.226170 +-0.201002 0.752380 -0.409530 0.622245 0.756445 0.201501 +-0.175497 0.729689 -0.405860 0.636694 0.746755 0.192296 +-0.209338 0.666894 -0.151392 0.152521 0.983757 0.094657 +-0.191454 0.652899 -0.149048 0.724706 0.670027 0.160826 +-0.162211 0.681140 -0.329839 0.851311 0.489729 0.188245 +-0.166089 0.620852 -0.155459 0.955757 0.270962 0.114493 +-0.232782 0.708077 -0.332184 -0.606781 0.762968 0.222927 +-0.231067 0.660079 -0.153241 -0.563940 0.824753 0.041896 +-0.169900 0.585220 -0.162331 0.969582 -0.244134 -0.017570 +-0.142688 0.649372 -0.328296 0.984903 0.090463 0.147591 +-0.208967 0.676069 -0.095824 0.055528 0.969037 0.240589 +-0.232840 0.663758 -0.096986 -0.551264 0.802744 0.227398 +-0.163027 0.600441 -0.111351 0.967581 0.251607 -0.021942 +-0.190077 0.655760 -0.095630 0.759240 0.633512 0.149056 +-0.168712 0.566050 -0.116333 0.963247 -0.206105 -0.172268 +-0.268234 0.627424 -0.156155 -0.779247 0.626716 -0.000897 +-0.277154 0.615199 -0.111693 -0.881456 0.469913 -0.047097 +-0.182677 0.552369 -0.164101 0.733596 -0.659658 -0.163365 +-0.182943 0.532746 -0.120103 0.813599 -0.485663 -0.319670 +-0.277107 0.594368 -0.159115 -0.979744 0.164337 -0.114435 +-0.284402 0.576404 -0.112761 -0.981846 0.080977 -0.171527 +-0.148225 0.609419 -0.328049 0.907863 -0.418357 0.027601 +-0.176281 0.581040 -0.325084 0.388035 -0.920868 -0.037831 +-0.210195 0.534058 -0.169644 0.168253 -0.938514 -0.301466 +-0.246793 0.681763 -0.328611 -0.773461 0.616886 0.145635 +-0.282348 0.545361 -0.119478 -0.858267 -0.381324 -0.343467 +-0.291826 0.566355 -0.081698 -0.943022 0.066719 -0.325972 +-0.289658 0.521276 -0.087188 -0.794586 -0.339978 -0.503038 +-0.209317 0.654582 -0.075414 0.131693 0.798140 0.587903 +-0.188509 0.645758 -0.076114 0.646319 0.645050 0.407654 +-0.159072 0.588271 -0.082848 0.987454 0.156213 -0.023077 +-0.179070 0.506104 -0.086362 0.688299 -0.537697 -0.486957 +-0.214153 0.515186 -0.127241 0.298675 -0.823383 -0.482529 +-0.218592 0.488978 -0.091478 -0.066934 -0.815191 -0.575311 +-0.251436 0.524118 -0.128080 -0.330094 -0.794556 -0.509626 +-0.254084 0.492429 -0.091707 -0.134532 -0.781063 -0.609788 +-0.235307 0.654334 -0.079683 -0.412949 0.833299 0.367539 +-0.286406 0.610778 -0.079691 -0.862538 0.500875 -0.071781 +-0.217708 0.623680 -0.032393 0.131698 0.877330 0.461463 +-0.251605 0.623111 -0.036680 -0.312984 0.903742 0.292046 +-0.164135 0.553976 -0.084703 0.943223 -0.187405 -0.274243 +-0.171417 0.482939 -0.048275 0.655773 -0.618415 -0.433040 +-0.154307 0.520564 -0.045954 0.955808 -0.137070 -0.260084 +-0.214007 0.575025 -0.326258 -0.024474 -0.988320 -0.150418 +-0.210193 0.564010 -0.387937 0.212955 -0.965966 0.146829 +-0.167913 0.575845 -0.391086 0.275515 -0.954971 0.110096 +-0.229663 0.536460 -0.171279 -0.230602 -0.917616 -0.323735 +-0.236035 0.495774 -0.085419 -0.103317 -0.826566 -0.553275 +-0.232231 0.518961 -0.128260 -0.220660 -0.862413 -0.455580 +-0.239054 0.473485 -0.052529 -0.228490 -0.878628 -0.419292 +-0.223805 0.460757 -0.052471 -0.029678 -0.885961 -0.462808 +-0.155436 0.559053 -0.044730 0.973517 0.228114 0.015088 +-0.312485 0.544627 -0.044161 -0.954017 0.079391 -0.289048 +-0.306784 0.584437 -0.041477 -0.853713 0.518057 -0.052843 +-0.277643 0.564086 -0.163536 -0.939428 -0.256067 -0.227825 +-0.249859 0.543077 -0.169297 -0.468908 -0.810792 -0.350345 +-0.250399 0.586577 -0.324189 -0.314588 -0.913818 -0.256847 +-0.305828 0.503800 -0.050020 -0.806807 -0.390269 -0.443569 +-0.186751 0.612696 -0.034908 0.686088 0.684905 0.245333 +-0.260517 0.465220 -0.052600 -0.094624 -0.905016 -0.414720 +-0.196093 0.452835 -0.612980 -0.325392 -0.822011 0.467352 +-0.291123 0.470982 -0.647226 -0.335781 -0.828745 0.447697 +-0.193418 0.414036 -0.679360 -0.335781 -0.828745 0.447697 +-0.311188 0.429845 -0.743750 -0.345989 -0.835032 0.427800 +-0.172004 0.879637 -0.926179 0.368152 0.855541 0.364025 +-0.191441 0.840666 -0.814931 0.418558 0.867201 0.269763 +-0.087118 0.775469 -0.767209 0.418558 0.867201 0.269763 +-0.088868 0.769612 -0.732977 0.464125 0.868834 0.172382 +-0.298894 0.585936 -0.492080 -0.867895 -0.379133 0.320963 +-0.270736 0.608116 -0.391070 -0.972824 -0.110129 0.203679 +-0.290254 0.638585 -0.489197 -0.911075 0.324458 0.254301 +-0.260287 0.642322 -0.394408 -0.935795 0.340539 0.091223 +-0.257957 0.539113 -0.489777 -0.542537 -0.760777 0.356191 +-0.244685 0.577869 -0.386784 -0.577162 -0.783782 0.229282 +-0.270736 0.619210 -0.325093 -0.985754 -0.168190 0.001202 +-0.261987 0.648849 -0.326739 -0.941232 0.336102 -0.033426 +-0.210193 0.564010 -0.387937 -0.150059 -0.934180 0.323712 +-0.214007 0.575025 -0.326258 -0.330505 -0.935682 0.123553 +-0.250399 0.586577 -0.324189 -0.611077 -0.789721 0.054081 +-0.204691 0.525197 -0.474041 0.237215 -0.885861 0.398722 +-0.167913 0.575845 -0.391086 0.661453 -0.694204 0.283832 +-0.147059 0.559099 -0.487339 0.780024 -0.558246 0.282708 +-0.247846 0.680231 -0.398317 -0.944621 0.321992 0.063341 +-0.246793 0.681763 -0.328611 -0.919608 0.390427 0.043449 +-0.265205 0.675793 -0.482234 -0.900648 0.401839 0.165406 +-0.121016 0.612952 -0.489468 0.936852 -0.239404 0.254940 +-0.104151 0.602309 -0.560450 0.918303 -0.244381 0.311443 +-0.132622 0.539817 -0.555258 0.760375 -0.544014 0.354794 +-0.116559 0.653839 -0.489535 0.940656 0.180409 0.287436 +-0.095284 0.658244 -0.561410 0.953362 0.100333 0.284665 +-0.200296 0.489186 -0.533589 0.624292 -0.647209 0.437469 +-0.133645 0.691215 -0.483091 0.727684 0.652658 0.210983 +-0.112848 0.705254 -0.556160 0.811658 0.499399 0.303004 +-0.070740 0.591315 -0.644639 0.887658 -0.295146 0.353486 +-0.116679 0.512235 -0.650594 0.820442 -0.497786 0.281218 +-0.068726 0.667268 -0.647439 0.942332 0.070495 0.327170 +-0.098672 0.741881 -0.649914 0.896983 0.337925 0.285005 +-0.172382 0.715347 -0.474482 0.393029 0.915956 -0.080951 +-0.175497 0.729689 -0.405860 0.821381 0.568537 0.045802 +-0.161990 0.688799 -0.401702 0.896024 0.410572 0.169034 +-0.142612 0.617588 -0.398601 0.926191 -0.332450 0.177897 +-0.162211 0.681140 -0.329839 0.896746 0.435535 0.078462 +-0.178600 0.713752 -0.333697 0.878172 0.457748 0.138854 +-0.148225 0.609419 -0.328049 0.951952 -0.305447 0.022131 +-0.176281 0.581040 -0.325084 0.793080 -0.605957 0.061968 +-0.238095 0.715785 -0.403665 -0.795187 0.604607 0.046127 +-0.232782 0.708077 -0.332184 -0.747677 0.652022 0.125882 +-0.249918 0.703367 -0.477302 -0.683822 0.729529 -0.013233 +-0.201002 0.752380 -0.409530 -0.186917 0.961127 -0.203217 +-0.207105 0.724098 -0.466516 -0.207100 0.956100 -0.207322 +-0.200959 0.732715 -0.338152 -0.633555 0.756177 0.163718 +-0.141864 0.649581 -0.398320 0.979702 0.152465 0.130150 +-0.142688 0.649372 -0.328296 0.954874 0.295635 0.028557 +-0.220027 0.731594 -0.542794 0.212582 0.973587 0.083285 +-0.172011 0.723263 -0.542599 0.355089 0.920346 0.163935 +-0.315181 -0.764996 -1.175598 -0.815775 -0.424816 -0.392483 +-0.250557 -0.893329 -1.103714 -0.803406 -0.527391 -0.276402 +-0.378254 -0.754824 -1.055511 -0.821280 -0.444724 -0.357379 +-0.298690 -0.872468 -0.981866 -0.851079 -0.491762 -0.183944 +-0.352477 -0.606807 -1.199774 -0.878490 -0.167214 -0.447543 +-0.417389 -0.603646 -1.074460 -0.895260 -0.038631 -0.443866 +-0.335016 -0.477144 -1.219440 -0.893182 0.127510 -0.431238 +-0.412246 -0.462044 -1.047188 -0.879460 0.144002 -0.453667 +-0.241454 -0.975757 -1.025889 -0.890920 -0.417457 -0.178860 +-0.261458 -0.950653 -0.936834 -0.884755 -0.460950 -0.068800 +-0.317998 -0.316945 -1.171010 -0.869610 0.082195 -0.486849 +-0.397077 -0.294104 -1.040035 -0.871306 0.011498 -0.490605 +-0.333440 -0.148889 -1.169196 -0.889200 -0.028833 -0.456610 +-0.390117 -0.124181 -1.050900 -0.898057 -0.023551 -0.439248 +-0.334864 -0.008152 -1.173440 -0.891275 0.008762 -0.453379 +-0.392133 0.008478 -1.063792 -0.882833 0.053350 -0.466648 +-0.316565 0.155535 -1.170591 -0.872609 0.174304 -0.456259 +-0.372005 0.173291 -1.062321 -0.861339 0.188147 -0.471907 +-0.284178 0.314571 -1.157604 -0.888441 0.214082 -0.406006 +-0.328173 0.316278 -1.060432 -0.938331 0.145317 -0.313718 +-0.360061 0.306779 -0.937631 -0.966075 0.083456 -0.244407 +-0.332474 0.404321 -1.013368 -0.974994 -0.078659 -0.207845 +-0.341636 0.537693 -1.091500 -0.950636 -0.202863 -0.234814 +-0.346506 0.444275 -0.970240 -0.972649 -0.163481 -0.165008 +-0.314782 0.525202 -1.163291 -0.970901 -0.117034 -0.208936 +-0.110497 0.357001 -0.628471 -0.447278 0.593106 0.669453 +-0.042466 0.462186 -0.676207 -0.497101 0.610396 0.616691 +-0.219224 0.341114 -0.687039 -0.502465 0.686552 0.525524 +-0.193934 0.374098 -0.718043 -0.366712 0.334615 0.868076 +-0.073671 0.464847 -0.696580 -0.166169 0.018769 0.985919 +-0.194984 0.389910 -0.710710 0.207110 -0.398499 0.893479 +-0.091850 0.479491 -0.699313 0.268173 -0.319429 0.908872 +-0.193418 0.414036 -0.679360 0.528243 -0.542678 0.653039 +-0.103255 0.494590 -0.692424 0.572878 -0.511102 0.640770 +-0.196093 0.452835 -0.612980 0.651498 -0.621930 0.434458 +-0.116679 0.512235 -0.650594 0.661077 -0.591483 0.461655 +-0.390662 -0.263803 -0.714595 -0.797753 -0.165857 0.579726 +-0.348259 -0.357136 -0.682947 -0.719696 0.083717 0.689224 +-0.305341 -0.258291 -0.595609 -0.527067 -0.157949 0.835016 +-0.229770 -0.368127 -0.574212 -0.554491 0.095730 0.826665 +-0.163313 -0.268688 -0.540615 -0.419909 -0.038148 0.906764 +-0.144773 -0.369613 -0.521976 -0.521828 0.061276 0.850847 +-0.334028 -0.151073 -0.594810 -0.403515 -0.038496 0.914163 +-0.173069 -0.171989 -0.533491 -0.365032 -0.094207 0.926216 +-0.338005 -0.375625 -0.651199 -0.270600 0.744981 0.609737 +-0.186971 -0.445619 -0.537279 0.098541 0.893629 0.437855 +-0.181052 0.003963 -0.522829 -0.456972 0.118555 0.881545 +-0.337591 0.012575 -0.608417 -0.466021 0.166046 0.869053 +-0.157486 0.215574 -0.562074 -0.482482 0.411264 0.773352 +-0.317899 0.220593 -0.663393 -0.476817 0.333328 0.813350 +-0.210664 -0.440016 -0.501884 0.385861 0.915372 0.114913 +-0.323346 -0.382968 -0.595645 0.403543 0.913281 0.055409 +-0.210983 -0.443751 -0.483240 0.359252 0.913856 0.189222 +-0.325815 -0.384064 -0.553484 0.390282 0.912971 0.119016 +-0.110497 0.357001 -0.628471 -0.466506 0.498142 0.730908 +-0.219224 0.341114 -0.687039 -0.457127 0.504388 0.732549 +-0.115223 0.870956 -1.200244 0.179302 0.786878 -0.590486 +0.000000 0.842631 -1.203002 0.225651 0.750493 -0.621162 +-0.085151 0.801816 -1.283248 0.279787 0.639435 -0.716130 +0.000000 0.798667 -1.251145 0.354642 0.524684 -0.773909 +-0.083203 0.776489 -1.299486 0.332154 0.527060 -0.782228 +-0.031367 0.777065 -1.277087 0.399787 0.391974 -0.828569 +-0.049248 0.745544 -1.293766 -0.818083 0.109453 0.564589 +0.000000 0.777615 -1.259705 0.398388 0.409297 -0.820831 +0.000000 0.812923 -1.255352 -0.522462 -0.100835 0.846679 +-0.029112 0.812922 -1.273484 -0.877684 0.066770 0.474566 +-0.060854 0.725216 -1.324017 -0.831265 0.226921 -0.507450 +-0.039245 0.812922 -1.297518 -0.991059 0.117941 -0.062386 +-0.035195 0.911391 -1.297518 -0.999039 0.031398 0.030593 +-0.025062 0.911391 -1.323454 -0.931567 0.031723 -0.362183 +-0.027126 0.812922 -1.328997 -0.809499 0.173340 -0.560950 +-0.022481 0.911391 -1.271582 -0.908468 0.017601 0.417583 +-0.078983 0.672760 -1.329372 -0.157720 0.033444 -0.986917 +-0.038019 0.674176 -1.342370 -0.230371 0.013315 -0.973012 +-0.028482 0.725216 -1.340985 -0.251015 0.080787 -0.964606 +-0.093267 0.537123 -1.340819 0.004371 -0.013449 -0.999900 +0.000000 0.531584 -1.328178 -0.012186 -0.037851 -0.999209 +0.000000 0.675576 -1.343699 -0.028875 -0.009963 -0.999533 +0.000000 0.376398 -1.337871 -0.064365 -0.055625 -0.996375 +-0.108528 0.360089 -1.304915 -0.262863 -0.169957 -0.949746 +-0.033976 0.991295 -1.297518 -0.987457 0.005385 0.157797 +-0.023843 0.991295 -1.322813 -0.929756 0.015644 -0.367844 +-0.023843 0.991295 -1.272223 -0.928210 -0.012839 0.371835 +0.000000 0.725216 -1.341540 -0.019464 0.043444 -0.998866 +-0.335016 -0.477144 -1.219440 -0.819375 0.142017 -0.555388 +-0.219620 -0.509012 -1.385795 -0.808235 0.043899 -0.587221 +-0.352477 -0.606807 -1.199774 -0.808999 -0.100696 -0.579121 +-0.215624 -0.638821 -1.379687 -0.790148 -0.211487 -0.575274 +-0.317998 -0.316945 -1.171010 -0.865330 0.034616 -0.500006 +-0.236095 -0.336440 -1.315803 -0.841276 0.113538 -0.528549 +-0.333440 -0.148889 -1.169196 -0.858436 -0.032665 -0.511880 +-0.268996 -0.166749 -1.278754 -0.866841 -0.045564 -0.496498 +-0.315181 -0.764996 -1.175598 -0.777929 -0.288819 -0.558041 +-0.198746 -0.792401 -1.318974 -0.766625 -0.307155 -0.563863 +-0.334864 -0.008152 -1.173440 -0.846801 0.052789 -0.529283 +-0.276410 -0.024242 -1.265942 -0.849437 0.018228 -0.527375 +-0.316565 0.155535 -1.170591 -0.852650 0.104231 -0.511980 +-0.263580 0.140392 -1.261915 -0.844786 0.091364 -0.527246 +-0.121794 0.126862 -1.337687 -0.246268 0.158980 -0.956074 +-0.108528 0.360089 -1.304915 -0.276043 0.133725 -0.951797 +0.000000 0.123007 -1.369700 -0.255195 0.147876 -0.955515 +0.000000 0.376398 -1.337871 -0.304797 0.118702 -0.944991 +-0.126253 -0.069033 -1.371295 -0.220563 0.216683 -0.951000 +0.000000 -0.085812 -1.403213 -0.221652 0.287575 -0.931757 +0.000000 -0.212704 -1.457249 -0.247469 0.379611 -0.891434 +-0.121475 -0.199653 -1.417969 -0.219521 0.352173 -0.909827 +-0.337829 0.315369 -0.803507 -0.850165 0.515339 0.107916 +-0.360061 0.306779 -0.937631 -0.890382 0.448883 0.075663 +-0.372288 0.218413 -0.760127 -0.945523 0.285782 0.155933 +-0.409406 0.188720 -0.931537 -0.956010 0.276242 -0.098669 +-0.372005 0.173291 -1.062321 -0.941402 0.173709 -0.289116 +-0.437223 0.021572 -0.907435 -0.988816 0.111657 -0.098869 +-0.401509 0.019700 -0.719666 -0.966041 0.179835 0.185536 +-0.328173 0.316278 -1.060432 -0.911216 0.326521 -0.251138 +-0.392133 0.008478 -1.063792 -0.962224 0.006191 -0.272187 +-0.432499 -0.117936 -0.893081 -0.963614 -0.052087 -0.262174 +-0.303637 0.359237 -0.823789 -0.952544 0.269371 0.141769 +-0.332474 0.404321 -1.013368 -0.985989 -0.106311 0.128546 +-0.316694 0.395121 -0.826608 -0.949017 -0.302780 0.087693 +-0.346506 0.444275 -0.970240 -0.913033 -0.407720 0.011622 +-0.390117 -0.124181 -1.050900 -0.972651 -0.022315 -0.231197 +-0.423456 -0.279155 -0.891875 -0.979023 -0.028774 -0.201708 +-0.380000 0.479387 -0.850625 -0.897808 -0.421940 -0.126123 +-0.341636 0.537693 -1.091500 -0.964211 -0.153065 -0.216492 +-0.388560 0.573610 -0.906970 -0.992477 0.052210 -0.110745 +-0.311188 0.429845 -0.743750 -0.855672 -0.507549 0.101094 +-0.346101 0.613384 -0.684474 -0.927871 0.336971 0.159708 +-0.362855 0.685884 -0.934781 -0.931578 0.344951 0.114764 +-0.310846 0.688865 -0.685292 -0.885057 0.429536 0.179369 +-0.343043 0.675234 -1.105304 -0.979688 0.079572 -0.184064 +-0.397077 -0.294104 -1.040035 -0.989007 0.021149 -0.146348 +-0.414880 -0.360277 -0.913431 -0.988851 0.135698 -0.061317 +-0.275723 0.755235 -0.676234 -0.888209 0.419780 0.186733 +-0.310224 0.786234 -0.897805 -0.896302 0.398138 0.195266 +-0.412246 -0.462044 -1.047188 -0.969065 0.152795 -0.193820 +-0.445104 -0.474404 -0.928435 -0.986395 0.127519 -0.103751 +-0.396773 -0.408556 -0.803304 -0.943552 0.216978 0.250260 +-0.441108 -0.605236 -0.978452 -0.981078 -0.088849 -0.172025 +-0.449057 -0.493539 -0.787950 -0.995577 0.056793 -0.074842 +-0.421764 -0.731125 -0.935026 -0.884742 -0.461487 -0.065276 +-0.459976 -0.598947 -0.814650 -0.990811 -0.109190 -0.079816 +-0.430026 -0.707082 -0.805969 -0.894149 -0.447012 0.026035 +-0.378254 -0.754824 -1.055511 -0.893875 -0.384436 -0.230645 +-0.298690 -0.872468 -0.981866 -0.821463 -0.567337 -0.057680 +-0.327169 -0.847824 -0.782242 -0.806724 -0.590927 0.001551 +-0.417389 -0.603646 -1.074460 -0.968093 -0.042231 -0.247008 +-0.261458 -0.950653 -0.936834 -0.903943 -0.427626 0.004923 +-0.275470 -0.919913 -0.839500 -0.869645 -0.493164 -0.022512 +-0.368785 -0.778217 -0.725018 -0.807768 -0.585014 0.072594 +-0.075642 -0.735416 -0.462425 -0.416250 -0.370773 0.830219 +-0.080293 -0.814335 -0.503604 -0.337955 -0.491686 0.802516 +0.000000 -0.743096 -0.427930 -0.381979 -0.391794 0.837012 +0.000000 -0.820987 -0.477658 -0.302317 -0.511311 0.804466 +-0.066691 -0.876854 -0.541093 -0.330389 -0.537225 0.776036 +0.000000 -0.882034 -0.516286 -0.316538 -0.523597 0.790980 +-0.072233 -0.668912 -0.433957 -0.396984 -0.149820 0.905515 +0.000000 -0.682871 -0.406746 -0.373654 -0.148785 0.915558 +-0.090468 -0.527020 -0.448806 -0.405691 0.043407 0.912979 +0.000000 -0.520935 -0.408895 -0.378260 0.027933 0.925278 +0.000000 0.792848 -0.871132 0.565732 0.760235 0.319360 +0.000000 0.877127 -1.071758 0.490527 0.859384 0.144367 +-0.020074 0.802988 -0.859710 0.428814 0.834497 0.346025 +-0.055367 0.903845 -1.060557 0.364531 0.930132 0.044410 +0.000000 0.842631 -1.203002 0.302930 0.912640 -0.274450 +-0.115223 0.870956 -1.200244 0.219773 0.924376 -0.311815 +-0.059104 0.807325 -0.828836 0.239710 0.877346 0.415695 +-0.112552 0.899531 -1.004645 0.301415 0.876695 0.374906 +-0.172004 0.879637 -0.926179 0.174024 0.876340 0.449160 +-0.087118 0.775469 -0.767209 0.120160 0.858564 0.498427 +-0.401509 0.019700 -0.719666 -0.908055 0.121556 0.400824 +-0.437223 0.021572 -0.907435 -0.987194 0.018799 0.158414 +-0.408121 -0.129847 -0.708110 -0.938711 -0.021708 0.344021 +-0.432499 -0.117936 -0.893081 -0.986887 -0.069425 0.145720 +-0.337591 0.012575 -0.608417 -0.850899 0.134410 0.507843 +-0.372288 0.218413 -0.760127 -0.829738 0.301489 0.469722 +-0.317899 0.220593 -0.663393 -0.764895 0.434460 0.475583 +-0.390662 -0.263803 -0.714595 -0.926258 -0.182049 0.330007 +-0.334028 -0.151073 -0.594810 -0.825877 -0.108166 0.553378 +-0.337829 0.315369 -0.803507 -0.629975 0.631413 0.452160 +-0.219224 0.341114 -0.687039 -0.579738 0.686694 0.438583 +-0.423456 -0.279155 -0.891875 -0.955594 -0.193394 0.222347 +-0.193934 0.374098 -0.718043 -0.672829 0.416328 0.611532 +-0.303637 0.359237 -0.823789 -0.701341 0.041246 0.711631 +-0.194984 0.389910 -0.710710 -0.554804 -0.555641 0.619238 +-0.316694 0.395121 -0.826608 -0.584191 -0.559076 0.588350 +-0.348259 -0.357136 -0.682947 -0.958911 -0.049178 0.279411 +-0.414880 -0.360277 -0.913431 -0.959959 0.042531 0.276895 +-0.305341 -0.258291 -0.595609 -0.788843 -0.215351 0.575630 +-0.193418 0.414036 -0.679360 -0.407298 -0.713835 0.569691 +-0.311188 0.429845 -0.743750 -0.622061 -0.658307 0.423877 +-0.291123 0.470982 -0.647226 -0.772611 -0.510087 0.377998 +-0.343117 0.533016 -0.669788 -0.927233 -0.250812 0.278087 +-0.380000 0.479387 -0.850625 -0.936742 -0.233878 0.260414 +-0.338005 -0.375625 -0.651199 -0.800471 0.548383 0.241912 +-0.396773 -0.408556 -0.803304 -0.875754 0.459175 0.149045 +-0.346101 0.613384 -0.684474 -0.982202 -0.002148 0.187818 +-0.388560 0.573610 -0.906970 -0.981688 0.011891 0.190122 +-0.405733 -0.421712 -0.714452 -0.818859 0.561223 0.120410 +-0.323346 -0.382968 -0.595645 -0.702031 0.658062 0.272226 +-0.449057 -0.493539 -0.787950 -0.938921 0.329333 0.099838 +-0.445104 -0.474404 -0.928435 -0.846803 0.529708 0.048322 +-0.391453 -0.418047 -0.607499 -0.925918 0.360968 0.111256 +-0.427755 -0.497838 -0.650739 -0.948036 0.285030 0.141371 +-0.436833 -0.575138 -0.660827 -0.983238 -0.073300 0.166941 +-0.459976 -0.598947 -0.814650 -0.962050 -0.186536 0.199158 +-0.398648 -0.657788 -0.643241 -0.897694 -0.359380 0.254933 +-0.430026 -0.707082 -0.805969 -0.904548 -0.327091 0.273503 +-0.352869 -0.722752 -0.593997 -0.871680 -0.404266 0.277026 +-0.368785 -0.778217 -0.725018 -0.764334 -0.551206 0.334613 +-0.327169 -0.847824 -0.782242 -0.633309 -0.680950 0.367733 +-0.271029 -0.828348 -0.649493 -0.635327 -0.675748 0.373798 +-0.294151 -0.787640 -0.616429 -0.637302 -0.670499 0.379838 +0.000000 -0.365256 -0.450505 -0.446947 0.319956 0.835384 +0.000000 -0.278300 -0.498178 -0.305059 0.217029 0.927274 +-0.144773 -0.369613 -0.521976 -0.368333 0.261049 0.892292 +-0.163313 -0.268688 -0.540615 -0.219901 0.037023 0.974819 +0.000000 -0.181284 -0.504867 -0.192464 0.004644 0.981293 +-0.173069 -0.171989 -0.533491 -0.131365 -0.038782 0.990575 +0.000000 -0.002516 -0.511473 -0.106887 0.071547 0.991694 +-0.181052 0.003963 -0.522829 -0.060235 0.062843 0.996204 +0.000000 -0.433288 -0.424155 -0.463794 0.243990 0.851683 +-0.122304 -0.438939 -0.494920 -0.554788 0.176260 0.813107 +-0.186971 -0.445619 -0.537279 0.101080 0.481331 0.870691 +-0.131915 -0.528796 -0.497689 0.204651 0.359604 0.910386 +-0.090468 -0.527020 -0.448806 -0.617492 0.118765 0.777559 +-0.157486 0.215574 -0.562074 -0.112487 0.259472 0.959177 +0.000000 0.217662 -0.539160 -0.161664 0.334761 0.928332 +0.000000 -0.520935 -0.408895 -0.407447 0.156644 0.899694 +-0.210664 -0.440016 -0.501884 0.727881 0.627548 0.276355 +-0.148618 -0.528786 -0.462029 0.902718 0.316587 0.291330 +-0.153661 -0.526172 -0.447830 0.934071 0.297970 0.196789 +-0.210983 -0.443751 -0.483240 0.685123 0.726985 0.045823 +-0.130595 -0.640556 -0.478463 0.006278 0.005909 0.999963 +-0.152043 -0.627013 -0.461232 0.842566 -0.035257 0.537439 +-0.155519 -0.617108 -0.446525 0.934561 -0.123926 0.333524 +-0.325815 -0.384064 -0.553484 0.483472 0.874061 -0.047663 +-0.306654 -0.389007 -0.449769 0.229139 0.963390 0.139192 +-0.219295 -0.435004 -0.413224 0.640116 0.758326 0.123257 +-0.165710 -0.520333 -0.397867 0.887121 0.307598 0.344093 +-0.166063 -0.601729 -0.399052 0.898662 -0.166275 0.405906 +-0.166408 -0.689953 -0.448651 0.496847 -0.541910 0.677847 +-0.185062 -0.653566 -0.409151 0.657777 -0.579303 0.481391 +-0.233252 -0.732483 -0.490942 -0.086198 -0.834667 0.543968 +-0.236832 -0.696120 -0.429808 0.003363 -0.861538 0.507683 +-0.072233 -0.668912 -0.433957 -0.537361 -0.121704 0.834525 +-0.139670 -0.729077 -0.486843 -0.173515 -0.439191 0.881478 +-0.075642 -0.735416 -0.462425 -0.362020 -0.383035 0.849839 +-0.080293 -0.814335 -0.503604 -0.426080 -0.527517 0.734970 +-0.188531 -0.803520 -0.548481 -0.268564 -0.597053 0.755911 +0.000000 0.362368 -0.606042 -0.200478 0.411030 0.889305 +-0.110497 0.357001 -0.628471 -0.167369 0.434512 0.884978 +-0.066691 -0.876854 -0.541093 -0.584302 -0.554331 0.592712 +-0.130932 -0.873717 -0.601270 -0.506028 -0.610256 0.609527 +-0.054281 -0.924635 -0.576374 -0.576327 -0.577005 0.578716 +-0.106031 -0.926096 -0.629367 -0.573605 -0.579521 0.578906 +-0.357320 -0.417054 -0.465251 -0.691627 0.636928 0.340551 +-0.287657 -0.420008 -0.357903 0.086053 0.901619 0.423885 +-0.178825 -0.521027 -0.378250 0.829992 0.127880 0.542918 +-0.224163 -0.441915 -0.371038 0.612860 0.686851 0.390691 +-0.245371 -0.672412 -0.378741 0.067894 -0.899852 0.430878 +-0.276524 -0.661972 -0.379310 -0.351352 -0.855161 0.381119 +-0.286957 -0.682616 -0.438026 -0.407820 -0.813382 0.414840 +-0.332847 -0.626788 -0.381643 -0.578235 -0.732991 0.358284 +-0.347038 -0.652398 -0.457320 -0.627715 -0.689744 0.360869 +-0.367801 -0.587543 -0.383197 -0.856477 -0.398490 0.328106 +-0.387067 -0.602420 -0.479440 -0.806748 -0.537875 0.244639 +-0.294651 -0.747369 -0.556845 -0.462801 -0.770504 0.438337 +-0.352869 -0.722752 -0.593997 -0.560842 -0.726144 0.397707 +-0.336212 -0.447832 -0.375617 -0.661431 0.647690 0.378161 +-0.383499 -0.505994 -0.385173 -0.898800 0.299309 0.320271 +-0.405876 -0.495740 -0.495396 -0.865675 0.450800 0.217683 +-0.156180 -0.709903 -0.464735 0.464990 -0.387697 0.795911 +-0.200532 -0.651395 -0.376826 0.557172 -0.710295 0.430163 +-0.179266 -0.601335 -0.377465 0.839398 -0.169291 0.516481 +-0.376532 -0.549829 -0.385658 -0.923955 -0.180530 0.337220 +-0.355280 -0.513678 -0.307759 -0.926048 -0.175534 0.334100 +-0.249547 -0.643542 -0.327400 0.006909 -0.912306 0.409451 +-0.276524 -0.635578 -0.326774 -0.268915 -0.882415 0.386041 +-0.284307 -0.461224 -0.300945 0.445628 0.737497 0.507459 +-0.237075 -0.487034 -0.304912 0.408707 0.735574 0.540268 +-0.348767 -0.549903 -0.311345 -0.916553 -0.200258 0.346161 +-0.343097 -0.581915 -0.315867 -0.911775 -0.211246 0.352196 +-0.229238 -0.751868 -0.513438 -0.035081 -0.696553 0.716647 +-0.215880 -0.635772 -0.327812 0.214213 -0.909251 0.356897 +-0.256416 -0.624547 -0.286227 -0.027333 -0.909413 0.414994 +-0.276764 -0.624107 -0.286603 -0.148954 -0.927623 0.342532 +0.000428 1.612066 -1.276136 0.493065 -0.146496 0.857570 +0.000345 1.583852 -1.280908 0.513488 -0.157742 0.843474 +0.013389 1.611106 -1.283752 0.678651 -0.191055 0.709176 +0.007777 1.583781 -1.285707 0.694618 -0.192257 0.693213 +0.015212 1.583690 -1.297385 0.812292 -0.215496 0.541982 +0.020758 1.612066 -1.293943 0.799670 -0.223874 0.557143 +0.000373 1.597562 -1.262090 0.447737 -0.134622 0.883973 +0.000351 1.519087 -1.274030 0.481147 -0.142008 0.865061 +0.018613 1.595557 -1.271634 0.711096 -0.134457 0.690119 +0.012060 1.519814 -1.281023 0.699438 -0.147206 0.699369 +0.022072 1.519996 -1.297424 0.881890 -0.115628 0.457056 +0.027355 1.597562 -1.291280 0.913132 -0.093621 0.396767 +0.000372 1.570149 -1.255745 0.419314 -0.134843 0.897771 +0.000349 1.475675 -1.269924 0.441888 -0.140128 0.886058 +0.023519 1.567919 -1.266891 0.753916 -0.146542 0.640418 +0.015475 1.475798 -1.277939 0.777520 -0.141381 0.612759 +0.021517 1.476233 -1.300993 0.947129 -0.129816 0.293419 +0.034451 1.570149 -1.296174 0.930466 -0.145398 0.336291 +0.000372 1.537030 -1.250020 0.418642 -0.187317 0.888623 +0.000349 1.442555 -1.269924 0.439601 -0.192197 0.877389 +0.025818 1.534800 -1.262478 0.756189 -0.191097 0.625828 +0.015475 1.442679 -1.277939 0.772235 -0.188532 0.606720 +0.021517 1.443114 -1.300993 0.949139 -0.158746 0.271908 +0.036751 1.537030 -1.295993 0.940385 -0.168274 0.295568 +0.000403 1.500012 -1.245729 0.398737 -0.181496 0.898926 +0.000351 1.392143 -1.267485 0.412715 -0.184418 0.891996 +0.027067 1.497572 -1.258049 0.708700 -0.169626 0.684814 +0.018579 1.392218 -1.276257 0.700889 -0.175932 0.691233 +0.028506 1.392485 -1.297364 0.912112 -0.132628 0.387894 +0.039525 1.500012 -1.289692 0.926848 -0.120354 0.355624 +0.000403 1.457243 -1.245338 0.372382 -0.186826 0.909081 +0.000351 1.349374 -1.267485 0.399128 -0.193550 0.896234 +0.031193 1.454802 -1.258452 0.700251 -0.192814 0.687366 +0.018579 1.349450 -1.276256 0.697437 -0.199813 0.688227 +0.028506 1.349716 -1.297364 0.907360 -0.166174 0.386114 +0.043651 1.457243 -1.289771 0.922057 -0.154917 0.354699 +0.000345 1.414506 -1.245701 0.356010 -0.132468 0.925045 +0.000345 1.279529 -1.265030 0.402397 -0.142555 0.904298 +0.032102 1.411768 -1.258315 0.694165 -0.151028 0.703793 +0.019341 1.278736 -1.274819 0.717162 -0.153139 0.679873 +0.029357 1.278820 -1.297367 0.898691 -0.140586 0.415440 +0.046819 1.414506 -1.287978 0.891656 -0.144440 0.429054 +0.000345 1.325265 -1.253736 0.309360 -0.071177 0.948278 +0.000345 1.188933 -1.263969 0.359951 -0.081657 0.929391 +0.028351 1.322527 -1.263078 0.671463 -0.091894 0.735319 +0.021388 1.189144 -1.273440 0.707249 -0.091381 0.701034 +0.032032 1.188607 -1.297680 0.892376 -0.089747 0.442279 +0.043068 1.325265 -1.289129 0.870751 -0.100438 0.481357 +0.015267 1.583688 -1.297604 0.971576 -0.090469 -0.218758 +0.002626 1.584369 -1.305302 0.751851 -0.267424 -0.602665 +0.017630 1.611106 -1.298448 0.965615 -0.240432 -0.098892 +0.014435 1.611458 -1.309839 0.869418 -0.422035 -0.256900 +0.014435 1.612066 -1.284790 0.941569 -0.239253 0.237077 +0.007538 1.583853 -1.285870 0.903890 -0.149792 0.400681 +0.007777 1.583781 -1.309166 0.694602 -0.192230 -0.693236 +0.000345 1.583852 -1.313964 0.513472 -0.157733 -0.843485 +0.013389 1.611106 -1.311120 0.678652 -0.191047 -0.709177 +0.000428 1.612066 -1.318737 0.493111 -0.146522 -0.857539 +0.020758 1.612066 -1.300929 0.799670 -0.223874 -0.557143 +0.015212 1.583690 -1.297487 0.812304 -0.215487 -0.541967 +0.012060 1.519814 -1.313850 0.699438 -0.147197 -0.699370 +0.000351 1.519087 -1.320843 0.481166 -0.142001 -0.865052 +0.018613 1.595557 -1.323238 0.711100 -0.134451 -0.690115 +0.000373 1.597562 -1.332783 0.447776 -0.134619 -0.883954 +0.027355 1.597562 -1.303593 0.913125 -0.093622 -0.396784 +0.022072 1.519996 -1.297449 0.881886 -0.115625 -0.457064 +0.023238 1.519814 -1.297899 0.997699 -0.060653 -0.030308 +0.011751 1.520020 -1.313816 0.905433 -0.107639 -0.410615 +0.027835 1.595557 -1.298151 0.993500 -0.112701 -0.016012 +0.022081 1.597562 -1.324929 0.962630 -0.159597 -0.218798 +0.022081 1.597562 -1.270444 0.966419 -0.146262 0.211284 +0.012708 1.519996 -1.281267 0.919981 -0.099460 0.379134 +0.015475 1.475798 -1.316933 0.777534 -0.141386 -0.612740 +0.000349 1.475675 -1.324949 0.441896 -0.140130 -0.886054 +0.023519 1.567919 -1.327982 0.753918 -0.146544 -0.640416 +0.000372 1.570149 -1.339127 0.419283 -0.134836 -0.897787 +0.034451 1.570149 -1.298699 0.930466 -0.145400 -0.336291 +0.021517 1.476234 -1.293880 0.947128 -0.129819 -0.293422 +0.027068 1.570149 -1.268926 0.966746 -0.134247 0.217669 +0.015913 1.476233 -1.277305 0.932466 -0.098336 0.347616 +0.033316 1.567919 -1.298051 0.932466 -0.098336 0.347616 +0.026855 1.475798 -1.297815 0.880142 -0.060523 0.470836 +0.026855 1.475798 -1.297815 0.862645 -0.061789 -0.502022 +0.015223 1.476312 -1.317866 0.927527 -0.105644 -0.358516 +0.033316 1.567919 -1.298051 0.927527 -0.105644 -0.358516 +0.027068 1.570149 -1.329073 0.967619 -0.146676 -0.205427 +0.015475 1.442679 -1.316933 0.772246 -0.188537 -0.606704 +0.000349 1.442555 -1.324949 0.439623 -0.192202 -0.877377 +0.025818 1.534800 -1.332395 0.756195 -0.191099 -0.625820 +0.000372 1.537030 -1.344853 0.418642 -0.187317 -0.888623 +0.036751 1.537030 -1.298880 0.940385 -0.168274 -0.295568 +0.021517 1.443114 -1.293880 0.949138 -0.158748 -0.271913 +0.029367 1.537029 -1.264803 0.967490 -0.164206 0.192351 +0.015913 1.443114 -1.277305 0.933852 -0.124498 0.335291 +0.035616 1.534799 -1.298138 0.933852 -0.124498 0.335291 +0.026855 1.442678 -1.297815 0.878605 -0.081908 0.470473 +0.026855 1.442678 -1.297815 0.861021 -0.083645 -0.501644 +0.015223 1.443193 -1.317866 0.928583 -0.132021 -0.346850 +0.035616 1.534799 -1.298138 0.928583 -0.132021 -0.346850 +0.029367 1.537029 -1.333644 0.967483 -0.176323 -0.181350 +0.032987 1.500012 -1.264132 0.971548 -0.138489 0.192131 +0.020142 1.392485 -1.276685 0.955806 -0.120075 0.268359 +0.039357 1.497572 -1.298102 0.955806 -0.120075 0.268359 +0.027913 1.392711 -1.297786 0.933949 -0.100893 0.342871 +0.027913 1.392711 -1.297786 0.910403 -0.100566 -0.401314 +0.018732 1.392114 -1.318464 0.947302 -0.128622 -0.293385 +0.039357 1.497572 -1.298102 0.947302 -0.128622 -0.293385 +0.032987 1.500012 -1.334286 0.971131 -0.154903 -0.181408 +0.018579 1.392219 -1.318616 0.700881 -0.175928 -0.691241 +0.000351 1.392143 -1.327387 0.412700 -0.184414 -0.892004 +0.027067 1.497572 -1.336823 0.708700 -0.169623 -0.684816 +0.000403 1.500012 -1.349143 0.398737 -0.181496 -0.898926 +0.039524 1.500012 -1.305181 0.926854 -0.120348 -0.355609 +0.028506 1.392485 -1.297508 0.912118 -0.132623 -0.387881 +0.037113 1.457243 -1.264473 0.965049 -0.174518 0.195508 +0.020142 1.349716 -1.276685 0.950359 -0.156267 0.269071 +0.043483 1.454802 -1.298095 0.950359 -0.156267 0.269071 +0.027913 1.349942 -1.297786 0.930003 -0.137085 0.341030 +0.027913 1.349942 -1.297786 0.906940 -0.135841 -0.398758 +0.018732 1.349345 -1.318464 0.941716 -0.164325 -0.293543 +0.043483 1.454802 -1.298095 0.941716 -0.164325 -0.293543 +0.037113 1.457243 -1.333909 0.964165 -0.190659 -0.184485 +0.018579 1.349450 -1.318616 0.697437 -0.199811 -0.688228 +0.000351 1.349374 -1.327387 0.399143 -0.193552 -0.896227 +0.031193 1.454803 -1.336420 0.700258 -0.192812 -0.687358 +0.000403 1.457243 -1.349535 0.372411 -0.186832 -0.909067 +0.043650 1.457243 -1.305102 0.922062 -0.154912 -0.354689 +0.028506 1.349716 -1.297508 0.907363 -0.166170 -0.386109 +0.031963 1.414506 -1.265585 0.953354 -0.109396 0.281333 +0.019007 1.279646 -1.274121 0.932635 -0.093797 0.348416 +0.041210 1.411768 -1.297985 0.932635 -0.093797 0.348416 +0.029808 1.280044 -1.297729 0.907092 -0.077714 0.413697 +0.029808 1.280044 -1.297729 0.864135 -0.075766 -0.497523 +0.016836 1.279816 -1.320225 0.916967 -0.104484 -0.385037 +0.041210 1.411768 -1.297985 0.916967 -0.104484 -0.385037 +0.031963 1.414506 -1.332496 0.954881 -0.131503 -0.266287 +0.019341 1.278736 -1.320054 0.717148 -0.153134 -0.679888 +0.000345 1.279529 -1.329842 0.402391 -0.142553 -0.904301 +0.032102 1.411768 -1.336557 0.694161 -0.151026 -0.703798 +0.000345 1.414506 -1.349172 0.356035 -0.132474 -0.925035 +0.046819 1.414506 -1.306895 0.891650 -0.144440 -0.429065 +0.029357 1.278820 -1.297506 0.898688 -0.140585 -0.415446 +0.028212 1.325265 -1.269463 0.946438 -0.072841 0.314561 +0.019151 1.190492 -1.273409 0.915769 -0.053065 0.398185 +0.037459 1.322527 -1.297919 0.915769 -0.053065 0.398185 +0.032060 1.188684 -1.297206 0.877476 -0.032847 0.478494 +0.032060 1.188684 -1.297206 0.911371 -0.038946 -0.409740 +0.021185 1.189232 -1.321447 0.933902 -0.051572 -0.353791 +0.037459 1.322527 -1.297919 0.933902 -0.051572 -0.353791 +0.028212 1.325265 -1.328228 0.952886 -0.064003 -0.296499 +0.021388 1.189144 -1.321433 0.707241 -0.091381 -0.701042 +0.000345 1.188933 -1.330903 0.359933 -0.081660 -0.929398 +0.028351 1.322527 -1.331795 0.671458 -0.091897 -0.735323 +0.000345 1.325265 -1.341137 0.309359 -0.071184 -0.948277 +0.043068 1.325265 -1.305744 0.870751 -0.100442 -0.481357 +0.032032 1.188607 -1.297192 0.892380 -0.089748 -0.442272 +-0.000014 -1.159240 -0.439762 1.000000 0.000007 0.000088 +-0.000014 -1.250245 -0.434445 1.000000 0.000025 0.000099 +0.000000 -1.276195 -0.555204 1.000000 0.000044 0.000106 +-0.000014 -1.050621 -0.441716 1.000000 -0.000011 0.000086 +0.000000 -1.063839 -0.611120 1.000000 -0.000003 0.000086 +-0.000014 -0.986598 -0.434334 1.000000 -0.000033 0.000095 +0.000000 -0.987748 -0.589001 1.000000 -0.000030 0.000089 +-0.000014 -0.932663 -0.417662 1.000000 -0.000050 0.000108 +0.000000 -0.931298 -0.554330 1.000000 -0.000055 0.000098 +-0.000014 -0.880610 -0.399948 1.000000 -0.000059 0.000125 +-0.000014 -0.822789 -0.374273 1.000000 -0.000072 0.000142 +-0.000014 -0.744347 -0.339557 1.000000 -0.000057 0.000160 +0.000000 -0.743088 -0.427930 1.000000 -0.000070 0.000150 +-0.000014 -0.681405 -0.321841 1.000000 -0.000039 0.000166 +-0.000014 -0.518173 -0.291564 1.000000 0.000006 0.000133 +0.000000 -0.520932 -0.408895 1.000000 0.000011 0.000119 +-0.000014 -0.422456 -0.316589 1.000000 0.000040 0.000125 +-0.000014 -0.340680 -0.343338 1.000000 0.000049 0.000115 +-0.000014 -0.278986 -0.368215 1.000000 0.000022 0.000109 +0.000000 -0.278299 -0.498183 1.000000 0.000038 0.000111 +0.000000 -0.181284 -0.504868 1.000000 0.000008 0.000111 +-0.000014 -0.182662 -0.379905 1.000000 0.000019 0.000128 +-0.000015 -0.003255 -0.418132 1.000000 0.000040 0.000161 +0.044857 -0.874260 -0.433364 0.948194 -0.167564 0.269906 +0.043304 -0.921943 -0.452842 0.965449 -0.216312 0.145320 +0.066690 -0.876853 -0.541092 0.954229 -0.251129 0.162426 +0.054009 -0.924554 -0.576160 0.944508 -0.316291 0.088688 +0.040422 -0.812548 -0.413537 0.909731 -0.134698 0.392743 +0.080293 -0.814335 -0.503604 0.923417 -0.182051 0.337873 +0.039930 -0.738402 -0.375737 0.919840 -0.144710 0.364627 +0.075641 -0.735415 -0.462425 0.911591 -0.150867 0.382414 +0.040244 -0.668088 -0.348705 0.928134 -0.093480 0.360318 +0.072233 -0.668912 -0.433957 0.926843 -0.111684 0.358454 +0.038948 -0.523525 -0.323235 0.912381 -0.047487 0.406579 +0.090468 -0.527023 -0.448803 0.924361 -0.091460 0.370395 +0.043792 -0.422016 -0.343618 0.870977 0.054486 0.488293 +0.122302 -0.438939 -0.494918 0.897874 -0.062103 0.435850 +0.144772 -0.369612 -0.521974 0.848424 0.023093 0.528814 +0.044009 -0.342730 -0.376249 0.808265 0.106176 0.579166 +0.049406 -0.273320 -0.399098 0.751218 0.043022 0.658650 +0.163313 -0.268690 -0.540612 0.792544 -0.007641 0.609766 +0.173070 -0.171995 -0.533485 0.778539 0.281322 0.561012 +0.044787 -0.177356 -0.408909 0.675643 0.215521 0.705023 +0.007276 -0.010464 -0.451574 0.735097 0.562851 0.377931 +0.000000 -0.002516 -0.511473 0.700250 0.713833 0.009658 +0.017762 -1.166412 -0.476638 0.985727 -0.114764 0.123176 +0.000071 -1.253767 -0.451994 0.968819 -0.228917 0.094796 +0.028425 -1.191990 -0.592592 0.977116 -0.187075 0.101231 +0.000000 -1.276185 -0.555181 0.953741 -0.293911 0.063198 +0.028477 -1.049551 -0.487267 0.989857 -0.105042 0.095653 +0.044876 -1.066191 -0.622134 0.989850 -0.071615 0.122754 +0.040666 -0.987166 -0.466243 0.989127 -0.138086 0.050589 +0.045709 -0.984544 -0.606913 0.989511 -0.129959 0.063078 +0.043304 -0.921943 -0.452842 0.994457 -0.058212 0.087559 +0.054009 -0.924554 -0.576160 0.992553 -0.105932 0.060145 +-0.178546 -1.354269 -0.860294 -0.867690 -0.459636 0.189335 +-0.154545 -1.402559 -0.867532 -0.882287 -0.428250 0.195375 +-0.131543 -1.409096 -0.777987 -0.882287 -0.428250 0.195375 +-0.111758 -1.457935 -0.786106 -0.895794 -0.396335 0.201175 +-0.085409 -1.291375 -1.217723 0.056625 -0.109374 -0.992386 +-0.082624 -1.177560 -1.230108 0.046793 -0.063930 -0.996857 +-0.000017 -1.287914 -1.213232 0.052002 -0.112815 -0.992254 +-0.000017 -1.171195 -1.226909 -0.002241 -0.047014 -0.998892 +-0.063693 -1.084658 -1.226234 -0.049267 -0.129632 -0.990337 +0.000000 -1.086145 -1.231919 -0.135462 -0.291080 -0.947060 +-0.063837 -1.006457 -1.256372 -0.177770 -0.475488 -0.861574 +0.000000 -1.014367 -1.268361 -0.192482 -0.537709 -0.820866 +0.000000 -0.946150 -1.314178 -0.132503 -0.611708 -0.779908 +-0.077967 -0.944955 -1.301869 -0.170017 -0.616850 -0.768499 +0.000000 -0.850805 -1.401005 -0.166715 -0.586793 -0.792389 +-0.113353 -0.829547 -1.389298 -0.215967 -0.489613 -0.844771 +-0.117833 -0.677125 -1.452666 -0.283429 -0.242821 -0.927742 +0.000000 -0.694820 -1.481308 -0.237083 -0.344148 -0.908490 +-0.114572 -0.524305 -1.478219 -0.306719 0.040080 -0.950956 +0.000000 -0.533029 -1.515251 -0.293088 -0.072777 -0.953312 +0.000000 -0.361320 -1.491224 -0.297235 0.160851 -0.941158 +-0.108530 -0.355331 -1.455653 -0.292423 0.184591 -0.938304 +0.000000 -0.212704 -1.457249 -0.287521 0.208324 -0.934843 +-0.121475 -0.199653 -1.417969 -0.281357 0.203601 -0.937755 +-0.107905 -1.323799 -0.578042 -0.769640 0.004185 0.638464 +-0.096499 -1.343108 -0.564166 -0.738631 0.072852 0.670162 +-0.084009 -1.293200 -0.566737 -0.637960 0.197992 0.744182 +-0.079885 -1.324992 -0.553916 -0.665125 0.203467 0.718477 +-0.101609 -1.353245 -0.577932 -0.869459 -0.184191 0.458382 +-0.044418 -1.529981 -0.878195 -0.330139 -0.836287 -0.437758 +-0.032348 -1.573539 -0.787490 -0.491571 -0.802664 -0.337771 +-0.082070 -1.492716 -0.881297 -0.660635 -0.708678 -0.247662 +-0.062210 -1.548939 -0.790061 -0.710617 -0.665123 -0.229423 +-0.095632 -1.475422 -0.916070 -0.645849 -0.750170 -0.141858 +-0.043559 -1.502736 -0.920470 -0.298206 -0.855224 -0.423870 +-0.000017 -1.583737 -0.779092 -0.121621 -0.894308 -0.430606 +-0.000017 -1.537104 -0.870659 -0.056208 -0.858897 -0.509055 +-0.045074 -1.490148 -0.950779 -0.254260 -0.941268 -0.222187 +-0.000017 -1.507587 -0.917663 -0.067777 -0.897285 -0.436218 +-0.000017 -1.493131 -0.951213 -0.067606 -0.989312 -0.129191 +-0.048005 -1.490109 -0.980232 -0.263580 -0.960743 -0.086598 +-0.000017 -1.493460 -0.986184 -0.087438 -0.975216 -0.203245 +-0.091205 -1.508123 -0.790433 -0.874673 -0.484092 -0.024557 +-0.119248 -1.452959 -0.879041 -0.811978 -0.576072 -0.093985 +-0.130164 -1.431816 -0.909236 -0.798578 -0.590799 -0.115021 +-0.138662 -1.415715 -0.925182 -0.859668 -0.497242 -0.117140 +-0.108982 -1.462815 -0.939119 -0.648173 -0.761275 0.018214 +-0.147928 -1.405185 -0.938309 -0.797560 -0.577029 0.175886 +-0.115110 -1.457540 -0.963420 -0.645634 -0.763330 -0.021998 +-0.154545 -1.402559 -0.867532 -0.824668 -0.563234 -0.051862 +-0.111758 -1.457935 -0.786106 -0.874177 -0.483559 0.044562 +-0.112016 -1.455975 -0.988007 -0.607255 -0.779260 -0.154902 +-0.052771 -1.482106 -1.004878 -0.250142 -0.919604 -0.302915 +-0.145103 -1.397383 -0.918884 -0.770096 0.111358 -0.628134 +-0.161762 -1.386568 -0.896266 -0.881296 -0.274275 -0.384825 +-0.000017 -1.486275 -1.007160 -0.089176 -0.921451 -0.378122 +-0.068456 -1.451326 -1.066913 -0.180804 -0.889212 -0.420252 +-0.000017 -1.458554 -1.064723 -0.079705 -0.873026 -0.481116 +-0.122840 -1.432474 -1.061670 -0.546898 -0.817520 -0.180456 +-0.162523 -1.393819 -0.950832 -0.786727 -0.614684 0.056786 +-0.163461 -1.392704 -1.039889 -0.752078 -0.656759 -0.055186 +-0.144263 -1.389823 -0.917095 -0.903571 0.365726 -0.223167 +-0.156965 -1.380106 -0.899919 -0.641695 0.182320 -0.744974 +-0.125457 -1.349364 -0.914963 -0.870710 0.257242 -0.419156 +-0.174107 -1.349980 -0.894637 -0.384262 -0.057090 -0.921457 +-0.169497 -1.373555 -0.931681 -0.421288 0.148677 0.894657 +-0.082855 -1.405828 -1.147955 0.048645 -0.675449 -0.735800 +-0.000017 -1.402693 -1.142934 0.022659 -0.769241 -0.638556 +-0.085424 -1.351693 -1.181174 0.027622 -0.499785 -0.865709 +-0.000017 -1.351366 -1.180527 0.029415 -0.524705 -0.850776 +-0.085409 -1.291375 -1.217723 0.065841 -0.517113 -0.853381 +-0.000017 -1.287914 -1.213232 0.037201 -0.488114 -0.871987 +-0.082624 -1.177560 -1.230108 -0.180493 -0.011863 -0.983505 +-0.085409 -1.291375 -1.217723 -0.200059 -0.246003 -0.948398 +-0.149071 -1.182005 -1.217860 -0.229970 0.023361 -0.972917 +-0.147357 -1.283632 -1.206186 -0.203759 -0.374892 -0.904399 +-0.085424 -1.351693 -1.181174 -0.202893 -0.514604 -0.833077 +-0.148332 -1.343492 -1.172147 -0.187265 -0.517288 -0.835072 +-0.140970 -1.081044 -1.195292 -0.372095 -0.009922 -0.928141 +-0.063693 -1.084658 -1.226234 -0.343579 -0.069006 -0.936585 +-0.144250 -1.389224 -1.142150 -0.235064 -0.670845 -0.703358 +-0.082855 -1.405828 -1.147955 -0.285195 -0.773233 -0.566369 +-0.063837 -1.006457 -1.256372 -0.387685 -0.473576 -0.790839 +-0.155712 -1.010450 -1.208942 -0.456264 -0.366003 -0.811089 +-0.163891 -0.925097 -1.230911 -0.650326 -0.247203 -0.718308 +-0.077967 -0.944955 -1.301869 -0.511268 -0.440302 -0.738064 +-0.122840 -1.432474 -1.061670 -0.304072 -0.861373 -0.406912 +-0.068456 -1.451326 -1.066913 -0.333398 -0.846142 -0.415799 +-0.261846 -0.969024 -0.862849 -0.977584 -0.210522 0.003317 +-0.261458 -0.950653 -0.936834 -0.992233 -0.118960 -0.036354 +-0.241371 -1.101547 -0.904321 -0.990728 -0.135562 -0.008942 +-0.247114 -1.089240 -0.947537 -0.984172 -0.113856 0.135801 +-0.244854 -1.124264 -0.861905 -0.990560 -0.127662 -0.049939 +-0.255188 -0.984125 -0.812184 -0.979388 -0.165099 0.116371 +-0.240435 -1.032634 -0.777716 -0.949671 -0.015489 0.312866 +-0.250630 -1.151253 -0.812148 -0.974700 -0.221714 -0.028319 +-0.220599 -1.216669 -0.913999 -0.960564 -0.266809 0.078289 +-0.224201 -1.213435 -0.939482 -0.952355 -0.278603 0.124096 +-0.216420 -1.224037 -0.880489 -0.949111 -0.314905 0.004820 +-0.203675 -1.233119 -0.795930 -0.915994 -0.400457 -0.024277 +-0.231512 -1.201274 -0.999141 -0.967195 -0.248457 0.052952 +-0.216845 -1.256261 -1.004349 -0.920937 -0.258032 0.292051 +-0.204236 -1.276883 -0.942053 -0.953780 -0.214325 0.210638 +-0.217272 -1.235284 -0.685585 -0.907936 -0.215499 0.359461 +-0.244292 -1.167176 -0.753451 -0.976471 -0.188002 0.105638 +-0.201506 -1.208949 -0.656278 -0.569535 0.077234 0.818331 +-0.232620 -1.119921 -0.714247 -0.871979 0.123251 0.473774 +-0.171399 -1.036528 -0.683604 -0.584696 0.043687 0.810075 +-0.134118 -1.124052 -0.661652 -0.232562 0.244191 0.941427 +-0.161583 -1.276360 -0.634034 -0.487381 -0.000512 0.873189 +-0.164444 -1.289065 -0.635710 -0.661596 -0.068800 0.746698 +-0.198140 -1.282808 -0.684246 -0.924553 -0.301088 0.233554 +-0.163789 -1.303910 -0.634987 -0.798069 -0.119928 0.590511 +-0.181060 -1.327258 -0.684930 -0.939052 -0.336954 0.068144 +-0.160709 -1.327495 -0.631884 -0.896761 -0.116955 0.426780 +-0.154531 -1.380270 -0.678829 -0.914094 -0.403836 -0.036733 +-0.158370 -1.364142 -0.622466 -0.951998 -0.212476 0.220349 +-0.198039 -0.974045 -0.698088 -0.716782 -0.193601 0.669883 +-0.106031 -0.926096 -0.629367 -0.495336 -0.287782 0.819648 +-0.093126 -0.998740 -0.644095 -0.340258 -0.244532 0.907980 +-0.200161 -1.310606 -1.001052 -0.957672 -0.275651 0.082955 +-0.215271 -1.295989 -1.027565 -0.606594 -0.412564 0.679584 +-0.229336 -1.271132 -1.029667 -0.734767 -0.018310 0.678072 +-0.245808 -1.173403 -0.979229 -0.908634 -0.270341 0.318276 +-0.239201 -1.174720 -0.997346 -0.288648 -0.845641 -0.448970 +-0.249225 -1.146517 -0.975926 -0.660128 0.067145 0.748146 +-0.239283 -1.257875 -1.047984 -0.835930 0.338784 0.431795 +-0.239547 -1.236328 -1.048406 -0.959853 -0.051510 0.275735 +-0.244916 -1.193270 -1.045580 -0.968097 -0.117801 0.221159 +-0.236921 -1.166535 -1.012875 -0.665131 -0.731753 -0.148787 +-0.253992 -1.187852 -1.077022 -0.966157 -0.148761 0.210741 +-0.241466 -1.230007 -1.081590 -0.989961 -0.051495 0.131628 +-0.245983 -1.253788 -1.075521 -0.898110 0.436689 0.051965 +-0.246879 -1.260431 -1.101758 -0.882723 0.302516 -0.359560 +-0.248839 -1.231756 -1.114913 -0.978359 -0.205942 -0.020048 +-0.228445 -1.270773 -1.165832 -0.792560 -0.336179 -0.508756 +-0.236955 -1.282762 -1.116675 -0.676454 -0.124614 -0.725866 +-0.250852 -1.070818 -0.986752 -0.998474 -0.040943 -0.037068 +-0.241454 -0.975757 -1.025889 -0.966859 -0.000582 -0.255311 +-0.249772 -1.082750 -1.018378 -0.993759 -0.082886 -0.074647 +-0.233541 -1.041313 -1.070262 -0.932411 0.212150 -0.292577 +-0.246537 -1.119261 -0.985145 -0.827349 0.256709 0.499594 +-0.252712 -1.118911 -1.071416 -0.993537 0.092377 0.065965 +-0.243274 -1.109294 -1.101869 -0.894963 0.301347 -0.328985 +-0.238407 -1.125403 -1.004741 0.348237 0.935240 -0.063696 +-0.262511 -1.180367 -1.120451 -0.975502 0.051451 -0.213888 +-0.248637 -1.153758 -1.051702 -0.950077 0.052440 0.307576 +-0.234143 -1.139745 -1.016009 -0.915805 0.316765 0.246903 +-0.234969 -1.155538 -1.017211 0.975664 0.027166 -0.217580 +-0.275470 -0.919913 -0.839500 -0.922553 -0.363928 0.128270 +-0.194389 -1.019275 -1.135778 -0.866415 0.041205 -0.497621 +-0.212075 -1.089059 -1.151285 -0.698728 0.303937 -0.647612 +-0.250557 -0.893329 -1.103714 -0.843327 -0.350433 -0.407425 +-0.255500 -0.909942 -0.759849 -0.814856 -0.426005 0.393101 +-0.155712 -1.010450 -1.208942 -0.837623 -0.244515 -0.488466 +-0.140970 -1.081044 -1.195292 -0.669532 0.094537 -0.736742 +-0.163891 -0.925097 -1.230911 -0.734426 -0.467055 -0.492421 +-0.218263 -0.890110 -0.686509 -0.615625 -0.471258 0.631602 +-0.327169 -0.847824 -0.782242 -0.675776 -0.665229 0.317488 +-0.271029 -0.828348 -0.649493 -0.598535 -0.682106 0.420105 +-0.130932 -0.873717 -0.601270 -0.509345 -0.582123 0.633798 +-0.242521 -1.305722 -1.114672 0.077351 -0.116276 -0.990200 +-0.258017 -1.289274 -1.110665 -0.224347 0.416686 -0.880932 +-0.230654 -1.322045 -1.104962 0.240337 -0.640326 -0.729534 +-0.222890 -1.307619 -1.114574 -0.481846 -0.581925 -0.655124 +-0.226949 -1.332009 -1.085243 0.284837 -0.930449 -0.230506 +-0.210056 -1.325508 -1.096257 -0.415292 -0.858716 -0.300231 +-0.232821 -1.331807 -1.063047 0.189155 -0.920451 0.342039 +-0.203355 -1.329595 -1.068720 -0.520253 -0.847267 0.107126 +-0.242675 -1.323309 -1.050723 -0.101892 -0.611520 0.784641 +-0.205347 -1.318320 -1.042482 -0.520962 -0.723995 0.452139 +-0.254444 -1.304698 -1.046883 -0.440110 -0.146878 0.885850 +-0.266311 -1.288375 -1.056594 -0.681797 0.347352 0.643816 +-0.270016 -1.278411 -1.076313 -0.711866 0.683517 0.161403 +-0.267872 -1.280775 -1.098341 -0.565719 0.720670 -0.400745 +-0.256785 -1.119221 -0.988089 -0.575288 0.193387 0.794761 +-0.267289 -1.108005 -0.996575 -0.651366 -0.072583 0.755284 +-0.269348 -1.094962 -1.000723 0.117353 0.805793 0.580453 +-0.250012 -1.105224 -1.022424 0.751447 0.624333 -0.213392 +-0.258528 -1.145483 -0.981235 -0.854151 0.184101 0.486348 +-0.264614 -1.166326 -0.984473 -0.636881 0.204205 0.743427 +-0.265898 -1.184636 -1.016200 0.427101 -0.853580 -0.298305 +-0.248887 -1.170372 -1.033533 0.614129 -0.658716 -0.434670 +-0.241348 -1.130242 -1.036225 0.885540 0.201576 -0.418552 +-0.241888 -1.154453 -1.038826 0.822104 -0.195850 -0.534591 +-0.288607 -1.098594 -1.015810 -0.685822 -0.196972 0.700607 +-0.285797 -1.111916 -1.028553 -0.764529 -0.362401 0.533068 +-0.262797 -1.123355 -0.998651 -0.887227 -0.151528 0.435737 +-0.258653 -1.146065 -0.997343 -0.890717 0.173522 0.420135 +-0.269625 -1.163410 -0.996001 -0.795294 0.498973 0.344287 +-0.275683 -1.171798 -0.990842 -0.586428 0.687228 0.428743 +-0.232968 -1.184636 -1.172981 -0.651188 0.061298 -0.756437 +-0.155502 -1.236804 -0.630819 -0.403984 0.156546 0.901271 +-0.156683 -1.356212 -0.761539 -0.922868 -0.384271 -0.025511 +-0.190161 -1.294682 -0.840066 -0.941135 -0.308571 0.138017 +-0.131543 -1.409096 -0.777987 -0.911732 -0.367224 0.184094 +-0.178546 -1.354269 -0.860294 -0.937708 -0.340063 0.071141 +-0.190512 -1.297658 -0.930004 -0.885442 -0.293470 0.360371 +-0.208784 -1.327152 -0.949713 -0.948052 -0.216224 0.233333 +-0.198518 -1.333706 -0.937192 -0.549280 -0.175477 0.817006 +-0.135328 -1.430873 -0.717779 -0.948600 -0.309649 -0.065387 +-0.191302 -1.311910 -0.896540 -0.859385 -0.473499 -0.193020 +-0.179296 -1.351104 -0.883960 -0.870071 -0.332443 -0.363949 +-0.161762 -1.386568 -0.896266 -0.860235 -0.348552 -0.372167 +-0.154545 -1.402559 -0.867532 -0.896548 -0.442446 -0.021047 +-0.149071 -1.182005 -1.217860 -0.493224 0.138026 -0.858883 +-0.147357 -1.283632 -1.206186 -0.465484 -0.216427 -0.858187 +-0.207014 -1.323399 -1.147182 -0.743962 -0.554045 -0.373571 +-0.148332 -1.343492 -1.172147 -0.500834 -0.497080 -0.708574 +-0.156965 -1.380106 -0.899919 -0.487846 -0.126145 -0.863767 +-0.174107 -1.349980 -0.894637 -0.684042 -0.211820 -0.698011 +-0.175729 -1.319335 -0.902466 -0.616269 -0.555600 -0.558141 +-0.175126 -1.314950 -0.923527 -0.609416 -0.658318 0.441848 +-0.182817 -1.335078 -0.932330 -0.315557 -0.182188 0.931253 +-0.125457 -1.349364 -0.914963 -0.692898 -0.634970 0.341623 +-0.185049 -1.368596 -1.120970 -0.745293 -0.627753 -0.224642 +-0.144250 -1.389224 -1.142150 -0.581523 -0.655628 -0.481646 +-0.184522 -1.353751 -1.012516 -0.913976 -0.404285 -0.034674 +-0.187929 -1.370655 -0.952735 -0.829033 -0.557353 -0.045423 +-0.183277 -1.375734 -0.941167 -0.728546 -0.485107 0.483624 +-0.169497 -1.373555 -0.931681 -0.424879 -0.141100 0.894186 +-0.163461 -1.392704 -1.039889 -0.815191 -0.579138 -0.007937 +-0.198746 -0.792401 -1.318974 -0.666829 -0.457870 -0.587957 +-0.315181 -0.764996 -1.175598 -0.727208 -0.541407 -0.421956 +-0.113353 -0.829547 -1.389298 -0.676960 -0.441889 -0.588608 +-0.077967 -0.944955 -1.301869 -0.630963 -0.559770 -0.537162 +-0.117833 -0.677125 -1.452666 -0.653326 -0.253417 -0.713404 +-0.215624 -0.638821 -1.379687 -0.649244 -0.172433 -0.740776 +-0.114572 -0.524305 -1.478219 -0.647567 -0.016038 -0.761840 +-0.219620 -0.509012 -1.385795 -0.677497 0.092011 -0.729748 +-0.254991 -1.321908 -1.115359 0.500202 -0.179081 -0.847189 +-0.268611 -1.308589 -1.120257 0.180868 0.343192 -0.921687 +-0.249913 -1.335757 -1.102068 0.606897 -0.629945 -0.484609 +-0.254575 -1.344734 -1.085416 0.503019 -0.864083 0.018240 +-0.268398 -1.346147 -1.071792 0.171787 -0.838312 0.517419 +-0.286584 -1.340647 -1.068407 -0.292466 -0.522459 0.800937 +-0.303199 -1.329213 -1.075418 -0.692350 -0.058220 0.719209 +-0.308545 -1.316096 -1.089215 -0.854070 0.413327 0.315795 +-0.301231 -1.305795 -1.104480 -0.688543 0.693637 -0.211603 +-0.285179 -1.302507 -1.116210 -0.282780 0.672992 -0.683460 +-0.269323 -1.342471 -1.125993 0.805580 -0.152774 -0.572452 +-0.279711 -1.332219 -1.133962 0.465688 0.298278 -0.833166 +-0.267450 -1.352851 -1.113072 0.795677 -0.576539 -0.185743 +-0.274699 -1.359736 -1.099968 0.524113 -0.820676 0.227589 +-0.288424 -1.360377 -1.091233 0.052878 -0.820119 0.569744 +-0.303655 -1.354242 -1.090079 -0.500848 -0.564802 0.655859 +-0.314641 -1.343556 -1.097327 -0.902755 -0.145720 0.404721 +-0.316908 -1.332587 -1.110568 -0.959478 0.277776 -0.047358 +-0.309341 -1.325785 -1.124591 -0.662531 0.549546 -0.508972 +-0.294992 -1.325751 -1.133573 -0.113776 0.563562 -0.818201 +-0.279442 -1.091644 -1.009008 -0.084789 0.934854 0.344760 +-0.261838 -1.101313 -1.030667 0.495924 0.794786 -0.349820 +-0.251003 -1.153046 -1.047842 0.682825 -0.212684 -0.698939 +-0.259299 -1.170908 -1.043556 0.534564 -0.671114 -0.513662 +-0.279853 -1.188245 -1.025279 0.350512 -0.858430 -0.374485 +-0.248231 -1.128193 -1.043317 0.708641 0.312637 -0.632524 +-0.285725 -1.140543 -1.030960 -0.799910 0.113121 0.589363 +-0.292839 -1.167308 -1.027903 -0.754320 0.348148 0.556592 +-0.307133 -1.138480 -1.061830 -0.506829 0.093034 0.857012 +-0.305048 -1.109485 -1.057337 -0.569048 -0.419977 0.706968 +-0.336214 -1.117070 -1.070677 -0.316364 -0.249330 0.915286 +-0.348472 -1.131245 -1.076251 -0.314014 0.089737 0.945168 +-0.312037 -1.163003 -1.057184 -0.644673 0.268029 0.715931 +-0.338613 -1.146774 -1.069065 -0.277388 0.241700 0.929859 +-0.269799 -1.171450 -1.053666 0.360509 -0.692729 -0.624628 +-0.304381 -1.184538 -1.045494 0.134016 -0.802193 -0.581830 +-0.263265 -1.151909 -1.060025 0.524796 -0.206634 -0.825767 +-0.260030 -1.124678 -1.055475 0.600320 0.334951 -0.726240 +-0.287615 -1.097294 -1.050728 0.349335 0.781344 -0.517172 +-0.310452 -1.086322 -1.035124 -0.468085 0.798203 0.379168 +-0.311671 -1.094821 -1.038957 -0.596044 -0.455791 0.661049 +-0.348236 -1.105636 -1.066348 -0.375412 -0.467302 0.800434 +-0.147928 -1.405185 -0.938309 -0.727859 -0.640782 0.244171 +-0.162523 -1.393819 -0.950832 -0.662721 -0.748865 -0.001284 +-0.138662 -1.415715 -0.925182 -0.868009 -0.404107 0.288544 +-0.145103 -1.397383 -0.918884 -0.725954 -0.440852 0.527865 +-0.122840 -1.432474 -1.061670 -0.633108 -0.758758 -0.153170 +-0.144263 -1.389823 -0.917095 -0.552942 -0.123192 0.824062 +-0.108530 -0.355331 -1.455653 -0.695608 0.144731 -0.703692 +-0.236095 -0.336440 -1.315803 -0.708825 0.112503 -0.696355 +-0.121475 -0.199653 -1.417969 -0.686186 0.123558 -0.716856 +-0.268996 -0.166749 -1.278754 -0.632808 0.104040 -0.767287 +-0.126253 -0.069033 -1.371295 -0.582573 0.146614 -0.799445 +-0.276410 -0.024242 -1.265942 -0.523653 0.085940 -0.847586 +-0.277886 -1.362630 -1.135619 0.948442 -0.153751 -0.277160 +-0.283686 -1.359002 -1.147220 0.709430 0.216599 -0.670667 +-0.280020 -1.368770 -1.123823 0.865928 -0.482114 0.133172 +-0.289273 -1.375075 -1.116339 0.527157 -0.686181 0.501259 +-0.302110 -1.379138 -1.116024 -0.038247 -0.729403 0.683014 +-0.313628 -1.379406 -1.122999 -0.628958 -0.574123 0.524208 +-0.319427 -1.375778 -1.134601 -0.960593 -0.264440 0.085630 +-0.317293 -1.369638 -1.146396 -0.903671 0.087393 -0.419215 +-0.308040 -1.363333 -1.153881 -0.490767 0.361613 -0.792707 +-0.295204 -1.359270 -1.154196 0.141296 0.429705 -0.891846 +-0.351197 -1.098160 -1.069294 -0.630088 0.406194 0.661812 +-0.310089 -1.161948 -1.072658 0.128746 -0.566795 -0.813737 +-0.343303 -1.163795 -1.072610 0.032180 -0.599473 -0.799748 +-0.311104 -1.142927 -1.084190 0.251806 -0.114717 -0.960955 +-0.302553 -1.120087 -1.073390 0.342573 0.330694 -0.879366 +-0.332530 -1.106033 -1.077487 0.224317 0.663148 -0.714084 +-0.121794 0.126862 -1.337687 -0.465797 0.117416 -0.877067 +-0.263580 0.140392 -1.261915 -0.609194 0.112356 -0.785022 +-0.229655 0.334608 -1.256244 -0.687405 0.026545 -0.725789 +-0.108528 0.360089 -1.304915 -0.319163 -0.087919 -0.943613 +-0.208275 0.514568 -1.309593 -0.528967 -0.076611 -0.845177 +-0.276877 0.518283 -1.223775 -0.824384 -0.099048 -0.557298 +-0.284178 0.314571 -1.157604 -0.880721 -0.049919 -0.470998 +-0.201975 0.676339 -1.300758 -0.381373 0.175413 -0.907626 +-0.093267 0.537123 -1.340819 -0.242363 -0.002218 -0.970183 +-0.078983 0.672760 -1.329372 -0.218391 0.173171 -0.960373 +-0.314782 0.525202 -1.163291 -0.882557 -0.089556 -0.461599 +-0.284059 0.669572 -1.231316 -0.770204 0.143261 -0.621499 +-0.328173 0.316278 -1.060432 -0.902669 -0.142122 -0.406190 +-0.316567 0.674269 -1.177092 -0.899695 0.158234 -0.406830 +-0.279601 0.779780 -1.158522 -0.750713 0.560713 -0.349330 +-0.234621 0.787648 -1.231194 -0.615072 0.617987 -0.489672 +-0.115223 0.870956 -1.200244 -0.349666 0.840396 -0.414088 +-0.203523 0.850704 -1.130556 -0.439897 0.872048 -0.214529 +-0.112552 0.899531 -1.004645 -0.332031 0.936783 -0.110418 +-0.055367 0.903845 -1.060557 -0.274261 0.951171 -0.141614 +-0.251929 0.841469 -1.034970 -0.519001 0.848369 -0.104442 +-0.172004 0.879637 -0.926179 -0.417151 0.904650 0.087135 +-0.341636 0.537693 -1.091500 -0.937843 -0.043632 -0.344306 +-0.343043 0.675234 -1.105304 -0.926620 0.152259 -0.343792 +-0.315812 0.762780 -1.086902 -0.829182 0.474899 -0.294835 +-0.081137 0.746770 -1.310106 -0.220055 0.277155 -0.935287 +-0.187521 0.788019 -1.271414 -0.371622 0.474332 -0.798064 +-0.083203 0.776489 -1.299486 -0.191787 0.422061 -0.886049 +-0.280601 -1.383995 -1.147629 0.986606 0.163103 -0.002431 +-0.284070 -1.382217 -1.157102 0.781413 0.363876 -0.506940 +-0.282084 -1.390649 -1.140100 0.864782 -0.136750 0.483168 +-0.287731 -1.399218 -1.137627 0.452203 -0.447922 0.771284 +-0.294990 -1.406136 -1.140857 -0.117278 -0.670052 0.732992 +-0.301114 -1.408959 -1.148293 -0.614005 -0.701550 0.361699 +-0.304027 -1.406916 -1.157166 -0.838267 -0.513041 -0.184654 +-0.302810 -1.400832 -1.164291 -0.708467 -0.165392 -0.686090 +-0.297857 -1.392846 -1.167120 -0.266187 0.193741 -0.944250 +-0.290769 -1.385752 -1.164499 0.312846 0.392806 -0.864772 +-0.258485 -1.431602 -1.170118 0.908561 0.304684 0.285806 +-0.258912 -1.430779 -1.174341 0.829774 0.486206 -0.274006 +-0.259865 -1.434206 -1.166871 0.705983 -0.041278 0.707025 +-0.262486 -1.437617 -1.165891 0.296132 -0.441259 0.847111 +-0.265684 -1.440051 -1.167361 -0.187472 -0.755468 0.627791 +-0.268306 -1.440624 -1.170797 -0.535974 -0.834506 0.127795 +-0.269087 -1.439328 -1.175026 -0.614819 -0.652616 -0.442820 +-0.267857 -1.436418 -1.178335 -0.402921 -0.283501 -0.870219 +-0.264932 -1.433226 -1.179409 0.023461 0.129749 -0.991269 +-0.261355 -1.431329 -1.177856 0.495003 0.422800 -0.759087 +-0.355943 -1.129597 -1.088021 0.095520 -0.098053 -0.990586 +-0.316565 0.155535 -1.170591 -0.858188 0.188038 -0.477656 +-0.085151 0.801816 -1.283248 -0.172412 0.629211 -0.757870 +-0.257483 0.826472 -0.861991 -0.481527 0.849066 0.217299 +-0.191441 0.840666 -0.814931 -0.019656 0.941005 0.337820 +-0.174726 0.772485 -0.655484 0.163875 0.913129 0.373283 +-0.228561 0.777364 -0.667726 -0.287121 0.901021 0.325150 +-0.098672 0.741881 -0.649914 0.335570 0.879375 0.337775 +-0.088868 0.769612 -0.732977 0.341962 0.878487 0.333649 +-0.275723 0.755235 -0.676234 -0.568824 0.785055 0.245211 +-0.310224 0.786234 -0.897805 -0.677690 0.706383 0.204351 +-0.249671 -1.449145 -1.176748 0.686375 -0.678472 -0.261849 +0.173635 -1.358508 -0.942559 0.737418 -0.441260 -0.511374 +0.179672 -1.361783 -0.916928 0.878918 -0.476973 0.000000 +0.167523 -1.369772 -0.939125 0.617776 -0.661748 -0.424785 +0.163048 -1.378017 -0.929743 0.534807 -0.814638 -0.224379 +0.161410 -1.381035 -0.916928 0.510749 -0.858971 0.036119 +0.163048 -1.378017 -0.904112 0.552022 -0.782900 0.286948 +0.167523 -1.369772 -0.894731 0.647615 -0.606761 0.460908 +0.173635 -1.358508 -0.891297 0.771878 -0.377782 0.511357 +0.179748 -1.347244 -0.894731 0.891512 -0.157325 0.424799 +0.184223 -1.338998 -0.904112 0.974483 -0.004425 0.224418 +0.185861 -1.335980 -0.916928 0.998550 0.039918 -0.036122 +0.184223 -1.338998 -0.929743 0.957259 -0.036174 -0.286960 +0.179748 -1.347244 -0.939125 0.861673 -0.212316 -0.460914 +0.149528 -1.370119 -0.954521 0.220660 -0.628718 -0.745669 +0.159880 -1.351043 -0.960336 0.427069 -0.248369 -0.869439 +0.141950 -1.384084 -0.938632 0.071421 -0.903742 -0.422078 +0.139176 -1.389196 -0.916928 0.019353 -0.999706 0.014589 +0.141950 -1.384084 -0.895224 0.078388 -0.890914 0.447356 +0.149528 -1.370119 -0.879335 0.232699 -0.606528 0.760246 +0.159880 -1.351043 -0.873519 0.440998 -0.222714 0.869436 +0.170233 -1.331967 -0.879335 0.647415 0.157644 0.745656 +0.177811 -1.318002 -0.895224 0.796651 0.432662 0.422078 +0.180585 -1.312891 -0.916928 0.848725 0.528633 -0.014584 +0.177811 -1.318002 -0.938632 0.789692 0.419839 -0.447351 +0.170233 -1.331967 -0.954521 0.635357 0.135426 -0.760251 +0.123777 -1.359001 -0.958868 -0.042796 -0.448237 -0.892890 +0.135327 -1.337718 -0.965356 0.196612 -0.007070 -0.980456 +0.115323 -1.374581 -0.941142 -0.229249 -0.791848 -0.566058 +0.112228 -1.380283 -0.916928 -0.312801 -0.945773 -0.087579 +0.115323 -1.374581 -0.892714 -0.271021 -0.868808 0.414392 +0.123777 -1.359001 -0.874988 -0.115146 -0.581569 0.805307 +0.135327 -1.337718 -0.868499 0.113081 -0.161004 0.980454 +0.146876 -1.316436 -0.874988 0.352498 0.280196 0.892880 +0.155331 -1.300856 -0.892714 0.538963 0.623778 0.566056 +0.158425 -1.295154 -0.916928 0.622493 0.777711 0.087567 +0.155331 -1.300856 -0.941142 0.580732 0.700743 -0.414379 +0.146876 -1.316436 -0.958868 0.424839 0.413499 -0.805314 +0.007202 1.584741 -1.309190 0.724131 0.195871 -0.661263 +0.000000 1.622242 -1.297518 0.893076 0.449905 0.000013 +0.015217 1.584564 -1.297518 0.967707 0.219246 0.124396 +0.000000 1.584920 -1.313976 0.525223 0.180011 -0.831707 +0.007202 1.584740 -1.285847 0.663513 0.198677 0.721303 +0.000000 1.584920 -1.281061 0.543125 0.225448 0.808819 +0.012210 1.519316 -1.313955 0.707247 0.074854 -0.702993 +0.022343 1.519310 -1.297518 0.996623 0.079873 -0.019066 +0.000000 1.519330 -1.320764 0.478038 0.062782 -0.876092 +0.012210 1.519316 -1.281081 0.704261 0.074666 0.706004 +0.000000 1.519330 -1.272790 0.557861 0.079860 0.826083 +0.015294 1.442862 -1.316786 0.712363 0.043590 -0.700456 +0.025428 1.442862 -1.297518 0.998992 0.041707 -0.016593 +0.000000 1.442863 -1.324767 0.449794 0.033100 -0.892519 +0.015294 1.442862 -1.278250 0.705576 0.041854 0.707398 +0.000000 1.442863 -1.269792 0.510001 0.038442 0.859314 +0.018443 1.349348 -1.318398 0.710581 0.023158 -0.703234 +0.028576 1.349348 -1.297518 0.999671 0.023577 -0.010091 +0.000000 1.349349 -1.327047 0.406618 0.015636 -0.913464 +0.018443 1.349348 -1.276638 0.722135 0.026809 0.691233 +0.000000 1.349350 -1.266484 0.482665 0.027711 0.875367 +0.019217 1.253847 -1.320011 0.700674 0.017142 -0.713276 +0.029351 1.253847 -1.297518 0.999854 0.015151 -0.007878 +0.000000 1.253848 -1.327673 0.381797 0.017721 -0.924076 +0.019217 1.253847 -1.275025 0.739203 0.020009 0.673186 +0.000000 1.253848 -1.264209 0.487623 0.023695 0.872733 +0.020764 1.166052 -1.321185 0.709045 0.026112 -0.704680 +0.030897 1.166052 -1.297518 0.999700 0.023652 -0.006371 +0.000000 1.166052 -1.330374 0.410524 0.027014 -0.911449 +0.020764 1.166052 -1.273851 0.754056 0.023757 0.656380 +0.000000 1.166052 -1.261031 0.513665 0.024852 0.857631 +0.023085 1.075631 -1.322514 0.723051 0.019230 -0.690527 +0.033219 1.075631 -1.297518 0.999820 0.018543 -0.003890 +0.000000 1.075632 -1.333278 0.430236 0.017001 -0.902556 +0.023085 1.075631 -1.272521 0.758384 0.018586 0.651543 +0.000000 1.075632 -1.258652 0.518354 0.019262 0.854949 +0.023843 0.991295 -1.322813 0.782440 0.013451 -0.622581 +0.033976 0.991295 -1.297518 0.999904 0.007463 0.011634 +0.000000 0.991296 -1.334681 0.445557 0.014891 -0.895130 +0.023843 0.991295 -1.272223 0.756034 -0.001749 0.654530 +0.000000 0.991296 -1.257709 0.518310 -0.001552 0.855191 +0.025062 0.911391 -1.323454 0.931299 0.017127 -0.363852 +0.035195 0.911391 -1.297518 0.992876 0.029245 0.115510 +0.022481 0.911391 -1.271582 0.733825 0.019430 0.679061 +0.000000 0.911391 -1.259761 0.483798 0.005617 0.875162 +0.029112 0.812922 -1.273484 0.751529 0.003117 0.659693 +0.000000 0.812923 -1.255352 0.510971 -0.035810 0.858852 +0.039245 0.812922 -1.297518 0.920790 0.037872 0.388215 +0.049248 0.745544 -1.293766 0.565651 -0.014801 0.824512 +0.000000 0.777615 -1.259705 -0.398388 0.409297 -0.820831 +0.000000 0.798667 -1.251145 -0.452011 0.335990 -0.826315 +0.031367 0.777065 -1.277087 -0.464232 0.262140 -0.846033 +0.295178 -0.752238 0.000018 -0.001573 0.001095 0.999998 +0.332202 -0.734652 0.000057 -0.000857 0.001861 0.999998 +0.272467 -0.735551 -0.000036 -0.000377 0.000938 0.999999 +0.248955 -0.755401 -0.000014 0.000260 0.000800 1.000000 +0.208629 -0.741017 -0.000015 0.000196 0.000275 1.000000 +0.189201 -0.700580 -0.000015 0.000000 0.000000 1.000000 +0.200394 -0.636211 -0.000015 0.000313 -0.000121 1.000000 +0.222624 -0.608680 -0.000015 0.000000 0.000000 1.000000 +0.278199 -0.590617 -0.000015 -0.000255 -0.001293 0.999999 +0.335244 -0.615850 -0.000015 -0.001307 -0.002955 0.999995 +0.349110 -0.655147 -0.000113 -0.000213 0.000181 1.000000 +0.348796 -0.704774 -0.000013 0.000597 0.002011 0.999998 +0.326741 -0.712820 -0.044831 0.825396 -0.375178 -0.421856 +0.321164 -0.686016 -0.079581 0.653239 -0.529408 -0.541301 +0.346165 -0.674416 -0.040981 0.909116 -0.208547 -0.360578 +0.336374 -0.647740 -0.079227 0.960867 -0.065165 -0.269235 +0.342440 -0.630348 -0.037392 0.982827 0.068937 -0.171167 +0.335166 -0.602167 -0.075203 0.961086 0.272371 -0.046122 +0.330532 -0.589047 -0.108363 0.870018 0.488175 0.068950 +0.314000 -0.565151 -0.068947 0.870018 0.488175 0.068950 +0.308093 -0.551433 -0.092603 0.749115 0.662410 -0.006349 +0.291303 -0.704382 -0.077706 0.211492 -0.751068 -0.625434 +0.291509 -0.674280 -0.113187 0.300594 -0.753200 -0.585093 +0.314822 -0.657923 -0.112631 0.458263 -0.631898 -0.625060 +0.273587 -0.679387 -0.111205 0.017027 -0.825329 -0.564395 +0.273842 -0.653064 -0.155061 0.112784 -0.843691 -0.524848 +0.294872 -0.646012 -0.153510 0.304537 -0.791690 -0.529607 +0.303818 -0.553183 -0.141994 0.514962 0.846675 -0.133999 +0.279132 -0.529526 -0.087386 0.181074 0.968761 -0.169452 +0.279028 -0.540377 -0.138857 -0.158540 0.980583 -0.115421 +0.257647 -0.677363 -0.108988 -0.177272 -0.846821 -0.501466 +0.256660 -0.650004 -0.154840 -0.167282 -0.846628 -0.505211 +0.274078 -0.706588 -0.077441 0.089624 -0.774958 -0.625626 +0.247016 -0.552736 -0.092951 -0.437248 0.897105 -0.063387 +0.249190 -0.549680 -0.142482 -0.302375 0.952104 0.045472 +0.210457 -0.628753 -0.037344 -0.926518 0.346041 -0.147713 +0.197789 -0.683783 -0.037943 -0.940195 -0.193249 -0.280513 +0.236572 -0.595297 -0.032913 -0.777848 0.623313 -0.080210 +0.218227 -0.725211 -0.045824 -0.501421 -0.765373 -0.403461 +0.253455 -0.733264 -0.046138 -0.203873 -0.874700 -0.439699 +0.200532 -0.651394 -0.376826 -0.852736 -0.357396 0.380933 +0.215880 -0.635772 -0.327812 -0.844791 -0.419827 0.331774 +0.179266 -0.601335 -0.377465 -0.924076 -0.232112 0.303658 +0.198140 -0.597121 -0.314314 -0.914560 -0.279842 0.292009 +0.178825 -0.521027 -0.378250 -0.971917 -0.003037 0.235306 +0.196859 -0.533913 -0.303928 -0.964214 -0.035035 0.262801 +0.391453 -0.418047 -0.607499 0.533801 0.836727 0.122247 +0.325815 -0.384064 -0.553484 0.213570 0.973673 0.079680 +0.357320 -0.417054 -0.465251 0.686982 0.693526 0.216974 +0.306654 -0.389007 -0.449769 -0.172370 0.984942 0.013354 +0.405876 -0.495740 -0.495396 0.865675 0.450800 0.217683 +0.383499 -0.505994 -0.385173 0.812760 0.503354 0.293352 +0.336212 -0.447832 -0.375617 0.750671 0.550226 0.365710 +0.219295 -0.435004 -0.413224 -0.482210 0.874511 -0.052005 +0.210983 -0.443751 -0.483240 -0.482843 0.874288 -0.049834 +0.347038 -0.652398 -0.457320 0.660694 -0.663023 0.351971 +0.332847 -0.626788 -0.381643 0.578235 -0.732991 0.358284 +0.286957 -0.682616 -0.438026 0.429080 -0.797441 0.424239 +0.276524 -0.661972 -0.379310 0.504116 -0.782807 0.364802 +0.387067 -0.602420 -0.479440 0.827830 -0.500935 0.252509 +0.367801 -0.587543 -0.383197 0.760023 -0.579513 0.294159 +0.294651 -0.747369 -0.556844 0.462801 -0.770503 0.438339 +0.233252 -0.732483 -0.490942 0.302703 -0.827602 0.472700 +0.236832 -0.696120 -0.429808 0.300677 -0.827318 0.474488 +0.352869 -0.722752 -0.593997 0.758671 -0.573589 0.308892 +0.398648 -0.657788 -0.643241 0.867407 -0.449569 0.213290 +0.286957 -0.682616 -0.438026 0.297427 -0.882930 0.363279 +0.276524 -0.661972 -0.379310 0.299928 -0.882899 0.361292 +0.236832 -0.696120 -0.429808 -0.068169 -0.858321 0.508564 +0.245371 -0.672412 -0.378741 -0.200268 -0.905636 0.373787 +0.200532 -0.651394 -0.376826 -0.715413 -0.564188 0.412160 +0.185062 -0.653566 -0.409151 -0.657777 -0.579300 0.481395 +0.166063 -0.601729 -0.399052 -0.833938 -0.367101 0.412048 +0.155519 -0.617108 -0.446525 -0.865152 -0.263850 0.426492 +0.166408 -0.689952 -0.448651 -0.272905 -0.667343 0.692947 +0.233252 -0.732483 -0.490942 -0.136242 -0.797944 0.587131 +0.179266 -0.601335 -0.377465 -0.801345 -0.334092 0.496215 +0.156180 -0.709903 -0.464735 -0.346460 -0.461496 0.816693 +0.229238 -0.751868 -0.513438 0.035083 -0.696549 0.716651 +0.152043 -0.627012 -0.461232 -0.600298 -0.063652 0.797239 +0.130595 -0.640555 -0.478463 -0.669680 -0.101433 0.735691 +0.139670 -0.729077 -0.486843 -0.242721 -0.560623 0.791700 +0.188531 -0.803520 -0.548481 0.082147 -0.603057 0.793457 +0.405876 -0.495740 -0.495396 0.967191 0.187757 0.171140 +0.383499 -0.505994 -0.385173 0.969946 -0.096563 0.223341 +0.402735 -0.560380 -0.492227 0.970770 -0.117150 0.209479 +0.376532 -0.549829 -0.385658 0.947026 -0.210055 0.242939 +0.436833 -0.575138 -0.660827 0.973473 -0.134263 0.185265 +0.427755 -0.497838 -0.650739 0.966122 0.211346 0.148122 +0.357320 -0.417054 -0.465251 0.866101 0.456060 0.204641 +0.391453 -0.418047 -0.607499 0.908437 0.391109 0.147569 +0.387067 -0.602420 -0.479440 0.932754 -0.284597 0.221302 +0.398648 -0.657788 -0.643241 0.899648 -0.363186 0.242340 +0.367801 -0.587543 -0.383197 0.952881 -0.206072 0.222603 +0.449056 -0.493539 -0.787950 0.970811 0.186562 0.150734 +0.405733 -0.421712 -0.714452 0.917133 0.375999 0.132253 +0.459976 -0.598947 -0.814650 0.962051 -0.186533 0.199158 +0.430026 -0.707082 -0.805969 0.904548 -0.327091 0.273503 +0.368785 -0.778217 -0.725018 0.867592 -0.408093 0.284155 +0.352869 -0.722752 -0.593997 0.871680 -0.404266 0.277026 +0.148618 -0.528786 -0.462029 -0.755813 0.620372 0.209490 +0.210664 -0.440016 -0.501884 -0.727881 0.627548 0.276355 +0.131915 -0.528796 -0.497689 -0.694152 0.632003 0.344566 +0.186971 -0.445619 -0.537279 0.170012 0.394526 0.903020 +0.210983 -0.443751 -0.483240 -0.792969 0.599631 0.107901 +0.153661 -0.526172 -0.447830 -0.808346 0.578673 0.108236 +0.165710 -0.520333 -0.397867 -0.816383 0.501904 0.285676 +0.219295 -0.435004 -0.413224 -0.822177 0.557476 0.115086 +0.122304 -0.438939 -0.494920 0.552618 0.141441 0.821345 +0.144773 -0.369613 -0.521976 0.535712 0.129421 0.834424 +0.229770 -0.368127 -0.574212 0.518484 0.117324 0.847000 +0.224163 -0.441915 -0.371037 -0.802960 0.475628 0.359210 +0.178825 -0.521027 -0.378250 -0.759840 0.387887 0.521716 +0.227821 -0.552386 -0.242999 -0.892245 0.356757 0.276808 +0.229231 -0.598010 -0.149052 -0.983470 0.174776 -0.047327 +0.251681 -0.526464 -0.238647 -0.690594 0.664226 0.286152 +0.249190 -0.549680 -0.142482 -0.912229 0.408758 -0.027482 +0.229813 -0.597061 -0.252879 -0.961022 -0.250403 0.117198 +0.232306 -0.634170 -0.151996 -0.866818 -0.420584 -0.267836 +0.219397 -0.607375 -0.110780 -0.961196 0.230353 -0.151785 +0.222420 -0.652138 -0.114268 -0.854221 -0.287278 -0.433333 +0.247016 -0.552736 -0.092951 -0.835980 0.541525 0.088818 +0.233185 -0.667982 -0.111233 -0.455689 -0.655526 -0.602190 +0.241496 -0.644234 -0.153820 -0.521797 -0.776403 -0.353449 +0.218390 -0.549998 -0.270212 -0.853557 0.224824 0.469994 +0.246942 -0.515169 -0.267732 -0.561310 0.656767 0.503575 +0.281603 -0.495410 -0.271164 -0.431338 0.772183 0.466563 +0.281356 -0.506818 -0.237638 -0.538157 0.799117 0.267953 +0.220666 -0.594124 -0.278731 -0.844689 -0.369256 0.387492 +0.239402 -0.611724 -0.258518 -0.745427 -0.666583 0.002216 +0.232976 -0.612466 -0.284542 -0.609951 -0.719599 0.331870 +0.258925 -0.626401 -0.262389 -0.339126 -0.933082 -0.119796 +0.276371 -0.627443 -0.261753 0.115841 -0.983273 -0.140550 +0.273842 -0.653064 -0.155061 -0.111909 -0.967933 -0.224905 +0.256660 -0.650004 -0.154840 -0.295440 -0.905891 -0.303442 +0.196859 -0.533913 -0.303928 -0.806942 0.276959 0.521668 +0.237075 -0.487034 -0.304912 -0.528071 0.628260 0.571341 +0.284307 -0.461223 -0.300945 -0.388347 0.686507 0.614731 +0.215880 -0.635772 -0.327812 -0.376298 -0.788135 0.487076 +0.198140 -0.597121 -0.314314 -0.744275 -0.409019 0.527975 +0.249547 -0.643542 -0.327400 -0.041428 -0.908593 0.415623 +0.256416 -0.624547 -0.286227 -0.182454 -0.960841 0.208554 +0.242148 -0.565654 -0.068614 -0.661519 0.654608 0.365898 +0.279132 -0.529526 -0.087386 -0.125342 0.760870 0.636684 +0.214653 -0.617621 -0.076847 -0.949442 0.311317 -0.040514 +0.209417 -0.666078 -0.081436 -0.915706 -0.174796 -0.361841 +0.278717 -0.556303 -0.063563 0.047024 0.776610 0.628224 +0.308093 -0.551433 -0.092603 0.418683 0.726184 0.545308 +0.227787 -0.702231 -0.078069 -0.470808 -0.629122 -0.618503 +0.255760 -0.710602 -0.077899 0.044986 -0.774366 -0.631137 +0.257647 -0.677363 -0.108988 -0.166346 -0.765348 -0.621748 +0.274078 -0.706588 -0.077441 -0.010844 -0.829579 -0.558285 +0.273587 -0.679387 -0.111205 -0.182935 -0.766886 -0.615159 +0.276764 -0.624107 -0.286603 0.295377 -0.947934 0.119051 +0.307727 -0.608932 -0.283631 0.443418 -0.884600 0.144444 +0.302528 -0.611687 -0.254364 0.488921 -0.870571 -0.055339 +0.178825 -0.521027 -0.378250 -0.842886 0.457172 0.283789 +0.224163 -0.441915 -0.371037 -0.582539 0.701935 0.409800 +0.245371 -0.672412 -0.378741 0.062836 -0.876098 0.478022 +0.276524 -0.635578 -0.326774 0.355798 -0.872141 0.335823 +0.276524 -0.661972 -0.379310 0.413191 -0.822524 0.390803 +0.319099 -0.611475 -0.323902 0.473491 -0.824421 0.310058 +0.287657 -0.420008 -0.357903 -0.086054 0.901619 0.423883 +0.200532 -0.651394 -0.376826 -0.286514 -0.860688 0.420863 +0.278297 -0.578394 -0.034141 -0.004600 0.887169 0.461423 +0.236572 -0.595297 -0.032913 -0.441510 0.778132 0.446743 +0.210457 -0.628753 -0.037344 -0.898310 0.424168 0.114550 +0.197789 -0.683783 -0.037943 -0.976256 -0.001163 -0.216619 +0.273287 -0.721296 -0.043570 -0.002460 -0.912943 -0.408081 +0.292682 -0.727566 -0.046477 0.093442 -0.857950 -0.505163 +0.291303 -0.704382 -0.077706 0.280725 -0.753801 -0.594120 +0.326741 -0.712820 -0.044831 0.586150 -0.653319 -0.479169 +0.321164 -0.686016 -0.079581 0.391162 -0.697303 -0.600634 +0.318030 -0.594901 -0.032404 0.625223 0.719749 0.301757 +0.314000 -0.565151 -0.068947 0.450200 0.746021 0.490685 +0.218227 -0.725211 -0.045824 -0.636342 -0.554428 -0.536356 +0.253455 -0.733264 -0.046138 0.267319 -0.834484 -0.481848 +0.306654 -0.389007 -0.449769 0.087698 0.938219 0.334745 +0.357320 -0.417054 -0.465251 0.547318 0.747830 0.375758 +0.336212 -0.447832 -0.375617 0.560539 0.733743 0.383950 +0.219295 -0.435004 -0.413224 -0.367072 0.906678 0.207828 +0.332847 -0.626788 -0.381643 0.509630 -0.793816 0.331863 +0.332202 -0.734652 0.000057 0.549319 -0.721702 -0.421182 +0.348796 -0.704774 -0.000013 0.920403 -0.296492 -0.254854 +0.346165 -0.674416 -0.040981 0.977328 -0.106354 -0.183082 +0.335244 -0.615850 -0.000015 0.766257 0.630850 0.121975 +0.342440 -0.630348 -0.037392 0.918952 0.393354 0.028279 +0.278199 -0.590617 -0.000015 0.153638 0.925027 0.347449 +0.222624 -0.608680 -0.000015 -0.327561 0.905627 0.269340 +0.272467 -0.735551 -0.000036 0.225850 -0.919491 -0.321759 +0.295178 -0.752238 0.000018 -0.191296 -0.887975 -0.418218 +0.349110 -0.655147 -0.000113 0.988956 0.141399 -0.044404 +0.248955 -0.755401 -0.000014 0.617067 -0.731228 -0.290747 +0.335166 -0.602167 -0.075203 0.836380 0.486658 0.252253 +0.325592 -0.544287 -0.241357 0.980676 0.051672 0.188691 +0.321219 -0.579031 -0.146115 0.964788 0.263029 0.000295 +0.320785 -0.569750 -0.245758 0.980517 -0.174798 0.089618 +0.318454 -0.607310 -0.149689 0.968249 -0.183239 -0.170052 +0.314774 -0.524596 -0.238125 0.706083 0.638125 0.306989 +0.303818 -0.553183 -0.141994 0.731572 0.663152 0.158213 +0.309583 -0.628689 -0.151638 0.841672 -0.449423 -0.299346 +0.316683 -0.593278 -0.250336 0.879243 -0.476366 -0.002558 +0.314822 -0.657923 -0.112631 0.767139 -0.456582 -0.450589 +0.327569 -0.625240 -0.112006 0.933818 -0.178190 -0.310215 +0.330532 -0.589047 -0.108363 0.976877 0.091608 -0.193181 +0.308093 -0.551433 -0.092603 0.832015 0.549085 -0.079097 +0.291509 -0.674280 -0.113187 0.516696 -0.720718 -0.462158 +0.294872 -0.646012 -0.153510 0.640399 -0.698083 -0.320263 +0.333531 -0.536520 -0.271928 0.908451 0.090084 0.408169 +0.328640 -0.560919 -0.275564 0.926178 -0.213059 0.311127 +0.321012 -0.513381 -0.269870 0.591341 0.625473 0.509017 +0.281356 -0.506818 -0.237638 0.204055 0.918315 0.339204 +0.324505 -0.588902 -0.280399 0.863889 -0.438109 0.248509 +0.307727 -0.608932 -0.283631 0.755434 -0.639440 0.142955 +0.302528 -0.611687 -0.254364 0.636149 -0.759471 -0.136078 +0.279028 -0.540377 -0.138857 0.018450 0.953555 0.300654 +0.273842 -0.653064 -0.155061 0.437815 -0.867780 -0.235109 +0.276371 -0.627443 -0.261753 0.544748 -0.818258 -0.183584 +0.251681 -0.526464 -0.238647 -0.430483 0.870296 0.239311 +0.249190 -0.549680 -0.142482 -0.314405 0.924604 0.215072 +0.355280 -0.513678 -0.307759 0.872571 0.122265 0.472939 +0.348767 -0.549903 -0.311345 0.899610 -0.209424 0.383202 +0.337312 -0.487621 -0.305082 0.575289 0.620668 0.532742 +0.281603 -0.495410 -0.271164 0.355072 0.741131 0.569780 +0.343097 -0.581914 -0.315867 0.823114 -0.438544 0.360780 +0.319099 -0.611475 -0.323902 0.709509 -0.648285 0.276268 +0.321164 -0.686016 -0.079581 0.836167 -0.328209 -0.439436 +0.336374 -0.647740 -0.079227 0.902314 -0.204747 -0.379352 +0.335166 -0.602167 -0.075203 0.980426 -0.009097 -0.196679 +0.383499 -0.505994 -0.385173 0.879673 0.328093 0.344284 +0.376532 -0.549829 -0.385658 0.923955 -0.180530 0.337220 +0.336212 -0.447832 -0.375617 0.593567 0.683030 0.425615 +0.284307 -0.461223 -0.300945 0.453759 0.690851 0.562875 +0.367801 -0.587543 -0.383197 0.870472 -0.350768 0.345311 +0.332847 -0.626788 -0.381643 0.700170 -0.635872 0.324699 +0.287657 -0.420008 -0.357903 0.560305 0.655035 0.506940 +0.172004 0.879637 -0.926179 0.374912 0.925746 -0.049352 +0.251929 0.841469 -1.034970 0.370078 0.926176 -0.072390 +0.112552 0.899531 -1.004645 0.370078 0.926176 -0.072390 +0.203523 0.850704 -1.130556 0.365040 0.926092 -0.095387 +0.115223 0.870956 -1.200244 0.294909 0.950545 -0.097435 +0.055367 0.903845 -1.060557 0.274261 0.951171 -0.141614 +0.203523 0.850704 -1.130556 0.274261 0.951171 -0.141614 +0.112552 0.899531 -1.004645 0.252960 0.949535 -0.185456 +0.279601 0.779780 -1.158522 0.636892 0.733151 -0.238450 +0.234621 0.787648 -1.231194 0.533583 0.781026 -0.324480 +0.203523 0.850704 -1.130556 0.561353 0.772771 -0.296153 +0.115223 0.870956 -1.200244 0.469204 0.806289 -0.360202 +0.315812 0.762780 -1.086902 0.697746 0.691030 -0.188754 +0.251929 0.841469 -1.034970 0.656948 0.722974 -0.213841 +0.282348 0.545361 -0.119478 0.991695 -0.039105 -0.122524 +0.277643 0.564086 -0.163536 0.991272 -0.000510 -0.131831 +0.284402 0.576404 -0.112761 0.991272 -0.000510 -0.131831 +0.277107 0.594368 -0.159115 0.989287 0.038086 -0.140930 +0.269638 0.446302 0.000566 0.001711 0.002278 0.999996 +0.320365 0.485449 0.000390 -0.004583 -0.000007 0.999990 +0.242179 0.466927 0.000566 0.000985 0.000723 0.999999 +0.220789 0.442452 0.000566 0.000000 0.000000 1.000000 +0.167233 0.459170 0.000566 0.000000 0.000000 1.000000 +0.146152 0.501367 0.000566 0.000000 0.000000 1.000000 +0.153742 0.557811 0.000566 0.000472 -0.000128 1.000000 +0.187262 0.606974 0.000566 0.000000 0.000000 1.000000 +0.222234 0.612449 0.000566 0.000616 -0.001679 0.999998 +0.254878 0.617560 0.000566 0.000530 -0.003385 0.999994 +0.307234 0.573768 0.000390 -0.002514 -0.001265 0.999996 +0.323680 0.530277 0.000566 -0.017633 -0.002622 0.999841 +0.310224 0.786234 -0.897804 0.677688 0.706385 0.204351 +0.257483 0.826472 -0.861991 0.568823 0.785056 0.245211 +0.275723 0.755235 -0.676234 0.568823 0.785056 0.245211 +0.228561 0.777364 -0.667726 0.448746 0.848253 0.281238 +0.289658 0.521276 -0.087188 0.753525 -0.436024 -0.492020 +0.282348 0.545361 -0.119478 0.808482 -0.446612 -0.383268 +0.291826 0.566355 -0.081698 0.971848 -0.015706 -0.235083 +0.284402 0.576404 -0.112761 0.983191 0.086734 -0.160661 +0.254084 0.492429 -0.091707 0.561240 -0.603370 -0.566529 +0.251436 0.524118 -0.128080 0.578239 -0.643993 -0.500911 +0.249859 0.543077 -0.169297 0.601604 -0.713259 -0.359631 +0.277643 0.564086 -0.163536 0.608546 -0.704826 -0.364544 +0.277107 0.594368 -0.159115 0.968817 0.226499 -0.100454 +0.277154 0.615199 -0.111693 0.921051 0.385228 -0.057133 +0.268234 0.627424 -0.156155 0.811748 0.581601 -0.052969 +0.232840 0.663758 -0.096986 0.701629 0.712322 -0.017713 +0.231067 0.660080 -0.153241 0.655341 0.752099 -0.069827 +0.186751 0.612696 -0.034908 -0.755114 0.639320 0.145168 +0.217708 0.623680 -0.032393 -0.245774 0.937080 0.247945 +0.155436 0.559053 -0.044730 -0.973518 0.228114 0.015088 +0.188509 0.645758 -0.076114 -0.860442 0.428189 0.276214 +0.159072 0.588271 -0.082848 -0.987841 0.153674 0.023565 +0.164135 0.553976 -0.084703 -0.950462 -0.118846 -0.287222 +0.154307 0.520563 -0.045954 -0.955807 -0.137073 -0.260085 +0.179070 0.506104 -0.086362 -0.856303 -0.308085 -0.414523 +0.171417 0.482939 -0.048275 -0.771964 -0.518095 -0.368307 +0.223805 0.460757 -0.052471 -0.332387 -0.863041 -0.380366 +0.310224 0.786234 -0.897804 0.896303 0.398136 0.195266 +0.275723 0.755235 -0.676234 0.888210 0.419779 0.186733 +0.362855 0.685884 -0.934781 0.888210 0.419779 0.186733 +0.310846 0.688865 -0.685292 0.879577 0.441167 0.178087 +0.175497 0.729689 -0.405860 -0.843965 0.521374 0.126062 +0.178600 0.713752 -0.333697 -0.720376 0.668763 0.183888 +0.201002 0.752380 -0.409529 -0.622247 0.756443 0.201502 +0.200959 0.732715 -0.338152 -0.607554 0.765842 0.210630 +0.162211 0.681141 -0.329839 -0.896742 0.435541 0.078468 +0.161989 0.688799 -0.401702 -0.899699 0.435035 0.035857 +0.142688 0.649372 -0.328296 -0.954878 0.295623 0.028558 +0.141864 0.649581 -0.398320 -0.994152 0.102355 0.034423 +0.148225 0.609419 -0.328049 -0.951952 -0.305447 0.022131 +0.142612 0.617588 -0.398601 -0.900598 -0.428996 0.069892 +0.167913 0.575845 -0.391086 -0.610215 -0.779990 0.138758 +0.176281 0.581040 -0.325084 -0.534249 -0.837955 0.111398 +0.210193 0.564010 -0.387937 -0.212955 -0.965966 0.146829 +0.214007 0.575025 -0.326258 -0.149249 -0.971761 0.182772 +0.261987 0.648849 -0.326739 0.944217 0.329067 -0.012986 +0.270736 0.619210 -0.325093 0.991042 -0.128205 -0.037407 +0.260287 0.642322 -0.394408 0.955256 0.291357 -0.050961 +0.270736 0.608116 -0.391070 0.979016 -0.200961 0.033791 +0.250399 0.586577 -0.324189 0.568013 -0.809663 -0.147673 +0.244685 0.577869 -0.386784 0.595910 -0.797758 0.092051 +0.277643 0.564086 -0.163536 0.877110 -0.451148 -0.164754 +0.277107 0.594368 -0.159115 0.981739 0.189928 -0.010783 +0.249859 0.543077 -0.169297 0.426813 -0.854864 -0.295023 +0.229663 0.536460 -0.171279 0.230602 -0.917616 -0.323735 +0.214007 0.575025 -0.326258 0.187646 -0.976400 -0.106923 +0.176281 0.581040 -0.325084 -0.493609 -0.854166 -0.163557 +0.210195 0.534058 -0.169644 -0.168253 -0.938514 -0.301466 +0.246793 0.681763 -0.328611 0.877041 0.474690 0.073949 +0.268234 0.627424 -0.156155 0.871328 0.487326 0.057448 +0.247846 0.680231 -0.398317 0.943393 0.331405 -0.013441 +0.214153 0.515186 -0.127241 -0.298675 -0.823383 -0.482529 +0.232231 0.518961 -0.128260 0.220660 -0.862413 -0.455580 +0.182943 0.532746 -0.120103 -0.813599 -0.485663 -0.319670 +0.182677 0.552369 -0.164101 -0.733596 -0.659658 -0.163365 +0.251436 0.524118 -0.128080 0.117990 -0.865499 -0.486817 +0.168712 0.566050 -0.116333 -0.963247 -0.206105 -0.172268 +0.169900 0.585220 -0.162331 -0.969582 -0.244134 -0.017570 +0.210193 0.564010 -0.387937 0.364984 -0.920158 0.141758 +0.148225 0.609419 -0.328049 -0.907863 -0.418357 0.027601 +0.232782 0.708077 -0.332184 0.667286 0.721591 0.184486 +0.231067 0.660080 -0.153241 0.542769 0.837337 0.065331 +0.238095 0.715785 -0.403665 0.803124 0.584191 0.117100 +0.218592 0.488978 -0.091478 0.066934 -0.815191 -0.575311 +0.179070 0.506104 -0.086362 -0.576627 -0.639670 -0.508255 +0.254084 0.492429 -0.091707 0.035198 -0.797983 -0.601651 +0.236035 0.495774 -0.085419 0.103317 -0.826566 -0.553275 +0.200959 0.732715 -0.338152 0.167168 0.943057 0.287572 +0.201002 0.752380 -0.409529 0.672606 0.713316 0.196930 +0.209338 0.666894 -0.151392 -0.152536 0.983755 0.094656 +0.142688 0.649372 -0.328296 -0.984903 0.090459 0.147590 +0.164135 0.553976 -0.084703 -0.931463 -0.254468 -0.260043 +0.223805 0.460757 -0.052471 0.300321 -0.822569 -0.482895 +0.239054 0.473485 -0.052529 0.228486 -0.878628 -0.419293 +0.220789 0.442452 0.000566 0.688562 -0.703863 -0.174525 +0.242179 0.466927 0.000566 -0.083766 -0.982788 -0.164654 +0.162211 0.681141 -0.329839 -0.851310 0.489728 0.188248 +0.166089 0.620852 -0.155459 -0.955757 0.270962 0.114494 +0.163027 0.600441 -0.111351 -0.967581 0.251607 -0.021942 +0.159072 0.588271 -0.082848 -0.986468 0.157341 -0.046097 +0.232840 0.663758 -0.096986 0.449259 0.821419 0.351335 +0.208967 0.676069 -0.095824 -0.055538 0.969036 0.240591 +0.190077 0.655760 -0.095630 -0.759240 0.633512 0.149056 +0.191454 0.652899 -0.149048 -0.724706 0.670027 0.160826 +0.178600 0.713752 -0.333697 -0.758421 0.605604 0.240920 +0.269638 0.446302 0.000566 -0.013509 -0.942777 -0.333150 +0.260516 0.465220 -0.052600 0.094616 -0.905017 -0.414719 +0.320365 0.485449 0.000390 0.755898 -0.529569 -0.384934 +0.305828 0.503800 -0.050020 0.806806 -0.390272 -0.443568 +0.289658 0.521276 -0.087188 0.826338 -0.242158 -0.508454 +0.312485 0.544627 -0.044161 0.954017 0.079391 -0.289048 +0.291826 0.566355 -0.081698 0.922825 0.107861 -0.369810 +0.171417 0.482939 -0.048275 -0.381488 -0.762129 -0.523093 +0.188509 0.645758 -0.076114 -0.504124 0.731401 0.459251 +0.209317 0.654582 -0.075414 -0.131693 0.798140 0.587903 +0.235307 0.654334 -0.079683 0.412952 0.833297 0.367541 +0.277154 0.615199 -0.111693 0.832503 0.552830 -0.036302 +0.251605 0.623111 -0.036680 0.312986 0.903743 0.292043 +0.217708 0.623680 -0.032393 -0.082813 0.837345 0.540366 +0.254878 0.617560 0.000566 0.378865 0.913388 0.148945 +0.222234 0.612449 0.000566 -0.048900 0.969776 0.239046 +0.306784 0.584437 -0.041477 0.853710 0.518060 -0.052846 +0.307234 0.573768 0.000390 0.898226 0.438380 0.031828 +0.323680 0.530277 0.000566 0.969627 0.056639 -0.237940 +0.286405 0.610778 -0.079691 0.862536 0.500878 -0.071776 +0.284402 0.576404 -0.112761 0.962806 0.156083 -0.220553 +0.186751 0.612696 -0.034908 -0.312783 0.747304 0.586262 +0.380000 0.479387 -0.850625 0.823111 -0.476358 0.309148 +0.343117 0.533016 -0.669788 0.798703 -0.493743 0.343936 +0.311188 0.429845 -0.743750 0.798703 -0.493743 0.343936 +0.291123 0.470982 -0.647226 0.772611 -0.510087 0.377998 +0.257483 0.826472 -0.861991 0.388084 0.878137 0.279761 +0.191441 0.840666 -0.814931 0.201232 0.917264 0.343704 +0.228561 0.777364 -0.667726 0.201232 0.917264 0.343704 +0.174726 0.772485 -0.655484 0.006223 0.919211 0.393716 +0.257957 0.539113 -0.489777 0.356363 -0.833619 0.422001 +0.244685 0.577869 -0.386784 0.335682 -0.866587 0.369249 +0.204691 0.525197 -0.474041 -0.149790 -0.895576 0.418935 +0.210193 0.564010 -0.387937 0.032443 -0.911954 0.409007 +0.147059 0.559099 -0.487339 -0.534122 -0.792202 0.295179 +0.167913 0.575845 -0.391086 -0.408578 -0.848313 0.336793 +0.266554 0.508384 -0.555996 0.382278 -0.818249 0.429339 +0.200296 0.489186 -0.533589 -0.273814 -0.845326 0.458748 +0.132622 0.539817 -0.555258 -0.598820 -0.714263 0.362276 +0.196093 0.452835 -0.612980 -0.661276 -0.668182 0.340951 +0.116679 0.512235 -0.650594 -0.646521 -0.689651 0.326177 +0.175497 0.729689 -0.405860 -0.732136 0.681003 0.014575 +0.201002 0.752380 -0.409529 -0.036848 0.939147 -0.341533 +0.172382 0.715347 -0.474482 -0.393029 0.915956 -0.080950 +0.207105 0.724098 -0.466516 0.297162 0.952233 -0.070332 +0.161989 0.688799 -0.401702 -0.889609 0.326371 0.319497 +0.133645 0.691215 -0.483091 -0.607069 0.781718 0.142772 +0.249918 0.703367 -0.477302 0.616795 0.784687 0.061884 +0.238095 0.715785 -0.403665 0.782446 0.622127 -0.027137 +0.172011 0.723263 -0.542599 -0.264026 0.925984 0.269895 +0.220027 0.731594 -0.542794 -0.045993 0.984282 0.170512 +0.112848 0.705254 -0.556160 -0.334904 0.878136 0.341637 +0.263180 0.713418 -0.550893 0.438311 0.880652 0.179823 +0.174726 0.772485 -0.655484 -0.222638 0.893524 0.389933 +0.228561 0.777364 -0.667726 -0.076430 0.927313 0.366400 +0.098672 0.741881 -0.649914 -0.319832 0.865129 0.386341 +0.265205 0.675793 -0.482234 0.900649 0.401836 0.165405 +0.247846 0.680231 -0.398317 0.935890 0.304307 0.177504 +0.260287 0.642322 -0.394408 0.883245 0.419577 0.209362 +0.290254 0.638584 -0.489197 0.825408 0.510599 0.240813 +0.260287 0.642322 -0.394408 0.911347 0.305333 0.276076 +0.270736 0.608116 -0.391070 0.949998 -0.049979 0.308230 +0.290254 0.638584 -0.489197 0.939471 0.243450 0.241096 +0.298894 0.585936 -0.492080 0.864486 -0.378927 0.330271 +0.244685 0.577869 -0.386784 0.728663 -0.600608 0.329120 +0.257957 0.539113 -0.489777 0.714362 -0.607476 0.347361 +0.318289 0.563922 -0.566455 0.944303 -0.132381 0.301275 +0.266554 0.508384 -0.555996 0.711511 -0.599201 0.367028 +0.311358 0.632463 -0.562152 0.908058 0.321332 0.268657 +0.265205 0.675793 -0.482234 0.858593 0.428787 0.280999 +0.290660 0.682530 -0.558843 0.837753 0.462414 0.290418 +0.249918 0.703367 -0.477302 0.810056 0.519444 0.272006 +0.263180 0.713418 -0.550893 0.756230 0.616060 0.220423 +0.222856 -1.307619 -1.114574 -0.215118 -0.619053 -0.755313 +0.230621 -1.322045 -1.104962 -0.132676 -0.772335 -0.621205 +0.210022 -1.325508 -1.096257 -0.132676 -0.772335 -0.621205 +0.226916 -1.332009 -1.085243 -0.043829 -0.888331 -0.457108 +0.295170 -1.359270 -1.154195 -0.470966 0.387270 -0.792599 +0.290735 -1.385752 -1.164499 -0.537034 0.404276 -0.740375 +0.283652 -1.359002 -1.147220 -0.555573 0.342339 -0.757722 +0.284036 -1.382217 -1.157102 -0.676948 0.479403 -0.558493 +0.258878 -1.430779 -1.174340 -0.824018 0.503086 -0.260573 +0.280568 -1.383995 -1.147628 -0.912896 0.404233 0.056711 +0.258451 -1.431602 -1.170118 -0.914976 0.275932 0.294416 +0.282051 -1.390649 -1.140099 -0.818206 0.071551 0.570456 +0.259831 -1.434206 -1.166870 -0.701196 -0.081901 0.708248 +0.287698 -1.399218 -1.137627 -0.451423 -0.315511 0.834668 +0.262452 -1.437617 -1.165891 -0.266627 -0.457263 0.848422 +0.294956 -1.406136 -1.140856 0.051491 -0.639953 0.766687 +0.265650 -1.440051 -1.167361 0.247797 -0.728118 0.639094 +0.301081 -1.408959 -1.148293 0.391259 -0.762168 0.515767 +0.268273 -1.440624 -1.170797 0.432938 -0.775339 0.459798 +0.261322 -1.431329 -1.177856 -0.577685 0.529642 -0.621095 +0.308007 -1.363333 -1.153881 0.138136 0.365292 -0.920587 +0.297823 -1.392846 -1.167120 0.184178 0.204161 -0.961456 +0.295170 -1.359270 -1.154195 0.077060 0.363478 -0.928410 +0.290735 -1.385752 -1.164499 -0.068942 0.355658 -0.932070 +0.302777 -1.400832 -1.164291 0.624254 -0.328461 -0.708817 +0.267823 -1.436418 -1.178335 0.498845 -0.163351 -0.851158 +0.264899 -1.433226 -1.179409 0.043575 0.244648 -0.968632 +0.261322 -1.431329 -1.177856 -0.187589 0.385789 -0.903314 +0.303994 -1.406916 -1.157166 0.721852 -0.664243 -0.194195 +0.269053 -1.439328 -1.175026 0.718240 -0.551662 -0.424030 +0.301081 -1.408959 -1.148293 0.674810 -0.736154 0.052041 +0.268273 -1.440624 -1.170797 0.689791 -0.723789 -0.017793 +0.317259 -1.369638 -1.146396 0.669543 0.110523 -0.734505 +0.302777 -1.400832 -1.164291 0.652209 0.116954 -0.748963 +0.308007 -1.363333 -1.153881 0.652209 0.116954 -0.748963 +0.297823 -1.392846 -1.167120 0.634516 0.123321 -0.763009 +0.283652 -1.359002 -1.147220 -0.776198 0.147292 -0.613043 +0.284036 -1.382217 -1.157102 -0.923219 0.111806 -0.367649 +0.277853 -1.362630 -1.135619 -0.948446 -0.153790 -0.277125 +0.280568 -1.383995 -1.147628 -0.994497 -0.085504 -0.060541 +0.279987 -1.368770 -1.123823 -0.954536 -0.298051 0.005133 +0.282051 -1.390649 -1.140099 -0.987337 -0.143483 0.067670 +0.279678 -1.332219 -1.133962 -0.521755 0.265453 -0.810745 +0.269289 -1.342471 -1.125993 -0.805577 -0.152788 -0.572452 +0.267416 -1.352851 -1.113071 -0.846495 -0.425452 -0.320056 +0.294958 -1.325751 -1.133573 -0.195856 0.512956 -0.835773 +0.295170 -1.359270 -1.154195 -0.344707 0.427621 -0.835654 +0.268578 -1.308589 -1.120256 -0.310961 0.163334 -0.936283 +0.254957 -1.321908 -1.115359 -0.559739 -0.042249 -0.827591 +0.249879 -1.335757 -1.102068 -0.771434 -0.359638 -0.524929 +0.257984 -1.289274 -1.110665 0.166751 0.262420 -0.950437 +0.242488 -1.305722 -1.114672 -0.037667 0.077559 -0.996276 +0.246845 -1.260431 -1.101758 0.363742 0.400226 -0.841136 +0.236921 -1.282762 -1.116675 0.324543 0.195655 -0.925414 +0.259831 -1.434206 -1.166870 -0.710934 0.020308 0.702965 +0.258451 -1.431602 -1.170118 -0.824134 0.216217 0.523502 +0.249637 -1.449145 -1.176748 -0.427277 -0.861461 -0.274443 +0.262452 -1.437617 -1.165891 -0.340083 -0.416163 0.843298 +0.265650 -1.440051 -1.167361 0.094129 -0.790470 0.605225 +0.268273 -1.440624 -1.170797 0.388331 -0.916486 0.096193 +0.269053 -1.439328 -1.175026 0.433870 -0.778573 -0.453410 +0.267823 -1.436418 -1.178335 0.240674 -0.451072 -0.859424 +0.264899 -1.433226 -1.179409 -0.123365 -0.047419 -0.991228 +0.261322 -1.431329 -1.177856 -0.541230 0.306275 -0.783113 +0.258878 -1.430779 -1.174340 -0.708479 0.429862 -0.559712 +0.258451 -1.431602 -1.170118 -0.893153 0.449746 -0.002661 +0.258878 -1.430779 -1.174340 -0.893153 0.449746 -0.002661 +0.249637 -1.449145 -1.176748 -0.893153 0.449746 -0.002661 +-0.000017 -1.403685 -0.532843 -0.000002 -0.966061 0.258313 +0.013712 -1.402167 -0.533006 0.097451 -0.673701 0.732551 +-0.000017 -1.370935 -0.522635 -0.032841 -0.105281 0.993900 +0.018619 -1.370303 -0.523921 0.075592 -0.284155 0.955794 +-0.000017 -1.401655 -0.547689 -0.061154 -0.887961 -0.455835 +0.013895 -1.398495 -0.548833 0.157213 -0.971303 -0.178481 +-0.018653 -1.370303 -0.523921 -0.159617 -0.057901 0.985479 +-0.013745 -1.402167 -0.533006 -0.190507 -0.744010 0.640435 +-0.013929 -1.398495 -0.548833 -0.162019 -0.913315 -0.373639 +-0.019046 -1.364328 -0.580399 -0.142713 -0.647691 -0.748418 +-0.000017 -1.366282 -0.582045 -0.123537 -0.644757 -0.754338 +-0.025466 -1.305227 -0.627061 -0.201774 -0.599173 -0.774777 +-0.000017 -1.308295 -0.628125 -0.090353 -0.579347 -0.810058 +-0.023282 -1.315241 -0.541154 -0.131109 0.327981 0.935542 +-0.000017 -1.312755 -0.538588 -0.138689 0.336526 0.931405 +-0.050546 -1.365189 -0.530957 -0.319704 -0.009109 0.947474 +-0.055160 -1.320242 -0.544940 -0.270335 0.321038 0.907664 +-0.078031 -1.352136 -0.542918 -0.559650 0.052269 0.827079 +-0.079885 -1.324992 -0.553916 -0.485806 0.292212 0.823775 +-0.062022 -1.284424 -0.560729 -0.267470 0.367239 0.890840 +-0.084009 -1.293200 -0.566737 -0.461943 0.300769 0.834354 +-0.106325 -1.214490 -0.609168 -0.469728 0.263478 0.842576 +-0.072717 -1.196973 -0.602534 -0.280764 0.350688 0.893415 +-0.084098 -1.085169 -0.641995 -0.404074 0.165496 0.899631 +-0.134118 -1.124052 -0.661652 -0.470607 0.157508 0.868171 +-0.171399 -1.036528 -0.683604 -0.460562 0.026352 0.887236 +-0.093126 -0.998740 -0.644095 -0.475011 -0.083425 0.876017 +-0.042277 -1.393100 -0.536856 -0.399716 -0.816626 0.416351 +-0.072746 -1.377240 -0.548504 -0.672758 -0.532609 0.513540 +-0.043746 -0.981986 -0.606547 -0.509136 -0.305320 0.804711 +-0.106031 -0.926096 -0.629367 -0.586436 -0.356586 0.727282 +0.000000 -0.987806 -0.588966 -0.346456 -0.356176 0.867817 +-0.054281 -0.924635 -0.576374 -0.443428 -0.512629 0.735243 +0.000000 -0.931320 -0.554331 -0.355603 -0.559518 0.748656 +-0.066691 -0.876854 -0.541093 -0.342435 -0.595854 0.726427 +-0.096499 -1.343108 -0.564166 -0.780040 -0.126364 0.612838 +-0.044949 -1.066321 -0.622270 -0.401935 -0.048329 0.914392 +-0.054498 -1.294657 -0.623404 -0.155322 -0.625340 -0.764738 +-0.036736 -1.235823 -0.673595 0.031175 -0.873304 -0.486177 +-0.070108 -1.244802 -0.663809 0.255978 -0.932714 -0.254008 +-0.039668 -1.391853 -0.554379 -0.132593 -0.774687 -0.618287 +-0.088928 -1.370848 -0.574027 -0.441640 -0.806382 -0.393322 +-0.071663 -1.379708 -0.565028 -0.249851 -0.888289 -0.385380 +-0.101609 -1.353245 -0.577932 -0.867413 -0.471572 0.158789 +-0.026294 -1.280054 -0.556299 -0.146347 0.383536 0.911857 +-0.044926 -1.348548 -0.584637 -0.157698 -0.589008 -0.792591 +-0.111650 -1.327029 -0.608226 -0.321265 -0.688702 -0.649983 +-0.074089 -1.339260 -0.590221 0.111138 -0.538403 -0.835326 +-0.127044 -1.303758 -0.615782 -0.848693 -0.526879 0.046027 +-0.139436 -1.274319 -0.619443 -0.682362 -0.100214 0.724113 +-0.107905 -1.323799 -0.578042 -0.865736 -0.113026 0.487572 +-0.028693 -1.192433 -0.593276 -0.237018 0.259857 0.936107 +-0.129518 -1.292252 -0.638544 0.246747 -0.928808 -0.276461 +-0.081699 -1.289704 -0.623371 0.089856 -0.589103 -0.803046 +-0.141188 -1.289671 -0.632284 -0.284500 -0.687507 0.668128 +-0.155502 -1.236804 -0.630819 -0.499570 0.140885 0.854740 +0.000000 -1.276184 -0.555177 -0.111435 0.391591 0.913367 +-0.000017 -1.231392 -0.679250 0.076679 -0.967442 -0.241196 +0.000000 -1.188148 -0.591409 -0.100355 0.307913 0.946107 +0.000000 -1.063857 -0.611077 -0.188931 0.023938 0.981699 +-0.036826 -1.238117 -0.697304 0.252580 -0.793215 0.554089 +-0.000017 -1.233837 -0.701840 0.177759 -0.515775 0.838080 +-0.071025 -1.247380 -0.686623 0.429352 -0.649909 0.627117 +-0.103259 -1.263748 -0.674458 0.635154 -0.752880 0.172486 +-0.100422 -1.255747 -0.653954 0.329040 -0.825654 -0.458289 +-0.069705 -1.278198 -0.690989 0.250671 0.192115 0.948818 +-0.118153 -1.278789 -0.677453 0.729450 -0.125032 0.672510 +-0.161583 -1.276360 -0.634034 -0.344855 -0.269254 0.899209 +-0.143928 -1.296556 -0.636116 0.178977 -0.012768 0.983770 +-0.164444 -1.289065 -0.635710 -0.069988 0.164136 0.983952 +-0.163789 -1.303910 -0.634987 -0.447533 0.149294 0.881717 +-0.146164 -1.308268 -0.627509 0.351579 0.353231 0.866960 +-0.145479 -1.326647 -0.619138 -0.191647 0.257680 0.947033 +-0.160709 -1.327495 -0.631884 -0.642251 0.085113 0.761754 +-0.139410 -1.362009 -0.611108 -0.173098 0.140187 0.974877 +-0.139116 -1.326727 -0.623711 0.626279 0.349113 0.697061 +-0.132678 -1.361377 -0.611443 0.498879 0.310687 0.809070 +-0.122719 -1.405695 -0.604309 0.214590 0.354505 0.910097 +-0.129609 -1.405361 -0.603754 -0.377846 0.080828 0.922334 +0.000000 -0.882034 -0.516286 -0.323522 -0.578187 0.749022 +-0.138671 -1.308886 -0.637077 0.805129 0.170672 0.568013 +-0.119228 -1.324339 -0.660955 0.522903 0.398759 0.753368 +-0.068073 -1.327512 -0.667823 0.125703 0.438650 0.889823 +-0.037389 -1.272798 -0.701558 0.209312 0.128835 0.969324 +-0.134693 -1.297916 -0.641700 0.740369 -0.405580 0.536059 +-0.158370 -1.364142 -0.622466 -0.812731 -0.112071 0.571758 +-0.144608 -1.406805 -0.621260 -0.862875 -0.272558 0.425628 +-0.118995 -1.437387 -0.596255 -0.699944 -0.139714 0.700399 +-0.128478 -1.442977 -0.627141 -0.914997 -0.287826 0.282732 +-0.103442 -1.413538 -0.607254 0.387582 0.586059 0.711558 +-0.091602 -1.447681 -0.580916 -0.045693 0.346880 0.936796 +-0.000017 -1.270105 -0.707808 0.112788 0.293520 0.949276 +-0.035521 -1.329960 -0.670332 0.073285 0.474690 0.877097 +-0.000017 -1.339257 -0.666214 0.034043 0.466884 0.883663 +-0.132973 -1.443241 -0.645172 -0.969701 -0.220545 0.105073 +-0.143399 -1.414398 -0.669677 -0.950202 -0.311574 -0.006072 +-0.133724 -1.465766 -0.673240 -0.986415 -0.156154 -0.051006 +-0.125978 -1.491134 -0.642916 -0.948998 -0.244911 0.198549 +-0.114850 -1.528464 -0.668639 -0.879759 -0.462876 0.108491 +-0.120598 -1.513026 -0.684932 -0.958525 -0.284342 0.019494 +-0.101414 -1.557837 -0.680852 -0.762311 -0.494106 0.418022 +-0.107676 -1.558038 -0.689610 -0.827833 -0.485508 0.281026 +-0.077735 -1.575456 -0.670632 -0.609785 -0.530027 0.589266 +-0.082763 -1.589562 -0.687034 -0.679620 -0.720564 0.137494 +-0.048244 -1.589749 -0.652445 -0.470857 -0.568856 0.674311 +-0.042597 -1.569583 -0.636975 -0.369132 -0.622112 0.690447 +-0.070579 -1.562914 -0.651884 -0.440875 -0.751341 0.491035 +-0.085528 -1.544567 -0.622349 -0.485636 -0.671105 0.560157 +-0.057607 -1.545277 -0.610821 -0.214965 -0.717837 0.662193 +-0.068996 -1.417705 -0.624797 0.226569 0.598008 0.768800 +-0.062730 -1.462112 -0.576113 -0.056728 0.311910 0.948417 +-0.089700 -1.497634 -0.594454 -0.501505 -0.323118 0.802551 +-0.060933 -1.501117 -0.582180 -0.207365 -0.386829 0.898534 +-0.049631 -1.607373 -0.680832 -0.408683 -0.871533 0.270941 +-0.049236 -1.606319 -0.712284 -0.471617 -0.868228 -0.154134 +-0.078194 -1.582310 -0.717670 -0.677902 -0.687495 -0.260384 +-0.053302 -1.597447 -0.738356 -0.527744 -0.754999 -0.389182 +-0.022231 -1.613117 -0.731314 -0.231045 -0.896421 -0.378217 +-0.020617 -1.618934 -0.702387 -0.243201 -0.969435 -0.032392 +-0.086410 -1.560745 -0.743683 -0.722071 -0.553186 -0.415450 +-0.107128 -1.521984 -0.746441 -0.894076 -0.308559 -0.324684 +-0.108797 -1.541432 -0.725267 -0.869414 -0.423587 -0.254350 +-0.120703 -1.476615 -0.732980 -0.951795 -0.255760 -0.169332 +-0.119379 -1.495462 -0.712270 -0.963477 -0.200926 -0.177036 +-0.135328 -1.430873 -0.717779 -0.947176 -0.302854 -0.105533 +-0.132311 -1.445773 -0.698382 -0.974043 -0.211142 -0.081604 +-0.154531 -1.380270 -0.678829 -0.949577 -0.313260 -0.013137 +-0.000017 -1.419349 -0.627442 0.106198 0.594731 0.796880 +-0.034491 -1.418122 -0.626023 0.067138 0.564120 0.822959 +-0.018495 -1.572862 -0.630150 -0.267418 -0.510440 0.817275 +-0.019229 -1.594895 -0.641123 -0.278157 -0.641106 0.715270 +-0.091737 -1.556855 -0.667292 -0.629615 -0.686797 0.363173 +-0.115473 -1.495687 -0.619527 -0.778841 -0.363015 0.511494 +-0.032758 -1.470149 -0.575474 0.073613 0.302042 0.950448 +-0.024074 -1.503406 -0.579481 0.014771 -0.309214 0.950878 +-0.107077 -1.541398 -0.649263 -0.793207 -0.559108 0.241292 +-0.017253 -1.546269 -0.609926 -0.094801 -0.597710 0.796088 +-0.062210 -1.548939 -0.790061 -0.612687 -0.604155 -0.509520 +-0.032348 -1.573539 -0.787490 -0.308010 -0.778247 -0.547231 +-0.111758 -1.457935 -0.786106 -0.908480 -0.285658 -0.305062 +-0.091205 -1.508123 -0.790433 -0.786773 -0.426099 -0.446574 +-0.131543 -1.409096 -0.777987 -0.926024 -0.317585 -0.204006 +-0.156683 -1.356212 -0.761539 -0.908179 -0.372112 -0.191685 +-0.021106 -1.614909 -0.670898 -0.260959 -0.877575 0.402198 +-0.000017 -1.596067 -0.638937 -0.172956 -0.707462 0.685262 +-0.000017 -1.574039 -0.625376 -0.097000 -0.508685 0.855471 +-0.000017 -1.547150 -0.608158 -0.023033 -0.564196 0.825320 +-0.000017 -1.507004 -0.582671 0.008703 -0.415148 0.909712 +-0.000017 -1.476035 -0.579618 0.155065 0.158287 0.975141 +-0.000017 -1.583737 -0.779092 -0.090095 -0.829132 -0.551745 +-0.000017 -1.616928 -0.728156 -0.112830 -0.944493 -0.308550 +-0.000017 -1.618749 -0.666344 -0.223222 -0.930500 0.290415 +-0.000017 -1.622242 -0.698873 -0.152394 -0.987650 -0.036376 +0.018462 -1.572862 -0.630150 0.178652 -0.562234 0.807451 +0.017220 -1.546269 -0.609926 0.111962 -0.598212 0.793478 +-0.000017 -1.312755 -0.538588 0.143088 0.408791 0.901341 +0.023249 -1.315241 -0.541154 0.119668 0.397824 0.909624 +0.000000 -1.276184 -0.555177 0.111512 0.391548 0.913376 +0.026260 -1.280054 -0.556299 0.093739 0.381057 0.919787 +0.000000 -1.188148 -0.591409 0.083042 0.306054 0.948385 +0.028430 -1.191998 -0.592604 0.133403 0.243692 0.960634 +0.000000 -1.063857 -0.611077 0.179299 0.025575 0.983462 +0.044879 -1.066202 -0.622145 0.283750 -0.087011 0.954942 +0.000000 -0.987806 -0.588966 0.334088 -0.353327 0.873811 +0.045699 -0.984531 -0.606911 0.365856 -0.323411 0.872671 +0.054010 -0.924554 -0.576161 0.365890 -0.474506 0.800605 +0.000000 -0.931320 -0.554331 0.379394 -0.483640 0.788766 +-0.000017 -1.458554 -1.064723 0.079705 -0.873026 -0.481116 +-0.000017 -1.402693 -1.142934 -0.022658 -0.769241 -0.638557 +0.068422 -1.451326 -1.066913 0.028741 -0.863516 -0.503502 +0.082822 -1.405828 -1.147955 -0.048644 -0.675449 -0.735800 +-0.000017 -1.486275 -1.007160 0.089176 -0.921451 -0.378122 +0.052737 -1.482106 -1.004878 0.090678 -0.925200 -0.368487 +-0.000017 -1.351366 -1.180527 -0.029415 -0.524705 -0.850776 +0.085390 -1.351693 -1.181174 -0.027622 -0.499785 -0.865709 +-0.000017 -1.287914 -1.213232 -0.045499 -0.306387 -0.950819 +0.085375 -1.291375 -1.217723 -0.062705 -0.320776 -0.945077 +-0.000017 -1.493460 -0.986184 0.087438 -0.975216 -0.203245 +0.047971 -1.490109 -0.980232 0.079763 -0.992514 -0.092487 +-0.000017 -1.493131 -0.951213 0.067606 -0.989312 -0.129191 +0.045040 -1.490148 -0.950779 0.070867 -0.962756 -0.260919 +-0.000017 -1.171195 -1.226909 0.002248 -0.047023 -0.998891 +0.082590 -1.177560 -1.230108 -0.046793 -0.063928 -0.996857 +-0.000017 -1.507587 -0.917663 0.071388 -0.919318 -0.386987 +0.043526 -1.502736 -0.920470 0.078289 -0.922062 -0.379042 +0.000000 -1.086145 -1.231919 0.135480 -0.291094 -0.947053 +0.063677 -1.084658 -1.226234 0.049283 -0.129646 -0.990335 +0.000000 -1.014367 -1.268361 0.218178 -0.441795 -0.870181 +0.063836 -1.006456 -1.256372 0.155265 -0.401364 -0.902663 +0.261829 -0.969024 -0.862849 0.971189 -0.230942 0.058792 +0.255171 -0.984125 -0.812184 0.980803 -0.168422 0.098283 +0.241338 -1.101547 -0.904321 0.994154 -0.107229 -0.012602 +0.244821 -1.124264 -0.861905 0.995812 -0.078310 -0.047186 +0.255500 -0.909942 -0.759849 0.847182 -0.457756 0.269708 +0.275470 -0.919913 -0.839500 0.894568 -0.402967 0.193303 +0.250596 -1.151253 -0.812148 0.974733 -0.210827 -0.073812 +0.240419 -1.032634 -0.777716 0.996870 -0.021906 0.075965 +0.203642 -1.233119 -0.795930 0.916260 -0.388827 0.096340 +0.216387 -1.224037 -0.880489 0.944553 -0.327916 0.017064 +0.327169 -0.847824 -0.782242 0.677570 -0.689399 0.256181 +0.191269 -1.311910 -0.896540 0.950463 -0.291432 0.108107 +0.190128 -1.294682 -0.840066 0.950575 -0.290292 0.110171 +0.250557 -0.893329 -1.103714 0.905844 -0.339468 -0.253394 +0.241437 -0.975757 -1.025889 0.926929 -0.072401 -0.368184 +0.194389 -1.019275 -1.135778 0.926929 -0.072401 -0.368184 +0.233524 -1.041313 -1.070262 0.869276 0.200816 -0.451699 +0.178512 -1.354269 -0.860294 0.901656 -0.285913 0.324454 +0.190128 -1.294682 -0.840066 0.911730 -0.367236 0.184084 +0.131509 -1.409096 -0.777987 0.911730 -0.367236 0.184084 +0.156650 -1.356212 -0.761539 0.897717 -0.438857 0.038851 +0.181027 -1.327258 -0.684930 0.928179 -0.354912 -0.111894 +0.203642 -1.233119 -0.795930 0.899593 -0.425457 -0.098586 +0.198106 -1.282808 -0.684246 0.923990 -0.364309 -0.116283 +0.217239 -1.235284 -0.685585 0.960557 -0.233754 0.150627 +0.250596 -1.151253 -0.812148 0.970584 -0.237350 0.040398 +0.244259 -1.167176 -0.753451 0.976461 -0.188046 0.105655 +0.232586 -1.119921 -0.714247 0.871959 0.123217 0.473819 +0.201473 -1.208949 -0.656278 0.611909 0.147642 0.777025 +0.134085 -1.124052 -0.661652 0.149462 0.180178 0.972212 +0.171366 -1.036528 -0.683604 0.634792 0.147134 0.758545 +0.198022 -0.974045 -0.698088 0.810359 -0.218358 0.543725 +0.240419 -1.032634 -0.777716 0.920786 -0.013236 0.389843 +0.255171 -0.984125 -0.812184 0.967450 -0.148732 0.204740 +0.255500 -0.909942 -0.759849 0.797797 -0.411239 0.440911 +0.218263 -0.890110 -0.686509 0.614622 -0.586434 0.527576 +0.271029 -0.828348 -0.649493 0.542405 -0.699851 0.464763 +0.327169 -0.847824 -0.782242 0.652450 -0.659835 0.372730 +0.294151 -0.787640 -0.616429 0.526664 -0.709009 0.468968 +0.368785 -0.778217 -0.725018 0.631114 -0.680735 0.371879 +0.130931 -0.873717 -0.601270 0.422409 -0.722174 0.547755 +0.188531 -0.803520 -0.548481 0.442630 -0.719850 0.534691 +0.229238 -0.751868 -0.513438 0.419644 -0.735267 0.532241 +0.352869 -0.722752 -0.593997 0.600464 -0.685633 0.411523 +0.294651 -0.747369 -0.556844 0.463739 -0.725792 0.508107 +0.233252 -0.732483 -0.490942 0.414991 -0.724540 0.550295 +0.070074 -1.244802 -0.663809 0.053225 -0.638746 -0.767574 +0.054464 -1.294657 -0.623404 0.223195 -0.602575 -0.766216 +0.036703 -1.235823 -0.673595 0.130588 -0.583820 -0.801312 +0.025433 -1.305227 -0.627061 0.201777 -0.599173 -0.774776 +0.019013 -1.364328 -0.580399 0.142714 -0.647691 -0.748418 +0.044892 -1.348548 -0.584637 0.262046 -0.595092 -0.759735 +-0.000017 -1.231392 -0.679250 0.061328 -0.552581 -0.831200 +-0.000017 -1.308295 -0.628125 0.090350 -0.579347 -0.810058 +-0.000017 -1.366282 -0.582045 0.123532 -0.644758 -0.754339 +-0.000017 -1.401655 -0.547689 0.114050 -0.687016 -0.717636 +0.013895 -1.398495 -0.548833 0.056612 -0.682070 -0.729093 +0.039635 -1.391853 -0.554379 0.120943 -0.632566 -0.765006 +0.190128 -1.294682 -0.840066 0.936754 -0.314995 0.152546 +0.203642 -1.233119 -0.795930 0.934664 -0.355502 0.004707 +0.156650 -1.356212 -0.761539 0.934664 -0.355502 0.004707 +0.181027 -1.327258 -0.684930 0.910607 -0.387654 -0.143243 +0.091171 -1.508123 -0.790433 0.874673 -0.484092 -0.024548 +0.119215 -1.452959 -0.879041 0.828218 -0.556458 -0.066399 +0.111725 -1.457935 -0.786106 0.884629 -0.456020 0.097345 +0.154512 -1.402559 -0.867532 0.864915 -0.481222 0.142643 +0.131509 -1.409096 -0.777987 0.882291 -0.428236 0.195387 +0.178512 -1.354269 -0.860294 0.867695 -0.459623 0.189347 +0.082036 -1.492716 -0.881297 0.714616 -0.654227 -0.247611 +0.062177 -1.548939 -0.790061 0.766043 -0.618266 -0.175855 +0.062177 -1.548939 -0.790061 0.582972 -0.742236 -0.330500 +0.032314 -1.573539 -0.787490 0.491570 -0.802664 -0.337771 +0.082036 -1.492716 -0.881297 0.651097 -0.717495 -0.247533 +0.044385 -1.529981 -0.878195 0.330144 -0.836286 -0.437756 +0.043526 -1.502736 -0.920470 0.309241 -0.833947 -0.457059 +0.095598 -1.475422 -0.916070 0.642586 -0.755896 -0.125319 +-0.000017 -1.537104 -0.870659 0.056206 -0.858897 -0.509055 +-0.000017 -1.583737 -0.779092 0.121620 -0.894309 -0.430605 +-0.000017 -1.507587 -0.917663 0.059956 -0.845343 -0.530848 +0.130130 -1.431816 -0.909236 0.756876 -0.645283 -0.103675 +0.119215 -1.452959 -0.879041 0.720858 -0.662575 -0.203367 +0.232935 -1.184636 -1.172981 0.863226 0.104196 -0.493948 +0.262478 -1.180367 -1.120451 0.912544 0.070354 -0.402881 +0.228412 -1.270773 -1.165832 0.925217 -0.181320 -0.333312 +0.248806 -1.231756 -1.114913 0.947205 -0.270546 -0.172066 +0.212058 -1.089059 -1.151285 0.839213 0.313317 -0.444469 +0.243257 -1.109294 -1.101869 0.852521 0.335375 -0.400913 +0.019196 -1.594895 -0.641123 0.393888 -0.399213 0.827938 +0.048210 -1.589749 -0.652445 0.346680 -0.464872 0.814682 +0.018462 -1.572862 -0.630150 0.329917 -0.500776 0.800236 +0.042564 -1.569583 -0.636975 0.211180 -0.621257 0.754614 +0.017220 -1.546269 -0.609926 0.091910 -0.597608 0.796503 +0.057574 -1.545277 -0.610821 0.032811 -0.648945 0.760128 +0.060899 -1.501117 -0.582180 0.069607 -0.366628 0.927760 +0.024041 -1.503406 -0.579481 -0.014768 -0.309214 0.950878 +-0.000017 -1.507004 -0.582671 -0.008703 -0.415148 0.909712 +-0.000017 -1.547150 -0.608158 0.113254 -0.532522 0.838805 +-0.000017 -1.476035 -0.579618 -0.155060 0.158287 0.975142 +0.032725 -1.470149 -0.575474 -0.073611 0.302041 0.950449 +0.062696 -1.462112 -0.576113 -0.052045 0.474222 0.878866 +0.034457 -1.418122 -0.626023 -0.067139 0.564120 0.822959 +0.068962 -1.417705 -0.624797 -0.035698 0.596507 0.801814 +-0.000017 -1.419349 -0.627442 -0.106195 0.594731 0.796880 +0.035488 -1.329960 -0.670332 -0.058123 0.448845 0.891718 +-0.000017 -1.339257 -0.666214 -0.033247 0.442230 0.896285 +0.068040 -1.327512 -0.667823 -0.069733 0.439068 0.895744 +0.247080 -1.089240 -0.947536 0.982932 -0.155588 0.098164 +0.261441 -0.950653 -0.936834 0.986501 -0.163747 -0.001462 +0.241338 -1.101547 -0.904321 0.988692 -0.149787 -0.007156 +0.261829 -0.969024 -0.862849 0.980441 -0.189750 -0.052258 +0.275470 -0.919913 -0.839500 0.968994 -0.238567 -0.064319 +0.224168 -1.213435 -0.939482 0.965402 -0.238144 0.106236 +0.220566 -1.216669 -0.913999 0.960564 -0.266812 0.078283 +0.216387 -1.224037 -0.880489 0.954627 -0.297589 -0.011327 +0.244821 -1.124264 -0.861905 0.972957 -0.224317 -0.055113 +0.190478 -1.297658 -0.930004 0.885447 -0.293468 0.360361 +0.204202 -1.276883 -0.942053 0.880893 -0.257214 0.397327 +0.198484 -1.333706 -0.937192 0.549279 -0.175471 0.817008 +0.208750 -1.327152 -0.949713 0.916620 -0.270542 0.294304 +0.191269 -1.311910 -0.896540 0.830252 -0.500275 -0.245778 +0.190128 -1.294682 -0.840066 0.971939 -0.218796 0.086383 +0.178512 -1.354269 -0.860294 0.936711 -0.350039 0.006659 +0.179262 -1.351104 -0.883960 0.870083 -0.332445 -0.363918 +0.154512 -1.402559 -0.867532 0.852436 -0.518052 -0.070526 +0.161729 -1.386568 -0.896266 0.871447 -0.311587 -0.378805 +0.145069 -1.397383 -0.918884 0.975045 -0.204700 -0.085936 +0.156931 -1.380106 -0.899919 0.616919 0.120555 -0.777739 +0.144229 -1.389823 -0.917095 0.912502 0.150549 0.380361 +0.174074 -1.349980 -0.894637 0.630083 -0.182015 -0.754894 +0.175696 -1.319335 -0.902466 0.616281 -0.555601 -0.558127 +0.175093 -1.314950 -0.923527 0.609423 -0.658316 0.441840 +0.182783 -1.335078 -0.932330 0.315560 -0.182195 0.931250 +0.183244 -1.375734 -0.941167 0.728543 -0.485095 0.483640 +0.169463 -1.373555 -0.931681 0.427045 -0.083163 0.900398 +0.125424 -1.349364 -0.914963 0.949422 -0.313338 0.020439 +0.187896 -1.370655 -0.952735 0.829040 -0.557342 -0.045425 +0.184488 -1.353751 -1.012516 0.913977 -0.404281 -0.034678 +0.200128 -1.310606 -1.001052 0.916991 -0.396056 0.047620 +0.205313 -1.318320 -1.042482 0.883094 -0.438534 0.166834 +0.203321 -1.329595 -1.068720 0.620192 -0.783307 0.042324 +0.163428 -1.392704 -1.039889 0.797970 -0.602309 -0.021611 +0.215237 -1.295989 -1.027565 0.839186 -0.506033 0.199245 +0.210022 -1.325508 -1.096257 0.366051 -0.929312 -0.048850 +0.185016 -1.368596 -1.120970 0.754149 -0.656150 -0.026947 +0.162490 -1.393819 -0.950832 0.727543 -0.685505 0.027635 +0.147895 -1.405185 -0.938309 0.764402 -0.609578 0.210010 +0.130130 -1.431816 -0.909236 0.817884 -0.562628 -0.120479 +0.138628 -1.415715 -0.925182 0.872071 -0.487121 -0.046966 +0.119215 -1.452959 -0.879041 0.825370 -0.557091 -0.091726 +0.144216 -1.389224 -1.142150 0.323626 -0.721749 -0.611837 +0.122807 -1.432474 -1.061670 0.502365 -0.827056 -0.252203 +0.111983 -1.455975 -0.988007 0.607251 -0.779265 -0.154894 +0.115076 -1.457540 -0.963420 0.645628 -0.763335 -0.021992 +0.108948 -1.462815 -0.939119 0.648169 -0.761278 0.018221 +0.095598 -1.475422 -0.916070 0.647435 -0.747161 -0.150261 +0.082822 -1.405828 -1.147955 0.285196 -0.773232 -0.566370 +0.085390 -1.351693 -1.181174 0.203423 -0.534268 -0.820474 +0.148298 -1.343492 -1.172147 0.188463 -0.550347 -0.813387 +0.226916 -1.332009 -1.085243 -0.160133 -0.983429 -0.084994 +0.232787 -1.331807 -1.063047 -0.080643 -0.996279 0.030397 +0.068422 -1.451326 -1.066913 0.377519 -0.868762 -0.320520 +0.047971 -1.490109 -0.980232 0.437361 -0.895919 -0.077744 +0.052737 -1.482106 -1.004878 0.451365 -0.869342 -0.201281 +0.043526 -1.502736 -0.920470 0.461100 -0.827405 -0.320607 +0.045040 -1.490148 -0.950779 0.427742 -0.886638 -0.175810 +0.000000 0.690640 -0.766550 0.083511 0.531548 0.842901 +0.000000 0.583122 -0.715693 -0.130451 0.390084 0.911492 +0.008274 0.689589 -0.762612 0.125130 0.391939 0.911442 +0.009831 0.582357 -0.722762 0.573132 0.292757 0.765384 +0.000000 0.792848 -0.871132 0.429239 0.637745 0.639558 +-0.008275 0.689589 -0.762612 0.350114 0.531118 0.771578 +-0.020074 0.802988 -0.859710 0.575518 0.565618 0.590640 +-0.009831 0.582357 -0.722762 -0.078415 0.345235 0.935235 +0.000000 0.473072 -0.669559 -0.360995 0.408163 0.838502 +-0.042466 0.462186 -0.676207 -0.203483 0.426921 0.881098 +0.000000 0.362368 -0.606042 -0.224976 0.494455 0.839583 +-0.025789 0.687817 -0.748559 0.579702 0.419644 0.698458 +-0.059104 0.807325 -0.828836 0.546257 0.570138 0.613633 +-0.022530 0.582900 -0.720376 0.372846 0.219888 0.901463 +-0.073671 0.464847 -0.696580 0.054131 0.154441 0.986518 +-0.087118 0.775469 -0.767209 0.721483 0.558864 0.408820 +-0.037486 0.686148 -0.731377 0.793309 0.319706 0.518121 +-0.030152 0.581907 -0.713972 0.574630 -0.041534 0.817359 +-0.091850 0.479491 -0.699313 0.195414 0.022613 0.980460 +-0.110497 0.357001 -0.628471 -0.195038 0.507138 0.839507 +-0.047675 0.582939 -0.689279 0.845393 -0.123815 0.519596 +-0.103255 0.494590 -0.692424 0.681233 -0.400258 0.612957 +-0.116679 0.512235 -0.650594 0.759798 -0.474825 0.444127 +-0.070740 0.591315 -0.644639 0.873777 -0.227008 0.430095 +-0.051595 0.678974 -0.703427 0.887107 0.247807 0.389400 +-0.068726 0.667268 -0.647439 0.930431 0.175935 0.321474 +-0.088868 0.769612 -0.732977 0.826241 0.480255 0.294415 +-0.098672 0.741881 -0.649914 0.868274 0.398897 0.294926 +0.298690 -0.872468 -0.981866 0.861232 -0.493985 -0.119409 +0.250557 -0.893329 -1.103714 0.803384 -0.527433 -0.276386 +0.378254 -0.754824 -1.055511 0.821280 -0.444724 -0.357379 +0.315181 -0.764996 -1.175598 0.815775 -0.424816 -0.392483 +0.417389 -0.603646 -1.074460 0.895260 -0.038631 -0.443866 +0.352477 -0.606807 -1.199774 0.878490 -0.167214 -0.447543 +0.412246 -0.462044 -1.047188 0.879460 0.144002 -0.453667 +0.335016 -0.477144 -1.219440 0.893182 0.127510 -0.431238 +0.261441 -0.950653 -0.936834 0.965166 -0.254281 -0.061605 +0.241437 -0.975757 -1.025889 0.972289 -0.143433 -0.184610 +0.250818 -1.070818 -0.986752 0.998471 -0.041018 -0.037047 +0.247080 -1.089240 -0.947536 0.983391 -0.088145 0.158657 +0.233524 -1.041313 -1.070262 0.964188 0.178859 -0.195833 +0.249739 -1.082750 -1.018378 0.993758 -0.082950 -0.074588 +0.246504 -1.119261 -0.985145 0.827348 0.256706 0.499597 +0.249192 -1.146517 -0.975926 0.660126 0.067135 0.748149 +0.243257 -1.109294 -1.101869 0.940610 0.270076 -0.205699 +0.252678 -1.118911 -1.071416 0.993537 0.092280 0.066093 +0.238374 -1.125403 -1.004741 -0.348228 0.935244 -0.063683 +0.262478 -1.180367 -1.120451 0.998435 0.022897 0.051017 +0.253958 -1.187852 -1.077022 0.966160 -0.148754 0.210732 +0.244883 -1.193270 -1.045580 0.968097 -0.117796 0.221161 +0.248604 -1.153758 -1.051702 0.950081 0.052432 0.307567 +0.234110 -1.139745 -1.016009 0.915809 0.316766 0.246888 +0.234936 -1.155538 -1.017211 -0.975665 0.027170 -0.217578 +0.236887 -1.166535 -1.012875 0.665138 -0.731748 -0.148784 +0.327169 -0.847824 -0.782242 0.829935 -0.555632 -0.049807 +0.275470 -0.919913 -0.839500 0.869590 -0.493259 -0.022553 +0.397077 -0.294104 -1.040035 0.871306 0.011498 -0.490605 +0.317998 -0.316945 -1.171010 0.869610 0.082195 -0.486849 +0.390117 -0.124181 -1.050900 0.898058 -0.023549 -0.439246 +0.333440 -0.148889 -1.169196 0.889200 -0.028833 -0.456610 +0.392132 0.008478 -1.063792 0.882835 0.053351 -0.466643 +0.334864 -0.008152 -1.173440 0.891277 0.008764 -0.453375 +0.372005 0.173291 -1.062321 0.861340 0.188144 -0.471905 +0.316565 0.155536 -1.170591 0.872610 0.174303 -0.456256 +0.328173 0.316278 -1.060432 0.938331 0.145317 -0.313717 +0.284178 0.314571 -1.157604 0.888441 0.214083 -0.406006 +0.231478 -1.201274 -0.999141 0.967196 -0.248450 0.052955 +0.239514 -1.236328 -1.048406 0.959851 -0.051524 0.275738 +0.224168 -1.213435 -0.939482 0.944972 -0.298879 0.133038 +0.216812 -1.256261 -1.004349 0.920939 -0.258035 0.292044 +0.229302 -1.271132 -1.029667 0.734770 -0.018327 0.678069 +0.215237 -1.295989 -1.027565 0.533326 -0.376692 0.757408 +0.200128 -1.310606 -1.001052 0.981875 -0.148916 0.117238 +0.269315 -1.094963 -1.000722 -0.117342 0.805782 0.580471 +0.267256 -1.108005 -0.996575 0.651377 -0.072590 0.755274 +0.256752 -1.119221 -0.988089 0.575285 0.193383 0.794764 +0.249978 -1.105225 -1.022424 -0.751452 0.624332 -0.213376 +0.245774 -1.173403 -0.979229 0.676432 -0.566488 0.470670 +0.264580 -1.166326 -0.984473 0.581478 0.162648 0.797138 +0.258494 -1.145483 -0.981235 0.854153 0.184090 0.486347 +0.239167 -1.174720 -0.997346 0.142423 -0.945968 -0.291307 +0.265864 -1.184636 -1.016200 -0.313535 -0.947793 -0.058180 +0.285269 -1.182847 -0.993891 0.391598 -0.472427 0.789598 +0.248854 -1.170372 -1.033533 -0.614132 -0.658712 -0.434673 +0.241315 -1.130242 -1.036225 -0.885553 0.201567 -0.418529 +0.241855 -1.154453 -1.038826 -0.822110 -0.195842 -0.534585 +0.262764 -1.123355 -0.998650 0.887225 -0.151539 0.435738 +0.285763 -1.111916 -1.028553 0.764528 -0.362403 0.533068 +0.288573 -1.098594 -1.015810 0.685830 -0.196995 0.700593 +0.258619 -1.146066 -0.997343 0.890722 0.173522 0.420125 +0.269591 -1.163410 -0.996000 0.764519 0.539919 0.352133 +0.275650 -1.171798 -0.990842 0.571684 0.610951 0.547646 +0.292806 -1.167308 -1.027903 0.557452 0.697656 0.450025 +0.305709 -1.176263 -1.011915 0.526764 0.554880 0.643916 +0.312003 -1.163003 -1.057184 0.369826 0.619867 0.692094 +0.329523 -1.172598 -1.035929 0.354239 0.719317 0.597577 +0.338580 -1.146774 -1.069065 0.072299 0.422737 0.903364 +0.357730 -1.155275 -1.061677 0.283889 0.500282 0.818001 +0.348439 -1.131245 -1.076251 0.170741 0.088665 0.981318 +0.363280 -1.128177 -1.076717 0.196331 0.115188 0.973748 +0.248806 -1.231756 -1.114913 0.965488 -0.171123 0.196340 +0.241433 -1.230007 -1.081590 0.989962 -0.051495 0.131619 +0.239249 -1.257875 -1.047984 0.835927 0.338767 0.431813 +0.245950 -1.253788 -1.075520 0.898114 0.436682 0.051963 +0.246845 -1.260431 -1.101758 0.904770 0.380324 -0.191690 +0.332474 0.404321 -1.013368 0.993343 -0.091324 -0.070207 +0.360061 0.306779 -0.937631 0.914547 0.403588 0.026854 +0.303637 0.359237 -0.823789 0.952544 0.269371 0.141769 +0.337829 0.315369 -0.803507 0.766073 0.636948 0.086189 +0.346506 0.444275 -0.970240 0.932693 -0.359786 -0.025269 +0.316694 0.395121 -0.826608 0.949017 -0.302780 0.087693 +0.341636 0.537693 -1.091500 0.956131 -0.136411 -0.259242 +0.343043 0.675234 -1.105304 0.970776 0.109985 -0.213303 +0.316567 0.674269 -1.177092 0.937843 -0.043632 -0.344306 +0.314782 0.525202 -1.163291 0.962549 -0.092400 -0.254876 +0.204202 -1.276883 -0.942053 0.986262 -0.163929 0.020375 +0.208750 -1.327152 -0.949713 0.985454 0.109022 -0.130363 +0.205313 -1.318320 -1.042482 -0.010924 -0.795052 0.606443 +0.242641 -1.323309 -1.050722 0.101886 -0.611524 0.784639 +0.254410 -1.304698 -1.046883 0.440101 -0.146872 0.885856 +0.266277 -1.288375 -1.056593 0.681786 0.347347 0.643830 +0.269983 -1.278411 -1.076312 0.711865 0.683517 0.161411 +0.267838 -1.280775 -1.098341 0.565714 0.720670 -0.400752 +0.257984 -1.289274 -1.110665 0.274181 0.555918 -0.784717 +0.305364 -1.183834 -1.009540 0.459578 -0.736047 0.497014 +0.279820 -1.188245 -1.025279 -0.166661 -0.976836 -0.134223 +0.307100 -1.138480 -1.061830 0.506826 0.093010 0.857016 +0.285691 -1.140543 -1.030960 0.799903 0.113121 0.589372 +0.261805 -1.101313 -1.030666 -0.495932 0.794792 -0.349795 +0.279409 -1.091644 -1.009008 0.084789 0.934848 0.344776 +0.259265 -1.170908 -1.043556 -0.534575 -0.671104 -0.513662 +0.250970 -1.153046 -1.047842 -0.682829 -0.212688 -0.698934 +0.248197 -1.128193 -1.043317 -0.708654 0.312636 -0.632510 +0.372903 -1.126281 -1.083700 0.914892 0.346913 0.206458 +0.361278 -1.160513 -1.063353 0.921601 -0.357889 0.150226 +0.305015 -1.109486 -1.057336 0.569036 -0.419974 0.706979 +0.351163 -1.098161 -1.069294 0.736071 0.523862 0.428682 +0.348203 -1.105637 -1.066348 0.415283 -0.289559 0.862378 +0.332497 -1.106033 -1.077487 -0.102710 0.624481 -0.774257 +0.355910 -1.129597 -1.088021 0.088969 -0.151206 -0.984490 +0.302519 -1.120087 -1.073390 -0.342571 0.330690 -0.879369 +0.311070 -1.142928 -1.084190 -0.251800 -0.114754 -0.960952 +0.311638 -1.094821 -1.038957 0.596041 -0.455771 0.661066 +0.310419 -1.086322 -1.035124 0.468103 0.798186 0.379181 +0.336180 -1.117070 -1.070676 0.217165 -0.290676 0.931851 +0.331961 -1.180666 -1.031806 0.725049 -0.488773 0.485185 +0.343269 -1.163795 -1.072610 0.214611 -0.753495 -0.621440 +0.304348 -1.184538 -1.045493 0.030342 -0.934656 -0.354257 +0.310055 -1.161948 -1.072657 -0.128742 -0.566808 -0.813728 +0.269765 -1.171450 -1.053666 -0.360501 -0.692727 -0.624634 +0.263232 -1.151909 -1.060025 -0.524795 -0.206638 -0.825767 +0.259996 -1.124678 -1.055475 -0.600324 0.334949 -0.726237 +0.287581 -1.097294 -1.050728 -0.349338 0.781348 -0.517164 +0.388560 0.573610 -0.906970 0.999205 0.038918 -0.008631 +0.380000 0.479387 -0.850625 0.948167 -0.314655 -0.044401 +0.311188 0.429845 -0.743750 0.855672 -0.507549 0.101094 +0.343117 0.533016 -0.669788 0.981688 0.011891 0.190122 +0.346101 0.613384 -0.684474 0.958784 0.226629 0.171383 +0.315812 0.762780 -1.086902 0.869631 0.488062 -0.074413 +0.362855 0.685884 -0.934781 0.941817 0.336066 0.006341 +0.251929 0.841469 -1.034970 0.632483 0.774405 0.016214 +0.310224 0.786234 -0.897804 0.764913 0.643963 -0.014852 +0.257483 0.826472 -0.861991 0.502394 0.856290 0.119866 +0.310846 0.688865 -0.685292 0.890389 0.417832 0.180620 +0.232787 -1.331807 -1.063047 -0.208906 -0.891673 0.401594 +0.268365 -1.346147 -1.071792 -0.171803 -0.838318 0.517404 +0.286550 -1.340647 -1.068406 0.292461 -0.522466 0.800934 +0.303166 -1.329213 -1.075417 0.692345 -0.058235 0.719212 +0.308512 -1.316096 -1.089215 0.854075 0.413328 0.315779 +0.301198 -1.305795 -1.104480 0.688544 0.693634 -0.211611 +0.285145 -1.302507 -1.116210 0.282760 0.672985 -0.683475 +0.268578 -1.308589 -1.120256 -0.046225 0.501322 -0.864025 +0.203321 -1.329595 -1.068720 -0.144933 -0.905023 0.399910 +0.254542 -1.344734 -1.085416 -0.503013 -0.864086 0.018250 +0.274666 -1.359736 -1.099968 -0.524116 -0.820674 0.227590 +0.288390 -1.360377 -1.091232 -0.052882 -0.820122 0.569740 +0.303621 -1.354242 -1.090079 0.500846 -0.564815 0.655849 +0.314608 -1.343556 -1.097327 0.902759 -0.145731 0.404708 +0.316874 -1.332587 -1.110568 0.959480 0.277766 -0.047366 +0.309308 -1.325785 -1.124591 0.662541 0.549540 -0.508966 +0.294958 -1.325751 -1.133573 0.176502 0.567114 -0.804505 +0.279678 -1.332219 -1.133962 -0.162407 0.436880 -0.884737 +0.191441 0.840666 -0.814931 0.369792 0.895137 0.248964 +0.172004 0.879637 -0.926179 0.435123 0.886904 0.155143 +0.267416 -1.352851 -1.113071 -0.711624 -0.701098 -0.045296 +0.279987 -1.368770 -1.123823 -0.726580 -0.638507 0.253754 +0.289240 -1.375075 -1.116338 -0.527158 -0.686185 0.501253 +0.302076 -1.379138 -1.116024 0.038248 -0.729401 0.683017 +0.313594 -1.379406 -1.122999 0.628951 -0.574125 0.524214 +0.319393 -1.375778 -1.134600 0.960594 -0.264435 0.085635 +0.317259 -1.369638 -1.146396 0.935311 0.080790 -0.344480 +0.308007 -1.363333 -1.153881 0.467976 0.504713 -0.725440 +0.295170 -1.359270 -1.154195 0.183759 0.515924 -0.836693 +0.226916 -1.332009 -1.085243 -0.439995 -0.865074 -0.240937 +0.249879 -1.335757 -1.102068 -0.544320 -0.771618 -0.329121 +0.282051 -1.390649 -1.140099 -0.757970 -0.416288 0.502181 +0.287698 -1.399218 -1.137627 -0.443013 -0.572202 0.690162 +0.294956 -1.406136 -1.140856 0.183325 -0.696257 0.693988 +0.301081 -1.408959 -1.148293 0.714398 -0.609838 0.343123 +0.303994 -1.406916 -1.157166 0.923949 -0.343429 -0.168447 +0.302777 -1.400832 -1.164291 0.910826 -0.223920 -0.346780 +0.230621 -1.322045 -1.104962 -0.465113 -0.751862 -0.467305 +0.144773 -0.369613 -0.521976 0.521828 0.061276 0.850847 +0.229770 -0.368127 -0.574212 0.445918 -0.004395 0.895063 +0.163313 -0.268688 -0.540615 0.445918 -0.004395 0.895063 +0.305341 -0.258291 -0.595608 0.364643 -0.070014 0.928511 +0.263580 0.140392 -1.261915 0.463632 0.082094 -0.882216 +0.276410 -0.024242 -1.265942 0.523653 0.085940 -0.847586 +0.121794 0.126862 -1.337687 0.465797 0.117416 -0.877067 +0.126253 -0.069033 -1.371295 0.582573 0.146614 -0.799445 +0.108528 0.360089 -1.304915 0.395611 0.149826 -0.906115 +0.229655 0.334608 -1.256244 0.428548 0.128128 -0.894388 +0.268996 -0.166749 -1.278754 0.632808 0.104040 -0.767287 +0.121475 -0.199653 -1.417969 0.686186 0.123558 -0.716856 +0.236095 -0.336440 -1.315803 0.706301 0.065363 -0.704887 +0.108530 -0.355331 -1.455653 0.727833 0.103571 -0.677888 +0.236095 -0.336440 -1.315803 0.708978 0.205884 -0.674509 +0.219620 -0.509012 -1.385795 0.678572 0.165171 -0.715723 +0.108530 -0.355331 -1.455653 0.678572 0.165171 -0.715723 +0.114572 -0.524305 -1.478219 0.645261 0.123750 -0.753873 +0.093267 0.537123 -1.340819 -0.138003 0.068851 -0.988036 +0.000000 0.531584 -1.328178 0.063134 -0.071490 -0.995441 +0.078983 0.672760 -1.329372 0.157706 0.033446 -0.986920 +0.038019 0.674176 -1.342369 0.230372 0.013309 -0.973012 +0.000000 0.675576 -1.343699 0.028893 -0.009968 -0.999533 +0.000000 0.725216 -1.341540 0.004020 0.071121 -0.997460 +0.028482 0.725216 -1.340985 0.136871 0.082440 -0.987153 +0.060854 0.725216 -1.324017 0.383738 0.155604 -0.910238 +-0.028482 0.725216 -1.340985 -0.019302 0.135692 -0.990563 +-0.027126 0.812922 -1.328997 -0.314978 0.062121 -0.947064 +0.000000 0.812923 -1.340139 0.000000 0.026585 -0.999647 +-0.025062 0.911391 -1.323454 -0.455667 0.031140 -0.889605 +0.000000 0.911391 -1.336474 0.000000 0.042160 -0.999111 +0.027126 0.812922 -1.328997 0.314978 0.062121 -0.947064 +0.000000 0.991296 -1.334681 -0.099392 0.018440 -0.994877 +0.025062 0.911391 -1.323454 0.455667 0.031140 -0.889605 +0.023843 0.991295 -1.322813 0.445563 0.013978 -0.895142 +-0.023843 0.991295 -1.322813 -0.589910 0.011979 -0.807380 +0.000000 1.075632 -1.333278 -0.430226 0.017000 -0.902561 +-0.023086 1.075631 -1.322514 -0.723055 0.019230 -0.690523 +0.000000 1.166052 -1.330374 -0.410519 0.027016 -0.911452 +-0.020764 1.166052 -1.321185 -0.709049 0.026115 -0.704676 +0.000000 1.253848 -1.327673 -0.381797 0.017721 -0.924076 +-0.033219 1.075631 -1.297518 -0.999821 0.018543 -0.003890 +-0.033976 0.991295 -1.297518 -0.990970 0.009364 -0.133759 +-0.023086 1.075631 -1.272521 -0.758387 0.018586 0.651539 +-0.023843 0.991295 -1.272223 -0.709153 0.000612 0.705055 +-0.019217 1.253847 -1.320011 -0.700674 0.017142 -0.713276 +0.000000 1.349349 -1.327047 -0.406618 0.015636 -0.913464 +-0.030897 1.166052 -1.297518 -0.999700 0.023654 -0.006377 +0.000000 1.075632 -1.258652 -0.518343 0.019264 0.854956 +-0.020764 1.166052 -1.273851 -0.754054 0.023760 0.656382 +0.000000 0.991296 -1.257709 -0.518305 -0.001554 0.855195 +0.000000 0.911391 -1.259761 -0.483798 0.005617 0.875162 +-0.022481 0.911391 -1.271582 -0.486695 0.019337 0.873358 +0.000000 0.812923 -1.255352 -0.497166 0.029422 0.867156 +-0.029112 0.812922 -1.273484 -0.528580 0.019203 0.848666 +-0.029351 1.253847 -1.297518 -0.999854 0.015151 -0.007878 +0.000000 1.166052 -1.261031 -0.513665 0.024852 0.857631 +-0.019217 1.253847 -1.275025 -0.739203 0.020009 0.673186 +-0.018443 1.349348 -1.318398 -0.710578 0.023155 -0.703238 +0.000000 1.442863 -1.324767 -0.449778 0.033099 -0.892527 +-0.028576 1.349348 -1.297518 -0.999671 0.023575 -0.010084 +0.000000 1.253848 -1.264209 -0.487623 0.023695 0.872733 +-0.018443 1.349348 -1.276638 -0.722139 0.026806 0.691228 +-0.015295 1.442862 -1.316786 -0.712366 0.043591 -0.700453 +0.000000 1.519330 -1.320764 -0.478030 0.062784 -0.876097 +-0.025428 1.442862 -1.297518 -0.998992 0.041707 -0.016593 +0.000000 1.349350 -1.266484 -0.482657 0.027709 0.875371 +-0.015295 1.442862 -1.278250 -0.705578 0.041854 0.707395 +-0.012210 1.519316 -1.313955 -0.707251 0.074857 -0.702988 +0.000000 1.584920 -1.313976 -0.525223 0.180011 -0.831707 +-0.007202 1.584741 -1.309190 -0.724131 0.195871 -0.661263 +0.000000 1.622242 -1.297518 -0.893076 0.449905 0.000013 +0.000000 1.584920 -1.281061 -0.543125 0.225448 0.808819 +-0.007202 1.584740 -1.285847 -0.663513 0.198677 0.721303 +-0.015217 1.584564 -1.297518 -0.967707 0.219246 0.124396 +-0.022343 1.519310 -1.297518 -0.996622 0.079875 -0.019073 +0.000000 1.442863 -1.269792 -0.509986 0.038444 0.859323 +-0.012210 1.519316 -1.281081 -0.704258 0.074669 0.706007 +0.000000 1.519330 -1.272790 -0.557861 0.079860 0.826083 +0.229770 -0.368127 -0.574212 0.625354 0.168151 0.762009 +0.348259 -0.357136 -0.682947 0.719697 0.083714 0.689223 +0.305341 -0.258291 -0.595608 0.616566 -0.188544 0.764393 +0.390662 -0.263803 -0.714595 0.809996 -0.172247 0.560569 +0.408121 -0.129847 -0.708110 0.849486 -0.010222 0.527513 +0.334028 -0.151073 -0.594810 0.640147 -0.076359 0.764448 +0.163313 -0.268688 -0.540615 0.365756 -0.105031 0.924765 +0.173069 -0.171989 -0.533491 0.365030 -0.094204 0.926217 +0.401509 0.019700 -0.719666 0.852924 0.151007 0.499718 +0.337591 0.012575 -0.608417 0.746279 0.149665 0.648589 +0.186971 -0.445619 -0.537279 -0.098541 0.893629 0.437855 +0.338005 -0.375625 -0.651199 0.471654 0.774706 0.421157 +0.317899 0.220593 -0.663392 0.636941 0.394015 0.662615 +0.372288 0.218413 -0.760127 0.829740 0.301488 0.469720 +0.181052 0.003963 -0.522829 0.456971 0.118554 0.881546 +0.219224 0.341114 -0.687039 0.527205 0.605559 0.596116 +0.337829 0.315369 -0.803507 0.629976 0.631413 0.452159 +0.157486 0.215574 -0.562074 0.482479 0.411265 0.773353 +0.303637 0.359237 -0.823789 0.701341 0.041246 0.711631 +0.193934 0.374098 -0.718043 0.672829 0.416328 0.611532 +0.316694 0.395121 -0.826608 0.584191 -0.559076 0.588350 +0.194984 0.389910 -0.710710 0.554804 -0.555641 0.619238 +0.323346 -0.382968 -0.595644 0.079091 0.992845 0.089462 +0.405733 -0.421712 -0.714452 0.596425 0.793285 0.122380 +0.396773 -0.408556 -0.803304 0.598110 0.799310 0.058036 +0.210664 -0.440016 -0.501884 -0.385861 0.915372 0.114913 +0.325815 -0.384064 -0.553484 -0.117163 0.989441 0.085318 +0.210983 -0.443751 -0.483240 -0.359252 0.913856 0.189222 +0.391453 -0.418047 -0.607499 0.459747 0.887942 0.013822 +0.110497 0.357001 -0.628471 0.466506 0.498142 0.730908 +0.311188 0.429845 -0.743750 0.384860 -0.799763 0.460719 +0.193418 0.414036 -0.679360 0.360958 -0.793368 0.490181 +0.291123 0.470982 -0.647226 0.509474 -0.743804 0.432657 +0.196093 0.452835 -0.612980 0.338413 -0.840304 0.423517 +0.266554 0.508384 -0.555996 0.474387 -0.774569 0.418329 +0.200296 0.489186 -0.533589 0.371833 -0.851326 0.370114 +0.343117 0.533016 -0.669788 0.946207 -0.148915 0.287257 +0.318289 0.563922 -0.566455 0.867262 -0.358627 0.345316 +0.346101 0.613384 -0.684474 0.938336 0.269938 0.216007 +0.311358 0.632463 -0.562152 0.960617 0.155920 0.230010 +0.310846 0.688865 -0.685292 0.847324 0.498279 0.183740 +0.290660 0.682530 -0.558843 0.861641 0.476629 0.174355 +0.275723 0.755235 -0.676234 0.605431 0.733184 0.309669 +0.263180 0.713418 -0.550893 0.708539 0.661757 0.245052 +0.228561 0.777364 -0.667726 0.449092 0.828611 0.334246 +0.220027 0.731594 -0.542794 0.433750 0.838582 0.329609 +0.000000 -0.820987 -0.477658 0.302497 -0.509654 0.805449 +0.000000 -0.882034 -0.516286 0.319041 -0.542087 0.777402 +0.080293 -0.814335 -0.503604 0.389750 -0.527089 0.755163 +0.066691 -0.876853 -0.541093 0.466128 -0.571736 0.675161 +0.188531 -0.803520 -0.548481 0.359673 -0.585726 0.726334 +0.130931 -0.873717 -0.601270 0.506900 -0.603293 0.615703 +0.106014 -0.926096 -0.629367 0.548687 -0.380569 0.744386 +0.054010 -0.924554 -0.576161 0.533009 -0.542973 0.648908 +0.000000 -0.931320 -0.554331 0.342424 -0.595835 0.726448 +0.093092 -0.998740 -0.644095 0.459926 -0.113140 0.880720 +0.171366 -1.036528 -0.683604 0.465137 -0.093144 0.880325 +0.198022 -0.974045 -0.698088 0.541430 -0.147373 0.827728 +0.084065 -1.085169 -0.641995 0.407211 0.165371 0.898238 +0.134085 -1.124052 -0.661652 0.440368 0.188158 0.877880 +0.139670 -0.729077 -0.486843 0.437952 -0.307618 0.844730 +0.075642 -0.735415 -0.462425 0.362015 -0.383036 0.849840 +0.218263 -0.890110 -0.686509 0.514962 -0.417311 0.748776 +0.045699 -0.984531 -0.606911 0.596053 -0.279819 0.752610 +0.155468 -1.236804 -0.630819 0.462097 0.147331 0.874506 +0.201473 -1.208949 -0.656278 0.535988 0.026057 0.843823 +0.044879 -1.066202 -0.622145 0.512264 -0.014685 0.858702 +0.139402 -1.274319 -0.619443 0.682363 -0.100216 0.724111 +0.106292 -1.214490 -0.609168 0.469728 0.263475 0.842577 +0.028430 -1.191998 -0.592604 0.331738 0.270534 0.903748 +0.072683 -1.196973 -0.602534 0.285708 0.348718 0.892618 +0.107871 -1.323799 -0.578042 0.831398 -0.065902 0.551756 +0.127010 -1.303758 -0.615782 0.848695 -0.526875 0.046037 +0.101575 -1.353245 -0.577932 0.878926 -0.425859 0.214786 +0.141154 -1.289671 -0.632284 0.284496 -0.687509 0.668127 +0.217239 -1.235284 -0.685585 0.778468 -0.177402 0.602093 +0.164410 -1.289065 -0.635710 0.398839 0.046729 0.915830 +0.161549 -1.276360 -0.634034 0.398166 -0.178562 0.899766 +0.163755 -1.303910 -0.634987 0.646679 0.014569 0.762623 +0.198106 -1.282808 -0.684246 0.859140 -0.236890 0.453609 +0.160675 -1.327495 -0.631884 0.815560 -0.036226 0.577537 +0.181027 -1.327258 -0.684930 0.934363 -0.313721 0.168949 +0.158337 -1.364142 -0.622466 0.869381 -0.145043 0.472377 +0.154497 -1.380270 -0.678829 0.929443 -0.367955 -0.027304 +0.061988 -1.284424 -0.560729 0.267470 0.367239 0.890840 +0.083975 -1.293200 -0.566737 0.508683 0.276170 0.815458 +0.143365 -1.414398 -0.669677 0.950203 -0.311571 -0.006078 +0.135294 -1.430873 -0.717779 0.947524 -0.304022 -0.098835 +0.144574 -1.406805 -0.621260 0.862880 -0.272552 0.425621 +0.129576 -1.405361 -0.603754 0.377867 0.080825 0.922325 +0.139376 -1.362009 -0.611108 0.173088 0.140189 0.974878 +0.072233 -0.668912 -0.433957 0.537359 -0.121704 0.834526 +0.130595 -0.640555 -0.478463 0.402414 0.070315 0.912754 +0.143894 -1.296556 -0.636116 -0.178994 -0.012784 0.983767 +0.146131 -1.308268 -0.627509 -0.351591 0.353222 0.866959 +0.145445 -1.326647 -0.619138 0.191628 0.257689 0.947035 +0.132645 -1.361377 -0.611443 -0.498868 0.310691 0.809075 +0.139083 -1.326727 -0.623711 -0.626290 0.349117 0.697050 +0.122685 -1.405695 -0.604309 -0.214586 0.354508 0.910097 +0.118962 -1.437387 -0.596255 0.699948 -0.139712 0.700395 +0.128445 -1.442977 -0.627141 0.914997 -0.287825 0.282732 +0.125944 -1.491134 -0.642916 0.948998 -0.244915 0.198541 +0.115440 -1.495687 -0.619527 0.778850 -0.363011 0.511484 +0.119194 -1.324339 -0.660955 -0.522894 0.398764 0.753372 +0.118120 -1.278789 -0.677453 -0.729447 -0.125026 0.672515 +0.138638 -1.308886 -0.637077 -0.805129 0.170672 0.568013 +0.134660 -1.297916 -0.641700 -0.740374 -0.405585 0.536047 +0.129485 -1.292252 -0.638544 -0.246744 -0.928812 -0.276453 +0.089667 -1.497634 -0.594454 0.501498 -0.323117 0.802555 +0.091568 -1.447681 -0.580916 0.045685 0.346884 0.936795 +0.096465 -1.343108 -0.564166 0.763581 -0.026697 0.645160 +0.072713 -1.377240 -0.548504 0.672760 -0.532612 0.513535 +0.088895 -1.370848 -0.574027 0.441650 -0.806378 -0.393318 +0.079852 -1.324992 -0.553916 0.533730 0.271093 0.801025 +0.026260 -1.280054 -0.556299 0.182762 0.381391 0.906167 +0.055126 -1.320242 -0.544940 0.270332 0.321042 0.907663 +0.071629 -1.379708 -0.565028 0.249842 -0.888289 -0.385386 +0.074056 -1.339260 -0.590221 -0.111140 -0.538403 -0.835327 +0.111616 -1.327029 -0.608226 0.321276 -0.688704 -0.649976 +0.107044 -1.541398 -0.649263 0.793218 -0.559099 0.241275 +0.114816 -1.528464 -0.668639 0.879766 -0.462867 0.108473 +0.085495 -1.544567 -0.622349 0.485634 -0.671105 0.560159 +0.156650 -1.356212 -0.761539 0.916740 -0.380221 -0.122554 +0.131509 -1.409096 -0.777987 0.926027 -0.317579 -0.204004 +0.120670 -1.476615 -0.732980 0.951799 -0.255756 -0.169316 +0.103226 -1.263748 -0.674458 -0.635152 -0.752882 0.172483 +0.132940 -1.443241 -0.645172 0.969703 -0.220537 0.105069 +0.132277 -1.445773 -0.698382 0.974045 -0.211133 -0.081608 +0.103408 -1.413538 -0.607254 -0.387582 0.586059 0.711558 +0.081666 -1.289704 -0.623371 -0.089859 -0.589101 -0.803047 +0.107095 -1.521984 -0.746441 0.894077 -0.308566 -0.324673 +0.111725 -1.457935 -0.786106 0.908479 -0.285657 -0.305067 +0.091704 -1.556855 -0.667292 0.629621 -0.686802 0.363153 +0.101380 -1.557837 -0.680852 0.762316 -0.494111 0.418006 +0.070546 -1.562914 -0.651884 0.440872 -0.751348 0.491028 +0.023249 -1.315241 -0.541154 0.135504 0.299456 0.944439 +0.050513 -1.365189 -0.530957 0.319701 -0.009112 0.947475 +0.018619 -1.370303 -0.523921 0.180053 0.001879 0.983655 +0.133691 -1.465766 -0.673240 0.986414 -0.156159 -0.051013 +0.120564 -1.513026 -0.684932 0.958523 -0.284348 0.019494 +0.107642 -1.558038 -0.689610 0.827835 -0.485500 0.281032 +0.082730 -1.589562 -0.687034 0.679627 -0.720555 0.137504 +0.077701 -1.575456 -0.670632 0.609785 -0.530034 0.589259 +0.042564 -1.569583 -0.636975 0.517554 -0.604675 0.605397 +0.048210 -1.589749 -0.652445 0.526037 -0.611964 0.590581 +0.077998 -1.352136 -0.542918 0.559656 0.052270 0.827075 +0.100389 -1.255747 -0.653954 -0.329039 -0.825654 -0.458288 +0.070074 -1.244802 -0.663809 -0.323171 -0.942167 -0.088776 +0.070992 -1.247380 -0.686623 -0.429352 -0.649910 0.627116 +0.042243 -1.393100 -0.536856 0.399713 -0.816629 0.416349 +0.039635 -1.391853 -0.554379 0.136670 -0.839556 -0.525802 +0.057574 -1.545277 -0.610821 0.332911 -0.745233 0.577752 +0.062696 -1.462112 -0.576113 0.170326 0.123501 0.977618 +0.068962 -1.417705 -0.624797 -0.318850 0.590360 0.741491 +0.044892 -1.348548 -0.584637 0.051457 -0.575851 -0.815934 +0.054464 -1.294657 -0.623404 0.086984 -0.644814 -0.759374 +0.060899 -1.501117 -0.582180 0.382779 -0.401480 0.832042 +0.068040 -1.327512 -0.667823 -0.153558 0.437919 0.885803 +0.069671 -1.278198 -0.690989 -0.250673 0.192119 0.948817 +0.078161 -1.582310 -0.717670 0.677907 -0.687491 -0.260381 +0.049203 -1.606319 -0.712284 0.471614 -0.868230 -0.154133 +0.049598 -1.607373 -0.680832 0.408683 -0.871532 0.270943 +0.020583 -1.618934 -0.702387 0.243196 -0.969436 -0.032392 +0.022198 -1.613117 -0.731314 0.231042 -0.896422 -0.378216 +0.053269 -1.597447 -0.738356 0.527741 -0.755000 -0.389184 +0.086377 -1.560745 -0.743683 0.722076 -0.553183 -0.415446 +0.108763 -1.541432 -0.725267 0.869420 -0.423583 -0.254337 +0.119345 -1.495462 -0.712270 0.963477 -0.200933 -0.177025 +0.152043 -0.627012 -0.461232 -0.879135 -0.028876 0.475698 +0.131915 -0.528796 -0.497689 0.149555 0.090672 0.984587 +0.155519 -0.617108 -0.446525 -0.957518 -0.053155 0.283434 +0.148618 -0.528786 -0.462029 -0.940818 -0.024817 0.338002 +0.166063 -0.601729 -0.399052 -0.921102 -0.009043 0.389216 +0.153661 -0.526172 -0.447830 -0.964127 -0.012943 0.265126 +0.090467 -0.527020 -0.448806 0.713601 0.056573 0.698265 +0.122304 -0.438939 -0.494920 0.663049 0.047898 0.747042 +0.186971 -0.445619 -0.537279 0.550035 0.033116 0.834484 +0.036703 -1.235823 -0.673595 -0.235733 -0.967222 0.094405 +0.036792 -1.238117 -0.697304 -0.252575 -0.793214 0.554091 +0.013712 -1.402167 -0.533006 0.324194 -0.819410 0.472721 +0.037356 -1.272798 -0.701558 -0.209313 0.128834 0.969325 +0.035488 -1.329960 -0.670332 -0.083344 0.491624 0.866810 +0.013895 -1.398495 -0.548833 0.249013 -0.955351 -0.159047 +0.032314 -1.573539 -0.787490 0.308004 -0.778247 -0.547234 +0.062177 -1.548939 -0.790061 0.612686 -0.604154 -0.509524 +0.091171 -1.508123 -0.790433 0.786768 -0.426097 -0.446585 +0.021073 -1.614909 -0.670898 0.260953 -0.877577 0.402196 +-0.000017 -1.270105 -0.707808 -0.112785 0.293520 0.949276 +-0.000017 -1.233837 -0.701840 -0.177757 -0.515776 0.838080 +-0.000017 -1.616928 -0.728156 0.112827 -0.944493 -0.308549 +-0.000017 -1.583737 -0.779092 0.090094 -0.829132 -0.551746 +-0.000017 -1.339257 -0.666214 -0.035554 0.515106 0.856389 +-0.000017 -1.231392 -0.679250 -0.130735 -0.986276 0.100836 +-0.000017 -1.622242 -0.698873 0.152394 -0.987650 -0.036376 +-0.000017 -1.618749 -0.666344 0.223215 -0.930502 0.290414 +-0.000017 -1.312755 -0.538588 0.133416 0.262076 0.955781 +-0.000017 -1.370935 -0.522635 0.094730 0.278252 0.955825 +0.019196 -1.594895 -0.641123 0.251325 -0.684342 0.684479 +-0.000017 -1.596067 -0.638937 0.172948 -0.707463 0.685263 +0.166408 -0.689952 -0.448651 -0.880088 -0.108466 0.462256 +0.156180 -0.709903 -0.464735 -0.803508 -0.065109 0.591722 +0.165710 -0.520333 -0.397867 -0.915783 -0.009818 0.401552 +0.178825 -0.521027 -0.378250 -0.842461 -0.005640 0.538728 +0.179266 -0.601335 -0.377465 -0.853093 0.000415 0.521759 +0.018462 -1.572862 -0.630150 0.251718 -0.424713 0.869630 +-0.000017 -1.574039 -0.625376 0.190362 -0.473816 0.859803 +0.201975 0.676339 -1.300758 0.644574 0.170370 -0.745318 +0.187521 0.788019 -1.271414 0.631059 0.267877 -0.728016 +0.284059 0.669572 -1.231316 0.681880 0.135437 -0.718816 +0.234621 0.787648 -1.231194 0.627624 0.263541 -0.732554 +0.276877 0.518284 -1.223774 0.780730 -0.068029 -0.621154 +0.208275 0.514568 -1.309593 0.719129 -0.000681 -0.694876 +0.000000 0.376398 -1.337871 0.147506 0.003599 -0.989055 +0.108528 0.360089 -1.304915 0.275882 -0.063229 -0.959109 +0.000000 0.123007 -1.369700 0.276043 0.133725 -0.951797 +0.121794 0.126862 -1.337687 0.246986 0.148600 -0.957557 +0.229655 0.334608 -1.256244 0.319654 -0.234204 -0.918134 +0.208275 0.514568 -1.309593 0.275389 -0.116415 -0.954258 +0.093267 0.537123 -1.340819 0.172735 -0.023427 -0.984690 +0.000000 0.531584 -1.328178 -0.137651 0.061746 -0.988554 +0.078983 0.672760 -1.329372 0.316351 0.305148 -0.898224 +0.201975 0.676339 -1.300758 0.236351 0.171688 -0.956379 +0.060854 0.725216 -1.324017 0.961962 0.251319 -0.107089 +0.049248 0.745544 -1.293766 0.231847 0.505786 -0.830920 +0.081137 0.746770 -1.310106 -0.048970 0.296172 -0.953879 +0.083203 0.776490 -1.299485 -0.162608 0.409927 -0.897507 +0.187521 0.788019 -1.271414 0.250929 0.544439 -0.800388 +0.085151 0.801816 -1.283248 -0.131644 0.651141 -0.747453 +0.234621 0.787648 -1.231194 0.415295 0.773236 -0.479203 +0.115223 0.870956 -1.200244 0.141682 0.788102 -0.599017 +0.031367 0.777065 -1.277087 -0.348189 0.430559 -0.832697 +0.039245 0.812922 -1.297518 0.974353 0.135026 -0.180012 +0.027126 0.812922 -1.328997 0.809499 0.173340 -0.560950 +0.028482 0.725216 -1.340985 0.460477 0.127198 -0.878511 +0.029112 0.812922 -1.273484 0.938439 0.164670 0.303670 +0.025062 0.911391 -1.323454 0.931626 0.039018 -0.361319 +0.035195 0.911391 -1.297518 0.930753 0.038282 -0.363638 +0.000000 0.798667 -1.251145 -0.299097 0.610391 -0.733460 +0.000000 0.842631 -1.203002 -0.225651 0.750493 -0.621162 +0.250557 -0.893329 -1.103714 0.737084 -0.572401 -0.359254 +0.163891 -0.925097 -1.230911 0.727208 -0.541407 -0.421956 +0.315181 -0.764996 -1.175598 0.760713 -0.419445 -0.495360 +0.198746 -0.792401 -1.318974 0.744800 -0.409984 -0.526484 +0.215624 -0.638821 -1.379687 0.790148 -0.211487 -0.575274 +0.352477 -0.606807 -1.199774 0.808999 -0.100696 -0.579121 +0.219620 -0.509012 -1.385795 0.808235 0.043899 -0.587221 +0.335016 -0.477144 -1.219440 0.819375 0.142017 -0.555388 +0.236095 -0.336440 -1.315803 0.841276 0.113538 -0.528549 +0.317998 -0.316945 -1.171010 0.865330 0.034616 -0.500006 +0.268996 -0.166749 -1.278754 0.866841 -0.045564 -0.496498 +0.333440 -0.148889 -1.169196 0.858436 -0.032665 -0.511880 +0.276410 -0.024242 -1.265942 0.849437 0.018228 -0.527375 +0.334864 -0.008152 -1.173440 0.846801 0.052788 -0.529284 +0.263580 0.140392 -1.261915 0.844216 0.114997 -0.523522 +0.316565 0.155536 -1.170591 0.857125 0.160227 -0.489555 +0.229655 0.334608 -1.256244 0.849671 0.038792 -0.525885 +0.284178 0.314571 -1.157604 0.880720 -0.049918 -0.471000 +0.276877 0.518284 -1.223774 0.834422 -0.106711 -0.540697 +0.208275 0.514568 -1.309593 0.779783 -0.090980 -0.619404 +0.284059 0.669572 -1.231316 0.845794 0.148636 -0.512387 +0.314782 0.525202 -1.163291 0.865963 -0.100943 -0.489815 +0.316567 0.674269 -1.177092 0.864274 0.258473 -0.431534 +0.328173 0.316278 -1.060432 0.902669 -0.142122 -0.406190 +0.234621 0.787648 -1.231194 0.815203 0.341806 -0.467560 +0.279601 0.779780 -1.158522 0.823280 0.357340 -0.441041 +0.343043 0.675234 -1.105304 0.879853 0.342854 -0.329106 +0.315812 0.762780 -1.086902 0.871621 0.353479 -0.339602 +0.113353 -0.829547 -1.389298 0.532833 -0.522432 -0.665698 +0.077967 -0.944955 -1.301869 0.380628 -0.575787 -0.723596 +0.000000 -0.850805 -1.401005 0.161013 -0.649310 -0.743284 +0.000000 -0.946150 -1.314178 0.132503 -0.611708 -0.779908 +0.163891 -0.925097 -1.230911 0.709708 -0.341212 -0.616352 +0.198746 -0.792401 -1.318974 0.653318 -0.444131 -0.613125 +0.215624 -0.638821 -1.379687 0.644376 -0.341333 -0.684303 +0.117833 -0.677125 -1.452666 0.662838 -0.319893 -0.676990 +0.063836 -1.006456 -1.256372 0.332632 -0.523102 -0.784679 +0.155712 -1.010450 -1.208942 0.642905 -0.324041 -0.694025 +0.000000 -1.014367 -1.268361 0.178733 -0.583271 -0.792369 +0.194389 -1.019275 -1.135778 0.833571 0.086931 -0.545529 +0.140954 -1.081044 -1.195292 0.557744 0.052802 -0.828332 +0.250557 -0.893329 -1.103714 0.837069 -0.233218 -0.494898 +0.063677 -1.084658 -1.226234 0.343575 -0.069069 -0.936582 +0.212058 -1.089059 -1.151285 0.610014 0.291725 -0.736736 +0.243257 -1.109294 -1.101869 0.857182 0.310578 -0.410829 +0.233524 -1.041313 -1.070262 0.858121 0.312333 -0.407524 +0.082590 -1.177560 -1.230108 0.180492 -0.011882 -0.983505 +0.149037 -1.182005 -1.217860 0.346676 0.073243 -0.935121 +0.232935 -1.184636 -1.172981 0.468361 0.028736 -0.883070 +0.147323 -1.283632 -1.206186 0.339010 -0.299074 -0.891979 +0.228412 -1.270773 -1.165832 0.731633 -0.385408 -0.562293 +0.148298 -1.343492 -1.172147 0.441873 -0.499209 -0.745345 +0.206980 -1.323399 -1.147182 0.743963 -0.554044 -0.373570 +0.144216 -1.389224 -1.142150 0.583097 -0.481328 -0.654462 +0.185016 -1.368596 -1.120970 0.684383 -0.547695 -0.481300 +0.222856 -1.307619 -1.114574 0.616177 -0.530083 -0.582528 +0.210022 -1.325508 -1.096257 0.830781 -0.551860 -0.072481 +0.236921 -1.282762 -1.116675 0.798409 -0.293597 -0.525684 +0.246845 -1.260431 -1.101758 0.928308 -0.205605 -0.309792 +0.248806 -1.231756 -1.114913 0.941395 -0.210244 -0.263767 +0.085375 -1.291375 -1.217723 0.200059 -0.246003 -0.948398 +0.085390 -1.351693 -1.181174 0.202253 -0.494658 -0.845226 +0.242488 -1.305722 -1.114672 -0.113639 -0.303684 -0.945972 +0.230621 -1.322045 -1.104962 -0.221549 -0.476650 -0.850718 +0.254957 -1.321908 -1.115359 -0.352154 -0.432576 -0.829979 +0.249879 -1.335757 -1.102068 -0.312788 -0.595476 -0.739981 +0.000000 -0.820987 -0.477658 0.302135 -0.512966 0.803480 +0.000000 -0.743096 -0.427930 0.381981 -0.391794 0.837011 +0.075642 -0.735415 -0.462425 0.416254 -0.370772 0.830218 +0.000000 -0.682871 -0.406746 0.373654 -0.148785 0.915558 +0.000000 -0.520935 -0.408895 0.388776 0.070997 0.918593 +0.090467 -0.527020 -0.448806 0.437648 0.153182 0.886002 +0.122304 -0.438939 -0.494920 0.473333 0.257953 0.842268 +0.000000 -0.433288 -0.424155 0.463796 0.243988 0.851683 +0.144773 -0.369613 -0.521976 0.438573 0.199812 0.876201 +0.000000 -0.365256 -0.450505 0.463460 0.258350 0.847620 +0.020074 0.802989 -0.859710 -0.468616 0.735648 0.489102 +0.000000 0.792848 -0.871132 -0.429261 0.637739 0.639550 +0.008274 0.689589 -0.762612 -0.470719 0.608497 0.638870 +0.000000 0.690640 -0.766550 -0.235042 0.695142 0.679362 +0.055367 0.903845 -1.060557 -0.308741 0.870649 0.382947 +0.112552 0.899531 -1.004645 -0.301408 0.876697 0.374907 +0.059104 0.807325 -0.828836 -0.357493 0.777283 0.517716 +0.025789 0.687817 -0.748559 -0.474214 0.578186 0.663944 +0.087118 0.775469 -0.767209 -0.323846 0.878246 0.351863 +0.172004 0.879637 -0.926179 -0.240069 0.873814 0.422867 +0.088868 0.769612 -0.732977 -0.464125 0.868834 0.172382 +0.191441 0.840666 -0.814931 -0.418558 0.867201 0.269763 +0.055367 0.903845 -1.060557 -0.373691 0.924481 -0.075434 +0.000000 0.877127 -1.071758 -0.490537 0.859379 0.144364 +0.020074 0.802989 -0.859710 -0.515598 0.792443 0.325871 +0.000000 0.792848 -0.871132 -0.565758 0.760218 0.319353 +0.115223 0.870956 -1.200244 -0.219773 0.924376 -0.311815 +0.000000 0.842631 -1.203002 -0.302930 0.912640 -0.274450 +0.432499 -0.117936 -0.893081 0.996289 -0.062059 -0.059641 +0.437223 0.021572 -0.907435 0.996072 0.085228 -0.023996 +0.408121 -0.129847 -0.708110 0.988708 -0.032280 0.146335 +0.401509 0.019700 -0.719666 0.975183 0.119050 0.186668 +0.409405 0.188720 -0.931537 0.956010 0.276241 -0.098669 +0.372005 0.173291 -1.062321 0.941402 0.173709 -0.289114 +0.392132 0.008478 -1.063792 0.962223 0.006191 -0.272191 +0.423456 -0.279155 -0.891875 0.993456 -0.113791 0.009849 +0.390117 -0.124181 -1.050900 0.972651 -0.022312 -0.231197 +0.397077 -0.294104 -1.040035 0.989007 0.021149 -0.146348 +0.372288 0.218413 -0.760127 0.945523 0.285782 0.155930 +0.360061 0.306779 -0.937631 0.923030 0.384346 0.017108 +0.328173 0.316278 -1.060432 0.911217 0.326518 -0.251135 +0.390662 -0.263803 -0.714595 0.968738 -0.180295 0.170413 +0.337829 0.315369 -0.803507 0.915270 0.382221 0.127233 +0.414880 -0.360277 -0.913431 0.992981 0.106055 0.052362 +0.412246 -0.462044 -1.047188 0.969065 0.152795 -0.193820 +0.348259 -0.357136 -0.682947 0.958911 -0.049178 0.279411 +0.445104 -0.474404 -0.928435 0.976834 0.198878 -0.079009 +0.417389 -0.603646 -1.074460 0.968093 -0.042231 -0.247008 +0.441108 -0.605236 -0.978452 0.981078 -0.088848 -0.172024 +0.396773 -0.408556 -0.803304 0.926122 0.328728 0.185031 +0.338005 -0.375625 -0.651199 0.935522 0.074226 0.345383 +0.449056 -0.493539 -0.787950 0.952996 0.301660 -0.028288 +0.459976 -0.598947 -0.814650 0.990812 -0.109187 -0.079816 +0.405733 -0.421712 -0.714452 0.852379 0.522855 -0.008538 +0.430026 -0.707082 -0.805969 0.894149 -0.447012 0.026035 +0.421764 -0.731125 -0.935026 0.884742 -0.461487 -0.065276 +0.327169 -0.847824 -0.782242 0.793739 -0.607645 0.027308 +0.298690 -0.872468 -0.981866 0.765891 -0.636311 -0.092295 +0.378254 -0.754824 -1.055511 0.893875 -0.384436 -0.230645 +0.368785 -0.778217 -0.725018 0.807768 -0.585014 0.072594 +0.108530 -0.355331 -1.455653 0.292423 0.184591 -0.938304 +0.114572 -0.524305 -1.478219 0.451389 -0.010769 -0.892263 +0.000000 -0.361320 -1.491224 0.297235 0.160851 -0.941158 +0.000000 -0.533029 -1.515251 0.293088 -0.072777 -0.953312 +0.000000 -0.694820 -1.481308 0.237083 -0.344148 -0.908490 +0.117833 -0.677125 -1.452666 0.374118 -0.214150 -0.902317 +0.121475 -0.199653 -1.417969 0.240861 0.303519 -0.921880 +0.000000 -0.212704 -1.457249 0.275176 0.266395 -0.923749 +0.126253 -0.069033 -1.371295 0.220563 0.216683 -0.951000 +0.000000 -0.085812 -1.403213 0.221652 0.287575 -0.931757 +0.000000 -0.850805 -1.401005 0.174925 -0.450661 -0.875389 +0.113353 -0.829547 -1.389298 0.223785 -0.414227 -0.882234 +0.219620 -0.509012 -1.385795 0.664080 -0.055526 -0.745597 +0.215624 -0.638821 -1.379687 0.643959 -0.085867 -0.760226 +0.000000 0.123007 -1.369700 0.234190 0.161925 -0.958611 +0.121794 0.126862 -1.337687 0.245522 0.169341 -0.954485 +0.163313 -0.268688 -0.540615 0.219901 0.037023 0.974819 +0.000000 -0.278300 -0.498178 0.305059 0.217029 0.927274 +0.144773 -0.369613 -0.521976 0.331283 0.291349 0.897423 +0.000000 -0.365256 -0.450505 0.408356 0.438826 0.800423 +0.173069 -0.171989 -0.533491 0.131365 -0.038782 0.990575 +0.000000 -0.181284 -0.504867 0.192464 0.004644 0.981293 +0.181052 0.003963 -0.522829 0.060235 0.062843 0.996204 +0.000000 -0.002516 -0.511473 0.106887 0.071547 0.991694 +0.000000 0.217662 -0.539160 0.161664 0.334761 0.928332 +0.157486 0.215574 -0.562074 0.112487 0.259472 0.959177 +0.110497 0.357001 -0.628471 0.247536 0.498871 0.830574 +0.000000 0.362368 -0.606042 0.217049 0.467158 0.857119 +0.219224 0.341114 -0.687039 0.502465 0.686552 0.525524 +0.042466 0.462186 -0.676207 0.321037 0.507282 0.799750 +0.000000 0.473072 -0.669559 0.360995 0.408163 0.838502 +0.009831 0.582357 -0.722762 -0.032884 0.344141 0.938342 +0.022530 0.582900 -0.720376 -0.372847 0.219888 0.901462 +0.073671 0.464847 -0.696580 0.059356 0.085577 0.994562 +0.193934 0.374098 -0.718043 0.366712 0.334615 0.868076 +0.030152 0.581907 -0.713972 -0.574628 -0.041532 0.817360 +0.037486 0.686149 -0.731377 -0.793310 0.319707 0.518119 +0.025789 0.687817 -0.748559 -0.599119 0.384319 0.702393 +0.091849 0.479491 -0.699313 -0.241330 -0.178301 0.953923 +0.194984 0.389910 -0.710710 -0.207107 -0.398498 0.893480 +0.000000 0.583122 -0.715693 0.569719 0.317734 0.757935 +0.103255 0.494590 -0.692424 -0.637342 -0.448487 0.626621 +0.047675 0.582939 -0.689279 -0.845393 -0.123815 0.519597 +0.070740 0.591315 -0.644639 -0.880952 -0.256879 0.397413 +0.116679 0.512235 -0.650594 -0.752185 -0.524909 0.398357 +0.051595 0.678974 -0.703427 -0.887106 0.247808 0.389402 +0.068726 0.667268 -0.647439 -0.938830 0.112970 0.325325 +0.193418 0.414036 -0.679360 -0.528239 -0.542676 0.653043 +0.196093 0.452835 -0.612980 -0.651498 -0.621930 0.434458 +0.087118 0.775469 -0.767209 -0.721486 0.558866 0.408812 +0.088868 0.769612 -0.732977 -0.731718 0.603754 0.316338 +0.098672 0.741881 -0.649914 -0.748836 0.576357 0.327197 +0.132622 0.539817 -0.555258 -0.853161 -0.411324 0.320824 +0.104151 0.602309 -0.560450 -0.918303 -0.244381 0.311443 +0.095284 0.658244 -0.561410 -0.953362 0.100333 0.284665 +0.112848 0.705254 -0.556160 -0.901424 0.322681 0.288638 +0.008274 0.689589 -0.762612 -0.584561 0.275160 0.763266 +0.059104 0.807325 -0.828836 -0.615244 0.550537 0.564255 +0.191441 0.840666 -0.814931 -0.335570 0.879375 0.337775 +0.174726 0.772485 -0.655484 -0.329157 0.880212 0.341881 +0.147059 0.559099 -0.487339 -0.869477 -0.417298 0.264332 +0.121016 0.612952 -0.489468 -0.936852 -0.239404 0.254940 +0.116559 0.653839 -0.489535 -0.940657 0.180407 0.287434 +0.133645 0.691215 -0.483091 -0.881879 0.348367 0.317693 +0.167913 0.575845 -0.391086 -0.845178 -0.464751 0.263972 +0.142612 0.617588 -0.398601 -0.932227 -0.257840 0.253913 +0.141864 0.649581 -0.398320 -0.936399 0.223905 0.270229 +0.161989 0.688799 -0.401702 -0.868051 0.404387 0.288026 +numsurf 345 +SURF 0x24 +mat 0 +refs 4 +2092 0.18417 0.47203 +2090 0.17447 0.47611 +2092 0.18417 0.47203 +2091 0.17409 0.47332 +SURF 0x24 +mat 0 +refs 44 +3153 0.82063 0.33963 +3157 0.88744 0.34868 +3153 0.82063 0.33963 +3158 0.87040 0.37083 +3154 0.80637 0.36412 +3158 0.87040 0.37083 +3155 0.80410 0.36840 +3159 0.87019 0.37164 +3155 0.80410 0.36840 +3160 0.87826 0.35118 +3155 0.80410 0.36840 +3156 0.81642 0.35386 +3155 0.80410 0.36840 +3148 0.76321 0.35178 +3147 0.75136 0.36714 +3144 0.70120 0.33703 +3139 0.68769 0.36669 +3138 0.64633 0.36625 +3136 0.69033 0.36560 +3135 0.65266 0.37432 +3134 0.67859 0.31971 +3128 0.62943 0.38375 +3131 0.66885 0.32864 +3126 0.66137 0.34701 +3132 0.71371 0.22562 +3126 0.66137 0.34701 +3127 0.70889 0.22441 +3122 0.65771 0.38331 +3121 0.73969 0.20940 +3122 0.65771 0.38331 +3119 0.60332 0.30002 +3120 0.56124 0.41349 +3119 0.60332 0.30002 +3117 0.60042 0.43377 +3118 0.66570 0.27480 +3116 0.61664 0.44217 +3115 0.70047 0.26395 +3116 0.61664 0.44217 +3113 0.69023 0.26842 +3114 0.62052 0.44417 +3109 0.68118 0.27568 +3110 0.62443 0.44620 +3111 0.68284 0.29923 +3112 0.65237 0.46066 +SURF 0x24 +mat 0 +refs 5 +3120 0.56124 0.41349 +3122 0.65771 0.38331 +3123 0.64039 0.42633 +3124 0.61413 0.40070 +3133 0.61336 0.41234 +SURF 0x24 +mat 0 +refs 16 +3131 0.66885 0.32864 +3132 0.71371 0.22562 +3131 0.66885 0.32864 +3140 0.73129 0.23664 +3134 0.67859 0.31971 +3141 0.77152 0.25419 +3134 0.67859 0.31971 +3137 0.70980 0.31944 +3136 0.69033 0.36560 +3145 0.77362 0.33296 +3146 0.75635 0.35888 +3153 0.82063 0.33963 +3146 0.75635 0.35888 +3154 0.80637 0.36412 +3147 0.75136 0.36714 +3155 0.80410 0.36840 +SURF 0x24 +mat 0 +refs 4 +3147 0.75136 0.36714 +3139 0.68769 0.36669 +3146 0.75635 0.35888 +3136 0.69033 0.36560 +SURF 0x24 +mat 0 +refs 17 +3152 0.73594 0.26192 +3151 0.65088 0.19743 +3144 0.70120 0.33703 +3143 0.64764 0.32131 +3138 0.64633 0.36625 +3129 0.62290 0.37139 +3135 0.65266 0.37432 +3129 0.62290 0.37139 +3128 0.62943 0.38375 +3125 0.62187 0.38917 +3126 0.66137 0.34701 +3125 0.62187 0.38917 +3122 0.65771 0.38331 +3125 0.62187 0.38917 +3124 0.61413 0.40070 +3130 0.60699 0.37747 +3149 0.59000 0.39012 +SURF 0x24 +mat 0 +refs 5 +3125 0.62187 0.38917 +3129 0.62290 0.37139 +3130 0.60699 0.37747 +3142 0.62671 0.31261 +3150 0.57660 0.32097 +SURF 0x24 +mat 0 +refs 4 +3143 0.64764 0.32131 +3142 0.62671 0.31261 +3143 0.64764 0.32131 +3129 0.62290 0.37139 +SURF 0x24 +mat 0 +refs 15 +3107 0.40370 0.17426 +3108 0.53610 0.19538 +3107 0.40370 0.17426 +3101 0.54094 0.17321 +3102 0.40370 0.15215 +3099 0.53575 0.14242 +3100 0.40370 0.11650 +3093 0.52168 0.11756 +3095 0.40370 0.09409 +3094 0.52824 0.10267 +3096 0.40370 0.07824 +3098 0.53179 0.11953 +3097 0.40370 0.10063 +3104 0.52692 0.16133 +3103 0.40370 0.15361 +SURF 0x24 +mat 0 +refs 4 +3098 0.53179 0.11953 +3094 0.52824 0.10267 +3106 0.63809 0.16767 +3105 0.64243 0.16364 +SURF 0x24 +mat 0 +refs 36 +3082 0.48979 0.45981 +3086 0.43162 0.44767 +3082 0.48979 0.45981 +3084 0.48201 0.40261 +3079 0.57443 0.41072 +3084 0.48201 0.40261 +3081 0.60722 0.41642 +3085 0.50010 0.39147 +3088 0.57773 0.43625 +3087 0.49303 0.42377 +3088 0.57773 0.43625 +3092 0.43694 0.48808 +3088 0.57773 0.43625 +3089 0.47279 0.53483 +3088 0.57773 0.43625 +3090 0.60310 0.57119 +3088 0.57773 0.43625 +3091 0.65520 0.48677 +3081 0.60722 0.41642 +3080 0.66944 0.44478 +3079 0.57443 0.41072 +3077 0.65124 0.44963 +3076 0.56319 0.44313 +3070 0.64584 0.46591 +3068 0.54936 0.43324 +3069 0.65270 0.47376 +3061 0.55056 0.42345 +3067 0.66128 0.47192 +3062 0.56024 0.41871 +3066 0.65941 0.49374 +3065 0.57488 0.44957 +3073 0.65621 0.54130 +3065 0.57488 0.44957 +3072 0.57669 0.50333 +3071 0.46023 0.48523 +3075 0.48729 0.52384 +SURF 0x24 +mat 0 +refs 13 +3065 0.57488 0.44957 +3071 0.46023 0.48523 +3062 0.56024 0.41871 +3064 0.43487 0.45240 +3062 0.56024 0.41871 +3063 0.42755 0.44490 +3061 0.55056 0.42345 +3074 0.43104 0.46404 +3068 0.54936 0.43324 +3078 0.40828 0.50923 +3076 0.56319 0.44313 +3082 0.48979 0.45981 +3079 0.57443 0.41072 +SURF 0x24 +mat 0 +refs 4 +3078 0.40828 0.50923 +3083 0.38690 0.51951 +3078 0.40828 0.50923 +3082 0.48979 0.45981 +SURF 0x24 +mat 0 +refs 6 +3059 0.32880 0.46158 +3060 0.39435 0.35484 +3055 0.44147 0.45599 +3056 0.46746 0.40121 +3057 0.57391 0.49456 +3058 0.57923 0.47210 +SURF 0x24 +mat 0 +refs 8 +3053 0.61164 0.32195 +3054 0.62110 0.44551 +3051 0.59117 0.33169 +3052 0.54706 0.46422 +3049 0.65707 0.35796 +3048 0.58614 0.46657 +3043 0.61810 0.33157 +3047 0.52297 0.43145 +SURF 0x24 +mat 0 +refs 7 +3050 0.68458 0.30000 +3049 0.65707 0.35796 +3045 0.66698 0.28822 +3043 0.61810 0.33157 +3045 0.66698 0.28822 +3044 0.60060 0.31651 +3046 0.66021 0.28176 +SURF 0x24 +mat 0 +refs 14 +3041 0.58855 0.22901 +3042 0.55808 0.39044 +3039 0.59317 0.25891 +3040 0.57351 0.39843 +3038 0.60428 0.30363 +3037 0.58245 0.40306 +1119 0.60387 0.32573 +3036 0.58371 0.40372 +1119 0.60387 0.32573 +3034 0.57130 0.39729 +3035 0.58889 0.31381 +3034 0.57130 0.39729 +1115 0.56709 0.29683 +3033 0.54217 0.38221 +SURF 0x24 +mat 0 +refs 11 +3031 0.17719 0.51234 +3032 0.18245 0.52127 +3031 0.17719 0.51234 +3030 0.20343 0.51998 +3029 0.19072 0.51319 +3022 0.21205 0.51389 +3024 0.19681 0.51205 +3017 0.20702 0.47991 +3024 0.19681 0.51205 +3026 0.18386 0.51283 +3025 0.18574 0.52157 +SURF 0x24 +mat 0 +refs 33 +3020 0.29804 0.49825 +3018 0.29419 0.47833 +3021 0.25329 0.51089 +3019 0.22994 0.49290 +3023 0.22564 0.52638 +3019 0.22994 0.49290 +3022 0.21205 0.51389 +3019 0.22994 0.49290 +3017 0.20702 0.47991 +3018 0.29419 0.47833 +3016 0.29592 0.45592 +3028 0.36272 0.47441 +3016 0.29592 0.45592 +3027 0.36345 0.45031 +3014 0.29428 0.44816 +3013 0.36672 0.44223 +3014 0.29428 0.44816 +3009 0.38719 0.44540 +3007 0.30262 0.46331 +3009 0.38719 0.44540 +3004 0.28686 0.45383 +3003 0.38761 0.42552 +2996 0.37315 0.39506 +3005 0.45721 0.41967 +2996 0.37315 0.39506 +2998 0.45810 0.38946 +2996 0.37315 0.39506 +2997 0.45981 0.33221 +2996 0.37315 0.39506 +2995 0.33641 0.33627 +3000 0.24225 0.37988 +3002 0.33279 0.29434 +3001 0.22510 0.33930 +SURF 0x24 +mat 0 +refs 14 +2996 0.37315 0.39506 +3000 0.24225 0.37988 +2996 0.37315 0.39506 +2999 0.27840 0.43908 +3004 0.28686 0.45383 +3008 0.18174 0.52016 +3004 0.28686 0.45383 +3006 0.24340 0.50083 +3007 0.30262 0.46331 +3010 0.22451 0.49003 +3014 0.29428 0.44816 +3015 0.20225 0.47505 +3016 0.29592 0.45592 +3017 0.20702 0.47991 +SURF 0x24 +mat 0 +refs 4 +3010 0.22451 0.49003 +3006 0.24340 0.50083 +3011 0.18964 0.52161 +3012 0.19959 0.54277 +SURF 0x24 +mat 0 +refs 7 +2994 0.41758 0.52791 +2993 0.41170 0.55935 +2994 0.41758 0.52791 +2989 0.35949 0.54078 +2992 0.36333 0.49894 +2987 0.31729 0.51343 +2991 0.30647 0.46079 +SURF 0x24 +mat 0 +refs 8 +2987 0.31729 0.51343 +2989 0.35949 0.54078 +2987 0.31729 0.51343 +2988 0.36801 0.53703 +2985 0.32058 0.50477 +2988 0.36801 0.53703 +2984 0.36493 0.50369 +2990 0.43741 0.53752 +SURF 0x24 +mat 0 +refs 22 +2986 0.25002 0.44323 +2985 0.32058 0.50477 +2983 0.28919 0.45885 +2984 0.36493 0.50369 +2983 0.28919 0.45885 +2982 0.36368 0.53990 +2981 0.29301 0.49572 +2980 0.36588 0.55976 +2979 0.29324 0.50992 +2978 0.36830 0.55768 +2977 0.28332 0.50374 +2976 0.36373 0.54149 +2975 0.25214 0.47368 +2974 0.33619 0.56608 +2973 0.20329 0.46550 +2972 0.35275 0.58203 +2971 0.20636 0.46043 +2969 0.36014 0.53910 +2970 0.24186 0.43435 +2969 0.36014 0.53910 +2968 0.29106 0.38546 +2967 0.39234 0.46070 +SURF 0x24 +mat 0 +refs 7 +2963 0.43106 0.38254 +2964 0.41954 0.39931 +2963 0.43106 0.38254 +2959 0.41514 0.39918 +2960 0.42892 0.37881 +2950 0.39218 0.38101 +2961 0.42768 0.37086 +SURF 0x24 +mat 0 +refs 22 +2959 0.41514 0.39918 +2962 0.42568 0.41536 +2950 0.39218 0.38101 +2951 0.40419 0.40133 +2948 0.37258 0.37689 +2952 0.36987 0.38953 +2949 0.23839 0.39179 +2952 0.36987 0.38953 +2954 0.25352 0.41161 +2952 0.36987 0.38953 +2953 0.36741 0.39646 +2951 0.40419 0.40133 +2953 0.36741 0.39646 +2958 0.42330 0.41291 +2955 0.36498 0.40711 +2965 0.45687 0.43103 +2955 0.36498 0.40711 +2966 0.45593 0.46277 +2955 0.36498 0.40711 +2957 0.33068 0.46087 +2954 0.25352 0.41161 +2956 0.20156 0.43661 +SURF 0x24 +mat 0 +refs 4 +2953 0.36741 0.39646 +2955 0.36498 0.40711 +2953 0.36741 0.39646 +2954 0.25352 0.41161 +SURF 0x24 +mat 0 +refs 6 +2948 0.37258 0.37689 +2949 0.23839 0.39179 +2946 0.35729 0.36888 +2945 0.23172 0.38576 +2941 0.34000 0.39207 +2944 0.20744 0.42025 +SURF 0x24 +mat 0 +refs 6 +2947 0.45838 0.38023 +2946 0.35729 0.36888 +2940 0.45857 0.37384 +2941 0.34000 0.39207 +2942 0.45919 0.35285 +2943 0.32623 0.37003 +SURF 0x24 +mat 0 +refs 7 +2938 0.28008 0.46937 +2939 0.28822 0.37610 +2936 0.27115 0.47181 +2934 0.29713 0.37494 +2936 0.27115 0.47181 +2935 0.32203 0.37630 +2937 0.30730 0.43205 +SURF 0x24 +mat 0 +refs 54 +2932 0.67270 0.42046 +2933 0.66626 0.43974 +2925 0.66664 0.41642 +2926 0.65832 0.43563 +2914 0.65013 0.40558 +2922 0.64226 0.42732 +2890 0.63144 0.39650 +2921 0.62320 0.41745 +2890 0.63144 0.39650 +2917 0.60605 0.40857 +2891 0.61530 0.38617 +2918 0.57621 0.39312 +2891 0.61530 0.38617 +2911 0.58744 0.35937 +2892 0.62670 0.35404 +2912 0.60086 0.32976 +2893 0.64012 0.32046 +2913 0.61513 0.30166 +2858 0.64886 0.29963 +2859 0.62793 0.28313 +2852 0.66353 0.29060 +2851 0.64258 0.26649 +2815 0.67974 0.28110 +2850 0.66478 0.24721 +2811 0.71216 0.27437 +2809 0.72184 0.24691 +2810 0.74710 0.28776 +2809 0.72184 0.24691 +2808 0.74275 0.28264 +2807 0.73077 0.23063 +2806 0.74247 0.27873 +2803 0.73955 0.21176 +2804 0.74237 0.27788 +2793 0.74884 0.23586 +2805 0.74193 0.28115 +2793 0.74884 0.23586 +2792 0.74077 0.28799 +2787 0.71202 0.29929 +2796 0.61252 0.30993 +2786 0.69854 0.35353 +2798 0.59961 0.34439 +2797 0.58332 0.39012 +2798 0.59961 0.34439 +2842 0.60351 0.40323 +2812 0.61876 0.36739 +2842 0.60351 0.40323 +2843 0.62458 0.37881 +2863 0.61087 0.41073 +2864 0.63047 0.38750 +2863 0.61087 0.41073 +2865 0.61866 0.42042 +2863 0.61087 0.41073 +2924 0.61010 0.43880 +2923 0.60075 0.43396 +SURF 0x24 +mat 0 +refs 13 +2797 0.58332 0.39012 +2786 0.69854 0.35353 +2794 0.69059 0.39738 +2783 0.70182 0.34418 +2791 0.69993 0.40121 +2780 0.60055 0.30408 +2781 0.60574 0.37041 +2777 0.63262 0.36881 +2782 0.59154 0.42917 +2777 0.63262 0.36881 +2775 0.61383 0.44071 +2776 0.66138 0.36705 +2774 0.63646 0.45243 +SURF 0x24 +mat 0 +refs 24 +2786 0.69854 0.35353 +2787 0.71202 0.29929 +2783 0.70182 0.34418 +2784 0.71779 0.25664 +2780 0.60055 0.30408 +2785 0.72262 0.22651 +2780 0.60055 0.30408 +2790 0.73952 0.21049 +2780 0.60055 0.30408 +2779 0.62946 0.28854 +2777 0.63262 0.36881 +2779 0.62946 0.28854 +2776 0.66138 0.36705 +2778 0.68917 0.24895 +2776 0.66138 0.36705 +2788 0.70087 0.31481 +2789 0.68318 0.38403 +2788 0.70087 0.31481 +2819 0.69815 0.39595 +2820 0.70124 0.32611 +2902 0.69857 0.37384 +2897 0.69064 0.31901 +2903 0.68746 0.32912 +2904 0.69496 0.25385 +SURF 0x24 +mat 0 +refs 12 +2897 0.69064 0.31901 +2820 0.70124 0.32611 +2897 0.69064 0.31901 +2896 0.83841 0.34273 +2899 0.83624 0.34580 +2898 0.84877 0.34384 +2901 0.84707 0.34523 +2900 0.88185 0.34806 +2929 0.88237 0.34876 +2900 0.88185 0.34806 +2930 0.90042 0.34204 +2931 0.90109 0.34186 +SURF 0x24 +mat 0 +refs 4 +2898 0.84877 0.34384 +2896 0.83841 0.34273 +2927 0.85296 0.33268 +2928 0.83843 0.33768 +SURF 0x24 +mat 0 +refs 48 +2919 0.64234 0.42736 +2909 0.65767 0.39183 +2915 0.61797 0.41474 +2908 0.64030 0.38056 +2916 0.62147 0.41655 +2906 0.64252 0.38239 +2920 0.63470 0.42340 +2906 0.64252 0.38239 +2905 0.65636 0.38967 +2876 0.66586 0.35262 +2875 0.67877 0.36042 +2853 0.68910 0.32519 +2875 0.67877 0.36042 +2874 0.69969 0.33415 +2883 0.69464 0.38775 +2857 0.70825 0.36150 +2882 0.59621 0.37664 +2845 0.60751 0.34680 +2878 0.61131 0.39090 +2844 0.62106 0.35678 +2878 0.61131 0.39090 +2877 0.62288 0.39369 +2910 0.60170 0.41743 +2877 0.62288 0.39369 +2907 0.61088 0.42240 +2877 0.62288 0.39369 +2865 0.61866 0.42042 +2877 0.62288 0.39369 +2864 0.63047 0.38750 +2877 0.62288 0.39369 +2839 0.63129 0.36075 +2844 0.62106 0.35678 +2840 0.62442 0.33738 +2845 0.60751 0.34680 +2846 0.61574 0.30508 +2857 0.70825 0.36150 +2835 0.72326 0.31073 +2874 0.69969 0.33415 +2835 0.72326 0.31073 +2853 0.68910 0.32519 +2834 0.72400 0.30478 +2853 0.68910 0.32519 +2832 0.69478 0.30991 +2876 0.66586 0.35262 +2886 0.66265 0.35257 +2876 0.66586 0.35262 +2908 0.64030 0.38056 +2906 0.64252 0.38239 +SURF 0x24 +mat 0 +refs 58 +2908 0.64030 0.38056 +2909 0.65767 0.39183 +2908 0.64030 0.38056 +2885 0.67540 0.36117 +2886 0.66265 0.35257 +2831 0.70499 0.31387 +2832 0.69478 0.30991 +2825 0.73675 0.30597 +2832 0.69478 0.30991 +2833 0.72869 0.30234 +2834 0.72400 0.30478 +2833 0.72869 0.30234 +2822 0.73804 0.29801 +2825 0.73675 0.30597 +2823 0.74261 0.30121 +2818 0.74428 0.30951 +2823 0.74261 0.30121 +2810 0.74710 0.28776 +2823 0.74261 0.30121 +2808 0.74275 0.28264 +2823 0.74261 0.30121 +2806 0.74247 0.27873 +2822 0.73804 0.29801 +2804 0.74237 0.27788 +2821 0.73188 0.29756 +2805 0.74193 0.28115 +2802 0.73276 0.30137 +2805 0.74193 0.28115 +2795 0.73941 0.30695 +2792 0.74077 0.28799 +2795 0.73941 0.30695 +2796 0.61252 0.30993 +2813 0.62623 0.34435 +2798 0.59961 0.34439 +2813 0.62623 0.34435 +2812 0.61876 0.36739 +2813 0.62623 0.34435 +2843 0.62458 0.37881 +2841 0.63168 0.35221 +2843 0.62458 0.37881 +2873 0.63720 0.35734 +2864 0.63047 0.38750 +2873 0.63720 0.35734 +2839 0.63129 0.36075 +2873 0.63720 0.35734 +2838 0.63398 0.33307 +2841 0.63168 0.35221 +2838 0.63398 0.33307 +2813 0.62623 0.34435 +2799 0.63155 0.31785 +2795 0.73941 0.30695 +2800 0.73536 0.32003 +2802 0.73276 0.30137 +2835 0.72326 0.31073 +2802 0.73276 0.30137 +2834 0.72400 0.30478 +2821 0.73188 0.29756 +2822 0.73804 0.29801 +SURF 0x24 +mat 0 +refs 12 +2835 0.72326 0.31073 +2800 0.73536 0.32003 +2846 0.61574 0.30508 +2801 0.62847 0.32396 +2840 0.62442 0.33738 +2801 0.62847 0.32396 +2839 0.63129 0.36075 +2801 0.62847 0.32396 +2838 0.63398 0.33307 +2801 0.62847 0.32396 +2799 0.63155 0.31785 +2800 0.73536 0.32003 +SURF 0x24 +mat 0 +refs 92 +2831 0.70499 0.31387 +2885 0.67540 0.36117 +2831 0.70499 0.31387 +2881 0.58471 0.34123 +2856 0.61220 0.31330 +2881 0.58471 0.34123 +2837 0.62172 0.33272 +2880 0.61010 0.36204 +2836 0.61284 0.33044 +2884 0.60565 0.36194 +2849 0.71077 0.35811 +2879 0.70357 0.38856 +2862 0.68599 0.36358 +2871 0.68075 0.39512 +2870 0.67858 0.35099 +2872 0.67450 0.38498 +2869 0.67149 0.34116 +2872 0.67450 0.38498 +2889 0.65856 0.37503 +2925 0.66664 0.41642 +2889 0.65856 0.37503 +2914 0.65013 0.40558 +2889 0.65856 0.37503 +2890 0.63144 0.39650 +2888 0.63994 0.36587 +2891 0.61530 0.38617 +2888 0.63994 0.36587 +2892 0.62670 0.35404 +2887 0.65126 0.33628 +2893 0.64012 0.32046 +2894 0.66210 0.30444 +2858 0.64886 0.29963 +2895 0.67500 0.29816 +2852 0.66353 0.29060 +2855 0.68960 0.28989 +2815 0.67974 0.28110 +2814 0.71196 0.28789 +2811 0.71216 0.27437 +2814 0.71196 0.28789 +2810 0.74710 0.28776 +2816 0.74093 0.30141 +2818 0.74428 0.30951 +2817 0.74369 0.32120 +2826 0.73992 0.32768 +2817 0.74369 0.32120 +2827 0.74278 0.33372 +2816 0.74093 0.30141 +2828 0.72942 0.31520 +2816 0.74093 0.30141 +2854 0.72110 0.30539 +2814 0.71196 0.28789 +2854 0.72110 0.30539 +2855 0.68960 0.28989 +2866 0.70503 0.29615 +2895 0.67500 0.29816 +2867 0.69162 0.30528 +2894 0.66210 0.30444 +2868 0.68243 0.31633 +2869 0.67149 0.34116 +2868 0.68243 0.31633 +2870 0.67858 0.35099 +2868 0.68243 0.31633 +2861 0.68443 0.32503 +2867 0.69162 0.30528 +2848 0.69830 0.31577 +2867 0.69162 0.30528 +2829 0.71893 0.31283 +2866 0.70503 0.29615 +2829 0.71893 0.31283 +2854 0.72110 0.30539 +2829 0.71893 0.31283 +2828 0.72942 0.31520 +2829 0.71893 0.31283 +2827 0.74278 0.33372 +2830 0.72738 0.33006 +2836 0.61284 0.33044 +2830 0.72738 0.33006 +2849 0.71077 0.35811 +2830 0.72738 0.33006 +2847 0.70577 0.32915 +2829 0.71893 0.31283 +2847 0.70577 0.32915 +2848 0.69830 0.31577 +2860 0.68754 0.33849 +2861 0.68443 0.32503 +2860 0.68754 0.33849 +2870 0.67858 0.35099 +2860 0.68754 0.33849 +2862 0.68599 0.36358 +2860 0.68754 0.33849 +2849 0.71077 0.35811 +2847 0.70577 0.32915 +SURF 0x24 +mat 0 +refs 12 +2836 0.61284 0.33044 +2827 0.74278 0.33372 +2837 0.62172 0.33272 +2826 0.73992 0.32768 +2856 0.61220 0.31330 +2826 0.73992 0.32768 +2831 0.70499 0.31387 +2824 0.74072 0.31590 +2825 0.73675 0.30597 +2824 0.74072 0.31590 +2818 0.74428 0.30951 +2826 0.73992 0.32768 +SURF 0x24 +mat 0 +refs 6 +2887 0.65126 0.33628 +2894 0.66210 0.30444 +2887 0.65126 0.33628 +2869 0.67149 0.34116 +2888 0.63994 0.36587 +2889 0.65856 0.37503 +SURF 0x24 +mat 0 +refs 14 +2772 0.65938 0.28448 +2773 0.72831 0.33061 +2770 0.67796 0.23638 +2771 0.74512 0.28650 +2768 0.69020 0.19972 +2769 0.75420 0.25756 +2766 0.70830 0.16594 +2767 0.76260 0.23657 +2764 0.71541 0.17327 +2765 0.76354 0.22858 +2760 0.70265 0.23031 +2762 0.74382 0.28169 +2761 0.67523 0.33243 +2763 0.72384 0.35245 +SURF 0x24 +mat 0 +refs 30 +2760 0.70265 0.23031 +2761 0.67523 0.33243 +2760 0.70265 0.23031 +2759 0.63500 0.31488 +2758 0.65613 0.18166 +2749 0.61741 0.30386 +2748 0.61033 0.15122 +2749 0.61741 0.30386 +2746 0.60546 0.16468 +2747 0.61259 0.30265 +2744 0.63443 0.13782 +2743 0.64340 0.28764 +2744 0.63443 0.13782 +2740 0.70656 0.19955 +2741 0.67706 0.11771 +2737 0.74861 0.19722 +2736 0.71537 0.10178 +2737 0.74861 0.19722 +2732 0.72544 0.09890 +2733 0.75480 0.20478 +2731 0.71292 0.11378 +2730 0.74000 0.23223 +2729 0.71027 0.16432 +2728 0.71477 0.31168 +2739 0.72375 0.18384 +2738 0.71502 0.36419 +2750 0.74897 0.21484 +2753 0.74760 0.35206 +2754 0.77491 0.22524 +2755 0.75868 0.35740 +SURF 0x24 +mat 0 +refs 6 +2754 0.77491 0.22524 +2756 0.77606 0.14550 +2750 0.74897 0.21484 +2751 0.72053 0.09928 +2739 0.72375 0.18384 +2752 0.66400 0.08098 +SURF 0x24 +mat 0 +refs 12 +2743 0.64340 0.28764 +2757 0.62338 0.41036 +2743 0.64340 0.28764 +2745 0.68576 0.38514 +2740 0.70656 0.19955 +2742 0.72053 0.37429 +2737 0.74861 0.19722 +2742 0.72053 0.37429 +2733 0.75480 0.20478 +2735 0.71029 0.37876 +2730 0.74000 0.23223 +2734 0.70124 0.38602 +SURF 0x24 +mat 0 +refs 51 +2703 0.37206 0.23774 +2702 0.40370 0.24970 +2701 0.37927 0.23899 +2700 0.40370 0.24679 +2693 0.37779 0.23857 +2699 0.40370 0.24814 +2692 0.37861 0.23837 +2697 0.40370 0.24752 +2698 0.38113 0.23750 +2705 0.40370 0.24595 +2706 0.38281 0.23672 +2710 0.40370 0.24386 +2711 0.38366 0.23566 +2715 0.40370 0.24236 +2716 0.38708 0.23459 +2725 0.40370 0.24017 +2726 0.39043 0.23273 +2727 0.40370 0.23820 +2722 0.39588 0.22958 +2721 0.40370 0.23274 +2722 0.39588 0.22958 +2720 0.40370 0.22188 +2722 0.39588 0.22958 +2723 0.38716 0.22188 +2726 0.39043 0.23273 +2724 0.37942 0.22188 +2716 0.38708 0.23459 +2714 0.37606 0.22188 +2711 0.38366 0.23566 +2709 0.37264 0.22188 +2706 0.38281 0.23672 +2704 0.37180 0.22188 +2698 0.38113 0.23750 +2696 0.37012 0.22188 +2692 0.37861 0.23837 +2690 0.36759 0.22188 +2693 0.37779 0.23857 +2690 0.36759 0.22188 +2691 0.36677 0.22188 +2686 0.37861 0.20539 +2684 0.37779 0.20519 +2685 0.40370 0.19829 +2684 0.37779 0.20519 +2681 0.40370 0.19737 +2678 0.37646 0.20477 +2679 0.40370 0.19618 +2676 0.37422 0.20111 +2677 0.40370 0.19376 +2676 0.37422 0.20111 +2672 0.40370 0.19284 +2675 0.37274 0.19321 +SURF 0x24 +mat 0 +refs 30 +2685 0.40370 0.19829 +2686 0.37861 0.20539 +2687 0.40370 0.20021 +2688 0.38113 0.20627 +2689 0.40370 0.20199 +2694 0.38281 0.20704 +2695 0.40370 0.20240 +2707 0.38366 0.20811 +2708 0.40370 0.20391 +2712 0.38708 0.20917 +2713 0.40370 0.20655 +2717 0.39043 0.21104 +2718 0.40370 0.21102 +2719 0.39588 0.21418 +2720 0.40370 0.22188 +2719 0.39588 0.21418 +2723 0.38716 0.22188 +2719 0.39588 0.21418 +2724 0.37942 0.22188 +2717 0.39043 0.21104 +2714 0.37606 0.22188 +2712 0.38708 0.20917 +2709 0.37264 0.22188 +2707 0.38366 0.20811 +2704 0.37180 0.22188 +2694 0.38281 0.20704 +2696 0.37012 0.22188 +2688 0.38113 0.20627 +2690 0.36759 0.22188 +2686 0.37861 0.20539 +SURF 0x24 +mat 0 +refs 15 +2681 0.40370 0.19737 +2683 0.42962 0.20519 +2681 0.40370 0.19737 +2682 0.43095 0.20477 +2679 0.40370 0.19618 +2680 0.43319 0.20111 +2677 0.40370 0.19376 +2680 0.43319 0.20111 +2672 0.40370 0.19284 +2673 0.43466 0.19321 +2671 0.40370 0.19142 +2670 0.44503 0.19229 +2668 0.40370 0.20166 +2669 0.48956 0.20087 +2667 0.50509 0.19331 +SURF 0x24 +mat 0 +refs 4 +2669 0.48956 0.20087 +2670 0.44503 0.19229 +2674 0.46985 0.20440 +2673 0.43466 0.19321 +SURF 0x24 +mat 0 +refs 5 +2664 0.27532 0.25355 +2666 0.39131 0.31104 +2664 0.27532 0.25355 +2665 0.38301 0.32503 +2663 0.22734 0.26581 +SURF 0x24 +mat 0 +refs 12 +2661 0.26487 0.39575 +2662 0.28965 0.23105 +2661 0.26487 0.39575 +2660 0.29861 0.25817 +2659 0.25896 0.43867 +2656 0.31794 0.28270 +2654 0.25981 0.45031 +2655 0.33762 0.29400 +2653 0.27114 0.44176 +2655 0.33762 0.29400 +2658 0.29868 0.41695 +2657 0.36332 0.29784 +SURF 0x24 +mat 0 +refs 5 +2650 0.62048 0.24146 +2652 0.64570 0.16202 +2650 0.62048 0.24146 +2651 0.60695 0.31580 +2649 0.60861 0.33935 +SURF 0x24 +mat 0 +refs 20 +2640 0.42474 0.65049 +2648 0.43008 0.66302 +2640 0.42474 0.65049 +2641 0.45071 0.65899 +2620 0.45463 0.64754 +2631 0.47041 0.66427 +2621 0.47737 0.65487 +2632 0.48473 0.66993 +2633 0.49423 0.66400 +2642 0.48805 0.68039 +2633 0.49423 0.66400 +2643 0.49399 0.67814 +2634 0.50809 0.66237 +2644 0.50206 0.67946 +2635 0.52101 0.66567 +2645 0.50918 0.68366 +2636 0.52806 0.67264 +2646 0.51293 0.68916 +2637 0.52655 0.68062 +2647 0.51209 0.69397 +SURF 0x24 +mat 0 +refs 20 +2611 0.42960 0.63527 +2640 0.42474 0.65049 +2611 0.42960 0.63527 +2620 0.45463 0.64754 +2612 0.46866 0.63707 +2621 0.47737 0.65487 +2622 0.49162 0.64762 +2633 0.49423 0.66400 +2622 0.49162 0.64762 +2634 0.50809 0.66237 +2623 0.50802 0.64517 +2635 0.52101 0.66567 +2624 0.52038 0.64871 +2636 0.52806 0.67264 +2625 0.52372 0.65715 +2637 0.52655 0.68062 +2626 0.51648 0.66719 +2638 0.51705 0.68656 +2627 0.50157 0.67468 +2639 0.50318 0.68819 +SURF 0x24 +mat 0 +refs 21 +2630 0.35468 0.55218 +2629 0.36822 0.47702 +2630 0.35468 0.55218 +2609 0.44280 0.50059 +2607 0.44842 0.61473 +2608 0.50224 0.51826 +2605 0.52099 0.64174 +2606 0.56164 0.53670 +2559 0.55167 0.65080 +2600 0.58756 0.51560 +2559 0.55167 0.65080 +2558 0.54922 0.64190 +2560 0.52786 0.70084 +2558 0.54922 0.64190 +2561 0.52500 0.69199 +2552 0.53406 0.59163 +2511 0.53257 0.62300 +2552 0.53406 0.59163 +2553 0.55881 0.53888 +2554 0.49014 0.47041 +2555 0.52575 0.45331 +SURF 0x24 +mat 0 +refs 10 +2554 0.49014 0.47041 +2552 0.53406 0.59163 +2557 0.50445 0.47082 +2556 0.54634 0.56178 +2602 0.49293 0.41705 +2556 0.54634 0.56178 +2601 0.57452 0.47957 +2556 0.54634 0.56178 +2558 0.54922 0.64190 +2552 0.53406 0.59163 +SURF 0x24 +mat 0 +refs 9 +2601 0.57452 0.47957 +2558 0.54922 0.64190 +2601 0.57452 0.47957 +2600 0.58756 0.51560 +2603 0.52249 0.36497 +2600 0.58756 0.51560 +2604 0.52670 0.37428 +2606 0.56164 0.53670 +2610 0.48864 0.37872 +SURF 0x24 +mat 0 +refs 19 +2628 0.48507 0.67662 +2618 0.47215 0.66886 +2627 0.50157 0.67468 +2617 0.48979 0.66437 +2626 0.51648 0.66719 +2616 0.50636 0.65489 +2625 0.52372 0.65715 +2615 0.51325 0.64407 +2624 0.52038 0.64871 +2614 0.50654 0.63560 +2623 0.50802 0.64517 +2613 0.48810 0.63284 +2622 0.49162 0.64762 +2613 0.48810 0.63284 +2612 0.46866 0.63707 +2565 0.43943 0.62609 +2611 0.42960 0.63527 +2564 0.39851 0.62482 +2619 0.39812 0.64226 +SURF 0x24 +mat 0 +refs 16 +2518 0.40824 0.61393 +2564 0.39851 0.62482 +2518 0.40824 0.61393 +2565 0.43943 0.62609 +2566 0.45190 0.62227 +2613 0.48810 0.63284 +2566 0.45190 0.62227 +2614 0.50654 0.63560 +2567 0.46538 0.62733 +2615 0.51325 0.64407 +2568 0.47072 0.63986 +2616 0.50636 0.65489 +2569 0.46988 0.65456 +2617 0.48979 0.66437 +2570 0.46005 0.66373 +2618 0.47215 0.66886 +SURF 0x24 +mat 0 +refs 15 +2570 0.46005 0.66373 +2551 0.44741 0.65912 +2569 0.46988 0.65456 +2550 0.44467 0.64200 +2568 0.47072 0.63986 +2549 0.43558 0.62467 +2567 0.46538 0.62733 +2517 0.42359 0.61375 +2566 0.45190 0.62227 +2517 0.42359 0.61375 +2518 0.40824 0.61393 +2516 0.40839 0.59852 +2519 0.39012 0.59820 +2562 0.39056 0.55903 +2563 0.39600 0.56356 +SURF 0x24 +mat 0 +refs 126 +2515 0.41198 0.55513 +2562 0.39056 0.55903 +2515 0.41198 0.55513 +2516 0.40839 0.59852 +2513 0.42389 0.59348 +2516 0.40839 0.59852 +2514 0.43589 0.62492 +2517 0.42359 0.61375 +2514 0.43589 0.62492 +2549 0.43558 0.62467 +2514 0.43589 0.62492 +2550 0.44467 0.64200 +2548 0.44020 0.64649 +2551 0.44741 0.65912 +2548 0.44020 0.64649 +2547 0.45041 0.66754 +2495 0.45344 0.64210 +2494 0.46557 0.66966 +2492 0.45167 0.63856 +2491 0.44353 0.65959 +2492 0.45167 0.63856 +2487 0.43088 0.63993 +2488 0.44493 0.60408 +2484 0.43646 0.60993 +2485 0.44398 0.58321 +2483 0.45211 0.54927 +2485 0.44398 0.58321 +2486 0.43730 0.55788 +2485 0.44398 0.58321 +2489 0.43920 0.58263 +2488 0.44493 0.60408 +2493 0.43173 0.59639 +2488 0.44493 0.60408 +2498 0.42787 0.60426 +2492 0.45167 0.63856 +2497 0.44594 0.62608 +2495 0.45344 0.64210 +2496 0.44151 0.62247 +2548 0.44020 0.64649 +2496 0.44151 0.62247 +2514 0.43589 0.62492 +2496 0.44151 0.62247 +2513 0.42389 0.59348 +2496 0.44151 0.62247 +2500 0.43067 0.60189 +2497 0.44594 0.62608 +2499 0.42885 0.60495 +2498 0.42787 0.60426 +2531 0.43702 0.61673 +2498 0.42787 0.60426 +2523 0.44546 0.60671 +2493 0.43173 0.59639 +2520 0.46492 0.59033 +2489 0.43920 0.58263 +2521 0.46241 0.58783 +2522 0.45048 0.58343 +2533 0.45769 0.58969 +2526 0.45191 0.57874 +2536 0.45312 0.58929 +2537 0.46490 0.58720 +2539 0.49214 0.60557 +2538 0.47110 0.58314 +2540 0.50502 0.59364 +2529 0.48171 0.58408 +2571 0.50449 0.59212 +2572 0.47793 0.60528 +2594 0.50581 0.61583 +2596 0.46896 0.62502 +2595 0.51380 0.63303 +2597 0.46232 0.62992 +2588 0.51568 0.64048 +2587 0.50570 0.63434 +2588 0.51568 0.64048 +2586 0.56442 0.63803 +2595 0.51380 0.63303 +2593 0.54972 0.62932 +2594 0.50581 0.61583 +2592 0.53475 0.60379 +2571 0.50449 0.59212 +2592 0.53475 0.60379 +2540 0.50502 0.59364 +2542 0.53239 0.60677 +2539 0.49214 0.60557 +2541 0.51487 0.62266 +2539 0.49214 0.60557 +2574 0.48466 0.60836 +2536 0.45312 0.58929 +2534 0.48457 0.60677 +2533 0.45769 0.58969 +2534 0.48457 0.60677 +2521 0.46241 0.58783 +2535 0.48676 0.59810 +2520 0.46492 0.59033 +2576 0.47639 0.59465 +2520 0.46492 0.59033 +2575 0.45881 0.61081 +2523 0.44546 0.60671 +2579 0.44494 0.62062 +2531 0.43702 0.61673 +2532 0.43778 0.61837 +2499 0.42885 0.60495 +2532 0.43778 0.61837 +2500 0.43067 0.60189 +2530 0.44499 0.61413 +2500 0.43067 0.60189 +2527 0.43209 0.59145 +2513 0.42389 0.59348 +2524 0.43802 0.57883 +2515 0.41198 0.55513 +2524 0.43802 0.57883 +2486 0.43730 0.55788 +2490 0.44149 0.57628 +2489 0.43920 0.58263 +2490 0.44149 0.57628 +2522 0.45048 0.58343 +2490 0.44149 0.57628 +2526 0.45191 0.57874 +2525 0.45871 0.58019 +2537 0.46490 0.58720 +2525 0.45871 0.58019 +2538 0.47110 0.58314 +2525 0.45871 0.58019 +2529 0.48171 0.58408 +2525 0.45871 0.58019 +2524 0.43802 0.57883 +2490 0.44149 0.57628 +SURF 0x24 +mat 0 +refs 26 +2512 0.49153 0.69164 +2511 0.53257 0.62300 +2510 0.52742 0.69658 +2509 0.58010 0.61939 +2510 0.52742 0.69658 +2507 0.60196 0.61812 +2508 0.54740 0.69642 +2505 0.59892 0.60989 +2506 0.54558 0.69380 +2503 0.60571 0.60198 +2504 0.52900 0.69670 +2481 0.62260 0.60500 +2482 0.55066 0.72659 +2479 0.62999 0.62233 +2480 0.56822 0.71175 +2477 0.58640 0.61422 +2478 0.52626 0.70002 +2477 0.58640 0.61422 +2476 0.45155 0.66000 +2475 0.49541 0.57470 +2484 0.43646 0.60993 +2475 0.49541 0.57470 +2483 0.45211 0.54927 +2475 0.49541 0.57470 +2502 0.46074 0.48384 +2501 0.51280 0.44054 +SURF 0x24 +mat 0 +refs 24 +2469 0.45958 0.61816 +2468 0.43695 0.59666 +2470 0.47685 0.57113 +2467 0.45526 0.53904 +2470 0.47685 0.57113 +2471 0.44512 0.54063 +2472 0.47566 0.56853 +2471 0.44512 0.54063 +2474 0.46530 0.59943 +2471 0.44512 0.54063 +2473 0.41541 0.57437 +2463 0.43151 0.52088 +2462 0.39418 0.56645 +2458 0.42403 0.50558 +2459 0.36326 0.52615 +2452 0.42024 0.48474 +2453 0.35510 0.47980 +2452 0.42024 0.48474 +2451 0.35373 0.45676 +2452 0.42024 0.48474 +2447 0.42017 0.47538 +2448 0.45247 0.48444 +2449 0.42510 0.46742 +2450 0.45087 0.47289 +SURF 0x24 +mat 0 +refs 23 +2463 0.43151 0.52088 +2471 0.44512 0.54063 +2463 0.43151 0.52088 +2467 0.45526 0.53904 +2464 0.44472 0.51631 +2468 0.43695 0.59666 +2464 0.44472 0.51631 +2465 0.43592 0.58349 +2464 0.44472 0.51631 +2461 0.44299 0.56495 +2460 0.44289 0.50719 +2456 0.46509 0.53592 +2454 0.44510 0.49347 +2455 0.48178 0.49266 +2454 0.44510 0.49347 +2448 0.45247 0.48444 +2454 0.44510 0.49347 +2452 0.42024 0.48474 +2454 0.44510 0.49347 +2458 0.42403 0.50558 +2460 0.44289 0.50719 +2463 0.43151 0.52088 +2464 0.44472 0.51631 +SURF 0x24 +mat 0 +refs 4 +2455 0.48178 0.49266 +2456 0.46509 0.53592 +2457 0.52212 0.50397 +2466 0.47545 0.61563 +SURF 0x24 +mat 0 +refs 15 +2436 0.46797 0.49030 +2445 0.42797 0.45014 +2436 0.46797 0.49030 +2446 0.41420 0.46474 +2435 0.46636 0.51126 +2443 0.40188 0.48009 +2434 0.45889 0.52693 +2444 0.39325 0.49482 +2433 0.44458 0.53527 +2442 0.37421 0.53486 +2432 0.41630 0.57651 +2437 0.34491 0.58224 +2431 0.39237 0.62931 +2438 0.33048 0.59896 +2439 0.38062 0.64584 +SURF 0x24 +mat 0 +refs 17 +2431 0.39237 0.62931 +2425 0.43241 0.65295 +2432 0.41630 0.57651 +2422 0.45651 0.59974 +2433 0.44458 0.53527 +2426 0.49952 0.55971 +2434 0.45889 0.52693 +2427 0.49506 0.54238 +2435 0.46636 0.51126 +2429 0.49476 0.52911 +2436 0.46797 0.49030 +2429 0.49476 0.52911 +2428 0.49641 0.51520 +2406 0.52574 0.53503 +2428 0.49641 0.51520 +2405 0.53459 0.51652 +2430 0.50330 0.49306 +SURF 0x24 +mat 0 +refs 34 +2403 0.55558 0.53273 +2405 0.53459 0.51652 +2403 0.55558 0.53273 +2406 0.52574 0.53503 +2404 0.54452 0.54377 +2410 0.53551 0.54429 +2411 0.53285 0.54905 +2416 0.49018 0.51392 +2412 0.52207 0.55785 +2413 0.52334 0.56795 +2399 0.53237 0.58279 +2413 0.52334 0.56795 +2415 0.51398 0.55690 +2416 0.49018 0.51392 +2409 0.50280 0.53007 +2416 0.49018 0.51392 +2408 0.52046 0.53276 +2410 0.53551 0.54429 +2408 0.52046 0.53276 +2406 0.52574 0.53503 +2407 0.50253 0.53153 +2429 0.49476 0.52911 +2407 0.50253 0.53153 +2427 0.49506 0.54238 +2414 0.51934 0.57222 +2426 0.49952 0.55971 +2417 0.51705 0.58108 +2422 0.45651 0.59974 +2418 0.48524 0.60470 +2421 0.47135 0.64471 +2418 0.48524 0.60470 +2420 0.48567 0.63475 +2419 0.50223 0.61228 +2423 0.50020 0.63619 +SURF 0x24 +mat 0 +refs 14 +2418 0.48524 0.60470 +2419 0.50223 0.61228 +2418 0.48524 0.60470 +2400 0.53369 0.59661 +2417 0.51705 0.58108 +2400 0.53369 0.59661 +2414 0.51934 0.57222 +2399 0.53237 0.58279 +2414 0.51934 0.57222 +2415 0.51398 0.55690 +2414 0.51934 0.57222 +2409 0.50280 0.53007 +2407 0.50253 0.53153 +2408 0.52046 0.53276 +SURF 0x24 +mat 0 +refs 7 +2422 0.45651 0.59974 +2425 0.43241 0.65295 +2421 0.47135 0.64471 +2424 0.46271 0.66227 +2421 0.47135 0.64471 +2440 0.48039 0.67107 +2441 0.49555 0.66602 +SURF 0x24 +mat 0 +refs 22 +2402 0.57395 0.53320 +2403 0.55558 0.53273 +2401 0.54707 0.55903 +2404 0.54452 0.54377 +2401 0.54707 0.55903 +2411 0.53285 0.54905 +2401 0.54707 0.55903 +2412 0.52207 0.55785 +2397 0.53008 0.57315 +2399 0.53237 0.58279 +2397 0.53008 0.57315 +2400 0.53369 0.59661 +2397 0.53008 0.57315 +2398 0.53414 0.58956 +2394 0.55979 0.59041 +2393 0.54991 0.60456 +2394 0.55979 0.59041 +2388 0.56261 0.62664 +2390 0.57964 0.60294 +2389 0.57829 0.63353 +2391 0.61488 0.60121 +2392 0.63624 0.60194 +SURF 0x24 +mat 0 +refs 6 +2390 0.57964 0.60294 +2396 0.60298 0.58705 +2394 0.55979 0.59041 +2395 0.57320 0.57225 +2397 0.53008 0.57315 +2401 0.54707 0.55903 +SURF 0x24 +mat 0 +refs 28 +2378 0.58206 0.37475 +2373 0.58964 0.35757 +2377 0.59699 0.38248 +2376 0.61088 0.36022 +2379 0.59878 0.38340 +2380 0.61757 0.35305 +2384 0.57076 0.36890 +2382 0.58882 0.33605 +2386 0.54805 0.35714 +2382 0.58882 0.33605 +2385 0.56338 0.32162 +2382 0.58882 0.33605 +2387 0.58111 0.29096 +2382 0.58882 0.33605 +2383 0.49042 0.27101 +2382 0.58882 0.33605 +2381 0.51581 0.29183 +2380 0.61757 0.35305 +2375 0.51136 0.29172 +2376 0.61088 0.36022 +2375 0.51136 0.29172 +2373 0.58964 0.35757 +2374 0.60928 0.31835 +2373 0.58964 0.35757 +2372 0.58645 0.32490 +2371 0.57841 0.35024 +2370 0.58021 0.31476 +2369 0.57235 0.34620 +SURF 0x24 +mat 0 +refs 8 +2367 0.23585 0.46758 +2368 0.24081 0.51436 +2367 0.23585 0.46758 +2364 0.21832 0.52335 +2363 0.21063 0.47673 +2364 0.21832 0.52335 +2365 0.21737 0.47574 +2366 0.23032 0.51385 +SURF 0x24 +mat 0 +refs 11 +2361 0.65014 0.45137 +2362 0.66137 0.43109 +2361 0.65014 0.45137 +2354 0.63973 0.39693 +2357 0.62734 0.42122 +2354 0.63973 0.39693 +2356 0.59632 0.37378 +2355 0.62088 0.36054 +2356 0.59632 0.37378 +2358 0.60086 0.31634 +2360 0.57408 0.33196 +SURF 0x24 +mat 0 +refs 7 +2359 0.65305 0.28591 +2358 0.60086 0.31634 +2359 0.65305 0.28591 +2355 0.62088 0.36054 +2353 0.66597 0.31906 +2354 0.63973 0.39693 +2352 0.68085 0.34796 +SURF 0x24 +mat 0 +refs 10 +2351 0.58656 0.27774 +2350 0.54544 0.32671 +2351 0.58656 0.27774 +2345 0.56708 0.36087 +2344 0.60223 0.30509 +2345 0.56708 0.36087 +2346 0.61595 0.32296 +2347 0.59297 0.39019 +2348 0.51505 0.30674 +2349 0.49388 0.37822 +SURF 0x24 +mat 0 +refs 5 +2341 0.54432 0.38043 +2343 0.59519 0.32231 +2341 0.54432 0.38043 +2342 0.53819 0.32488 +2340 0.51177 0.38241 +SURF 0x24 +mat 0 +refs 17 +2334 0.54041 0.35319 +2330 0.56207 0.31945 +2335 0.57036 0.36869 +2331 0.58370 0.34445 +2336 0.59736 0.38267 +2332 0.60783 0.36480 +2337 0.61749 0.39309 +2332 0.60783 0.36480 +2338 0.50741 0.34721 +2332 0.60783 0.36480 +2339 0.51702 0.32068 +2332 0.60783 0.36480 +2333 0.50192 0.30643 +2331 0.58370 0.34445 +2329 0.60035 0.31753 +2330 0.56207 0.31945 +2328 0.58448 0.29021 +SURF 0x24 +mat 0 +refs 17 +2327 0.76529 0.33357 +2324 0.75011 0.33062 +2326 0.75736 0.25431 +2320 0.72220 0.23672 +2325 0.76469 0.18684 +2320 0.72220 0.23672 +2321 0.69588 0.13174 +2318 0.69128 0.24902 +2319 0.64156 0.15456 +2318 0.69128 0.24902 +2316 0.61887 0.23054 +2317 0.64323 0.28873 +2316 0.61887 0.23054 +2313 0.62633 0.30476 +2316 0.61887 0.23054 +2314 0.60086 0.23968 +2315 0.58804 0.21498 +SURF 0x24 +mat 0 +refs 13 +2313 0.62633 0.30476 +2312 0.62149 0.33488 +2314 0.60086 0.23968 +2309 0.63413 0.26649 +2314 0.60086 0.23968 +2308 0.61700 0.24333 +2307 0.58577 0.21941 +2308 0.61700 0.24333 +2304 0.57181 0.26966 +2306 0.64325 0.29000 +2304 0.57181 0.26966 +2305 0.63448 0.30887 +2303 0.62554 0.32515 +SURF 0x24 +mat 0 +refs 7 +2306 0.64325 0.29000 +2308 0.61700 0.24333 +2306 0.64325 0.29000 +2309 0.63413 0.26649 +2310 0.65255 0.31410 +2312 0.62149 0.33488 +2311 0.61572 0.37753 +SURF 0x24 +mat 0 +refs 7 +2322 0.64952 0.39888 +2317 0.64323 0.28873 +2322 0.64952 0.39888 +2318 0.69128 0.24902 +2323 0.70924 0.35929 +2320 0.72220 0.23672 +2324 0.75011 0.33062 +SURF 0x24 +mat 0 +refs 5 +2300 0.60606 0.45263 +2302 0.63248 0.39509 +2300 0.60606 0.45263 +2301 0.60934 0.37695 +2299 0.58817 0.44844 +SURF 0x24 +mat 0 +refs 5 +2296 0.28163 0.54352 +2298 0.26377 0.51878 +2296 0.28163 0.54352 +2297 0.25570 0.45867 +2295 0.23499 0.51988 +SURF 0x24 +mat 0 +refs 18 +2294 0.57323 0.48753 +2293 0.59496 0.51782 +2294 0.57323 0.48753 +2291 0.61178 0.49385 +2290 0.56927 0.45516 +2291 0.61178 0.49385 +2288 0.61765 0.43570 +2285 0.63067 0.46649 +2289 0.59583 0.42296 +2285 0.63067 0.46649 +2283 0.62180 0.43296 +2284 0.64306 0.49185 +2283 0.62180 0.43296 +2282 0.64639 0.45673 +2283 0.62180 0.43296 +2287 0.65016 0.43569 +2286 0.60291 0.40405 +2292 0.67590 0.37306 +SURF 0x24 +mat 0 +refs 24 +2280 0.35794 0.33174 +2281 0.32745 0.39458 +2278 0.37824 0.34462 +2279 0.34433 0.40508 +2274 0.38104 0.34637 +2275 0.33116 0.42107 +2268 0.38866 0.35121 +2269 0.33644 0.42801 +2268 0.38866 0.35121 +2267 0.35679 0.44093 +2266 0.40688 0.36276 +2263 0.37679 0.45031 +2261 0.42782 0.37605 +2262 0.43033 0.46573 +2260 0.47139 0.40368 +2265 0.47402 0.47325 +2264 0.50346 0.42402 +2265 0.47402 0.47325 +2270 0.51515 0.43143 +2271 0.49052 0.47759 +2272 0.53463 0.44379 +2273 0.50864 0.48530 +2276 0.55332 0.45564 +2277 0.52641 0.49462 +SURF 0x24 +mat 0 +refs 14 +2258 0.51145 0.30020 +2259 0.49725 0.35896 +2258 0.51145 0.30020 +2256 0.59331 0.38055 +2257 0.60563 0.33099 +2256 0.59331 0.38055 +2255 0.59630 0.32717 +2254 0.58036 0.37385 +2253 0.48903 0.31991 +2252 0.59188 0.37981 +2251 0.50922 0.33301 +2250 0.61311 0.39080 +2249 0.51658 0.34051 +2248 0.50646 0.36375 +SURF 0x24 +mat 0 +refs 29 +2246 0.51223 0.48035 +2247 0.52471 0.48525 +2246 0.51223 0.48035 +2239 0.52078 0.50361 +2238 0.50984 0.50054 +2222 0.50138 0.51903 +2238 0.50984 0.50054 +2223 0.49420 0.51785 +2237 0.50122 0.49813 +2236 0.47473 0.51451 +2244 0.48382 0.49325 +2211 0.45487 0.50839 +2245 0.46315 0.48745 +2211 0.45487 0.50839 +2243 0.44455 0.48224 +2210 0.43603 0.50493 +2242 0.41219 0.47317 +2210 0.43603 0.50493 +2231 0.39737 0.50551 +2209 0.42243 0.53619 +2230 0.38698 0.53631 +2212 0.40933 0.56990 +2233 0.37823 0.56659 +2213 0.40150 0.59109 +2232 0.37495 0.58887 +2215 0.40607 0.60769 +2234 0.37430 0.61102 +2217 0.41143 0.62571 +2235 0.37737 0.64027 +SURF 0x24 +mat 0 +refs 65 +2172 0.57914 0.51995 +2127 0.54381 0.58534 +2126 0.55497 0.51318 +2125 0.52504 0.56607 +2124 0.53297 0.50701 +2125 0.52504 0.56607 +2122 0.50897 0.54967 +2123 0.47619 0.61079 +2122 0.50897 0.54967 +2119 0.47062 0.59466 +2122 0.50897 0.54967 +2129 0.49863 0.54813 +2124 0.53297 0.50701 +2129 0.49863 0.54813 +2152 0.51893 0.50307 +2144 0.52181 0.53627 +2151 0.53142 0.50657 +2137 0.54601 0.54035 +2149 0.55444 0.51303 +2106 0.55651 0.53989 +2107 0.56497 0.51600 +2106 0.55651 0.53989 +2095 0.57510 0.51884 +2099 0.56881 0.53812 +2100 0.56448 0.53136 +2120 0.55366 0.56054 +2101 0.55438 0.52874 +2133 0.54330 0.55469 +2102 0.53282 0.52847 +2138 0.52254 0.55480 +2104 0.50130 0.52688 +2130 0.49510 0.55792 +2131 0.46843 0.53039 +2132 0.46485 0.56706 +2155 0.45009 0.56396 +2156 0.44836 0.59986 +2159 0.44209 0.61492 +2177 0.45995 0.63859 +2173 0.46172 0.64358 +2164 0.46559 0.65313 +2173 0.46172 0.64358 +2168 0.47008 0.64643 +2159 0.44209 0.61492 +2174 0.45225 0.61898 +2159 0.44209 0.61492 +2158 0.44771 0.56180 +2155 0.45009 0.56396 +2176 0.45048 0.52609 +2155 0.45009 0.56396 +2153 0.45335 0.52626 +2131 0.46843 0.53039 +2150 0.47562 0.49095 +2131 0.46843 0.53039 +2105 0.50809 0.50005 +2104 0.50130 0.52688 +2103 0.53736 0.50826 +2102 0.53282 0.52847 +2097 0.55919 0.51438 +2101 0.55438 0.52874 +2093 0.56862 0.51702 +2100 0.56448 0.53136 +2093 0.56862 0.51702 +2095 0.57510 0.51884 +2094 0.57254 0.50262 +2096 0.57975 0.49911 +SURF 0x24 +mat 0 +refs 4 +2094 0.57254 0.50262 +2093 0.56862 0.51702 +2098 0.56254 0.49961 +2097 0.55919 0.51438 +SURF 0x24 +mat 0 +refs 107 +2150 0.47562 0.49095 +2153 0.45335 0.52626 +2154 0.46127 0.48692 +2176 0.45048 0.52609 +2184 0.45748 0.48586 +2185 0.47086 0.52970 +2186 0.48390 0.49327 +2221 0.49931 0.53651 +2220 0.50853 0.50017 +2226 0.53193 0.54370 +2241 0.53890 0.50869 +2227 0.53193 0.53390 +2240 0.53697 0.50815 +2229 0.51459 0.52134 +2239 0.52078 0.50361 +2229 0.51459 0.52134 +2222 0.50138 0.51903 +2198 0.48998 0.54304 +2222 0.50138 0.51903 +2197 0.47849 0.54620 +2223 0.49420 0.51785 +2206 0.46005 0.54260 +2236 0.47473 0.51451 +2206 0.46005 0.54260 +2211 0.45487 0.50839 +2207 0.44019 0.53658 +2210 0.43603 0.50493 +2207 0.44019 0.53658 +2209 0.42243 0.53619 +2208 0.42827 0.56593 +2212 0.40933 0.56990 +2214 0.41446 0.59661 +2213 0.40150 0.59109 +2216 0.41961 0.61000 +2215 0.40607 0.60769 +2218 0.42464 0.62601 +2217 0.41143 0.62571 +2188 0.43962 0.64272 +2219 0.43054 0.65275 +2188 0.43962 0.64272 +2178 0.46522 0.66680 +2179 0.47002 0.65261 +2167 0.47799 0.64898 +2171 0.48554 0.64003 +2170 0.48721 0.63272 +2171 0.48554 0.64003 +2180 0.49342 0.63026 +2179 0.47002 0.65261 +2181 0.47102 0.63468 +2179 0.47002 0.65261 +2187 0.45825 0.63618 +2188 0.43962 0.64272 +2187 0.45825 0.63618 +2218 0.42464 0.62601 +2189 0.44020 0.63196 +2216 0.41961 0.61000 +2192 0.43662 0.61614 +2214 0.41446 0.59661 +2194 0.43744 0.60178 +2214 0.41446 0.59661 +2196 0.44639 0.57617 +2208 0.42827 0.56593 +2196 0.44639 0.57617 +2207 0.44019 0.53658 +2196 0.44639 0.57617 +2206 0.46005 0.54260 +2196 0.44639 0.57617 +2197 0.47849 0.54620 +2195 0.45828 0.57383 +2198 0.48998 0.54304 +2199 0.47229 0.56968 +2198 0.48998 0.54304 +2201 0.50218 0.56341 +2229 0.51459 0.52134 +2205 0.51940 0.57199 +2227 0.53193 0.53390 +2205 0.51940 0.57199 +2226 0.53193 0.54370 +2203 0.52273 0.57495 +2221 0.49931 0.53651 +2202 0.48996 0.57284 +2221 0.49931 0.53651 +2175 0.46290 0.56421 +2185 0.47086 0.52970 +2175 0.46290 0.56421 +2176 0.45048 0.52609 +2175 0.46290 0.56421 +2158 0.44771 0.56180 +2175 0.46290 0.56421 +2174 0.45225 0.61898 +2202 0.48996 0.57284 +2182 0.49100 0.61202 +2202 0.48996 0.57284 +2183 0.51120 0.60432 +2203 0.52273 0.57495 +2204 0.50316 0.59992 +2205 0.51940 0.57199 +2200 0.48667 0.59058 +2201 0.50218 0.56341 +2200 0.48667 0.59058 +2199 0.47229 0.56968 +2224 0.45630 0.58908 +2195 0.45828 0.57383 +2193 0.44484 0.59679 +2195 0.45828 0.57383 +2194 0.43744 0.60178 +2196 0.44639 0.57617 +SURF 0x24 +mat 0 +refs 21 +2192 0.43662 0.61614 +2194 0.43744 0.60178 +2192 0.43662 0.61614 +2193 0.44484 0.59679 +2191 0.44866 0.61303 +2224 0.45630 0.58908 +2228 0.46325 0.60834 +2200 0.48667 0.59058 +2225 0.47967 0.62243 +2204 0.50316 0.59992 +2180 0.49342 0.63026 +2183 0.51120 0.60432 +2170 0.48721 0.63272 +2182 0.49100 0.61202 +2170 0.48721 0.63272 +2174 0.45225 0.61898 +2169 0.47976 0.64187 +2168 0.47008 0.64643 +2169 0.47976 0.64187 +2167 0.47799 0.64898 +2170 0.48721 0.63272 +SURF 0x24 +mat 0 +refs 47 +2118 0.42256 0.66955 +2117 0.44744 0.63444 +2119 0.47062 0.59466 +2116 0.47461 0.58559 +2129 0.49863 0.54813 +2116 0.47461 0.58559 +2144 0.52181 0.53627 +2115 0.50301 0.58070 +2137 0.54601 0.54035 +2112 0.53271 0.57695 +2137 0.54601 0.54035 +2109 0.54475 0.57258 +2106 0.55651 0.53989 +2108 0.55499 0.57025 +2099 0.56881 0.53812 +2108 0.55499 0.57025 +2120 0.55366 0.56054 +2121 0.53733 0.59036 +2120 0.55366 0.56054 +2135 0.52715 0.58628 +2133 0.54330 0.55469 +2140 0.51043 0.58433 +2138 0.52254 0.55480 +2146 0.48714 0.58639 +2130 0.49510 0.55792 +2157 0.46222 0.60054 +2132 0.46485 0.56706 +2157 0.46222 0.60054 +2156 0.44836 0.59986 +2145 0.46347 0.63374 +2177 0.45995 0.63859 +2147 0.46402 0.64707 +2177 0.45995 0.63859 +2161 0.46078 0.64925 +2164 0.46559 0.65313 +2162 0.45502 0.67080 +2164 0.46559 0.65313 +2163 0.45567 0.67024 +2165 0.47111 0.65390 +2166 0.45855 0.66757 +2165 0.47111 0.65390 +2178 0.46522 0.66680 +2165 0.47111 0.65390 +2167 0.47799 0.64898 +2165 0.47111 0.65390 +2168 0.47008 0.64643 +2164 0.46559 0.65313 +SURF 0x24 +mat 0 +refs 31 +2162 0.45502 0.67080 +2161 0.46078 0.64925 +2160 0.45693 0.66810 +2147 0.46402 0.64707 +2160 0.45693 0.66810 +2142 0.47269 0.64752 +2148 0.46075 0.66231 +2114 0.48894 0.61470 +2117 0.44744 0.63444 +2114 0.48894 0.61470 +2116 0.47461 0.58559 +2114 0.48894 0.61470 +2115 0.50301 0.58070 +2113 0.52244 0.59890 +2112 0.53271 0.57695 +2113 0.52244 0.59890 +2109 0.54475 0.57258 +2111 0.53179 0.59686 +2110 0.53932 0.59688 +2128 0.52041 0.61243 +2121 0.53733 0.59036 +2136 0.51016 0.61532 +2121 0.53733 0.59036 +2134 0.51636 0.60275 +2135 0.52715 0.58628 +2134 0.51636 0.60275 +2140 0.51043 0.58433 +2139 0.48797 0.62044 +2146 0.48714 0.58639 +2145 0.46347 0.63374 +2157 0.46222 0.60054 +SURF 0x24 +mat 0 +refs 12 +2134 0.51636 0.60275 +2136 0.51016 0.61532 +2139 0.48797 0.62044 +2141 0.47865 0.63520 +2145 0.46347 0.63374 +2141 0.47865 0.63520 +2147 0.46402 0.64707 +2141 0.47865 0.63520 +2142 0.47269 0.64752 +2141 0.47865 0.63520 +2143 0.50824 0.62189 +2136 0.51016 0.61532 +SURF 0x24 +mat 0 +refs 4 +2143 0.50824 0.62189 +2113 0.52244 0.59890 +2142 0.47269 0.64752 +2114 0.48894 0.61470 +SURF 0x24 +mat 0 +refs 4 +2121 0.53733 0.59036 +2108 0.55499 0.57025 +2110 0.53932 0.59688 +2109 0.54475 0.57258 +SURF 0x24 +mat 0 +refs 17 +2089 0.31738 0.47678 +2088 0.31388 0.47719 +2081 0.32295 0.46827 +2087 0.31051 0.47938 +2081 0.32295 0.46827 +2086 0.30890 0.48221 +2081 0.32295 0.46827 +2085 0.30962 0.48467 +2081 0.32295 0.46827 +2084 0.31225 0.48592 +2081 0.32295 0.46827 +2083 0.31585 0.48533 +2081 0.32295 0.46827 +2082 0.31890 0.48340 +2081 0.32295 0.46827 +2079 0.32034 0.48086 +2080 0.31976 0.47831 +SURF 0x24 +mat 0 +refs 17 +2078 0.31732 0.56333 +2077 0.33044 0.56976 +2078 0.31732 0.56333 +2075 0.32941 0.58318 +2076 0.32077 0.56847 +2072 0.32774 0.59621 +2073 0.32532 0.58125 +2067 0.32375 0.61075 +2073 0.32532 0.58125 +2068 0.32451 0.59832 +2074 0.33145 0.57290 +2068 0.32451 0.59832 +2069 0.33169 0.59330 +2063 0.32201 0.60931 +2065 0.33010 0.60861 +2064 0.31572 0.61496 +2066 0.32093 0.61463 +SURF 0x24 +mat 0 +refs 10 +2062 0.31129 0.62076 +2064 0.31572 0.61496 +2062 0.31129 0.62076 +2063 0.32201 0.60931 +2061 0.31720 0.61798 +2068 0.32451 0.59832 +2061 0.31720 0.61798 +2067 0.32375 0.61075 +2071 0.31751 0.63131 +2070 0.33008 0.62611 +SURF 0x24 +mat 0 +refs 5 +2058 0.31914 0.50286 +2060 0.31355 0.50397 +2058 0.31914 0.50286 +2059 0.32571 0.49684 +2057 0.33635 0.49334 +SURF 0x24 +mat 0 +refs 10 +2055 0.37468 0.52044 +2056 0.35291 0.48853 +2053 0.36959 0.52473 +2054 0.35035 0.48992 +2049 0.36471 0.52438 +2050 0.34794 0.48906 +2046 0.36180 0.51949 +2051 0.34660 0.48609 +2048 0.36193 0.51160 +2052 0.34681 0.48207 +SURF 0x24 +mat 0 +refs 5 +2046 0.36180 0.51949 +2048 0.36193 0.51160 +2046 0.36180 0.51949 +2047 0.36956 0.51494 +2045 0.37259 0.52856 +SURF 0x24 +mat 0 +refs 17 +2043 0.18822 0.50796 +2042 0.17809 0.54524 +2041 0.19176 0.50710 +2040 0.18604 0.54299 +2039 0.19465 0.50495 +2038 0.19256 0.53806 +2037 0.19589 0.50230 +2036 0.19504 0.53221 +2035 0.19512 0.49980 +2034 0.19210 0.52789 +2033 0.19263 0.49846 +2032 0.18485 0.52704 +2044 0.18917 0.49914 +2032 0.18485 0.52704 +2030 0.17653 0.52980 +2031 0.19026 0.53071 +2029 0.17895 0.53778 +SURF 0x24 +mat 0 +refs 5 +2026 0.31470 0.60118 +2028 0.32784 0.60474 +2026 0.31470 0.60118 +2027 0.33154 0.58534 +2025 0.31386 0.59065 +SURF 0x24 +mat 0 +refs 17 +2024 0.51445 0.23334 +2023 0.47992 0.27039 +2022 0.54353 0.24195 +2021 0.49625 0.27487 +2020 0.56465 0.25001 +2014 0.52267 0.28289 +2018 0.57266 0.25082 +2015 0.53193 0.28537 +2019 0.51924 0.23196 +2015 0.53193 0.28537 +2017 0.49141 0.26691 +2015 0.53193 0.28537 +2016 0.44824 0.32132 +2015 0.53193 0.28537 +2013 0.47485 0.33140 +2014 0.52267 0.28289 +2012 0.46566 0.32437 +SURF 0x24 +mat 0 +refs 20 +2010 0.54544 0.41939 +2011 0.60246 0.37791 +2010 0.54544 0.41939 +2008 0.57603 0.36990 +2009 0.53448 0.41106 +2008 0.57603 0.36990 +2000 0.52656 0.40318 +1999 0.55970 0.36541 +1996 0.51487 0.35106 +2004 0.59423 0.32836 +1996 0.51487 0.35106 +2002 0.54985 0.31226 +1995 0.48341 0.32954 +2002 0.54985 0.31226 +2001 0.50306 0.28913 +2006 0.59486 0.24259 +2001 0.50306 0.28913 +2005 0.53887 0.22376 +2003 0.44947 0.25248 +2007 0.46321 0.19024 +SURF 0x24 +mat 0 +refs 8 +2001 0.50306 0.28913 +2003 0.44947 0.25248 +2001 0.50306 0.28913 +1998 0.44824 0.30571 +1995 0.48341 0.32954 +1998 0.44824 0.30571 +1993 0.46628 0.37158 +1997 0.45191 0.36750 +SURF 0x24 +mat 0 +refs 6 +1995 0.48341 0.32954 +1993 0.46628 0.37158 +1995 0.48341 0.32954 +1994 0.49218 0.38176 +1996 0.51487 0.35106 +2000 0.52656 0.40318 +SURF 0x24 +mat 0 +refs 17 +1992 0.48094 0.19855 +1991 0.54718 0.25921 +1992 0.48094 0.19855 +1989 0.52795 0.30814 +1990 0.46845 0.26258 +1984 0.51473 0.34544 +1986 0.46254 0.30969 +1984 0.51473 0.34544 +1987 0.45456 0.37664 +1984 0.51473 0.34544 +1985 0.49479 0.39897 +1984 0.51473 0.34544 +1983 0.52802 0.41635 +1984 0.51473 0.34544 +1982 0.57119 0.36193 +1989 0.52795 0.30814 +1988 0.59902 0.32698 +SURF 0x24 +mat 0 +refs 5 +1979 0.37907 0.40751 +1981 0.42981 0.31360 +1979 0.37907 0.40751 +1980 0.47082 0.35612 +1978 0.41631 0.47629 +SURF 0x24 +mat 0 +refs 5 +1975 0.69258 0.46949 +1977 0.67697 0.41316 +1975 0.69258 0.46949 +1976 0.63295 0.46408 +1974 0.60971 0.56421 +SURF 0x24 +mat 0 +refs 96 +1960 0.39785 0.26170 +1973 0.37261 0.25144 +1960 0.39785 0.26170 +1965 0.38595 0.22050 +1961 0.40740 0.24119 +1962 0.42238 0.21707 +1947 0.43145 0.22451 +1962 0.42238 0.21707 +1963 0.46138 0.18554 +1971 0.44686 0.16721 +1972 0.46549 0.17878 +1971 0.44686 0.16721 +1958 0.45064 0.16251 +1968 0.43399 0.13622 +1958 0.45064 0.16251 +1957 0.43831 0.13144 +1956 0.45286 0.16622 +1955 0.43859 0.13963 +1932 0.43850 0.20224 +1953 0.41842 0.18460 +1940 0.40810 0.20552 +1942 0.37815 0.18704 +1940 0.40810 0.20552 +1941 0.36790 0.20791 +1940 0.40810 0.20552 +1939 0.40076 0.22039 +1930 0.42136 0.23681 +1959 0.37318 0.27029 +1930 0.42136 0.23681 +1931 0.39940 0.27389 +1918 0.44041 0.25154 +1931 0.39940 0.27389 +1920 0.42124 0.27992 +1938 0.39127 0.28798 +1923 0.41219 0.29271 +1946 0.38774 0.29238 +1945 0.40652 0.29681 +1946 0.38774 0.29238 +1949 0.41016 0.26584 +1960 0.39785 0.26170 +1949 0.41016 0.26584 +1961 0.40740 0.24119 +1948 0.41932 0.24746 +1947 0.43145 0.22451 +1948 0.41932 0.24746 +1928 0.46391 0.24259 +1948 0.41932 0.24746 +1936 0.45241 0.26326 +1949 0.41016 0.26584 +1950 0.44246 0.28003 +1945 0.40652 0.29681 +1944 0.43410 0.30664 +1923 0.41219 0.29271 +1924 0.44000 0.30492 +1920 0.42124 0.27992 +1921 0.44717 0.29297 +1918 0.44041 0.25154 +1914 0.46363 0.26773 +1918 0.44041 0.25154 +1919 0.44968 0.23419 +1930 0.42136 0.23681 +1933 0.42613 0.21803 +1940 0.40810 0.20552 +1933 0.42613 0.21803 +1932 0.43850 0.20224 +1933 0.42613 0.21803 +1922 0.45877 0.21540 +1919 0.44968 0.23419 +1911 0.47392 0.24920 +1914 0.46363 0.26773 +1912 0.55821 0.30953 +1914 0.46363 0.26773 +1913 0.53944 0.34600 +1921 0.44717 0.29297 +1926 0.52776 0.37424 +1924 0.44000 0.30492 +1937 0.52525 0.37972 +1944 0.43410 0.30664 +1943 0.53552 0.36112 +1944 0.43410 0.30664 +1951 0.54565 0.34624 +1950 0.44246 0.28003 +1934 0.55900 0.32572 +1936 0.45241 0.26326 +1927 0.57071 0.29293 +1928 0.46391 0.24259 +1915 0.57530 0.27822 +1916 0.48344 0.20717 +1902 0.58147 0.26285 +1909 0.48944 0.19937 +1903 0.58469 0.25384 +1908 0.49232 0.20013 +1906 0.57441 0.27342 +1910 0.48242 0.22892 +1911 0.47392 0.24920 +1922 0.45877 0.21540 +SURF 0x24 +mat 0 +refs 6 +1906 0.57441 0.27342 +1911 0.47392 0.24920 +1906 0.57441 0.27342 +1912 0.55821 0.30953 +1907 0.60874 0.29719 +1925 0.59291 0.33118 +SURF 0x24 +mat 0 +refs 14 +1906 0.57441 0.27342 +1907 0.60874 0.29719 +1903 0.58469 0.25384 +1905 0.62376 0.27301 +1903 0.58469 0.25384 +1904 0.62073 0.28418 +1902 0.58147 0.26285 +1917 0.61709 0.29746 +1915 0.57530 0.27822 +1929 0.61558 0.30853 +1927 0.57071 0.29293 +1929 0.61558 0.30853 +1934 0.55900 0.32572 +1935 0.60129 0.34643 +SURF 0x24 +mat 0 +refs 20 +1952 0.39130 0.16024 +1942 0.37815 0.18704 +1952 0.39130 0.16024 +1953 0.41842 0.18460 +1954 0.41570 0.11080 +1955 0.43859 0.13963 +1970 0.41719 0.10751 +1957 0.43831 0.13144 +1969 0.40941 0.12361 +1968 0.43399 0.13622 +1966 0.38423 0.17465 +1964 0.40472 0.18867 +1967 0.36860 0.20650 +1964 0.40472 0.18867 +1965 0.38595 0.22050 +1964 0.40472 0.18867 +1962 0.42238 0.21707 +1964 0.40472 0.18867 +1971 0.44686 0.16721 +1968 0.43399 0.13622 +SURF 0x24 +mat 0 +refs 16 +1900 0.48568 0.25721 +1901 0.44874 0.23966 +1900 0.48568 0.25721 +1899 0.43425 0.27804 +1898 0.47223 0.30121 +1899 0.43425 0.27804 +1897 0.46767 0.32878 +1896 0.42587 0.30742 +1895 0.46723 0.32948 +1894 0.42401 0.31315 +1893 0.47666 0.30962 +1892 0.43208 0.29349 +1888 0.48417 0.29671 +1889 0.44045 0.27757 +1890 0.49575 0.27140 +1891 0.45137 0.25565 +SURF 0x24 +mat 0 +refs 5 +1885 0.43794 0.25067 +1887 0.47558 0.24188 +1885 0.43794 0.25067 +1886 0.58975 0.37322 +1884 0.52757 0.37208 +SURF 0x24 +mat 0 +refs 6 +1873 0.37551 0.36171 +1872 0.37026 0.32492 +1871 0.41552 0.35583 +1870 0.41940 0.32518 +1869 0.42536 0.35589 +1864 0.42726 0.32435 +SURF 0x24 +mat 0 +refs 7 +1867 0.39759 0.36818 +1868 0.42650 0.35864 +1867 0.39759 0.36818 +1862 0.42592 0.32913 +1866 0.39404 0.34116 +1861 0.42962 0.30670 +1865 0.39225 0.31706 +SURF 0x24 +mat 0 +refs 4 +1861 0.42962 0.30670 +1862 0.42592 0.32913 +1863 0.43124 0.30269 +1864 0.42726 0.32435 +SURF 0x24 +mat 0 +refs 5 +1858 0.48353 0.35768 +1860 0.42083 0.24156 +1858 0.48353 0.35768 +1859 0.47186 0.23409 +1857 0.54497 0.36610 +SURF 0x24 +mat 0 +refs 5 +1856 0.57534 0.27210 +1855 0.55782 0.27565 +1846 0.57183 0.27291 +1847 0.48840 0.28914 +1845 0.51769 0.28340 +SURF 0x24 +mat 0 +refs 30 +1854 0.50195 0.28648 +1853 0.46713 0.29331 +1855 0.55782 0.27565 +1851 0.39406 0.30763 +1847 0.48840 0.28914 +1849 0.40846 0.30481 +1848 0.46558 0.29361 +1849 0.40846 0.30481 +1883 0.47553 0.32732 +1849 0.40846 0.30481 +1882 0.41912 0.33556 +1849 0.40846 0.30481 +1850 0.38597 0.30922 +1851 0.39406 0.30763 +1850 0.38597 0.30922 +1880 0.40057 0.33763 +1882 0.41912 0.33556 +1880 0.40057 0.33763 +1881 0.43211 0.35861 +1880 0.40057 0.33763 +1879 0.41597 0.36066 +1876 0.40162 0.33660 +1878 0.41034 0.36052 +1876 0.40162 0.33660 +1877 0.44088 0.35001 +1876 0.40162 0.33660 +1874 0.43378 0.32370 +1876 0.40162 0.33660 +1851 0.39406 0.30763 +1880 0.40057 0.33763 +SURF 0x24 +mat 0 +refs 5 +1842 0.39602 0.27837 +1844 0.39315 0.27761 +1842 0.39602 0.27837 +1843 0.36919 0.25702 +1841 0.37218 0.26098 +SURF 0x24 +mat 0 +refs 7 +1840 0.26990 0.54886 +1839 0.20027 0.58272 +1840 0.26990 0.54886 +1835 0.18707 0.52266 +1837 0.25234 0.46863 +1836 0.17916 0.45464 +1838 0.27486 0.36461 +SURF 0x24 +mat 0 +refs 5 +1832 0.24092 0.39735 +1834 0.29359 0.34785 +1832 0.24092 0.39735 +1833 0.40815 0.40747 +1831 0.32444 0.47318 +SURF 0x24 +mat 0 +refs 5 +1828 0.42783 0.45325 +1830 0.38343 0.52234 +1828 0.42783 0.45325 +1829 0.27501 0.45217 +1827 0.33273 0.39279 +SURF 0x24 +mat 0 +refs 24 +1822 0.54967 0.28287 +1826 0.51592 0.32510 +1822 0.54967 0.28287 +1823 0.48059 0.31181 +1813 0.50843 0.26129 +1814 0.46166 0.30580 +1801 0.47977 0.26697 +1802 0.44168 0.29629 +1789 0.45798 0.26382 +1806 0.38207 0.26985 +1789 0.45798 0.26382 +1790 0.39580 0.24657 +1786 0.40658 0.23079 +1796 0.36860 0.22804 +1786 0.40658 0.23079 +1795 0.38868 0.21073 +1788 0.40737 0.23453 +1795 0.38868 0.21073 +1794 0.38942 0.21468 +1819 0.37126 0.19657 +1794 0.38942 0.21468 +1818 0.37422 0.19656 +1793 0.38368 0.22730 +1817 0.36715 0.21150 +SURF 0x24 +mat 0 +refs 5 +1806 0.38207 0.26985 +1802 0.44168 0.29629 +1806 0.38207 0.26985 +1809 0.42807 0.32554 +1810 0.36993 0.30002 +SURF 0x24 +mat 0 +refs 19 +1822 0.54967 0.28287 +1813 0.50843 0.26129 +1820 0.57798 0.23951 +1811 0.51862 0.24454 +1821 0.57493 0.24645 +1812 0.51762 0.25194 +1824 0.56929 0.25425 +1815 0.51758 0.25879 +1825 0.55163 0.28791 +1815 0.51758 0.25879 +1816 0.51085 0.28454 +1803 0.48768 0.26662 +1804 0.48155 0.28393 +1792 0.46613 0.26551 +1805 0.46173 0.28049 +1798 0.39834 0.25865 +1805 0.46173 0.28049 +1807 0.38918 0.27962 +1808 0.45358 0.30817 +SURF 0x24 +mat 0 +refs 19 +1813 0.50843 0.26129 +1801 0.47977 0.26697 +1811 0.51862 0.24454 +1799 0.48698 0.25535 +1812 0.51762 0.25194 +1800 0.48679 0.26118 +1815 0.51758 0.25879 +1800 0.48679 0.26118 +1803 0.48768 0.26662 +1787 0.46538 0.26018 +1792 0.46613 0.26551 +1787 0.46538 0.26018 +1788 0.40737 0.23453 +1787 0.46538 0.26018 +1786 0.40658 0.23079 +1785 0.46507 0.25421 +1789 0.45798 0.26382 +1799 0.48698 0.25535 +1801 0.47977 0.26697 +SURF 0x24 +mat 0 +refs 4 +1799 0.48698 0.25535 +1785 0.46507 0.25421 +1800 0.48679 0.26118 +1787 0.46538 0.26018 +SURF 0x24 +mat 0 +refs 11 +1793 0.38368 0.22730 +1797 0.37285 0.25021 +1793 0.38368 0.22730 +1798 0.39834 0.25865 +1791 0.40427 0.24375 +1792 0.46613 0.26551 +1791 0.40427 0.24375 +1788 0.40737 0.23453 +1791 0.40427 0.24375 +1794 0.38942 0.21468 +1793 0.38368 0.22730 +SURF 0x24 +mat 0 +refs 36 +1783 0.38174 0.18059 +1767 0.41121 0.18961 +1780 0.39301 0.15766 +1759 0.41919 0.16951 +1781 0.40386 0.13548 +1760 0.43020 0.15143 +1773 0.42157 0.09934 +1762 0.44554 0.11772 +1774 0.42956 0.08317 +1775 0.45256 0.09764 +1782 0.42977 0.08289 +1777 0.44865 0.10024 +1776 0.42307 0.09639 +1764 0.43400 0.12261 +1778 0.39575 0.15206 +1755 0.41600 0.16188 +1779 0.36913 0.20629 +1755 0.41600 0.16188 +1756 0.39529 0.20224 +1737 0.43363 0.17003 +1756 0.39529 0.20224 +1733 0.41910 0.20718 +1757 0.38541 0.22901 +1735 0.41081 0.23640 +1758 0.37969 0.24155 +1736 0.41102 0.24284 +1766 0.39415 0.22390 +1739 0.41782 0.22394 +1767 0.41121 0.18961 +1740 0.43112 0.19659 +1759 0.41919 0.16951 +1742 0.43962 0.17859 +1760 0.43020 0.15143 +1761 0.44803 0.16185 +1762 0.44554 0.11772 +1763 0.46344 0.13326 +SURF 0x24 +mat 0 +refs 22 +1777 0.44865 0.10024 +1784 0.46756 0.11833 +1764 0.43400 0.12261 +1765 0.45371 0.13716 +1755 0.41600 0.16188 +1765 0.45371 0.13716 +1737 0.43363 0.17003 +1738 0.46490 0.14980 +1737 0.43363 0.17003 +1734 0.44793 0.17655 +1733 0.41910 0.20718 +1712 0.43585 0.20950 +1735 0.41081 0.23640 +1710 0.43318 0.24163 +1736 0.41102 0.24284 +1711 0.43669 0.23970 +1739 0.41782 0.22394 +1713 0.44005 0.22831 +1740 0.43112 0.19659 +1741 0.45044 0.20379 +1742 0.43962 0.17859 +1743 0.45939 0.18888 +SURF 0x24 +mat 0 +refs 25 +1712 0.43585 0.20950 +1707 0.46622 0.22178 +1710 0.43318 0.24163 +1705 0.46055 0.24316 +1711 0.43669 0.23970 +1709 0.46377 0.24102 +1713 0.44005 0.22831 +1714 0.46925 0.23258 +1741 0.45044 0.20379 +1714 0.46925 0.23258 +1725 0.47712 0.21808 +1722 0.54189 0.24713 +1724 0.48548 0.20138 +1722 0.54189 0.24713 +1723 0.54988 0.22993 +1732 0.55481 0.25651 +1723 0.54988 0.22993 +1744 0.56478 0.23677 +1746 0.55803 0.20225 +1744 0.56478 0.23677 +1745 0.57785 0.20569 +1750 0.58845 0.24868 +1752 0.60715 0.20630 +1751 0.61957 0.26395 +1772 0.64793 0.20967 +SURF 0x24 +mat 0 +refs 13 +1749 0.60431 0.29418 +1751 0.61957 0.26395 +1749 0.60431 0.29418 +1750 0.58845 0.24868 +1731 0.57590 0.27518 +1744 0.56478 0.23677 +1731 0.57590 0.27518 +1732 0.55481 0.25651 +1731 0.57590 0.27518 +1729 0.56002 0.30816 +1731 0.57590 0.27518 +1754 0.58170 0.33738 +1749 0.60431 0.29418 +SURF 0x24 +mat 0 +refs 11 +1705 0.46055 0.24316 +1707 0.46622 0.22178 +1705 0.46055 0.24316 +1706 0.52437 0.24730 +1704 0.51551 0.27185 +1716 0.53932 0.26038 +1715 0.52711 0.28896 +1727 0.55661 0.28082 +1726 0.53677 0.31977 +1748 0.58959 0.31264 +1747 0.57214 0.35897 +SURF 0x24 +mat 0 +refs 15 +1770 0.64597 0.20463 +1769 0.70916 0.21009 +1753 0.61222 0.24686 +1768 0.67572 0.25503 +1753 0.61222 0.24686 +1771 0.61224 0.32965 +1753 0.61222 0.24686 +1748 0.58959 0.31264 +1753 0.61222 0.24686 +1727 0.55661 0.28082 +1728 0.57688 0.23358 +1716 0.53932 0.26038 +1717 0.55795 0.22756 +1706 0.52437 0.24730 +1718 0.53798 0.21805 +SURF 0x24 +mat 0 +refs 10 +1703 0.46141 0.38950 +1702 0.50342 0.41571 +1697 0.45441 0.37157 +1698 0.51107 0.38844 +1696 0.45736 0.33622 +1695 0.52355 0.34306 +1691 0.45663 0.32539 +1692 0.52872 0.33189 +1693 0.48107 0.17939 +1694 0.54628 0.18265 +SURF 0x24 +mat 0 +refs 5 +1694 0.54628 0.18265 +1701 0.56857 0.29842 +1694 0.54628 0.18265 +1700 0.50072 0.17126 +1699 0.47090 0.17637 +SURF 0x24 +mat 0 +refs 14 +1690 0.67292 0.50545 +1689 0.69023 0.41901 +1683 0.72269 0.47296 +1688 0.75680 0.36561 +1683 0.72269 0.47296 +1687 0.78935 0.35988 +1678 0.76419 0.46136 +1685 0.77748 0.37749 +1679 0.75433 0.46801 +1686 0.73039 0.42598 +1679 0.75433 0.46801 +1681 0.71487 0.49654 +1674 0.73054 0.57049 +1680 0.67776 0.59038 +SURF 0x24 +mat 0 +refs 14 +1682 0.71010 0.58102 +1683 0.72269 0.47296 +1682 0.71010 0.58102 +1678 0.76419 0.46136 +1676 0.72713 0.57258 +1679 0.75433 0.46801 +1676 0.72713 0.57258 +1674 0.73054 0.57049 +1676 0.72713 0.57258 +1675 0.70622 0.64321 +1676 0.72713 0.57258 +1677 0.69865 0.64289 +1682 0.71010 0.58102 +1684 0.68916 0.64451 +SURF 0x24 +mat 0 +refs 6 +1673 0.55109 0.17679 +1669 0.55019 0.33406 +1672 0.48543 0.18955 +1668 0.46478 0.32746 +1671 0.47413 0.19010 +1670 0.45972 0.32752 +SURF 0x24 +mat 0 +refs 13 +1668 0.46478 0.32746 +1669 0.55019 0.33406 +1665 0.47001 0.34191 +1666 0.54749 0.34929 +1665 0.47001 0.34191 +1659 0.53301 0.38713 +1665 0.47001 0.34191 +1662 0.47656 0.37427 +1664 0.45879 0.33789 +1662 0.47656 0.37427 +1663 0.45510 0.37104 +1661 0.48212 0.40085 +1667 0.46161 0.39018 +SURF 0x24 +mat 0 +refs 6 +1661 0.48212 0.40085 +1662 0.47656 0.37427 +1660 0.52632 0.42143 +1659 0.53301 0.38713 +1658 0.55681 0.43617 +1657 0.58421 0.40654 +SURF 0x24 +mat 0 +refs 8 +1656 0.67343 0.24437 +1650 0.61403 0.33552 +1655 0.61441 0.25130 +1646 0.56858 0.32921 +1652 0.54683 0.24506 +1648 0.50443 0.31152 +1653 0.46771 0.25426 +1654 0.45323 0.29211 +SURF 0x24 +mat 0 +refs 6 +1650 0.61403 0.33552 +1651 0.56701 0.38304 +1646 0.56858 0.32921 +1647 0.53253 0.36704 +1648 0.50443 0.31152 +1649 0.47703 0.34115 +SURF 0x24 +mat 0 +refs 7 +1645 0.44377 0.24803 +1644 0.43129 0.29341 +1645 0.44377 0.24803 +1640 0.52705 0.31412 +1638 0.57617 0.26213 +1639 0.58091 0.32950 +1637 0.65593 0.26200 +SURF 0x24 +mat 0 +refs 5 +1639 0.58091 0.32950 +1643 0.53404 0.37222 +1639 0.58091 0.32950 +1642 0.58287 0.38947 +1641 0.63703 0.33520 +SURF 0x24 +mat 0 +refs 8 +1636 0.42861 0.25228 +1635 0.46823 0.28719 +1636 0.42861 0.25228 +1633 0.46790 0.28657 +1634 0.43553 0.25327 +1633 0.46790 0.28657 +1632 0.45038 0.23809 +1631 0.47525 0.26465 +SURF 0x24 +mat 0 +refs 15 +1630 0.50636 0.31702 +1594 0.49570 0.28810 +1629 0.46874 0.32418 +1595 0.45269 0.29653 +1627 0.44594 0.32335 +1596 0.43196 0.30059 +1626 0.45937 0.32032 +1597 0.44390 0.29825 +1628 0.48667 0.31199 +1597 0.44390 0.29825 +1598 0.46762 0.29361 +1597 0.44390 0.29825 +1599 0.52690 0.28199 +1601 0.60255 0.26722 +1600 0.58775 0.27006 +SURF 0x24 +mat 0 +refs 6 +1597 0.44390 0.29825 +1596 0.43196 0.30059 +1597 0.44390 0.29825 +1595 0.45269 0.29653 +1593 0.52079 0.28320 +1594 0.49570 0.28810 +SURF 0x24 +mat 0 +refs 5 +1597 0.44390 0.29825 +1593 0.52079 0.28320 +1601 0.60255 0.26722 +1592 0.58449 0.27065 +1602 0.60220 0.26722 +SURF 0x24 +mat 0 +refs 4 +1593 0.52079 0.28320 +1591 0.54501 0.27841 +1593 0.52079 0.28320 +1592 0.58449 0.27065 +SURF 0x24 +mat 0 +refs 6 +1625 0.39347 0.35096 +1624 0.38487 0.31934 +1620 0.42484 0.34237 +1619 0.41842 0.30903 +1618 0.45169 0.33922 +1611 0.44998 0.30635 +SURF 0x24 +mat 0 +refs 6 +1623 0.41177 0.30365 +1615 0.41553 0.32561 +1612 0.43018 0.30022 +1613 0.43490 0.32314 +1604 0.46227 0.29518 +1614 0.45970 0.31791 +SURF 0x24 +mat 0 +refs 6 +1621 0.39824 0.32750 +1622 0.40301 0.35739 +1615 0.41553 0.32561 +1616 0.42137 0.35395 +1613 0.43490 0.32314 +1617 0.44360 0.34854 +SURF 0x24 +mat 0 +refs 5 +1609 0.47591 0.31186 +1611 0.44998 0.30635 +1609 0.47591 0.31186 +1610 0.45327 0.28980 +1608 0.47665 0.28942 +SURF 0x24 +mat 0 +refs 6 +1608 0.47665 0.28942 +1607 0.47961 0.26342 +1606 0.47845 0.29178 +1605 0.48404 0.26497 +1604 0.46227 0.29518 +1603 0.46381 0.27152 +SURF 0x24 +mat 0 +refs 47 +1589 0.36753 0.33783 +1590 0.33481 0.35745 +1588 0.36276 0.33480 +1587 0.31511 0.36797 +1585 0.36518 0.33634 +1584 0.33813 0.35666 +1585 0.36518 0.33634 +1582 0.34305 0.35124 +1583 0.36273 0.33478 +1578 0.34190 0.35227 +1579 0.36387 0.33551 +1573 0.34218 0.35146 +1574 0.36334 0.33517 +1568 0.34279 0.34886 +1569 0.36202 0.33433 +1563 0.34304 0.34703 +1564 0.36025 0.33321 +1558 0.34259 0.34575 +1559 0.35898 0.33241 +1553 0.34352 0.34229 +1554 0.35714 0.33124 +1548 0.34374 0.33846 +1549 0.35547 0.33018 +1543 0.34400 0.33217 +1544 0.35086 0.32726 +1543 0.34400 0.33217 +1540 0.34169 0.32144 +1543 0.34400 0.33217 +1541 0.33283 0.33541 +1548 0.34374 0.33846 +1546 0.32868 0.34195 +1553 0.34352 0.34229 +1551 0.32689 0.34478 +1558 0.34259 0.34575 +1556 0.32506 0.34767 +1563 0.34304 0.34703 +1561 0.32460 0.34838 +1568 0.34279 0.34886 +1566 0.32370 0.34980 +1573 0.34218 0.35146 +1571 0.32235 0.35193 +1578 0.34190 0.35227 +1576 0.32191 0.35263 +1582 0.34305 0.35124 +1581 0.32120 0.35375 +1584 0.33813 0.35666 +1586 0.31884 0.35746 +SURF 0x24 +mat 0 +refs 37 +1581 0.32120 0.35375 +1580 0.31265 0.33528 +1581 0.32120 0.35375 +1575 0.31372 0.33439 +1576 0.32191 0.35263 +1570 0.31433 0.33380 +1571 0.32235 0.35193 +1565 0.31642 0.33214 +1566 0.32370 0.34980 +1560 0.31797 0.33113 +1561 0.32460 0.34838 +1555 0.31932 0.33099 +1556 0.32506 0.34767 +1550 0.32205 0.32867 +1551 0.32689 0.34478 +1545 0.32543 0.32684 +1546 0.32868 0.34195 +1539 0.33100 0.32393 +1541 0.33283 0.33541 +1539 0.33100 0.32393 +1540 0.34169 0.32144 +1539 0.33100 0.32393 +1542 0.33252 0.31563 +1545 0.32543 0.32684 +1547 0.32874 0.31323 +1550 0.32205 0.32867 +1552 0.32651 0.31181 +1555 0.31932 0.33099 +1557 0.32524 0.31101 +1560 0.31797 0.33113 +1562 0.32489 0.31078 +1565 0.31642 0.33214 +1567 0.32339 0.30983 +1570 0.31433 0.33380 +1572 0.32177 0.30880 +1575 0.31372 0.33439 +1577 0.32099 0.30831 +SURF 0x24 +mat 0 +refs 9 +1500 0.29261 0.29042 +1499 0.18604 0.39726 +1493 0.30155 0.35178 +1496 0.20737 0.44421 +1494 0.31148 0.42936 +1495 0.23029 0.49866 +1494 0.31148 0.42936 +1497 0.26932 0.57163 +1498 0.32188 0.55284 +SURF 0x24 +mat 0 +refs 152 +1493 0.30155 0.35178 +1494 0.31148 0.42936 +1493 0.30155 0.35178 +1463 0.38538 0.41008 +1462 0.40277 0.29874 +1460 0.46288 0.43924 +1459 0.48385 0.31181 +1461 0.52632 0.47387 +1459 0.48385 0.31181 +1458 0.57237 0.37089 +1457 0.52370 0.24886 +1458 0.57237 0.37089 +1468 0.57264 0.27935 +1492 0.63614 0.37106 +1468 0.57264 0.27935 +1469 0.64643 0.36742 +1468 0.57264 0.27935 +1467 0.65360 0.36577 +1449 0.58127 0.25596 +1451 0.66573 0.36130 +1449 0.58127 0.25596 +1450 0.66430 0.34409 +1446 0.58279 0.24710 +1445 0.63547 0.34192 +1444 0.54066 0.24507 +1442 0.64670 0.31848 +1443 0.52506 0.21145 +1442 0.64670 0.31848 +1425 0.52023 0.19809 +1424 0.66329 0.30300 +1423 0.53161 0.20071 +1422 0.69243 0.29175 +1421 0.57088 0.21900 +1420 0.72099 0.29117 +1371 0.61973 0.21084 +1370 0.73044 0.27792 +1369 0.61848 0.21663 +1368 0.71413 0.28348 +1364 0.59340 0.25284 +1366 0.68066 0.30900 +1364 0.59340 0.25284 +1367 0.65069 0.37151 +1364 0.59340 0.25284 +1298 0.56277 0.31507 +1365 0.44747 0.19226 +1298 0.56277 0.31507 +1294 0.44253 0.27688 +1296 0.55484 0.33011 +1292 0.49188 0.31859 +1297 0.55528 0.34849 +1293 0.49087 0.29684 +1347 0.56359 0.33332 +1333 0.49159 0.27000 +1348 0.55791 0.33885 +1277 0.49004 0.27664 +1350 0.53806 0.34940 +1349 0.49135 0.30295 +1350 0.53806 0.34940 +1357 0.48866 0.33231 +1358 0.52331 0.36332 +1357 0.48866 0.33231 +1418 0.48952 0.41042 +1357 0.48866 0.33231 +1363 0.45463 0.37978 +1310 0.44886 0.33278 +1359 0.42742 0.36931 +1312 0.43287 0.33975 +1262 0.41224 0.35855 +1263 0.41890 0.33550 +1243 0.40486 0.34184 +1264 0.41229 0.32164 +1269 0.41726 0.30579 +1268 0.41717 0.30618 +1274 0.42907 0.29064 +1315 0.41619 0.26791 +1316 0.42988 0.26250 +1380 0.41486 0.22925 +1381 0.43042 0.24030 +1390 0.42177 0.21489 +1391 0.43482 0.22529 +1434 0.43911 0.20625 +1435 0.44641 0.21814 +1478 0.45227 0.21131 +1479 0.45471 0.21882 +1488 0.47750 0.23796 +1489 0.47861 0.24182 +1501 0.48446 0.25312 +1481 0.47797 0.24529 +1480 0.47581 0.24711 +1470 0.45078 0.23401 +1472 0.44569 0.23516 +1428 0.43760 0.24256 +1429 0.42822 0.23643 +1385 0.42701 0.25557 +1386 0.41445 0.24568 +1376 0.41452 0.27095 +1377 0.40251 0.25508 +1311 0.41684 0.30208 +1313 0.40813 0.29237 +1263 0.41890 0.33550 +1313 0.40813 0.29237 +1264 0.41229 0.32164 +1314 0.40706 0.27801 +1268 0.41717 0.30618 +1314 0.40706 0.27801 +1315 0.41619 0.26791 +1379 0.40214 0.22755 +1380 0.41486 0.22925 +1389 0.40962 0.21254 +1390 0.42177 0.21489 +1433 0.42973 0.20012 +1434 0.43911 0.20625 +1477 0.44791 0.20764 +1478 0.45227 0.21131 +1487 0.47527 0.23558 +1488 0.47750 0.23796 +1487 0.47527 0.23558 +1501 0.48446 0.25312 +1487 0.47527 0.23558 +1486 0.47271 0.23555 +1477 0.44791 0.20764 +1476 0.44320 0.20890 +1433 0.42973 0.20012 +1432 0.42185 0.20210 +1389 0.40962 0.21254 +1388 0.40336 0.21912 +1379 0.40214 0.22755 +1378 0.39728 0.23719 +1314 0.40706 0.27801 +1378 0.39728 0.23719 +1313 0.40813 0.29237 +1378 0.39728 0.23719 +1377 0.40251 0.25508 +1387 0.40534 0.23183 +1386 0.41445 0.24568 +1430 0.42092 0.22454 +1429 0.42822 0.23643 +1473 0.44115 0.23071 +1472 0.44569 0.23516 +1482 0.47320 0.24691 +1480 0.47581 0.24711 +1482 0.47320 0.24691 +1501 0.48446 0.25312 +1482 0.47320 0.24691 +1483 0.47119 0.24479 +1473 0.44115 0.23071 +1474 0.43896 0.22284 +1430 0.42092 0.22454 +1431 0.41849 0.21142 +1387 0.40534 0.23183 +1388 0.40336 0.21912 +1378 0.39728 0.23719 +SURF 0x24 +mat 0 +refs 16 +1431 0.41849 0.21142 +1388 0.40336 0.21912 +1431 0.41849 0.21142 +1432 0.42185 0.20210 +1475 0.43978 0.21461 +1476 0.44320 0.20890 +1485 0.47074 0.23770 +1486 0.47271 0.23555 +1485 0.47074 0.23770 +1501 0.48446 0.25312 +1484 0.47025 0.24131 +1483 0.47119 0.24479 +1484 0.47025 0.24131 +1474 0.43896 0.22284 +1475 0.43978 0.21461 +1431 0.41849 0.21142 +SURF 0x24 +mat 0 +refs 4 +1475 0.43978 0.21461 +1485 0.47074 0.23770 +1475 0.43978 0.21461 +1484 0.47025 0.24131 +SURF 0x24 +mat 0 +refs 38 +1263 0.41890 0.33550 +1311 0.41684 0.30208 +1312 0.43287 0.33975 +1309 0.42930 0.30715 +1310 0.44886 0.33278 +1307 0.44515 0.30516 +1310 0.44886 0.33278 +1308 0.46077 0.31725 +1357 0.48866 0.33231 +1308 0.46077 0.31725 +1349 0.49135 0.30295 +1306 0.46404 0.29908 +1277 0.49004 0.27664 +1278 0.45743 0.28523 +1276 0.44984 0.27471 +1275 0.44346 0.28097 +1273 0.43502 0.29282 +1274 0.42907 0.29064 +1273 0.43502 0.29282 +1269 0.41726 0.30579 +1270 0.41268 0.30172 +1269 0.41726 0.30579 +1242 0.39377 0.32989 +1243 0.40486 0.34184 +1239 0.36397 0.35680 +1243 0.40486 0.34184 +1244 0.37651 0.37460 +1262 0.41224 0.35855 +1340 0.37833 0.36777 +1359 0.42742 0.36931 +1360 0.39161 0.38625 +1363 0.45463 0.37978 +1360 0.39161 0.38625 +1415 0.40462 0.41064 +1361 0.38763 0.39449 +1414 0.40562 0.42850 +1417 0.39616 0.43768 +1416 0.40331 0.44158 +SURF 0x24 +mat 0 +refs 43 +1417 0.39616 0.43768 +1419 0.39561 0.43907 +1361 0.38763 0.39449 +1362 0.38989 0.41057 +1341 0.37692 0.38158 +1362 0.38989 0.41057 +1355 0.38287 0.39790 +1356 0.40483 0.45737 +1355 0.38287 0.39790 +1354 0.38214 0.40805 +1341 0.37692 0.38158 +1339 0.37728 0.39149 +1340 0.37833 0.36777 +1339 0.37728 0.39149 +1244 0.37651 0.37460 +1238 0.35151 0.36875 +1239 0.36397 0.35680 +1233 0.35583 0.33267 +1239 0.36397 0.35680 +1265 0.37454 0.32322 +1242 0.39377 0.32989 +1266 0.38848 0.32330 +1242 0.39377 0.32989 +1271 0.39856 0.32020 +1270 0.41268 0.30172 +1288 0.41409 0.29618 +1270 0.41268 0.30172 +1272 0.42548 0.28265 +1273 0.43502 0.29282 +1272 0.42548 0.28265 +1276 0.44984 0.27471 +1287 0.44539 0.26007 +1277 0.49004 0.27664 +1287 0.44539 0.26007 +1333 0.49159 0.27000 +1287 0.44539 0.26007 +1293 0.49087 0.29684 +1285 0.44552 0.28431 +1292 0.49188 0.31859 +1282 0.43299 0.30404 +1292 0.49188 0.31859 +1280 0.40343 0.31159 +1294 0.44253 0.27688 +SURF 0x24 +mat 0 +refs 4 +1341 0.37692 0.38158 +1340 0.37833 0.36777 +1361 0.38763 0.39449 +1360 0.39161 0.38625 +SURF 0x24 +mat 0 +refs 25 +1274 0.42907 0.29064 +1275 0.44346 0.28097 +1316 0.42988 0.26250 +1304 0.44234 0.26756 +1381 0.43042 0.24030 +1373 0.44190 0.25443 +1391 0.43482 0.22529 +1383 0.44352 0.23944 +1435 0.44641 0.21814 +1427 0.44884 0.23126 +1479 0.45471 0.21882 +1471 0.45423 0.22758 +1489 0.47861 0.24182 +1471 0.45423 0.22758 +1481 0.47797 0.24529 +1471 0.45423 0.22758 +1470 0.45078 0.23401 +1426 0.44547 0.24059 +1428 0.43760 0.24256 +1384 0.43847 0.25793 +1385 0.42701 0.25557 +1375 0.42992 0.27928 +1376 0.41452 0.27095 +1309 0.42930 0.30715 +1311 0.41684 0.30208 +SURF 0x24 +mat 0 +refs 10 +1307 0.44515 0.30516 +1309 0.42930 0.30715 +1307 0.44515 0.30516 +1375 0.42992 0.27928 +1374 0.44195 0.27803 +1384 0.43847 0.25793 +1382 0.44476 0.25183 +1426 0.44547 0.24059 +1427 0.44884 0.23126 +1471 0.45423 0.22758 +SURF 0x24 +mat 0 +refs 10 +1382 0.44476 0.25183 +1427 0.44884 0.23126 +1382 0.44476 0.25183 +1383 0.44352 0.23944 +1372 0.44668 0.26881 +1373 0.44190 0.25443 +1303 0.45320 0.28070 +1304 0.44234 0.26756 +1278 0.45743 0.28523 +1275 0.44346 0.28097 +SURF 0x24 +mat 0 +refs 12 +1303 0.45320 0.28070 +1278 0.45743 0.28523 +1303 0.45320 0.28070 +1306 0.46404 0.29908 +1305 0.45428 0.29506 +1308 0.46077 0.31725 +1305 0.45428 0.29506 +1307 0.44515 0.30516 +1305 0.45428 0.29506 +1374 0.44195 0.27803 +1372 0.44668 0.26881 +1382 0.44476 0.25183 +SURF 0x24 +mat 0 +refs 4 +1372 0.44668 0.26881 +1303 0.45320 0.28070 +1372 0.44668 0.26881 +1305 0.45428 0.29506 +SURF 0x24 +mat 0 +refs 28 +1443 0.52506 0.21145 +1491 0.44386 0.19266 +1444 0.54066 0.24507 +1448 0.45446 0.22730 +1444 0.54066 0.24507 +1447 0.49605 0.21185 +1446 0.58279 0.24710 +1453 0.49634 0.20260 +1449 0.58127 0.25596 +1453 0.49634 0.20260 +1468 0.57264 0.27935 +1453 0.49634 0.20260 +1457 0.52370 0.24886 +1456 0.45752 0.23128 +1459 0.48385 0.31181 +1456 0.45752 0.23128 +1462 0.40277 0.29874 +1456 0.45752 0.23128 +1466 0.39680 0.22153 +1455 0.44755 0.19047 +1465 0.39213 0.18988 +1455 0.44755 0.19047 +1464 0.38508 0.19584 +1455 0.44755 0.19047 +1452 0.44071 0.19678 +1455 0.44755 0.19047 +1453 0.49634 0.20260 +1456 0.45752 0.23128 +SURF 0x24 +mat 0 +refs 5 +1453 0.49634 0.20260 +1447 0.49605 0.21185 +1452 0.44071 0.19678 +1448 0.45446 0.22730 +1454 0.37492 0.21889 +SURF 0x24 +mat 0 +refs 47 +1351 0.37882 0.43298 +1345 0.37409 0.42972 +1352 0.36632 0.41873 +1344 0.35738 0.41747 +1352 0.36632 0.41873 +1353 0.36986 0.41458 +1356 0.40483 0.45737 +1353 0.36986 0.41458 +1354 0.38214 0.40805 +1343 0.35786 0.40201 +1339 0.37728 0.39149 +1240 0.33482 0.38394 +1238 0.35151 0.36875 +1234 0.30850 0.36361 +1238 0.35151 0.36875 +1232 0.33450 0.35259 +1233 0.35583 0.33267 +1231 0.34181 0.32287 +1279 0.37601 0.31598 +1280 0.40343 0.31159 +1281 0.39455 0.30634 +1282 0.43299 0.30404 +1284 0.42301 0.28574 +1285 0.44552 0.28431 +1284 0.42301 0.28574 +1287 0.44539 0.26007 +1284 0.42301 0.28574 +1272 0.42548 0.28265 +1284 0.42301 0.28574 +1288 0.41409 0.29618 +1284 0.42301 0.28574 +1289 0.40188 0.32175 +1281 0.39455 0.30634 +1286 0.39312 0.32155 +1281 0.39455 0.30634 +1283 0.37749 0.32055 +1279 0.37601 0.31598 +1283 0.37749 0.32055 +1233 0.35583 0.33267 +1267 0.37077 0.32114 +1265 0.37454 0.32322 +1267 0.37077 0.32114 +1322 0.36708 0.30388 +1321 0.36862 0.31066 +1322 0.36708 0.30388 +1331 0.37084 0.29531 +1332 0.36456 0.29139 +SURF 0x24 +mat 0 +refs 7 +1343 0.35786 0.40201 +1353 0.36986 0.41458 +1343 0.35786 0.40201 +1344 0.35738 0.41747 +1338 0.34437 0.42614 +1345 0.37409 0.42972 +1346 0.36179 0.44614 +SURF 0x24 +mat 0 +refs 50 +1335 0.30047 0.47982 +1342 0.28749 0.51452 +1335 0.30047 0.47982 +1257 0.25474 0.50968 +1255 0.24348 0.48283 +1258 0.22063 0.52507 +1255 0.24348 0.48283 +1256 0.22468 0.51971 +1253 0.23362 0.46709 +1254 0.22473 0.51579 +1245 0.22377 0.44875 +1252 0.22478 0.51493 +1247 0.21589 0.47336 +1251 0.22541 0.51817 +1247 0.21589 0.47336 +1334 0.22696 0.52494 +1247 0.21589 0.47336 +1250 0.25631 0.53455 +1247 0.21589 0.47336 +1249 0.24809 0.49231 +1247 0.21589 0.47336 +1248 0.23152 0.42476 +1245 0.22377 0.44875 +1246 0.24728 0.40065 +1245 0.22377 0.44875 +1241 0.29392 0.42432 +1253 0.23362 0.46709 +1241 0.29392 0.42432 +1255 0.24348 0.48283 +1241 0.29392 0.42432 +1335 0.30047 0.47982 +1336 0.32645 0.42209 +1337 0.32375 0.49779 +1336 0.32645 0.42209 +1338 0.34437 0.42614 +1336 0.32645 0.42209 +1343 0.35786 0.40201 +1336 0.32645 0.42209 +1240 0.33482 0.38394 +1241 0.29392 0.42432 +1237 0.27707 0.37496 +1246 0.24728 0.40065 +1236 0.26319 0.39608 +1248 0.23152 0.42476 +1236 0.26319 0.39608 +1249 0.24809 0.49231 +1259 0.24153 0.46253 +1249 0.24809 0.49231 +1260 0.25358 0.57167 +1261 0.26909 0.57878 +SURF 0x24 +mat 0 +refs 19 +1240 0.33482 0.38394 +1237 0.27707 0.37496 +1234 0.30850 0.36361 +1236 0.26319 0.39608 +1234 0.30850 0.36361 +1235 0.27456 0.37069 +1232 0.33450 0.35259 +1230 0.29961 0.34741 +1231 0.34181 0.32287 +1230 0.29961 0.34741 +1291 0.27881 0.34253 +1235 0.27456 0.37069 +1295 0.24470 0.38802 +1236 0.26319 0.39608 +1295 0.24470 0.38802 +1259 0.24153 0.46253 +1299 0.22374 0.44752 +1260 0.25358 0.57167 +1302 0.22382 0.55785 +SURF 0x24 +mat 0 +refs 5 +1299 0.22374 0.44752 +1301 0.17347 0.41065 +1295 0.24470 0.38802 +1300 0.21765 0.31348 +1291 0.27881 0.34253 +SURF 0x24 +mat 0 +refs 20 +1229 0.43053 0.39270 +1228 0.39201 0.34773 +1223 0.46363 0.34789 +1222 0.42020 0.29708 +1218 0.47939 0.33241 +1219 0.43327 0.28157 +1218 0.47939 0.33241 +1217 0.45179 0.26882 +1215 0.49860 0.31783 +1216 0.45680 0.26268 +1214 0.50693 0.31530 +1216 0.45680 0.26268 +1221 0.51735 0.33323 +1220 0.45027 0.27870 +1221 0.51735 0.33323 +1225 0.44774 0.26049 +1224 0.53308 0.32107 +1225 0.44774 0.26049 +1227 0.54769 0.29068 +1226 0.45390 0.24465 +SURF 0x24 +mat 0 +refs 39 +1212 0.40716 0.19628 +1213 0.49998 0.19925 +1210 0.40714 0.22039 +1211 0.49998 0.22082 +1208 0.40993 0.24231 +1209 0.49998 0.24562 +1198 0.42559 0.29577 +1199 0.49998 0.29722 +1194 0.44264 0.33670 +1197 0.49998 0.33519 +1194 0.44264 0.33670 +1183 0.49998 0.34903 +1182 0.44782 0.35296 +1181 0.49998 0.37210 +1179 0.45100 0.37239 +1180 0.49998 0.39423 +1176 0.45265 0.39238 +1178 0.49998 0.42524 +1171 0.45172 0.42027 +1177 0.49998 0.48565 +1171 0.45172 0.42027 +1172 0.46484 0.48011 +1173 0.41079 0.41823 +1174 0.43238 0.47842 +1185 0.37038 0.41971 +1184 0.40086 0.47817 +1185 0.37038 0.41971 +1192 0.37852 0.48102 +1185 0.37038 0.41971 +1191 0.33201 0.42731 +1186 0.35851 0.39979 +1196 0.32416 0.40835 +1187 0.34927 0.38927 +1196 0.32416 0.40835 +1195 0.34227 0.39343 +1204 0.32938 0.40594 +1203 0.34319 0.39461 +1205 0.36363 0.39602 +1207 0.31576 0.38499 +SURF 0x24 +mat 0 +refs 4 +1206 0.31074 0.40942 +1205 0.36363 0.39602 +1206 0.31074 0.40942 +1204 0.32938 0.40594 +SURF 0x24 +mat 0 +refs 26 +1173 0.41079 0.41823 +1185 0.37038 0.41971 +1173 0.41079 0.41823 +1186 0.35851 0.39979 +1175 0.39605 0.39529 +1187 0.34927 0.38927 +1188 0.38154 0.38008 +1189 0.33920 0.38061 +1190 0.37487 0.36405 +1201 0.32333 0.37235 +1193 0.37824 0.34783 +1202 0.32232 0.31360 +1193 0.37824 0.34783 +1200 0.36647 0.29923 +1193 0.37824 0.34783 +1198 0.42559 0.29577 +1193 0.37824 0.34783 +1194 0.44264 0.33670 +1190 0.37487 0.36405 +1182 0.44782 0.35296 +1188 0.38154 0.38008 +1179 0.45100 0.37239 +1175 0.39605 0.39529 +1176 0.45265 0.39238 +1173 0.41079 0.41823 +1171 0.45172 0.42027 +SURF 0x24 +mat 0 +refs 6 +1166 0.40143 0.59901 +1170 0.39725 0.59359 +1166 0.40143 0.59901 +1167 0.40095 0.58360 +1168 0.39122 0.57399 +1169 0.39509 0.56523 +SURF 0x24 +mat 0 +refs 21 +1165 0.45949 0.17736 +1164 0.56002 0.26681 +1163 0.48780 0.17352 +1162 0.57787 0.25325 +1160 0.49568 0.15928 +1161 0.59048 0.24366 +1158 0.48011 0.16666 +1159 0.57266 0.25721 +1157 0.44977 0.19583 +1156 0.53048 0.28926 +1155 0.42713 0.26136 +1154 0.48487 0.32392 +1155 0.42713 0.26136 +1153 0.46081 0.34221 +1152 0.41252 0.29175 +1151 0.44167 0.35676 +1150 0.39679 0.30390 +1149 0.43903 0.35874 +1147 0.38637 0.28597 +1148 0.43184 0.36420 +1146 0.37804 0.28851 +SURF 0x24 +mat 0 +refs 5 +1143 0.33684 0.59556 +1145 0.39569 0.63539 +1143 0.33684 0.59556 +1144 0.37630 0.64613 +1142 0.31288 0.60693 +SURF 0x24 +mat 0 +refs 11 +1141 0.60574 0.37042 +1140 0.67264 0.41815 +1141 0.60574 0.37042 +1138 0.66347 0.41663 +1139 0.58357 0.36910 +1136 0.64506 0.42202 +1137 0.57424 0.36529 +1132 0.64593 0.43559 +1134 0.58333 0.39013 +1133 0.65153 0.46014 +1135 0.59104 0.42891 +SURF 0x24 +mat 0 +refs 23 +1131 0.52236 0.37195 +1130 0.56108 0.38310 +1128 0.59594 0.19821 +1129 0.60483 0.35982 +1128 0.59594 0.19821 +1126 0.61288 0.35834 +1127 0.58689 0.20546 +1125 0.62357 0.37048 +1124 0.58855 0.22901 +1122 0.64258 0.38059 +1123 0.59317 0.25891 +1120 0.65210 0.39144 +1121 0.60428 0.30363 +1118 0.63783 0.38247 +1119 0.60387 0.32573 +1116 0.62183 0.37457 +1117 0.58889 0.31381 +1114 0.59993 0.36263 +1115 0.56709 0.29683 +1110 0.59053 0.35234 +1112 0.53833 0.29859 +1111 0.57834 0.34793 +1113 0.51145 0.30020 +SURF 0x24 +mat 0 +refs 33 +269 0.56215 0.47760 +1109 0.58707 0.42130 +269 0.56215 0.47760 +1108 0.59728 0.39824 +1107 0.56391 0.47362 +1105 0.60040 0.39118 +1106 0.56569 0.46959 +1104 0.60704 0.37617 +264 0.57842 0.44082 +1103 0.61418 0.36004 +261 0.58545 0.42492 +1101 0.62086 0.34494 +1102 0.58953 0.41572 +1101 0.62086 0.34494 +257 0.59010 0.41442 +1100 0.61278 0.36321 +257 0.59010 0.41442 +1098 0.60805 0.37389 +1099 0.58444 0.42720 +1097 0.59878 0.39484 +253 0.57117 0.45720 +1096 0.59193 0.41033 +251 0.56086 0.48051 +1094 0.58720 0.42101 +1095 0.55071 0.50346 +1092 0.58275 0.43107 +1093 0.54145 0.52438 +1090 0.58078 0.43553 +1091 0.53555 0.53772 +1087 0.58130 0.43435 +243 0.54079 0.52588 +1088 0.58272 0.43114 +1089 0.55047 0.50399 +SURF 0x24 +mat 0 +refs 7 +1085 0.41115 0.39363 +1086 0.42297 0.39963 +1083 0.42764 0.37693 +1081 0.43501 0.38399 +1083 0.42764 0.37693 +1082 0.45806 0.37842 +1084 0.45826 0.37167 +SURF 0x24 +mat 0 +refs 5 +1078 0.43523 0.38398 +1080 0.42773 0.37929 +1078 0.43523 0.38398 +1079 0.41709 0.39897 +1077 0.42294 0.39962 +SURF 0x24 +mat 0 +refs 5 +1074 0.34397 0.34754 +1076 0.32320 0.35098 +1074 0.34397 0.34754 +1075 0.31966 0.35568 +1073 0.34090 0.35725 +SURF 0x24 +mat 0 +refs 7 +1071 0.40709 0.39275 +1072 0.42588 0.39951 +1069 0.42366 0.37367 +1067 0.43720 0.38496 +1069 0.42366 0.37367 +1068 0.45804 0.37912 +1070 0.45842 0.36637 +SURF 0x24 +mat 0 +refs 5 +1064 0.43993 0.38493 +1066 0.42373 0.37635 +1064 0.43993 0.38493 +1065 0.41301 0.39881 +1063 0.42540 0.39935 +SURF 0x24 +mat 0 +refs 5 +1060 0.34366 0.34716 +1062 0.32422 0.34873 +1060 0.34366 0.34716 +1061 0.31744 0.35910 +1059 0.34087 0.36206 +SURF 0x24 +mat 0 +refs 7 +1057 0.41050 0.39404 +1058 0.42680 0.39953 +1055 0.42465 0.37379 +1053 0.43801 0.38594 +1055 0.42465 0.37379 +1054 0.45798 0.38074 +1056 0.45836 0.36613 +SURF 0x24 +mat 0 +refs 5 +1050 0.43784 0.38603 +1052 0.41817 0.37525 +1050 0.43784 0.38603 +1051 0.41054 0.39866 +1049 0.42746 0.39937 +SURF 0x24 +mat 0 +refs 5 +1046 0.34157 0.34729 +1048 0.32529 0.34697 +1046 0.34157 0.34729 +1047 0.31605 0.36115 +1045 0.33849 0.36718 +SURF 0x24 +mat 0 +refs 7 +1043 0.41498 0.39412 +1044 0.42680 0.39953 +1041 0.42914 0.37365 +1039 0.43801 0.38594 +1041 0.42914 0.37365 +1040 0.45798 0.38074 +1042 0.45835 0.36639 +SURF 0x24 +mat 0 +refs 5 +1036 0.43784 0.38603 +1038 0.42266 0.37514 +1036 0.43784 0.38603 +1037 0.41503 0.39879 +1035 0.42746 0.39937 +SURF 0x24 +mat 0 +refs 5 +1032 0.34157 0.34729 +1034 0.32529 0.34697 +1032 0.34157 0.34729 +1033 0.31845 0.35736 +1031 0.34109 0.36352 +SURF 0x24 +mat 0 +refs 5 +1028 0.44164 0.38654 +1030 0.42658 0.37568 +1028 0.44164 0.38654 +1029 0.41909 0.39889 +1027 0.42860 0.39938 +SURF 0x24 +mat 0 +refs 5 +1024 0.34369 0.34319 +1026 0.32589 0.34599 +1024 0.34369 0.34319 +1025 0.32061 0.35391 +1023 0.34282 0.35996 +SURF 0x24 +mat 0 +refs 7 +1021 0.41787 0.39836 +1022 0.43433 0.40215 +1019 0.43041 0.37661 +1017 0.44134 0.38715 +1019 0.43041 0.37661 +1018 0.45794 0.38235 +1020 0.45830 0.36922 +SURF 0x24 +mat 0 +refs 5 +1014 0.44164 0.38654 +1016 0.42899 0.37876 +1014 0.44164 0.38654 +1015 0.42159 0.39902 +1013 0.42860 0.39938 +SURF 0x24 +mat 0 +refs 5 +1010 0.34369 0.34319 +1012 0.32589 0.34599 +1010 0.34369 0.34319 +1011 0.32200 0.35183 +1009 0.34186 0.35639 +SURF 0x24 +mat 0 +refs 7 +1007 0.32098 0.35265 +1008 0.33119 0.34248 +1005 0.31103 0.33226 +1003 0.32187 0.32879 +1005 0.31103 0.33226 +1004 0.32621 0.31207 +1006 0.31830 0.30708 +SURF 0x24 +mat 0 +refs 7 +1001 0.34392 0.35128 +1002 0.34335 0.33885 +999 0.32513 0.34677 +997 0.32795 0.34264 +999 0.32513 0.34677 +998 0.32577 0.32647 +1000 0.31357 0.33202 +SURF 0x24 +mat 0 +refs 7 +995 0.32238 0.34440 +996 0.32888 0.34173 +993 0.31653 0.32944 +991 0.32557 0.32674 +993 0.31653 0.32944 +992 0.32849 0.31352 +994 0.32183 0.30932 +SURF 0x24 +mat 0 +refs 7 +989 0.32771 0.33929 +990 0.33285 0.33541 +987 0.32632 0.32892 +985 0.33068 0.32446 +987 0.32632 0.32892 +986 0.33233 0.31595 +988 0.32962 0.31434 +SURF 0x24 +mat 0 +refs 7 +983 0.34038 0.33919 +984 0.34379 0.33248 +981 0.33091 0.33729 +979 0.33276 0.33542 +981 0.33091 0.33729 +980 0.33583 0.32110 +982 0.32642 0.33034 +SURF 0x24 +mat 0 +refs 8 +977 0.32295 0.35079 +978 0.32129 0.36394 +977 0.32295 0.35079 +975 0.34437 0.35963 +976 0.34266 0.34958 +975 0.34437 0.35963 +974 0.36018 0.33361 +973 0.36588 0.33723 +SURF 0x24 +mat 0 +refs 8 +971 0.32469 0.34844 +972 0.31975 0.36779 +971 0.32469 0.34844 +969 0.34484 0.36476 +970 0.34308 0.34721 +969 0.34484 0.36476 +968 0.35959 0.33324 +967 0.37036 0.34007 +SURF 0x24 +mat 0 +refs 8 +965 0.32518 0.34766 +966 0.32059 0.36425 +965 0.32518 0.34766 +963 0.34530 0.36388 +964 0.34272 0.34601 +963 0.34530 0.36388 +962 0.35822 0.33237 +961 0.37053 0.34025 +SURF 0x24 +mat 0 +refs 8 +959 0.32518 0.34766 +960 0.32304 0.36049 +959 0.32518 0.34766 +957 0.34792 0.36023 +958 0.34272 0.34601 +957 0.34792 0.36023 +956 0.35822 0.33237 +955 0.37031 0.34011 +SURF 0x24 +mat 0 +refs 8 +953 0.32723 0.33996 +954 0.32114 0.35571 +953 0.32723 0.33996 +951 0.34618 0.35752 +952 0.34359 0.34256 +951 0.34618 0.35752 +950 0.35686 0.33151 +949 0.36794 0.33856 +SURF 0x24 +mat 0 +refs 8 +947 0.32723 0.33996 +948 0.32238 0.35354 +947 0.32723 0.33996 +945 0.34506 0.35385 +946 0.34359 0.34256 +945 0.34506 0.35385 +944 0.35686 0.33151 +943 0.36475 0.33654 +SURF 0x24 +mat 0 +refs 8 +941 0.32889 0.34173 +942 0.32924 0.34876 +941 0.32889 0.34173 +939 0.34528 0.34767 +940 0.34386 0.33834 +939 0.34528 0.34767 +938 0.35457 0.33006 +937 0.36121 0.33430 +SURF 0x24 +mat 0 +refs 8 +935 0.33291 0.33545 +936 0.33160 0.34176 +935 0.33291 0.33545 +933 0.34157 0.33859 +934 0.34374 0.33275 +933 0.34157 0.33859 +932 0.35074 0.32763 +931 0.35336 0.32939 +SURF 0x24 +mat 0 +refs 13 +929 0.65255 0.60669 +930 0.66605 0.62422 +921 0.62660 0.61763 +922 0.64507 0.64041 +904 0.59718 0.63503 +905 0.61784 0.66186 +888 0.56497 0.64858 +905 0.61784 0.66186 +906 0.59443 0.69474 +907 0.65452 0.71091 +908 0.62485 0.75392 +909 0.67723 0.74139 +910 0.64031 0.79713 +SURF 0x24 +mat 0 +refs 19 +928 0.60374 0.58905 +921 0.62660 0.61763 +917 0.56801 0.59596 +904 0.59718 0.63503 +886 0.54086 0.59595 +888 0.56497 0.64858 +885 0.50784 0.59614 +887 0.53088 0.67048 +885 0.50784 0.59614 +927 0.51653 0.67624 +916 0.49262 0.59397 +927 0.51653 0.67624 +890 0.47006 0.58890 +893 0.47098 0.65579 +892 0.42143 0.54504 +897 0.40488 0.62815 +896 0.39286 0.54873 +899 0.37357 0.61836 +898 0.36623 0.55254 +SURF 0x24 +mat 0 +refs 32 +892 0.42143 0.54504 +891 0.43964 0.52426 +890 0.47006 0.58890 +889 0.45210 0.50973 +877 0.46830 0.57773 +869 0.45667 0.53136 +868 0.45922 0.58671 +866 0.45419 0.57737 +868 0.45922 0.58671 +867 0.47574 0.64988 +868 0.45922 0.58671 +873 0.51002 0.65566 +874 0.48894 0.58641 +876 0.51990 0.64832 +875 0.49969 0.58492 +882 0.56177 0.62684 +883 0.53369 0.57481 +903 0.58691 0.61377 +883 0.53369 0.57481 +902 0.55267 0.57800 +884 0.53331 0.57560 +918 0.55338 0.57806 +884 0.53331 0.57560 +917 0.56801 0.59596 +884 0.53331 0.57560 +886 0.54086 0.59595 +879 0.50161 0.58597 +885 0.50784 0.59614 +878 0.49165 0.58901 +916 0.49262 0.59397 +877 0.46830 0.57773 +890 0.47006 0.58890 +SURF 0x24 +mat 0 +refs 8 +877 0.46830 0.57773 +868 0.45922 0.58671 +878 0.49165 0.58901 +874 0.48894 0.58641 +879 0.50161 0.58597 +875 0.49969 0.58492 +884 0.53331 0.57560 +883 0.53369 0.57481 +SURF 0x24 +mat 0 +refs 7 +887 0.53088 0.67048 +888 0.56497 0.64858 +887 0.53088 0.67048 +906 0.59443 0.69474 +911 0.53803 0.74982 +908 0.62485 0.75392 +912 0.55794 0.81469 +SURF 0x24 +mat 0 +refs 7 +909 0.67723 0.74139 +926 0.69550 0.69281 +909 0.67723 0.74139 +925 0.70166 0.69580 +919 0.68182 0.74985 +920 0.70790 0.69990 +914 0.68676 0.75560 +SURF 0x24 +mat 0 +refs 9 +923 0.66369 0.63651 +924 0.62986 0.59780 +901 0.63643 0.66263 +903 0.58691 0.61377 +901 0.63643 0.66263 +882 0.56177 0.62684 +881 0.60160 0.71635 +876 0.51990 0.64832 +880 0.56074 0.77505 +SURF 0x24 +mat 0 +refs 8 +901 0.63643 0.66263 +881 0.60160 0.71635 +901 0.63643 0.66263 +900 0.62766 0.76594 +913 0.65991 0.71132 +900 0.62766 0.76594 +914 0.68676 0.75560 +915 0.64469 0.81970 +SURF 0x24 +mat 0 +refs 17 +894 0.31434 0.51830 +895 0.37704 0.62181 +871 0.34900 0.49100 +870 0.44306 0.63483 +863 0.36335 0.47969 +864 0.47925 0.63893 +863 0.36335 0.47969 +862 0.46835 0.63647 +861 0.36677 0.47700 +860 0.45810 0.63104 +858 0.37023 0.47427 +859 0.45529 0.60760 +857 0.39494 0.45480 +866 0.45419 0.57737 +865 0.40860 0.44405 +869 0.45667 0.53136 +872 0.41650 0.43782 +SURF 0x24 +mat 0 +refs 4 +856 0.38600 0.46011 +853 0.29126 0.40777 +855 0.40580 0.43337 +854 0.32724 0.36110 +SURF 0x24 +mat 0 +refs 12 +853 0.29126 0.40777 +852 0.32689 0.48840 +853 0.29126 0.40777 +850 0.27127 0.46747 +851 0.21470 0.37007 +850 0.27127 0.46747 +849 0.18168 0.37154 +848 0.22824 0.46514 +844 0.19708 0.38616 +847 0.23931 0.46950 +842 0.25357 0.42328 +846 0.28402 0.48879 +SURF 0x24 +mat 0 +refs 6 +845 0.18118 0.29475 +844 0.19708 0.38616 +839 0.25037 0.36395 +842 0.25357 0.42328 +838 0.33448 0.44805 +843 0.35799 0.48037 +SURF 0x24 +mat 0 +refs 26 +839 0.25037 0.36395 +838 0.33448 0.44805 +839 0.25037 0.36395 +830 0.31906 0.43002 +831 0.21540 0.29729 +830 0.31906 0.43002 +825 0.20938 0.31319 +821 0.26954 0.41963 +817 0.19961 0.31455 +816 0.25194 0.42793 +815 0.19255 0.30642 +816 0.25194 0.42793 +814 0.25730 0.41893 +818 0.34104 0.47551 +819 0.28253 0.38598 +820 0.35408 0.43546 +823 0.31289 0.34992 +824 0.45540 0.39698 +823 0.31289 0.34992 +826 0.47781 0.37105 +827 0.34627 0.32880 +828 0.47774 0.37602 +829 0.33201 0.33006 +828 0.47774 0.37602 +834 0.34970 0.38213 +833 0.48389 0.39584 +SURF 0x24 +mat 0 +refs 5 +818 0.34104 0.47551 +816 0.25194 0.42793 +822 0.34677 0.48343 +821 0.26954 0.41963 +832 0.37710 0.47616 +SURF 0x24 +mat 0 +refs 7 +840 0.32113 0.42853 +841 0.24425 0.29525 +836 0.32640 0.43729 +837 0.26140 0.32952 +836 0.32640 0.43729 +834 0.34970 0.38213 +835 0.38480 0.43956 +SURF 0x24 +mat 0 +refs 10 +812 0.31303 0.38862 +813 0.40530 0.49349 +812 0.31303 0.38862 +810 0.43575 0.45283 +811 0.37765 0.33685 +806 0.47818 0.43247 +807 0.43982 0.29997 +806 0.47818 0.43247 +805 0.50000 0.29258 +804 0.50000 0.42493 +SURF 0x24 +mat 0 +refs 5 +807 0.43982 0.29997 +805 0.50000 0.29258 +807 0.43982 0.29997 +808 0.50000 0.20599 +809 0.37475 0.20781 +SURF 0x24 +mat 0 +refs 14 +803 0.58953 0.41572 +802 0.66880 0.47959 +803 0.58953 0.41572 +800 0.65464 0.46261 +801 0.59010 0.41442 +800 0.65464 0.46261 +796 0.58445 0.42720 +794 0.65043 0.48128 +796 0.58445 0.42720 +795 0.64406 0.50817 +797 0.57117 0.45720 +795 0.64406 0.50817 +799 0.56086 0.48051 +798 0.62054 0.52481 +SURF 0x24 +mat 0 +refs 20 +791 0.43942 0.32223 +792 0.38631 0.36140 +788 0.42772 0.27341 +789 0.31901 0.35393 +784 0.30564 0.21057 +793 0.26009 0.35353 +784 0.30564 0.21057 +786 0.24378 0.26976 +784 0.30564 0.21057 +785 0.22263 0.24435 +782 0.30810 0.17512 +783 0.22031 0.26546 +782 0.30810 0.17512 +780 0.28346 0.19750 +790 0.36869 0.14343 +780 0.28346 0.19750 +779 0.36134 0.16077 +780 0.28346 0.19750 +776 0.30215 0.22628 +781 0.27024 0.29445 +SURF 0x24 +mat 0 +refs 35 +779 0.36134 0.16077 +776 0.30215 0.22628 +775 0.37088 0.17503 +766 0.28584 0.23111 +765 0.38128 0.17444 +760 0.27885 0.22415 +759 0.38510 0.16653 +756 0.28105 0.21361 +755 0.40118 0.18141 +754 0.31441 0.22100 +758 0.43674 0.21314 +754 0.31441 0.22100 +752 0.35795 0.25259 +753 0.27215 0.33338 +752 0.35795 0.25259 +751 0.31923 0.33574 +752 0.35795 0.25259 +761 0.35624 0.34954 +762 0.41311 0.23382 +763 0.34661 0.33895 +764 0.38309 0.24568 +770 0.31587 0.38454 +764 0.38309 0.24568 +767 0.30432 0.28240 +768 0.43881 0.18804 +769 0.32123 0.24801 +774 0.44353 0.18010 +769 0.32123 0.24801 +772 0.35441 0.25206 +771 0.26164 0.38987 +772 0.35441 0.25206 +773 0.29124 0.41422 +772 0.35441 0.25206 +777 0.31652 0.44344 +778 0.38232 0.30764 +SURF 0x24 +mat 0 +refs 5 +753 0.27215 0.33338 +754 0.31441 0.22100 +753 0.27215 0.33338 +756 0.28105 0.21361 +757 0.23066 0.33324 +SURF 0x24 +mat 0 +refs 6 +782 0.30810 0.17512 +790 0.36869 0.14343 +782 0.30810 0.17512 +787 0.39309 0.18045 +784 0.30564 0.21057 +788 0.42772 0.27341 +SURF 0x24 +mat 0 +refs 9 +749 0.43049 0.10697 +750 0.31416 0.17461 +748 0.44214 0.14066 +747 0.31931 0.20541 +745 0.44936 0.16156 +743 0.33114 0.22478 +745 0.44936 0.16156 +744 0.35183 0.24050 +746 0.45622 0.18140 +SURF 0x24 +mat 0 +refs 14 +741 0.40313 0.31553 +742 0.43731 0.39155 +739 0.41235 0.29781 +740 0.44501 0.37963 +735 0.40917 0.29819 +736 0.44981 0.39027 +733 0.40397 0.31419 +734 0.45902 0.43260 +729 0.44053 0.30906 +730 0.49507 0.46655 +731 0.43564 0.28659 +732 0.48970 0.46906 +737 0.40562 0.31817 +738 0.44569 0.47101 +SURF 0x24 +mat 0 +refs 11 +719 0.48022 0.28857 +728 0.49924 0.31300 +719 0.48022 0.28857 +722 0.50038 0.31214 +718 0.47467 0.27976 +721 0.49223 0.31833 +717 0.44091 0.24950 +721 0.49223 0.31833 +720 0.43752 0.23257 +723 0.49732 0.31446 +724 0.40863 0.23369 +SURF 0x24 +mat 0 +refs 15 +718 0.47467 0.27976 +717 0.44091 0.24950 +718 0.47467 0.27976 +711 0.45002 0.26733 +719 0.48022 0.28857 +711 0.45002 0.26733 +715 0.47482 0.29453 +712 0.45031 0.29661 +714 0.47326 0.29853 +713 0.45297 0.30011 +726 0.47373 0.29984 +713 0.45297 0.30011 +725 0.45378 0.30117 +716 0.44771 0.32147 +727 0.44715 0.32003 +SURF 0x24 +mat 0 +refs 16 +716 0.44771 0.32147 +713 0.45297 0.30011 +710 0.44435 0.31497 +712 0.45031 0.29661 +710 0.44435 0.31497 +711 0.45002 0.26733 +710 0.44435 0.31497 +707 0.44176 0.28945 +709 0.45398 0.34740 +707 0.44176 0.28945 +708 0.45626 0.34566 +706 0.44476 0.31158 +704 0.45177 0.34908 +706 0.44476 0.31158 +703 0.41262 0.26257 +705 0.42243 0.25778 +SURF 0x24 +mat 0 +refs 5 +702 0.42648 0.36830 +704 0.45177 0.34908 +702 0.42648 0.36830 +703 0.41262 0.26257 +701 0.34925 0.26968 +SURF 0x24 +mat 0 +refs 13 +699 0.42272 0.38268 +700 0.31095 0.43715 +693 0.41651 0.44968 +694 0.24475 0.52298 +691 0.41612 0.48610 +692 0.25461 0.56393 +691 0.41612 0.48610 +687 0.26364 0.56768 +688 0.41746 0.47501 +683 0.28567 0.54561 +685 0.42181 0.46426 +684 0.35450 0.49859 +686 0.44484 0.45907 +SURF 0x24 +mat 0 +refs 11 +698 0.28902 0.58105 +697 0.41092 0.52750 +698 0.28902 0.58105 +695 0.40261 0.51842 +696 0.27159 0.55920 +690 0.40486 0.48373 +689 0.23465 0.54396 +684 0.35450 0.49859 +682 0.21207 0.53667 +683 0.28567 0.54561 +681 0.16444 0.55374 +SURF 0x24 +mat 0 +refs 11 +680 0.25971 0.55457 +679 0.19432 0.49299 +678 0.29089 0.55304 +677 0.23347 0.47315 +676 0.30113 0.56138 +675 0.25039 0.46113 +674 0.30966 0.57929 +673 0.25513 0.45965 +671 0.31541 0.61532 +672 0.22351 0.44644 +670 0.25059 0.56780 +SURF 0x24 +mat 0 +refs 7 +668 0.41345 0.26501 +667 0.48558 0.29999 +666 0.43408 0.28984 +669 0.51850 0.34484 +666 0.43408 0.28984 +664 0.46109 0.30584 +665 0.39905 0.24327 +SURF 0x24 +mat 0 +refs 23 +664 0.46109 0.30584 +663 0.50251 0.37426 +664 0.46109 0.30584 +661 0.52369 0.34486 +662 0.48016 0.26216 +661 0.52369 0.34486 +660 0.48928 0.24225 +659 0.53291 0.32713 +658 0.48058 0.24109 +657 0.52973 0.32751 +656 0.47678 0.23138 +655 0.52453 0.34352 +652 0.48735 0.21788 +651 0.56109 0.33839 +650 0.50612 0.21946 +649 0.55620 0.31592 +647 0.47855 0.25418 +645 0.52618 0.34749 +647 0.47855 0.25418 +646 0.45583 0.39476 +648 0.40101 0.31606 +653 0.40454 0.38463 +654 0.35827 0.34239 +SURF 0x24 +mat 0 +refs 49 +628 0.53613 0.58643 +632 0.57561 0.55962 +628 0.53613 0.58643 +631 0.56659 0.54405 +629 0.52920 0.57320 +642 0.55425 0.52675 +641 0.51741 0.55464 +633 0.55811 0.53138 +630 0.51777 0.55539 +634 0.57851 0.55413 +630 0.51777 0.55539 +610 0.53868 0.57393 +611 0.47477 0.59541 +610 0.53868 0.57393 +609 0.52043 0.63920 +606 0.56875 0.60874 +603 0.59255 0.63772 +607 0.60328 0.58682 +603 0.59255 0.63772 +608 0.62884 0.61705 +603 0.59255 0.63772 +604 0.64205 0.63478 +599 0.60786 0.66172 +604 0.64205 0.63478 +601 0.59910 0.65416 +605 0.63531 0.62799 +612 0.58870 0.64513 +613 0.62412 0.61578 +635 0.57937 0.63899 +636 0.61284 0.60527 +635 0.57937 0.63899 +640 0.58834 0.58053 +635 0.57937 0.63899 +638 0.55138 0.60971 +635 0.57937 0.63899 +639 0.52596 0.63819 +635 0.57937 0.63899 +637 0.54917 0.67915 +635 0.57937 0.63899 +614 0.55689 0.69421 +612 0.58870 0.64513 +614 0.55689 0.69421 +601 0.59910 0.65416 +600 0.57013 0.71844 +599 0.60786 0.66172 +598 0.57445 0.72700 +603 0.59255 0.63772 +602 0.54811 0.69110 +609 0.52043 0.63920 +SURF 0x24 +mat 0 +refs 35 +617 0.42987 0.61081 +624 0.36974 0.63612 +617 0.42987 0.61081 +623 0.34192 0.59446 +616 0.40802 0.58862 +625 0.33911 0.59389 +619 0.40156 0.58144 +626 0.35798 0.62047 +619 0.40156 0.58144 +622 0.41610 0.59430 +618 0.45312 0.57027 +622 0.41610 0.59430 +621 0.46795 0.58223 +644 0.46292 0.63928 +627 0.49847 0.61179 +643 0.49512 0.68036 +627 0.49847 0.61179 +639 0.52596 0.63819 +627 0.49847 0.61179 +638 0.55138 0.60971 +627 0.49847 0.61179 +628 0.53613 0.58643 +621 0.46795 0.58223 +629 0.52920 0.57320 +618 0.45312 0.57027 +641 0.51741 0.55464 +618 0.45312 0.57027 +630 0.51777 0.55539 +615 0.45615 0.57405 +611 0.47477 0.59541 +616 0.40802 0.58862 +611 0.47477 0.59541 +617 0.42987 0.61081 +609 0.52043 0.63920 +620 0.48662 0.65975 +SURF 0x24 +mat 0 +refs 5 +615 0.45615 0.57405 +616 0.40802 0.58862 +615 0.45615 0.57405 +619 0.40156 0.58144 +618 0.45312 0.57027 +SURF 0x24 +mat 0 +refs 5 +595 0.31386 0.50820 +597 0.39394 0.41364 +595 0.31386 0.50820 +596 0.37254 0.40619 +594 0.24802 0.46949 +SURF 0x24 +mat 0 +refs 5 +591 0.24755 0.43431 +593 0.23690 0.36784 +591 0.24755 0.43431 +592 0.35581 0.43151 +590 0.34549 0.47417 +SURF 0x24 +mat 0 +refs 32 +574 0.64726 0.50345 +575 0.60851 0.52825 +574 0.64726 0.50345 +552 0.59460 0.48600 +573 0.63049 0.46615 +553 0.57520 0.37877 +573 0.63049 0.46615 +576 0.59406 0.36911 +586 0.66405 0.44517 +576 0.59406 0.36911 +585 0.61242 0.35700 +564 0.53797 0.43597 +585 0.61242 0.35700 +555 0.56423 0.41424 +584 0.63666 0.33860 +550 0.56394 0.40929 +549 0.63470 0.33636 +546 0.55677 0.41262 +545 0.62537 0.33950 +541 0.51021 0.42832 +545 0.62537 0.33950 +537 0.58943 0.35805 +554 0.66212 0.44966 +537 0.58943 0.35805 +536 0.65011 0.45932 +532 0.56837 0.36881 +528 0.62213 0.48004 +533 0.55076 0.37720 +528 0.62213 0.48004 +529 0.59962 0.48966 +530 0.64574 0.52079 +531 0.62052 0.53256 +SURF 0x24 +mat 0 +refs 9 +526 0.53108 0.26928 +527 0.56783 0.37945 +526 0.53108 0.26928 +520 0.58151 0.37011 +522 0.54041 0.26614 +521 0.58920 0.36441 +523 0.54237 0.26838 +524 0.56976 0.37496 +525 0.51812 0.28678 +SURF 0x24 +mat 0 +refs 6 +518 0.31089 0.32783 +519 0.41437 0.37633 +517 0.35434 0.28359 +516 0.47222 0.32486 +515 0.39845 0.23975 +514 0.49460 0.30200 +SURF 0x24 +mat 0 +refs 9 +508 0.37652 0.50611 +513 0.31252 0.45337 +508 0.37652 0.50611 +510 0.27179 0.48500 +506 0.33911 0.53491 +509 0.24021 0.50727 +505 0.31401 0.55193 +512 0.21305 0.53432 +511 0.29633 0.56601 +SURF 0x24 +mat 0 +refs 7 +507 0.42162 0.53249 +508 0.37652 0.50611 +507 0.42162 0.53249 +506 0.33911 0.53491 +504 0.38324 0.55975 +505 0.31401 0.55193 +503 0.36904 0.56898 +SURF 0x24 +mat 0 +refs 10 +499 0.28894 0.56921 +502 0.22213 0.53902 +499 0.28894 0.56921 +501 0.27308 0.51039 +497 0.33413 0.53504 +500 0.36300 0.45475 +497 0.33413 0.53504 +496 0.39615 0.49555 +495 0.37124 0.55992 +494 0.42005 0.52710 +SURF 0x24 +mat 0 +refs 5 +497 0.33413 0.53504 +495 0.37124 0.55992 +497 0.33413 0.53504 +498 0.33822 0.58979 +499 0.28894 0.56921 +SURF 0x24 +mat 0 +refs 6 +493 0.27761 0.64906 +492 0.28508 0.64210 +488 0.33540 0.58125 +491 0.33594 0.58929 +486 0.36970 0.54043 +490 0.37186 0.54977 +SURF 0x24 +mat 0 +refs 4 +486 0.36970 0.54043 +487 0.36260 0.51375 +488 0.33540 0.58125 +489 0.32807 0.55987 +SURF 0x24 +mat 0 +refs 7 +472 0.30700 0.53958 +473 0.32818 0.47946 +472 0.30700 0.53958 +471 0.24623 0.46799 +469 0.24213 0.54241 +470 0.18874 0.45442 +468 0.19018 0.53734 +SURF 0x24 +mat 0 +refs 5 +465 0.21096 0.54541 +467 0.22046 0.49371 +465 0.21096 0.54541 +466 0.30874 0.47716 +464 0.28554 0.53814 +SURF 0x24 +mat 0 +refs 99 +443 0.63276 0.46602 +463 0.63450 0.50236 +443 0.63276 0.46602 +462 0.61470 0.51430 +442 0.61161 0.46796 +462 0.61470 0.51430 +440 0.60698 0.46272 +461 0.61454 0.51498 +440 0.60698 0.46272 +460 0.65483 0.48620 +440 0.60698 0.46272 +439 0.64515 0.44141 +432 0.61611 0.43176 +431 0.64217 0.41481 +430 0.61600 0.41108 +431 0.64217 0.41481 +409 0.63702 0.39562 +433 0.67592 0.39792 +409 0.63702 0.39562 +404 0.66462 0.37890 +402 0.56750 0.42712 +394 0.63391 0.46437 +393 0.59186 0.41543 +394 0.63391 0.46437 +390 0.60960 0.40831 +392 0.64516 0.46033 +390 0.60960 0.40831 +391 0.64209 0.46546 +390 0.60960 0.40831 +389 0.60818 0.41186 +399 0.60590 0.38168 +389 0.60818 0.41186 +396 0.60432 0.38538 +395 0.60047 0.41780 +397 0.59253 0.39267 +395 0.60047 0.41780 +400 0.58725 0.42687 +407 0.70206 0.36694 +400 0.58725 0.42687 +405 0.69007 0.37694 +406 0.63029 0.33582 +437 0.66789 0.39539 +406 0.63029 0.33582 +436 0.65168 0.40524 +426 0.61404 0.34504 +427 0.59943 0.35271 +422 0.59983 0.31831 +428 0.57755 0.33290 +423 0.52548 0.40496 +457 0.56153 0.31690 +458 0.51282 0.38807 +459 0.47956 0.40705 +322 0.49336 0.36417 +321 0.45541 0.38611 +322 0.49336 0.36417 +323 0.51550 0.35140 +458 0.51282 0.38807 +456 0.53064 0.37581 +423 0.52548 0.40496 +419 0.54256 0.39473 +422 0.59983 0.31831 +417 0.55325 0.41428 +426 0.61404 0.34504 +417 0.55325 0.41428 +406 0.63029 0.33582 +401 0.57077 0.40567 +400 0.58725 0.42687 +401 0.57077 0.40567 +397 0.59253 0.39267 +411 0.58758 0.37034 +397 0.59253 0.39267 +410 0.60178 0.36187 +396 0.60432 0.38538 +413 0.59932 0.36022 +399 0.60590 0.38168 +412 0.57733 0.36816 +399 0.60590 0.38168 +398 0.57958 0.38489 +390 0.60960 0.40831 +398 0.57958 0.38489 +393 0.59186 0.41543 +403 0.55060 0.39766 +402 0.56750 0.42712 +414 0.52222 0.41831 +402 0.56750 0.42712 +408 0.60293 0.34205 +409 0.63702 0.39562 +425 0.58632 0.35665 +430 0.61600 0.41108 +434 0.62114 0.41564 +432 0.61611 0.43176 +435 0.62107 0.43538 +440 0.60698 0.46272 +435 0.62107 0.43538 +442 0.61161 0.46796 +441 0.63457 0.43201 +443 0.63276 0.46602 +444 0.65719 0.42022 +445 0.66431 0.44747 +SURF 0x24 +mat 0 +refs 49 +436 0.65168 0.40524 +444 0.65719 0.42022 +436 0.65168 0.40524 +441 0.63457 0.43201 +438 0.63203 0.41365 +435 0.62107 0.43538 +438 0.63203 0.41365 +434 0.62114 0.41564 +429 0.59018 0.35666 +425 0.58632 0.35665 +424 0.56842 0.34049 +425 0.58632 0.35665 +420 0.56443 0.34014 +408 0.60293 0.34205 +420 0.56443 0.34014 +414 0.52222 0.41831 +421 0.54876 0.32334 +414 0.52222 0.41831 +415 0.50960 0.40706 +403 0.55060 0.39766 +416 0.54235 0.38428 +398 0.57958 0.38489 +416 0.54235 0.38428 +412 0.57733 0.36816 +451 0.53224 0.36770 +412 0.57733 0.36816 +448 0.56906 0.34510 +413 0.59932 0.36022 +449 0.59368 0.33467 +410 0.60178 0.36187 +446 0.59837 0.33470 +411 0.58758 0.37034 +447 0.58136 0.34746 +411 0.58758 0.37034 +418 0.55886 0.38551 +401 0.57077 0.40567 +418 0.55886 0.38551 +417 0.55325 0.41428 +418 0.55886 0.38551 +419 0.54256 0.39473 +455 0.54985 0.36693 +456 0.53064 0.37581 +324 0.53685 0.33901 +323 0.51550 0.35140 +324 0.53685 0.33901 +314 0.57168 0.31885 +455 0.54985 0.36693 +447 0.58136 0.34746 +418 0.55886 0.38551 +SURF 0x24 +mat 0 +refs 40 +436 0.65168 0.40524 +438 0.63203 0.41365 +427 0.59943 0.35271 +429 0.59018 0.35666 +428 0.57755 0.33290 +424 0.56842 0.34049 +457 0.56153 0.31690 +452 0.54535 0.32881 +459 0.47956 0.40705 +453 0.52005 0.31029 +321 0.45541 0.38611 +320 0.43712 0.39667 +321 0.45541 0.38611 +319 0.44766 0.39059 +323 0.51550 0.35140 +315 0.58765 0.30975 +314 0.57168 0.31885 +313 0.58732 0.30986 +447 0.58136 0.34746 +313 0.58732 0.30986 +446 0.59837 0.33470 +315 0.58765 0.30975 +449 0.59368 0.33467 +316 0.57457 0.31724 +448 0.56906 0.34510 +317 0.52088 0.34826 +451 0.53224 0.36770 +318 0.46858 0.37849 +451 0.53224 0.36770 +450 0.49257 0.38970 +416 0.54235 0.38428 +450 0.49257 0.38970 +415 0.50960 0.40706 +454 0.53177 0.30306 +421 0.54876 0.32334 +453 0.52005 0.31029 +421 0.54876 0.32334 +452 0.54535 0.32881 +420 0.56443 0.34014 +424 0.56842 0.34049 +SURF 0x24 +mat 0 +refs 12 +320 0.43712 0.39667 +453 0.52005 0.31029 +320 0.43712 0.39667 +454 0.53177 0.30306 +319 0.44766 0.39059 +450 0.49257 0.38970 +319 0.44766 0.39059 +318 0.46858 0.37849 +319 0.44766 0.39059 +317 0.52088 0.34826 +315 0.58765 0.30975 +316 0.57457 0.31724 +SURF 0x24 +mat 0 +refs 8 +388 0.31194 0.43668 +387 0.41925 0.41102 +382 0.28773 0.49412 +381 0.39851 0.47960 +380 0.28485 0.52728 +379 0.38280 0.52699 +383 0.31181 0.55589 +386 0.39000 0.54069 +SURF 0x24 +mat 0 +refs 5 +380 0.28485 0.52728 +383 0.31181 0.55589 +380 0.28485 0.52728 +384 0.24930 0.58231 +385 0.17673 0.53226 +SURF 0x24 +mat 0 +refs 14 +378 0.33498 0.63103 +377 0.41441 0.58790 +378 0.33498 0.63103 +371 0.41916 0.63354 +370 0.32603 0.68978 +371 0.41916 0.63354 +367 0.33267 0.73236 +364 0.41854 0.65254 +366 0.33464 0.72062 +365 0.41805 0.65651 +368 0.34425 0.67289 +369 0.41428 0.60024 +373 0.34712 0.59319 +376 0.40076 0.54588 +SURF 0x24 +mat 0 +refs 5 +368 0.34425 0.67289 +373 0.34712 0.59319 +368 0.34425 0.67289 +374 0.32069 0.60227 +375 0.28647 0.71625 +SURF 0x24 +mat 0 +refs 7 +363 0.47415 0.60425 +365 0.41805 0.65651 +363 0.47415 0.60425 +364 0.41854 0.65254 +362 0.47072 0.59748 +371 0.41916 0.63354 +372 0.46827 0.58817 +SURF 0x24 +mat 0 +refs 22 +359 0.55826 0.53647 +361 0.57231 0.52889 +359 0.55826 0.53647 +360 0.58437 0.54352 +356 0.57176 0.55400 +357 0.60580 0.56284 +355 0.59412 0.57923 +349 0.61740 0.57328 +350 0.60709 0.59224 +345 0.62254 0.57492 +344 0.61237 0.59379 +346 0.62805 0.57723 +340 0.61755 0.59649 +347 0.62245 0.56667 +341 0.61019 0.58495 +348 0.60022 0.53794 +341 0.61019 0.58495 +342 0.58301 0.55183 +333 0.60291 0.61325 +334 0.56940 0.56630 +335 0.56562 0.64110 +336 0.54214 0.59241 +SURF 0x24 +mat 0 +refs 15 +335 0.56562 0.64110 +338 0.59247 0.68538 +333 0.60291 0.61325 +337 0.61361 0.62968 +341 0.61019 0.58495 +337 0.61361 0.62968 +340 0.61755 0.59649 +339 0.60737 0.62559 +344 0.61237 0.59379 +343 0.60121 0.62259 +350 0.60709 0.59224 +351 0.58091 0.60538 +355 0.59412 0.57923 +354 0.55078 0.57020 +356 0.57176 0.55400 +SURF 0x24 +mat 0 +refs 7 +358 0.52355 0.59164 +354 0.55078 0.57020 +358 0.52355 0.59164 +351 0.58091 0.60538 +352 0.56023 0.64069 +343 0.60121 0.62259 +353 0.58294 0.67117 +SURF 0x24 +mat 0 +refs 5 +330 0.60777 0.29672 +332 0.50618 0.34758 +330 0.60777 0.29672 +331 0.51389 0.34164 +329 0.54780 0.39525 +SURF 0x24 +mat 0 +refs 5 +326 0.54787 0.34459 +328 0.55086 0.37119 +326 0.54787 0.34459 +327 0.59400 0.34324 +325 0.58163 0.32770 +SURF 0x24 +mat 0 +refs 5 +310 0.22561 0.54436 +312 0.29294 0.57882 +310 0.22561 0.54436 +311 0.27032 0.55875 +309 0.18160 0.51571 +SURF 0x24 +mat 0 +refs 7 +308 0.43385 0.12616 +307 0.41414 0.12263 +305 0.44647 0.14612 +303 0.41180 0.13534 +305 0.44647 0.14612 +304 0.40956 0.14234 +306 0.46590 0.15712 +SURF 0x24 +mat 0 +refs 20 +302 0.65111 0.38117 +301 0.66881 0.47958 +300 0.64560 0.39711 +299 0.65464 0.46261 +298 0.63807 0.41328 +297 0.65043 0.48128 +296 0.62847 0.43630 +295 0.64406 0.50817 +294 0.62759 0.45021 +293 0.62054 0.52480 +292 0.62084 0.46128 +291 0.59857 0.54038 +290 0.61464 0.46820 +289 0.58211 0.55529 +288 0.59692 0.47552 +287 0.57722 0.56410 +286 0.58910 0.46440 +285 0.56875 0.53904 +284 0.57809 0.44175 +283 0.55048 0.50397 +SURF 0x24 +mat 0 +refs 14 +282 0.39928 0.46145 +281 0.36335 0.47969 +282 0.39928 0.46145 +280 0.46836 0.63646 +279 0.44662 0.47607 +280 0.46836 0.63646 +278 0.45482 0.47601 +277 0.45810 0.63104 +275 0.46303 0.46207 +276 0.45529 0.60760 +274 0.47979 0.44856 +273 0.45419 0.57737 +272 0.48709 0.43611 +271 0.45668 0.53136 +SURF 0x24 +mat 0 +refs 32 +270 0.58705 0.42129 +269 0.56215 0.47760 +267 0.59725 0.39822 +268 0.56391 0.47362 +266 0.60037 0.39117 +265 0.56569 0.46959 +263 0.60701 0.37616 +264 0.57842 0.44082 +262 0.61415 0.36002 +261 0.58545 0.42492 +260 0.62083 0.34493 +259 0.58953 0.41572 +260 0.62083 0.34493 +257 0.59010 0.41442 +258 0.61275 0.36319 +257 0.59010 0.41442 +256 0.60802 0.37388 +255 0.58445 0.42720 +254 0.59875 0.39483 +253 0.57117 0.45720 +252 0.59190 0.41032 +251 0.56086 0.48051 +250 0.58717 0.42100 +249 0.55071 0.50346 +248 0.58272 0.43106 +247 0.54145 0.52438 +246 0.58075 0.43551 +245 0.53555 0.53772 +244 0.58127 0.43433 +243 0.54079 0.52588 +242 0.58269 0.43113 +241 0.55047 0.50399 +SURF 0x24 +mat 0 +refs 5 +238 0.40333 0.19986 +240 0.38045 0.20610 +238 0.40333 0.19986 +239 0.37288 0.19927 +237 0.40333 0.19311 +SURF 0x24 +mat 0 +refs 5 +234 0.45488 0.30298 +236 0.45212 0.29001 +234 0.45488 0.30298 +235 0.47548 0.29235 +233 0.47462 0.30251 +SURF 0x24 +mat 0 +refs 8 +231 0.45086 0.32362 +232 0.44283 0.31735 +231 0.45086 0.32362 +229 0.45170 0.29799 +230 0.45487 0.30295 +229 0.45170 0.29799 +228 0.47476 0.30268 +227 0.47370 0.29390 +SURF 0x24 +mat 0 +refs 5 +224 0.40333 0.20056 +226 0.38268 0.20701 +224 0.40333 0.20056 +225 0.36881 0.19613 +223 0.40333 0.18780 +SURF 0x24 +mat 0 +refs 5 +220 0.45681 0.30517 +222 0.45025 0.28631 +220 0.45681 0.30517 +221 0.47551 0.28720 +219 0.47524 0.30484 +SURF 0x24 +mat 0 +refs 8 +217 0.45133 0.32346 +218 0.43833 0.31565 +217 0.45133 0.32346 +215 0.44926 0.29472 +216 0.45663 0.30469 +215 0.44926 0.29472 +214 0.47698 0.30694 +213 0.47347 0.28894 +SURF 0x24 +mat 0 +refs 5 +210 0.40332 0.20218 +212 0.38351 0.20796 +210 0.40332 0.20218 +211 0.36980 0.19622 +209 0.40327 0.18757 +SURF 0x24 +mat 0 +refs 5 +206 0.45737 0.30590 +208 0.45140 0.28977 +206 0.45737 0.30590 +207 0.47604 0.28805 +205 0.47499 0.30607 +SURF 0x24 +mat 0 +refs 8 +203 0.45193 0.32146 +204 0.43436 0.31164 +203 0.45193 0.32146 +201 0.44783 0.29271 +202 0.45790 0.30631 +201 0.44783 0.29271 +200 0.47480 0.30600 +199 0.47083 0.28392 +SURF 0x24 +mat 0 +refs 5 +196 0.40332 0.20218 +198 0.38351 0.20796 +196 0.40332 0.20218 +197 0.37428 0.19595 +195 0.40327 0.18782 +SURF 0x24 +mat 0 +refs 5 +192 0.45737 0.30590 +194 0.45415 0.29331 +192 0.45737 0.30590 +193 0.47897 0.29146 +191 0.47499 0.30607 +SURF 0x24 +mat 0 +refs 8 +189 0.45193 0.32146 +190 0.43689 0.31535 +189 0.45193 0.32146 +187 0.45054 0.29627 +188 0.45790 0.30631 +187 0.45054 0.29627 +186 0.47480 0.30600 +185 0.47374 0.28734 +SURF 0x24 +mat 0 +refs 8 +183 0.45504 0.32487 +184 0.43962 0.31821 +183 0.45504 0.32487 +181 0.45302 0.29950 +182 0.45862 0.30721 +181 0.45302 0.29950 +180 0.47680 0.30927 +179 0.47578 0.29073 +SURF 0x24 +mat 0 +refs 5 +176 0.40332 0.20379 +178 0.38688 0.20907 +176 0.40332 0.20379 +177 0.37564 0.19887 +175 0.40330 0.19065 +SURF 0x24 +mat 0 +refs 5 +172 0.46006 0.31340 +174 0.45267 0.29822 +172 0.46006 0.31340 +173 0.47746 0.29430 +171 0.47614 0.30943 +SURF 0x24 +mat 0 +refs 8 +169 0.38641 0.23522 +170 0.37428 0.24074 +169 0.38641 0.23522 +167 0.36749 0.22153 +168 0.37451 0.22169 +167 0.36749 0.22153 +166 0.38716 0.20846 +165 0.37428 0.20106 +SURF 0x24 +mat 0 +refs 8 +163 0.38031 0.22428 +164 0.36625 0.22110 +163 0.38031 0.22428 +161 0.37814 0.20178 +162 0.38688 0.20907 +161 0.37814 0.20178 +160 0.40332 0.20379 +159 0.40330 0.19443 +SURF 0x24 +mat 0 +refs 8 +157 0.38989 0.23260 +158 0.37970 0.23974 +157 0.38989 0.23260 +155 0.37345 0.22146 +156 0.37844 0.22163 +155 0.37345 0.22146 +154 0.39093 0.21113 +153 0.37970 0.20380 +SURF 0x24 +mat 0 +refs 8 +151 0.37971 0.22193 +152 0.37397 0.21787 +151 0.37971 0.22193 +149 0.38347 0.20491 +150 0.39059 0.21111 +149 0.38347 0.20491 +148 0.40332 0.20649 +147 0.40330 0.19862 +SURF 0x24 +mat 0 +refs 8 +145 0.38717 0.22190 +146 0.38114 0.21963 +145 0.38717 0.22190 +143 0.38915 0.21291 +144 0.39525 0.21420 +143 0.38915 0.21291 +142 0.40333 0.21103 +141 0.40324 0.20788 +SURF 0x24 +mat 0 +refs 8 +139 0.39551 0.22957 +140 0.38801 0.23028 +139 0.39551 0.22957 +137 0.38454 0.22127 +138 0.38711 0.22183 +137 0.38454 0.22127 +136 0.40085 0.21675 +135 0.38801 0.21375 +SURF 0x24 +mat 0 +refs 5 +132 0.40333 0.24401 +134 0.40333 0.25076 +132 0.40333 0.24401 +133 0.37288 0.24460 +131 0.38045 0.23777 +SURF 0x24 +mat 0 +refs 5 +128 0.45514 0.30278 +130 0.44941 0.32167 +128 0.45514 0.30278 +129 0.43939 0.31978 +127 0.44339 0.29665 +SURF 0x24 +mat 0 +refs 5 +124 0.40333 0.24331 +126 0.40333 0.25607 +124 0.40333 0.24331 +125 0.36881 0.24774 +123 0.38268 0.23686 +SURF 0x24 +mat 0 +refs 5 +120 0.45673 0.30522 +122 0.45148 0.32289 +120 0.45673 0.30522 +121 0.43442 0.31844 +119 0.44032 0.29386 +SURF 0x24 +mat 0 +refs 5 +116 0.40332 0.24170 +118 0.40326 0.25631 +116 0.40332 0.24170 +117 0.36980 0.24765 +115 0.38351 0.23591 +SURF 0x24 +mat 0 +refs 5 +112 0.45729 0.30596 +114 0.45274 0.32298 +112 0.45729 0.30596 +113 0.43509 0.31917 +111 0.44334 0.29589 +SURF 0x24 +mat 0 +refs 5 +108 0.40332 0.24170 +110 0.40326 0.25605 +108 0.40332 0.24170 +109 0.37428 0.24792 +107 0.38351 0.23591 +SURF 0x24 +mat 0 +refs 5 +104 0.45729 0.30596 +106 0.45274 0.32298 +104 0.45729 0.30596 +105 0.43759 0.32290 +103 0.44602 0.29949 +SURF 0x24 +mat 0 +refs 5 +100 0.40332 0.24009 +102 0.40330 0.25322 +100 0.40332 0.24009 +101 0.37564 0.24500 +99 0.38688 0.23480 +SURF 0x24 +mat 0 +refs 5 +96 0.46380 0.31056 +98 0.45566 0.32499 +96 0.46380 0.31056 +97 0.44074 0.32221 +95 0.45115 0.29937 +SURF 0x24 +mat 0 +refs 7 +93 0.36625 0.22277 +94 0.38031 0.21959 +91 0.37814 0.24209 +89 0.38688 0.23480 +91 0.37814 0.24209 +90 0.40332 0.24009 +92 0.40330 0.24944 +SURF 0x24 +mat 0 +refs 7 +87 0.37397 0.22600 +88 0.37971 0.22194 +85 0.38347 0.23896 +83 0.39059 0.23276 +85 0.38347 0.23896 +84 0.40332 0.23738 +86 0.40330 0.24525 +SURF 0x24 +mat 0 +refs 7 +81 0.38114 0.22424 +82 0.38717 0.22197 +79 0.38915 0.23096 +77 0.39525 0.22967 +79 0.38915 0.23096 +78 0.40333 0.23284 +80 0.40324 0.23599 +SURF 0x24 +mat 0 +refs 34 +66 0.35987 0.42764 +72 0.37036 0.45094 +66 0.35987 0.42764 +73 0.37572 0.43707 +67 0.36468 0.41521 +74 0.38774 0.42602 +68 0.37545 0.40531 +75 0.40320 0.42076 +69 0.38930 0.40059 +76 0.41795 0.42270 +69 0.38930 0.40059 +70 0.40252 0.40233 +63 0.38071 0.39759 +70 0.40252 0.40233 +64 0.38851 0.39862 +71 0.41157 0.41005 +64 0.38851 0.39862 +54 0.39385 0.40317 +53 0.37596 0.40616 +52 0.39529 0.41005 +53 0.37596 0.40616 +55 0.39245 0.41739 +53 0.37596 0.40616 +56 0.38609 0.42323 +53 0.37596 0.40616 +57 0.37791 0.42602 +53 0.37596 0.40616 +58 0.37010 0.42499 +53 0.37596 0.40616 +59 0.36477 0.42043 +60 0.36332 0.41356 +59 0.36477 0.42043 +66 0.35987 0.42764 +65 0.36231 0.43928 +SURF 0x24 +mat 0 +refs 12 +60 0.36332 0.41356 +66 0.35987 0.42764 +60 0.36332 0.41356 +67 0.36468 0.41521 +61 0.36616 0.40622 +68 0.37545 0.40531 +62 0.37253 0.40038 +69 0.38930 0.40059 +62 0.37253 0.40038 +63 0.38071 0.39759 +53 0.37596 0.40616 +64 0.38851 0.39862 +SURF 0x24 +mat 0 +refs 4 +62 0.37253 0.40038 +53 0.37596 0.40616 +61 0.36616 0.40622 +60 0.36332 0.41356 +SURF 0x24 +mat 0 +refs 19 +51 0.31512 0.36992 +50 0.34050 0.36705 +51 0.31512 0.36992 +41 0.35306 0.36277 +27 0.32637 0.36608 +42 0.36561 0.36705 +28 0.33762 0.36992 +43 0.37480 0.37874 +31 0.34586 0.38040 +44 0.37817 0.39472 +33 0.34887 0.39472 +45 0.37480 0.41069 +35 0.34586 0.40904 +46 0.36561 0.42239 +37 0.33762 0.41952 +47 0.35306 0.42667 +39 0.32637 0.42336 +48 0.34050 0.42239 +49 0.31512 0.41952 +SURF 0x24 +mat 0 +refs 15 +29 0.31142 0.37781 +27 0.32637 0.36608 +29 0.31142 0.37781 +28 0.33762 0.36992 +30 0.31806 0.38008 +31 0.34586 0.38040 +32 0.32293 0.38627 +33 0.34887 0.39472 +34 0.32471 0.39472 +35 0.34586 0.40904 +36 0.32293 0.40317 +37 0.33762 0.41952 +38 0.31806 0.40936 +39 0.32637 0.42336 +40 0.31142 0.41163 +SURF 0x24 +mat 0 +refs 12 +22 0.40860 0.35760 +26 0.38617 0.37982 +22 0.40860 0.35760 +25 0.37779 0.36867 +23 0.40289 0.33253 +24 0.38868 0.35103 +23 0.40289 0.33253 +17 0.39710 0.34146 +12 0.42226 0.31640 +17 0.39710 0.34146 +18 0.42676 0.33337 +19 0.39778 0.34884 +SURF 0x24 +mat 0 +refs 32 +14 0.41985 0.34580 +22 0.40860 0.35760 +14 0.41985 0.34580 +23 0.40289 0.33253 +13 0.42067 0.31616 +12 0.42226 0.31640 +10 0.44515 0.29489 +12 0.42226 0.31640 +9 0.44668 0.29837 +18 0.42676 0.33337 +9 0.44668 0.29837 +20 0.45251 0.32129 +4 0.47394 0.27635 +21 0.47063 0.29747 +5 0.48540 0.27449 +16 0.47905 0.28932 +5 0.48540 0.27449 +15 0.47064 0.30029 +5 0.48540 0.27449 +6 0.47291 0.28710 +3 0.49361 0.26653 +7 0.47592 0.28485 +3 0.49361 0.26653 +8 0.47330 0.30569 +3 0.49361 0.26653 +2 0.48930 0.28471 +1 0.47642 0.27319 +0 0.47472 0.29362 +10 0.44515 0.29489 +11 0.44223 0.32610 +13 0.42067 0.31616 +14 0.41985 0.34580 +SURF 0x24 +mat 0 +refs 6 +10 0.44515 0.29489 +9 0.44668 0.29837 +1 0.47642 0.27319 +4 0.47394 0.27635 +3 0.49361 0.26653 +5 0.48540 0.27449 +SURF 0x24 +mat 0 +refs 88 +529 0.59962 0.48966 +533 0.55076 0.37720 +529 0.59962 0.48966 +535 0.52901 0.39466 +534 0.58292 0.49637 +535 0.52901 0.39466 +539 0.56404 0.50611 +538 0.53486 0.39651 +551 0.56917 0.50296 +547 0.54747 0.39057 +552 0.59460 0.48600 +547 0.54747 0.39057 +553 0.57520 0.37877 +562 0.56493 0.35240 +553 0.57520 0.37877 +578 0.58228 0.34315 +576 0.59406 0.36911 +578 0.58228 0.34315 +564 0.53797 0.43597 +577 0.57171 0.31661 +565 0.52846 0.41375 +579 0.50138 0.39955 +589 0.52160 0.38792 +484 0.48679 0.36753 +485 0.51263 0.35259 +475 0.56043 0.32510 +589 0.52160 0.38792 +587 0.56339 0.36180 +565 0.52846 0.41375 +557 0.56045 0.39182 +564 0.53797 0.43597 +557 0.56045 0.39182 +555 0.56423 0.41424 +556 0.56067 0.38751 +550 0.56394 0.40929 +567 0.55491 0.38931 +546 0.55677 0.41262 +566 0.50682 0.41710 +541 0.51021 0.42832 +558 0.54327 0.32543 +541 0.51021 0.42832 +540 0.54968 0.33727 +537 0.58943 0.35805 +540 0.54968 0.33727 +532 0.56837 0.36881 +543 0.53183 0.34744 +533 0.55076 0.37720 +542 0.51157 0.37113 +535 0.52901 0.39466 +544 0.51856 0.37088 +538 0.53486 0.39651 +548 0.53320 0.36530 +547 0.54747 0.39057 +548 0.53320 0.36530 +562 0.56493 0.35240 +561 0.51841 0.34813 +562 0.56493 0.35240 +563 0.55730 0.32956 +578 0.58228 0.34315 +563 0.55730 0.32956 +577 0.57171 0.31661 +563 0.55730 0.32956 +579 0.50138 0.39955 +580 0.48701 0.40781 +579 0.50138 0.39955 +483 0.46666 0.37916 +484 0.48679 0.36753 +483 0.46666 0.37916 +482 0.41626 0.40829 +580 0.48701 0.40781 +571 0.49864 0.33054 +563 0.55730 0.32956 +571 0.49864 0.33054 +561 0.51841 0.34813 +572 0.48177 0.33852 +561 0.51841 0.34813 +570 0.50381 0.35531 +548 0.53320 0.36530 +570 0.50381 0.35531 +544 0.51856 0.37088 +560 0.49843 0.35700 +542 0.51157 0.37113 +560 0.49843 0.35700 +543 0.53183 0.34744 +559 0.52391 0.33714 +543 0.53183 0.34744 +558 0.54327 0.32543 +540 0.54968 0.33727 +SURF 0x24 +mat 0 +refs 41 +559 0.52391 0.33714 +558 0.54327 0.32543 +568 0.47464 0.39966 +566 0.50682 0.41710 +569 0.50796 0.38367 +567 0.55491 0.38931 +583 0.56147 0.35640 +556 0.56067 0.38751 +582 0.56773 0.35483 +557 0.56045 0.39182 +582 0.56773 0.35483 +587 0.56339 0.36180 +474 0.56350 0.32319 +475 0.56043 0.32510 +476 0.54808 0.33224 +484 0.48679 0.36753 +480 0.40356 0.41563 +482 0.41626 0.40829 +481 0.39642 0.41976 +571 0.49864 0.33054 +481 0.39642 0.41976 +572 0.48177 0.33852 +480 0.40356 0.41563 +572 0.48177 0.33852 +581 0.48243 0.33721 +570 0.50381 0.35531 +581 0.48243 0.33721 +560 0.49843 0.35700 +581 0.48243 0.33721 +559 0.52391 0.33714 +588 0.50866 0.31456 +568 0.47464 0.39966 +479 0.43511 0.39740 +568 0.47464 0.39966 +478 0.46802 0.37837 +569 0.50796 0.38367 +477 0.49874 0.36062 +583 0.56147 0.35640 +476 0.54808 0.33224 +582 0.56773 0.35483 +474 0.56350 0.32319 +SURF 0x24 +mat 0 +refs 8 +477 0.49874 0.36062 +476 0.54808 0.33224 +478 0.46802 0.37837 +480 0.40356 0.41563 +479 0.43511 0.39740 +480 0.40356 0.41563 +588 0.50866 0.31456 +581 0.48243 0.33721 +SURF 0x24 +mat 0 +refs 84 +1398 0.38175 0.26849 +1330 0.37769 0.30512 +1328 0.38034 0.26924 +1329 0.37613 0.30080 +1318 0.37246 0.29730 +1317 0.37348 0.30998 +1283 0.37749 0.32055 +1317 0.37348 0.30998 +1267 0.37077 0.32114 +1317 0.37348 0.30998 +1321 0.36862 0.31066 +1329 0.37613 0.30080 +1321 0.36862 0.31066 +1330 0.37769 0.30512 +1331 0.37084 0.29531 +1330 0.37769 0.30512 +1399 0.37606 0.26287 +1398 0.38175 0.26849 +1404 0.38203 0.23507 +1400 0.38739 0.23809 +1405 0.37403 0.20622 +1400 0.38739 0.23809 +1403 0.37264 0.19459 +1400 0.38739 0.23809 +1402 0.37627 0.20792 +1401 0.38599 0.24155 +1413 0.36715 0.19814 +1412 0.37189 0.24155 +1436 0.36718 0.19438 +1411 0.37039 0.24397 +1441 0.38218 0.20908 +1410 0.39191 0.26007 +1441 0.38218 0.20908 +1440 0.39649 0.23848 +1490 0.37517 0.18364 +1439 0.39787 0.22685 +1490 0.37517 0.18364 +1437 0.39189 0.23168 +1438 0.37344 0.20065 +1437 0.39189 0.23168 +1407 0.37964 0.24616 +1406 0.40346 0.27574 +1396 0.38178 0.27589 +1395 0.40355 0.28896 +1323 0.38437 0.29200 +1324 0.40364 0.30206 +1266 0.38848 0.32330 +1324 0.40364 0.30206 +1271 0.39856 0.32020 +1326 0.41052 0.30683 +1271 0.39856 0.32020 +1290 0.40210 0.32057 +1288 0.41409 0.29618 +1290 0.40210 0.32057 +1289 0.40188 0.32175 +1290 0.40210 0.32057 +1325 0.40935 0.30821 +1326 0.41052 0.30683 +1397 0.40955 0.29938 +1326 0.41052 0.30683 +1394 0.41058 0.29527 +1324 0.40364 0.30206 +1394 0.41058 0.29527 +1395 0.40355 0.28896 +1408 0.41069 0.27970 +1406 0.40346 0.27574 +1408 0.41069 0.27970 +1437 0.39189 0.23168 +1408 0.41069 0.27970 +1439 0.39787 0.22685 +1408 0.41069 0.27970 +1440 0.39649 0.23848 +1409 0.40991 0.28426 +1410 0.39191 0.26007 +1393 0.39483 0.29092 +1410 0.39191 0.26007 +1392 0.37278 0.28176 +1411 0.37039 0.24397 +1327 0.37155 0.27090 +1412 0.37189 0.24155 +1328 0.38034 0.26924 +1401 0.38599 0.24155 +1398 0.38175 0.26849 +1400 0.38739 0.23809 +SURF 0x24 +mat 0 +refs 18 +1328 0.38034 0.26924 +1318 0.37246 0.29730 +1327 0.37155 0.27090 +1319 0.37367 0.29398 +1392 0.37278 0.28176 +1319 0.37367 0.29398 +1393 0.39483 0.29092 +1320 0.39671 0.30475 +1397 0.40955 0.29938 +1320 0.39671 0.30475 +1325 0.40935 0.30821 +1320 0.39671 0.30475 +1289 0.40188 0.32175 +1320 0.39671 0.30475 +1286 0.39312 0.32155 +1319 0.37367 0.29398 +1283 0.37749 0.32055 +1318 0.37246 0.29730 +SURF 0x24 +mat 0 +refs 5 +1393 0.39483 0.29092 +1397 0.40955 0.29938 +1409 0.40991 0.28426 +1394 0.41058 0.29527 +1408 0.41069 0.27970 +SURF 0x24 +mat 0 +refs 24 +1715 0.52711 0.28896 +1726 0.53677 0.31977 +1719 0.53325 0.28922 +1730 0.54353 0.32154 +1721 0.54259 0.27889 +1729 0.56002 0.30816 +1721 0.54259 0.27889 +1732 0.55481 0.25651 +1721 0.54259 0.27889 +1722 0.54189 0.24713 +1720 0.53025 0.26506 +1714 0.46925 0.23258 +1720 0.53025 0.26506 +1709 0.46377 0.24102 +1708 0.52232 0.27278 +1705 0.46055 0.24316 +1708 0.52232 0.27278 +1704 0.51551 0.27185 +1708 0.52232 0.27278 +1715 0.52711 0.28896 +1708 0.52232 0.27278 +1719 0.53325 0.28922 +1720 0.53025 0.26506 +1721 0.54259 0.27889 +SURF 0x24 +mat 0 +refs 8 +1874 0.43378 0.32370 +1851 0.39406 0.30763 +1874 0.43378 0.32370 +1852 0.42982 0.30062 +1875 0.46648 0.31560 +1852 0.42982 0.30062 +1853 0.46713 0.29331 +1851 0.39406 0.30763 +SURF 0x24 +mat 0 +refs 15 +2225 0.47967 0.62243 +2180 0.49342 0.63026 +2190 0.46173 0.62926 +2181 0.47102 0.63468 +2190 0.46173 0.62926 +2187 0.45825 0.63618 +2190 0.46173 0.62926 +2189 0.44020 0.63196 +2190 0.46173 0.62926 +2192 0.43662 0.61614 +2190 0.46173 0.62926 +2191 0.44866 0.61303 +2190 0.46173 0.62926 +2228 0.46325 0.60834 +2225 0.47967 0.62243 +SURF 0x24 +mat 0 +refs 60 +2529 0.48171 0.58408 +2524 0.43802 0.57883 +2528 0.46222 0.60087 +2527 0.43209 0.59145 +2528 0.46222 0.60087 +2530 0.44499 0.61413 +2577 0.45693 0.61955 +2530 0.44499 0.61413 +2578 0.44824 0.62328 +2532 0.43778 0.61837 +2578 0.44824 0.62328 +2579 0.44494 0.62062 +2598 0.45852 0.62729 +2575 0.45881 0.61081 +2599 0.48803 0.62112 +2576 0.47639 0.59465 +2590 0.51168 0.60835 +2535 0.48676 0.59810 +2589 0.51325 0.61073 +2534 0.48457 0.60677 +2582 0.50732 0.62353 +2574 0.48466 0.60836 +2573 0.50988 0.62625 +2541 0.51487 0.62266 +2543 0.54441 0.62751 +2541 0.51487 0.62266 +2544 0.56462 0.62054 +2542 0.53239 0.60677 +2581 0.56857 0.62125 +2592 0.53475 0.60379 +2581 0.56857 0.62125 +2593 0.54972 0.62932 +2581 0.56857 0.62125 +2586 0.56442 0.63803 +2581 0.56857 0.62125 +2580 0.58251 0.63332 +2544 0.56462 0.62054 +2546 0.57163 0.62980 +2543 0.54441 0.62751 +2545 0.55555 0.63114 +2573 0.50988 0.62625 +2591 0.54192 0.62884 +2582 0.50732 0.62353 +2584 0.55463 0.62466 +2589 0.51325 0.61073 +2583 0.55803 0.62627 +2590 0.51168 0.60835 +2585 0.53840 0.63371 +2599 0.48803 0.62112 +2587 0.50570 0.63434 +2598 0.45852 0.62729 +2597 0.46232 0.62992 +2578 0.44824 0.62328 +2597 0.46232 0.62992 +2577 0.45693 0.61955 +2596 0.46896 0.62502 +2577 0.45693 0.61955 +2572 0.47793 0.60528 +2528 0.46222 0.60087 +2529 0.48171 0.58408 +SURF 0x24 +mat 0 +refs 11 +2586 0.56442 0.63803 +2587 0.50570 0.63434 +2586 0.56442 0.63803 +2585 0.53840 0.63371 +2580 0.58251 0.63332 +2583 0.55803 0.62627 +2580 0.58251 0.63332 +2584 0.55463 0.62466 +2546 0.57163 0.62980 +2591 0.54192 0.62884 +2545 0.55555 0.63114 +SURF 0x24 +mat 0 +refs 75 +1526 0.50334 0.56759 +1528 0.47265 0.54415 +1526 0.50334 0.56759 +1538 0.48423 0.55063 +1525 0.51664 0.56671 +1537 0.49907 0.54965 +1524 0.52930 0.55938 +1536 0.51320 0.54147 +1523 0.53794 0.54757 +1535 0.52283 0.52829 +1522 0.54022 0.53443 +1534 0.52538 0.51363 +1521 0.53556 0.52350 +1533 0.52017 0.50144 +1520 0.52518 0.51770 +1532 0.50860 0.49496 +1519 0.51188 0.51858 +1531 0.49376 0.49594 +1518 0.49921 0.52591 +1530 0.47963 0.50412 +1517 0.49058 0.53772 +1529 0.47000 0.51730 +1515 0.48829 0.55085 +1527 0.46744 0.53196 +1516 0.49296 0.56179 +1528 0.47265 0.54415 +1516 0.49296 0.56179 +1526 0.50334 0.56759 +1514 0.51780 0.56849 +1526 0.50334 0.56759 +1513 0.52566 0.56797 +1525 0.51664 0.56671 +1512 0.53314 0.56365 +1524 0.52930 0.55938 +1511 0.53823 0.55667 +1523 0.53794 0.54757 +1510 0.53959 0.54892 +1522 0.54022 0.53443 +1509 0.53683 0.54246 +1521 0.53556 0.52350 +1508 0.53070 0.53903 +1520 0.52518 0.51770 +1507 0.52285 0.53955 +1519 0.51188 0.51858 +1506 0.51537 0.54388 +1518 0.49921 0.52591 +1505 0.51027 0.55086 +1517 0.49058 0.53772 +1504 0.50892 0.55861 +1515 0.48829 0.55085 +1502 0.51168 0.56507 +1516 0.49296 0.56179 +1502 0.51168 0.56507 +1514 0.51780 0.56849 +1503 0.52864 0.55864 +1513 0.52566 0.56797 +1503 0.52864 0.55864 +1512 0.53314 0.56365 +1503 0.52864 0.55864 +1511 0.53823 0.55667 +1503 0.52864 0.55864 +1510 0.53959 0.54892 +1503 0.52864 0.55864 +1509 0.53683 0.54246 +1503 0.52864 0.55864 +1508 0.53070 0.53903 +1503 0.52864 0.55864 +1507 0.52285 0.53955 +1503 0.52864 0.55864 +1506 0.51537 0.54388 +1503 0.52864 0.55864 +1505 0.51027 0.55086 +1503 0.52864 0.55864 +1504 0.50892 0.55861 +1502 0.51168 0.56507 +kids 0 From 37c74f6fa3737b439b69feef75870d366945be8f Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Mon, 6 Jul 2020 20:16:22 -0400 Subject: [PATCH 18/67] add test to unit for acc file format loader --- test/unit/utACImportExport.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/unit/utACImportExport.cpp b/test/unit/utACImportExport.cpp index a7f432a56..573e716b6 100644 --- a/test/unit/utACImportExport.cpp +++ b/test/unit/utACImportExport.cpp @@ -101,6 +101,12 @@ TEST(utACImportExport, importWuson) { ASSERT_NE(nullptr, scene); } +TEST(utACImportExport, importWusonACC) { + Assimp::Importer importer; + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/AC/Wuson.acc", aiProcess_ValidateDataStructure); + ASSERT_NE(nullptr, scene); +} + TEST(utACImportExport, testFormatDetection) { Assimp::Importer importer; const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/AC/TestFormatDetection", aiProcess_ValidateDataStructure); From 9aa468262f615dee390e3ce1bf34cdc14a676fa5 Mon Sep 17 00:00:00 2001 From: kimkulling Date: Tue, 7 Jul 2020 17:35:03 +0200 Subject: [PATCH 19/67] closes https://github.com/assimp/assimp/issues/3252: fix build. --- code/AssetLib/3DS/3DSHelper.h | 2 +- code/AssetLib/IFC/IFCReaderGen_2x3.h | 2 +- code/AssetLib/M3D/m3d.h | 4 +++- code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp | 4 ++-- code/AssetLib/Step/STEPFile.h | 6 +++--- code/Common/Exporter.cpp | 4 ++-- code/Common/Subdivision.cpp | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/code/AssetLib/3DS/3DSHelper.h b/code/AssetLib/3DS/3DSHelper.h index 89c15f5f2..3ccb1fd07 100644 --- a/code/AssetLib/3DS/3DSHelper.h +++ b/code/AssetLib/3DS/3DSHelper.h @@ -321,7 +321,7 @@ public: struct Face : public FaceWithSmoothingGroup { }; -#ifdef _WIN32 +#if _MSC_VER > 1920 #pragma warning(disable : 4315) #endif diff --git a/code/AssetLib/IFC/IFCReaderGen_2x3.h b/code/AssetLib/IFC/IFCReaderGen_2x3.h index 8ae623dd8..b3f71a7f1 100644 --- a/code/AssetLib/IFC/IFCReaderGen_2x3.h +++ b/code/AssetLib/IFC/IFCReaderGen_2x3.h @@ -45,7 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "AssetLib/Step/STEPFile.h" -#ifdef _WIN32 +#if _MSC_VER > 1920 # pragma warning( disable : 4512 ) #endif // _WIN32 diff --git a/code/AssetLib/M3D/m3d.h b/code/AssetLib/M3D/m3d.h index 3d7a2564c..5ab3d16de 100644 --- a/code/AssetLib/M3D/m3d.h +++ b/code/AssetLib/M3D/m3d.h @@ -85,7 +85,9 @@ typedef uint16_t M3D_INDEX; #define M3D_BONEMAXLEVEL 8 #endif #ifndef _MSC_VER +#ifndef _inline #define _inline __inline__ +#endif #define _pack __attribute__((packed)) #define _unused __attribute__((unused)) #else @@ -99,7 +101,7 @@ typedef uint16_t M3D_INDEX; #define _register #endif -#ifdef _WIN32 +#if _MSC_VER > 1920 # pragma warning(push) # pragma warning(disable : 4100 4127 4189 4505 4244 4403 4701 4703) # if (_MSC_VER > 1800 ) diff --git a/code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp b/code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp index 2bb7b42ee..e9930dfed 100644 --- a/code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp +++ b/code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp @@ -68,8 +68,8 @@ namespace Assimp { namespace MDL { namespace HalfLife { -#ifdef _WIN32 -# pragma warning(disable : 4706) +#if _MSC_VER > 1920 +# pragma warning(disable : 4706) #endif // _WIN32 // ------------------------------------------------------------------------------------------------ diff --git a/code/AssetLib/Step/STEPFile.h b/code/AssetLib/Step/STEPFile.h index 1448c107f..72648e462 100644 --- a/code/AssetLib/Step/STEPFile.h +++ b/code/AssetLib/Step/STEPFile.h @@ -54,7 +54,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -#ifdef _WIN32 +#if _MSC_VER > 1920 # pragma warning(push) # pragma warning(disable : 4127 4456 4245 4512 ) #endif // _WIN32 @@ -727,7 +727,7 @@ struct InternGenericConvert> { } }; -#ifdef _WIN32 +#if _MSC_VER > 1920 #pragma warning(push) #pragma warning(disable : 4127) #endif // _WIN32 @@ -960,7 +960,7 @@ private: const EXPRESS::ConversionSchema *schema; }; -#ifdef _WIN32 +#if _MSC_VER > 1920 #pragma warning(pop) #endif // _WIN32 diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index 58fc01d91..a47c52a6c 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -74,8 +74,8 @@ Here we implement only the C++ interface (Assimp::Exporter). namespace Assimp { -#ifdef _WIN32 -# pragma warning( disable : 4800 ) +#if _MSC_VER > 1920 +# pragma warning( disable : 4800 ) #endif // _WIN32 diff --git a/code/Common/Subdivision.cpp b/code/Common/Subdivision.cpp index b1f07c9f5..4f64a00c4 100644 --- a/code/Common/Subdivision.cpp +++ b/code/Common/Subdivision.cpp @@ -53,7 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace Assimp; void mydummy() {} -#ifdef _WIN32 +#if _MSC_VER > 1920 #pragma warning(disable : 4709) #endif // _WIN32 // ------------------------------------------------------------------------------------------------ From 628394baec21c65f5f197f5b2255524a8f028985 Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Tue, 7 Jul 2020 23:29:54 -0400 Subject: [PATCH 20/67] check for invalid vertex --- code/AssetLib/AC/ACLoader.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/AssetLib/AC/ACLoader.cpp b/code/AssetLib/AC/ACLoader.cpp index 6be720f02..5b63d315e 100644 --- a/code/AssetLib/AC/ACLoader.cpp +++ b/code/AssetLib/AC/ACLoader.cpp @@ -624,6 +624,9 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, ++uv; } } + if (static_cast(vertices - mesh->mVertices) >= mesh->mNumVertices) { + throw DeadlyImportError("AC3D: Invalid number of vertices"); + } *vertices++ = object.vertices[entry3.first] + object.translation; if (uv) { uv->x = entry3.second.x; From b8ec93aa2137d18e8fb861df17fb6878b8e7d656 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 11 Jul 2020 22:34:43 +0200 Subject: [PATCH 21/67] use c-styl cast in a c-file --- samples/SimpleOpenGL/Sample_SimpleOpenGL.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/SimpleOpenGL/Sample_SimpleOpenGL.c b/samples/SimpleOpenGL/Sample_SimpleOpenGL.c index 01704a1e4..bcb109564 100644 --- a/samples/SimpleOpenGL/Sample_SimpleOpenGL.c +++ b/samples/SimpleOpenGL/Sample_SimpleOpenGL.c @@ -278,7 +278,7 @@ void do_motion (void) static int frames = 0; int time = glutGet(GLUT_ELAPSED_TIME); - angle += static_cast((time-prev_time)*0.01); + angle += (float)((time-prev_time)*0.01); prev_time = time; frames += 1; From 108b3a62e5b1ace725f3ddee06a701eddc19199e Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 11 Jul 2020 22:45:45 +0200 Subject: [PATCH 22/67] Update Exporter.hpp revert merge issue --- include/assimp/Exporter.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/assimp/Exporter.hpp b/include/assimp/Exporter.hpp index 6fcbafe92..15918dd47 100644 --- a/include/assimp/Exporter.hpp +++ b/include/assimp/Exporter.hpp @@ -110,9 +110,9 @@ public: ExportFormatEntry() : mExportFunction(), mEnforcePP() { - mDescription.id = NULL; - mDescription.description = NULL; - mDescription.fileExtension = NULL; + mDescription.id = nullptr; + mDescription.description = nullptr; + mDescription.fileExtension = nullptr; } }; From a9a0c3093226a23eb7558539bc6ebe5bcb98442b Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Fri, 19 Jun 2020 00:15:12 -0700 Subject: [PATCH 23/67] Build viewer and publish artifacts on windows-msvc. This commit introduces Github Actions support for building the tools and viewer and making these available for download as a zip file in the artifacts area of the Github Actions page. This allows for continuous validation that the viewer and tools build successfully, and the download is useful for quick testing of the very latest assimp functionality without needing to download and build it from source. This only applies to windows-msvc, since the assimp viewer is only supported on that platform. It downloads the June 2010 DirectX SDK from the Microsoft servers and installs it. It also uses a cache to prevent having to perform this DX SDK download and installation repeatedly for every commit. Note, it's necessary install the older June 2010 DXSDK because assimp uses the now deprecated D3DX libraries, and these libraries are not included in the stock Windows Server image provided by Github Actions. --- .github/workflows/ccpp.yml | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ccpp.yml b/.github/workflows/ccpp.yml index 08292d55f..e542821e8 100644 --- a/.github/workflows/ccpp.yml +++ b/.github/workflows/ccpp.yml @@ -44,16 +44,46 @@ jobs: with: CXX: ${{ matrix.cxx }} CC: ${{ matrix.cc }} + + - name: Cache DX SDK + id: dxcache + if: matrix.name == 'windows-msvc' + uses: actions/cache@v2 + with: + path: '${{ github.workspace }}/DX_SDK' + key: ${{ runner.os }}-DX_SDK + restore-keys: | + ${{ runner.os }}-DX_SDK + + - name: Download DXSetup + if: matrix.name == 'windows-msvc' && steps.dxcache.outputs.cache-hit != 'true' + run: | + curl -s -o DXSDK_Jun10.exe --location https://download.microsoft.com/download/A/E/7/AE743F1F-632B-4809-87A9-AA1BB3458E31/DXSDK_Jun10.exe + cmd.exe /c start /wait .\DXSDK_Jun10.exe /U /O /F /S /P "${{ github.workspace }}\DX_SDK" + + - name: Set Windows specific CMake arguments + if: matrix.name == 'windows-msvc' + id: windows_extra_cmake_args + run: echo "::set-output name=args::'-DASSIMP_BUILD_ASSIMP_TOOLS=1 -DASSIMP_BUILD_ASSIMP_VIEW=1'" - name: configure and build uses: lukka/run-cmake@v2 + env: + DXSDK_DIR: '${{ github.workspace }}/DX_SDK' + with: cmakeListsOrSettingsJson: CMakeListsTxtAdvanced cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt' - cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release' + cmakeAppendedArgs: '-GNinja -DCMAKE_BUILD_TYPE=Release ${{ steps.windows_extra_cmake_args.outputs.args }}' buildWithCMakeArgs: '-- -v' buildDirectory: '${{ github.workspace }}/build/' - name: test run: cd build/bin && ./unit shell: bash + + - uses: actions/upload-artifact@v2 + if: matrix.name == 'windows-msvc' + with: + name: 'assimp-bins-${{ matrix.name }}-${{ github.sha }}' + path: build/bin From 6619ec82531e76ebb926d0ba9e90bc31623b765e Mon Sep 17 00:00:00 2001 From: Ryan Styrczula Date: Mon, 22 Jun 2020 14:26:37 -0400 Subject: [PATCH 24/67] FBXExporter: Use scene metadata for global settings Models with non-standard axes and scale are not imported and exported correctly if the input metadata is ignored. --- code/AssetLib/FBX/FBXExporter.cpp | 93 +++++++++++++++++++++++++------ 1 file changed, 76 insertions(+), 17 deletions(-) diff --git a/code/AssetLib/FBX/FBXExporter.cpp b/code/AssetLib/FBX/FBXExporter.cpp index 3fc7701f5..bd59cf885 100644 --- a/code/AssetLib/FBX/FBXExporter.cpp +++ b/code/AssetLib/FBX/FBXExporter.cpp @@ -400,6 +400,65 @@ void FBXExporter::WriteHeaderExtension () ); } +// WriteGlobalSettings helpers + +void WritePropInt(const aiScene* scene, FBX::Node& p, const std::string& key, int defaultValue) +{ + int value; + if (scene->mMetaData->Get(key, value)) { + p.AddP70int(key, value); + } else { + p.AddP70int(key, defaultValue); + } +} + +void WritePropDouble(const aiScene* scene, FBX::Node& p, const std::string& key, double defaultValue) +{ + double value; + if (scene->mMetaData->Get(key, value)) { + p.AddP70double(key, value); + } else { + // fallback lookup float instead + float floatValue; + if (scene->mMetaData->Get(key, floatValue)) { + p.AddP70double(key, (double)floatValue); + } else { + p.AddP70double(key, defaultValue); + } + } +} + +void WritePropEnum(const aiScene* scene, FBX::Node& p, const std::string& key, int defaultValue) +{ + int value; + if (scene->mMetaData->Get(key, value)) { + p.AddP70enum(key, value); + } else { + p.AddP70enum(key, defaultValue); + } +} + +void WritePropColor(const aiScene* scene, FBX::Node& p, const std::string& key, const aiVector3D& defaultValue) +{ + aiVector3D value; + if (scene->mMetaData->Get(key, value)) { + // ai_real can be float or double, cast to avoid warnings + p.AddP70color(key, (double)value.x, (double)value.y, (double)value.z); + } else { + p.AddP70color(key, 0.0, 0.0, 0.0); + } +} + +void WritePropString(const aiScene* scene, FBX::Node& p, const std::string& key, const std::string& defaultValue) +{ + aiString value; // MetaData doesn't hold std::string + if (scene->mMetaData->Get(key, value)) { + p.AddP70string(key, value.C_Str()); + } else { + p.AddP70string(key, defaultValue); + } +} + void FBXExporter::WriteGlobalSettings () { if (!binary) { @@ -409,26 +468,26 @@ void FBXExporter::WriteGlobalSettings () gs.AddChild("Version", int32_t(1000)); FBX::Node p("Properties70"); - p.AddP70int("UpAxis", 1); - p.AddP70int("UpAxisSign", 1); - p.AddP70int("FrontAxis", 2); - p.AddP70int("FrontAxisSign", 1); - p.AddP70int("CoordAxis", 0); - p.AddP70int("CoordAxisSign", 1); - p.AddP70int("OriginalUpAxis", 1); - p.AddP70int("OriginalUpAxisSign", 1); - p.AddP70double("UnitScaleFactor", 1.0); - p.AddP70double("OriginalUnitScaleFactor", 1.0); - p.AddP70color("AmbientColor", 0.0, 0.0, 0.0); - p.AddP70string("DefaultCamera", "Producer Perspective"); - p.AddP70enum("TimeMode", 11); - p.AddP70enum("TimeProtocol", 2); - p.AddP70enum("SnapOnFrameMode", 0); + WritePropInt(mScene, p, "UpAxis", 1); + WritePropInt(mScene, p, "UpAxisSign", 1); + WritePropInt(mScene, p, "FrontAxis", 2); + WritePropInt(mScene, p, "FrontAxisSign", 1); + WritePropInt(mScene, p, "CoordAxis", 0); + WritePropInt(mScene, p, "CoordAxisSign", 1); + WritePropInt(mScene, p, "OriginalUpAxis", 1); + WritePropInt(mScene, p, "OriginalUpAxisSign", 1); + WritePropDouble(mScene, p, "UnitScaleFactor", 1.0); + WritePropDouble(mScene, p, "OriginalUnitScaleFactor", 1.0); + WritePropColor(mScene, p, "AmbientColor", aiVector3D((ai_real)0.0, (ai_real)0.0, (ai_real)0.0)); + WritePropString(mScene, p,"DefaultCamera", "Producer Perspective"); + WritePropEnum(mScene, p, "TimeMode", 11); + WritePropEnum(mScene, p, "TimeProtocol", 2); + WritePropEnum(mScene, p, "SnapOnFrameMode", 0); p.AddP70time("TimeSpanStart", 0); // TODO: animation support p.AddP70time("TimeSpanStop", FBX::SECOND); // TODO: animation support - p.AddP70double("CustomFrameRate", -1.0); + WritePropDouble(mScene, p, "CustomFrameRate", -1.0); p.AddP70("TimeMarker", "Compound", "", ""); // not sure what this is - p.AddP70int("CurrentTimeMarker", -1); + WritePropInt(mScene, p, "CurrentTimeMarker", -1); gs.AddChild(p); gs.Dump(outfile, binary, 0); From 0c2f7a119cd6e2ad371638af2452be3568753629 Mon Sep 17 00:00:00 2001 From: Ryan Styrczula Date: Mon, 22 Jun 2020 15:22:08 -0400 Subject: [PATCH 25/67] FBXExporter: Forgot WritePropColor defaultValue --- code/AssetLib/FBX/FBXExporter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/FBX/FBXExporter.cpp b/code/AssetLib/FBX/FBXExporter.cpp index bd59cf885..20d166179 100644 --- a/code/AssetLib/FBX/FBXExporter.cpp +++ b/code/AssetLib/FBX/FBXExporter.cpp @@ -445,7 +445,7 @@ void WritePropColor(const aiScene* scene, FBX::Node& p, const std::string& key, // ai_real can be float or double, cast to avoid warnings p.AddP70color(key, (double)value.x, (double)value.y, (double)value.z); } else { - p.AddP70color(key, 0.0, 0.0, 0.0); + p.AddP70color(key, (double)defaultValue.x, (double)defaultValue.y, (double)defaultValue.z); } } From 84e342acd7399934eb85eb86568dcddb0021b798 Mon Sep 17 00:00:00 2001 From: Ryan Styrczula Date: Tue, 14 Jul 2020 10:39:18 -0400 Subject: [PATCH 26/67] DefaultIOStream: Remove assert on empty count fwrite() is valid to call with a 0 count, and will simply return 0. See: https://en.cppreference.com/w/cpp/io/c/fwrite http://www.cplusplus.com/reference/cstdio/fwrite/ There are code paths where StreamWriter will call Tell(), which calls Flush(), which calls Write(buffer.data(), 1, buffer.size()). This can happen when nothing has yet been written to the buffer, so size is 0. --- code/Common/DefaultIOStream.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/code/Common/DefaultIOStream.cpp b/code/Common/DefaultIOStream.cpp index 65edd1bdd..32f47ab07 100644 --- a/code/Common/DefaultIOStream.cpp +++ b/code/Common/DefaultIOStream.cpp @@ -100,7 +100,6 @@ size_t DefaultIOStream::Write(const void *pvBuffer, size_t pCount) { ai_assert(nullptr != pvBuffer); ai_assert(0 != pSize); - ai_assert(0 != pCount); return (mFile ? ::fwrite(pvBuffer, pSize, pCount, mFile) : 0); } From 209a61d0e7c0bb8a6940752f0aee371dbe51e328 Mon Sep 17 00:00:00 2001 From: Rahul Sheth Date: Tue, 14 Jul 2020 13:55:37 -0400 Subject: [PATCH 27/67] Update hunter and utf8cpp inclusion --- CMakeLists.txt | 4 ++-- cmake/assimp-hunter-config.cmake.in | 2 +- code/AssetLib/MMD/MMDPmxParser.cpp | 2 +- code/AssetLib/SIB/SIBImporter.cpp | 2 +- code/AssetLib/STEPParser/STEPFileEncoding.cpp | 2 +- code/AssetLib/X3D/FIReader.cpp | 2 +- code/CMakeLists.txt | 4 ++-- code/Common/BaseImporter.cpp | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b350f6e3..37a44d160 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,8 +44,8 @@ option(ASSIMP_HUNTER_ENABLED "Enable Hunter package manager support" OFF) IF(ASSIMP_HUNTER_ENABLED) include("cmake/HunterGate.cmake") HunterGate( - URL "https://github.com/ruslo/hunter/archive/v0.23.176.tar.gz" - SHA1 "2e9ae973d028660b735ac4c6142725ca36a0048a" + URL "https://github.com/cpp-pm/hunter/archive/v0.23.261.tar.gz" + SHA1 "1540dad7b97c849784a09e8c452ba811c9f71ba2" ) add_definitions(-DASSIMP_USE_HUNTER) diff --git a/cmake/assimp-hunter-config.cmake.in b/cmake/assimp-hunter-config.cmake.in index 34762ac54..8707602e5 100644 --- a/cmake/assimp-hunter-config.cmake.in +++ b/cmake/assimp-hunter-config.cmake.in @@ -2,7 +2,7 @@ find_package(RapidJSON CONFIG REQUIRED) find_package(ZLIB CONFIG REQUIRED) -find_package(utf8 CONFIG REQUIRED) +find_package(utf8cpp CONFIG REQUIRED) find_package(irrXML CONFIG REQUIRED) find_package(minizip CONFIG REQUIRED) find_package(openddlparser CONFIG REQUIRED) diff --git a/code/AssetLib/MMD/MMDPmxParser.cpp b/code/AssetLib/MMD/MMDPmxParser.cpp index 6421f38cb..7ac5ac399 100644 --- a/code/AssetLib/MMD/MMDPmxParser.cpp +++ b/code/AssetLib/MMD/MMDPmxParser.cpp @@ -43,7 +43,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "MMDPmxParser.h" #include #ifdef ASSIMP_USE_HUNTER -# include +# include #else # include "../contrib/utf8cpp/source/utf8.h" #endif diff --git a/code/AssetLib/SIB/SIBImporter.cpp b/code/AssetLib/SIB/SIBImporter.cpp index b36c6d9b1..33beb0087 100644 --- a/code/AssetLib/SIB/SIBImporter.cpp +++ b/code/AssetLib/SIB/SIBImporter.cpp @@ -59,7 +59,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #ifdef ASSIMP_USE_HUNTER -#include +#include #else //# include "../contrib/ConvertUTF/ConvertUTF.h" #include "../contrib/utf8cpp/source/utf8.h" diff --git a/code/AssetLib/STEPParser/STEPFileEncoding.cpp b/code/AssetLib/STEPParser/STEPFileEncoding.cpp index d917c28f3..1d1150c08 100644 --- a/code/AssetLib/STEPParser/STEPFileEncoding.cpp +++ b/code/AssetLib/STEPParser/STEPFileEncoding.cpp @@ -46,7 +46,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "STEPFileEncoding.h" #include #ifdef ASSIMP_USE_HUNTER -# include +# include #else # include #endif diff --git a/code/AssetLib/X3D/FIReader.cpp b/code/AssetLib/X3D/FIReader.cpp index de9f035f2..c1b439bda 100644 --- a/code/AssetLib/X3D/FIReader.cpp +++ b/code/AssetLib/X3D/FIReader.cpp @@ -61,7 +61,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #ifdef ASSIMP_USE_HUNTER -# include +# include #else # include "../contrib/utf8cpp/source/utf8.h" #endif diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 9f8f519d9..bb43449e1 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -899,7 +899,7 @@ ENDIF() # utf8 IF(ASSIMP_HUNTER_ENABLED) hunter_add_package(utf8) - find_package(utf8 CONFIG REQUIRED) + find_package(utf8cpp CONFIG REQUIRED) ELSE() # utf8 is header-only, so Assimp doesn't need to do anything. ENDIF() @@ -1159,7 +1159,7 @@ IF(ASSIMP_HUNTER_ENABLED) minizip::minizip ZLIB::zlib RapidJSON::rapidjson - utf8::utf8 + utf8cpp zip::zip ) ELSE() diff --git a/code/Common/BaseImporter.cpp b/code/Common/BaseImporter.cpp index 47ff05f2f..bcea076be 100644 --- a/code/Common/BaseImporter.cpp +++ b/code/Common/BaseImporter.cpp @@ -343,7 +343,7 @@ std::string BaseImporter::GetExtension(const std::string &file) { } #ifdef ASSIMP_USE_HUNTER -#include +#include #else #include "../contrib/utf8cpp/source/utf8.h" #endif From abc6b9ce4c84beb5ea4dcb6e32826b25bb599103 Mon Sep 17 00:00:00 2001 From: Rahul Sheth Date: Tue, 14 Jul 2020 14:07:36 -0400 Subject: [PATCH 28/67] ifdef fixes to fix MSVC warnings --- code/AssetLib/glTF/glTFAsset.inl | 4 ++-- code/AssetLib/glTF/glTFAssetWriter.inl | 4 ++-- code/AssetLib/glTF/glTFImporter.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/AssetLib/glTF/glTFAsset.inl b/code/AssetLib/glTF/glTFAsset.inl index 116f76535..c72b9698d 100644 --- a/code/AssetLib/glTF/glTFAsset.inl +++ b/code/AssetLib/glTF/glTFAsset.inl @@ -836,8 +836,8 @@ inline void Mesh::Read(Value &pJSON_Object, Asset &pAsset_Root) { if (json_extensions == nullptr) goto mr_skip_extensions; - for (Value::MemberIterator it_memb = json_extensions->MemberBegin(); it_memb != json_extensions->MemberEnd(); it_memb++) { #ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC + for (Value::MemberIterator it_memb = json_extensions->MemberBegin(); it_memb != json_extensions->MemberEnd(); it_memb++) { if (it_memb->name.GetString() == std::string("Open3DGC-compression")) { // Search for compressed data. // Compressed data contain description of part of "buffer" which is encoded. This part must be decoded and @@ -887,11 +887,11 @@ inline void Mesh::Read(Value &pJSON_Object, Asset &pAsset_Root) { Extension.push_back(ext_o3dgc); // store info in mesh extensions list. } // if(it_memb->name.GetString() == "Open3DGC-compression") else -#endif { throw DeadlyImportError(std::string("GLTF: Unknown mesh extension: \"") + it_memb->name.GetString() + "\"."); } } // for(Value::MemberIterator it_memb = json_extensions->MemberBegin(); it_memb != json_extensions->MemberEnd(); json_extensions++) +#endif mr_skip_extensions: diff --git a/code/AssetLib/glTF/glTFAssetWriter.inl b/code/AssetLib/glTF/glTFAssetWriter.inl index d8d2556fa..5b07eb2e9 100644 --- a/code/AssetLib/glTF/glTFAssetWriter.inl +++ b/code/AssetLib/glTF/glTFAssetWriter.inl @@ -305,11 +305,11 @@ namespace glTF { Value json_extensions; json_extensions.SetObject(); +#ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC for(Mesh::SExtension* ptr_ext : m.Extension) { switch(ptr_ext->Type) { -#ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC case Mesh::SExtension::EType::Compression_Open3DGC: { Value json_comp_data; @@ -339,11 +339,11 @@ namespace glTF { } break; -#endif default: throw DeadlyImportError("GLTF: Can not write mesh: unknown mesh extension, only Open3DGC is supported."); }// switch(ptr_ext->Type) }// for(Mesh::SExtension* ptr_ext : m.Extension) +#endif // Add extensions to mesh obj.AddMember("extensions", json_extensions, w.mAl); diff --git a/code/AssetLib/glTF/glTFImporter.cpp b/code/AssetLib/glTF/glTFImporter.cpp index b4ef9b06f..3f9176cca 100644 --- a/code/AssetLib/glTF/glTFImporter.cpp +++ b/code/AssetLib/glTF/glTFImporter.cpp @@ -215,8 +215,8 @@ void glTFImporter::ImportMeshes(glTF::Asset &r) { // Check if mesh extensions is used if (mesh.Extension.size() > 0) { - for (Mesh::SExtension *cur_ext : mesh.Extension) { #ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC + for (Mesh::SExtension *cur_ext : mesh.Extension) { if (cur_ext->Type == Mesh::SExtension::EType::Compression_Open3DGC) { // Limitations for meshes when using Open3DGC-compression. // It's a current limitation of sp... Specification have not this part still - about mesh compression. Why only one primitive? @@ -233,12 +233,12 @@ void glTFImporter::ImportMeshes(glTF::Asset &r) { buf->EncodedRegion_SetCurrent(mesh.id); } else -#endif { throw DeadlyImportError("GLTF: Can not import mesh: unknown mesh extension (code: \"" + to_string(cur_ext->Type) + "\"), only Open3DGC is supported."); } } +#endif } // if(mesh.Extension.size() > 0) meshOffsets.push_back(k); From 0bad2c7b6a48f07d89f4b8d4d8de00c14da5605f Mon Sep 17 00:00:00 2001 From: Rahul Sheth Date: Tue, 14 Jul 2020 18:40:54 -0400 Subject: [PATCH 29/67] Move library configuration outside Hunter block --- CMakeLists.txt | 56 +++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 37a44d160..23725381d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -357,6 +357,34 @@ IF (NOT TARGET uninstall) ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") ENDIF() +# cmake configuration files +if(${BUILD_SHARED_LIBS}) + set(BUILD_LIB_TYPE SHARED) +else() + set(BUILD_LIB_TYPE STATIC) +endif() + +IF( UNIX ) + # Use GNUInstallDirs for Unix predefined directories + INCLUDE(GNUInstallDirs) + + SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) + SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) + SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR}) +ELSE() + # Cache these to allow the user to override them on non-Unix platforms + SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING + "Path the built library files are installed to." ) + SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING + "Path the header files are installed to." ) + SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING + "Path the tool executables are installed to." ) + + SET(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR}) + SET(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR}) + SET(CMAKE_INSTALL_FULL_BINDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR}) +ENDIF() + IF(ASSIMP_HUNTER_ENABLED) set(CONFIG_INSTALL_DIR "lib/cmake/${PROJECT_NAME}") set(INCLUDE_INSTALL_DIR "include") @@ -395,34 +423,6 @@ IF(ASSIMP_HUNTER_ENABLED) DESTINATION "${CONFIG_INSTALL_DIR}" ) ELSE() - # cmake configuration files - if(${BUILD_SHARED_LIBS}) - set(BUILD_LIB_TYPE SHARED) - else() - set(BUILD_LIB_TYPE STATIC) - endif() - - IF( UNIX ) - # Use GNUInstallDirs for Unix predefined directories - INCLUDE(GNUInstallDirs) - - SET( ASSIMP_LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) - SET( ASSIMP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) - SET( ASSIMP_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR}) - ELSE() - # Cache these to allow the user to override them on non-Unix platforms - SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE STRING - "Path the built library files are installed to." ) - SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE STRING - "Path the header files are installed to." ) - SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE STRING - "Path the tool executables are installed to." ) - - SET(CMAKE_INSTALL_FULL_INCLUDEDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_INCLUDE_INSTALL_DIR}) - SET(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_LIB_INSTALL_DIR}) - SET(CMAKE_INSTALL_FULL_BINDIR ${CMAKE_INSTALL_PREFIX}/${ASSIMP_BIN_INSTALL_DIR}) - ENDIF() - CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE) CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/assimpTargets.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimpTargets.cmake" @ONLY IMMEDIATE) IF (is_multi_config) From 700d8e6614cf3b75e686fb5e491384efb675096c Mon Sep 17 00:00:00 2001 From: awr1 <41453959+awr1@users.noreply.github.com> Date: Tue, 14 Jul 2020 21:19:07 -0500 Subject: [PATCH 30/67] Fix MinGW builds (issues related to pragmas and format strings) --- code/AssetLib/Assbin/AssbinFileWriter.cpp | 8 ++++---- code/AssetLib/Assjson/cencode.h | 4 ++-- code/AssetLib/glTF/glTFAsset.inl | 12 ++++++------ code/AssetLib/glTF/glTFAssetWriter.inl | 6 +++--- code/AssetLib/glTF/glTFCommon.h | 8 ++++---- code/AssetLib/glTF/glTFExporter.cpp | 10 +++++++++- code/AssetLib/glTF2/glTF2Asset.inl | 14 +++++++------- contrib/poly2tri/poly2tri/sweep/sweep.cc | 8 ++++---- contrib/zip/src/zip.h | 8 ++++++-- include/assimp/StringUtils.h | 12 ++++++++++-- 10 files changed, 55 insertions(+), 35 deletions(-) diff --git a/code/AssetLib/Assbin/AssbinFileWriter.cpp b/code/AssetLib/Assbin/AssbinFileWriter.cpp index a879e637c..83a647a0b 100644 --- a/code/AssetLib/Assbin/AssbinFileWriter.cpp +++ b/code/AssetLib/Assbin/AssbinFileWriter.cpp @@ -60,10 +60,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -#ifdef _WIN32 +#if _MSC_VER #pragma warning(push) #pragma warning(disable : 4706) -#endif // _WIN32 +#endif // _MSC_VER namespace Assimp { @@ -825,8 +825,8 @@ void DumpSceneToAssbin( AssbinFileWriter fileWriter(shortened, compressed); fileWriter.WriteBinaryDump(pFile, cmd, pIOSystem, pScene); } -#ifdef _WIN32 +#if _MSC_VER #pragma warning(pop) -#endif // _WIN32 +#endif // _MSC_VER } // end of namespace Assimp diff --git a/code/AssetLib/Assjson/cencode.h b/code/AssetLib/Assjson/cencode.h index 6bf76724e..a7893c434 100644 --- a/code/AssetLib/Assjson/cencode.h +++ b/code/AssetLib/Assjson/cencode.h @@ -8,9 +8,9 @@ For details, see http://sourceforge.net/projects/libb64 #ifndef BASE64_CENCODE_H #define BASE64_CENCODE_H -#ifdef _WIN32 +#ifdef _MSC_VER #pragma warning(disable : 4127 ) -#endif // _WIN32 +#endif // _MSC_VER typedef enum { diff --git a/code/AssetLib/glTF/glTFAsset.inl b/code/AssetLib/glTF/glTFAsset.inl index 116f76535..eae56a64d 100644 --- a/code/AssetLib/glTF/glTFAsset.inl +++ b/code/AssetLib/glTF/glTFAsset.inl @@ -57,10 +57,10 @@ namespace glTF { namespace { -#ifdef _WIN32 +#if _MSC_VER # pragma warning(push) # pragma warning(disable : 4706) -#endif // _WIN32 +#endif // _MSC_VER // // JSON Value reading helpers @@ -372,7 +372,7 @@ inline void Buffer::EncodedRegion_Mark(const size_t pOffset, const size_t pEncod char val[val_size]; - ai_snprintf(val, val_size, "%llu", (long long)pOffset); + ai_snprintf(val, val_size, AI_SIZEFMT, pOffset); throw DeadlyImportError(std::string("GLTF: incorrect offset value (") + val + ") for marking encoded region."); } @@ -382,7 +382,7 @@ inline void Buffer::EncodedRegion_Mark(const size_t pOffset, const size_t pEncod char val[val_size]; - ai_snprintf(val, val_size, "%llu, %llu", (long long)pOffset, (long long)pEncodedData_Length); + ai_snprintf(val, val_size, AI_SIZEFMT, AI_SIZEFMT, pOffset, pEncodedData_Length); throw DeadlyImportError(std::string("GLTF: encoded region with offset/length (") + val + ") is out of range."); } @@ -1412,8 +1412,8 @@ inline std::string Asset::FindUniqueID(const std::string &str, const char *suffi return id; } -#ifdef _WIN32 +#if _MSC_VER # pragma warning(pop) -#endif // WIN32 +#endif // _MSC_VER } // namespace glTF diff --git a/code/AssetLib/glTF/glTFAssetWriter.inl b/code/AssetLib/glTF/glTFAssetWriter.inl index d8d2556fa..779c8ce58 100644 --- a/code/AssetLib/glTF/glTFAssetWriter.inl +++ b/code/AssetLib/glTF/glTFAssetWriter.inl @@ -43,10 +43,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include -#ifdef _WIN32 +#if _MSC_VER # pragma warning(push) # pragma warning( disable : 4706) -#endif // _WIN32 +#endif // _MSC_VER namespace glTF { @@ -707,7 +707,7 @@ namespace glTF { w.WriteObjects(d); } -#ifdef _WIN32 +#if _MSC_VER # pragma warning(pop) #endif // _WIN32 diff --git a/code/AssetLib/glTF/glTFCommon.h b/code/AssetLib/glTF/glTFCommon.h index b151918b6..f70780ed4 100644 --- a/code/AssetLib/glTF/glTFCommon.h +++ b/code/AssetLib/glTF/glTFCommon.h @@ -190,10 +190,10 @@ inline void CopyValue(const glTFCommon::mat4 &v, aiMatrix4x4 &o) { o.d4 = v[15]; } -#ifdef _WIN32 +#if _MSC_VER # pragma warning(push) # pragma warning(disable : 4310) -#endif // _WIN32 +#endif // _MSC_VER inline std::string getCurrentAssetDir(const std::string &pFile) { std::string path = pFile; @@ -204,9 +204,9 @@ inline std::string getCurrentAssetDir(const std::string &pFile) { return path; } -#ifdef _WIN32 +#if _MSC_VER # pragma warning(pop) -#endif // _WIN32 +#endif // _MSC_VER namespace Util { diff --git a/code/AssetLib/glTF/glTFExporter.cpp b/code/AssetLib/glTF/glTFExporter.cpp index b85affc08..3edb87623 100644 --- a/code/AssetLib/glTF/glTFExporter.cpp +++ b/code/AssetLib/glTF/glTFExporter.cpp @@ -525,6 +525,10 @@ void ExportSkin(Asset& mAsset, const aiMesh* aimesh, Ref& meshRef, Ref encoder; o3dgc::IndexedFaceSet comp_o3dgc_ifs; @@ -793,6 +797,10 @@ void glTFExporter::ExportMeshes() } } +#if __GNUC__ +#pragma GCC diagnostic pop +#endif // __GNUC__ + /* * Export the root node of the node hierarchy. * Calls ExportNode for all children. diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index 142f39841..ca622d1e2 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -436,7 +436,7 @@ inline void Buffer::EncodedRegion_Mark(const size_t pOffset, const size_t pEncod char val[val_size]; - ai_snprintf(val, val_size, "%llu", (long long)pOffset); + ai_snprintf(val, val_size, AI_SIZEFMT, pOffset); throw DeadlyImportError(std::string("GLTF: incorrect offset value (") + val + ") for marking encoded region."); } @@ -446,7 +446,7 @@ inline void Buffer::EncodedRegion_Mark(const size_t pOffset, const size_t pEncod char val[val_size]; - ai_snprintf(val, val_size, "%llu, %llu", (long long)pOffset, (long long)pEncodedData_Length); + ai_snprintf(val, val_size, AI_SIZEFMT, AI_SIZEFMT, pOffset, pEncodedData_Length); throw DeadlyImportError(std::string("GLTF: encoded region with offset/length (") + val + ") is out of range."); } @@ -1042,10 +1042,10 @@ inline int Compare(const char *attr, const char (&str)[N]) { return (strncmp(attr, str, N - 1) == 0) ? N - 1 : 0; } -#ifdef _WIN32 +#if _MSC_VER #pragma warning(push) #pragma warning(disable : 4706) -#endif // _WIN32 +#endif // _MSC_VER inline bool GetAttribVector(Mesh::Primitive &p, const char *attr, Mesh::AccessorList *&v, int &pos) { if ((pos = Compare(attr, "POSITION"))) { @@ -1723,8 +1723,8 @@ inline std::string Asset::FindUniqueID(const std::string &str, const char *suffi return id; } -#ifdef _WIN32 -#pragma warning(pop) -#endif // _WIN32 +#if _MSC_VER +# pragma warning(pop) +#endif // _MSC_VER } // namespace glTF2 diff --git a/contrib/poly2tri/poly2tri/sweep/sweep.cc b/contrib/poly2tri/poly2tri/sweep/sweep.cc index 9e3666001..23aeb6b57 100644 --- a/contrib/poly2tri/poly2tri/sweep/sweep.cc +++ b/contrib/poly2tri/poly2tri/sweep/sweep.cc @@ -36,10 +36,10 @@ namespace p2t { -#ifdef _WIN32 +#ifdef _MSC_VER # pragma warning(push) # pragma warning( disable : 4702 ) -#endif // _WIN32 +#endif // _MSC_VER // Triangulate simple polygon with holes void Sweep::Triangulate(SweepContext& tcx) @@ -800,8 +800,8 @@ Sweep::~Sweep() { } -#ifdef _WIN32 +#ifdef _MSC_VER # pragma warning( pop ) -#endif // _WIN32 +#endif // _MSC_VER } diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h index 807e328a8..2ebe9394d 100644 --- a/contrib/zip/src/zip.h +++ b/contrib/zip/src/zip.h @@ -15,9 +15,9 @@ #include #include -#ifdef _WIN32 +#ifdef _MSC_VER #pragma warning(disable : 4127 ) -#endif //_WIN32 +#endif //_MSC_VER #ifdef __cplusplus extern "C" { @@ -319,6 +319,10 @@ extern int zip_extract(const char *zipname, const char *dir, /** @} */ +#ifdef _MSC_VER +#pragma warning(pop) +#endif //_MSC_VER + #ifdef __cplusplus } #endif diff --git a/include/assimp/StringUtils.h b/include/assimp/StringUtils.h index 7e1cb4ce0..d848a6527 100644 --- a/include/assimp/StringUtils.h +++ b/include/assimp/StringUtils.h @@ -53,6 +53,12 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +#ifdef _MSC_VER +# define AI_SIZEFMT "%Iu" +#else +# define AI_SIZEFMT "%zu" +#endif + /// @fn ai_snprintf /// @brief The portable version of the function snprintf ( C99 standard ), which works on visual studio compilers 2013 and earlier. /// @param outBuf The buffer to write in @@ -87,6 +93,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. return count; } +#elif defined(__MINGW32__) +# define ai_snprintf __mingw_snprintf #else # define ai_snprintf snprintf #endif @@ -150,7 +158,7 @@ std::string DecimalToHexa( T toConvert ) { /// @param g aiColor.g /// @param b aiColor.b /// @param a aiColor.a -/// @param with_head # +/// @param with_head # /// @return The hexadecimal string, is empty in case of an error. AI_FORCE_INLINE std::string Rgba2Hex(int r, int g, int b, int a, bool with_head) { std::stringstream ss; @@ -158,7 +166,7 @@ AI_FORCE_INLINE std::string Rgba2Hex(int r, int g, int b, int a, bool with_head) ss << "#"; } ss << std::hex << (r << 24 | g << 16 | b << 8 | a); - + return ss.str(); } From 93d567e3b10285d7fde4ec77edd5d5b71ddf26d4 Mon Sep 17 00:00:00 2001 From: awr1 <41453959+awr1@users.noreply.github.com> Date: Tue, 14 Jul 2020 21:32:22 -0500 Subject: [PATCH 31/67] Fix sprintf format string --- code/AssetLib/glTF/glTFAsset.inl | 2 +- code/AssetLib/glTF2/glTF2Asset.inl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/glTF/glTFAsset.inl b/code/AssetLib/glTF/glTFAsset.inl index eae56a64d..ea6a6b11a 100644 --- a/code/AssetLib/glTF/glTFAsset.inl +++ b/code/AssetLib/glTF/glTFAsset.inl @@ -382,7 +382,7 @@ inline void Buffer::EncodedRegion_Mark(const size_t pOffset, const size_t pEncod char val[val_size]; - ai_snprintf(val, val_size, AI_SIZEFMT, AI_SIZEFMT, pOffset, pEncodedData_Length); + ai_snprintf(val, val_size, AI_SIZEFMT " " AI_SIZEFMT, pOffset, pEncodedData_Length); throw DeadlyImportError(std::string("GLTF: encoded region with offset/length (") + val + ") is out of range."); } diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index ca622d1e2..a89b65f1a 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -446,7 +446,7 @@ inline void Buffer::EncodedRegion_Mark(const size_t pOffset, const size_t pEncod char val[val_size]; - ai_snprintf(val, val_size, AI_SIZEFMT, AI_SIZEFMT, pOffset, pEncodedData_Length); + ai_snprintf(val, val_size, AI_SIZEFMT " " AI_SIZEFMT, pOffset, pEncodedData_Length); throw DeadlyImportError(std::string("GLTF: encoded region with offset/length (") + val + ") is out of range."); } From 3bf6963d206ad2ab120eb4ea56b57e1f7f23d120 Mon Sep 17 00:00:00 2001 From: awr1 <41453959+awr1@users.noreply.github.com> Date: Tue, 14 Jul 2020 21:34:30 -0500 Subject: [PATCH 32/67] Use a better divider for import error --- code/AssetLib/glTF/glTFAsset.inl | 2 +- code/AssetLib/glTF2/glTF2Asset.inl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/glTF/glTFAsset.inl b/code/AssetLib/glTF/glTFAsset.inl index ea6a6b11a..a5e539345 100644 --- a/code/AssetLib/glTF/glTFAsset.inl +++ b/code/AssetLib/glTF/glTFAsset.inl @@ -382,7 +382,7 @@ inline void Buffer::EncodedRegion_Mark(const size_t pOffset, const size_t pEncod char val[val_size]; - ai_snprintf(val, val_size, AI_SIZEFMT " " AI_SIZEFMT, pOffset, pEncodedData_Length); + ai_snprintf(val, val_size, AI_SIZEFMT "/" AI_SIZEFMT, pOffset, pEncodedData_Length); throw DeadlyImportError(std::string("GLTF: encoded region with offset/length (") + val + ") is out of range."); } diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index a89b65f1a..2dfe2f41e 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -446,7 +446,7 @@ inline void Buffer::EncodedRegion_Mark(const size_t pOffset, const size_t pEncod char val[val_size]; - ai_snprintf(val, val_size, AI_SIZEFMT " " AI_SIZEFMT, pOffset, pEncodedData_Length); + ai_snprintf(val, val_size, AI_SIZEFMT "/" AI_SIZEFMT, pOffset, pEncodedData_Length); throw DeadlyImportError(std::string("GLTF: encoded region with offset/length (") + val + ") is out of range."); } From b3f61f87597d38e4c611edcc80c326ae726bbdb3 Mon Sep 17 00:00:00 2001 From: awr1 <41453959+awr1@users.noreply.github.com> Date: Tue, 14 Jul 2020 21:44:33 -0500 Subject: [PATCH 33/67] Fix error where -Wunused-but-set-variable might not be available --- code/AssetLib/glTF/glTFExporter.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/AssetLib/glTF/glTFExporter.cpp b/code/AssetLib/glTF/glTFExporter.cpp index 3edb87623..5f911b422 100644 --- a/code/AssetLib/glTF/glTFExporter.cpp +++ b/code/AssetLib/glTF/glTFExporter.cpp @@ -525,9 +525,9 @@ void ExportSkin(Asset& mAsset, const aiMesh* aimesh, Ref& meshRef, Ref Date: Tue, 14 Jul 2020 21:48:46 -0500 Subject: [PATCH 34/67] Remove unnecessary inversion in preproc --- code/AssetLib/glTF/glTFExporter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/glTF/glTFExporter.cpp b/code/AssetLib/glTF/glTFExporter.cpp index 5f911b422..44a37af49 100644 --- a/code/AssetLib/glTF/glTFExporter.cpp +++ b/code/AssetLib/glTF/glTFExporter.cpp @@ -525,7 +525,7 @@ void ExportSkin(Asset& mAsset, const aiMesh* aimesh, Ref& meshRef, Ref Date: Tue, 14 Jul 2020 21:50:22 -0500 Subject: [PATCH 35/67] Preproc conditional should be &&, not || --- code/AssetLib/glTF/glTFExporter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/glTF/glTFExporter.cpp b/code/AssetLib/glTF/glTFExporter.cpp index 44a37af49..032555fc3 100644 --- a/code/AssetLib/glTF/glTFExporter.cpp +++ b/code/AssetLib/glTF/glTFExporter.cpp @@ -525,7 +525,7 @@ void ExportSkin(Asset& mAsset, const aiMesh* aimesh, Ref& meshRef, Ref Date: Tue, 14 Jul 2020 21:58:36 -0500 Subject: [PATCH 36/67] Try to fix lexing issue with preproc w/r/t __has_warning --- code/AssetLib/glTF/glTFExporter.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/glTF/glTFExporter.cpp b/code/AssetLib/glTF/glTFExporter.cpp index 032555fc3..be9dddef7 100644 --- a/code/AssetLib/glTF/glTFExporter.cpp +++ b/code/AssetLib/glTF/glTFExporter.cpp @@ -525,9 +525,11 @@ void ExportSkin(Asset& mAsset, const aiMesh* aimesh, Ref& meshRef, Ref Date: Tue, 14 Jul 2020 22:07:24 -0500 Subject: [PATCH 37/67] Ensure that zip.h warning disable is pushed --- contrib/zip/src/zip.h | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/zip/src/zip.h b/contrib/zip/src/zip.h index 2ebe9394d..87f3654f4 100644 --- a/contrib/zip/src/zip.h +++ b/contrib/zip/src/zip.h @@ -16,6 +16,7 @@ #include #ifdef _MSC_VER +#pragma warning(push) #pragma warning(disable : 4127 ) #endif //_MSC_VER From a56134ba330775415dd6148d8667e9a3c7ce2537 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 09:05:09 +0100 Subject: [PATCH 38/67] Drop faces when indices are out of range. --- code/AssetLib/glTF2/glTF2Importer.cpp | 117 +++++++++++++++----------- 1 file changed, 67 insertions(+), 50 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 4d740d8c1..1c32b48e2 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -298,25 +298,37 @@ void glTF2Importer::ImportMaterials(glTF2::Asset &r) { } } -static inline void SetFace(aiFace &face, int a) { - face.mNumIndices = 1; - face.mIndices = new unsigned int[1]; - face.mIndices[0] = a; +static inline void SetFaceAndAdvance(aiFace*& face, unsigned int numVertices, unsigned int a) { + if (a >= numVertices) { + return; + } + face->mNumIndices = 1; + face->mIndices = new unsigned int[1]; + face->mIndices[0] = a; + ++face; } -static inline void SetFace(aiFace &face, int a, int b) { - face.mNumIndices = 2; - face.mIndices = new unsigned int[2]; - face.mIndices[0] = a; - face.mIndices[1] = b; +static inline void SetFaceAndAdvance(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b) { + if ((a >= numVertices) || (b >= numVertices)) { + return; + } + face->mNumIndices = 2; + face->mIndices = new unsigned int[2]; + face->mIndices[0] = a; + face->mIndices[1] = b; + ++face; } -static inline void SetFace(aiFace &face, int a, int b, int c) { - face.mNumIndices = 3; - face.mIndices = new unsigned int[3]; - face.mIndices[0] = a; - face.mIndices[1] = b; - face.mIndices[2] = c; +static inline void SetFaceAndAdvance(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b, unsigned int c) { + if ((a >= numVertices) || (b >= numVertices) || (c >= numVertices)) { + return; + } + face->mNumIndices = 3; + face->mIndices = new unsigned int[3]; + face->mIndices[0] = a; + face->mIndices[1] = b; + face->mIndices[2] = c; + ++face; } #ifdef ASSIMP_BUILD_DEBUG @@ -486,6 +498,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { } aiFace *faces = nullptr; + aiFace *facePtr = nullptr; size_t nFaces = 0; if (prim.indices) { @@ -497,9 +510,9 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { switch (prim.mode) { case PrimitiveMode_POINTS: { nFaces = count; - faces = new aiFace[nFaces]; + facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; ++i) { - SetFace(faces[i], data.GetUInt(i)); + SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i)); } break; } @@ -510,9 +523,9 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { ASSIMP_LOG_WARN("The number of vertices was not compatible with the LINES mode. Some vertices were dropped."); count = nFaces * 2; } - faces = new aiFace[nFaces]; + facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; i += 2) { - SetFace(faces[i / 2], data.GetUInt(i), data.GetUInt(i + 1)); + SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1)); } break; } @@ -520,13 +533,13 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { case PrimitiveMode_LINE_LOOP: case PrimitiveMode_LINE_STRIP: { nFaces = count - ((prim.mode == PrimitiveMode_LINE_STRIP) ? 1 : 0); - faces = new aiFace[nFaces]; - SetFace(faces[0], data.GetUInt(0), data.GetUInt(1)); + facePtr = faces = new aiFace[nFaces]; + SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(1)); for (unsigned int i = 2; i < count; ++i) { - SetFace(faces[i - 1], faces[i - 2].mIndices[1], data.GetUInt(i)); + SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[i - 2].mIndices[1], data.GetUInt(i)); } if (prim.mode == PrimitiveMode_LINE_LOOP) { // close the loop - SetFace(faces[count - 1], faces[count - 2].mIndices[1], faces[0].mIndices[0]); + SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[count - 2].mIndices[1], faces[0].mIndices[0]); } break; } @@ -537,33 +550,33 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { ASSIMP_LOG_WARN("The number of vertices was not compatible with the TRIANGLES mode. Some vertices were dropped."); count = nFaces * 3; } - faces = new aiFace[nFaces]; + facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; i += 3) { - SetFace(faces[i / 3], data.GetUInt(i), data.GetUInt(i + 1), data.GetUInt(i + 2)); + SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1), data.GetUInt(i + 2)); } break; } case PrimitiveMode_TRIANGLE_STRIP: { nFaces = count - 2; - faces = new aiFace[nFaces]; + facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < nFaces; ++i) { //The ordering is to ensure that the triangles are all drawn with the same orientation if ((i + 1) % 2 == 0) { //For even n, vertices n + 1, n, and n + 2 define triangle n - SetFace(faces[i], data.GetUInt(i + 1), data.GetUInt(i), data.GetUInt(i + 2)); + SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i + 1), data.GetUInt(i), data.GetUInt(i + 2)); } else { //For odd n, vertices n, n+1, and n+2 define triangle n - SetFace(faces[i], data.GetUInt(i), data.GetUInt(i + 1), data.GetUInt(i + 2)); + SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1), data.GetUInt(i + 2)); } } break; } case PrimitiveMode_TRIANGLE_FAN: nFaces = count - 2; - faces = new aiFace[nFaces]; - SetFace(faces[0], data.GetUInt(0), data.GetUInt(1), data.GetUInt(2)); + facePtr = faces = new aiFace[nFaces]; + SetFaceAndAdvance(facePtr, data.GetUInt(0), data.GetUInt(1), data.GetUInt(2)); for (unsigned int i = 1; i < nFaces; ++i) { - SetFace(faces[i], faces[0].mIndices[0], faces[i - 1].mIndices[2], data.GetUInt(i + 2)); + SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], data.GetUInt(i + 2)); } break; } @@ -575,9 +588,9 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { switch (prim.mode) { case PrimitiveMode_POINTS: { nFaces = count; - faces = new aiFace[nFaces]; + facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; ++i) { - SetFace(faces[i], i); + SetFaceAndAdvance(facePtr, aim->mNumVertices, i); } break; } @@ -588,9 +601,9 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { ASSIMP_LOG_WARN("The number of vertices was not compatible with the LINES mode. Some vertices were dropped."); count = (unsigned int)nFaces * 2; } - faces = new aiFace[nFaces]; + facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; i += 2) { - SetFace(faces[i / 2], i, i + 1); + SetFaceAndAdvance(facePtr, aim->mNumVertices, i, i + 1); } break; } @@ -598,13 +611,13 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { case PrimitiveMode_LINE_LOOP: case PrimitiveMode_LINE_STRIP: { nFaces = count - ((prim.mode == PrimitiveMode_LINE_STRIP) ? 1 : 0); - faces = new aiFace[nFaces]; - SetFace(faces[0], 0, 1); + facePtr = faces = new aiFace[nFaces]; + SetFaceAndAdvance(facePtr, aim->mNumVertices, 0, 1); for (unsigned int i = 2; i < count; ++i) { - SetFace(faces[i - 1], faces[i - 2].mIndices[1], i); + SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[i - 2].mIndices[1], i); } if (prim.mode == PrimitiveMode_LINE_LOOP) { // close the loop - SetFace(faces[count - 1], faces[count - 2].mIndices[1], faces[0].mIndices[0]); + SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[count - 2].mIndices[1], faces[0].mIndices[0]); } break; } @@ -615,42 +628,46 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { ASSIMP_LOG_WARN("The number of vertices was not compatible with the TRIANGLES mode. Some vertices were dropped."); count = (unsigned int)nFaces * 3; } - faces = new aiFace[nFaces]; + facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; i += 3) { - SetFace(faces[i / 3], i, i + 1, i + 2); + SetFaceAndAdvance(facePtr, aim->mNumVertices, i, i + 1, i + 2); } break; } case PrimitiveMode_TRIANGLE_STRIP: { nFaces = count - 2; - faces = new aiFace[nFaces]; + facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < nFaces; ++i) { //The ordering is to ensure that the triangles are all drawn with the same orientation if ((i + 1) % 2 == 0) { //For even n, vertices n + 1, n, and n + 2 define triangle n - SetFace(faces[i], i + 1, i, i + 2); + SetFaceAndAdvance(facePtr, aim->mNumVertices, i + 1, i, i + 2); } else { //For odd n, vertices n, n+1, and n+2 define triangle n - SetFace(faces[i], i, i + 1, i + 2); + SetFaceAndAdvance(facePtr, aim->mNumVertices, i, i + 1, i + 2); } } break; } case PrimitiveMode_TRIANGLE_FAN: nFaces = count - 2; - faces = new aiFace[nFaces]; - SetFace(faces[0], 0, 1, 2); + facePtr = faces = new aiFace[nFaces]; + SetFaceAndAdvance(facePtr, aim->mNumVertices, 0, 1, 2); for (unsigned int i = 1; i < nFaces; ++i) { - SetFace(faces[i], faces[0].mIndices[0], faces[i - 1].mIndices[2], i + 2); + SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], i + 2); } break; } } - if (nullptr != faces) { + if (faces) { aim->mFaces = faces; - aim->mNumFaces = static_cast(nFaces); - ai_assert(CheckValidFacesIndices(faces, static_cast(nFaces), aim->mNumVertices)); + const unsigned int actualNumFaces = facePtr - faces; + if (actualNumFaces < nFaces) { + ASSIMP_LOG_WARN("Some faces had out-of-range indices. Those faces were dropped."); + } + aim->mNumFaces = actualNumFaces; + ai_assert(CheckValidFacesIndices(faces, actualNumFaces, aim->mNumVertices)); } if (prim.material) { From c0d978786e3714aaeb2934540b6c425823509c13 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 09:12:52 +0100 Subject: [PATCH 39/67] Fix warning --- code/AssetLib/glTF2/glTF2Importer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 1c32b48e2..9ce488cbd 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -662,7 +662,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { if (faces) { aim->mFaces = faces; - const unsigned int actualNumFaces = facePtr - faces; + const unsigned int actualNumFaces = static_cast(facePtr - faces); if (actualNumFaces < nFaces) { ASSIMP_LOG_WARN("Some faces had out-of-range indices. Those faces were dropped."); } From 7e7161852ae2a724e1f44667294b048a3281f670 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 11:19:10 +0100 Subject: [PATCH 40/67] Add a unit test. --- .../glTF2/IndexOutOfRange/IndexOutOfRange.bin | Bin 0 -> 648 bytes .../IndexOutOfRange/IndexOutOfRange.gltf | 142 ++++++++++++++++++ test/unit/utglTF2ImportExport.cpp | 28 ++++ 3 files changed, 170 insertions(+) create mode 100644 test/models/glTF2/IndexOutOfRange/IndexOutOfRange.bin create mode 100644 test/models/glTF2/IndexOutOfRange/IndexOutOfRange.gltf diff --git a/test/models/glTF2/IndexOutOfRange/IndexOutOfRange.bin b/test/models/glTF2/IndexOutOfRange/IndexOutOfRange.bin new file mode 100644 index 0000000000000000000000000000000000000000..b7cfe377b9cdabc5bc9ed9879730941916b3946e GIT binary patch literal 648 zcmb7;0Sbap5JaDqm6es1bsVqe%{p4`2t&(9kc7v~?hM}rf8$^WOMZN(?t))>OE2Y4 zIp=K7|8vXl>iFlv-P0ZFm?6B-oYniRxnr+fzC`YAz-dW4cdufTg sR^{^3{GnpSI;hxCvt<|5>}fb~3>r?foVf%oS2}LogN_G1PhLUK7moElJ^%m! literal 0 HcmV?d00001 diff --git a/test/models/glTF2/IndexOutOfRange/IndexOutOfRange.gltf b/test/models/glTF2/IndexOutOfRange/IndexOutOfRange.gltf new file mode 100644 index 000000000..67561c591 --- /dev/null +++ b/test/models/glTF2/IndexOutOfRange/IndexOutOfRange.gltf @@ -0,0 +1,142 @@ +{ + "asset": { + "generator": "COLLADA2GLTF", + "version": "2.0" + }, + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "matrix": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "mesh": 0 + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "NORMAL": 1, + "POSITION": 2 + }, + "indices": 0, + "mode": 4, + "material": 0 + } + ], + "name": "Mesh" + } + ], + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 36, + "max": [ + 255 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + -1.0, + -1.0, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 288, + "componentType": 5126, + "count": 24, + "max": [ + 0.5, + 0.5, + 0.5 + ], + "min": [ + -0.5, + -0.5, + -0.5 + ], + "type": "VEC3" + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.800000011920929, + 0.0, + 0.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "name": "Red" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 576, + "byteLength": 72, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 576, + "byteStride": 12, + "target": 34962 + } + ], + "buffers": [ + { + "byteLength": 648, + "uri": "IndexOutOfRange.bin" + } + ] +} diff --git a/test/unit/utglTF2ImportExport.cpp b/test/unit/utglTF2ImportExport.cpp index 6791d5f89..8bc20e950 100644 --- a/test/unit/utglTF2ImportExport.cpp +++ b/test/unit/utglTF2ImportExport.cpp @@ -541,3 +541,31 @@ TEST_F(utglTF2ImportExport, norootnode_issue_3269) { const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/glTF2/issue_3269/texcoord_crash.gltf", aiProcess_ValidateDataStructure); ASSERT_EQ(scene, nullptr); } + +#include +#include + +TEST_F(utglTF2ImportExport, indexOutOfRange) { + // The contents of an asset should not lead to an assert. + Assimp::Importer importer; + + struct WarningObserver : Assimp::LogStream + { + bool m_observedWarning = false; + void write(const char *message) override + { + m_observedWarning = m_observedWarning || std::strstr(message, "faces were dropped"); + } + }; + WarningObserver warningObserver; + + DefaultLogger::get()->attachStream(&warningObserver); + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/glTF2/IndexOutOfRange/IndexOutOfRange.gltf", aiProcess_ValidateDataStructure); + ASSERT_NE(scene, nullptr); + ASSERT_NE(scene->mRootNode, nullptr); + ASSERT_EQ(scene->mNumMeshes, 1); + EXPECT_EQ(scene->mMeshes[0]->mNumFaces, 11); + DefaultLogger::get()->detachStream(&warningObserver); + EXPECT_TRUE(warningObserver.m_observedWarning); +} + From 212903e935d64e8d0d3f20c68603744ddbc213f9 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 12:19:00 +0100 Subject: [PATCH 41/67] Unit test for all indices out of range, and fix. --- code/AssetLib/glTF2/glTF2Importer.cpp | 8 ++++++-- test/unit/utglTF2ImportExport.cpp | 25 ++++++++++++++++--------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 9ce488cbd..0b784e0d4 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -574,7 +574,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { case PrimitiveMode_TRIANGLE_FAN: nFaces = count - 2; facePtr = faces = new aiFace[nFaces]; - SetFaceAndAdvance(facePtr, data.GetUInt(0), data.GetUInt(1), data.GetUInt(2)); + SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(1), data.GetUInt(2)); for (unsigned int i = 1; i < nFaces; ++i) { SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], data.GetUInt(i + 2)); } @@ -664,7 +664,11 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { aim->mFaces = faces; const unsigned int actualNumFaces = static_cast(facePtr - faces); if (actualNumFaces < nFaces) { - ASSIMP_LOG_WARN("Some faces had out-of-range indices. Those faces were dropped."); + ASSIMP_LOG_WARN("Some faces in mesh had out-of-range indices. Those faces were dropped."); + } + if (actualNumFaces == 0) + { + throw DeadlyImportError(std::string("Mesh \"") + aim->mName.C_Str() + "\" has no faces"); } aim->mNumFaces = actualNumFaces; ai_assert(CheckValidFacesIndices(faces, actualNumFaces, aim->mNumVertices)); diff --git a/test/unit/utglTF2ImportExport.cpp b/test/unit/utglTF2ImportExport.cpp index 8bc20e950..c3ad2d994 100644 --- a/test/unit/utglTF2ImportExport.cpp +++ b/test/unit/utglTF2ImportExport.cpp @@ -46,11 +46,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include +#include + #include #include - using namespace Assimp; class utglTF2ImportExport : public AbstractImportExportBase { @@ -542,14 +544,11 @@ TEST_F(utglTF2ImportExport, norootnode_issue_3269) { ASSERT_EQ(scene, nullptr); } -#include -#include - TEST_F(utglTF2ImportExport, indexOutOfRange) { // The contents of an asset should not lead to an assert. Assimp::Importer importer; - struct WarningObserver : Assimp::LogStream + struct LogObserver : Assimp::LogStream { bool m_observedWarning = false; void write(const char *message) override @@ -557,15 +556,23 @@ TEST_F(utglTF2ImportExport, indexOutOfRange) { m_observedWarning = m_observedWarning || std::strstr(message, "faces were dropped"); } }; - WarningObserver warningObserver; + LogObserver logObserver; - DefaultLogger::get()->attachStream(&warningObserver); + DefaultLogger::get()->attachStream(&logObserver); const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/glTF2/IndexOutOfRange/IndexOutOfRange.gltf", aiProcess_ValidateDataStructure); ASSERT_NE(scene, nullptr); ASSERT_NE(scene->mRootNode, nullptr); ASSERT_EQ(scene->mNumMeshes, 1); EXPECT_EQ(scene->mMeshes[0]->mNumFaces, 11); - DefaultLogger::get()->detachStream(&warningObserver); - EXPECT_TRUE(warningObserver.m_observedWarning); + DefaultLogger::get()->detachStream(&logObserver); + EXPECT_TRUE(logObserver.m_observedWarning); } +TEST_F(utglTF2ImportExport, allIndicesOutOfRange) { + // The contents of an asset should not lead to an assert. + Assimp::Importer importer; + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/glTF2/IndexOutOfRange/AllIndicesOutOfRange.gltf", aiProcess_ValidateDataStructure); + ASSERT_EQ(scene, nullptr); + std::string error = importer.GetErrorString(); + ASSERT_NE(error.find("Mesh \"Mesh\" has no faces"), std::string::npos); +} From fff6396e3c997b2a4368e597511495967e1eca82 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 12:22:28 +0100 Subject: [PATCH 42/67] Rename to avoid overloading problems. --- code/AssetLib/glTF2/glTF2Importer.cpp | 46 +++++++++++++-------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 0b784e0d4..fae87a990 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -298,7 +298,7 @@ void glTF2Importer::ImportMaterials(glTF2::Asset &r) { } } -static inline void SetFaceAndAdvance(aiFace*& face, unsigned int numVertices, unsigned int a) { +static inline void SetFaceAndAdvance1(aiFace*& face, unsigned int numVertices, unsigned int a) { if (a >= numVertices) { return; } @@ -308,7 +308,7 @@ static inline void SetFaceAndAdvance(aiFace*& face, unsigned int numVertices, un ++face; } -static inline void SetFaceAndAdvance(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b) { +static inline void SetFaceAndAdvance2(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b) { if ((a >= numVertices) || (b >= numVertices)) { return; } @@ -319,7 +319,7 @@ static inline void SetFaceAndAdvance(aiFace*& face, unsigned int numVertices, un ++face; } -static inline void SetFaceAndAdvance(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b, unsigned int c) { +static inline void SetFaceAndAdvance3(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b, unsigned int c) { if ((a >= numVertices) || (b >= numVertices) || (c >= numVertices)) { return; } @@ -512,7 +512,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { nFaces = count; facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; ++i) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i)); + SetFaceAndAdvance1(facePtr, aim->mNumVertices, data.GetUInt(i)); } break; } @@ -525,7 +525,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { } facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; i += 2) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1)); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1)); } break; } @@ -534,12 +534,12 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { case PrimitiveMode_LINE_STRIP: { nFaces = count - ((prim.mode == PrimitiveMode_LINE_STRIP) ? 1 : 0); facePtr = faces = new aiFace[nFaces]; - SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(1)); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(1)); for (unsigned int i = 2; i < count; ++i) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[i - 2].mIndices[1], data.GetUInt(i)); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, faces[i - 2].mIndices[1], data.GetUInt(i)); } if (prim.mode == PrimitiveMode_LINE_LOOP) { // close the loop - SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[count - 2].mIndices[1], faces[0].mIndices[0]); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, faces[count - 2].mIndices[1], faces[0].mIndices[0]); } break; } @@ -552,7 +552,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { } facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; i += 3) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1), data.GetUInt(i + 2)); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1), data.GetUInt(i + 2)); } break; } @@ -563,10 +563,10 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { //The ordering is to ensure that the triangles are all drawn with the same orientation if ((i + 1) % 2 == 0) { //For even n, vertices n + 1, n, and n + 2 define triangle n - SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i + 1), data.GetUInt(i), data.GetUInt(i + 2)); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, data.GetUInt(i + 1), data.GetUInt(i), data.GetUInt(i + 2)); } else { //For odd n, vertices n, n+1, and n+2 define triangle n - SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1), data.GetUInt(i + 2)); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, data.GetUInt(i), data.GetUInt(i + 1), data.GetUInt(i + 2)); } } break; @@ -574,9 +574,9 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { case PrimitiveMode_TRIANGLE_FAN: nFaces = count - 2; facePtr = faces = new aiFace[nFaces]; - SetFaceAndAdvance(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(1), data.GetUInt(2)); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(1), data.GetUInt(2)); for (unsigned int i = 1; i < nFaces; ++i) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], data.GetUInt(i + 2)); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], data.GetUInt(i + 2)); } break; } @@ -590,7 +590,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { nFaces = count; facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; ++i) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, i); + SetFaceAndAdvance1(facePtr, aim->mNumVertices, i); } break; } @@ -603,7 +603,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { } facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; i += 2) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, i, i + 1); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, i, i + 1); } break; } @@ -612,12 +612,12 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { case PrimitiveMode_LINE_STRIP: { nFaces = count - ((prim.mode == PrimitiveMode_LINE_STRIP) ? 1 : 0); facePtr = faces = new aiFace[nFaces]; - SetFaceAndAdvance(facePtr, aim->mNumVertices, 0, 1); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, 0, 1); for (unsigned int i = 2; i < count; ++i) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[i - 2].mIndices[1], i); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, faces[i - 2].mIndices[1], i); } if (prim.mode == PrimitiveMode_LINE_LOOP) { // close the loop - SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[count - 2].mIndices[1], faces[0].mIndices[0]); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, faces[count - 2].mIndices[1], faces[0].mIndices[0]); } break; } @@ -630,7 +630,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { } facePtr = faces = new aiFace[nFaces]; for (unsigned int i = 0; i < count; i += 3) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, i, i + 1, i + 2); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, i, i + 1, i + 2); } break; } @@ -641,10 +641,10 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { //The ordering is to ensure that the triangles are all drawn with the same orientation if ((i + 1) % 2 == 0) { //For even n, vertices n + 1, n, and n + 2 define triangle n - SetFaceAndAdvance(facePtr, aim->mNumVertices, i + 1, i, i + 2); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, i + 1, i, i + 2); } else { //For odd n, vertices n, n+1, and n+2 define triangle n - SetFaceAndAdvance(facePtr, aim->mNumVertices, i, i + 1, i + 2); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, i, i + 1, i + 2); } } break; @@ -652,9 +652,9 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { case PrimitiveMode_TRIANGLE_FAN: nFaces = count - 2; facePtr = faces = new aiFace[nFaces]; - SetFaceAndAdvance(facePtr, aim->mNumVertices, 0, 1, 2); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, 0, 1, 2); for (unsigned int i = 1; i < nFaces; ++i) { - SetFaceAndAdvance(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], i + 2); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], i + 2); } break; } From d4f5f29b44d64f3dd44b5e68e90e6d395f528f5b Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 12:22:39 +0100 Subject: [PATCH 43/67] Add missing asset --- .../IndexOutOfRange/AllIndicesOutOfRange.bin | Bin 0 -> 648 bytes .../IndexOutOfRange/AllIndicesOutOfRange.gltf | 142 ++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 test/models/glTF2/IndexOutOfRange/AllIndicesOutOfRange.bin create mode 100644 test/models/glTF2/IndexOutOfRange/AllIndicesOutOfRange.gltf diff --git a/test/models/glTF2/IndexOutOfRange/AllIndicesOutOfRange.bin b/test/models/glTF2/IndexOutOfRange/AllIndicesOutOfRange.bin new file mode 100644 index 0000000000000000000000000000000000000000..8fef5c7c04bc230c538c8bf7aed41e73d302acb9 GIT binary patch literal 648 zcmb`BfeFAc2n5|Mt7Wr}*5(37MFLW2;Q7-RV}x%GDWcg4dQ@1NcSS)YSh literal 0 HcmV?d00001 diff --git a/test/models/glTF2/IndexOutOfRange/AllIndicesOutOfRange.gltf b/test/models/glTF2/IndexOutOfRange/AllIndicesOutOfRange.gltf new file mode 100644 index 000000000..3dbb6efe4 --- /dev/null +++ b/test/models/glTF2/IndexOutOfRange/AllIndicesOutOfRange.gltf @@ -0,0 +1,142 @@ +{ + "asset": { + "generator": "COLLADA2GLTF", + "version": "2.0" + }, + "scene": 0, + "scenes": [ + { + "nodes": [ + 0 + ] + } + ], + "nodes": [ + { + "children": [ + 1 + ], + "matrix": [ + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + -1.0, + 0.0, + 0.0, + 1.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 1.0 + ] + }, + { + "mesh": 0 + } + ], + "meshes": [ + { + "primitives": [ + { + "attributes": { + "NORMAL": 1, + "POSITION": 2 + }, + "indices": 0, + "mode": 4, + "material": 0 + } + ], + "name": "Mesh" + } + ], + "accessors": [ + { + "bufferView": 0, + "byteOffset": 0, + "componentType": 5123, + "count": 36, + "max": [ + 255 + ], + "min": [ + 0 + ], + "type": "SCALAR" + }, + { + "bufferView": 1, + "byteOffset": 0, + "componentType": 5126, + "count": 24, + "max": [ + 1.0, + 1.0, + 1.0 + ], + "min": [ + -1.0, + -1.0, + -1.0 + ], + "type": "VEC3" + }, + { + "bufferView": 1, + "byteOffset": 288, + "componentType": 5126, + "count": 24, + "max": [ + 0.5, + 0.5, + 0.5 + ], + "min": [ + -0.5, + -0.5, + -0.5 + ], + "type": "VEC3" + } + ], + "materials": [ + { + "pbrMetallicRoughness": { + "baseColorFactor": [ + 0.800000011920929, + 0.0, + 0.0, + 1.0 + ], + "metallicFactor": 0.0 + }, + "name": "Red" + } + ], + "bufferViews": [ + { + "buffer": 0, + "byteOffset": 576, + "byteLength": 72, + "target": 34963 + }, + { + "buffer": 0, + "byteOffset": 0, + "byteLength": 576, + "byteStride": 12, + "target": 34962 + } + ], + "buffers": [ + { + "byteLength": 648, + "uri": "AllIndicesOutOfRange.bin" + } + ] +} From f3170a96ba48b6938ff455d6ea5a2cfd5919c884 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 12:36:48 +0100 Subject: [PATCH 44/67] Ensure data does not depend on faces we may not have created. --- code/AssetLib/glTF2/glTF2Importer.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index fae87a990..566e48a69 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -536,10 +536,10 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { facePtr = faces = new aiFace[nFaces]; SetFaceAndAdvance2(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(1)); for (unsigned int i = 2; i < count; ++i) { - SetFaceAndAdvance2(facePtr, aim->mNumVertices, faces[i - 2].mIndices[1], data.GetUInt(i)); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, data.GetUInt(i - 1), data.GetUInt(i)); } if (prim.mode == PrimitiveMode_LINE_LOOP) { // close the loop - SetFaceAndAdvance2(facePtr, aim->mNumVertices, faces[count - 2].mIndices[1], faces[0].mIndices[0]); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, data.GetUInt(static_cast(count) - 1), faces[0].mIndices[0]); } break; } @@ -576,7 +576,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { facePtr = faces = new aiFace[nFaces]; SetFaceAndAdvance3(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(1), data.GetUInt(2)); for (unsigned int i = 1; i < nFaces; ++i) { - SetFaceAndAdvance3(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], data.GetUInt(i + 2)); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, data.GetUInt(0), data.GetUInt(i + 1), data.GetUInt(i + 2)); } break; } @@ -614,10 +614,10 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { facePtr = faces = new aiFace[nFaces]; SetFaceAndAdvance2(facePtr, aim->mNumVertices, 0, 1); for (unsigned int i = 2; i < count; ++i) { - SetFaceAndAdvance2(facePtr, aim->mNumVertices, faces[i - 2].mIndices[1], i); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, i - 1, i); } if (prim.mode == PrimitiveMode_LINE_LOOP) { // close the loop - SetFaceAndAdvance2(facePtr, aim->mNumVertices, faces[count - 2].mIndices[1], faces[0].mIndices[0]); + SetFaceAndAdvance2(facePtr, aim->mNumVertices, count - 1, 0); } break; } @@ -654,7 +654,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { facePtr = faces = new aiFace[nFaces]; SetFaceAndAdvance3(facePtr, aim->mNumVertices, 0, 1, 2); for (unsigned int i = 1; i < nFaces; ++i) { - SetFaceAndAdvance3(facePtr, aim->mNumVertices, faces[0].mIndices[0], faces[i - 1].mIndices[2], i + 2); + SetFaceAndAdvance3(facePtr, aim->mNumVertices, 0, i + 1, i + 2); } break; } From 37e1fb9cd7a85e0716cc17175ac914f403cf25e2 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 14:19:13 +0100 Subject: [PATCH 45/67] Fix message --- code/AssetLib/glTF2/glTF2Importer.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 566e48a69..441219feb 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -299,9 +299,9 @@ void glTF2Importer::ImportMaterials(glTF2::Asset &r) { } static inline void SetFaceAndAdvance1(aiFace*& face, unsigned int numVertices, unsigned int a) { - if (a >= numVertices) { - return; - } + if (a >= numVertices) { + return; + } face->mNumIndices = 1; face->mIndices = new unsigned int[1]; face->mIndices[0] = a; @@ -309,14 +309,14 @@ static inline void SetFaceAndAdvance1(aiFace*& face, unsigned int numVertices, u } static inline void SetFaceAndAdvance2(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b) { - if ((a >= numVertices) || (b >= numVertices)) { - return; - } + if ((a >= numVertices) || (b >= numVertices)) { + return; + } face->mNumIndices = 2; face->mIndices = new unsigned int[2]; face->mIndices[0] = a; face->mIndices[1] = b; - ++face; + ++face; } static inline void SetFaceAndAdvance3(aiFace*& face, unsigned int numVertices, unsigned int a, unsigned int b, unsigned int c) { @@ -328,7 +328,7 @@ static inline void SetFaceAndAdvance3(aiFace*& face, unsigned int numVertices, u face->mIndices[0] = a; face->mIndices[1] = b; face->mIndices[2] = c; - ++face; + ++face; } #ifdef ASSIMP_BUILD_DEBUG @@ -498,7 +498,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { } aiFace *faces = nullptr; - aiFace *facePtr = nullptr; + aiFace *facePtr = nullptr; size_t nFaces = 0; if (prim.indices) { @@ -664,7 +664,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { aim->mFaces = faces; const unsigned int actualNumFaces = static_cast(facePtr - faces); if (actualNumFaces < nFaces) { - ASSIMP_LOG_WARN("Some faces in mesh had out-of-range indices. Those faces were dropped."); + ASSIMP_LOG_WARN("Some faces had out-of-range indices. Those faces were dropped."); } if (actualNumFaces == 0) { From e1bab44e19d797a9372669a3d3dd333784e26000 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 15:02:27 +0100 Subject: [PATCH 46/67] Exception safety --- code/AssetLib/glTF2/glTF2Importer.cpp | 6 +++--- include/assimp/BaseImporter.h | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 441219feb..18c95d42b 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -347,7 +347,7 @@ static inline bool CheckValidFacesIndices(aiFace *faces, unsigned nFaces, unsign void glTF2Importer::ImportMeshes(glTF2::Asset &r) { ASSIMP_LOG_DEBUG_F("Importing ", r.meshes.Size(), " meshes"); - std::vector meshes; + std::vector> meshes; unsigned int k = 0; meshOffsets.clear(); @@ -361,8 +361,8 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { for (unsigned int p = 0; p < mesh.primitives.size(); ++p) { Mesh::Primitive &prim = mesh.primitives[p]; - aiMesh *aim = new aiMesh(); - meshes.push_back(aim); + meshes.emplace_back(std::make_unique()); + aiMesh *aim = meshes.back().get(); aim->mName = mesh.name.empty() ? mesh.id : mesh.name; diff --git a/include/assimp/BaseImporter.h b/include/assimp/BaseImporter.h index ed146168d..cc14f2f03 100644 --- a/include/assimp/BaseImporter.h +++ b/include/assimp/BaseImporter.h @@ -57,6 +57,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include struct aiScene; struct aiImporterDesc; @@ -391,6 +392,24 @@ public: // static utilities } } + // ------------------------------------------------------------------- + /** Utility function to move a std::vector of unique_ptrs into a aiScene array + * @param vec The vector of unique_ptrs to be moved + * @param out The output pointer to the allocated array. + * @param numOut The output count of elements copied. */ + template + AI_FORCE_INLINE static void CopyVector( + std::vector> &vec, + T **&out, + unsigned int &outLength) { + outLength = unsigned(vec.size()); + if (outLength) { + out = new T*[outLength]; + T** outPtr = out; + std::for_each(vec.begin(), vec.end(), [&outPtr](auto& uPtr){*outPtr = uPtr.release(); ++outPtr; }); + } + } + protected: /// Error description in case there was one. std::string m_ErrorText; From e51e07982d3ae6056f84a9881d6ab3a1d34f935e Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 15:05:42 +0100 Subject: [PATCH 47/67] Remove generic lambda usage. --- include/assimp/BaseImporter.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/assimp/BaseImporter.h b/include/assimp/BaseImporter.h index cc14f2f03..e6ff2e68d 100644 --- a/include/assimp/BaseImporter.h +++ b/include/assimp/BaseImporter.h @@ -406,7 +406,7 @@ public: // static utilities if (outLength) { out = new T*[outLength]; T** outPtr = out; - std::for_each(vec.begin(), vec.end(), [&outPtr](auto& uPtr){*outPtr = uPtr.release(); ++outPtr; }); + std::for_each(vec.begin(), vec.end(), [&outPtr](std::unique_ptr& uPtr){*outPtr = uPtr.release(); ++outPtr; }); } } From 04df5f8b1e585fbe74a0934b07308cb9784fa9c6 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Wed, 15 Jul 2020 15:47:25 +0100 Subject: [PATCH 48/67] Don't use make_unique --- code/AssetLib/glTF2/glTF2Importer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/glTF2/glTF2Importer.cpp b/code/AssetLib/glTF2/glTF2Importer.cpp index 18c95d42b..23d42ba97 100644 --- a/code/AssetLib/glTF2/glTF2Importer.cpp +++ b/code/AssetLib/glTF2/glTF2Importer.cpp @@ -361,8 +361,8 @@ void glTF2Importer::ImportMeshes(glTF2::Asset &r) { for (unsigned int p = 0; p < mesh.primitives.size(); ++p) { Mesh::Primitive &prim = mesh.primitives[p]; - meshes.emplace_back(std::make_unique()); - aiMesh *aim = meshes.back().get(); + aiMesh *aim = new aiMesh(); + meshes.push_back(std::unique_ptr(aim)); aim->mName = mesh.name.empty() ? mesh.id : mesh.name; From 84e68eaf24b3635b2d4be518f5cf0382340dff18 Mon Sep 17 00:00:00 2001 From: Kota Iguchi Date: Thu, 16 Jul 2020 15:26:02 +0900 Subject: [PATCH 49/67] fix invalid pointer for bone animation --- code/Common/Importer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Common/Importer.cpp b/code/Common/Importer.cpp index a46d39b48..77eb8ef8c 100644 --- a/code/Common/Importer.cpp +++ b/code/Common/Importer.cpp @@ -1174,7 +1174,7 @@ void Importer::GetMemoryRequirements(aiMemoryInfo& in) const { // add all bone anims for (unsigned int a = 0; a < pc->mNumChannels; ++a) { - const aiNodeAnim* pc2 = pc->mChannels[i]; + const aiNodeAnim* pc2 = pc->mChannels[a]; in.animations += sizeof(aiNodeAnim); in.animations += pc2->mNumPositionKeys * sizeof(aiVectorKey); in.animations += pc2->mNumScalingKeys * sizeof(aiVectorKey); From 719cc82a1f1270396a1d6465a7250ea13bc5a371 Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Fri, 17 Jul 2020 10:29:44 +0100 Subject: [PATCH 50/67] Apply clangformat --- code/AssetLib/AC/ACLoader.h | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/code/AssetLib/AC/ACLoader.h b/code/AssetLib/AC/ACLoader.h index e330ddf1b..69f6ae1b0 100644 --- a/code/AssetLib/AC/ACLoader.h +++ b/code/AssetLib/AC/ACLoader.h @@ -69,7 +69,10 @@ public: // Represents an AC3D material struct Material { Material() : - rgb(0.6f, 0.6f, 0.6f), spec(1.f, 1.f, 1.f), shin(0.f), trans(0.f) {} + rgb(0.6f, 0.6f, 0.6f), + spec(1.f, 1.f, 1.f), + shin(0.f), + trans(0.f) {} // base color of the material aiColor3D rgb; @@ -96,7 +99,8 @@ public: // Represents an AC3D surface struct Surface { Surface() : - mat(0), flags(0) {} + mat(0), + flags(0) {} unsigned int mat, flags; @@ -107,7 +111,19 @@ public: // Represents an AC3D object struct Object { Object() : - type(World), name(""), children(), texture(""), texRepeat(1.f, 1.f), texOffset(0.0f, 0.0f), rotation(), translation(), vertices(), surfaces(), numRefs(0), subDiv(0), crease() {} + type(World), + name(""), + children(), + texture(""), + texRepeat(1.f, 1.f), + texOffset(0.0f, 0.0f), + rotation(), + translation(), + vertices(), + surfaces(), + numRefs(0), + subDiv(0), + crease() {} // Type description enum Type { From 17b9403b7a6d5f38066a033e7cd0118af891107c Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Fri, 17 Jul 2020 11:23:50 +0100 Subject: [PATCH 51/67] ACLoader: Use enum for Surface flags --- code/AssetLib/AC/ACLoader.cpp | 33 +++++++++++++++++---------------- code/AssetLib/AC/ACLoader.h | 12 ++++++++++++ 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/code/AssetLib/AC/ACLoader.cpp b/code/AssetLib/AC/ACLoader.cpp index 5b63d315e..4291ce8d1 100644 --- a/code/AssetLib/AC/ACLoader.cpp +++ b/code/AssetLib/AC/ACLoader.cpp @@ -471,32 +471,33 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, ++node->mNumMeshes; } - switch ((*it).flags & 0xf) { + switch ((*it).GetType()) { // closed line - case 0x1: + case Surface::ClosedLine: needMat[idx].first += (unsigned int)(*it).entries.size(); needMat[idx].second += (unsigned int)(*it).entries.size() << 1u; break; // unclosed line - case 0x2: + case Surface::OpenLine: needMat[idx].first += (unsigned int)(*it).entries.size() - 1; needMat[idx].second += ((unsigned int)(*it).entries.size() - 1) << 1u; break; // triangle strip - case 0x4: + case Surface::TriangleStrip: needMat[idx].first += (unsigned int)(*it).entries.size() - 2; needMat[idx].second += ((unsigned int)(*it).entries.size() - 2) * 3; break; - // 0 == polygon, else unknown default: - if ((*it).flags & 0xf) { - ASSIMP_LOG_WARN("AC3D: The type flag of a surface is unknown"); - (*it).flags &= ~(0xf); - } + // Coerce unknowns to a polygon and warn + ASSIMP_LOG_WARN_F("AC3D: The type flag of a surface is unknown: ", (*it).flags); + (*it).flags &= ~(Surface::Mask); + // fallthrough + // polygon + case Surface::Polygon: // the number of faces increments by one, the number // of vertices by surface.numref. needMat[idx].first++; @@ -552,8 +553,8 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, const Surface &src = *it; // closed polygon - unsigned int type = (*it).flags & 0xf; - if (!type) { + uint8_t type = (*it).GetType(); + if (type == Surface::Polygon) { aiFace &face = *faces++; face.mNumIndices = (unsigned int)src.entries.size(); if (0 != face.mNumIndices) { @@ -576,7 +577,7 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, } } } - } else if (type == 0x4) { + } else if (type == Surface::TriangleStrip) { for (unsigned int i = 0; i < (unsigned int)src.entries.size() - 2; ++i) { const Surface::SurfaceEntry &entry1 = src.entries[i]; const Surface::SurfaceEntry &entry2 = src.entries[i + 1]; @@ -584,8 +585,8 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, // skip degenerate triangles if (object.vertices[entry1.first] == object.vertices[entry2.first] || - object.vertices[entry1.first] == object.vertices[entry3.first] || - object.vertices[entry2.first] == object.vertices[entry3.first]) { + object.vertices[entry1.first] == object.vertices[entry3.first] || + object.vertices[entry2.first] == object.vertices[entry3.first]) { mesh->mNumFaces--; mesh->mNumVertices -= 3; continue; @@ -640,7 +641,7 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, // either a closed or an unclosed line unsigned int tmp = (unsigned int)(*it).entries.size(); - if (0x2 == type) --tmp; + if (Surface::OpenLine == type) --tmp; for (unsigned int m = 0; m < tmp; ++m) { aiFace &face = *faces++; @@ -663,7 +664,7 @@ aiNode *AC3DImporter::ConvertObjectSection(Object &object, ++uv; } - if (0x1 == type && tmp - 1 == m) { + if (Surface::ClosedLine == type && tmp - 1 == m) { // if this is a closed line repeat its beginning now it2 = (*it).entries.begin(); } else diff --git a/code/AssetLib/AC/ACLoader.h b/code/AssetLib/AC/ACLoader.h index 69f6ae1b0..92a5114f1 100644 --- a/code/AssetLib/AC/ACLoader.h +++ b/code/AssetLib/AC/ACLoader.h @@ -106,6 +106,18 @@ public: typedef std::pair SurfaceEntry; std::vector entries; + + // Type is low nibble of flags + enum Type : uint8_t { + Polygon = 0x0, + ClosedLine = 0x1, + OpenLine = 0x2, + TriangleStrip = 0x4, // ACC extension (TORCS and Speed Dreams) + + Mask = 0xf, + }; + + inline constexpr uint8_t GetType() const { return (flags & Mask); } }; // Represents an AC3D object From ce133e5add2732511365845a8749674723efce10 Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Fri, 17 Jul 2020 11:58:17 +0100 Subject: [PATCH 52/67] Set CMake policy CMP0092 Disable cmake's automatic /W3 for MSVC --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b350f6e3..5c1a697ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #---------------------------------------------------------------------- SET(CMAKE_POLICY_DEFAULT_CMP0074 NEW) +cmake_policy(SET CMP0092 NEW) CMAKE_MINIMUM_REQUIRED( VERSION 3.0 ) From a4eceb7b3ff19a86236a56a92d05a0817fd03833 Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Fri, 17 Jul 2020 12:06:52 +0100 Subject: [PATCH 53/67] Set CMP0092 the other way --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 00819679c..43b9d9d1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,7 +35,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #---------------------------------------------------------------------- SET(CMAKE_POLICY_DEFAULT_CMP0074 NEW) -cmake_policy(SET CMP0092 NEW) +SET(CMAKE_POLICY_DEFAULT_CMP0092 NEW) CMAKE_MINIMUM_REQUIRED( VERSION 3.0 ) From 9cad10a99553c1eafd299f68649f15433659fbb4 Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Fri, 17 Jul 2020 14:58:51 +0100 Subject: [PATCH 54/67] Disable MSVC warnings on all MSVC Fixes the build on MSVC 2017 (and probably MSVC 2015) --- code/AssetLib/3DS/3DSHelper.h | 9 +- code/AssetLib/IFC/IFCReaderGen_2x3.h | 9 +- code/AssetLib/M3D/m3d.h | 1308 +++++++++---------- code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp | 4 +- code/AssetLib/Step/STEPFile.h | 8 +- code/Common/Exporter.cpp | 4 +- code/Common/Subdivision.cpp | 4 +- 7 files changed, 678 insertions(+), 668 deletions(-) diff --git a/code/AssetLib/3DS/3DSHelper.h b/code/AssetLib/3DS/3DSHelper.h index 3ccb1fd07..a2be07874 100644 --- a/code/AssetLib/3DS/3DSHelper.h +++ b/code/AssetLib/3DS/3DSHelper.h @@ -321,9 +321,10 @@ public: struct Face : public FaceWithSmoothingGroup { }; -#if _MSC_VER > 1920 +#ifdef _MSC_VER +#pragma warning(push) #pragma warning(disable : 4315) -#endif +#endif // _MSC_VER // --------------------------------------------------------------------------- /** Helper structure representing a texture */ @@ -412,6 +413,10 @@ struct Texture { #include +#ifdef _MSC_VER +#pragma warning(pop) +#endif // _MSC_VER + // --------------------------------------------------------------------------- /** Helper structure representing a 3ds material */ struct Material { diff --git a/code/AssetLib/IFC/IFCReaderGen_2x3.h b/code/AssetLib/IFC/IFCReaderGen_2x3.h index b3f71a7f1..f87f121b9 100644 --- a/code/AssetLib/IFC/IFCReaderGen_2x3.h +++ b/code/AssetLib/IFC/IFCReaderGen_2x3.h @@ -45,9 +45,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "AssetLib/Step/STEPFile.h" -#if _MSC_VER > 1920 +#ifdef _MSC_VER +# pragma warning(push) # pragma warning( disable : 4512 ) -#endif // _WIN32 +#endif // _MSC_VER namespace Assimp { namespace IFC { @@ -4372,4 +4373,8 @@ namespace STEP { } //! STEP } //! Assimp +#ifdef _MSC_VER +# pragma warning(pop) +#endif // _MSC_VER + #endif // INCLUDED_IFC_READER_GEN_H diff --git a/code/AssetLib/M3D/m3d.h b/code/AssetLib/M3D/m3d.h index 5ab3d16de..d8e13db4d 100644 --- a/code/AssetLib/M3D/m3d.h +++ b/code/AssetLib/M3D/m3d.h @@ -101,13 +101,13 @@ typedef uint16_t M3D_INDEX; #define _register #endif -#if _MSC_VER > 1920 +#ifdef _MSC_VER # pragma warning(push) # pragma warning(disable : 4100 4127 4189 4505 4244 4403 4701 4703) # if (_MSC_VER > 1800 ) # pragma warning(disable : 5573 5744) # endif -#endif // _WIN32 +#endif // _MSC_VER /*** File format structures ***/ @@ -821,7 +821,7 @@ static unsigned char *_m3dstbi__convert_format(unsigned char *data, int img_n, i break; STBI__CASE(4, 3) { dest[0] = src[0], dest[1] = src[1], dest[2] = src[2]; } break; - default: STBI_ASSERT(0); + default: STBI_ASSERT(0); } #undef STBI__CASE } @@ -881,7 +881,7 @@ static _m3dstbi__uint16 *_m3dstbi__convert_format16(_m3dstbi__uint16 *data, int break; STBI__CASE(4, 3) { dest[0] = src[0], dest[1] = src[1], dest[2] = src[2]; } break; - default: STBI_ASSERT(0); + default: STBI_ASSERT(0); } #undef STBI__CASE } @@ -1358,13 +1358,13 @@ static int _m3dstbi__create_png_image_raw(_m3dstbi__png *a, unsigned char *raw, for (k = 0; k < filter_bytes; ++k) { switch (filter) { - case STBI__F_none: cur[k] = raw[k]; break; - case STBI__F_sub: cur[k] = raw[k]; break; - case STBI__F_up: cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - case STBI__F_avg: cur[k] = STBI__BYTECAST(raw[k] + (prior[k] >> 1)); break; - case STBI__F_paeth: cur[k] = STBI__BYTECAST(raw[k] + _m3dstbi__paeth(0, prior[k], 0)); break; - case STBI__F_avg_first: cur[k] = raw[k]; break; - case STBI__F_paeth_first: cur[k] = raw[k]; break; + case STBI__F_none: cur[k] = raw[k]; break; + case STBI__F_sub: cur[k] = raw[k]; break; + case STBI__F_up: cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; + case STBI__F_avg: cur[k] = STBI__BYTECAST(raw[k] + (prior[k] >> 1)); break; + case STBI__F_paeth: cur[k] = STBI__BYTECAST(raw[k] + _m3dstbi__paeth(0, prior[k], 0)); break; + case STBI__F_avg_first: cur[k] = raw[k]; break; + case STBI__F_paeth_first: cur[k] = raw[k]; break; } } @@ -1394,21 +1394,21 @@ static int _m3dstbi__create_png_image_raw(_m3dstbi__png *a, unsigned char *raw, case f: \ for (k = 0; k < nk; ++k) switch (filter) { - case STBI__F_none: - memcpy(cur, raw, nk); - break; - STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k - filter_bytes]); } - break; - STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } - break; - STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k - filter_bytes]) >> 1)); } - break; - STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + _m3dstbi__paeth(cur[k - filter_bytes], prior[k], prior[k - filter_bytes])); } - break; - STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k - filter_bytes] >> 1)); } - break; - STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + _m3dstbi__paeth(cur[k - filter_bytes], 0, 0)); } - break; + case STBI__F_none: + memcpy(cur, raw, nk); + break; + STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k - filter_bytes]); } + break; + STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } + break; + STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k - filter_bytes]) >> 1)); } + break; + STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + _m3dstbi__paeth(cur[k - filter_bytes], prior[k], prior[k - filter_bytes])); } + break; + STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k - filter_bytes] >> 1)); } + break; + STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + _m3dstbi__paeth(cur[k - filter_bytes], 0, 0)); } + break; } #undef STBI__CASE raw += nk; @@ -1658,155 +1658,155 @@ static int _m3dstbi__parse_png_file(_m3dstbi__png *z, int scan, int req_comp) { for (;;) { _m3dstbi__pngchunk c = _m3dstbi__get_chunk_header(s); switch (c.type) { - case STBI__PNG_TYPE('C', 'g', 'B', 'I'): - _m3dstbi__skip(s, c.length); - break; - case STBI__PNG_TYPE('I', 'H', 'D', 'R'): { - int comp, filter; - if (!first) return _m3dstbi__err("multiple IHDR", "Corrupt PNG"); - first = 0; - if (c.length != 13) return _m3dstbi__err("bad IHDR len", "Corrupt PNG"); - s->img_x = _m3dstbi__get32be(s); - if (s->img_x > (1 << 24)) return _m3dstbi__err("too large", "Very large image (corrupt?)"); - s->img_y = _m3dstbi__get32be(s); - if (s->img_y > (1 << 24)) return _m3dstbi__err("too large", "Very large image (corrupt?)"); - z->depth = _m3dstbi__get8(s); - if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return _m3dstbi__err("1/2/4/8/16-bit only", "PNG not supported: 1/2/4/8/16-bit only"); - color = _m3dstbi__get8(s); - if (color > 6) return _m3dstbi__err("bad ctype", "Corrupt PNG"); - if (color == 3 && z->depth == 16) return _m3dstbi__err("bad ctype", "Corrupt PNG"); - if (color == 3) - pal_img_n = 3; - else if (color & 1) - return _m3dstbi__err("bad ctype", "Corrupt PNG"); - comp = _m3dstbi__get8(s); - if (comp) return _m3dstbi__err("bad comp method", "Corrupt PNG"); - filter = _m3dstbi__get8(s); - if (filter) return _m3dstbi__err("bad filter method", "Corrupt PNG"); - interlace = _m3dstbi__get8(s); - if (interlace > 1) return _m3dstbi__err("bad interlace method", "Corrupt PNG"); - if (!s->img_x || !s->img_y) return _m3dstbi__err("0-pixel image", "Corrupt PNG"); - if (!pal_img_n) { - s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); - if ((1 << 30) / s->img_x / s->img_n < s->img_y) return _m3dstbi__err("too large", "Image too large to decode"); - if (scan == STBI__SCAN_header) return 1; - } else { - s->img_n = 1; - if ((1 << 30) / s->img_x / 4 < s->img_y) return _m3dstbi__err("too large", "Corrupt PNG"); - } - break; + case STBI__PNG_TYPE('C', 'g', 'B', 'I'): + _m3dstbi__skip(s, c.length); + break; + case STBI__PNG_TYPE('I', 'H', 'D', 'R'): { + int comp, filter; + if (!first) return _m3dstbi__err("multiple IHDR", "Corrupt PNG"); + first = 0; + if (c.length != 13) return _m3dstbi__err("bad IHDR len", "Corrupt PNG"); + s->img_x = _m3dstbi__get32be(s); + if (s->img_x > (1 << 24)) return _m3dstbi__err("too large", "Very large image (corrupt?)"); + s->img_y = _m3dstbi__get32be(s); + if (s->img_y > (1 << 24)) return _m3dstbi__err("too large", "Very large image (corrupt?)"); + z->depth = _m3dstbi__get8(s); + if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return _m3dstbi__err("1/2/4/8/16-bit only", "PNG not supported: 1/2/4/8/16-bit only"); + color = _m3dstbi__get8(s); + if (color > 6) return _m3dstbi__err("bad ctype", "Corrupt PNG"); + if (color == 3 && z->depth == 16) return _m3dstbi__err("bad ctype", "Corrupt PNG"); + if (color == 3) + pal_img_n = 3; + else if (color & 1) + return _m3dstbi__err("bad ctype", "Corrupt PNG"); + comp = _m3dstbi__get8(s); + if (comp) return _m3dstbi__err("bad comp method", "Corrupt PNG"); + filter = _m3dstbi__get8(s); + if (filter) return _m3dstbi__err("bad filter method", "Corrupt PNG"); + interlace = _m3dstbi__get8(s); + if (interlace > 1) return _m3dstbi__err("bad interlace method", "Corrupt PNG"); + if (!s->img_x || !s->img_y) return _m3dstbi__err("0-pixel image", "Corrupt PNG"); + if (!pal_img_n) { + s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); + if ((1 << 30) / s->img_x / s->img_n < s->img_y) return _m3dstbi__err("too large", "Image too large to decode"); + if (scan == STBI__SCAN_header) return 1; + } else { + s->img_n = 1; + if ((1 << 30) / s->img_x / 4 < s->img_y) return _m3dstbi__err("too large", "Corrupt PNG"); } + break; + } - case STBI__PNG_TYPE('P', 'L', 'T', 'E'): { - if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); - if (c.length > 256 * 3) return _m3dstbi__err("invalid PLTE", "Corrupt PNG"); - pal_len = c.length / 3; - if (pal_len * 3 != c.length) return _m3dstbi__err("invalid PLTE", "Corrupt PNG"); - for (i = 0; i < pal_len; ++i) { - palette[i * 4 + 0] = _m3dstbi__get8(s); - palette[i * 4 + 1] = _m3dstbi__get8(s); - palette[i * 4 + 2] = _m3dstbi__get8(s); - palette[i * 4 + 3] = 255; - } - break; + case STBI__PNG_TYPE('P', 'L', 'T', 'E'): { + if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); + if (c.length > 256 * 3) return _m3dstbi__err("invalid PLTE", "Corrupt PNG"); + pal_len = c.length / 3; + if (pal_len * 3 != c.length) return _m3dstbi__err("invalid PLTE", "Corrupt PNG"); + for (i = 0; i < pal_len; ++i) { + palette[i * 4 + 0] = _m3dstbi__get8(s); + palette[i * 4 + 1] = _m3dstbi__get8(s); + palette[i * 4 + 2] = _m3dstbi__get8(s); + palette[i * 4 + 3] = 255; } + break; + } - case STBI__PNG_TYPE('t', 'R', 'N', 'S'): { - if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); - if (z->idata) return _m3dstbi__err("tRNS after IDAT", "Corrupt PNG"); - if (pal_img_n) { - if (scan == STBI__SCAN_header) { - s->img_n = 4; - return 1; - } - if (pal_len == 0) return _m3dstbi__err("tRNS before PLTE", "Corrupt PNG"); - if (c.length > pal_len) return _m3dstbi__err("bad tRNS len", "Corrupt PNG"); - pal_img_n = 4; - for (i = 0; i < c.length; ++i) - palette[i * 4 + 3] = _m3dstbi__get8(s); - } else { - if (!(s->img_n & 1)) return _m3dstbi__err("tRNS with alpha", "Corrupt PNG"); - if (c.length != (_m3dstbi__uint32)s->img_n * 2) return _m3dstbi__err("bad tRNS len", "Corrupt PNG"); - has_trans = 1; - if (z->depth == 16) { - for (k = 0; k < s->img_n; ++k) - tc16[k] = (_m3dstbi__uint16)_m3dstbi__get16be(s); - } else { - for (k = 0; k < s->img_n; ++k) - tc[k] = (unsigned char)(_m3dstbi__get16be(s) & 255) * _m3dstbi__depth_scale_table[z->depth]; - } - } - break; - } - - case STBI__PNG_TYPE('I', 'D', 'A', 'T'): { - if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); - if (pal_img_n && !pal_len) return _m3dstbi__err("no PLTE", "Corrupt PNG"); + case STBI__PNG_TYPE('t', 'R', 'N', 'S'): { + if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); + if (z->idata) return _m3dstbi__err("tRNS after IDAT", "Corrupt PNG"); + if (pal_img_n) { if (scan == STBI__SCAN_header) { - s->img_n = pal_img_n; + s->img_n = 4; return 1; } - if ((int)(ioff + c.length) < (int)ioff) return 0; - if (ioff + c.length > idata_limit) { - _m3dstbi__uint32 idata_limit_old = idata_limit; - unsigned char *p; - if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; - while (ioff + c.length > idata_limit) - idata_limit *= 2; - STBI_NOTUSED(idata_limit_old); - p = (unsigned char *)STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); - if (p == NULL) return _m3dstbi__err("outofmem", "Out of memory"); - z->idata = p; + if (pal_len == 0) return _m3dstbi__err("tRNS before PLTE", "Corrupt PNG"); + if (c.length > pal_len) return _m3dstbi__err("bad tRNS len", "Corrupt PNG"); + pal_img_n = 4; + for (i = 0; i < c.length; ++i) + palette[i * 4 + 3] = _m3dstbi__get8(s); + } else { + if (!(s->img_n & 1)) return _m3dstbi__err("tRNS with alpha", "Corrupt PNG"); + if (c.length != (_m3dstbi__uint32)s->img_n * 2) return _m3dstbi__err("bad tRNS len", "Corrupt PNG"); + has_trans = 1; + if (z->depth == 16) { + for (k = 0; k < s->img_n; ++k) + tc16[k] = (_m3dstbi__uint16)_m3dstbi__get16be(s); + } else { + for (k = 0; k < s->img_n; ++k) + tc[k] = (unsigned char)(_m3dstbi__get16be(s) & 255) * _m3dstbi__depth_scale_table[z->depth]; } - if (!_m3dstbi__getn(s, z->idata + ioff, c.length)) return _m3dstbi__err("outofdata", "Corrupt PNG"); - ioff += c.length; - break; } + break; + } - case STBI__PNG_TYPE('I', 'E', 'N', 'D'): { - _m3dstbi__uint32 raw_len, bpl; - if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); - if (scan != STBI__SCAN_load) return 1; - if (z->idata == NULL) return _m3dstbi__err("no IDAT", "Corrupt PNG"); - bpl = (s->img_x * z->depth + 7) / 8; - raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; - z->expanded = (unsigned char *)_m3dstbi_zlib_decode_malloc_guesssize_headerflag((char *)z->idata, ioff, raw_len, (int *)&raw_len, 1); - if (z->expanded == NULL) return 0; - STBI_FREE(z->idata); - z->idata = NULL; - if ((req_comp == s->img_n + 1 && req_comp != 3 && !pal_img_n) || has_trans) - s->img_out_n = s->img_n + 1; - else - s->img_out_n = s->img_n; - if (!_m3dstbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; - if (has_trans) { - if (z->depth == 16) { - if (!_m3dstbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; - } else { - if (!_m3dstbi__compute_transparency(z, tc, s->img_out_n)) return 0; - } - } - if (pal_img_n) { - s->img_n = pal_img_n; - s->img_out_n = pal_img_n; - if (req_comp >= 3) s->img_out_n = req_comp; - if (!_m3dstbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) - return 0; - } else if (has_trans) { - ++s->img_n; - } - STBI_FREE(z->expanded); - z->expanded = NULL; + case STBI__PNG_TYPE('I', 'D', 'A', 'T'): { + if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); + if (pal_img_n && !pal_len) return _m3dstbi__err("no PLTE", "Corrupt PNG"); + if (scan == STBI__SCAN_header) { + s->img_n = pal_img_n; return 1; } + if ((int)(ioff + c.length) < (int)ioff) return 0; + if (ioff + c.length > idata_limit) { + _m3dstbi__uint32 idata_limit_old = idata_limit; + unsigned char *p; + if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; + while (ioff + c.length > idata_limit) + idata_limit *= 2; + STBI_NOTUSED(idata_limit_old); + p = (unsigned char *)STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); + if (p == NULL) return _m3dstbi__err("outofmem", "Out of memory"); + z->idata = p; + } + if (!_m3dstbi__getn(s, z->idata + ioff, c.length)) return _m3dstbi__err("outofdata", "Corrupt PNG"); + ioff += c.length; + break; + } - default: - if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); - if ((c.type & (1 << 29)) == 0) { - return _m3dstbi__err("invalid_chunk", "PNG not supported: unknown PNG chunk type"); + case STBI__PNG_TYPE('I', 'E', 'N', 'D'): { + _m3dstbi__uint32 raw_len, bpl; + if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); + if (scan != STBI__SCAN_load) return 1; + if (z->idata == NULL) return _m3dstbi__err("no IDAT", "Corrupt PNG"); + bpl = (s->img_x * z->depth + 7) / 8; + raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; + z->expanded = (unsigned char *)_m3dstbi_zlib_decode_malloc_guesssize_headerflag((char *)z->idata, ioff, raw_len, (int *)&raw_len, 1); + if (z->expanded == NULL) return 0; + STBI_FREE(z->idata); + z->idata = NULL; + if ((req_comp == s->img_n + 1 && req_comp != 3 && !pal_img_n) || has_trans) + s->img_out_n = s->img_n + 1; + else + s->img_out_n = s->img_n; + if (!_m3dstbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; + if (has_trans) { + if (z->depth == 16) { + if (!_m3dstbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; + } else { + if (!_m3dstbi__compute_transparency(z, tc, s->img_out_n)) return 0; } - _m3dstbi__skip(s, c.length); - break; + } + if (pal_img_n) { + s->img_n = pal_img_n; + s->img_out_n = pal_img_n; + if (req_comp >= 3) s->img_out_n = req_comp; + if (!_m3dstbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) + return 0; + } else if (has_trans) { + ++s->img_n; + } + STBI_FREE(z->expanded); + z->expanded = NULL; + return 1; + } + + default: + if (first) return _m3dstbi__err("first not IHDR", "Corrupt PNG"); + if ((c.type & (1 << 29)) == 0) { + return _m3dstbi__err("invalid_chunk", "PNG not supported: unknown PNG chunk type"); + } + _m3dstbi__skip(s, c.length); + break; } _m3dstbi__get32be(s); } @@ -2283,18 +2283,18 @@ void _m3d_getpr(m3d_t *model, _unused m3dread_t readfilecb, _unused m3dfree_t fr } while (0) _inline static unsigned char *_m3d_getidx(unsigned char *data, char type, M3D_INDEX *idx) { switch (type) { - case 1: - *idx = data[0] > 253 ? (int8_t)data[0] : data[0]; - data++; - break; - case 2: - *idx = *((uint16_t *)data) > 65533 ? *((int16_t *)data) : *((uint16_t *)data); - data += 2; - break; - case 4: - *idx = *((int32_t *)data); - data += 4; - break; + case 1: + *idx = data[0] > 253 ? (int8_t)data[0] : data[0]; + data++; + break; + case 2: + *idx = *((uint16_t *)data) > 65533 ? *((int16_t *)data) : *((uint16_t *)data); + data += 2; + break; + case 4: + *idx = *((int32_t *)data); + data += 4; + break; } return data; } @@ -2682,27 +2682,27 @@ m3d_t *m3d_load(unsigned char *data, m3dread_t readfilecb, m3dfree_t freecb, m3d if (!m->prop) goto memerr; m->prop[j].type = n + (k == m3dpf_map && n < 128 ? 128 : 0); switch (k) { - case m3dpf_color: ptr = _m3d_gethex(ptr, &m->prop[j].value.color); break; - case m3dpf_uint8: - case m3dpf_uint16: - case m3dpf_uint32: ptr = _m3d_getint(ptr, &m->prop[j].value.num); break; - case m3dpf_float: ptr = _m3d_getfloat(ptr, &m->prop[j].value.fnum); break; - case m3dpf_map: - pe = _m3d_safestr(ptr, 0); - if (!pe || !*pe) goto asciiend; - m->prop[j].value.textureid = _m3d_gettx(model, readfilecb, freecb, pe); - if (model->errcode == M3D_ERR_ALLOC) { - M3D_FREE(pe); - goto memerr; - } - /* this error code only returned if readfilecb was specified */ - if (m->prop[j].value.textureid == M3D_UNDEF) { - M3D_LOG("Texture not found"); - M3D_LOG(pe); - m->numprop--; - } + case m3dpf_color: ptr = _m3d_gethex(ptr, &m->prop[j].value.color); break; + case m3dpf_uint8: + case m3dpf_uint16: + case m3dpf_uint32: ptr = _m3d_getint(ptr, &m->prop[j].value.num); break; + case m3dpf_float: ptr = _m3d_getfloat(ptr, &m->prop[j].value.fnum); break; + case m3dpf_map: + pe = _m3d_safestr(ptr, 0); + if (!pe || !*pe) goto asciiend; + m->prop[j].value.textureid = _m3d_gettx(model, readfilecb, freecb, pe); + if (model->errcode == M3D_ERR_ALLOC) { M3D_FREE(pe); - break; + goto memerr; + } + /* this error code only returned if readfilecb was specified */ + if (m->prop[j].value.textureid == M3D_UNDEF) { + M3D_LOG("Texture not found"); + M3D_LOG(pe); + m->numprop--; + } + M3D_FREE(pe); + break; } } else { M3D_LOG("Unknown material property in"); @@ -2835,48 +2835,48 @@ m3d_t *m3d_load(unsigned char *data, m3dread_t readfilecb, m3dfree_t freecb, m3d } if (*ptr == ']' || *ptr == '\r' || *ptr == '\n') break; switch (cd->a[((k - n) % (cd->p - n)) + n]) { - case m3dcp_mi_t: - mi = M3D_UNDEF; - if (*ptr != '\r' && *ptr != '\n') { - pe = _m3d_safestr(ptr, 0); - if (!pe || !*pe) goto asciiend; - for (n = 0; n < model->nummaterial; n++) - if (!strcmp(pe, model->material[n].name)) { - mi = (M3D_INDEX)n; - break; - } - if (mi == M3D_UNDEF && !(model->flags & M3D_FLG_MTLLIB)) { - mi = model->nummaterial++; - model->material = (m3dm_t *)M3D_REALLOC(model->material, - model->nummaterial * sizeof(m3dm_t)); - if (!model->material) goto memerr; - model->material[mi].name = pe; - model->material[mi].numprop = 1; - model->material[mi].prop = NULL; - } else - M3D_FREE(pe); - } - h->cmd[j].arg[k] = mi; - break; - case m3dcp_vc_t: - _m3d_getfloat(ptr, &w); - h->cmd[j].arg[k] = *((uint32_t *)&w); - break; - case m3dcp_va_t: - ptr = _m3d_getint(ptr, &h->cmd[j].arg[k]); - n = k + 1; - l += (h->cmd[j].arg[k] - 1) * (cd->p - k - 1); - h->cmd[j].arg = (uint32_t *)M3D_REALLOC(h->cmd[j].arg, l * sizeof(uint32_t)); - if (!h->cmd[j].arg) goto memerr; - memset(&h->cmd[j].arg[k + 1], 0, (l - k - 1) * sizeof(uint32_t)); - break; - case m3dcp_qi_t: - ptr = _m3d_getint(ptr, &h->cmd[j].arg[k]); - model->vertex[h->cmd[i].arg[k]].skinid = M3D_INDEXMAX; - break; - default: - ptr = _m3d_getint(ptr, &h->cmd[j].arg[k]); - break; + case m3dcp_mi_t: + mi = M3D_UNDEF; + if (*ptr != '\r' && *ptr != '\n') { + pe = _m3d_safestr(ptr, 0); + if (!pe || !*pe) goto asciiend; + for (n = 0; n < model->nummaterial; n++) + if (!strcmp(pe, model->material[n].name)) { + mi = (M3D_INDEX)n; + break; + } + if (mi == M3D_UNDEF && !(model->flags & M3D_FLG_MTLLIB)) { + mi = model->nummaterial++; + model->material = (m3dm_t *)M3D_REALLOC(model->material, + model->nummaterial * sizeof(m3dm_t)); + if (!model->material) goto memerr; + model->material[mi].name = pe; + model->material[mi].numprop = 1; + model->material[mi].prop = NULL; + } else + M3D_FREE(pe); + } + h->cmd[j].arg[k] = mi; + break; + case m3dcp_vc_t: + _m3d_getfloat(ptr, &w); + h->cmd[j].arg[k] = *((uint32_t *)&w); + break; + case m3dcp_va_t: + ptr = _m3d_getint(ptr, &h->cmd[j].arg[k]); + n = k + 1; + l += (h->cmd[j].arg[k] - 1) * (cd->p - k - 1); + h->cmd[j].arg = (uint32_t *)M3D_REALLOC(h->cmd[j].arg, l * sizeof(uint32_t)); + if (!h->cmd[j].arg) goto memerr; + memset(&h->cmd[j].arg[k + 1], 0, (l - k - 1) * sizeof(uint32_t)); + break; + case m3dcp_qi_t: + ptr = _m3d_getint(ptr, &h->cmd[j].arg[k]); + model->vertex[h->cmd[i].arg[k]].skinid = M3D_INDEXMAX; + break; + default: + ptr = _m3d_getint(ptr, &h->cmd[j].arg[k]); + break; } } } else { @@ -3207,22 +3207,22 @@ m3d_t *m3d_load(unsigned char *data, m3dread_t readfilecb, m3dfree_t freecb, m3d if (!model->tmap) goto memerr; for (i = 0, data += sizeof(m3dchunk_t); data < chunk; i++) { switch (model->vc_s) { - case 1: - model->tmap[i].u = (M3D_FLOAT)(data[0]) / (M3D_FLOAT)255.0; - model->tmap[i].v = (M3D_FLOAT)(data[1]) / (M3D_FLOAT)255.0; - break; - case 2: - model->tmap[i].u = (M3D_FLOAT)(*((int16_t *)(data + 0))) / (M3D_FLOAT)65535.0; - model->tmap[i].v = (M3D_FLOAT)(*((int16_t *)(data + 2))) / (M3D_FLOAT)65535.0; - break; - case 4: - model->tmap[i].u = (M3D_FLOAT)(*((float *)(data + 0))); - model->tmap[i].v = (M3D_FLOAT)(*((float *)(data + 4))); - break; - case 8: - model->tmap[i].u = (M3D_FLOAT)(*((double *)(data + 0))); - model->tmap[i].v = (M3D_FLOAT)(*((double *)(data + 8))); - break; + case 1: + model->tmap[i].u = (M3D_FLOAT)(data[0]) / (M3D_FLOAT)255.0; + model->tmap[i].v = (M3D_FLOAT)(data[1]) / (M3D_FLOAT)255.0; + break; + case 2: + model->tmap[i].u = (M3D_FLOAT)(*((int16_t *)(data + 0))) / (M3D_FLOAT)65535.0; + model->tmap[i].v = (M3D_FLOAT)(*((int16_t *)(data + 2))) / (M3D_FLOAT)65535.0; + break; + case 4: + model->tmap[i].u = (M3D_FLOAT)(*((float *)(data + 0))); + model->tmap[i].v = (M3D_FLOAT)(*((float *)(data + 4))); + break; + case 8: + model->tmap[i].u = (M3D_FLOAT)(*((double *)(data + 0))); + model->tmap[i].v = (M3D_FLOAT)(*((double *)(data + 8))); + break; } data += reclen; } @@ -3243,49 +3243,49 @@ m3d_t *m3d_load(unsigned char *data, m3dread_t readfilecb, m3dfree_t freecb, m3d memset(model->vertex, 0, model->numvertex * sizeof(m3dv_t)); for (i = 0, data += sizeof(m3dchunk_t); data < chunk && i < model->numvertex; i++) { switch (model->vc_s) { - case 1: - model->vertex[i].x = (M3D_FLOAT)((int8_t)data[0]) / (M3D_FLOAT)127.0; - model->vertex[i].y = (M3D_FLOAT)((int8_t)data[1]) / (M3D_FLOAT)127.0; - model->vertex[i].z = (M3D_FLOAT)((int8_t)data[2]) / (M3D_FLOAT)127.0; - model->vertex[i].w = (M3D_FLOAT)((int8_t)data[3]) / (M3D_FLOAT)127.0; - data += 4; - break; - case 2: - model->vertex[i].x = (M3D_FLOAT)(*((int16_t *)(data + 0))) / (M3D_FLOAT)32767.0; - model->vertex[i].y = (M3D_FLOAT)(*((int16_t *)(data + 2))) / (M3D_FLOAT)32767.0; - model->vertex[i].z = (M3D_FLOAT)(*((int16_t *)(data + 4))) / (M3D_FLOAT)32767.0; - model->vertex[i].w = (M3D_FLOAT)(*((int16_t *)(data + 6))) / (M3D_FLOAT)32767.0; - data += 8; - break; - case 4: - model->vertex[i].x = (M3D_FLOAT)(*((float *)(data + 0))); - model->vertex[i].y = (M3D_FLOAT)(*((float *)(data + 4))); - model->vertex[i].z = (M3D_FLOAT)(*((float *)(data + 8))); - model->vertex[i].w = (M3D_FLOAT)(*((float *)(data + 12))); - data += 16; - break; - case 8: - model->vertex[i].x = (M3D_FLOAT)(*((double *)(data + 0))); - model->vertex[i].y = (M3D_FLOAT)(*((double *)(data + 8))); - model->vertex[i].z = (M3D_FLOAT)(*((double *)(data + 16))); - model->vertex[i].w = (M3D_FLOAT)(*((double *)(data + 24))); - data += 32; - break; + case 1: + model->vertex[i].x = (M3D_FLOAT)((int8_t)data[0]) / (M3D_FLOAT)127.0; + model->vertex[i].y = (M3D_FLOAT)((int8_t)data[1]) / (M3D_FLOAT)127.0; + model->vertex[i].z = (M3D_FLOAT)((int8_t)data[2]) / (M3D_FLOAT)127.0; + model->vertex[i].w = (M3D_FLOAT)((int8_t)data[3]) / (M3D_FLOAT)127.0; + data += 4; + break; + case 2: + model->vertex[i].x = (M3D_FLOAT)(*((int16_t *)(data + 0))) / (M3D_FLOAT)32767.0; + model->vertex[i].y = (M3D_FLOAT)(*((int16_t *)(data + 2))) / (M3D_FLOAT)32767.0; + model->vertex[i].z = (M3D_FLOAT)(*((int16_t *)(data + 4))) / (M3D_FLOAT)32767.0; + model->vertex[i].w = (M3D_FLOAT)(*((int16_t *)(data + 6))) / (M3D_FLOAT)32767.0; + data += 8; + break; + case 4: + model->vertex[i].x = (M3D_FLOAT)(*((float *)(data + 0))); + model->vertex[i].y = (M3D_FLOAT)(*((float *)(data + 4))); + model->vertex[i].z = (M3D_FLOAT)(*((float *)(data + 8))); + model->vertex[i].w = (M3D_FLOAT)(*((float *)(data + 12))); + data += 16; + break; + case 8: + model->vertex[i].x = (M3D_FLOAT)(*((double *)(data + 0))); + model->vertex[i].y = (M3D_FLOAT)(*((double *)(data + 8))); + model->vertex[i].z = (M3D_FLOAT)(*((double *)(data + 16))); + model->vertex[i].w = (M3D_FLOAT)(*((double *)(data + 24))); + data += 32; + break; } switch (model->ci_s) { - case 1: - model->vertex[i].color = model->cmap ? model->cmap[data[0]] : 0; - data++; - break; - case 2: - model->vertex[i].color = model->cmap ? model->cmap[*((uint16_t *)data)] : 0; - data += 2; - break; - case 4: - model->vertex[i].color = *((uint32_t *)data); - data += 4; - break; - /* case 8: break; */ + case 1: + model->vertex[i].color = model->cmap ? model->cmap[data[0]] : 0; + data++; + break; + case 2: + model->vertex[i].color = model->cmap ? model->cmap[*((uint16_t *)data)] : 0; + data += 2; + break; + case 4: + model->vertex[i].color = *((uint32_t *)data); + data += 4; + break; + /* case 8: break; */ } model->vertex[i].skinid = M3D_UNDEF; data = _m3d_getidx(data, model->sk_s, &model->vertex[i].skinid); @@ -3414,55 +3414,55 @@ m3d_t *m3d_load(unsigned char *data, m3dread_t readfilecb, m3dfree_t freecb, m3d } } switch (k) { - case m3dpf_color: - switch (model->ci_s) { - case 1: - m->prop[i].value.color = model->cmap ? model->cmap[data[0]] : 0; - data++; - break; - case 2: - m->prop[i].value.color = model->cmap ? model->cmap[*((uint16_t *)data)] : 0; - data += 2; - break; - case 4: - m->prop[i].value.color = *((uint32_t *)data); - data += 4; - break; - } + case m3dpf_color: + switch (model->ci_s) { + case 1: + m->prop[i].value.color = model->cmap ? model->cmap[data[0]] : 0; + data++; break; - - case m3dpf_uint8: m->prop[i].value.num = *data++; break; - case m3dpf_uint16: - m->prop[i].value.num = *((uint16_t *)data); + case 2: + m->prop[i].value.color = model->cmap ? model->cmap[*((uint16_t *)data)] : 0; data += 2; break; - case m3dpf_uint32: - m->prop[i].value.num = *((uint32_t *)data); - data += 4; - break; - case m3dpf_float: - m->prop[i].value.fnum = *((float *)data); + case 4: + m->prop[i].value.color = *((uint32_t *)data); data += 4; break; + } + break; - case m3dpf_map: - M3D_GETSTR(name); - m->prop[i].value.textureid = _m3d_gettx(model, readfilecb, freecb, name); - if (model->errcode == M3D_ERR_ALLOC) goto memerr; - /* this error code only returned if readfilecb was specified */ - if (m->prop[i].value.textureid == M3D_UNDEF) { - M3D_LOG("Texture not found"); - M3D_LOG(m->name); - m->numprop--; - } - break; + case m3dpf_uint8: m->prop[i].value.num = *data++; break; + case m3dpf_uint16: + m->prop[i].value.num = *((uint16_t *)data); + data += 2; + break; + case m3dpf_uint32: + m->prop[i].value.num = *((uint32_t *)data); + data += 4; + break; + case m3dpf_float: + m->prop[i].value.fnum = *((float *)data); + data += 4; + break; - default: - M3D_LOG("Unknown material property in"); + case m3dpf_map: + M3D_GETSTR(name); + m->prop[i].value.textureid = _m3d_gettx(model, readfilecb, freecb, name); + if (model->errcode == M3D_ERR_ALLOC) goto memerr; + /* this error code only returned if readfilecb was specified */ + if (m->prop[i].value.textureid == M3D_UNDEF) { + M3D_LOG("Texture not found"); M3D_LOG(m->name); - model->errcode = M3D_ERR_UNKPROP; - data = chunk; - break; + m->numprop--; + } + break; + + default: + M3D_LOG("Unknown material property in"); + M3D_LOG(m->name); + model->errcode = M3D_ERR_UNKPROP; + data = chunk; + break; } } m->prop = (m3dp_t *)M3D_REALLOC(m->prop, m->numprop * sizeof(m3dp_t)); @@ -3570,45 +3570,45 @@ m3d_t *m3d_load(unsigned char *data, m3dread_t readfilecb, m3dfree_t freecb, m3d memset(h->cmd[i].arg, 0, cd->p * sizeof(uint32_t)); for (k = n = 0, l = cd->p; k < l; k++) switch (cd->a[((k - n) % (cd->p - n)) + n]) { - case m3dcp_mi_t: - h->cmd[i].arg[k] = M3D_NOTDEFINED; - M3D_GETSTR(name); - if (name) { - for (n = 0; n < model->nummaterial; n++) - if (!strcmp(name, model->material[n].name)) { - h->cmd[i].arg[k] = n; - break; - } - if (h->cmd[i].arg[k] == M3D_NOTDEFINED) model->errcode = M3D_ERR_MTRL; - } - break; - case m3dcp_vc_t: - f = 0.0f; - switch (model->vc_s) { - case 1: f = (float)((int8_t)data[0]) / 127; break; - case 2: f = (float)(*((int16_t *)(data + 0))) / 32767; break; - case 4: f = (float)(*((float *)(data + 0))); break; - case 8: f = (float)(*((double *)(data + 0))); break; - } - h->cmd[i].arg[k] = *((uint32_t *)&f); - data += model->vc_s; - break; - case m3dcp_hi_t: data = _m3d_getidx(data, model->hi_s, &h->cmd[i].arg[k]); break; - case m3dcp_fi_t: data = _m3d_getidx(data, model->fi_s, &h->cmd[i].arg[k]); break; - case m3dcp_ti_t: data = _m3d_getidx(data, model->ti_s, &h->cmd[i].arg[k]); break; - case m3dcp_qi_t: - case m3dcp_vi_t: data = _m3d_getidx(data, model->vi_s, &h->cmd[i].arg[k]); break; - case m3dcp_i1_t: data = _m3d_getidx(data, 1, &h->cmd[i].arg[k]); break; - case m3dcp_i2_t: data = _m3d_getidx(data, 2, &h->cmd[i].arg[k]); break; - case m3dcp_i4_t: data = _m3d_getidx(data, 4, &h->cmd[i].arg[k]); break; - case m3dcp_va_t: - data = _m3d_getidx(data, 4, &h->cmd[i].arg[k]); - n = k + 1; - l += (h->cmd[i].arg[k] - 1) * (cd->p - k - 1); - h->cmd[i].arg = (uint32_t *)M3D_REALLOC(h->cmd[i].arg, l * sizeof(uint32_t)); - if (!h->cmd[i].arg) goto memerr; - memset(&h->cmd[i].arg[k + 1], 0, (l - k - 1) * sizeof(uint32_t)); - break; + case m3dcp_mi_t: + h->cmd[i].arg[k] = M3D_NOTDEFINED; + M3D_GETSTR(name); + if (name) { + for (n = 0; n < model->nummaterial; n++) + if (!strcmp(name, model->material[n].name)) { + h->cmd[i].arg[k] = n; + break; + } + if (h->cmd[i].arg[k] == M3D_NOTDEFINED) model->errcode = M3D_ERR_MTRL; + } + break; + case m3dcp_vc_t: + f = 0.0f; + switch (model->vc_s) { + case 1: f = (float)((int8_t)data[0]) / 127; break; + case 2: f = (float)(*((int16_t *)(data + 0))) / 32767; break; + case 4: f = (float)(*((float *)(data + 0))); break; + case 8: f = (float)(*((double *)(data + 0))); break; + } + h->cmd[i].arg[k] = *((uint32_t *)&f); + data += model->vc_s; + break; + case m3dcp_hi_t: data = _m3d_getidx(data, model->hi_s, &h->cmd[i].arg[k]); break; + case m3dcp_fi_t: data = _m3d_getidx(data, model->fi_s, &h->cmd[i].arg[k]); break; + case m3dcp_ti_t: data = _m3d_getidx(data, model->ti_s, &h->cmd[i].arg[k]); break; + case m3dcp_qi_t: + case m3dcp_vi_t: data = _m3d_getidx(data, model->vi_s, &h->cmd[i].arg[k]); break; + case m3dcp_i1_t: data = _m3d_getidx(data, 1, &h->cmd[i].arg[k]); break; + case m3dcp_i2_t: data = _m3d_getidx(data, 2, &h->cmd[i].arg[k]); break; + case m3dcp_i4_t: data = _m3d_getidx(data, 4, &h->cmd[i].arg[k]); break; + case m3dcp_va_t: + data = _m3d_getidx(data, 4, &h->cmd[i].arg[k]); + n = k + 1; + l += (h->cmd[i].arg[k] - 1) * (cd->p - k - 1); + h->cmd[i].arg = (uint32_t *)M3D_REALLOC(h->cmd[i].arg, l * sizeof(uint32_t)); + if (!h->cmd[i].arg) goto memerr; + memset(&h->cmd[i].arg[k + 1], 0, (l - k - 1) * sizeof(uint32_t)); + break; } } } else @@ -3627,19 +3627,19 @@ m3d_t *m3d_load(unsigned char *data, m3dread_t readfilecb, m3dfree_t freecb, m3d if (model->ci_s && model->ci_s < 4 && !model->cmap) model->errcode = M3D_ERR_CMAP; k = 0; switch (model->ci_s) { - case 1: - k = model->cmap ? model->cmap[data[0]] : 0; - data++; - break; - case 2: - k = model->cmap ? model->cmap[*((uint16_t *)data)] : 0; - data += 2; - break; - case 4: - k = *((uint32_t *)data); - data += 4; - break; - /* case 8: break; */ + case 1: + k = model->cmap ? model->cmap[data[0]] : 0; + data++; + break; + case 2: + k = model->cmap ? model->cmap[*((uint16_t *)data)] : 0; + data += 2; + break; + case 4: + k = *((uint32_t *)data); + data += 4; + break; + /* case 8: break; */ } reclen = model->vi_s + model->si_s; i = model->numlabel; @@ -4267,16 +4267,16 @@ static uint32_t _m3d_cmapidx(uint32_t *cmap, uint32_t numcmap, uint32_t color) { /* add index to output */ static unsigned char *_m3d_addidx(unsigned char *out, char type, uint32_t idx) { switch (type) { - case 1: *out++ = (uint8_t)(idx); break; - case 2: - *((uint16_t *)out) = (uint16_t)(idx); - out += 2; - break; - case 4: - *((uint32_t *)out) = (uint32_t)(idx); - out += 4; - break; - /* case 0: case 8: break; */ + case 1: *out++ = (uint8_t)(idx); break; + case 2: + *((uint16_t *)out) = (uint16_t)(idx); + out += 2; + break; + case 4: + *((uint32_t *)out) = (uint32_t)(idx); + out += 4; + break; + /* case 0: case 8: break; */ } return out; } @@ -4288,26 +4288,26 @@ static void _m3d_round(int quality, m3dv_t *src, m3dv_t *dst) { if (src != dst) memcpy(dst, src, sizeof(m3dv_t)); /* round according to quality */ switch (quality) { - case M3D_EXP_INT8: - t = (int)(src->x * 127 + (src->x >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); - dst->x = (M3D_FLOAT)t / (M3D_FLOAT)127.0; - t = (int)(src->y * 127 + (src->y >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); - dst->y = (M3D_FLOAT)t / (M3D_FLOAT)127.0; - t = (int)(src->z * 127 + (src->z >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); - dst->z = (M3D_FLOAT)t / (M3D_FLOAT)127.0; - t = (int)(src->w * 127 + (src->w >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); - dst->w = (M3D_FLOAT)t / (M3D_FLOAT)127.0; - break; - case M3D_EXP_INT16: - t = (int)(src->x * 32767 + (src->x >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); - dst->x = (M3D_FLOAT)t / (M3D_FLOAT)32767.0; - t = (int)(src->y * 32767 + (src->y >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); - dst->y = (M3D_FLOAT)t / (M3D_FLOAT)32767.0; - t = (int)(src->z * 32767 + (src->z >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); - dst->z = (M3D_FLOAT)t / (M3D_FLOAT)32767.0; - t = (int)(src->w * 32767 + (src->w >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); - dst->w = (M3D_FLOAT)t / (M3D_FLOAT)32767.0; - break; + case M3D_EXP_INT8: + t = (int)(src->x * 127 + (src->x >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); + dst->x = (M3D_FLOAT)t / (M3D_FLOAT)127.0; + t = (int)(src->y * 127 + (src->y >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); + dst->y = (M3D_FLOAT)t / (M3D_FLOAT)127.0; + t = (int)(src->z * 127 + (src->z >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); + dst->z = (M3D_FLOAT)t / (M3D_FLOAT)127.0; + t = (int)(src->w * 127 + (src->w >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); + dst->w = (M3D_FLOAT)t / (M3D_FLOAT)127.0; + break; + case M3D_EXP_INT16: + t = (int)(src->x * 32767 + (src->x >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); + dst->x = (M3D_FLOAT)t / (M3D_FLOAT)32767.0; + t = (int)(src->y * 32767 + (src->y >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); + dst->y = (M3D_FLOAT)t / (M3D_FLOAT)32767.0; + t = (int)(src->z * 32767 + (src->z >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); + dst->z = (M3D_FLOAT)t / (M3D_FLOAT)32767.0; + t = (int)(src->w * 32767 + (src->w >= 0 ? (M3D_FLOAT)0.5 : (M3D_FLOAT)-0.5)); + dst->w = (M3D_FLOAT)t / (M3D_FLOAT)32767.0; + break; } if (dst->x == (M3D_FLOAT)-0.0) dst->x = (M3D_FLOAT)0.0; if (dst->y == (M3D_FLOAT)-0.0) dst->y = (M3D_FLOAT)0.0; @@ -4484,23 +4484,23 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size cd = &m3d_commandtypes[cmd->type]; for (k = n = 0, l = cd->p; k < l; k++) switch (cd->a[((k - n) % (cd->p - n)) + n]) { - case m3dcp_mi_t: - if (!(flags & M3D_EXP_NOMATERIAL) && cmd->arg[k] < model->nummaterial) - mtrlidx[cmd->arg[k]] = 0; - break; - case m3dcp_ti_t: - if (!(flags & M3D_EXP_NOTXTCRD) && cmd->arg[k] < model->numtmap) - tmapidx[cmd->arg[k]] = 0; - break; - case m3dcp_qi_t: - case m3dcp_vi_t: - if (cmd->arg[k] < model->numvertex) - vrtxidx[cmd->arg[k]] = 0; - break; - case m3dcp_va_t: - n = k + 1; - l += (cmd->arg[k] - 1) * (cd->p - k - 1); - break; + case m3dcp_mi_t: + if (!(flags & M3D_EXP_NOMATERIAL) && cmd->arg[k] < model->nummaterial) + mtrlidx[cmd->arg[k]] = 0; + break; + case m3dcp_ti_t: + if (!(flags & M3D_EXP_NOTXTCRD) && cmd->arg[k] < model->numtmap) + tmapidx[cmd->arg[k]] = 0; + break; + case m3dcp_qi_t: + case m3dcp_vi_t: + if (cmd->arg[k] < model->numvertex) + vrtxidx[cmd->arg[k]] = 0; + break; + case m3dcp_va_t: + n = k + 1; + l += (cmd->arg[k] - 1) * (cd->p - k - 1); + break; } } } @@ -4615,22 +4615,22 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size for (i = 0; i < model->numtmap; i++) { if (tmapidx[i] == M3D_UNDEF) continue; switch (quality) { - case M3D_EXP_INT8: - l = (unsigned int)(model->tmap[i].u * 255); - tcoord.data.u = (M3D_FLOAT)l / (M3D_FLOAT)255.0; - l = (unsigned int)(model->tmap[i].v * 255); - tcoord.data.v = (M3D_FLOAT)l / (M3D_FLOAT)255.0; - break; - case M3D_EXP_INT16: - l = (unsigned int)(model->tmap[i].u * 65535); - tcoord.data.u = (M3D_FLOAT)l / (M3D_FLOAT)65535.0; - l = (unsigned int)(model->tmap[i].v * 65535); - tcoord.data.v = (M3D_FLOAT)l / (M3D_FLOAT)65535.0; - break; - default: - tcoord.data.u = model->tmap[i].u; - tcoord.data.v = model->tmap[i].v; - break; + case M3D_EXP_INT8: + l = (unsigned int)(model->tmap[i].u * 255); + tcoord.data.u = (M3D_FLOAT)l / (M3D_FLOAT)255.0; + l = (unsigned int)(model->tmap[i].v * 255); + tcoord.data.v = (M3D_FLOAT)l / (M3D_FLOAT)255.0; + break; + case M3D_EXP_INT16: + l = (unsigned int)(model->tmap[i].u * 65535); + tcoord.data.u = (M3D_FLOAT)l / (M3D_FLOAT)65535.0; + l = (unsigned int)(model->tmap[i].v * 65535); + tcoord.data.v = (M3D_FLOAT)l / (M3D_FLOAT)65535.0; + break; + default: + tcoord.data.u = model->tmap[i].u; + tcoord.data.v = model->tmap[i].v; + break; } if (flags & M3D_EXP_FLIPTXTCRD) tcoord.data.v = (M3D_FLOAT)1.0 - tcoord.data.v; @@ -4959,26 +4959,26 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size } } switch (k) { - case m3dpf_color: ptr += sprintf(ptr, "%s #%08x\r\n", sn, m->prop[i].value.color); break; - case m3dpf_uint8: - case m3dpf_uint16: - case m3dpf_uint32: ptr += sprintf(ptr, "%s %d\r\n", sn, m->prop[i].value.num); break; - case m3dpf_float: ptr += sprintf(ptr, "%s %g\r\n", sn, m->prop[i].value.fnum); break; - case m3dpf_map: - if (m->prop[i].value.textureid < model->numtexture && - model->texture[m->prop[i].value.textureid].name) { - sl = _m3d_safestr(model->texture[m->prop[i].value.textureid].name, 0); - if (!sl) { - setlocale(LC_NUMERIC, ol); - goto memerr; - } - if (*sl) - ptr += sprintf(ptr, "map_%s %s\r\n", sn, sl); - M3D_FREE(sn); - M3D_FREE(sl); - sl = NULL; + case m3dpf_color: ptr += sprintf(ptr, "%s #%08x\r\n", sn, m->prop[i].value.color); break; + case m3dpf_uint8: + case m3dpf_uint16: + case m3dpf_uint32: ptr += sprintf(ptr, "%s %d\r\n", sn, m->prop[i].value.num); break; + case m3dpf_float: ptr += sprintf(ptr, "%s %g\r\n", sn, m->prop[i].value.fnum); break; + case m3dpf_map: + if (m->prop[i].value.textureid < model->numtexture && + model->texture[m->prop[i].value.textureid].name) { + sl = _m3d_safestr(model->texture[m->prop[i].value.textureid].name, 0); + if (!sl) { + setlocale(LC_NUMERIC, ol); + goto memerr; } - break; + if (*sl) + ptr += sprintf(ptr, "map_%s %s\r\n", sn, sl); + M3D_FREE(sn); + M3D_FREE(sl); + sl = NULL; + } + break; } sn = NULL; } @@ -5102,16 +5102,16 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size len = (unsigned int)((uintptr_t)ptr + (uintptr_t)strlen(cd->key) + (uintptr_t)3); for (k = 0; k < cd->p; k++) switch (cd->a[k]) { - case m3dcp_mi_t: - if (cmd->arg[k] != M3D_NOTDEFINED) { - len += (unsigned int)strlen(model->material[cmd->arg[k]].name) + 1; - } - break; - case m3dcp_va_t: - len += cmd->arg[k] * (cd->p - k - 1) * 16; - k = cd->p; - break; - default: len += 16; break; + case m3dcp_mi_t: + if (cmd->arg[k] != M3D_NOTDEFINED) { + len += (unsigned int)strlen(model->material[cmd->arg[k]].name) + 1; + } + break; + case m3dcp_va_t: + len += cmd->arg[k] * (cd->p - k - 1) * 16; + k = cd->p; + break; + default: len += 16; break; } out = (unsigned char *)M3D_REALLOC(out, len); ptr += (uintptr_t)out; @@ -5122,25 +5122,25 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size ptr += sprintf(ptr, "%s", cd->key); for (k = n = 0, l = cd->p; k < l; k++) { switch (cd->a[((k - n) % (cd->p - n)) + n]) { - case m3dcp_mi_t: - if (cmd->arg[k] != M3D_NOTDEFINED) { - sn = _m3d_safestr(model->material[cmd->arg[k]].name, 0); - if (!sn) { - setlocale(LC_NUMERIC, ol); - goto memerr; - } - ptr += sprintf(ptr, " %s", sn); - M3D_FREE(sn); - sn = NULL; + case m3dcp_mi_t: + if (cmd->arg[k] != M3D_NOTDEFINED) { + sn = _m3d_safestr(model->material[cmd->arg[k]].name, 0); + if (!sn) { + setlocale(LC_NUMERIC, ol); + goto memerr; } - break; - case m3dcp_vc_t: ptr += sprintf(ptr, " %g", *((float *)&cmd->arg[k])); break; - case m3dcp_va_t: - ptr += sprintf(ptr, " %d[", cmd->arg[k]); - n = k + 1; - l += (cmd->arg[k] - 1) * (cd->p - k - 1); - break; - default: ptr += sprintf(ptr, " %d", cmd->arg[k]); break; + ptr += sprintf(ptr, " %s", sn); + M3D_FREE(sn); + sn = NULL; + } + break; + case m3dcp_vc_t: ptr += sprintf(ptr, " %g", *((float *)&cmd->arg[k])); break; + case m3dcp_va_t: + ptr += sprintf(ptr, " %d[", cmd->arg[k]); + n = k + 1; + l += (cmd->arg[k] - 1) * (cd->p - k - 1); + break; + default: ptr += sprintf(ptr, " %d", cmd->arg[k]); break; } } ptr += sprintf(ptr, "%s\r\n", l > cd->p ? " ]" : ""); @@ -5384,28 +5384,28 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size if (tmap[i].newidx == last) continue; last = tmap[i].newidx; switch (vc_s) { - case 1: - *out++ = (uint8_t)(tmap[i].data.u * 255); - *out++ = (uint8_t)(tmap[i].data.v * 255); - break; - case 2: - *((uint16_t *)out) = (uint16_t)(tmap[i].data.u * 65535); - out += 2; - *((uint16_t *)out) = (uint16_t)(tmap[i].data.v * 65535); - out += 2; - break; - case 4: - *((float *)out) = tmap[i].data.u; - out += 4; - *((float *)out) = tmap[i].data.v; - out += 4; - break; - case 8: - *((double *)out) = tmap[i].data.u; - out += 8; - *((double *)out) = tmap[i].data.v; - out += 8; - break; + case 1: + *out++ = (uint8_t)(tmap[i].data.u * 255); + *out++ = (uint8_t)(tmap[i].data.v * 255); + break; + case 2: + *((uint16_t *)out) = (uint16_t)(tmap[i].data.u * 65535); + out += 2; + *((uint16_t *)out) = (uint16_t)(tmap[i].data.v * 65535); + out += 2; + break; + case 4: + *((float *)out) = tmap[i].data.u; + out += 4; + *((float *)out) = tmap[i].data.v; + out += 4; + break; + case 8: + *((double *)out) = tmap[i].data.u; + out += 8; + *((double *)out) = tmap[i].data.v; + out += 8; + break; } } *length = (uint32_t)((uintptr_t)out - (uintptr_t)((uint8_t *)h + len)); @@ -5425,54 +5425,54 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size if (vrtx[i].newidx == last) continue; last = vrtx[i].newidx; switch (vc_s) { - case 1: - *out++ = (int8_t)(vrtx[i].data.x * 127); - *out++ = (int8_t)(vrtx[i].data.y * 127); - *out++ = (int8_t)(vrtx[i].data.z * 127); - *out++ = (int8_t)(vrtx[i].data.w * 127); - break; - case 2: - *((int16_t *)out) = (int16_t)(vrtx[i].data.x * 32767); - out += 2; - *((int16_t *)out) = (int16_t)(vrtx[i].data.y * 32767); - out += 2; - *((int16_t *)out) = (int16_t)(vrtx[i].data.z * 32767); - out += 2; - *((int16_t *)out) = (int16_t)(vrtx[i].data.w * 32767); - out += 2; - break; - case 4: - memcpy(out, &vrtx[i].data.x, sizeof(float)); - out += 4; - memcpy(out, &vrtx[i].data.y, sizeof(float)); - out += 4; - memcpy(out, &vrtx[i].data.z, sizeof(float)); - out += 4; - memcpy(out, &vrtx[i].data.w, sizeof(float)); - out += 4; - break; - case 8: - *((double *)out) = vrtx[i].data.x; - out += 8; - *((double *)out) = vrtx[i].data.y; - out += 8; - *((double *)out) = vrtx[i].data.z; - out += 8; - *((double *)out) = vrtx[i].data.w; - out += 8; - break; + case 1: + *out++ = (int8_t)(vrtx[i].data.x * 127); + *out++ = (int8_t)(vrtx[i].data.y * 127); + *out++ = (int8_t)(vrtx[i].data.z * 127); + *out++ = (int8_t)(vrtx[i].data.w * 127); + break; + case 2: + *((int16_t *)out) = (int16_t)(vrtx[i].data.x * 32767); + out += 2; + *((int16_t *)out) = (int16_t)(vrtx[i].data.y * 32767); + out += 2; + *((int16_t *)out) = (int16_t)(vrtx[i].data.z * 32767); + out += 2; + *((int16_t *)out) = (int16_t)(vrtx[i].data.w * 32767); + out += 2; + break; + case 4: + memcpy(out, &vrtx[i].data.x, sizeof(float)); + out += 4; + memcpy(out, &vrtx[i].data.y, sizeof(float)); + out += 4; + memcpy(out, &vrtx[i].data.z, sizeof(float)); + out += 4; + memcpy(out, &vrtx[i].data.w, sizeof(float)); + out += 4; + break; + case 8: + *((double *)out) = vrtx[i].data.x; + out += 8; + *((double *)out) = vrtx[i].data.y; + out += 8; + *((double *)out) = vrtx[i].data.z; + out += 8; + *((double *)out) = vrtx[i].data.w; + out += 8; + break; } idx = _m3d_cmapidx(cmap, numcmap, vrtx[i].data.color); switch (ci_s) { - case 1: *out++ = (uint8_t)(idx); break; - case 2: - *((uint16_t *)out) = (uint16_t)(idx); - out += 2; - break; - case 4: - *((uint32_t *)out) = vrtx[i].data.color; - out += 4; - break; + case 1: *out++ = (uint8_t)(idx); break; + case 2: + *((uint16_t *)out) = (uint16_t)(idx); + out += 2; + break; + case 4: + *((uint32_t *)out) = vrtx[i].data.color; + out += 4; + break; } out = _m3d_addidx(out, sk_s, vrtx[i].data.skinid); } @@ -5510,19 +5510,19 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size j++) weights[j] = (uint8_t)(skin[i].data.weight[j] * 255); switch (nb_s) { - case 1: weights[0] = 255; break; - case 2: - *((uint16_t *)out) = *((uint16_t *)&weights[0]); - out += 2; - break; - case 4: - *((uint32_t *)out) = *((uint32_t *)&weights[0]); - out += 4; - break; - case 8: - *((uint64_t *)out) = *((uint64_t *)&weights[0]); - out += 8; - break; + case 1: weights[0] = 255; break; + case 2: + *((uint16_t *)out) = *((uint16_t *)&weights[0]); + out += 2; + break; + case 4: + *((uint32_t *)out) = *((uint32_t *)&weights[0]); + out += 4; + break; + case 8: + *((uint64_t *)out) = *((uint64_t *)&weights[0]); + out += 8; + break; } for (j = 0; j < (uint32_t)nb_s && skin[i].data.boneid[j] != M3D_UNDEF && weights[j]; j++) { out = _m3d_addidx(out, bi_s, skin[i].data.boneid[j]); @@ -5561,41 +5561,41 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size if (k == 256) continue; *out++ = m->prop[i].type; switch (k) { - case m3dpf_color: - if (!(flags & M3D_EXP_NOCMAP)) { - idx = _m3d_cmapidx(cmap, numcmap, m->prop[i].value.color); - switch (ci_s) { - case 1: *out++ = (uint8_t)(idx); break; - case 2: - *((uint16_t *)out) = (uint16_t)(idx); - out += 2; - break; - case 4: - *((uint32_t *)out) = (uint32_t)(m->prop[i].value.color); - out += 4; - break; - } - } else - out--; - break; - case m3dpf_uint8: *out++ = m->prop[i].value.num; break; - case m3dpf_uint16: - *((uint16_t *)out) = m->prop[i].value.num; - out += 2; - break; - case m3dpf_uint32: - *((uint32_t *)out) = m->prop[i].value.num; - out += 4; - break; - case m3dpf_float: - *((float *)out) = m->prop[i].value.fnum; - out += 4; - break; + case m3dpf_color: + if (!(flags & M3D_EXP_NOCMAP)) { + idx = _m3d_cmapidx(cmap, numcmap, m->prop[i].value.color); + switch (ci_s) { + case 1: *out++ = (uint8_t)(idx); break; + case 2: + *((uint16_t *)out) = (uint16_t)(idx); + out += 2; + break; + case 4: + *((uint32_t *)out) = (uint32_t)(m->prop[i].value.color); + out += 4; + break; + } + } else + out--; + break; + case m3dpf_uint8: *out++ = m->prop[i].value.num; break; + case m3dpf_uint16: + *((uint16_t *)out) = m->prop[i].value.num; + out += 2; + break; + case m3dpf_uint32: + *((uint32_t *)out) = m->prop[i].value.num; + out += 4; + break; + case m3dpf_float: + *((float *)out) = m->prop[i].value.fnum; + out += 4; + break; - case m3dpf_map: - idx = _m3d_stridx(str, numstr, model->texture[m->prop[i].value.textureid].name); - out = _m3d_addidx(out, si_s, idx); - break; + case m3dpf_map: + idx = _m3d_stridx(str, numstr, model->texture[m->prop[i].value.textureid].name); + out = _m3d_addidx(out, si_s, idx); + break; } } *length = (uint32_t)((uintptr_t)out - (uintptr_t)((uint8_t *)h + len)); @@ -5689,40 +5689,40 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size if (cmd->type > 127) *out++ = (cmd->type >> 7) & 0xff; for (k = n = 0, l = cd->p; k < l; k++) { switch (cd->a[((k - n) % (cd->p - n)) + n]) { - case m3dcp_mi_t: - out = _m3d_addidx(out, si_s, cmd->arg[k] < model->nummaterial ? _m3d_stridx(str, numstr, model->material[cmd->arg[k]].name) : 0); + case m3dcp_mi_t: + out = _m3d_addidx(out, si_s, cmd->arg[k] < model->nummaterial ? _m3d_stridx(str, numstr, model->material[cmd->arg[k]].name) : 0); + break; + case m3dcp_vc_t: + min_x = *((float *)&cmd->arg[k]); + switch (vc_s) { + case 1: *out++ = (int8_t)(min_x * 127); break; + case 2: + *((int16_t *)out) = (int16_t)(min_x * 32767); + out += 2; break; - case m3dcp_vc_t: - min_x = *((float *)&cmd->arg[k]); - switch (vc_s) { - case 1: *out++ = (int8_t)(min_x * 127); break; - case 2: - *((int16_t *)out) = (int16_t)(min_x * 32767); - out += 2; - break; - case 4: - *((float *)out) = min_x; - out += 4; - break; - case 8: - *((double *)out) = min_x; - out += 8; - break; - } + case 4: + *((float *)out) = min_x; + out += 4; break; - case m3dcp_hi_t: out = _m3d_addidx(out, hi_s, cmd->arg[k]); break; - case m3dcp_fi_t: out = _m3d_addidx(out, fi_s, cmd->arg[k]); break; - case m3dcp_ti_t: out = _m3d_addidx(out, ti_s, cmd->arg[k]); break; - case m3dcp_qi_t: - case m3dcp_vi_t: out = _m3d_addidx(out, vi_s, cmd->arg[k]); break; - case m3dcp_i1_t: out = _m3d_addidx(out, 1, cmd->arg[k]); break; - case m3dcp_i2_t: out = _m3d_addidx(out, 2, cmd->arg[k]); break; - case m3dcp_i4_t: out = _m3d_addidx(out, 4, cmd->arg[k]); break; - case m3dcp_va_t: - out = _m3d_addidx(out, 4, cmd->arg[k]); - n = k + 1; - l += (cmd->arg[k] - 1) * (cd->p - k - 1); + case 8: + *((double *)out) = min_x; + out += 8; break; + } + break; + case m3dcp_hi_t: out = _m3d_addidx(out, hi_s, cmd->arg[k]); break; + case m3dcp_fi_t: out = _m3d_addidx(out, fi_s, cmd->arg[k]); break; + case m3dcp_ti_t: out = _m3d_addidx(out, ti_s, cmd->arg[k]); break; + case m3dcp_qi_t: + case m3dcp_vi_t: out = _m3d_addidx(out, vi_s, cmd->arg[k]); break; + case m3dcp_i1_t: out = _m3d_addidx(out, 1, cmd->arg[k]); break; + case m3dcp_i2_t: out = _m3d_addidx(out, 2, cmd->arg[k]); break; + case m3dcp_i4_t: out = _m3d_addidx(out, 4, cmd->arg[k]); break; + case m3dcp_va_t: + out = _m3d_addidx(out, 4, cmd->arg[k]); + n = k + 1; + l += (cmd->arg[k] - 1) * (cd->p - k - 1); + break; } } } @@ -5756,15 +5756,15 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size out = _m3d_addidx(out, si_s, _m3d_stridx(str, numstr, model->label[l].lang)); idx = _m3d_cmapidx(cmap, numcmap, model->label[i].color); switch (ci_s) { - case 1: *out++ = (uint8_t)(idx); break; - case 2: - *((uint16_t *)out) = (uint16_t)(idx); - out += 2; - break; - case 4: - *((uint32_t *)out) = model->label[i].color; - out += 4; - break; + case 1: *out++ = (uint8_t)(idx); break; + case 2: + *((uint16_t *)out) = (uint16_t)(idx); + out += 2; + break; + case 4: + *((uint32_t *)out) = model->label[i].color; + out += 4; + break; } } out = _m3d_addidx(out, vi_s, vrtxidx[model->label[i].vertexid]); @@ -5889,7 +5889,7 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size } #endif -#endif +#endif /* M3D_IMPLEMENTATION */ #ifdef __cplusplus } @@ -6147,11 +6147,11 @@ public: #endif /* impl */ } // namespace M3D -#ifdef _WIN32 -# pragma warning(pop) -#endif // _WIN32 +#endif /* M3D_CPPWRAPPER */ -#endif +#ifdef _MSC_VER +# pragma warning(pop) +#endif /* _MSC_VER */ #endif /* __cplusplus */ diff --git a/code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp b/code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp index e9930dfed..c57b43c11 100644 --- a/code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp +++ b/code/AssetLib/MDL/HalfLife/HL1MDLLoader.cpp @@ -68,9 +68,9 @@ namespace Assimp { namespace MDL { namespace HalfLife { -#if _MSC_VER > 1920 +#ifdef _MSC_VER # pragma warning(disable : 4706) -#endif // _WIN32 +#endif // _MSC_VER // ------------------------------------------------------------------------------------------------ HL1MDLLoader::HL1MDLLoader( diff --git a/code/AssetLib/Step/STEPFile.h b/code/AssetLib/Step/STEPFile.h index 72648e462..2072ac2a6 100644 --- a/code/AssetLib/Step/STEPFile.h +++ b/code/AssetLib/Step/STEPFile.h @@ -54,10 +54,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include -#if _MSC_VER > 1920 +#ifdef _MSC_VER # pragma warning(push) # pragma warning(disable : 4127 4456 4245 4512 ) -#endif // _WIN32 +#endif // _MSC_VER // #if _MSC_VER > 1500 || (defined __GNUC___) @@ -960,9 +960,9 @@ private: const EXPRESS::ConversionSchema *schema; }; -#if _MSC_VER > 1920 +#ifdef _MSC_VER #pragma warning(pop) -#endif // _WIN32 +#endif // _MSC_VER } // namespace STEP diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index 031d5c24e..6b3a50346 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -74,9 +74,9 @@ Here we implement only the C++ interface (Assimp::Exporter). namespace Assimp { -#if _MSC_VER > 1920 +#ifdef _MSC_VER # pragma warning( disable : 4800 ) -#endif // _WIN32 +#endif // _MSC_VER // PostStepRegistry.cpp diff --git a/code/Common/Subdivision.cpp b/code/Common/Subdivision.cpp index 4f64a00c4..c60d2f0d3 100644 --- a/code/Common/Subdivision.cpp +++ b/code/Common/Subdivision.cpp @@ -53,9 +53,9 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace Assimp; void mydummy() {} -#if _MSC_VER > 1920 +#ifdef _MSC_VER #pragma warning(disable : 4709) -#endif // _WIN32 +#endif // _MSC_VER // ------------------------------------------------------------------------------------------------ /** Subdivider stub class to implement the Catmull-Clarke subdivision algorithm. The * implementation is basing on recursive refinement. Directly evaluating the result is also From 13ee2306c34ae25a6376fc5de0811e39225306f5 Mon Sep 17 00:00:00 2001 From: MeyerFabian Date: Mon, 20 Jul 2020 17:04:11 +0200 Subject: [PATCH 55/67] build/clang-cl-windows --- CMakeLists.txt | 6 +++- code/AssetLib/M3D/m3d.h | 4 +-- code/AssetLib/Step/STEPFile.h | 8 ++--- code/CMakeLists.txt | 1 - .../gtest/include/gtest/internal/gtest-port.h | 14 +++++++++ contrib/gtest/src/gtest-port.cc | 3 +- .../rapidjson/include/rapidjson/document.h | 2 +- .../rapidjson/include/rapidjson/encodings.h | 4 +-- .../include/rapidjson/internal/meta.h | 4 +-- contrib/rapidjson/include/rapidjson/reader.h | 4 +-- contrib/rapidjson/include/rapidjson/writer.h | 6 ++-- contrib/unzip/ioapi.c | 15 +++++----- contrib/unzip/ioapi.h | 2 +- contrib/unzip/unzip.c | 1 - contrib/zip/src/miniz.h | 6 ++-- include/assimp/Compiler/poppack1.h | 2 +- include/assimp/Compiler/pushpack1.h | 2 +- test/unit/UnitTestFileGenerator.h | 30 +++++++++---------- test/unit/utColladaImportExport.cpp | 1 - 19 files changed, 65 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 23725381d..ecf1de619 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -257,7 +257,11 @@ IF ((CMAKE_C_COMPILER_ID MATCHES "GNU") AND NOT CMAKE_COMPILER_IS_MINGW) SET(LIBSTDC++_LIBRARIES -lstdc++) ELSEIF(MSVC) # enable multi-core compilation with MSVC - ADD_COMPILE_OPTIONS(/MP /bigobj /W4 /WX ) + IF( "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" ) # clang-cl + ADD_COMPILE_OPTIONS(/bigobj /W4 /WX ) + ELSE() # msvc + ADD_COMPILE_OPTIONS(/MP /bigobj /W4 /WX) + ENDIF() # disable "elements of array '' will be default initialized" warning on MSVC2013 IF(MSVC12) ADD_COMPILE_OPTIONS(/wd4351) diff --git a/code/AssetLib/M3D/m3d.h b/code/AssetLib/M3D/m3d.h index 5ab3d16de..e0d456c3c 100644 --- a/code/AssetLib/M3D/m3d.h +++ b/code/AssetLib/M3D/m3d.h @@ -84,7 +84,7 @@ typedef uint16_t M3D_INDEX; #ifndef M3D_BONEMAXLEVEL #define M3D_BONEMAXLEVEL 8 #endif -#ifndef _MSC_VER +#if !defined(_MSC_VER) || defined(__clang__) #ifndef _inline #define _inline __inline__ #endif @@ -101,7 +101,7 @@ typedef uint16_t M3D_INDEX; #define _register #endif -#if _MSC_VER > 1920 +#if _MSC_VER > 1920 && !defined(__clang__) # pragma warning(push) # pragma warning(disable : 4100 4127 4189 4505 4244 4403 4701 4703) # if (_MSC_VER > 1800 ) diff --git a/code/AssetLib/Step/STEPFile.h b/code/AssetLib/Step/STEPFile.h index 72648e462..1ef5d65c4 100644 --- a/code/AssetLib/Step/STEPFile.h +++ b/code/AssetLib/Step/STEPFile.h @@ -130,8 +130,8 @@ namespace STEP { * coupled with a line number. */ // ------------------------------------------------------------------------------- struct SyntaxError : DeadlyImportError { - enum { - LINE_NOT_SPECIFIED = 0xffffffffffffffffLL + enum : uint64_t { + LINE_NOT_SPECIFIED = 0xfffffffffffffffLL }; SyntaxError(const std::string &s, uint64_t line = LINE_NOT_SPECIFIED); @@ -143,8 +143,8 @@ struct SyntaxError : DeadlyImportError { * It is typically coupled with both an entity id and a line number.*/ // ------------------------------------------------------------------------------- struct TypeError : DeadlyImportError { - enum { - ENTITY_NOT_SPECIFIED = 0xffffffffffffffffLL, + enum : uint64_t { + ENTITY_NOT_SPECIFIED = 0xffffffffffffffffUL, ENTITY_NOT_SPECIFIED_32 = 0x00000000ffffffff }; diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index bb43449e1..2ba893281 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -45,7 +45,6 @@ # cmake_minimum_required( VERSION 3.0 ) SET( HEADER_PATH ../include/assimp ) - if(NOT ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM) message(WARNING "Requesting Android JNI I/O-System in non-Android toolchain. Resetting ASSIMP_ANDROID_JNIIOSYSTEM to OFF.") set(ASSIMP_ANDROID_JNIIOSYSTEM OFF) diff --git a/contrib/gtest/include/gtest/internal/gtest-port.h b/contrib/gtest/include/gtest/internal/gtest-port.h index 0094ed507..f66d9cd32 100644 --- a/contrib/gtest/include/gtest/internal/gtest-port.h +++ b/contrib/gtest/include/gtest/internal/gtest-port.h @@ -312,10 +312,22 @@ __pragma(warning(disable: warnings)) # define GTEST_DISABLE_MSC_WARNINGS_POP_() \ __pragma(warning(pop)) +# if defined(__clang__) +# define GTEST_DISABLE_CLANG_DEPRECATED_WARNINGS_PUSH_() \ + _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +# define GTEST_DISABLE_CLANG_WARNINGS_POP_() \ + _Pragma("clang diagnostic pop") +# else +# define GTEST_DISABLE_CLANG_DEPRECATED_WARNINGS_PUSH_() +# define GTEST_DISABLE_CLANG_WARNINGS_POP_() +# endif #else // Older versions of MSVC don't have __pragma. # define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings) # define GTEST_DISABLE_MSC_WARNINGS_POP_() +# define GTEST_DISABLE_CLANG_DEPRECATED_WARNINGS_PUSH_() +# define GTEST_DISABLE_CLANG_WARNINGS_POP_() #endif #ifndef GTEST_LANG_CXX11 @@ -2352,6 +2364,7 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); } // Functions deprecated by MSVC 8.0. GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996 /* deprecated function */) +GTEST_DISABLE_CLANG_DEPRECATED_WARNINGS_PUSH_() inline const char* StrNCpy(char* dest, const char* src, size_t n) { return strncpy(dest, src, n); @@ -2399,6 +2412,7 @@ inline const char* GetEnv(const char* name) { #endif } +GTEST_DISABLE_CLANG_WARNINGS_POP_() GTEST_DISABLE_MSC_WARNINGS_POP_() #if GTEST_OS_WINDOWS_MOBILE diff --git a/contrib/gtest/src/gtest-port.cc b/contrib/gtest/src/gtest-port.cc index e5bf3dd2b..e04aa9a57 100644 --- a/contrib/gtest/src/gtest-port.cc +++ b/contrib/gtest/src/gtest-port.cc @@ -926,7 +926,7 @@ GTestLog::~GTestLog() { // Disable Microsoft deprecation warnings for POSIX functions called from // this class (creat, dup, dup2, and close) GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996) - +GTEST_DISABLE_CLANG_DEPRECATED_WARNINGS_PUSH_() #if GTEST_HAS_STREAM_REDIRECTION // Object that captures an output stream (stdout/stderr). @@ -1010,6 +1010,7 @@ class CapturedStream { }; GTEST_DISABLE_MSC_WARNINGS_POP_() +GTEST_DISABLE_CLANG_WARNINGS_POP_() static CapturedStream* g_captured_stderr = NULL; static CapturedStream* g_captured_stdout = NULL; diff --git a/contrib/rapidjson/include/rapidjson/document.h b/contrib/rapidjson/include/rapidjson/document.h index 473d846e3..17df30725 100644 --- a/contrib/rapidjson/include/rapidjson/document.h +++ b/contrib/rapidjson/include/rapidjson/document.h @@ -31,7 +31,7 @@ #include RAPIDJSON_DIAG_PUSH -#ifdef _MSC_VER +#if defined(_MSC_VER) && !(__clang__) RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant RAPIDJSON_DIAG_OFF(4244) // conversion from kXxxFlags to 'uint16_t', possible loss of data #endif diff --git a/contrib/rapidjson/include/rapidjson/encodings.h b/contrib/rapidjson/include/rapidjson/encodings.h index 0df1c3435..de4d9d216 100644 --- a/contrib/rapidjson/include/rapidjson/encodings.h +++ b/contrib/rapidjson/include/rapidjson/encodings.h @@ -17,7 +17,7 @@ #include "rapidjson.h" -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_OFF(4244) // conversion from 'type1' to 'type2', possible loss of data RAPIDJSON_DIAG_OFF(4702) // unreachable code @@ -709,7 +709,7 @@ struct Transcoder { RAPIDJSON_NAMESPACE_END -#if defined(__GNUC__) || defined(_MSC_VER) +#if defined(__GNUC__) || (defined(_MSC_VER) && !defined(__clang__)) RAPIDJSON_DIAG_POP #endif diff --git a/contrib/rapidjson/include/rapidjson/internal/meta.h b/contrib/rapidjson/include/rapidjson/internal/meta.h index 5a9aaa428..bcbfc7709 100644 --- a/contrib/rapidjson/include/rapidjson/internal/meta.h +++ b/contrib/rapidjson/include/rapidjson/internal/meta.h @@ -21,7 +21,7 @@ RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_OFF(effc++) #endif -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__clang__) RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_OFF(6334) #endif @@ -174,7 +174,7 @@ template struct RemoveSfinaeTag { typedef T Type; RAPIDJSON_NAMESPACE_END //@endcond -#if defined(__GNUC__) || defined(_MSC_VER) +#if defined(__GNUC__) || (defined(_MSC_VER) && !defined(__clang__)) RAPIDJSON_DIAG_POP #endif diff --git a/contrib/rapidjson/include/rapidjson/reader.h b/contrib/rapidjson/include/rapidjson/reader.h index 120c31115..4b172e953 100644 --- a/contrib/rapidjson/include/rapidjson/reader.h +++ b/contrib/rapidjson/include/rapidjson/reader.h @@ -37,7 +37,7 @@ #include #endif -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant RAPIDJSON_DIAG_OFF(4702) // unreachable code @@ -2214,7 +2214,7 @@ RAPIDJSON_DIAG_POP RAPIDJSON_DIAG_POP #endif -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) RAPIDJSON_DIAG_POP #endif diff --git a/contrib/rapidjson/include/rapidjson/writer.h b/contrib/rapidjson/include/rapidjson/writer.h index e610ebb60..53d1a5d7f 100644 --- a/contrib/rapidjson/include/rapidjson/writer.h +++ b/contrib/rapidjson/include/rapidjson/writer.h @@ -36,7 +36,7 @@ #include #endif -#ifdef _MSC_VER +#if defined (_MSC_VER) && !defined(__clang__) RAPIDJSON_DIAG_PUSH RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant #endif @@ -700,11 +700,11 @@ inline bool Writer::ScanWriteUnescapedString(StringStream& is, siz RAPIDJSON_NAMESPACE_END -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) RAPIDJSON_DIAG_POP #endif -#ifdef __clang__ +#if defined(__clang__) RAPIDJSON_DIAG_POP #endif diff --git a/contrib/unzip/ioapi.c b/contrib/unzip/ioapi.c index e1ef46088..0f1bf4f21 100644 --- a/contrib/unzip/ioapi.c +++ b/contrib/unzip/ioapi.c @@ -1,11 +1,3 @@ -/* ioapi.c -- IO base function header for compress/uncompress .zip - files using zlib + zip or unzip API - - Version 1.01e, February 12th, 2005 - - Copyright (C) 1998-2005 Gilles Vollant -*/ - #include #include #include @@ -16,6 +8,10 @@ #ifdef _WIN32 # pragma warning(push) # pragma warning(disable : 4131 4100) +# ifdef __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wunused-parameter" +# endif #endif // _WIN32 /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ @@ -181,4 +177,7 @@ void fill_fopen_filefunc (pzlib_filefunc_def) #ifdef _WIN32 # pragma warning(pop) +# ifdef __clang__ +# pragma clang diagnostic pop +# endif #endif // _WIN32 diff --git a/contrib/unzip/ioapi.h b/contrib/unzip/ioapi.h index 7d457baab..63ec641bf 100644 --- a/contrib/unzip/ioapi.h +++ b/contrib/unzip/ioapi.h @@ -24,7 +24,7 @@ #ifndef ZCALLBACK -#if (defined(WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) +#if (defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) #define ZCALLBACK CALLBACK #else #define ZCALLBACK diff --git a/contrib/unzip/unzip.c b/contrib/unzip/unzip.c index 3937f821e..7bac01df0 100644 --- a/contrib/unzip/unzip.c +++ b/contrib/unzip/unzip.c @@ -1554,7 +1554,6 @@ extern int ZEXPORT unzGetGlobalComment (file, szComment, uSizeBuf) char *szComment; uLong uSizeBuf; { - int err=UNZ_OK; unz_s* s; uLong uReadThis ; if (file==NULL) diff --git a/contrib/zip/src/miniz.h b/contrib/zip/src/miniz.h index 07f7b2de2..7570ae929 100644 --- a/contrib/zip/src/miniz.h +++ b/contrib/zip/src/miniz.h @@ -5361,7 +5361,7 @@ mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, } else { // Temporarily allocate a read buffer. read_buf_size = MZ_MIN(file_stat.m_comp_size, MZ_ZIP_MAX_IO_BUF_SIZE); -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF)) #else @@ -5454,7 +5454,7 @@ void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? comp_size : uncomp_size; -#ifdef _MSC_VER +#if defined(_MSC_VER) && !defined(__clang__) if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) #else if (((sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) @@ -5560,7 +5560,7 @@ mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) { // The file is stored or the caller has requested the compressed data. if (pZip->m_pState->m_pMem) { -#ifdef _MSC_VER +#if defined (_MSC_VER) && !defined(__clang__) if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (file_stat.m_comp_size > 0xFFFFFFFF)) #else diff --git a/include/assimp/Compiler/poppack1.h b/include/assimp/Compiler/poppack1.h index e033bc147..a8e9a3c7e 100644 --- a/include/assimp/Compiler/poppack1.h +++ b/include/assimp/Compiler/poppack1.h @@ -14,7 +14,7 @@ #endif // reset packing to the original value -#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) +#if (defined(_MSC_VER) && !defined(__clang__)) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) # pragma pack( pop ) #endif #undef PACK_STRUCT diff --git a/include/assimp/Compiler/pushpack1.h b/include/assimp/Compiler/pushpack1.h index 4c9fbb857..2a5e2dfe6 100644 --- a/include/assimp/Compiler/pushpack1.h +++ b/include/assimp/Compiler/pushpack1.h @@ -22,7 +22,7 @@ # error poppack1.h must be included after pushpack1.h #endif -#if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) +#if (defined(_MSC_VER) && !defined(__clang__)) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__) # pragma pack(push,1) # define PACK_STRUCT #elif defined( __GNUC__ ) || defined(__clang__) diff --git a/test/unit/UnitTestFileGenerator.h b/test/unit/UnitTestFileGenerator.h index 91d69357f..2166c6939 100644 --- a/test/unit/UnitTestFileGenerator.h +++ b/test/unit/UnitTestFileGenerator.h @@ -44,21 +44,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include -#if defined(__GNUC__) || defined(__clang__) -#define TMP_PATH "/tmp/" -inline FILE* MakeTmpFile(char* tmplate) -{ - auto fd = mkstemp(tmplate); - EXPECT_NE(-1, fd); - if(fd == -1) - { - return nullptr; - } - auto fs = fdopen(fd, "w+"); - EXPECT_NE(nullptr, fs); - return fs; -} -#elif defined(_MSC_VER) +#if defined(_MSC_VER) #include #define TMP_PATH "./" inline FILE* MakeTmpFile(char* tmplate) @@ -73,4 +59,18 @@ inline FILE* MakeTmpFile(char* tmplate) EXPECT_NE(fs, nullptr); return fs; } +#elif defined(__GNUC__) || defined(__clang__) +#define TMP_PATH "/tmp/" +inline FILE* MakeTmpFile(char* tmplate) +{ + auto fd = mkstemp(tmplate); + EXPECT_NE(-1, fd); + if(fd == -1) + { + return nullptr; + } + auto fs = fdopen(fd, "w+"); + EXPECT_NE(nullptr, fs); + return fs; +} #endif diff --git a/test/unit/utColladaImportExport.cpp b/test/unit/utColladaImportExport.cpp index 451c8e235..100ca548a 100644 --- a/test/unit/utColladaImportExport.cpp +++ b/test/unit/utColladaImportExport.cpp @@ -157,7 +157,6 @@ public: static inline void CheckNodeIdNames(IdNameMap &nodeIdMap, IdNameMap &nodeNameMap, const aiNode *parent, size_t index) { IdNameString namePair = GetItemIdName(parent, index); - const auto result = nodeNameMap.insert(namePair); IdNameString idPair = GetColladaIdName(parent, index); ReportDuplicate(nodeIdMap, idPair, typeid(aiNode).name()); From a19e4e41129589c2ca1e09a476ae57874462d685 Mon Sep 17 00:00:00 2001 From: MeyerFabian Date: Mon, 20 Jul 2020 18:28:50 +0200 Subject: [PATCH 56/67] Make clang with msvc abi work. --- code/AssetLib/Blender/BlenderTessellator.cpp | 8 +++++++- code/CMakeLists.txt | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/Blender/BlenderTessellator.cpp b/code/AssetLib/Blender/BlenderTessellator.cpp index 3c1cd6ea8..3366d56c5 100644 --- a/code/AssetLib/Blender/BlenderTessellator.cpp +++ b/code/AssetLib/Blender/BlenderTessellator.cpp @@ -386,7 +386,14 @@ void BlenderTessellatorP2T::ReferencePoints( std::vector< Blender::PointP2T >& p // ------------------------------------------------------------------------------------------------ inline PointP2T& BlenderTessellatorP2T::GetActualPointStructure( p2t::Point& point ) const { +#if defined __clang__ +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Winvalid-offsetof" +#endif // __clang__ unsigned int pointOffset = offsetof( PointP2T, point2D ); +#if defined __clang__ +# pragma clang diagnostic pop +#endif PointP2T& pointStruct = *reinterpret_cast< PointP2T* >( reinterpret_cast< char* >( &point ) - pointOffset ); if ( pointStruct.magic != static_cast( BLEND_TESS_MAGIC ) ) { @@ -394,7 +401,6 @@ inline PointP2T& BlenderTessellatorP2T::GetActualPointStructure( p2t::Point& poi } return pointStruct; } - // ------------------------------------------------------------------------------------------------ void BlenderTessellatorP2T::MakeFacesFromTriangles( std::vector< p2t::Triangle* >& triangles ) const { diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 2ba893281..23cfba4ff 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -1065,7 +1065,7 @@ endif() ADD_DEFINITIONS( -DASSIMP_BUILD_DLL_EXPORT ) -if ( MSVC ) +IF( MSVC OR "${CMAKE_CXX_SIMULATE_ID}" MATCHES "MSVC") # clang with MSVC ABI ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS ) ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS ) endif () From 51e592123add5da3359f37465b3e28b73852e678 Mon Sep 17 00:00:00 2001 From: MeyerFabian Date: Mon, 20 Jul 2020 18:42:57 +0200 Subject: [PATCH 57/67] Fix two deletions. --- code/CMakeLists.txt | 1 + contrib/unzip/ioapi.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index 23cfba4ff..7ccc6439f 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -45,6 +45,7 @@ # cmake_minimum_required( VERSION 3.0 ) SET( HEADER_PATH ../include/assimp ) + if(NOT ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM) message(WARNING "Requesting Android JNI I/O-System in non-Android toolchain. Resetting ASSIMP_ANDROID_JNIIOSYSTEM to OFF.") set(ASSIMP_ANDROID_JNIIOSYSTEM OFF) diff --git a/contrib/unzip/ioapi.c b/contrib/unzip/ioapi.c index 0f1bf4f21..5e0497f9e 100644 --- a/contrib/unzip/ioapi.c +++ b/contrib/unzip/ioapi.c @@ -1,3 +1,11 @@ +/* ioapi.c -- IO base function header for compress/uncompress .zip + files using zlib + zip or unzip API + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant +*/ + #include #include #include From 5e0b9e0f32f93520b26187161ad1b23e5defad1b Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 23 Jul 2020 11:35:36 +0200 Subject: [PATCH 58/67] Remove travix + assveyor. --- Readme.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/Readme.md b/Readme.md index dc54870a0..3f2edd402 100644 --- a/Readme.md +++ b/Readme.md @@ -4,8 +4,6 @@ A library to import and export various 3d-model-formats including scene-post-pro ### Current project status ### [![Financial Contributors on Open Collective](https://opencollective.com/assimp/all/badge.svg?label=financial+contributors)](https://opencollective.com/assimp) ![C/C++ CI](https://github.com/assimp/assimp/workflows/C/C++%20CI/badge.svg) -[![Linux Build Status](https://travis-ci.org/assimp/assimp.svg)](https://travis-ci.org/assimp/assimp) -[![Windows Build Status](https://ci.appveyor.com/api/projects/status/tmo433wax6u6cjp4?svg=true)](https://ci.appveyor.com/project/kimkulling/assimp) Coverity Scan Build Status From eb44eb13e6120d2bf74a0f4c8f6b479a0351e339 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 23 Jul 2020 19:15:46 +0200 Subject: [PATCH 59/67] fix namespace issue in fuzzer. --- fuzz/assimp_fuzzer.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/fuzz/assimp_fuzzer.cc b/fuzz/assimp_fuzzer.cc index 86ffe18ed..933d783db 100644 --- a/fuzz/assimp_fuzzer.cc +++ b/fuzz/assimp_fuzzer.cc @@ -42,6 +42,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include +using namespace Assimp; + extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataSize) { aiLogStream stream = aiGetPredefinedLogStream(aiDefaultLogStream_STDOUT,NULL); aiAttachLogStream(&stream); From 9a4b3fd9de1f91df5e4f8b1f26ce090024cc6107 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 23 Jul 2020 20:16:11 +0200 Subject: [PATCH 60/67] use correct include. --- fuzz/assimp_fuzzer.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fuzz/assimp_fuzzer.cc b/fuzz/assimp_fuzzer.cc index 933d783db..ca3f765e1 100644 --- a/fuzz/assimp_fuzzer.cc +++ b/fuzz/assimp_fuzzer.cc @@ -38,7 +38,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ -#include +#include #include #include From dcc8419722258aaf577af1ff858233aa0d3fa552 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Thu, 23 Jul 2020 21:01:08 +0200 Subject: [PATCH 61/67] add missing include for logging. --- fuzz/assimp_fuzzer.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/fuzz/assimp_fuzzer.cc b/fuzz/assimp_fuzzer.cc index ca3f765e1..b65ee0236 100644 --- a/fuzz/assimp_fuzzer.cc +++ b/fuzz/assimp_fuzzer.cc @@ -38,6 +38,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ +#include #include #include #include From 6886ea6c6571bfc03a9811cb38ee31f5f16b2d64 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Fri, 24 Jul 2020 10:57:24 +0200 Subject: [PATCH 62/67] Fix warning: comparison between unsigned and signed. --- test/unit/utglTF2ImportExport.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/test/unit/utglTF2ImportExport.cpp b/test/unit/utglTF2ImportExport.cpp index c3ad2d994..e991b04f3 100644 --- a/test/unit/utglTF2ImportExport.cpp +++ b/test/unit/utglTF2ImportExport.cpp @@ -548,11 +548,9 @@ TEST_F(utglTF2ImportExport, indexOutOfRange) { // The contents of an asset should not lead to an assert. Assimp::Importer importer; - struct LogObserver : Assimp::LogStream - { + struct LogObserver : Assimp::LogStream { bool m_observedWarning = false; - void write(const char *message) override - { + void write(const char *message) override { m_observedWarning = m_observedWarning || std::strstr(message, "faces were dropped"); } }; @@ -562,8 +560,8 @@ TEST_F(utglTF2ImportExport, indexOutOfRange) { const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/glTF2/IndexOutOfRange/IndexOutOfRange.gltf", aiProcess_ValidateDataStructure); ASSERT_NE(scene, nullptr); ASSERT_NE(scene->mRootNode, nullptr); - ASSERT_EQ(scene->mNumMeshes, 1); - EXPECT_EQ(scene->mMeshes[0]->mNumFaces, 11); + ASSERT_EQ(scene->mNumMeshes, 1u); + EXPECT_EQ(scene->mMeshes[0]->mNumFaces, 11u); DefaultLogger::get()->detachStream(&logObserver); EXPECT_TRUE(logObserver.m_observedWarning); } From ad18e365e5290217fe79a95a261d8886e668223b Mon Sep 17 00:00:00 2001 From: Rahul Sheth Date: Wed, 22 Jul 2020 10:57:25 -0400 Subject: [PATCH 63/67] Fixing more warnings --- code/AssetLib/IFC/IFCReaderGen1_2x3.cpp | 9 +++++++++ code/AssetLib/IFC/IFCReaderGen2_2x3.cpp | 9 +++++++++ code/AssetLib/M3D/m3d.h | 20 ++++++++++---------- code/AssetLib/glTF/glTFExporter.cpp | 10 +++++++++- code/AssetLib/glTF2/glTF2Asset.h | 2 +- 5 files changed, 38 insertions(+), 12 deletions(-) diff --git a/code/AssetLib/IFC/IFCReaderGen1_2x3.cpp b/code/AssetLib/IFC/IFCReaderGen1_2x3.cpp index 3376f4d9e..2cfa22530 100644 --- a/code/AssetLib/IFC/IFCReaderGen1_2x3.cpp +++ b/code/AssetLib/IFC/IFCReaderGen1_2x3.cpp @@ -45,6 +45,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "IFCReaderGen_2x3.h" +#if _MSC_VER +# pragma warning(push) +# pragma warning(disable : 4702) +#endif // _MSC_VER + namespace Assimp { using namespace ::Assimp::IFC; @@ -3165,4 +3170,8 @@ template <> size_t GenericFill(const DB& db, const LI } // ! STEP } // ! Assimp +#if _MSC_VER +# pragma warning(pop) +#endif // _MSC_VER + #endif diff --git a/code/AssetLib/IFC/IFCReaderGen2_2x3.cpp b/code/AssetLib/IFC/IFCReaderGen2_2x3.cpp index e6687014d..c58c7c42f 100644 --- a/code/AssetLib/IFC/IFCReaderGen2_2x3.cpp +++ b/code/AssetLib/IFC/IFCReaderGen2_2x3.cpp @@ -43,6 +43,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "IFCReaderGen_2x3.h" +#if _MSC_VER +# pragma warning(push) +# pragma warning(disable : 4702) +#endif // _MSC_VER + namespace Assimp { using namespace IFC; using namespace ::Assimp::IFC::Schema_2x3; @@ -1915,4 +1920,8 @@ template <> size_t GenericFill(const DB& db, const LIST& } // ! STEP } // ! Assimp +#if _MSC_VER +# pragma warning(pop) +#endif // _MSC_VER + #endif diff --git a/code/AssetLib/M3D/m3d.h b/code/AssetLib/M3D/m3d.h index fb980b9c4..905ff5095 100644 --- a/code/AssetLib/M3D/m3d.h +++ b/code/AssetLib/M3D/m3d.h @@ -686,7 +686,11 @@ typedef struct } _m3dstbi__result_info; #define STBI_ASSERT(v) -#define STBI_NOTUSED(v) (void)sizeof(v) +#ifdef _MSC_VER +#define STBI_NOTUSED(v) (void)(v) +#else +#define STBI_NOTUSED(v) (void)sizeof(v) +#endif #define STBI__BYTECAST(x) ((unsigned char)((x)&255)) #define STBI_MALLOC(sz) M3D_MALLOC(sz) #define STBI_REALLOC(p, newsz) M3D_REALLOC(p, newsz) @@ -699,10 +703,6 @@ _inline static unsigned char _m3dstbi__get8(_m3dstbi__context *s) { return 0; } -_inline static int _m3dstbi__at_eof(_m3dstbi__context *s) { - return s->img_buffer >= s->img_buffer_end; -} - static void _m3dstbi__skip(_m3dstbi__context *s, int n) { if (n < 0) { s->img_buffer = s->img_buffer_end; @@ -4347,7 +4347,7 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size char vc_s, vi_s, si_s, ci_s, ti_s, bi_s, nb_s, sk_s, fc_s, hi_s, fi_s; char *sn = NULL, *sl = NULL, *sa = NULL, *sd = NULL; unsigned char *out = NULL, *z = NULL, weights[M3D_NUMBONE], *norm = NULL; - unsigned int i, j, k, l, n, len, chunklen, *length; + unsigned int i = 0, j = 0, k = 0, l = 0, n = 0, len = 0, chunklen = 0, *length = NULL; M3D_FLOAT scale = (M3D_FLOAT)0.0, min_x, max_x, min_y, max_y, min_z, max_z; M3D_INDEX last, *vrtxidx = NULL, *mtrlidx = NULL, *tmapidx = NULL, *skinidx = NULL; uint32_t idx, numcmap = 0, *cmap = NULL, numvrtx = 0, maxvrtx = 0, numtmap = 0, maxtmap = 0, numproc = 0; @@ -5578,9 +5578,9 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size } else out--; break; - case m3dpf_uint8: *out++ = m->prop[i].value.num; break; + case m3dpf_uint8: *out++ = (uint8_t)m->prop[i].value.num; break; case m3dpf_uint16: - *((uint16_t *)out) = m->prop[i].value.num; + *((uint16_t *)out) = (uint16_t)m->prop[i].value.num; out += 2; break; case m3dpf_uint32: @@ -5655,7 +5655,7 @@ unsigned char *m3d_save(m3d_t *model, int quality, int flags, unsigned int *size face[i].data.normal[1] == M3D_UNDEF || face[i].data.normal[2] == M3D_UNDEF) ? 0 : 2); - *out++ = k; + *out++ = (uint8_t)k; for (j = 0; j < 3; j++) { out = _m3d_addidx(out, vi_s, vrtxidx[face[i].data.vertex[j]]); if (k & 1) @@ -6149,7 +6149,7 @@ public: #endif /* M3D_CPPWRAPPER */ -#ifdef _MSC_VER +#if _MSC_VER > 1920 && !defined(__clang__) # pragma warning(pop) #endif /* _MSC_VER */ diff --git a/code/AssetLib/glTF/glTFExporter.cpp b/code/AssetLib/glTF/glTFExporter.cpp index be9dddef7..1951167c6 100644 --- a/code/AssetLib/glTF/glTFExporter.cpp +++ b/code/AssetLib/glTF/glTFExporter.cpp @@ -542,10 +542,12 @@ void glTFExporter::ExportMeshes() // Variables needed for compression. BEGIN. // Indices, not pointers - because pointer to buffer is changing while writing to it. +#ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC size_t idx_srcdata_begin = 0; // Index of buffer before writing mesh data. Also, index of begin of coordinates array in buffer. size_t idx_srcdata_normal = SIZE_MAX;// Index of begin of normals array in buffer. SIZE_MAX - mean that mesh has no normals. - std::vector idx_srcdata_tc;// Array of indices. Every index point to begin of texture coordinates array in buffer. size_t idx_srcdata_ind;// Index of begin of coordinates indices array in buffer. +#endif + std::vector idx_srcdata_tc;// Array of indices. Every index point to begin of texture coordinates array in buffer. bool comp_allow;// Point that data of current mesh can be compressed. // Variables needed for compression. END. @@ -615,13 +617,17 @@ void glTFExporter::ExportMeshes() /******************* Vertices ********************/ // If compression is used then you need parameters of uncompressed region: begin and size. At this step "begin" is stored. +#ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC if(comp_allow) idx_srcdata_begin = b->byteLength; +#endif Ref v = ExportData(*mAsset, meshId, b, aim->mNumVertices, aim->mVertices, AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT, BufferViewTarget_ARRAY_BUFFER); if (v) p.attributes.position.push_back(v); /******************** Normals ********************/ +#ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC if(comp_allow && (aim->mNormals != 0)) idx_srcdata_normal = b->byteLength;// Store index of normals array. +#endif Ref n = ExportData(*mAsset, meshId, b, aim->mNumVertices, aim->mNormals, AttribType::VEC3, AttribType::VEC3, ComponentType_FLOAT, BufferViewTarget_ARRAY_BUFFER); if (n) p.attributes.normal.push_back(n); @@ -646,7 +652,9 @@ void glTFExporter::ExportMeshes() } /*************** Vertices indices ****************/ +#ifdef ASSIMP_IMPORTER_GLTF_USE_OPEN3DGC idx_srcdata_ind = b->byteLength;// Store index of indices array. +#endif if (aim->mNumFaces > 0) { std::vector indices; diff --git a/code/AssetLib/glTF2/glTF2Asset.h b/code/AssetLib/glTF2/glTF2Asset.h index e45b53006..763a6ac37 100644 --- a/code/AssetLib/glTF2/glTF2Asset.h +++ b/code/AssetLib/glTF2/glTF2Asset.h @@ -804,7 +804,7 @@ struct CustomExtension : public Object { Nullable> mValues; operator bool() const { - return Size(); + return Size() != 0; } size_t Size() const { From 3170c3d15cbbf00b830988d97a79ec6a7b40743e Mon Sep 17 00:00:00 2001 From: Ryan Styrczula Date: Thu, 30 Jul 2020 09:21:22 -0400 Subject: [PATCH 64/67] FBXExport: Fix crash if scene->mMetaData is null --- code/AssetLib/FBX/FBXExporter.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/AssetLib/FBX/FBXExporter.cpp b/code/AssetLib/FBX/FBXExporter.cpp index 20d166179..99ab7508e 100644 --- a/code/AssetLib/FBX/FBXExporter.cpp +++ b/code/AssetLib/FBX/FBXExporter.cpp @@ -405,7 +405,7 @@ void FBXExporter::WriteHeaderExtension () void WritePropInt(const aiScene* scene, FBX::Node& p, const std::string& key, int defaultValue) { int value; - if (scene->mMetaData->Get(key, value)) { + if (scene->mMetaData != nullptr && scene->mMetaData->Get(key, value)) { p.AddP70int(key, value); } else { p.AddP70int(key, defaultValue); @@ -415,12 +415,12 @@ void WritePropInt(const aiScene* scene, FBX::Node& p, const std::string& key, in void WritePropDouble(const aiScene* scene, FBX::Node& p, const std::string& key, double defaultValue) { double value; - if (scene->mMetaData->Get(key, value)) { + if (scene->mMetaData != nullptr && scene->mMetaData->Get(key, value)) { p.AddP70double(key, value); } else { // fallback lookup float instead float floatValue; - if (scene->mMetaData->Get(key, floatValue)) { + if (scene->mMetaData != nullptr && scene->mMetaData->Get(key, floatValue)) { p.AddP70double(key, (double)floatValue); } else { p.AddP70double(key, defaultValue); @@ -431,7 +431,7 @@ void WritePropDouble(const aiScene* scene, FBX::Node& p, const std::string& key, void WritePropEnum(const aiScene* scene, FBX::Node& p, const std::string& key, int defaultValue) { int value; - if (scene->mMetaData->Get(key, value)) { + if (scene->mMetaData != nullptr && scene->mMetaData->Get(key, value)) { p.AddP70enum(key, value); } else { p.AddP70enum(key, defaultValue); @@ -441,7 +441,7 @@ void WritePropEnum(const aiScene* scene, FBX::Node& p, const std::string& key, i void WritePropColor(const aiScene* scene, FBX::Node& p, const std::string& key, const aiVector3D& defaultValue) { aiVector3D value; - if (scene->mMetaData->Get(key, value)) { + if (scene->mMetaData != nullptr && scene->mMetaData->Get(key, value)) { // ai_real can be float or double, cast to avoid warnings p.AddP70color(key, (double)value.x, (double)value.y, (double)value.z); } else { @@ -452,7 +452,7 @@ void WritePropColor(const aiScene* scene, FBX::Node& p, const std::string& key, void WritePropString(const aiScene* scene, FBX::Node& p, const std::string& key, const std::string& defaultValue) { aiString value; // MetaData doesn't hold std::string - if (scene->mMetaData->Get(key, value)) { + if (scene->mMetaData != nullptr && scene->mMetaData->Get(key, value)) { p.AddP70string(key, value.C_Str()); } else { p.AddP70string(key, defaultValue); From eaf0587dd8b8bb2e66a7c83ef142eb5990f3839b Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Thu, 30 Jul 2020 14:56:01 +0100 Subject: [PATCH 65/67] FBX Version/Size Check --- code/AssetLib/FBX/FBXBinaryTokenizer.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/code/AssetLib/FBX/FBXBinaryTokenizer.cpp b/code/AssetLib/FBX/FBXBinaryTokenizer.cpp index 719b928bc..bbb3e5434 100644 --- a/code/AssetLib/FBX/FBXBinaryTokenizer.cpp +++ b/code/AssetLib/FBX/FBXBinaryTokenizer.cpp @@ -54,6 +54,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include namespace Assimp { namespace FBX { @@ -456,11 +457,21 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, size_t length) ASSIMP_LOG_DEBUG_F("FBX version: ", version); const bool is64bits = version >= 7500; const char *end = input + length; - while (cursor < end ) { - if (!ReadScope(output_tokens, input, cursor, input + length, is64bits)) { - break; + try + { + while (cursor < end ) { + if (!ReadScope(output_tokens, input, cursor, input + length, is64bits)) { + break; + } } } + catch (const DeadlyImportError& e) + { + if ((sizeof(size_t) > 4) && !is64bits && (length > std::numeric_limits::max())) { + throw DeadlyImportError("The FBX is invalid. This may be because the content is too big for this older version (" + to_string(version) + ") of the FBX format. (" + e.what() + ")"); + } + throw; + } } } // !FBX From 301bae3967046ba74b1fd2d2ba8b62f7cb39efac Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Thu, 30 Jul 2020 16:37:41 +0100 Subject: [PATCH 66/67] Improve message --- code/AssetLib/FBX/FBXBinaryTokenizer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/FBX/FBXBinaryTokenizer.cpp b/code/AssetLib/FBX/FBXBinaryTokenizer.cpp index bbb3e5434..82c1783cd 100644 --- a/code/AssetLib/FBX/FBXBinaryTokenizer.cpp +++ b/code/AssetLib/FBX/FBXBinaryTokenizer.cpp @@ -468,7 +468,7 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, size_t length) catch (const DeadlyImportError& e) { if ((sizeof(size_t) > 4) && !is64bits && (length > std::numeric_limits::max())) { - throw DeadlyImportError("The FBX is invalid. This may be because the content is too big for this older version (" + to_string(version) + ") of the FBX format. (" + e.what() + ")"); + throw DeadlyImportError("The FBX file is invalid. This may be because the content is too big for this older version (" + to_string(version) + ") of the FBX format. (" + e.what() + ")"); } throw; } From 0282f358a4d26adc897288f1a9ee9359c8bb0ac0 Mon Sep 17 00:00:00 2001 From: Malcolm Tyrrell Date: Fri, 31 Jul 2020 12:40:17 +0100 Subject: [PATCH 67/67] Remove unneeded check. --- code/AssetLib/FBX/FBXBinaryTokenizer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/AssetLib/FBX/FBXBinaryTokenizer.cpp b/code/AssetLib/FBX/FBXBinaryTokenizer.cpp index 82c1783cd..78f02ff96 100644 --- a/code/AssetLib/FBX/FBXBinaryTokenizer.cpp +++ b/code/AssetLib/FBX/FBXBinaryTokenizer.cpp @@ -467,7 +467,7 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, size_t length) } catch (const DeadlyImportError& e) { - if ((sizeof(size_t) > 4) && !is64bits && (length > std::numeric_limits::max())) { + if (!is64bits && (length > std::numeric_limits::max())) { throw DeadlyImportError("The FBX file is invalid. This may be because the content is too big for this older version (" + to_string(version) + ") of the FBX format. (" + e.what() + ")"); } throw;