summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
Diffstat (limited to 'examples')
-rw-r--r--examples/audiolevels/audiolevels.cpp78
-rw-r--r--examples/audiolevels/audiolevels.h (renamed from examples/spectrum/spectrumapp/wavfile.h)39
-rw-r--r--examples/audiolevels/audiolevels.pro20
-rw-r--r--examples/audiolevels/audiolevelsiodevice.cpp102
-rw-r--r--examples/audiolevels/audiolevelsiodevice.h44
-rw-r--r--examples/audiolevels/doc/images/audiolevels-example.pngbin0 -> 171468 bytes
-rw-r--r--examples/audiolevels/doc/src/audiolevels.qdoc85
-rw-r--r--examples/audiolevels/main.cpp (renamed from examples/qmlmaps/doc/src/qmlmaps.qdoc)27
-rw-r--r--examples/barchart/doc/images/barchart-example.pngbin163146 -> 0 bytes
-rw-r--r--examples/barchart/main.cpp308
-rw-r--r--examples/bars/bars.pro (renamed from examples/mapdata/mapdata.pro)8
-rw-r--r--examples/bars/doc/images/bars-example.pngbin0 -> 381366 bytes
-rw-r--r--examples/bars/doc/src/bars.qdoc159
-rw-r--r--examples/bars/graphmodifier.cpp229
-rw-r--r--examples/bars/graphmodifier.h (renamed from examples/widget/chart.h)65
-rw-r--r--examples/bars/main.cpp211
-rw-r--r--examples/customproxy/customproxy.pro (renamed from examples/rainfall/rainfall.pro)11
-rw-r--r--examples/customproxy/customproxy.qrc (renamed from examples/rainfall/rainfall.qrc)0
-rw-r--r--examples/customproxy/data/raindata.txt158
-rw-r--r--examples/customproxy/doc/images/customproxy-example.pngbin0 -> 266150 bytes
-rw-r--r--examples/customproxy/doc/src/customproxy.qdoc113
-rw-r--r--examples/customproxy/main.cpp (renamed from examples/rainfall/main.cpp)18
-rw-r--r--examples/customproxy/rainfallgraph.cpp (renamed from examples/rainfall/rainfallchart.cpp)107
-rw-r--r--examples/customproxy/rainfallgraph.h (renamed from examples/rainfall/rainfallchart.h)25
-rw-r--r--examples/customproxy/variantbardatamapping.cpp (renamed from examples/rainfall/variantbardatamapping.cpp)16
-rw-r--r--examples/customproxy/variantbardatamapping.h (renamed from examples/rainfall/variantbardatamapping.h)14
-rw-r--r--examples/customproxy/variantbardataproxy.cpp (renamed from examples/rainfall/variantbardataproxy.cpp)34
-rw-r--r--examples/customproxy/variantbardataproxy.h (renamed from examples/rainfall/variantbardataproxy.h)10
-rw-r--r--examples/customproxy/variantdataset.cpp (renamed from examples/rainfall/variantdataset.cpp)2
-rw-r--r--examples/customproxy/variantdataset.h (renamed from examples/rainfall/variantdataset.h)10
-rw-r--r--examples/examples.pri30
-rw-r--r--examples/examples.pro19
-rw-r--r--examples/itemmodel/doc/images/itemmodel-example-2.pngbin0 -> 233656 bytes
-rw-r--r--examples/itemmodel/doc/images/itemmodel-example.pngbin0 -> 151107 bytes
-rw-r--r--examples/itemmodel/doc/src/itemmodel.qdoc182
-rw-r--r--examples/itemmodel/itemmodel.pro (renamed from examples/barchart/barchart.pro)3
-rw-r--r--examples/itemmodel/main.cpp287
-rw-r--r--examples/mapdata/Suomi.karttapohja.svg3018
-rw-r--r--examples/mapdata/doc/images/mapdata-example.pngbin114152 -> 0 bytes
-rw-r--r--examples/mapdata/doc/src/mapdata.qdoc29
-rw-r--r--examples/mapdata/main.cpp201
-rw-r--r--examples/mapdata/mapdata.cpp368
-rw-r--r--examples/mapdata/mapdata.h65
-rw-r--r--examples/mapdata/mapdata.qrc8
-rw-r--r--examples/mapdata/weirdthing.obj1232
-rw-r--r--examples/qmlbarchart/qml/qmlbarchart/main.qml205
-rw-r--r--examples/qmlbarchart/qmlbarchart.qrc5
-rw-r--r--examples/qmlbars/doc/images/qmlbars-example.pngbin0 -> 263992 bytes
-rw-r--r--examples/qmlbars/doc/src/qmlbars.qdoc83
-rw-r--r--examples/qmlbars/main.cpp (renamed from examples/qmlmaps/main.cpp)7
-rw-r--r--examples/qmlbars/qml/qmlbars/axes.qml52
-rw-r--r--examples/qmlbars/qml/qmlbars/data.qml137
-rw-r--r--examples/qmlbars/qml/qmlbars/main.qml163
-rw-r--r--examples/qmlbars/qmlbars.desktop (renamed from examples/qmlmaps/qmlmaps.desktop)6
-rw-r--r--examples/qmlbars/qmlbars.pro (renamed from examples/qmlmaps/qmlmaps.pro)18
-rw-r--r--examples/qmlbars/qmlbars.qrc7
-rw-r--r--examples/qmlbars/qmlbars64.png (renamed from examples/qmlbarchart/qmlbarchart64.png)bin3400 -> 3400 bytes
-rw-r--r--examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.cpp (renamed from examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.cpp)0
-rw-r--r--examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.h (renamed from examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.h)0
-rw-r--r--examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.pri (renamed from examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.pri)10
-rw-r--r--examples/qmlmaps/floorplan.jpgbin108298 -> 0 bytes
-rw-r--r--examples/qmlmaps/qml/qmlmaps/main.qml114
-rw-r--r--examples/qmlmaps/qmlmaps.qrc8
-rw-r--r--examples/qmlscatter/doc/images/qmlscatter-example.pngbin0 -> 190076 bytes
-rw-r--r--examples/qmlscatter/doc/images/qmlscatter-newproject.pngbin0 -> 104569 bytes
-rw-r--r--examples/qmlscatter/doc/src/qmlscatter.qdoc147
-rw-r--r--examples/qmlscatter/main.cpp13
-rw-r--r--examples/qmlscatter/qml/qmlscatter/data.qml1109
-rw-r--r--examples/qmlscatter/qml/qmlscatter/main.qml252
-rw-r--r--examples/qmlscatter/qml/qmlscatter/newbutton.qml (renamed from examples/barchart/doc/src/barchart.qdoc)31
-rw-r--r--examples/qmlscatter/qmlscatter.pro8
-rw-r--r--examples/qmlscatter/qmlscatter.qrc2
-rw-r--r--examples/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri10
-rw-r--r--examples/qmlsurface/doc/images/qmlsurface-example.pngbin0 -> 748571 bytes
-rw-r--r--examples/qmlsurface/doc/src/qmlsurface.qdoc88
-rw-r--r--examples/qmlsurface/heightmap.pngbin0 -> 38634 bytes
-rw-r--r--examples/qmlsurface/main.cpp (renamed from examples/qmlbarchart/main.cpp)11
-rw-r--r--examples/qmlsurface/qml/qmlsurface/data.qml10062
-rw-r--r--examples/qmlsurface/qml/qmlsurface/main.qml166
-rw-r--r--examples/qmlsurface/qml/qmlsurface/newbutton.qml (renamed from examples/qmlbarchart/doc/src/qmlbarchart.qdoc)32
-rw-r--r--examples/qmlsurface/qmlsurface.desktop (renamed from examples/qmlbarchart/qmlbarchart.desktop)6
-rw-r--r--examples/qmlsurface/qmlsurface.pro (renamed from examples/qmlbarchart/qmlbarchart.pro)18
-rw-r--r--examples/qmlsurface/qmlsurface.qrc10
-rw-r--r--examples/qmlsurface/qmlsurface64.png (renamed from examples/qmlmaps/qmlmaps64.png)bin3400 -> 3400 bytes
-rw-r--r--examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.cpp (renamed from examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.cpp)0
-rw-r--r--examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.h (renamed from examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.h)0
-rw-r--r--examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.pri (renamed from examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.pri)10
-rw-r--r--examples/rainfall/data/raindata.txt1358
-rw-r--r--examples/rainfall/doc/images/rainfall-example.pngbin294202 -> 0 bytes
-rw-r--r--examples/rainfall/doc/src/rainfall.qdoc28
-rw-r--r--examples/scatter/doc/images/scatter-example.pngbin0 -> 433068 bytes
-rw-r--r--examples/scatter/doc/src/scatter.qdoc154
-rw-r--r--examples/scatter/main.cpp162
-rw-r--r--examples/scatter/scatter.pro13
-rw-r--r--examples/scatter/scatterdatamodifier.cpp188
-rw-r--r--examples/scatter/scatterdatamodifier.h (renamed from examples/scatterchart/scatterchart.h)34
-rw-r--r--examples/scatterchart/doc/src/scatterchart.qdoc29
-rw-r--r--examples/scatterchart/main.cpp198
-rw-r--r--examples/scatterchart/scatterchart.cpp325
-rw-r--r--examples/scatterchart/scatterchart.pro10
-rw-r--r--examples/spectrum/3rdparty/fftreal/Array.h97
-rw-r--r--examples/spectrum/3rdparty/fftreal/Array.hpp98
-rw-r--r--examples/spectrum/3rdparty/fftreal/DynArray.h100
-rw-r--r--examples/spectrum/3rdparty/fftreal/DynArray.hpp143
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTReal.dsp273
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTReal.dsw29
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTReal.h142
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTReal.hpp916
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealFixLen.h130
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp322
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h93
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealPassDirect.h96
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp204
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealPassInverse.h101
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp229
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealSelect.h77
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealSelect.hpp62
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h101
-rw-r--r--examples/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp91
-rw-r--r--examples/spectrum/3rdparty/fftreal/OscSinCos.h106
-rw-r--r--examples/spectrum/3rdparty/fftreal/OscSinCos.hpp122
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestAccuracy.h105
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestAccuracy.hpp472
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestHelperFixLen.h93
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp93
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestHelperNormal.h94
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestHelperNormal.hpp99
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestSpeed.h95
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestSpeed.hpp223
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h95
-rw-r--r--examples/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp91
-rw-r--r--examples/spectrum/3rdparty/fftreal/def.h60
-rw-r--r--examples/spectrum/3rdparty/fftreal/fftreal.pas661
-rw-r--r--examples/spectrum/3rdparty/fftreal/fftreal.pro44
-rw-r--r--examples/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp54
-rw-r--r--examples/spectrum/3rdparty/fftreal/fftreal_wrapper.h63
-rw-r--r--examples/spectrum/3rdparty/fftreal/license.txt459
-rw-r--r--examples/spectrum/3rdparty/fftreal/readme.txt242
-rw-r--r--examples/spectrum/3rdparty/fftreal/test.cpp267
-rw-r--r--examples/spectrum/3rdparty/fftreal/test_fnc.h53
-rw-r--r--examples/spectrum/3rdparty/fftreal/test_fnc.hpp56
-rw-r--r--examples/spectrum/3rdparty/fftreal/test_settings.h45
-rw-r--r--examples/spectrum/3rdparty/fftreal/testapp.dpr150
-rw-r--r--examples/spectrum/README.txt103
-rw-r--r--examples/spectrum/doc/images/spectrum-example.pngbin79769 -> 0 bytes
-rw-r--r--examples/spectrum/doc/src/spectrum.qdoc28
-rw-r--r--examples/spectrum/spectrum.pri18
-rw-r--r--examples/spectrum/spectrum.pro13
-rw-r--r--examples/spectrum/spectrumapp/engine.cpp613
-rw-r--r--examples/spectrum/spectrumapp/engine.h247
-rw-r--r--examples/spectrum/spectrumapp/frequencyspectrum.cpp67
-rw-r--r--examples/spectrum/spectrumapp/frequencyspectrum.h76
-rw-r--r--examples/spectrum/spectrumapp/main.cpp203
-rw-r--r--examples/spectrum/spectrumapp/soundFiles/Rockhop.wavbin1059308 -> 0 bytes
-rw-r--r--examples/spectrum/spectrumapp/soundFiles/futurebells_beat.wavbin352084 -> 0 bytes
-rw-r--r--examples/spectrum/spectrumapp/soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wavbin1055502 -> 0 bytes
-rw-r--r--examples/spectrum/spectrumapp/spectrum.h111
-rw-r--r--examples/spectrum/spectrumapp/spectrum.qrc7
-rw-r--r--examples/spectrum/spectrumapp/spectrumanalyser.cpp209
-rw-r--r--examples/spectrum/spectrumapp/spectrumanalyser.h150
-rw-r--r--examples/spectrum/spectrumapp/spectrumapp.pro80
-rw-r--r--examples/spectrum/spectrumapp/utils.cpp117
-rw-r--r--examples/spectrum/spectrumapp/utils.h90
-rw-r--r--examples/spectrum/spectrumapp/wavfile.cpp129
-rw-r--r--examples/surface/doc/images/surface-example.pngbin0 -> 366836 bytes
-rw-r--r--examples/surface/doc/src/surface.qdoc131
-rw-r--r--examples/surface/main.cpp210
-rw-r--r--examples/surface/mountain.pngbin0 -> 34540 bytes
-rw-r--r--examples/surface/surface.pro17
-rw-r--r--examples/surface/surface.qrc5
-rw-r--r--examples/surface/surfacegraph.cpp242
-rw-r--r--examples/surface/surfacegraph.h83
-rw-r--r--examples/surfacechart/chartmodifier.cpp126
-rw-r--r--examples/surfacechart/chartmodifier.h53
-rw-r--r--examples/surfacechart/main.cpp171
-rw-r--r--examples/surfacechart/surfacechart.pro11
-rw-r--r--examples/widget/chart.cpp440
-rw-r--r--examples/widget/doc/images/widget-example.pngbin233825 -> 0 bytes
-rw-r--r--examples/widget/doc/src/widget.qdoc29
-rw-r--r--examples/widget/main.cpp297
-rw-r--r--examples/widget/widget.pro10
181 files changed, 15324 insertions, 18532 deletions
diff --git a/examples/audiolevels/audiolevels.cpp b/examples/audiolevels/audiolevels.cpp
new file mode 100644
index 00000000..e1788936
--- /dev/null
+++ b/examples/audiolevels/audiolevels.cpp
@@ -0,0 +1,78 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "audiolevelsiodevice.h"
+#include "audiolevels.h"
+
+#include <QtDataVisualization/qbardataproxy.h>
+#include <QtDataVisualization/q3dvalueaxis.h>
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dcamera.h>
+
+#include <QAudioDeviceInfo>
+#include <QAudioInput>
+
+QT_DATAVISUALIZATION_USE_NAMESPACE
+
+AudioLevels::AudioLevels(Q3DBars *graph, QObject *parent)
+ : QObject(parent),
+ m_graph(graph),
+ m_device(0),
+ m_audioInput(0)
+{
+ // Set up the graph
+ m_graph->setBarThickness(0.5);
+ m_graph->setBarSpacing(QSizeF(0.0, 1.0));
+ m_graph->setGridVisible(false);
+ m_graph->setBackgroundVisible(false);
+ m_graph->valueAxis()->setRange(0.0, 2.0);
+ m_graph->setShadowQuality(QDataVis::ShadowQualityNone);
+ m_graph->scene()->activeCamera()->setCameraPosition(-20.0, 10.0, 20);
+ m_graph->setTheme(QDataVis::ThemeIsabelle);
+ m_graph->setBarType(QDataVis::MeshStyleBars);
+
+ //! [0]
+ QAudioFormat formatAudio;
+ formatAudio.setSampleRate(8000);
+ formatAudio.setChannelCount(1);
+ formatAudio.setSampleSize(8);
+ formatAudio.setCodec("audio/pcm");
+ formatAudio.setByteOrder(QAudioFormat::LittleEndian);
+ formatAudio.setSampleType(QAudioFormat::UnSignedInt);
+
+ QAudioDeviceInfo inputDevices = QAudioDeviceInfo::defaultInputDevice();
+ m_audioInput = new QAudioInput(inputDevices, formatAudio, this);
+#ifdef Q_OS_MAC
+ // Mac seems to wait for entire buffer to fill before calling writeData, so use smaller buffer
+ m_audioInput->setBufferSize(256);
+#else
+ m_audioInput->setBufferSize(1024);
+#endif
+
+ m_device = new AudioLevelsIODevice(m_graph->activeDataProxy(), this);
+ m_device->open(QIODevice::WriteOnly);
+
+ m_audioInput->start(m_device);
+ //! [0]
+}
+
+AudioLevels::~AudioLevels()
+{
+ m_audioInput->stop();
+ m_device->close();
+}
diff --git a/examples/spectrum/spectrumapp/wavfile.h b/examples/audiolevels/audiolevels.h
index e408911b..db1d8936 100644
--- a/examples/spectrum/spectrumapp/wavfile.h
+++ b/examples/audiolevels/audiolevels.h
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,29 +16,30 @@
**
****************************************************************************/
-#ifndef WAVFILE_H
-#define WAVFILE_H
+#ifndef AUDIOLEVELS_H
+#define AUDIOLEVELS_H
-#include <QObject>
-#include <QFile>
-#include <QAudioFormat>
+#include <QtDataVisualization/q3dbars.h>
-class WavFile : public QFile
-{
-public:
- WavFile(QObject *parent = 0);
+QT_DATAVISUALIZATION_USE_NAMESPACE
- using QFile::open;
- bool open(const QString &fileName);
- const QAudioFormat &fileFormat() const;
- qint64 headerLength() const;
+class AudioLevelsIODevice;
+class QAudioInput;
-private:
- bool readHeader();
+class AudioLevels : public QObject
+{
+ Q_OBJECT
+
+public:
+ AudioLevels(Q3DBars *graph, QObject *parent = 0);
+ ~AudioLevels();
private:
- QAudioFormat m_fileFormat;
- qint64 m_headerLength;
+ //! [0]
+ Q3DBars *m_graph;
+ AudioLevelsIODevice *m_device;
+ QAudioInput *m_audioInput;
+ //! [0]
};
-#endif // WAVFILE_H
+#endif
diff --git a/examples/audiolevels/audiolevels.pro b/examples/audiolevels/audiolevels.pro
new file mode 100644
index 00000000..7df4379b
--- /dev/null
+++ b/examples/audiolevels/audiolevels.pro
@@ -0,0 +1,20 @@
+!include( ../examples.pri ) {
+ error( "Couldn't find the examples.pri file!" )
+}
+
+TARGET = audiolevels
+
+QT += multimedia
+
+SOURCES += main.cpp \
+ audiolevels.cpp \
+ audiolevelsiodevice.cpp
+
+HEADERS += audiolevels.h \
+ audiolevelsiodevice.h
+
+INSTALLS += target
+
+OTHER_FILES += doc/src/* \
+ doc/images/*
+
diff --git a/examples/audiolevels/audiolevelsiodevice.cpp b/examples/audiolevels/audiolevelsiodevice.cpp
new file mode 100644
index 00000000..11cba5aa
--- /dev/null
+++ b/examples/audiolevels/audiolevelsiodevice.cpp
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "audiolevelsiodevice.h"
+#include <QDebug>
+
+QT_DATAVISUALIZATION_USE_NAMESPACE
+
+//! [1]
+static const int resolution = 8;
+static const int rowSize = 800;
+static const int rowCount = 7; // Must be odd number
+static const int middleRow = rowCount / 2;
+//! [1]
+
+AudioLevelsIODevice::AudioLevelsIODevice(QBarDataProxy *proxy, QObject *parent)
+ : QIODevice(parent),
+ m_proxy(proxy),
+ m_array(new QBarDataArray)
+{
+ // We reuse the existing array for maximum performance, so construct the array here
+ //! [0]
+ m_array->reserve(rowCount);
+ for (int i = 0; i < rowCount; i++)
+ m_array->append(new QBarDataRow(rowSize));
+ //! [0]
+
+ qDebug() << "Total of" << (rowSize * rowCount) << "items in the array.";
+}
+
+// Implementation required for this pure virtual function
+qint64 AudioLevelsIODevice::readData(char *data, qint64 maxSize)
+{
+ Q_UNUSED(data)
+ Q_UNUSED(maxSize)
+ return -1;
+}
+
+//! [2]
+qint64 AudioLevelsIODevice::writeData(const char *data, qint64 maxSize)
+{
+ // The amount of new data available.
+ int newDataSize = maxSize / resolution;
+
+ // If we get more data than array size, we need to adjust the start index for new data.
+ int newDataStartIndex = qMax(0, (newDataSize - rowSize));
+
+ // Move the old data ahead in the rows (only do first half of rows + middle one now).
+ // If the amount of new data was larger than row size, skip copying.
+ if (!newDataStartIndex) {
+ for (int i = 0; i <= middleRow; i++) {
+ QBarDataItem *srcPos = m_array->at(i)->data();
+ QBarDataItem *dstPos = srcPos + newDataSize;
+ memmove(dstPos, srcPos, (rowSize - newDataSize) * sizeof(QBarDataItem));
+ }
+ }
+
+ // Insert data in reverse order, so that newest data is always at the front of the row.
+ int index = 0;
+ for (int i = newDataSize - 1; i >= newDataStartIndex; i--) {
+ // Add 0.01 to the value to avoid gaps in the graph (i.e. zero height bars).
+ qreal value = qreal(quint8(data[resolution * i]) - 128) / 2.0 + 0.01;
+ (*m_array->at(middleRow))[index].setValue(value);
+ // Insert a fractional value into front half of the rows.
+ for (int j = 1; j <= middleRow; j++) {
+ qreal fractionalValue = value / qreal(j + 1);
+ (*m_array->at(middleRow - j))[index].setValue(fractionalValue);
+ }
+ index++;
+ }
+
+ // Copy the front half of rows to the back half for symmetry.
+ index = 0;
+ for (int i = rowCount - 1; i > middleRow; i--) {
+ QBarDataItem *srcPos = m_array->at(index++)->data();
+ QBarDataItem *dstPos = m_array->at(i)->data();
+ memcpy(dstPos, srcPos, rowSize * sizeof(QBarDataItem));
+ }
+
+ // Reset the proxy array now that data has been updated to trigger a redraw.
+ m_proxy->resetArray(m_array);
+
+ return maxSize;
+}
+//! [2]
+
+
diff --git a/examples/audiolevels/audiolevelsiodevice.h b/examples/audiolevels/audiolevelsiodevice.h
new file mode 100644
index 00000000..8d665fe8
--- /dev/null
+++ b/examples/audiolevels/audiolevelsiodevice.h
@@ -0,0 +1,44 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#ifndef AUDIOLEVELSIODEVICE_H
+#define AUDIOLEVELSIODEVICE_H
+
+#include <QtDataVisualization/qbardataproxy.h>
+#include <QIODevice>
+
+QT_DATAVISUALIZATION_USE_NAMESPACE
+
+class AudioLevelsIODevice : public QIODevice
+{
+ Q_OBJECT
+public:
+ explicit AudioLevelsIODevice(QBarDataProxy *proxy, QObject *parent = 0);
+
+protected:
+ qint64 readData(char *data, qint64 maxSize);
+ qint64 writeData(const char *data, qint64 maxSize);
+
+private:
+ //! [0]
+ QBarDataProxy *m_proxy;
+ QBarDataArray *m_array;
+ //! [0]
+};
+
+#endif
diff --git a/examples/audiolevels/doc/images/audiolevels-example.png b/examples/audiolevels/doc/images/audiolevels-example.png
new file mode 100644
index 00000000..47c982d9
--- /dev/null
+++ b/examples/audiolevels/doc/images/audiolevels-example.png
Binary files differ
diff --git a/examples/audiolevels/doc/src/audiolevels.qdoc b/examples/audiolevels/doc/src/audiolevels.qdoc
new file mode 100644
index 00000000..3d392487
--- /dev/null
+++ b/examples/audiolevels/doc/src/audiolevels.qdoc
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+/*!
+ \example audiolevels
+ \title Audiolevels Example
+ \ingroup qtdatavisualization_examples
+ \brief Simple application showing real time audio data.
+
+ The audiolevels example shows how feed real-time dynamic data to a graph using Q3DBars.
+
+ This example reads the audio levels from a microphone and displays those levels
+ in a bar graph. To increase the load for demonstration purposes, and to make the
+ graph little fancier, slightly modified data is used to fill multiple rows.
+
+ \image audiolevels-example.png
+
+ The interesting stuff happens in AudioLevels and AudioLevelsIODevice classes, so we
+ concentrate on those and skip explaining the basic Q3DBars functionality - for that see
+ \l{Bars Example}.
+
+ AudioLevelsIODevice subclasses QIODevice and is given as input device for QAudioInput
+ class, so it receives microphone data.
+
+ In the header file for QAudioInput class we declare necessary members:
+
+ \snippet ../examples/audiolevels/audiolevels.h 0
+
+ And initialize the microphone listening in the source:
+
+ \snippet ../examples/audiolevels/audiolevels.cpp 0
+
+ In the header file for AudioLevelsIODevice class we store pointers to the data proxy and
+ also the data array we give to the proxy, because we reuse the same array to keep memory
+ reallocations to the minimum:
+
+ \snippet ../examples/audiolevels/audiolevelsiodevice.h 0
+
+ In the source file we define some static constants to define size of the data array and
+ the middle row index, as well as the resolution of the visualization. You may need to adjust
+ these values to get decent performance in low-end devices:
+
+ \snippet ../examples/audiolevels/audiolevelsiodevice.cpp 1
+
+ The \c resolution constant indicates the sample rate, e.g. value 8 means every eighth
+ byte from audio input is visualized. This is necessary to make the data readable, as it would
+ otherwise make the graph scroll too fast.
+
+ In the AudioLevelsIODevice class constructor we initialize the data array:
+
+ \snippet ../examples/audiolevels/audiolevelsiodevice.cpp 0
+
+ The AudioLevelsIODevice::writeData function is called whenever there is new audio data
+ available to be visualized. There we move the old data along the rows and insert new
+ data in the beginning of the rows:
+
+ \snippet ../examples/audiolevels/audiolevelsiodevice.cpp 2
+
+ We use a couple of techniques here to improve performance. First off, we reuse
+ the existing data array, as this allows us to avoid any extra memory allocations in our
+ application code. This also means the data array dimensions do not change, which further
+ improves efficiency in the bar graph renderer.
+ Secondly, since the rows are QVectors of QBarDataItems, which do not allocate any data that needs
+ deletion, we can utilize memmove and memcpy functions to quickly move and copy data around.
+
+ \note In the future versions of Qt Data Visualization, QBarDataItem might get extended so that
+ it does allocate some memory to store other optional bar properties besides the value.
+ In use cases where those optional properties are used, using memmove and memcpy would lead to
+ memory leaks, so use them with care.
+*/
diff --git a/examples/qmlmaps/doc/src/qmlmaps.qdoc b/examples/audiolevels/main.cpp
index f27dc126..9d16610c 100644
--- a/examples/qmlmaps/doc/src/qmlmaps.qdoc
+++ b/examples/audiolevels/main.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,14 +16,23 @@
**
****************************************************************************/
-/*!
- \example qmlmaps
- \title Qt Quick 2 Maps Example
+#include "audiolevels.h"
- The Qt Quick 2 maps example shows how to make a simple maps visualization using Q3DMaps using Qt
- Quick 2.
+#include <QGuiApplication>
+#include <QAudio>
- \image qmlmaps-example.png
+using namespace QtDataVisualization;
- TODO
-*/
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ Q3DBars window;
+ window.resize(1024, 768);
+ window.setTitle("Qt Data Visualization - Microphone audio levels visualizer");
+ window.show();
+
+ AudioLevels audioLevels(&window);
+
+ return app.exec();
+}
diff --git a/examples/barchart/doc/images/barchart-example.png b/examples/barchart/doc/images/barchart-example.png
deleted file mode 100644
index 0f321c95..00000000
--- a/examples/barchart/doc/images/barchart-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/barchart/main.cpp b/examples/barchart/main.cpp
deleted file mode 100644
index 77230b5d..00000000
--- a/examples/barchart/main.cpp
+++ /dev/null
@@ -1,308 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include <QtDataVis3D/q3dbars.h>
-#include <QtDataVis3D/qcategoryaxis.h>
-#include <QtDataVis3D/qitemmodelbardataproxy.h>
-#include <QtDataVis3D/qvalueaxis.h>
-
-#include <QApplication>
-#include <QVBoxLayout>
-#include <QTableWidget>
-#include <QScreen>
-#include <QTimer>
-#include <QFont>
-#include <QDebug>
-
-//#define CYCLE_THROUGH_STYLES
-//#define CYCLE_THROUGH_PRESET_CAMERAS
-//#define CYCLE_THROUGH_THEMES
-#define USE_STATIC_DATA
-
-using namespace QtDataVis3D;
-
-class ChartDataGenerator : public QObject
-{
-public:
- explicit ChartDataGenerator(Q3DBars *barchart, QTableWidget *tableWidget);
- ~ChartDataGenerator();
-
- void setupModel();
- void addRow();
- void changeStyle();
- void changePresetCamera();
- void changeTheme();
- void start();
-
-private:
- Q3DBars *m_chart;
- QTimer *m_dataTimer;
- QTimer *m_styleTimer;
- QTimer *m_presetTimer;
- QTimer *m_themeTimer;
- int m_columnCount;
- int m_rowCount;
- QTableWidget *m_tableWidget; // not owned
-};
-
-ChartDataGenerator::ChartDataGenerator(Q3DBars *barchart, QTableWidget *tableWidget)
- : m_chart(barchart),
- m_dataTimer(0),
- m_styleTimer(0),
- m_presetTimer(0),
- m_themeTimer(0),
- m_columnCount(100),
- m_rowCount(50),
- m_tableWidget(tableWidget)
-{
- // Set up bar specifications; make the bars as wide as they are deep,
- // and add a small space between the bars
- m_chart->setBarSpecs(QSizeF(1.0f, 1.0f), QSizeF(0.2f, 0.2f), true);
-
-#ifndef USE_STATIC_DATA
- // Set up sample space; make it as deep as it's wide
- m_chart->setupSampleSpace(m_rowCount, m_columnCount);
- m_tableWidget->setColumnCount(m_columnCount);
-#endif
-
- // Set bar type to smooth bar
-#ifndef CYCLE_THROUGH_STYLES
- m_chart->setBarType(QDataVis::Pyramids, false);
-#endif
-
-#ifndef USE_STATIC_DATA
- // Set selection mode to full
- m_chart->setSelectionMode(QDataVis::ModeItemRowAndColumn);
-#else
- // Set selection mode to zoom row
- m_chart->setSelectionMode(QDataVis::ModeZoomRow);
- m_chart->setFont(QFont("Courier", 25));
-#endif
-
-#ifndef CYCLE_THROUGH_THEMES
- // Set bar colors
- m_chart->setBarColor(QColor(Qt::gray), QColor(Qt::red), QColor(Qt::darkBlue));
-#else
- m_chart->setLabelTransparency(QDataVis::TransparencyNone);
-#endif
-
- // Set preset camera position
- m_chart->setCameraPreset(QDataVis::PresetFront);
-}
-
-ChartDataGenerator::~ChartDataGenerator()
-{
- if (m_dataTimer) {
- m_dataTimer->stop();
- delete m_dataTimer;
- }
- if (m_styleTimer) {
- m_styleTimer->stop();
- delete m_styleTimer;
- }
- if (m_presetTimer) {
- m_presetTimer->stop();
- delete m_presetTimer;
- }
- if (m_themeTimer) {
- m_themeTimer->stop();
- delete m_themeTimer;
- }
- delete m_chart;
-}
-
-void ChartDataGenerator::start()
-{
-#ifndef USE_STATIC_DATA
- m_dataTimer = new QTimer();
- m_dataTimer->setTimerType(Qt::CoarseTimer);
- m_dataTimer->setInterval(20);
- QObject::connect(m_dataTimer, &QTimer::timeout, this, &ChartDataGenerator::addRow);
- m_dataTimer->start(20);
-#else
- setupModel();
-#endif
-
-#ifdef CYCLE_THROUGH_STYLES
- // Change bar style every 10 seconds
- m_styleTimer = new QTimer();
- m_styleTimer->setTimerType(Qt::CoarseTimer);
- m_styleTimer->setInterval(10000);
- QObject::connect(m_styleTimer, &QTimer::timeout, this, &ChartDataGenerator::changeStyle);
- m_styleTimer->start(10000);
-#endif
-
-#ifdef CYCLE_THROUGH_PRESET_CAMERAS
- // Change preset camera every 5 seconds
- m_presetTimer = new QTimer();
- m_presetTimer->setTimerType(Qt::CoarseTimer);
- m_presetTimer->setInterval(5000);
- QObject::connect(m_presetTimer, &QTimer::timeout, this,
- &ChartDataGenerator::changePresetCamera);
- m_presetTimer->start(5000);
-#endif
-
-#ifdef CYCLE_THROUGH_THEMES
- // Change theme every 2 seconds
- m_themeTimer = new QTimer();
- m_themeTimer->setTimerType(Qt::CoarseTimer);
- m_themeTimer->setInterval(3000);//2000);
- QObject::connect(m_themeTimer, &QTimer::timeout, this, &ChartDataGenerator::changeTheme);
- m_themeTimer->start(3000);//2000);
-#endif
-}
-
-void ChartDataGenerator::setupModel()
-{
- // Set up row and column names
- QStringList days;
- days << "Monday" << "Tuesday" << "Wednesday" << "Thursday" << "Friday" << "Saturday" << "Sunday";
- QStringList weeks;
- weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5";
-
- // Set up data Mon Tue Wed Thu Fri Sat Sun
- float hours[5][7] = {{2.0f, 1.0f, 3.0f, 0.2f, 1.0f, 5.0f, 10.0f}, // week 1
- {0.5f, 1.0f, 3.0f, 1.0f, 2.0f, 2.0f, 3.0f}, // week 2
- {1.0f, 1.0f, 2.0f, 1.0f, 4.0f, 4.0f, 4.0f}, // week 3
- {0.0f, 1.0f, 0.0f, 0.0f, 2.0f, 2.0f, 0.3f}, // week 4
- {3.0f, 3.0f, 6.0f, 2.0f, 2.0f, 1.0f, 1.0f}}; // week 5
-
- // Add labels
- m_chart->rowAxis()->setTitle("Week of year");
- m_chart->columnAxis()->setTitle("Day of week");
- m_chart->valueAxis()->setTitle("Hours playing banjo");
- m_chart->valueAxis()->setSegmentCount(5);
- m_chart->rowAxis()->setCategoryLabels(weeks);
- m_chart->columnAxis()->setCategoryLabels(days);
-
- m_tableWidget->setRowCount(5);
- m_tableWidget->setColumnCount(7);
- m_tableWidget->setHorizontalHeaderLabels(days);
- m_tableWidget->setVerticalHeaderLabels(weeks);
-
- for (int week = 0; week < weeks.size(); week++) {
- for (int day = 0; day < days.size(); day++) {
- QModelIndex index = m_tableWidget->model()->index(week, day);
- m_tableWidget->model()->setData(index, hours[week][day]);
- }
- }
-
- // Set up sample space based on prepared data
- m_chart->setupSampleSpace(weeks.size(), days.size());
-}
-
-void ChartDataGenerator::addRow()
-{
- m_tableWidget->model()->insertRow(0);
- for (int i = 0; i < m_columnCount; i++) {
- QModelIndex index = m_tableWidget->model()->index(0, i);
- m_tableWidget->model()->setData(index,
- ((qreal)i / (qreal)m_columnCount) / 2.0 + (qreal)(rand() % 30) / 100.0);
- }
-}
-
-void ChartDataGenerator::changeStyle()
-{
- static int model = 0;
- switch (model) {
- case 0:
- m_chart->setBarType(QDataVis::Cylinders, false);
- break;
- case 1:
- m_chart->setBarType(QDataVis::Cylinders, true);
- break;
- case 2:
- m_chart->setBarType(QDataVis::Cones, false);
- break;
- case 3:
- m_chart->setBarType(QDataVis::Cones, true);
- break;
- case 4:
- m_chart->setBarType(QDataVis::Bars, false);
- break;
- case 5:
- m_chart->setBarType(QDataVis::Bars, true);
- break;
- case 6:
- m_chart->setBarType(QDataVis::Pyramids, false);
- break;
- case 7:
- m_chart->setBarType(QDataVis::Pyramids, true);
- break;
- }
- model++;
- if (model > 7)
- model = 0;
-}
-
-void ChartDataGenerator::changePresetCamera()
-{
- static int preset = 0;
-
- m_chart->setCameraPreset((QDataVis::CameraPreset)preset);
-
- if (++preset > (int)QDataVis::PresetDirectlyAboveCCW45)
- preset = 0;
-}
-
-void ChartDataGenerator::changeTheme()
-{
- static int theme = 0;
-
- m_chart->setTheme((QDataVis::ColorTheme)theme);
-
- if (++theme > (int)QDataVis::ThemeLight)
- theme = 0;
-}
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
-
- QWidget *widget = new QWidget;
- QVBoxLayout *layout = new QVBoxLayout(widget);
-
- Q3DBars *chart = new Q3DBars();
- QSize screenSize = chart->screen()->size();
-
- QWidget *container = QWidget::createWindowContainer(chart);
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- widget->setWindowTitle(QStringLiteral("Hours playing banjo"));
-
- QTableWidget *tableWidget = new QTableWidget(0, 0, widget);
-
- layout->addWidget(tableWidget);
- layout->addWidget(container, 1);
-
- // We don't need to initialize the mapping object in any way, as it defaults
- // to row/column support and uses the Qt::DisplayRole role for value role by default.
- QItemModelBarDataMapping mapping;
- QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model(), &mapping);
- chart->setDataProxy(proxy);
-
- ChartDataGenerator *generator = new ChartDataGenerator(chart, tableWidget);
- generator->start();
-
- widget->show();
-
- return app.exec();
-}
diff --git a/examples/mapdata/mapdata.pro b/examples/bars/bars.pro
index 091fdc7c..e4e2c5fa 100644
--- a/examples/mapdata/mapdata.pro
+++ b/examples/bars/bars.pro
@@ -2,12 +2,12 @@
error( "Couldn't find the examples.pri file!" )
}
-SOURCES += main.cpp mapdata.cpp
-HEADERS += mapdata.h
+SOURCES += main.cpp graphmodifier.cpp
+HEADERS += graphmodifier.h
QT += widgets
INSTALLS += target
-RESOURCES += \
- mapdata.qrc
+OTHER_FILES += doc/src/* \
+ doc/images/*
diff --git a/examples/bars/doc/images/bars-example.png b/examples/bars/doc/images/bars-example.png
new file mode 100644
index 00000000..fb30a944
--- /dev/null
+++ b/examples/bars/doc/images/bars-example.png
Binary files differ
diff --git a/examples/bars/doc/src/bars.qdoc b/examples/bars/doc/src/bars.qdoc
new file mode 100644
index 00000000..379aa871
--- /dev/null
+++ b/examples/bars/doc/src/bars.qdoc
@@ -0,0 +1,159 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+/*!
+ \example bars
+ \title Bars Example
+ \ingroup qtdatavisualization_examples
+ \brief Using Q3DBars in a widget application.
+
+ The bars example shows how to make a 3D bar graph using Q3DBars and combining the use of
+ widgets for adjusting several adjustable qualities. The example shows how to:
+
+ \list
+ \li Create an application with Q3DBars and some widgets
+ \li Use QBarDataProxy to set data to the graph
+ \li Adjust some graph properties using widget controls
+ \endlist
+
+ It also demonstrates how having negative bar values affects the graph.
+
+ \image bars-example.png
+
+ \section1 Creating the application
+
+ First, in main.cpp, we create a QApplication, instantiate Q3DBars and a window container
+ for it:
+
+ \snippet ../examples/bars/main.cpp 0
+
+ The call to QWidget::createWindowContainer is required, as all data visualization types
+ (Q3DBars, Q3DScatter, Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
+ as a widget any other way.
+
+ Then we'll create horizontal and vertical layouts. We'll add the graph and the vertical
+ layout into the horizontal one:
+
+ \snippet ../examples/bars/main.cpp 1
+
+ We're not using the vertical layout for anything yet, but we'll get back to it in
+ \l {Using widgets to control the graph}
+
+ Next, let's create another class to handle the data addition and other interaction with the
+ graph. Let's call it GraphModifier (See \l {Setting up the graph} and
+ \l {Adding data to the graph} for details):
+
+ \snippet ../examples/bars/main.cpp 2
+
+ The application main is done and we can show the graph and start the event loop:
+
+ \snippet ../examples/bars/main.cpp 3
+
+ \section1 Setting up the graph
+
+ Let's set up the graph in the constructor of the GraphModifier class we instantiated in the
+ application main:
+
+ \snippet ../examples/bars/graphmodifier.cpp 0
+
+ Let's take a closer look at parts of the code.
+
+ First we're creating the axes and the proxy into member variables to support changing them
+ easily later on, if we want to:
+
+ \snippet ../examples/bars/graphmodifier.cpp 1
+
+ Then we're setting some of the visual qualities for the graph:
+
+ \snippet ../examples/bars/graphmodifier.cpp 2
+
+ We're also setting up the axes and adding them to the graph. Notice that we're not setting them
+ active yet:
+
+ \snippet ../examples/bars/graphmodifier.cpp 3
+
+ And add the proxy. Note that we're not setting it active yet, but just adding it:
+
+ \snippet ../examples/bars/graphmodifier.cpp 4
+
+ That concludes setting up the graph.
+
+ \section1 Adding data to the graph
+
+ At the end of the constructor there's a call:
+
+ \code resetTemperatureData(); \endcode
+
+ The method is used to add data to the proxy:
+
+ \snippet ../examples/bars/graphmodifier.cpp 5
+
+ Now the data is in the proxy, but not in the graph. We have not set the proxy active yet.
+
+ In application main, we called \c {modifier->start()} after constructing all the necessary
+ objects. This is what is done in it:
+
+ \snippet ../examples/bars/graphmodifier.cpp 6
+
+ Finally we set the proxy and the axes active. Now our graph has the data and is ready to be
+ used.
+
+ \section1 Using widgets to control the graph
+
+ There isn't much interaction yet, so let's continue by adding some widgets back in the
+ application main. Let's just focus on two:
+
+ \snippet ../examples/bars/main.cpp 4
+
+ We can use these to rotate the graph using slider widgets instead of just using the mouse or
+ touch.
+
+ Let's add them to the vertical layout we created earlier:
+
+ \snippet ../examples/bars/main.cpp 5
+
+ Then we'll connect them to methods in GraphModifier:
+
+ \snippet ../examples/bars/main.cpp 6
+
+ Here are the methods in GraphModifier the signals were connected to:
+
+ \snippet ../examples/bars/graphmodifier.cpp 7
+
+ Now these two sliders can be used to rotate the graph.
+
+ And so we have an application in which we can control:
+
+ \list
+ \li Graph rotation
+ \li Label style
+ \li Camera preset
+ \li Background visibility
+ \li Grid visibility
+ \li Bar shading smoothness
+ \li Bar style
+ \li Selection mode
+ \li Theme
+ \li Shadow quality
+ \li Font
+ \li Font size
+ \endlist
+
+ \section1 Example contents
+
+*/
diff --git a/examples/bars/graphmodifier.cpp b/examples/bars/graphmodifier.cpp
new file mode 100644
index 00000000..0b33bde0
--- /dev/null
+++ b/examples/bars/graphmodifier.cpp
@@ -0,0 +1,229 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "graphmodifier.h"
+#include <QtDataVisualization/q3dcategoryaxis.h>
+#include <QtDataVisualization/q3dvalueaxis.h>
+#include <QtDataVisualization/qbardataproxy.h>
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dcamera.h>
+#include <QTime>
+
+QT_DATAVISUALIZATION_USE_NAMESPACE
+
+const QString celsiusString = QString(QChar(0xB0)) + "C";
+
+//! [0]
+GraphModifier::GraphModifier(Q3DBars *bargraph)
+ : m_graph(bargraph),
+ m_xRotation(0.0),
+ m_yRotation(0.0),
+ m_fontSize(30),
+ m_segments(4),
+ m_subSegments(3),
+ m_minval(-20.0),
+ m_maxval(20.0),
+ //! [1]
+ m_temperatureAxis(new Q3DValueAxis),
+ m_yearAxis(new Q3DCategoryAxis),
+ m_monthAxis(new Q3DCategoryAxis),
+ m_temperatureData(new QBarDataProxy),
+ //! [1]
+ m_style(QDataVis::MeshStyleBevelBars),
+ m_smooth(false)
+{
+ //! [2]
+ m_graph->setBackgroundVisible(false);
+ m_graph->setShadowQuality(QDataVis::ShadowQualitySoftMedium);
+ m_graph->setFont(QFont("Times New Roman", m_fontSize));
+ m_graph->setLabelStyle(QDataVis::LabelStyleFromTheme);
+ //! [2]
+
+ m_months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
+ m_years << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012";
+
+ //! [3]
+ m_temperatureAxis->setTitle("Average temperature");
+ m_temperatureAxis->setSegmentCount(m_segments);
+ m_temperatureAxis->setSubSegmentCount(m_subSegments);
+ m_temperatureAxis->setRange(m_minval, m_maxval);
+ m_temperatureAxis->setLabelFormat(QString(QStringLiteral("%d ") + celsiusString));
+
+ m_yearAxis->setTitle("Year");
+ m_monthAxis->setTitle("Month");
+
+ m_graph->addAxis(m_temperatureAxis);
+ m_graph->addAxis(m_yearAxis);
+ m_graph->addAxis(m_monthAxis);
+ //! [3]
+
+ m_temperatureData->setItemLabelFormat(QStringLiteral("@valueTitle for @colLabel @rowLabel: @valueLabel"));
+
+ //! [4]
+ m_graph->addDataProxy(m_temperatureData);
+ //! [4]
+
+ resetTemperatureData();
+}
+//! [0]
+
+GraphModifier::~GraphModifier()
+{
+ delete m_graph;
+}
+
+void GraphModifier::start()
+{
+ //! [6]
+ m_graph->setActiveDataProxy(m_temperatureData);
+
+ m_graph->setValueAxis(m_temperatureAxis);
+ m_graph->setRowAxis(m_yearAxis);
+ m_graph->setColumnAxis(m_monthAxis);
+ //! [6]
+}
+
+void GraphModifier::resetTemperatureData()
+{
+ //! [5]
+ // Set up data
+ static const qreal temp[7][12] = {
+ {-6.7, -11.7, -9.7, 3.3, 9.2, 14.0, 16.3, 17.8, 10.2, 2.1, -2.6, -0.3}, // 2006
+ {-6.8, -13.3, 0.2, 1.5, 7.9, 13.4, 16.1, 15.5, 8.2, 5.4, -2.6, -0.8}, // 2007
+ {-4.2, -4.0, -4.6, 1.9, 7.3, 12.5, 15.0, 12.8, 7.6, 5.1, -0.9, -1.3}, // 2008
+ {-7.8, -8.8, -4.2, 0.7, 9.3, 13.2, 15.8, 15.5, 11.2, 0.6, 0.7, -8.4}, // 2009
+ {-14.4, -12.1, -7.0, 2.3, 11.0, 12.6, 18.8, 13.8, 9.4, 3.9, -5.6, -13.0}, // 2010
+ {-9.0, -15.2, -3.8, 2.6, 8.3, 15.9, 18.6, 14.9, 11.1, 5.3, 1.8, -0.2}, // 2011
+ {-8.7, -11.3, -2.3, 0.4, 7.5, 12.2, 16.4, 14.1, 9.2, 3.1, 0.3, -12.1} // 2012
+ };
+
+ // Create data array
+ QBarDataArray *dataSet = new QBarDataArray;
+ QBarDataRow *dataRow;
+
+ dataSet->reserve(m_years.size());
+ for (int year = 0; year < m_years.size(); year++) {
+ // Create a data row
+ dataRow = new QBarDataRow(m_months.size());
+ for (int month = 0; month < m_months.size(); month++) {
+ // Add data to the row
+ (*dataRow)[month].setValue(temp[year][month]);
+ }
+ // Add the row to the set
+ dataSet->append(dataRow);
+ }
+
+ // Add data to the graph (the graph assumes ownership of it)
+ m_temperatureData->resetArray(dataSet, m_years, m_months);
+ //! [5]
+}
+
+void GraphModifier::changeStyle(int style)
+{
+ m_style = QDataVis::MeshStyle(style);
+ m_graph->setBarType(m_style, m_smooth);
+}
+
+void GraphModifier::changePresetCamera()
+{
+ static int preset = QDataVis::CameraPresetFrontLow;
+
+ m_graph->scene()->activeCamera()->setCameraPreset((QDataVis::CameraPreset)preset);
+
+ if (++preset > QDataVis::CameraPresetDirectlyBelow)
+ preset = QDataVis::CameraPresetFrontLow;
+}
+
+void GraphModifier::changeTheme(int theme)
+{
+ m_graph->setTheme((QDataVis::Theme)theme);
+}
+
+void GraphModifier::changeLabelStyle()
+{
+ static int style = QDataVis::LabelStyleFromTheme;
+
+ m_graph->setLabelStyle((QDataVis::LabelStyle)style);
+
+ if (++style > QDataVis::LabelStyleTransparent)
+ style = QDataVis::LabelStyleOpaque;
+}
+
+void GraphModifier::changeSelectionMode(int selectionMode)
+{
+ m_graph->setSelectionMode((QDataVis::SelectionMode)selectionMode);
+}
+
+void GraphModifier::changeFont(const QFont &font)
+{
+ QFont newFont = font;
+ newFont.setPointSize(m_fontSize);
+ m_graph->setFont(newFont);
+}
+
+void GraphModifier::changeFontSize(int fontsize)
+{
+ m_fontSize = fontsize;
+ QFont font = m_graph->font();
+ font.setPointSize(m_fontSize);
+ m_graph->setFont(font);
+}
+
+void GraphModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality sq)
+{
+ int quality = int(sq);
+ // Updates the UI component to show correct shadow quality
+ emit shadowQualityChanged(quality);
+}
+
+void GraphModifier::changeShadowQuality(int quality)
+{
+ QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality);
+ m_graph->setShadowQuality(sq);
+ emit shadowQualityChanged(quality);
+}
+
+//! [7]
+void GraphModifier::rotateX(int rotation)
+{
+ m_xRotation = rotation;
+ m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation);
+}
+
+void GraphModifier::rotateY(int rotation)
+{
+ m_yRotation = rotation;
+ m_graph->scene()->activeCamera()->setCameraPosition(m_xRotation, m_yRotation);
+}
+//! [7]
+
+void GraphModifier::setBackgroundEnabled(int enabled)
+{
+ m_graph->setBackgroundVisible((bool)enabled);
+}
+
+void GraphModifier::setGridEnabled(int enabled)
+{
+ m_graph->setGridVisible((bool)enabled);
+}
+
+void GraphModifier::setSmoothBars(int smooth)
+{
+ m_smooth = bool(smooth);
+ m_graph->setBarType(m_style, m_smooth);
+}
diff --git a/examples/widget/chart.h b/examples/bars/graphmodifier.h
index 67280e13..2e18ffd2 100644
--- a/examples/widget/chart.h
+++ b/examples/bars/graphmodifier.h
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,53 +16,41 @@
**
****************************************************************************/
-#ifndef CHARTMODIFIER_H
-#define CHARTMODIFIER_H
+#ifndef GRAPHMODIFIER_H
+#define GRAPHMODIFIER_H
-#include <QtDataVis3D/q3dbars.h>
+#include <QtDataVisualization/q3dbars.h>
#include <QFont>
#include <QDebug>
#include <QStringList>
+#include <QPointer>
-using namespace QtDataVis3D;
+using namespace QtDataVisualization;
-class ChartModifier : public QObject
+class GraphModifier : public QObject
{
Q_OBJECT
public:
- explicit ChartModifier(Q3DBars *barchart);
- ~ChartModifier();
+ explicit GraphModifier(Q3DBars *bargraph);
+ ~GraphModifier();
- void addDataSet();
- void addRow();
- void addRows();
- void changeItem();
- void changeRow();
- void changeRows();
- void removeRow();
- void removeRows();
- void changeStyle();
+ void resetTemperatureData();
void changePresetCamera();
- void changeTheme();
- void changeTransparency();
- void changeSelectionMode();
+ void changeLabelStyle();
void changeFont(const QFont &font);
void changeFontSize(int fontsize);
void rotateX(int rotation);
void rotateY(int rotation);
void setBackgroundEnabled(int enabled);
void setGridEnabled(int enabled);
- void setSpecsX(int barwidth);
- void setSpecsZ(int bardepth);
- void setSpacingSpecsX(int spacing);
- void setSpacingSpecsZ(int spacing);
- void setSampleCountX(int samples);
- void setSampleCountZ(int samples);
+ void setSmoothBars(int smooth);
void start();
- void restart(bool dynamicData);
public slots:
+ void changeStyle(int style);
+ void changeSelectionMode(int selectionMode);
+ void changeTheme(int theme);
void changeShadowQuality(int quality);
void shadowQualityUpdatedByVisual(QDataVis::ShadowQuality shadowQuality);
@@ -70,23 +58,22 @@ signals:
void shadowQualityChanged(int quality);
private:
- Q3DBars *m_chart;
- int m_columnCount;
- int m_rowCount;
- float m_xRotation;
- float m_yRotation;
- bool m_static;
- float m_barWidth;
- float m_barDepth;
- float m_barSpacingX;
- float m_barSpacingZ;
+ Q3DBars *m_graph;
+ qreal m_xRotation;
+ qreal m_yRotation;
int m_fontSize;
int m_segments;
int m_subSegments;
qreal m_minval;
qreal m_maxval;
- QStringList m_genericRowLabels;
- QStringList m_genericColumnLabels;
+ QStringList m_months;
+ QStringList m_years;
+ Q3DValueAxis *m_temperatureAxis;
+ Q3DCategoryAxis *m_yearAxis;
+ Q3DCategoryAxis *m_monthAxis;
+ QBarDataProxy *m_temperatureData;
+ QDataVis::MeshStyle m_style;
+ bool m_smooth;
};
#endif
diff --git a/examples/bars/main.cpp b/examples/bars/main.cpp
new file mode 100644
index 00000000..158244b4
--- /dev/null
+++ b/examples/bars/main.cpp
@@ -0,0 +1,211 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "graphmodifier.h"
+
+#include <QApplication>
+#include <QWidget>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QCheckBox>
+#include <QSlider>
+#include <QFontComboBox>
+#include <QLabel>
+#include <QScreen>
+#include <QFontDatabase>
+
+int main(int argc, char **argv)
+{
+ //! [0]
+ QApplication app(argc, argv);
+ Q3DBars *widgetgraph = new Q3DBars();
+ QWidget *container = QWidget::createWindowContainer(widgetgraph);
+ //! [0]
+
+ QSize screenSize = widgetgraph->screen()->size();
+ container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
+ container->setMaximumSize(screenSize);
+ container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ container->setFocusPolicy(Qt::StrongFocus);
+
+ //! [1]
+ QWidget *widget = new QWidget;
+ QHBoxLayout *hLayout = new QHBoxLayout(widget);
+ QVBoxLayout *vLayout = new QVBoxLayout();
+ hLayout->addWidget(container, 1);
+ hLayout->addLayout(vLayout);
+ //! [1]
+
+ widget->setWindowTitle(QStringLiteral("Average temperatures in Oulu, Finland (2006-2012)"));
+
+ QComboBox *themeList = new QComboBox(widget);
+ themeList->addItem(QStringLiteral("Qt"));
+ themeList->addItem(QStringLiteral("Primary Colors"));
+ themeList->addItem(QStringLiteral("Digia"));
+ themeList->addItem(QStringLiteral("Stone Moss"));
+ themeList->addItem(QStringLiteral("Army Blue"));
+ themeList->addItem(QStringLiteral("Retro"));
+ themeList->addItem(QStringLiteral("Ebony"));
+ themeList->addItem(QStringLiteral("Isabelle"));
+ themeList->setCurrentIndex(0);
+
+ QPushButton *labelButton = new QPushButton(widget);
+ labelButton->setText(QStringLiteral("Change label style"));
+
+ QCheckBox *smoothCheckBox = new QCheckBox(widget);
+ smoothCheckBox->setText(QStringLiteral("Smooth bars"));
+ smoothCheckBox->setChecked(false);
+
+ QComboBox *barStyleList = new QComboBox(widget);
+ barStyleList->addItem(QStringLiteral("Bars"));
+ barStyleList->addItem(QStringLiteral("Pyramids"));
+ barStyleList->addItem(QStringLiteral("Cones"));
+ barStyleList->addItem(QStringLiteral("Cylinders"));
+ barStyleList->addItem(QStringLiteral("Beveled Bars"));
+ barStyleList->setCurrentIndex(4);
+
+ QPushButton *cameraButton = new QPushButton(widget);
+ cameraButton->setText(QStringLiteral("Change camera preset"));
+
+ QComboBox *selectionModeList = new QComboBox(widget);
+ selectionModeList->addItem(QStringLiteral("None"));
+ selectionModeList->addItem(QStringLiteral("Bar"));
+ selectionModeList->addItem(QStringLiteral("Bar and Row"));
+ selectionModeList->addItem(QStringLiteral("Bar and Column"));
+ selectionModeList->addItem(QStringLiteral("Bar, Row and Column"));
+ selectionModeList->addItem(QStringLiteral("Slice into Row"));
+ selectionModeList->addItem(QStringLiteral("Slice into Column"));
+ selectionModeList->setCurrentIndex(1);
+
+ QCheckBox *backgroundCheckBox = new QCheckBox(widget);
+ backgroundCheckBox->setText(QStringLiteral("Show background"));
+ backgroundCheckBox->setChecked(false);
+
+ QCheckBox *gridCheckBox = new QCheckBox(widget);
+ gridCheckBox->setText(QStringLiteral("Show grid"));
+ gridCheckBox->setChecked(true);
+
+ //! [4]
+ QSlider *rotationSliderX = new QSlider(Qt::Horizontal, widget);
+ rotationSliderX->setTickInterval(30);
+ rotationSliderX->setTickPosition(QSlider::TicksBelow);
+ rotationSliderX->setMinimum(-180);
+ rotationSliderX->setValue(0);
+ rotationSliderX->setMaximum(180);
+ QSlider *rotationSliderY = new QSlider(Qt::Horizontal, widget);
+ rotationSliderY->setTickInterval(15);
+ rotationSliderY->setTickPosition(QSlider::TicksAbove);
+ rotationSliderY->setMinimum(-90);
+ rotationSliderY->setValue(0);
+ rotationSliderY->setMaximum(90);
+ //! [4]
+
+ QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget);
+ fontSizeSlider->setTickInterval(10);
+ fontSizeSlider->setTickPosition(QSlider::TicksBelow);
+ fontSizeSlider->setMinimum(1);
+ fontSizeSlider->setValue(30);
+ fontSizeSlider->setMaximum(100);
+
+ QFontComboBox *fontList = new QFontComboBox(widget);
+ fontList->setCurrentFont(QFont("Times New Roman"));
+
+ QComboBox *shadowQuality = new QComboBox(widget);
+ shadowQuality->addItem(QStringLiteral("None"));
+ shadowQuality->addItem(QStringLiteral("Low"));
+ shadowQuality->addItem(QStringLiteral("Medium"));
+ shadowQuality->addItem(QStringLiteral("High"));
+ shadowQuality->addItem(QStringLiteral("Low Soft"));
+ shadowQuality->addItem(QStringLiteral("Medium Soft"));
+ shadowQuality->addItem(QStringLiteral("High Soft"));
+ shadowQuality->setCurrentIndex(5);
+
+ //! [5]
+ vLayout->addWidget(new QLabel(QStringLiteral("Rotate horizontally")));
+ vLayout->addWidget(rotationSliderX, 0, Qt::AlignTop);
+ vLayout->addWidget(new QLabel(QStringLiteral("Rotate vertically")));
+ vLayout->addWidget(rotationSliderY, 0, Qt::AlignTop);
+ //! [5]
+ vLayout->addWidget(labelButton, 0, Qt::AlignTop);
+ vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
+ vLayout->addWidget(backgroundCheckBox);
+ vLayout->addWidget(gridCheckBox);
+ vLayout->addWidget(smoothCheckBox, 0, Qt::AlignTop);
+ vLayout->addWidget(new QLabel(QStringLiteral("Change bar style")));
+ vLayout->addWidget(barStyleList);
+ vLayout->addWidget(new QLabel(QStringLiteral("Change selection mode")));
+ vLayout->addWidget(selectionModeList);
+ vLayout->addWidget(new QLabel(QStringLiteral("Change theme")));
+ vLayout->addWidget(themeList);
+ vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
+ vLayout->addWidget(shadowQuality);
+ vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
+ vLayout->addWidget(fontList);
+ vLayout->addWidget(new QLabel(QStringLiteral("Adjust font size")));
+ vLayout->addWidget(fontSizeSlider, 1, Qt::AlignTop);
+
+ //! [2]
+ GraphModifier *modifier = new GraphModifier(widgetgraph);
+ //! [2]
+
+ //! [6]
+ QObject::connect(rotationSliderX, &QSlider::valueChanged, modifier, &GraphModifier::rotateX);
+ QObject::connect(rotationSliderY, &QSlider::valueChanged, modifier, &GraphModifier::rotateY);
+ //! [6]
+
+ QObject::connect(labelButton, &QPushButton::clicked, modifier,
+ &GraphModifier::changeLabelStyle);
+ QObject::connect(cameraButton, &QPushButton::clicked, modifier,
+ &GraphModifier::changePresetCamera);
+
+ QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setBackgroundEnabled);
+ QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setGridEnabled);
+ QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
+ &GraphModifier::setSmoothBars);
+
+ QObject::connect(barStyleList, SIGNAL(currentIndexChanged(int)), modifier,
+ SLOT(changeStyle(int)));
+
+ QObject::connect(selectionModeList, SIGNAL(currentIndexChanged(int)), modifier,
+ SLOT(changeSelectionMode(int)));
+
+ QObject::connect(themeList, SIGNAL(currentIndexChanged(int)), modifier,
+ SLOT(changeTheme(int)));
+
+ QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
+ SLOT(changeShadowQuality(int)));
+
+ QObject::connect(modifier, &GraphModifier::shadowQualityChanged, shadowQuality,
+ &QComboBox::setCurrentIndex);
+ QObject::connect(widgetgraph, &Q3DBars::shadowQualityChanged, modifier,
+ &GraphModifier::shadowQualityUpdatedByVisual);
+
+ QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
+ &GraphModifier::changeFontSize);
+ QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
+ &GraphModifier::changeFont);
+
+ //! [3]
+ widget->show();
+ modifier->start();
+ return app.exec();
+ //! [3]
+}
diff --git a/examples/rainfall/rainfall.pro b/examples/customproxy/customproxy.pro
index af7f963b..2b764a41 100644
--- a/examples/rainfall/rainfall.pro
+++ b/examples/customproxy/customproxy.pro
@@ -3,21 +3,22 @@
}
SOURCES += main.cpp \
- rainfallchart.cpp \
+ rainfallgraph.cpp \
variantdataset.cpp \
variantbardataproxy.cpp \
variantbardatamapping.cpp \
HEADERS += \
- rainfallchart.h \
+ rainfallgraph.h \
variantdataset.h \
variantbardataproxy.h \
variantbardatamapping.h
INSTALLS += target
-RESOURCES += \
- rainfall.qrc
+RESOURCES += customproxy.qrc
-OTHER_FILES += data/raindata.txt
+OTHER_FILES += data/raindata.txt \
+ doc/src/* \
+ doc/images/*
diff --git a/examples/rainfall/rainfall.qrc b/examples/customproxy/customproxy.qrc
index 53cd4915..53cd4915 100644
--- a/examples/rainfall/rainfall.qrc
+++ b/examples/customproxy/customproxy.qrc
diff --git a/examples/customproxy/data/raindata.txt b/examples/customproxy/data/raindata.txt
new file mode 100644
index 00000000..531d66be
--- /dev/null
+++ b/examples/customproxy/data/raindata.txt
@@ -0,0 +1,158 @@
+# Rainfall per month from 2000 to 2012 in Northern Finland (Sodankylä, Utsjoki, Kuusamo)
+# Format: year, month, rainfall
+2000,1, 72,
+2000,2, 47,
+2000,3, 37,
+2000,4, 79,
+2000,5, 42,
+2000,6, 73,
+2000,7, 94,
+2000,8, 37,
+2000,9, 17,
+2000,10,69,
+2000,11,42,
+2000,12,42,
+2001,1, 25,
+2001,2, 47,
+2001,3, 20,
+2001,4, 70,
+2001,5, 27,
+2001,6, 40,
+2001,7, 123,
+2001,8, 39,
+2001,9, 66,
+2001,10,55,
+2001,11,29,
+2001,12,12,
+2002,1, 24,
+2002,2, 45,
+2002,3, 27,
+2002,4, 30,
+2002,5, 16,
+2002,6, 98,
+2002,7, 122,
+2002,8, 20,
+2002,9, 50,
+2002,10,24,
+2002,11,22,
+2002,12,12,
+2003,1, 43,
+2003,2, 17,
+2003,3, 26,
+2003,4, 22,
+2003,5, 60,
+2003,6, 14,
+2003,7, 86,
+2003,8, 77,
+2003,9, 69,
+2003,10,49,
+2003,11,23,
+2003,12,44,
+2004,1, 15,
+2004,2, 19,
+2004,3, 10,
+2004,4, 11,
+2004,5, 41,
+2004,6, 29,
+2004,7, 49,
+2004,8, 72,
+2004,9, 50,
+2004,10,18,
+2004,11,19,
+2004,12,40,
+2005,1, 60,
+2005,2, 24,
+2005,3, 12,
+2005,4, 50,
+2005,5, 88,
+2005,6, 32,
+2005,7, 76,
+2005,8, 55,
+2005,9, 92,
+2005,10,35,
+2005,11,105,
+2005,12,59,
+2006,1, 27,
+2006,2, 18,
+2006,3, 17,
+2006,4, 26,
+2006,5, 24,
+2006,6, 18,
+2006,7, 35,
+2006,8, 28,
+2006,9, 80,
+2006,10,52,
+2006,11,43,
+2006,12,44,
+2007,1, 41,
+2007,2, 21,
+2007,3, 30,
+2007,4, 20,
+2007,5, 53,
+2007,6, 29,
+2007,7, 139,
+2007,8, 52,
+2007,9, 51,
+2007,10,24,
+2007,11,47,
+2007,12,33,
+2008,1, 67,
+2008,2, 19,
+2008,3, 30,
+2008,4, 31,
+2008,5, 29,
+2008,6, 79,
+2008,7, 75,
+2008,8, 99,
+2008,9, 34,
+2008,10,52,
+2008,11,60,
+2008,12,20,
+2009,1, 9,
+2009,2, 22,
+2009,3, 11,
+2009,4, 10,
+2009,5, 69,
+2009,6, 30,
+2009,7, 78,
+2009,8, 93,
+2009,9, 70,
+2009,10,32,
+2009,11,56,
+2009,12,23,
+2010,1, 12,
+2010,2, 28,
+2010,3, 55,
+2010,4, 20,
+2010,5, 65,
+2010,6, 26,
+2010,7, 134,
+2010,8, 57,
+2010,9, 51,
+2010,10,53,
+2010,11,8,
+2010,12,9,
+2011,1, 34,
+2011,2, 20,
+2011,3, 30,
+2011,4, 31,
+2011,5, 42,
+2011,6, 78,
+2011,7, 85,
+2011,8, 33,
+2011,9, 42,
+2011,10,87,
+2011,11,41,
+2011,12,72,
+2012,1, 32,
+2012,2, 42,
+2012,3, 30,
+2012,4, 50,
+2012,5, 30,
+2012,6, 70,
+2012,7, 52,
+2012,8, 20,
+2012,9, 99,
+2012,10,70,
+2012,11,69,
+2012,12,49
diff --git a/examples/customproxy/doc/images/customproxy-example.png b/examples/customproxy/doc/images/customproxy-example.png
new file mode 100644
index 00000000..f1b5c443
--- /dev/null
+++ b/examples/customproxy/doc/images/customproxy-example.png
Binary files differ
diff --git a/examples/customproxy/doc/src/customproxy.qdoc b/examples/customproxy/doc/src/customproxy.qdoc
new file mode 100644
index 00000000..288a7149
--- /dev/null
+++ b/examples/customproxy/doc/src/customproxy.qdoc
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+/*!
+ \example customproxy
+ \title Custom Proxy Example
+ \ingroup qtdatavisualization_examples
+ \brief Using Q3DBars with a custom proxy.
+
+ The custom proxy example shows how to create a custom proxy to use with Q3DBars.
+
+ \image customproxy-example.png
+
+ The interesting thing about custom proxy example is the custom dataset and the corresponding
+ proxy usage, so we concentrate on that and skip explaining the basic Q3DBars functionality
+ - for that see \l{Bars Example}.
+
+ This example defines a simple flexible data set \c VariantDataSet where each data item is a
+ a variant list. Each item can have multiple different values, identified by their index in
+ the list. In this example, the data set is storing monthly rainfall data, where value in
+ index one is the year, index two contains the month, and the third value has the amount
+ of rainfall in that month.
+
+ The custom proxy we provide here is similar to item model based proxies provided by Qt
+ Data Visualization in that it requires a mapping object to interpret the data.
+
+ Let's take a closer look at the custom classes:
+
+ \section1 VariantDataSet
+
+ \c VariantDataSet class provides a simple API:
+
+ \snippet ../examples/customproxy/variantdataset.h 1
+ \dots 0
+ \codeline
+ \snippet ../examples/customproxy/variantdataset.h 0
+
+ As you can see, the data items are simply QVariantList objects, and the data can be added either
+ singly or in lists. The only additional functionality provided is clearing the data set and querying
+ for a reference to the data contained in the set. Signals are emitted when data is added or the set
+ is cleared.
+
+ \section1 VariantBarDataProxy
+
+ \c VariantBarDataProxy is a subclass of QBarDataProxy and provides a simple API of just getters
+ and setters for the data set and the mapping:
+
+ \snippet ../examples/customproxy/variantbardataproxy.h 0
+ \dots 0
+ \codeline
+ \snippet ../examples/customproxy/variantbardataproxy.h 1
+
+ On the implementation side, the proxy listens for the changes in the data set and the mapping,
+ and resolves the data set if any changes are detected. It is not particularly efficient
+ implementation in that any change will cause re-resolving of the entire data set, but that is not
+ an issue for this example. The interesting part is the \c resolveDataSet() method:
+
+ \snippet ../examples/customproxy/variantbardataproxy.cpp 0
+
+ In \c resolveDataSet() method we sort the variant data values into rows and columns based on the
+ mapping. This is very similar to how QItemModelBarDataProxy handles mapping, except we use
+ list indexes instead of item model roles here. Once the values are sorted, we generate \c QBarDataArray
+ out of them, and call \c resetArray() method on the parent class.
+
+ \section1 VariantBarDataMapping
+
+ \c VariantBarDataMapping stores the mapping information between \c VariantDataSet data item indexes
+ and rows, columns, and values of \c QBarDataArray. It also contains the lists of rows and columns to
+ be included in the resolved data:
+
+ \snippet ../examples/customproxy/variantbardatamapping.h 0
+ \dots 0
+ \codeline
+ \snippet ../examples/customproxy/variantbardatamapping.h 1
+ \dots 0
+ \codeline
+ \snippet ../examples/customproxy/variantbardatamapping.h 2
+ \dots 0
+ \codeline
+ \snippet ../examples/customproxy/variantbardatamapping.h 3
+
+ The primary way to use a \c VariantBarDataMapping object is to give the mappings already at the
+ constructor, though they can be set later individually or all together with \c remap() method.
+ A signal is emitted if mapping changes. It is basically a simplified version of
+ QItemModelBarDataMapping adapted to work with variant lists instead of item models.
+
+ \section1 RainfallGraph
+
+ \c RainfallGraph class handles the setup of the graph. The interesting part is the \c addDataSet()
+ method:
+
+ \snippet ../examples/customproxy/rainfallgraph.cpp 0
+
+ Bulk of that method is used for populating the variant data set. Once the set is populated,
+ visualizing the data is trivial with the help of our custom proxy:
+
+ \snippet ../examples/customproxy/rainfallgraph.cpp 1
+*/
diff --git a/examples/rainfall/main.cpp b/examples/customproxy/main.cpp
index 2b9b2861..54ea63e9 100644
--- a/examples/rainfall/main.cpp
+++ b/examples/customproxy/main.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,22 +16,22 @@
**
****************************************************************************/
-#include "rainfallchart.h"
+#include "rainfallgraph.h"
#include <QGuiApplication>
-using namespace QtDataVis3D;
+using namespace QtDataVisualization;
int main(int argc, char **argv)
{
QGuiApplication app(argc, argv);
- Q3DBars rainfall;
- rainfall.resize(1280, 800);
- rainfall.setPosition(QPoint(10, 30));
- rainfall.show();
+ Q3DBars *rainfall = new Q3DBars;
+ rainfall->resize(1280, 800);
+ rainfall->setPosition(QPoint(10, 30));
+ rainfall->show();
- RainfallChart *rainfallchart = new RainfallChart(&rainfall);
- rainfallchart->start();
+ RainfallGraph rainfallgraph(rainfall);
+ rainfallgraph.start();
return app.exec();
}
diff --git a/examples/rainfall/rainfallchart.cpp b/examples/customproxy/rainfallgraph.cpp
index f7bcd82b..3a9f820a 100644
--- a/examples/rainfall/rainfallchart.cpp
+++ b/examples/customproxy/rainfallgraph.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,22 +16,21 @@
**
****************************************************************************/
-#include "rainfallchart.h"
-#include <QtDataVis3D/qcategoryaxis.h>
-#include <QtDataVis3D/qvalueaxis.h>
+#include "rainfallgraph.h"
+#include <QtDataVisualization/q3dcategoryaxis.h>
+#include <QtDataVisualization/q3dvalueaxis.h>
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dcamera.h>
#include <QGuiApplication>
#include <QFont>
#include <QDebug>
#include <QTextStream>
#include <QFile>
-#define CHANGE_CITY_WITH_TIMER
+using namespace QtDataVisualization;
-using namespace QtDataVis3D;
-
-RainfallChart::RainfallChart(Q3DBars *rainfall)
- : m_chart(rainfall),
- m_city(2)
+RainfallGraph::RainfallGraph(Q3DBars *rainfall)
+ : m_graph(rainfall)
{
// In data file the months are in numeric format, so create custom list
for (int i = 1; i <= 12; i++)
@@ -40,120 +39,112 @@ RainfallChart::RainfallChart(Q3DBars *rainfall)
m_columnCount = m_numericMonths.size();
m_proxy = new VariantBarDataProxy;
- m_proxy->setItemLabelFormat(QStringLiteral(" mm"));
- m_chart->setDataProxy(m_proxy);
+ m_graph->setActiveDataProxy(m_proxy);
updateYearsList(2000, 2012);
// Set up bar specifications; make the bars as wide as they are deep,
// and add a small space between the bars
- m_chart->setBarSpecs(QSizeF(1.0f, 1.0f), QSizeF(0.2f, 0.2f), true);
+ m_graph->setBarThickness(1.0);
+ m_graph->setBarSpacing(QSizeF(0.2, 0.2));
// Set axis labels and titles
QStringList months;
months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
- m_chart->rowAxis()->setTitle("Year");
- m_chart->columnAxis()->setTitle("Month");
- m_chart->valueAxis()->setTitle(QString("rainfall (in mm) in city %1").arg(m_city - 1));
- m_chart->rowAxis()->setCategoryLabels(m_years);
- m_chart->columnAxis()->setCategoryLabels(months);
+ m_graph->rowAxis()->setTitle("Year");
+ m_graph->columnAxis()->setTitle("Month");
+ m_graph->valueAxis()->setTitle("rainfall");
+ m_graph->valueAxis()->setLabelFormat("%d mm");
+ m_graph->valueAxis()->setSegmentCount(5);
+ m_graph->rowAxis()->setCategoryLabels(m_years);
+ m_graph->columnAxis()->setCategoryLabels(months);
// Set bar type to cylinder
- m_chart->setBarType(QDataVis::Cylinders, false);
+ m_graph->setBarType(QDataVis::MeshStyleCylinders, false);
// Set shadows to medium
- m_chart->setShadowQuality(QDataVis::ShadowMedium);
+ m_graph->setShadowQuality(QDataVis::ShadowQualityMedium);
// Set font
- m_chart->setFont(QFont("Century Gothic", 40));
+ m_graph->setFont(QFont("Century Gothic", 30));
// Set selection mode to bar and column
- //m_chart->setSelectionMode(ModeItemAndColumn);
- m_chart->setSelectionMode(QDataVis::ModeZoomColumn);
+ m_graph->setSelectionMode(QDataVis::SelectionModeSliceColumn);
// Set theme
- m_chart->setTheme(QDataVis::ThemeBlueNcs);
-
- // Set preset camera position
- m_chart->setCameraPreset(QDataVis::PresetIsometricRightHigh);
+ m_graph->setTheme(QDataVis::ThemeArmyBlue);
- // Disable grid
- m_chart->setGridVisible(false);
+ // Set camera position and zoom
+ m_graph->scene()->activeCamera()->setCameraPreset(QDataVis::CameraPresetIsometricRightHigh);
+ m_graph->scene()->activeCamera()->setZoomLevel(75);
// Set window title
- m_chart->setWindowTitle(QStringLiteral("Monthly rainfall in various cities"));
+ m_graph->setTitle(QStringLiteral("Monthly rainfall in Northern Finland"));
}
-RainfallChart::~RainfallChart()
+RainfallGraph::~RainfallGraph()
{
delete m_mapping;
delete m_dataSet;
- delete m_chart;
+ delete m_graph;
}
-void RainfallChart::start()
+void RainfallGraph::start()
{
addDataSet();
-
-#ifdef CHANGE_CITY_WITH_TIMER
- connect(&m_timer, &QTimer::timeout, this, &RainfallChart::timeout);
- m_timer.start(3000);
-#endif
-}
-
-void RainfallChart::timeout()
-{
- if (++m_city > 4)
- m_city = 2;
-
- m_proxy->mapping()->setValueIndex(m_city);
- m_chart->valueAxis()->setTitle(QString("rainfall (in mm) in city %1").arg(m_city - 1));
}
-void RainfallChart::updateYearsList(int start, int end)
+void RainfallGraph::updateYearsList(int start, int end)
{
m_years.clear();
for (int i = start; i <= end; i++)
m_years << QString::number(i);
m_rowCount = m_years.size();
-
- // Set up sample space; make it match actual resolved data size
- m_chart->setupSampleSpace(m_rowCount, m_columnCount);
}
-void RainfallChart::addDataSet()
+//! [0]
+void RainfallGraph::addDataSet()
{
+ // Create a new variant data set and data item list
m_dataSet = new VariantDataSet;
VariantDataItemList *itemList = new VariantDataItemList;
+
+ // Read data from a data file into the data item list
QTextStream stream;
QFile dataFile(":/data/raindata.txt");
if (dataFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
stream.setDevice(&dataFile);
while (!stream.atEnd()) {
QString line = stream.readLine();
- if (line.startsWith("#"))
+ if (line.startsWith("#")) // Ignore comments
continue;
QStringList strList = line.split(",", QString::SkipEmptyParts);
- if (strList.size() < 5) {
+ // Each line has three data items: Year, month, and rainfall value
+ if (strList.size() < 3) {
qWarning() << "Invalid row read from data:" << line;
continue;
}
+ // Store year and month as strings, and rainfall value as double
+ // into a variant data item and add the item to the item list.
VariantDataItem *newItem = new VariantDataItem;
for (int i = 0; i < 2; i++)
newItem->append(strList.at(i).trimmed());
- for (int i = 2; i < 5; i++)
- newItem->append(strList.at(i).trimmed().toDouble());
+ newItem->append(strList.at(2).trimmed().toDouble());
itemList->append(newItem);
}
} else {
qWarning() << "Unable to open data file:" << dataFile.fileName();
}
+ //! [1]
+ // Add items to the data set and set it to the proxy
m_dataSet->addItems(itemList);
-
m_proxy->setDataSet(m_dataSet);
- m_mapping = new VariantBarDataMapping(0, 1, m_city, m_years, m_numericMonths);
+ // Create new mapping for the data and set it to the proxy
+ m_mapping = new VariantBarDataMapping(0, 1, 2, m_years, m_numericMonths);
m_proxy->setMapping(m_mapping);
+ //! [1]
}
+//! [0]
diff --git a/examples/rainfall/rainfallchart.h b/examples/customproxy/rainfallgraph.h
index 585f2bd0..6317ab71 100644
--- a/examples/rainfall/rainfallchart.h
+++ b/examples/customproxy/rainfallgraph.h
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,41 +16,36 @@
**
****************************************************************************/
-#ifndef RAINFALLCHART_H
-#define RAINFALLCHART_H
+#ifndef RAINFALLGRAPH_H
+#define RAINFALLGRAPH_H
#include "variantbardataproxy.h"
-#include <QtDataVis3D/q3dbars.h>
-#include <QTimer>
+#include <QtDataVisualization/q3dbars.h>
-using namespace QtDataVis3D;
+using namespace QtDataVisualization;
-class RainfallChart : public QObject
+class RainfallGraph : public QObject
{
Q_OBJECT
public:
- explicit RainfallChart(Q3DBars *rainfall);
- ~RainfallChart();
+ explicit RainfallGraph(Q3DBars *rainfall);
+ ~RainfallGraph();
void addDataSet();
void start();
-public slots:
- void timeout();
private:
void updateYearsList(int start, int end);
- Q3DBars *m_chart;
+ Q3DBars *m_graph;
int m_columnCount;
int m_rowCount;
QStringList m_years;
QStringList m_numericMonths;
- QTimer m_timer;
VariantBarDataProxy *m_proxy;
- int m_city;
VariantBarDataMapping *m_mapping;
VariantDataSet *m_dataSet;
};
-#endif // RAINFALLCHART_H
+#endif
diff --git a/examples/rainfall/variantbardatamapping.cpp b/examples/customproxy/variantbardatamapping.cpp
index 288a3b55..0c2f146c 100644
--- a/examples/rainfall/variantbardatamapping.cpp
+++ b/examples/customproxy/variantbardatamapping.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -20,9 +20,9 @@
VariantBarDataMapping::VariantBarDataMapping()
: QObject(0),
- m_rowIndex(0),
- m_columnIndex(1),
- m_valueIndex(2)
+ m_rowIndex(0),
+ m_columnIndex(1),
+ m_valueIndex(2)
{
}
@@ -36,8 +36,8 @@ VariantBarDataMapping::VariantBarDataMapping(const VariantBarDataMapping &other)
}
VariantBarDataMapping::VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
- const QStringList &rowCategories,
- const QStringList &columnCategories)
+ const QStringList &rowCategories,
+ const QStringList &columnCategories)
: QObject(0),
m_rowIndex(0),
m_columnIndex(1),
@@ -121,8 +121,8 @@ const QStringList &VariantBarDataMapping::columnCategories() const
}
void VariantBarDataMapping::remap(int rowIndex, int columnIndex, int valueIndex,
- const QStringList &rowCategories,
- const QStringList &columnCategories)
+ const QStringList &rowCategories,
+ const QStringList &columnCategories)
{
m_rowIndex = rowIndex;
m_columnIndex = columnIndex;
diff --git a/examples/rainfall/variantbardatamapping.h b/examples/customproxy/variantbardatamapping.h
index 616ee563..9ccf1610 100644
--- a/examples/rainfall/variantbardatamapping.h
+++ b/examples/customproxy/variantbardatamapping.h
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -19,25 +19,29 @@
#ifndef VARIANTBARDATAMAPPING_H
#define VARIANTBARDATAMAPPING_H
-#include "qdatavis3denums.h"
+#include "qdatavisualizationenums.h"
#include <QStringList>
-using namespace QtDataVis3D;
+using namespace QtDataVisualization;
class VariantBarDataMapping : public QObject
{
Q_OBJECT
+ //! [0]
Q_PROPERTY(int rowIndex READ rowIndex WRITE setRowIndex)
Q_PROPERTY(int columnIndex READ columnIndex WRITE setColumnIndex)
Q_PROPERTY(int valueIndex READ valueIndex WRITE setValueIndex)
Q_PROPERTY(QStringList rowCategories READ rowCategories WRITE setRowCategories)
Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories)
+ //! [0]
public:
explicit VariantBarDataMapping();
VariantBarDataMapping(const VariantBarDataMapping &other);
+ //! [1]
VariantBarDataMapping(int rowIndex, int columnIndex, int valueIndex,
const QStringList &rowCategories,
const QStringList &columnCategories);
+ //! [1]
virtual ~VariantBarDataMapping();
VariantBarDataMapping &operator=(const VariantBarDataMapping &other);
@@ -54,11 +58,15 @@ public:
void setColumnCategories(const QStringList &categories);
const QStringList &columnCategories() const;
+ //! [2]
void remap(int rowIndex, int columnIndex, int valueIndex,
const QStringList &rowCategories,
const QStringList &columnCategories);
+ //! [2]
signals:
+ //! [3]
void mappingChanged();
+ //! [3]
private:
// Indexes of the mapped items in the VariantDataItem
diff --git a/examples/rainfall/variantbardataproxy.cpp b/examples/customproxy/variantbardataproxy.cpp
index 79b5c67f..887115b8 100644
--- a/examples/rainfall/variantbardataproxy.cpp
+++ b/examples/customproxy/variantbardataproxy.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -18,7 +18,7 @@
#include "variantbardataproxy.h"
-using namespace QtDataVis3D;
+using namespace QtDataVisualization;
VariantBarDataProxy::VariantBarDataProxy() :
QBarDataProxy()
@@ -35,6 +35,7 @@ VariantBarDataProxy::VariantBarDataProxy(VariantDataSet *newSet,
VariantBarDataProxy::~VariantBarDataProxy()
{
+ delete m_dataSet;
}
void VariantBarDataProxy::setDataSet(VariantDataSet *newSet)
@@ -45,8 +46,10 @@ void VariantBarDataProxy::setDataSet(VariantDataSet *newSet)
m_dataSet = newSet;
if (!m_dataSet.isNull()) {
- QObject::connect(m_dataSet.data(), &VariantDataSet::itemsAdded, this, &VariantBarDataProxy::handleItemsAdded);
- QObject::connect(m_dataSet.data(), &VariantDataSet::dataCleared, this, &VariantBarDataProxy::handleDataCleared);
+ QObject::connect(m_dataSet.data(), &VariantDataSet::itemsAdded, this,
+ &VariantBarDataProxy::handleItemsAdded);
+ QObject::connect(m_dataSet.data(), &VariantDataSet::dataCleared, this,
+ &VariantBarDataProxy::handleDataCleared);
}
resolveDataSet();
}
@@ -59,12 +62,14 @@ VariantDataSet *VariantBarDataProxy::dataSet()
void VariantBarDataProxy::setMapping(VariantBarDataMapping *mapping)
{
if (!m_mapping.isNull())
- QObject::disconnect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this, &VariantBarDataProxy::handleMappingChanged);
+ QObject::disconnect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this,
+ &VariantBarDataProxy::handleMappingChanged);
m_mapping = mapping;
if (!m_mapping.isNull())
- QObject::connect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this, &VariantBarDataProxy::handleMappingChanged);
+ QObject::connect(m_mapping.data(), &VariantBarDataMapping::mappingChanged, this,
+ &VariantBarDataProxy::handleMappingChanged);
resolveDataSet();
}
@@ -80,7 +85,7 @@ void VariantBarDataProxy::handleItemsAdded(int index, int count)
Q_UNUSED(count)
// Resolve new items
- resolveDataSet(); // TODO Resolving entire dataset is inefficient
+ resolveDataSet();
}
void VariantBarDataProxy::handleDataCleared()
@@ -95,9 +100,12 @@ void VariantBarDataProxy::handleMappingChanged()
}
// Resolve entire dataset into QBarDataArray.
+//! [0]
void VariantBarDataProxy::resolveDataSet()
{
- if (m_dataSet.isNull() || m_mapping.isNull() || !m_mapping->rowCategories().size() || !m_mapping->columnCategories().size()) {
+ // If we have no data or mapping, or the categories are not defined, simply clear the array
+ if (m_dataSet.isNull() || m_mapping.isNull() || !m_mapping->rowCategories().size()
+ || !m_mapping->columnCategories().size()) {
resetArray(0);
return;
}
@@ -112,10 +120,12 @@ void VariantBarDataProxy::resolveDataSet()
// Sort values into rows and columns
typedef QHash<QString, qreal> ColumnValueMap;
QHash <QString, ColumnValueMap> itemValueMap;
- foreach (const VariantDataItem *item, itemList)
- itemValueMap[item->at(rowIndex).toString()][item->at(columnIndex).toString()] = item->at(valueIndex).toReal();
+ foreach (const VariantDataItem *item, itemList) {
+ itemValueMap[item->at(rowIndex).toString()][item->at(columnIndex).toString()]
+ = item->at(valueIndex).toReal();
+ }
- // Create new data array from itemValueMap
+ // Create a new data array in format the parent class understands
QBarDataArray *newProxyArray = new QBarDataArray;
foreach (QString rowKey, rowList) {
QBarDataRow *newProxyRow = new QBarDataRow(columnList.size());
@@ -124,5 +134,7 @@ void VariantBarDataProxy::resolveDataSet()
newProxyArray->append(newProxyRow);
}
+ // Finally, reset the data array in the parent class
resetArray(newProxyArray);
}
+//! [0]
diff --git a/examples/rainfall/variantbardataproxy.h b/examples/customproxy/variantbardataproxy.h
index 2c80c0b1..6f6ba763 100644
--- a/examples/rainfall/variantbardataproxy.h
+++ b/examples/customproxy/variantbardataproxy.h
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -26,9 +26,11 @@
#include <QMap>
#include <QPointer>
-using namespace QtDataVis3D;
+using namespace QtDataVisualization;
+//! [0]
class VariantBarDataProxy : public QBarDataProxy
+//! [0]
{
Q_OBJECT
@@ -37,6 +39,7 @@ public:
explicit VariantBarDataProxy(VariantDataSet *newSet, VariantBarDataMapping *mapping);
virtual ~VariantBarDataProxy();
+ //! [1]
// Doesn't gain ownership of the dataset, but does connect to it to listen for data changes.
void setDataSet(VariantDataSet *newSet);
VariantDataSet *dataSet();
@@ -46,6 +49,7 @@ public:
// Modifying mapping that is set to proxy will trigger dataset re-resolving.
void setMapping(VariantBarDataMapping *mapping);
VariantBarDataMapping *mapping();
+ //! [1]
public slots:
void handleItemsAdded(int index, int count);
@@ -59,8 +63,6 @@ private:
QPointer<VariantBarDataMapping> m_mapping;
Q_DISABLE_COPY(VariantBarDataProxy)
-
- friend class VariantBarDataProxy;
};
#endif
diff --git a/examples/rainfall/variantdataset.cpp b/examples/customproxy/variantdataset.cpp
index 3fe4fa6b..f73d83f8 100644
--- a/examples/rainfall/variantdataset.cpp
+++ b/examples/customproxy/variantdataset.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
diff --git a/examples/rainfall/variantdataset.h b/examples/customproxy/variantdataset.h
index f3965978..6beb852f 100644
--- a/examples/rainfall/variantdataset.h
+++ b/examples/customproxy/variantdataset.h
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -19,14 +19,16 @@
#ifndef VARIANTDATASET_H
#define VARIANTDATASET_H
-#include "qdatavis3denums.h"
+#include "qdatavisualizationenums.h"
#include <QScopedPointer>
#include <QVariantList>
-using namespace QtDataVis3D;
+using namespace QtDataVisualization;
+//! [1]
typedef QVariantList VariantDataItem;
typedef QList<VariantDataItem *> VariantDataItemList;
+//! [1]
class VariantDataSet : public QObject
{
@@ -36,6 +38,7 @@ public:
explicit VariantDataSet();
~VariantDataSet();
+ //! [0]
void clear();
int addItem(VariantDataItem *item);
@@ -46,6 +49,7 @@ public:
signals:
void itemsAdded(int index, int count);
void dataCleared();
+ //! [0]
private:
VariantDataItemList m_variantData;
diff --git a/examples/examples.pri b/examples/examples.pri
index 48d2f29a..dc4add12 100644
--- a/examples/examples.pri
+++ b/examples/examples.pri
@@ -1,7 +1,7 @@
android {
target.path = /libs/$$ANDROID_TARGET_ARCH
} else {
- target.path = $$[QT_INSTALL_EXAMPLES]/datavis3d/$$TARGET
+ target.path = $$[QT_INSTALL_EXAMPLES]/datavisualization/$$TARGET
}
win32 {
@@ -13,11 +13,13 @@ win32 {
LIBS += -L$$OUT_PWD/../../lib
-QT += datavis3d
+TEMPLATE = app
+
+QT += datavisualization
contains(TARGET, qml.*) {
- uri = com.digia.QtDataVis3D
- lib_name = datavis3dqml2
+ uri = com.digia.QtDataVisualization
+ lib_name = datavisualizationqml2
uri_replaced = $$replace(uri, \\., $$QMAKE_DIR_SEP)
make_qmldir_path = $$DESTDIR/$$uri_replaced
@@ -25,11 +27,12 @@ contains(TARGET, qml.*) {
make_qmldir_target = \"$$replace(make_qmldir_path, /, $$QMAKE_DIR_SEP)\"
system($$QMAKE_MKDIR $$make_qmldir_target)
}
- copy_qmldir_examples.target = $$make_qmldir_path/qmldir
- copy_qmldir_examples.depends = $$_PRO_FILE_PWD_/../../src/$$lib_name/qmldir
- copy_qmldir_examples.commands = $(COPY_FILE) \"$$replace(copy_qmldir_examples.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir_examples.target, /, $$QMAKE_DIR_SEP)\"
- QMAKE_EXTRA_TARGETS += copy_qmldir_examples
- PRE_TARGETDEPS += $$copy_qmldir_examples.target
+ copy_qmldir.target = $$make_qmldir_path/qmldir
+ copy_qmldir.depends = $$_PRO_FILE_PWD_/../../src/$$lib_name/qmldir
+ copy_qmldir_formatted = \"$$replace(copy_qmldir.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_qmldir.target, /, $$QMAKE_DIR_SEP)\"
+ copy_qmldir.commands = $(COPY_FILE) $$copy_qmldir_formatted
+ QMAKE_EXTRA_TARGETS += copy_qmldir
+ PRE_TARGETDEPS += $$copy_qmldir.target
win32 {
CONFIG(debug, release|debug) {
@@ -56,13 +59,16 @@ contains(TARGET, qml.*) {
}
copy_lib.target = $$make_qmldir_path/$$src_lib
copy_lib.depends = $$OUT_PWD/../../src/$$lib_name/$$src_dir/$$src_lib
- copy_lib.commands = $(COPY_FILE) \"$$replace(copy_lib.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_lib.target, /, $$QMAKE_DIR_SEP)\"
+ copy_lib_formatted = \"$$replace(copy_lib.depends, /, $$QMAKE_DIR_SEP)\" \"$$replace(copy_lib.target, /, $$QMAKE_DIR_SEP)\"
+ copy_lib.commands = $(COPY_FILE) $$copy_lib_formatted
QMAKE_EXTRA_TARGETS += copy_lib
PRE_TARGETDEPS += $$copy_lib.target
android {
- android_qmldir.files = $$copy_qmldir_examples.target
- android_qmldir.path = /assets/imports/$$make_qmldir_target
+ system($$QMAKE_COPY $$copy_qmldir_formatted)
+ system($$QMAKE_COPY $$copy_lib_formatted)
+ android_qmldir.files = $$copy_qmldir.target
+ android_qmldir.path = /assets/qml/$$uri_replaced
android_qmlplugin.files = $$copy_lib.target
android_qmlplugin.path = $$target.path
INSTALLS += android_qmldir android_qmlplugin
diff --git a/examples/examples.pro b/examples/examples.pro
index 4db7ed2f..7d9f306a 100644
--- a/examples/examples.pro
+++ b/examples/examples.pro
@@ -1,12 +1,13 @@
TEMPLATE = subdirs
-SUBDIRS += barchart \
- rainfall \
- widget \
- mapdata \
- qmlbarchart \
- #qmlmaps \
+SUBDIRS += qmlbars \
qmlscatter \
- surfacechart \
- scatterchart
+ qmlsurface
+!android: {
+ SUBDIRS += bars \
+ customproxy \
+ itemmodel \
+ scatter \
+ surface
+}
-qtHaveModule(multimedia):!android: SUBDIRS += spectrum
+qtHaveModule(multimedia):!android: SUBDIRS += audiolevels
diff --git a/examples/itemmodel/doc/images/itemmodel-example-2.png b/examples/itemmodel/doc/images/itemmodel-example-2.png
new file mode 100644
index 00000000..7186b267
--- /dev/null
+++ b/examples/itemmodel/doc/images/itemmodel-example-2.png
Binary files differ
diff --git a/examples/itemmodel/doc/images/itemmodel-example.png b/examples/itemmodel/doc/images/itemmodel-example.png
new file mode 100644
index 00000000..03d7c386
--- /dev/null
+++ b/examples/itemmodel/doc/images/itemmodel-example.png
Binary files differ
diff --git a/examples/itemmodel/doc/src/itemmodel.qdoc b/examples/itemmodel/doc/src/itemmodel.qdoc
new file mode 100644
index 00000000..f014bfea
--- /dev/null
+++ b/examples/itemmodel/doc/src/itemmodel.qdoc
@@ -0,0 +1,182 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+/*!
+ \example itemmodel
+ \title Item Model Example
+ \ingroup qtdatavisualization_examples
+ \brief Using an item model as data source for Q3DBars.
+
+ The item model example shows how to make a simple 3D bar graph using Q3DBars and how to modify
+ the data being drawn at run-time. The example shows how to:
+
+ \list
+ \li How to create an application with Q3DBars and widgets
+ \li How to use QItemModelBarDataMapping and QItemModelBarDataProxy to set data to the graph
+ \li How to use a table widget to modify the data in the graph
+ \endlist
+
+ \image itemmodel-example-2.png
+
+ \section1 Creating the application
+
+ First, in main.cpp, we create a QApplication, instantiate Q3DBars and a window container for it:
+
+ \snippet ../examples/itemmodel/main.cpp 0
+
+ The call to QWidget::createWindowContainer is required, as all data visualization types
+ (Q3DBars, Q3DScatter, Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
+ as a widget any other way.
+
+ Then we'll create a layout and add the graph and the table widget into it:
+
+ \snippet ../examples/itemmodel/main.cpp 1
+
+ The table widget is going to be used to display the numerical data being inserted into the
+ graph, and to modify it (See \l {Adding data to the graph} and \l {Interacting with the data}).
+
+ We need to instantiate QItemModelBarDataMapping and QItemModelBarDataProxy and give them to the
+ graph:
+
+ \snippet ../examples/itemmodel/main.cpp 2
+
+ Here we tell the mapping object to directly map model's rows and columns into proxy's rows and
+ columns instead of defining row and column roles to map for them. Then we give the model from
+ the table widget and the mapping object to the proxy. Finally we set the proxy as the active
+ data proxy for the graph.
+
+ Next, let's create another class to handle the data addition and other interaction with the
+ graph. Let's call it GraphDataGenerator (See \l {Setting up the graph} and
+ \l {Adding data to the graph} for details) and connect some signals between Q3DBars,
+ GraphDataGenerator and QTableWidget (See \l {Interacting with the data} for a closer look):
+
+ \snippet ../examples/itemmodel/main.cpp 3
+
+ The application main is done and we can show the graph and start the event loop:
+
+ \snippet ../examples/itemmodel/main.cpp 4
+
+ \section1 Setting up the graph
+
+ Let's set up the visual attributes for the graph in the constructor of GraphDataGenerator:
+
+ \snippet ../examples/itemmodel/main.cpp 5
+ \snippet ../examples/itemmodel/main.cpp 6
+ \snippet ../examples/itemmodel/main.cpp 7
+
+ First we set bar thickness ratio to 1.0, which means bars will be as wide as they are deep. 1.0
+ is also the default value, so the line is basically unnecessary. It's left there so you could
+ easily try how changing it affects the graph. The second line sets bar spacings to 0.2, which
+ means there will be a gap of 20% of the bar's thickness between the bars in both directions.
+
+ Then, we set the bar type to flat pyramids, overriding the default bar type.
+ We want to be able to select rows of data for a closer inspection, so we set the selection mode
+ to slice row. This means that whenever we select a bar in the graph, the whole row will be
+ displayed separately.
+
+ Next line sets the font to \c Impact. If your system doesn't have it, it will be replaced by
+ system default.
+
+ And finally, we set theme to \c Digia and camera position to \c {Preset Front}. Now the initial
+ graph settings are done.
+
+ \note You do not need to set any of these in case you're happy with the defaults. You can
+ easily try them by commenting out the contents of the constructor.
+
+ \section1 Adding data to the graph
+
+ We created the data generator in the application main and gave it the graph and the table
+ widget as parameters:
+
+ \code GraphDataGenerator generator(graph, tableWidget); \endcode
+
+ We added a separate start method to the generator, so that it wouldn't start doing anything
+ until everything else is set up. We then called the method when starting the application:
+
+ \code generator.start(); \endcode
+
+ Let's have a look at the contents of the \c start() method:
+
+ \snippet ../examples/itemmodel/main.cpp 8
+
+ The main thing \c start() does is set up the data model. It also activates a timer for getting
+ the accurate dimensions of the table widget after it's been filled with data. The reason we
+ do this is that the widget doesn't know its final visual domensions until all the data has been
+ inserted to it and it has been shown. The whole data timer implementation is not vital for the
+ application, so we won't take a closer look at it. It's just there to make the table look better.
+
+ In \c setupModel() we first introduce the row and column labels, and the actual data:
+
+ \snippet ../examples/itemmodel/main.cpp 9
+
+ Then we set up the axes:
+
+ \snippet ../examples/itemmodel/main.cpp 10
+
+ The other lines there are pretty self-explanatory except for the one with the segment count.
+ We're setting it to five as we want the value axis (the Y-axis) to show more values than just
+ the lowest and the highest.
+
+ Next we will set up the table widget:
+
+ \snippet ../examples/itemmodel/main.cpp 11
+
+ After that all that's left is adding the data to the table widget:
+
+ \snippet ../examples/itemmodel/main.cpp 12
+
+ Now we have a bar graph and a table widget, both displaying the same data.
+
+ You're probably wondering how the data can be displayed in the graph, as the only thing we did
+ was add it to the table widget? That's because of what we did earlier, in the application main:
+
+ \snippet ../examples/itemmodel/main.cpp 2
+
+ We created QItemModelBarDataMapping and QItemModelBarDataProxy instances, and gave the proxy
+ the model of the table widget and the model mapping we just created. Then we set the proxy as
+ the active proxy for the graph. The proxy maps the rows and the columns in the model of the table
+ widget into rows and columns for itself using the model mapping, and the graph gets the data
+ to be displayed from its active proxy.
+
+ \section1 Interacting with the data
+
+ We made a couple of signal connections in the application main earlier:
+
+ \snippet ../examples/itemmodel/main.cpp 3
+
+ Now we'll find out what these were for.
+
+ The first one connects a signal from Q3DBars to the GraphDataGenerator. Signal
+ Q3DBars::selectedBarPosChanged() is emitted when a bar is selected from the graph. We connect
+ that to a method in the data generator that selects the same data item in the table widget:
+
+ \snippet ../examples/itemmodel/main.cpp 13
+
+ The second connection does the opposite; it connects a signal from the table widget to a
+ method in the data generator. The method then selects the corresponding bar in the graph:
+
+ \snippet ../examples/itemmodel/main.cpp 14
+
+ You can even select an item in the widget and change the value of it, and the new value is
+ updated to the graph. This is handled again by the active proxy with mapping between the data
+ in the table widget and itself.
+
+ \image itemmodel-example.png
+
+ \section1 Example contents
+*/
diff --git a/examples/barchart/barchart.pro b/examples/itemmodel/itemmodel.pro
index 12b296c5..f319f690 100644
--- a/examples/barchart/barchart.pro
+++ b/examples/itemmodel/itemmodel.pro
@@ -7,3 +7,6 @@ SOURCES += main.cpp
INSTALLS += target
QT += widgets
+
+OTHER_FILES += doc/src/* \
+ doc/images/*
diff --git a/examples/itemmodel/main.cpp b/examples/itemmodel/main.cpp
new file mode 100644
index 00000000..6ab685ed
--- /dev/null
+++ b/examples/itemmodel/main.cpp
@@ -0,0 +1,287 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include <QtDataVisualization/q3dbars.h>
+#include <QtDataVisualization/q3dcategoryaxis.h>
+#include <QtDataVisualization/qitemmodelbardataproxy.h>
+#include <QtDataVisualization/q3dvalueaxis.h>
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dcamera.h>
+
+#include <QApplication>
+#include <QVBoxLayout>
+#include <QTableWidget>
+#include <QScreen>
+#include <QTimer>
+#include <QFont>
+#include <QDebug>
+#include <QHeaderView>
+
+#define USE_STATIC_DATA
+
+using namespace QtDataVisualization;
+
+class GraphDataGenerator : public QObject
+{
+public:
+ explicit GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget);
+ ~GraphDataGenerator();
+
+ void setupModel();
+ void addRow();
+ void changeStyle();
+ void changePresetCamera();
+ void changeTheme();
+ void start();
+ void selectFromTable(const QPoint &selection);
+ void selectedFromTable(int currentRow, int currentColumn, int previousRow, int previousColumn);
+ void fixTableSize();
+
+private:
+ Q3DBars *m_graph;
+ QTimer *m_dataTimer;
+ QTimer *m_styleTimer;
+ QTimer *m_presetTimer;
+ QTimer *m_themeTimer;
+ int m_columnCount;
+ int m_rowCount;
+ QTableWidget *m_tableWidget; // not owned
+};
+
+GraphDataGenerator::GraphDataGenerator(Q3DBars *bargraph, QTableWidget *tableWidget)
+ : m_graph(bargraph),
+ m_dataTimer(0),
+ m_styleTimer(0),
+ m_presetTimer(0),
+ m_themeTimer(0),
+ m_columnCount(100),
+ m_rowCount(50),
+ m_tableWidget(tableWidget)
+{
+ //! [5]
+ // Set up bar specifications; make the bars as wide as they are deep,
+ // and add a small space between them
+ m_graph->setBarThickness(1.0);
+ m_graph->setBarSpacing(QSizeF(0.2, 0.2));
+
+ // Set bar type to flat pyramids
+ m_graph->setBarType(QDataVis::MeshStylePyramids, false);
+
+ //! [5]
+
+#ifndef USE_STATIC_DATA
+ // Set up sample space; make it as deep as it's wide
+ m_graph->setDataWindow(m_rowCount, m_columnCount);
+ m_tableWidget->setColumnCount(m_columnCount);
+
+ // Set selection mode to full
+ m_graph->setSelectionMode(QDataVis::SelectionModeItemRowAndColumn);
+
+ // Hide axis labels by explicitly setting one empty string as label list
+ m_graph->rowAxis()->setCategoryLabels(QStringList(QString()));
+ m_graph->columnAxis()->setCategoryLabels(QStringList(QString()));
+
+ m_graph->activeDataProxy()->setItemLabelFormat(QStringLiteral("@valueLabel"));
+#else
+ //! [6]
+
+ // Set selection mode to slice row
+ m_graph->setSelectionMode(QDataVis::SelectionModeSliceRow);
+
+ // Set font
+ m_graph->setFont(QFont("Impact", 20));
+
+ //! [6]
+#endif
+
+ //! [7]
+
+ // Set theme
+ m_graph->setTheme(QDataVis::ThemeDigia);
+
+ // Set preset camera position
+ m_graph->scene()->activeCamera()->setCameraPreset(QDataVis::CameraPresetFront);
+ //! [7]
+}
+
+GraphDataGenerator::~GraphDataGenerator()
+{
+ if (m_dataTimer) {
+ m_dataTimer->stop();
+ delete m_dataTimer;
+ }
+ delete m_graph;
+}
+
+void GraphDataGenerator::start()
+{
+#ifndef USE_STATIC_DATA
+ m_dataTimer = new QTimer();
+ m_dataTimer->setTimerType(Qt::CoarseTimer);
+ QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::addRow);
+ m_dataTimer->start(0);
+ m_tableWidget->setFixedWidth(m_graph->width());
+#else
+ //! [8]
+ setupModel();
+ // Table needs to be shown before the size of its headers can be accurately obtained,
+ // so we postpone it a bit
+ m_dataTimer = new QTimer();
+ m_dataTimer->setSingleShot(true);
+ QObject::connect(m_dataTimer, &QTimer::timeout, this, &GraphDataGenerator::fixTableSize);
+ m_dataTimer->start(0);
+ //! [8]
+#endif
+}
+
+void GraphDataGenerator::setupModel()
+{
+ //! [9]
+ // Set up row and column names
+ QStringList days;
+ days << "Monday" << "Tuesday" << "Wednesday" << "Thursday" << "Friday" << "Saturday" << "Sunday";
+ QStringList weeks;
+ weeks << "week 1" << "week 2" << "week 3" << "week 4" << "week 5";
+
+ // Set up data Mon Tue Wed Thu Fri Sat Sun
+ float hours[5][7] = {{2.0, 1.0, 3.0, 0.2, 1.0, 5.0, 10.0}, // week 1
+ {0.5, 1.0, 3.0, 1.0, 2.0, 2.0, 3.0}, // week 2
+ {1.0, 1.0, 2.0, 1.0, 4.0, 4.0, 4.0}, // week 3
+ {0.0, 1.0, 0.0, 0.0, 2.0, 2.0, 0.3}, // week 4
+ {3.0, 3.0, 6.0, 2.0, 2.0, 1.0, 1.0}}; // week 5
+ //! [9]
+
+ // Add labels
+ //! [10]
+ m_graph->rowAxis()->setTitle("Week of year");
+ m_graph->columnAxis()->setTitle("Day of week");
+ m_graph->valueAxis()->setTitle("Hours spent on the Internet");
+ m_graph->valueAxis()->setSegmentCount(5);
+ m_graph->valueAxis()->setLabelFormat("%.1f h");
+ //! [10]
+
+ //! [11]
+ m_tableWidget->setRowCount(5);
+ m_tableWidget->setColumnCount(7);
+ m_tableWidget->setHorizontalHeaderLabels(days);
+ m_tableWidget->setVerticalHeaderLabels(weeks);
+ m_tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ m_tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ m_tableWidget->setCurrentCell(-1, -1);
+ //! [11]
+
+ //! [12]
+ for (int week = 0; week < weeks.size(); week++) {
+ for (int day = 0; day < days.size(); day++) {
+ QModelIndex index = m_tableWidget->model()->index(week, day);
+ m_tableWidget->model()->setData(index, hours[week][day]);
+ }
+ }
+ //! [12]
+}
+
+void GraphDataGenerator::addRow()
+{
+ m_tableWidget->model()->insertRow(0);
+ if (m_tableWidget->model()->rowCount() > m_rowCount)
+ m_tableWidget->model()->removeRow(m_rowCount);
+ for (int i = 0; i < m_columnCount; i++) {
+ QModelIndex index = m_tableWidget->model()->index(0, i);
+ m_tableWidget->model()->setData(index,
+ ((qreal)i / (qreal)m_columnCount) / 2.0 + (qreal)(rand() % 30) / 100.0);
+ }
+ m_tableWidget->resizeColumnsToContents();
+}
+
+//! [13]
+void GraphDataGenerator::selectFromTable(const QPoint &selection)
+{
+ m_tableWidget->setFocus();
+ m_tableWidget->setCurrentCell(selection.x(), selection.y());
+}
+//! [13]
+
+//! [14]
+void GraphDataGenerator::selectedFromTable(int currentRow, int currentColumn,
+ int previousRow, int previousColumn)
+{
+ Q_UNUSED(previousRow)
+ Q_UNUSED(previousColumn)
+ m_graph->setSelectedBarPos(QPoint(currentRow, currentColumn));
+}
+//! [14]
+
+void GraphDataGenerator::fixTableSize()
+{
+ int width = m_tableWidget->horizontalHeader()->length();
+ width += m_tableWidget->verticalHeader()->width();
+ m_tableWidget->setFixedWidth(width + 2);
+ int height = m_tableWidget->verticalHeader()->length();
+ height += m_tableWidget->horizontalHeader()->height();
+ m_tableWidget->setFixedHeight(height + 2);
+}
+
+int main(int argc, char **argv)
+{
+ //! [0]
+ QApplication app(argc, argv);
+ Q3DBars *graph = new Q3DBars();
+ QWidget *container = QWidget::createWindowContainer(graph);
+ //! [0]
+
+ QSize screenSize = graph->screen()->size();
+ container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
+ container->setMaximumSize(screenSize);
+ container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ container->setFocusPolicy(Qt::StrongFocus);
+
+ //! [1]
+ QWidget widget;
+ QVBoxLayout *layout = new QVBoxLayout(&widget);
+ QTableWidget *tableWidget = new QTableWidget(&widget);
+ layout->addWidget(container, 1);
+ layout->addWidget(tableWidget, 1, Qt::AlignHCenter);
+ //! [1]
+
+ tableWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ tableWidget->setAlternatingRowColors(true);
+ widget.setWindowTitle(QStringLiteral("Hours spent on the Internet"));
+
+ //! [2]
+ // Since we are dealing with QTableWidget, the model will already have data sorted properly
+ // in rows and columns, so create a mapping to utilize this.
+ QItemModelBarDataMapping *mapping = new QItemModelBarDataMapping;
+ mapping->setUseModelCategories(true);
+ QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(tableWidget->model(), mapping);
+ graph->setActiveDataProxy(proxy);
+ //! [2]
+
+ //! [3]
+ GraphDataGenerator generator(graph, tableWidget);
+ QObject::connect(graph, &Q3DBars::selectedBarPosChanged, &generator,
+ &GraphDataGenerator::selectFromTable);
+ QObject::connect(tableWidget, &QTableWidget::currentCellChanged, &generator,
+ &GraphDataGenerator::selectedFromTable);
+ //! [3]
+
+ //! [4]
+ widget.show();
+ generator.start();
+ return app.exec();
+ //! [4]
+}
diff --git a/examples/mapdata/Suomi.karttapohja.svg b/examples/mapdata/Suomi.karttapohja.svg
deleted file mode 100644
index 85a449b0..00000000
--- a/examples/mapdata/Suomi.karttapohja.svg
+++ /dev/null
@@ -1,3018 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Creator: CorelDRAW -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xml:space="preserve"
- width="1850"
- height="3220"
- style="fill-rule: evenodd;"
- viewBox="0 0 1850 3237.41"
- id="svg2"
- version="1.1"
- inkscape:version="0.47 r22583"
- sodipodi:docname="Suomi.karttapohja.svg"><metadata
- id="metadata650"><rdf:RDF><cc:Work
- rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1"
- objecttolerance="10"
- gridtolerance="10"
- guidetolerance="10"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:window-width="1680"
- inkscape:window-height="1000"
- id="namedview648"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:zoom="1.2968944"
- inkscape:cx="1302.3906"
- inkscape:cy="240.52554"
- inkscape:window-x="-8"
- inkscape:window-y="-8"
- inkscape:window-maximized="1"
- inkscape:current-layer="_74312864" />
- <defs
- id="defs4"><inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="0 : 1610 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_z="1850 : 1610 : 1"
- inkscape:persp3d-origin="925 : 1073.3333 : 1"
- id="perspective611" />
- <style
- type="text/css"
- id="style6">
-
- .str3 {stroke:#C7C7A2;stroke-width:0.797991}
- .str1 {stroke:#8C8C60;stroke-width:1.70998}
- .str2 {stroke:#636347;stroke-width:2.27997}
- .str0 {stroke:#1F1A17;stroke-width:3.98996}
- .fil1 {fill:none}
- .fil0 {fill:#EEEED4}
-
- </style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- <inkscape:perspective
- id="perspective3574"
- inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
- inkscape:vp_z="1 : 0.5 : 1"
- inkscape:vp_y="0 : 1000 : 0"
- inkscape:vp_x="0 : 0.5 : 1"
- sodipodi:type="inkscape:persp3d" /></defs>
- <g
- id="Layer_x0020_1"
- transform="translate(-14.0454, -0.00501389)">
- <metadata
- id="CorelCorpID_0Corel-Layer" />
- <g
- id="_91105008">
- <polygon
- id="_91167600"
- class="fil0 str0"
- points="734.897,442.02 741.874,456.449 771.196,443.235 798.888,433.452 809.986,413.882 830.941,402.881 872.378,433.58 916.245,452.767 940.503,482.635 946.707,469.967 964.057,470.073 961.225,434.135 986.507,396.951 1005.05,385.808 1025.49,391.044 1035.53,355.861 1031.81,293.372 1050.21,188.127 1059.65,170.934 1054.1,154.879 1068.55,131.72 1097.91,105.588 1115.32,64.1525 1143.85,54.1508 1193.47,67.0789 1236.46,33.0009 1247.21,17.3925 1262.71,22.4227 1278.39,12.5376 1306.22,51.2835 1333.06,68.1732 1335.1,87.2276 1422.82,130.452 1452.27,205.546 1400.14,273.285 1396.63,307.18 1406.98,343.479 1352.78,389.081 1385.74,388.966 1393.92,402.814 1387.41,449.541 1358.46,501.718 1383.06,604.25 1455.73,633.814 1503.25,730.84 1549.63,765.543 1545.9,810.813 1447.28,995.77 1439.79,1020.47 1504.59,1129.9 1535.44,1212.77 1560.34,1249.47 1590.01,1334.1 1598.77,1395.63 1579.48,1397.44 1551.11,1416.34 1561.84,1434.11 1552.94,1464.05 1550.79,1496.63 1539.81,1533.78 1566.06,1536.2 1574.25,1545.67 1565.67,1563.26 1572.7,1572.6 1565.07,1588.4 1545.72,1594.85 1540.33,1615.02 1555.24,1672.39 1605.92,1682.79 1601.44,1698.83 1612.08,1712.15 1611.43,1732.28 1600.37,1741.99 1600.45,1764.83 1615.98,1806.59 1670.36,1843.89 1681,1893.37 1646.69,1982.92 1614.27,2006.04 1669.04,2064.54 1687.17,2090.16 1732.19,2110.62 1764.11,2135.78 1789.18,2153.1 1800.82,2193.18 1836.01,2221.81 1848.18,2252.58 1806.45,2385.04 1771.2,2450.67 1752.19,2458.11 1723.31,2502.39 1683.21,2572.67 1661.79,2594.86 1649.79,2628.83 1619.63,2656.59 1599.34,2699.18 1573.78,2717.29 1568.01,2735.14 1530.07,2799.12 1485.65,2829.93 1469.78,2836.4 1450.69,2869.07 1448.29,2890.48 1427.77,2895.06 1389.32,2928.71 1381.94,2948.43 1327.85,3000.45 1327.36,3010.63 1316.96,3017.51 1304.85,3009.58 1300.01,3013.29 1296.24,3030.21 1290.9,3038.94 1282.82,3039.19 1273.05,3040.6 1266.64,3037.07 1260.75,3041.02 1253.67,3047.69 1244.57,3034.19 1220.98,3031.41 1192.37,3022.07 1180.78,3033.71 1181.12,3052.38 1176.95,3059.87 1165.21,3059.51 1151.75,3046.07 1143.89,3053.24 1133.83,3053.59 1127.53,3046.94 1120.87,3051.57 1103.91,3055.46 1090.52,3067.5 1083.02,3067.23 1082.31,3078.1 1073.44,3067.02 1059.82,3066.67 1063.67,3079.72 1057.59,3080.2 1052.42,3068.69 1041.49,3057.43 1025.88,3042.53 1024.52,3050.67 1034.09,3063.59 1036.74,3074.18 1046.13,3090.82 1040.51,3093.28 1032.88,3089.49 1027.92,3091.22 1028.85,3103.79 1023.72,3105.84 1015.33,3088.55 1011.12,3091.97 1015.81,3106.98 1011.54,3112.5 1003.29,3107.36 995.826,3115.4 990.8,3114.45 978.112,3098.68 974.135,3083.96 958.129,3085.77 957.765,3099.11 951.609,3106.69 927.23,3107.33 907.83,3112.67 905.564,3119.68 897.779,3130.24 886.92,3126.88 888.623,3139.49 877.758,3148.68 875.629,3136.95 870.838,3144.55 856.642,3144.36 846.544,3137.47 819.64,3146.92 814.402,3141.68 812.242,3146.82 812.282,3156.77 782.761,3193.85 773.2,3193.11 786.207,3176.04 780.156,3172.55 773.188,3178.62 768.431,3178.57 769.358,3159.3 747.17,3171.57 716.781,3172.24 679.897,3188.04 661.696,3189.71 664.258,3199.07 657.776,3204.03 645.171,3201.29 629.122,3204.72 621.295,3199.14 609.151,3197.57 599.173,3208.63 599.17,3215.85 586.153,3226.97 560.976,3226.77 540.143,3235.42 533.188,3226.63 539.698,3219.29 567.487,3209.5 573.125,3202.7 575.723,3183.32 570.936,3175.91 565.296,3180.45 564.876,3196.36 560.113,3201 542.296,3197.89 532.525,3184.98 534.937,3173.17 546.22,3172.67 555.331,3177.38 560.044,3137.2 544.117,3127.6 540.111,3106.4 569.635,3070.42 564.025,3061.07 528.397,3088.6 505.365,3095.39 495.474,3086.45 479.701,3086.82 479.662,3077.15 494.459,3053.5 485.448,3046.64 479.824,3051.51 441.956,3058.82 431.993,3049.37 423.925,3048.85 425.606,3027.77 422.098,3025.01 413.217,3030.73 402.264,3020.74 405.489,3016.74 412.964,3017.12 413.36,3009.16 405.308,3001.37 383.919,3002.04 367.22,3006.12 367.985,2998.1 375.283,2987.85 383.218,2988.61 390.139,2970.75 383.336,2967.69 363.077,2978.55 358.094,3000.15 346.88,3001.15 342.51,2982.42 328.157,2969.79 317.118,2940.85 317.44,2922.78 312.318,2914.66 311.779,2901.47 309.348,2892.27 311.198,2886.84 314.431,2884.63 316.01,2879.55 300.748,2870.3 299.889,2864.62 313.266,2861.92 313.722,2854.08 307.199,2847.1 311.04,2843.08 318.389,2842.59 324.87,2855.63 331.73,2861.06 333.992,2853.29 323.011,2841.9 318.655,2817.98 326.984,2813.34 331.534,2820.35 338.516,2806.33 345.896,2764.2 353.463,2769.24 357.298,2764.37 356.504,2757.75 361.247,2733.23 350.93,2709.05 352.877,2706.01 357.594,2704.47 364.653,2707.23 370.088,2706.24 366.434,2697.31 355.147,2691.36 354.27,2683.4 361.873,2683.69 373.855,2687.23 373.514,2682.72 366.895,2677.37 359.79,2662.94 362.789,2657.25 368.402,2657.65 377.325,2667.83 384.023,2668.06 371.05,2638.93 371.061,2612.51 357.59,2595.07 360.297,2589.1 368.184,2588.27 368.696,2583.58 362.645,2578.87 358.927,2555.16 349.954,2549.66 347.236,2539.57 339.362,2526.5 346.611,2498.97 354.361,2486.29 353.9,2475 365.851,2462.21 364.27,2454.11 349.269,2448.25 349.233,2436.92 359.461,2423.29 360.11,2416.17 338.319,2415.1 331.84,2405.05 337.853,2381.11 333.22,2376.18 335.43,2357.44 345.35,2341.23 344.328,2334.69 339.132,2330.79 332.311,2336.53 328.473,2331.91 331.715,2311.25 336.643,2305.46 343.06,2299.64 344.031,2290.92 337.303,2283.26 338.504,2278.41 349.848,2279 355.58,2272.87 358.574,2254.71 369.587,2250.92 370.303,2256.45 381.609,2255.16 385.901,2250.78 384.587,2240.35 395.125,2230.34 396.191,2218.55 391.702,2208.89 381.18,2200.87 385.845,2193.29 395.853,2199.94 402.206,2197.86 411.394,2200.31 416.553,2198.31 413.408,2190.53 403.459,2181.86 402.223,2173.97 410.657,2163.49 411.427,2141.71 419.5,2133.51 424.363,2148.04 435.891,2147.78 460.629,2137.37 495.38,2149.82 508.39,2146.78 516.539,2131.32 527.665,2131.1 532.104,2120.31 519.963,2093.06 514.431,2087.5 512.029,2079.73 516.005,2074.45 523.646,2074 528.625,2052.44 535.479,2048.67 542.07,2057.32 545.861,2040.72 554.878,2034.13 555.89,2029.24 565.518,2020.94 572.222,2018.05 574.065,2009.34 586.191,2001.6 587.76,1989.75 584.997,1973.56 594.918,1967 604.682,1952.39 617.806,1952.46 623.807,1959.69 630.435,1959.54 636.315,1950.95 684.379,1948.78 685.437,1902.79 693.471,1897.06 705.358,1908.41 714.896,1906.75 716.105,1883.13 733.448,1856.71 740.913,1850.69 749.922,1837.06 757.474,1842.06 763.625,1838.73 763.857,1823.97 771.579,1811.3 774.609,1804.09 794.931,1782.31 812.447,1770.7 813.334,1763.68 826.035,1753.87 836.256,1710.62 855.481,1697.25 860.633,1670.62 873.052,1669.18 877.301,1661.48 884.505,1655.08 906.039,1654.86 915.554,1647.45 933.954,1647.6 953.652,1659.04 955.431,1669.57 964.448,1670.35 969.609,1665.68 965.659,1653.85 946.032,1634.14 944.869,1625.57 947.233,1618.86 960.695,1620.02 975.171,1631.73 981.608,1632.03 982.389,1626.32 972.932,1616.68 969.772,1595.81 964.457,1586.08 951.99,1578.88 947.584,1569.28 956.308,1557.58 956.404,1526.28 950.936,1516.19 957.26,1508.46 957.234,1493.78 965.442,1485.06 966.46,1472.57 947.684,1439.17 943.014,1443.47 936.023,1443.43 935.451,1430.3 927.013,1421.66 918.091,1422.49 909.761,1411.71 895.771,1409.63 888.751,1415.36 880.458,1416.2 876.5,1403.43 866.303,1410.09 860.985,1403.94 868.363,1388.45 861.805,1378.74 840.805,1370.97 831.074,1359.29 823.287,1371.7 812.149,1372.98 811.888,1350.9 801.684,1323.4 800.196,1303.55 783.321,1276.01 782.238,1255.29 761.961,1235.63 754.073,1196.49 758.7,1184.48 754.505,1167.65 760.527,1149.03 765.291,1133.49 783.076,1118.06 786.503,1061.56 804.095,1042.11 756.34,931.753 757.445,900.132 781.291,887.737 775.935,869.381 783.001,853.424 755.287,848.647 743.601,827.609 758.747,788.675 757.551,731.659 757.953,713.103 766.703,698.359 777.759,685.217 751.185,657.554 745.169,628.899 730.742,630.925 724.506,613.838 724.42,584.796 677.125,541.217 633.583,521.252 600.882,513.796 591.826,487.604 569.502,476.682 560.728,454.646 536.845,447.227 504.106,379.259 481.261,373.099 479.491,346.63 449.668,308.064 472.929,285.304 505.76,310.727 510.988,292.53 500.788,265.596 518.159,244.839 544.067,232.093 585.676,246.547 656.063,389.248 654.014,423.839 671.82,416.349 702.653,438.674"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91167528"
- class="fil0 str0"
- points="892.558,1634.74 881.896,1628.14 870.453,1631.06 860.036,1606.73 866.113,1595.44 899.535,1587.62 908.877,1598.64 918.083,1598.51 923.98,1595.47 929.149,1600.17 928.93,1606.22 916.609,1611.27 904.132,1603 894.158,1605.66 901.318,1628.45"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91167456"
- class="fil0 str0"
- points="951.187,1592.83 944.242,1592.83 937.731,1587.19 941.204,1581.11 949.971,1584.43"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91167384"
- class="fil0 str0"
- points="720.706,1869.96 713.327,1870.39 715.497,1858.67 723.31,1855.63 725.133,1861.99"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91167312"
- class="fil0 str0"
- points="570.525,1995.92 565.75,1986.37 570.959,1969.43 577.903,1975.51 576.704,1989.53"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91167240"
- class="fil0 str0"
- points="452.897,2090.62 448.122,2078.89 457.238,2076.28 461.144,2080.19 460.813,2088.57"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91167168"
- class="fil0 str0"
- points="469.825,2119.28 479.808,2103.21 488.923,2103.21 494.523,2108.46 491.136,2114.13 481.213,2114.63 474.6,2119.72"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91167096"
- class="fil0 str0"
- points="478.94,2137.53 475.034,2128.84 488.055,2120.59 501.968,2126.49 508.455,2123.19 509.281,2133.22 503.724,2143.67 490.328,2137.22"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91167024"
- class="fil0 str0"
- points="426.42,2139.27 426.42,2128.84 434.233,2119.72 446.344,2130.17 444.259,2136.72 436.94,2129.83 432.063,2140.57"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166952"
- class="fil0 str0"
- points="368.691,2091.92 374.291,2091.95 374.437,2101.6 368.257,2111.03 360.01,2111.03 363.483,2101.91"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166880"
- class="fil0 str0"
- points="385.185,2100.61 392.521,2100.64 396.139,2108.98 389.96,2117.11 379.543,2117.11 374.768,2108.86"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166808"
- class="fil0 str0"
- points="363.049,2158.81 356.104,2158.38 346.555,2121.89 353.065,2119.72 358.254,2125.56 367.337,2116.45 373.466,2121.89 373.643,2128.93 367.395,2134.92 370.679,2140.64 380.882,2140.97 384.805,2132.63 393.218,2134.91 400.059,2149.8 395.924,2160.55 384.637,2156.59 378.198,2166.66 369.228,2164.58"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166736"
- class="fil0 str0"
- points="305.32,2207.46 311.788,2210.1 311.5,2217.57 308.792,2223.1 302.716,2223.1 299.243,2216.58"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166664"
- class="fil0 str0"
- points="346.555,2225.7 346.555,2211.8 352.197,2208.33 359.013,2213.87 359.968,2221.39 357.943,2230.61 352.197,2230.48"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166592"
- class="fil0 str0"
- points="340.478,2259.15 349.55,2254.84 353.602,2263.62 347.857,2267.84 342.648,2272.18 335.269,2267.84"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166520"
- class="fil0 str0"
- points="326.588,2290.86 330.452,2290.02 336.24,2301.84 334.401,2304.76 327.891,2305.19 325.72,2300.85"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166448"
- class="fil0 str0"
- points="324.809,2346.49 331.466,2353.97 331.797,2358.19 324.852,2362.09 319.644,2356.88 321.773,2350.78"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166376"
- class="fil0 str0"
- points="325.245,2779.5 326.695,2776.72 330.018,2773.03 335.896,2776.72 337.44,2783.86 333.533,2789.08 327.891,2789.51"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166304"
- class="fil0 str0"
- points="272.766,3011.9 264.519,3010.17 262.843,2978.21 269.052,2977.83 279.711,2993.66"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166232"
- class="fil0 str0"
- points="247.784,2994.34 255.34,3006.32 252.8,3017.99 244.987,3022.33 238.476,3007.56 239.838,2999.49"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166160"
- class="fil0 str0"
- points="264.712,3016.49 271.4,3024.56 268.86,3039.27 263.651,3044.05 257.14,3040.14 254.162,3025.55"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166088"
- class="fil0 str0"
- points="240.646,3045.78 232.834,3047.96 227.625,3042.31 230.856,3032.13 240.582,3036.29"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91166016"
- class="fil0 str0"
- points="207.225,3045.35 207.225,3044.92 210.022,3036.03 215.841,3031.95 221.114,3037.1 217.208,3047.09 209.838,3048.7"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165944"
- class="fil0 str0"
- points="211.131,3074.02 210.263,3069.67 210.022,3060.79 218.88,3056.71 224.153,3064.03 225.889,3068.37 215.915,3077.37"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165872"
- class="fil0 str0"
- points="195.939,3087.92 192.901,3075.76 196.132,3070.35 202.386,3071.48 204.62,3077.06 204.609,3081.37 205.932,3087.8"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165800"
- class="fil0 str0"
- points="200.289,3115.16 188.56,3114.41 185.836,3102.31 180.314,3096.17 186.149,3087.72 195.875,3093.63 202.016,3107.03 200.703,3110.04"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165728"
- class="fil0 str0"
- points="163.395,3039.15 140.815,3037.53 141.249,3030.58 147.084,3026.04 163.374,3034.02"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165656"
- class="fil0 str0"
- points="162.305,3068.36 154.259,3079.63 149.071,3079.54 149.935,3064.62 143.853,3058.38 150.798,3051.43 156.633,3046.89 160.407,3053.17 157.211,3060.58"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165584"
- class="fil0 str0"
- points="151.655,3146.96 136.484,3146.44 133.441,3141.5 147.326,3130.05 154.897,3124.21 173.863,3126.57 178.914,3132.68 172.288,3140.89"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165512"
- class="fil0 str0"
- points="166.183,3106.84 171.969,3107.92 178.799,3114.4 179,3119.16 166.867,3117.77 161.654,3111.96"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165440"
- class="fil0 str0"
- points="123.462,3114.73 121.721,3099.37 131.459,3087.72 135.232,3088.35 136.811,3096.63 131.054,3107.45 134.293,3114.81"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165368"
- class="fil0 str0"
- points="98.813,3085.09 90.3449,3105.11 92.4564,3108.56 100.794,3108.78 105.859,3105.46 122.12,3114.24 122.2,3120.94 118.794,3128.57 124.795,3134.78 123.752,3142.38 113.857,3149.22 111.359,3138.67 104.948,3139.89 100.309,3129.31 86.3825,3119.37 74.1171,3122.07 72.4157,3111.57 67.6728,3105.54 58.1744,3104.57 52.4884,3098.18 50.8534,3085.95 41.1199,3074.77 34.4915,3074.87 29.1595,3073.65 26.3728,3083.28 18.8654,3083.7 13.3646,3071.39 16.3306,3058.37 11.012,3052.68 14.3162,3043.96 33.5849,3035.75 42.3408,3038.52 51.701,3037.09 59.1953,3027.51 67.5138,3032.8 65.2332,3047.71 71.3886,3049.28 76.6471,3043.26 74.7148,3038.85 74.6712,3032.67 70.0742,3024.81 55.7411,3022.76 68.3286,3006.26 80.6746,3000.85 96.5307,3016.21 111.167,3018.9 117.585,3029.69 126.015,3033.32 127.334,3043.78 137.343,3055.96 129.954,3077.59 112.327,3080.44 101.229,3068.17 94.4933,3067.5 88.7378,3077.46"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165296"
- class="fil0 str0"
- points="240.529,3169.96 238.749,3175.41 232.835,3175.24 227.614,3183.44 214.613,3173.8 217.212,3166.26 230.856,3159.83 234.906,3162.65 242.604,3166.52"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165224"
- class="fil0 str0"
- points="925.18,3112.1 932.084,3112.1 935.15,3113.47 940.911,3113.82 938.458,3118.35 935.188,3121.94 924.874,3122.62 922.573,3118.73 920.359,3116.23"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165152"
- class="fil0 str0"
- points="956.431,3114.27 958.424,3131.82 952.116,3132.8 950.352,3129.15 950.309,3119.71"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165080"
- class="fil0 str0"
- points="970.755,3094.72 972.868,3106.03 978.467,3112.69 978.256,3120.46 976.76,3122.09 976.655,3125.74 971.522,3131.08 966.873,3127.16 966.412,3113.95 965.935,3096.25"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91165008"
- class="fil0 str0"
- points="1018.4,3119.64 1020.93,3124.87 1014.49,3131.51 1001.6,3129.76 1001.14,3125.24 1002.39,3118.84 1008.15,3117.26 1011.56,3114.27"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91164936"
- class="fil0 str0"
- points="1038.46,3103.96 1051.49,3097.33 1053.99,3108.34 1044.88,3110.23"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91164864"
- class="fil0 str0"
- points="1056.69,3091.36 1058.77,3084.39 1065.81,3084.3 1070.49,3094.88 1064.41,3098.07 1057.81,3094.22"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91164792"
- class="fil0 str0"
- points="1113.02,3078.37 1112.59,3085.47 1097.3,3082.93 1093.15,3076.16 1097.4,3070.49"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91164720"
- class="fil0 str0"
- points="1157.3,3082.72 1153.82,3088.51 1147.22,3084.67 1141.77,3080.94 1151.22,3073.1"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91107264"
- class="fil0 str0"
- points="1130.82,3055.78 1132.99,3063.75 1119.87,3073.81 1112.25,3067.04 1123.01,3055.72"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91107192"
- class="fil0 str0"
- points="1214.16,3108.49 1205.38,3108.12 1205.57,3100.48 1210.19,3095.95 1212.42,3096.12 1218.33,3101.66 1221.53,3104"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91107120"
- class="fil0 str0"
- points="1197.23,3075.77 1191.15,3075.91 1185.85,3063.38 1189.95,3049.66 1197.23,3052.25"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91107048"
- class="fil0 str0"
- points="344.384,2648.78 349.552,2643.54 351.287,2631.43 356.207,2632.83 366.087,2650.95 361.378,2656.18 351.329,2656.16"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106976"
- class="fil0 str0"
- points="295.529,2971.31 308.358,2990.62 308.358,3000.61 299.677,3000.61 294.427,2993.64 291.924,2974.3"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106904"
- class="fil0 str0"
- points="331.797,3006.69 324.877,3005.19 313.092,2990.17 313.193,2977.77 317.666,2973.92 328.759,2985.41 329.231,2987.11 336.138,2993.66"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106832"
- class="fil0 str0"
- points="303.342,2946.12 310.095,2951.09 310.963,2966.3 304.018,2973.25 294.861,2963.67 293.66,2953.01"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106760"
- class="fil0 str0"
- points="331.857,3205.19 341.683,3205.66 343.048,3210.35 335.282,3215.49 329.182,3220.36 321.389,3216.37"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106688"
- class="fil0 str0"
- points="353.509,3179.88 358.325,3174.39 362.675,3167.4 368.594,3173.08 368.657,3186.46 365.666,3190.73 356.961,3189.96"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106616"
- class="fil0 str0"
- points="287.09,3032.75 279.711,3027.11 281.073,3016.86 286.414,3013.45 291.366,3023.26"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106544"
- class="fil0 str0"
- points="302.474,3033.43 308.728,3042.37 306.622,3046.22 297.507,3047.09 293.167,3041.44 295.831,3034.24"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106472"
- class="fil0 str0"
- points="319.402,3019.96 321.38,3034.06 318.157,3035.15 315.303,3039.7 310.963,3033.62 312.325,3020.77"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106400"
- class="fil0 str0"
- points="339.176,3031.45 339.236,3023.38 354.56,3013.88 356.538,3020.59 350.692,3028.72 348.107,3033.41 341.346,3033.62"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106328"
- class="fil0 str0"
- points="321.801,3090.79 320.76,3098.6 315.034,3100.47 308.792,3103.12 288.826,3096.17 291.924,3078.11 298.568,3077.3 304.387,3084.07 322.248,3083.57"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106256"
- class="fil0 str0"
- points="352.133,3102.75 350.33,3110.47 349.762,3116.42 347.41,3120.33 341.16,3124.66 328.055,3125.23 322.248,3117.89 330.061,3110.07 331.066,3108.12 341.406,3096.35 351.956,3095.54"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106184"
- class="fil0 str0"
- points="304.886,3077.06 308.172,3073.76 308.791,3071.41 314.495,3065.51 322.007,3064.27 320.946,3074.45 314.869,3081.4 309.4,3080.19"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106112"
- class="fil0 str0"
- points="338.742,3093.56 333.099,3089.22 333.593,3068.55 339.369,3065.14 350.192,3087.44"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91106040"
- class="fil0 str0"
- points="383.075,3010.35 393.191,3016.49 394.3,3021.89 411.428,3046.36 409.442,3055.33 408.692,3064.04 401.4,3071.3 391.758,3069.68 392.334,3063.18 394.302,3052.47 384.982,3044.8 376.938,3026.67 378.674,3014.08"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105968"
- class="fil0 str0"
- points="368.071,3124.66 360.175,3121.75 362.605,3104.94 365.219,3094.43 383.208,3094.24 393.368,3101.45 388.961,3107.86 377.541,3110.77"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105896"
- class="fil0 str0"
- points="355.915,3044.14 358.768,3039.89 372.356,3044.29 373.466,3050.56 374.131,3056.09 363.917,3058.38 354.802,3050.13"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105824"
- class="fil0 str0"
- points="378.405,3129.14 375.192,3123.61 384.751,3114.41 404.653,3124.03 402.716,3129.45"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105752"
- class="fil0 str0"
- points="400.107,3114.37 399.933,3104.07 415.135,3095.74 420.713,3099.27 415.303,3112.51"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105680"
- class="fil0 str0"
- points="484.149,3064.9 449.426,3104.6 439.897,3105.42 433.162,3097.79 434.794,3088.66 423.633,3085.46 421.211,3076.19 428.723,3061.89 440.744,3064.9 451.221,3063.78 479.133,3056.88"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105608"
- class="fil0 str0"
- points="445.687,3125.1 440.908,3120.02 454.189,3104.07 463.314,3103.56 468.892,3107.09 460.565,3119.08 459.171,3118.43 453.445,3125.11"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105536"
- class="fil0 str0"
- points="476.587,3127.59 475.468,3120.93 469.524,3113.58 475.468,3108.33 475.527,3102.43 479.816,3098.14 488.937,3104.5 546.41,3090.76 531.026,3112.24 539.638,3131.74 524.275,3148.27 524.517,3158.02 518.462,3166.46 505.873,3168.41 490.262,3162.06 480.217,3168.39 464.774,3167.46 456.601,3155.12 459.535,3140.79"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105464"
- class="fil0 str0"
- points="500.932,3186.84 497.368,3191.84 483.015,3188.96 477.802,3177.79 482.403,3174 493.264,3175.66"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105392"
- class="fil0 str0"
- points="455.089,3173.51 455.969,3173.02 459.398,3170.09 466.353,3174.36 465.774,3182.06 464.38,3188.36 453.066,3188.09 450.891,3177.35"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105320"
- class="fil0 str0"
- points="455.666,3214.27 468.513,3200.93 480.242,3201.72 479.663,3210.73 467.389,3219.36"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105248"
- class="fil0 str0"
- points="537.701,3142.6 545.34,3134.91 552.295,3137.44 548.677,3145.58 539.905,3147.1"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105176"
- class="fil0 str0"
- points="537.093,3150.98 545.35,3163.5 538.981,3167.25 531.315,3170.77 527.284,3159.11"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105104"
- class="fil0 str0"
- points="623.04,3214.18 632.594,3211.71 629.263,3219.37 624.842,3220.55 619.862,3223.33 614.304,3221.84 610.188,3219.05 615.656,3212.66"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- <polygon
- id="_91105032"
- class="fil0 str0"
- points="709.416,3181.17 712.578,3182.96 718.244,3182.88 707.745,3191.88 698.859,3199.44 690.487,3195.16 695.955,3185.29 702.946,3181.16"
- style="fill: rgb(238, 238, 212); stroke: rgb(31, 26, 23); stroke-width: 3.98996;" />
- </g>
- <polygon
- class="fil1 str1"
- points="892.558,1634.74 881.896,1628.14 870.453,1631.06 860.036,1606.73 866.113,1595.44 899.535,1587.62 908.877,1598.64 918.083,1598.51 923.98,1595.47 929.149,1600.17 928.93,1606.22 916.609,1611.27 904.132,1603 894.158,1605.66 901.318,1628.45"
- id="polygon84"
- style="fill: none; stroke: rgb(140, 140, 96); stroke-width: 1.70998;" />
- <polygon
- class="fil1 str1"
- points="951.187,1592.83 944.242,1592.83 937.731,1587.19 941.204,1581.11 949.971,1584.43"
- id="polygon86"
- style="fill: none; stroke: rgb(140, 140, 96); stroke-width: 1.70998;" />
- <polygon
- class="fil1 str1"
- points="714.87,1862.05 715.497,1858.67 723.31,1855.63 725.133,1861.99 722.576,1866.59 720.706,1869.96 713.327,1870.39"
- id="polygon88"
- style="fill: none; stroke: rgb(140, 140, 96); stroke-width: 1.70998;" />
- <g
- id="_124239120">
- <polygon
- id="_124840120"
- class="fil1 str2"
- points="1266.81,1320.59 1280.73,1355.15 1348.52,1365.88 1378.48,1352.79 1379.62,1333.66 1364.8,1311.34 1383.24,1302.42 1401.44,1307.59 1406.94,1303.11 1406.59,1286.23 1393.99,1277.05 1394.3,1259.63 1403.72,1258.16 1408.29,1226.72 1389.74,1218.91 1377.03,1191.57 1381.94,1173.14 1397,1167.18 1396.51,1150.45 1471.15,1167.96 1516.62,1162.12 1504.59,1129.9 1439.79,1020.47 1447.28,995.77 1545.9,810.813 1549.63,765.543 1503.25,730.84 1455.73,633.814 1383.06,604.25 1358.46,501.718 1387.41,449.541 1393.92,402.814 1385.74,388.966 1352.78,389.081 1406.98,343.479 1396.63,307.18 1400.14,273.285 1452.27,205.546 1422.82,130.452 1335.1,87.2276 1333.06,68.1732 1306.22,51.2835 1278.39,12.5376 1262.71,22.4227 1247.21,17.3925 1236.46,33.0009 1193.47,67.0789 1143.85,54.1508 1115.32,64.1525 1097.91,105.588 1068.55,131.72 1054.1,154.879 1059.65,170.934 1050.21,188.127 1031.81,293.372 1035.53,355.861 1025.49,391.044 1005.05,385.808 986.507,396.951 961.225,434.135 964.057,470.073 946.707,469.967 940.503,482.635 916.245,452.767 872.378,433.58 830.941,402.881 809.986,413.882 798.888,433.452 771.196,443.235 741.874,456.449 734.897,442.02 702.653,438.674 671.82,416.349 654.014,423.839 656.063,389.248 585.676,246.547 544.067,232.093 518.159,244.839 500.788,265.596 510.988,292.53 505.76,310.727 472.929,285.304 449.668,308.064 479.491,346.63 481.261,373.099 504.106,379.259 536.845,447.227 560.728,454.646 569.502,476.682 591.826,487.604 600.882,513.796 633.583,521.252 677.125,541.217 724.42,584.796 724.506,613.838 730.742,630.925 745.169,628.899 751.185,657.554 777.759,685.217 766.703,698.359 757.953,713.103 757.551,731.659 758.747,788.675 743.601,827.609 755.287,848.647 783.001,853.424 775.935,869.381 781.291,887.737 757.445,900.132 756.34,931.753 804.095,1042.11 786.503,1061.56 783.076,1118.06 765.291,1133.49 760.527,1149.03 754.505,1167.65 758.7,1184.48 754.073,1196.49 761.961,1235.63 782.238,1255.29 783.321,1276.01 800.196,1303.55 801.684,1323.4 811.888,1350.9 812.149,1372.98 823.287,1371.7 831.074,1359.29 840.805,1370.97 861.805,1378.74 868.363,1388.45 860.985,1403.94 866.303,1410.09 876.5,1403.43 880.458,1416.2 888.751,1415.36 895.771,1409.63 909.761,1411.71 918.091,1422.49 927.013,1421.66 933.578,1428.39 932.974,1428.95 948.026,1413.68 969.415,1402.58 972.617,1387.74 1026.26,1390.81 1072.98,1361.38 1076.5,1391.52 1168.84,1399.51 1200.14,1388.84 1242.83,1319.3 1256.46,1325.5"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <path
- id="_124840072"
- class="fil1 str2"
- d="m 1556.25,1452.97 5.5914,-18.8591 -10.735,-17.7727 28.3729,-18.895 19.2912,-1.8143 -8.764,-61.5248 -29.6724,-84.6324 -24.8936,-36.6968 -18.8186,-50.6542 -45.4721,5.8399 -74.6438,-17.5068 0.4953,16.727 -15.0601,5.9613 -4.913,18.427 12.7111,27.3457 18.5473,7.806 -4.5671,31.4386 -9.4191,1.468 -0.3178,17.4253 12.6011,9.1832 0.3545,16.8795 -5.4959,4.4807 -18.2053,-5.1775 -18.4353,8.9232 14.8173,22.3207 -1.1397,19.1241 -29.9606,13.0916 -67.7902,-10.7227 -13.9232,-34.5616 -10.3497,4.9034 -13.6291,-6.2001 -42.6871,69.5464 -31.3063,10.6697 -92.3395,-7.9905 -3.5191,-30.1461 -46.7181,29.435 -53.6418,-3.0657 -3.20165,14.8349 -21.389,11.1046 -14.4268,14.7101 c 0.61645,0.6401 1.23375,1.2765 1.85162,1.9095 l 0.5717,13.1287 6.99154,0.034 4.66996,-4.3003 18.7756,33.4082 -1.01801,12.4857 -8.20819,8.7163 0.0265,14.6822 -6.32465,7.736 5.46852,10.0852 -0.0958,31.3038 -8.72432,11.6929 4.40577,9.607 12.4669,7.1978 5.31548,9.7304 3.15976,20.8652 9.45734,9.64 -0.78146,5.7139 -6.43722,-0.3027 -14.4753,-11.7085 -13.4618,-1.1616 -2.36462,6.7097 1.16336,8.5752 19.6272,19.7044 3.94949,11.8288 -5.16072,4.6786 -9.01673,-0.7858 -1.77952,-10.5332 -19.6978,-11.4364 -18.4003,-0.1485 -9.5149,7.4068 -21.5341,0.2203 -7.20358,6.4022 -4.24902,7.7049 -12.4196,1.4361 -5.15132,26.6321 -19.2253,13.3669 -10.2214,43.2491 -12.7003,9.811 -0.88691,7.0226 -17.5159,11.6039 -20.3226,21.7823 -3.03009,7.2107 -7.72227,12.6701 -0.23142,14.7626 -6.15109,3.3257 -7.55185,-5.0026 -9.00961,13.6377 -7.46492,6.0126 -7.46207,11.3685 -9.88027,15.0535 -1.20896,23.6197 19.9116,27.4683 12.4353,-0.1647 9.3744,8.4447 7.81005,-4.2502 -8.97085,-12.1762 8.12612,-15.2619 20.6295,-4.0073 9.47358,37.8285 10.8473,5.6421 5.0111,21.0644 14.8338,5.8418 16.5347,49.7114 62.192,75.7388 17.5817,-2.3324 6.51018,-40.4539 14.8007,-6.1471 46.9185,32.1875 23.71265,0.075 9.5391,7.9546 8.9601,18.917 31.0208,-0.2184 16.2223,-45.8976 8.3145,-4.9883 -7.4915,-76.0138 50.0064,-46.2031 34.5841,-11.6481 -10.8949,-13.7024 0.01,-70.4207 -15.6808,-10.4317 -11.7866,1.6365 -14.5631,-12.7616 2.2868,-14.2527 -7.4356,-16.466 -13.2895,-8.7172 25.1903,-25.7059 13.2824,-3.8956 4.9484,-16.0071 28.5114,-13.9073 10.0627,-29.1845 26.0262,-12.4088 0.8442,-7.4248 30.6067,7.05 5.7444,-15.4713 -2.4769,-41.0746 -17.2226,-14.4092 12.763,-20.9567 28.0135,0.1237 14.5759,-10.8689 16.226,2.1158 14.2766,9.8572 6.1377,-37.7196 14.9643,-9.1062 72.6517,-13.0435 3.3834,-33.7299 41.1154,-19.4029 8.7312,7.1346 14.8529,-4.4696 12.5002,-26.7863 6.0642,5.0325 35.1387,1.6572 36.9117,-7.1722 z"
- inkscape:connector-curvature="0"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124839760"
- class="fil1 str2"
- points="1646.69,1982.92 1681,1893.37 1670.36,1843.89 1615.98,1806.59 1600.45,1764.83 1600.37,1741.99 1611.43,1732.28 1612.08,1712.15 1601.44,1698.83 1605.92,1682.79 1555.24,1672.39 1540.33,1615.02 1545.72,1594.85 1565.07,1588.4 1572.7,1572.6 1565.67,1563.26 1574.25,1545.67 1566.06,1536.2 1539.81,1533.78 1550.79,1496.63 1552.94,1464.05 1556.39,1452.45 1519.34,1460.14 1484.2,1458.48 1478.14,1453.45 1465.64,1480.24 1450.78,1484.71 1442.05,1477.57 1400.94,1496.98 1397.55,1530.71 1324.9,1543.75 1309.94,1552.85 1303.8,1590.57 1289.52,1580.72 1273.3,1578.6 1258.72,1589.47 1230.71,1589.35 1217.95,1610.3 1235.17,1624.71 1237.65,1665.79 1231.9,1681.26 1201.29,1674.21 1200.45,1681.63 1174.42,1694.04 1164.36,1723.23 1135.85,1737.13 1130.9,1753.14 1117.62,1757.04 1092.43,1782.74 1105.72,1791.46 1113.15,1807.93 1110.87,1822.18 1125.43,1834.94 1137.22,1833.3 1152.9,1843.74 1152.89,1914.16 1163.78,1927.86 1207.19,1944.29 1258.55,1948.2 1320.53,1987.87 1360.91,2034.47 1387.76,1972.61 1455.48,1985.14 1556.27,1967.15 1577.17,2020.35 1590.75,2005.54 1616.07,2007.81 1614.27,2006.04"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124839736"
- class="fil1 str2"
- points="1485.88,2248.99 1464.08,2264.8 1481.78,2288.71 1463.16,2314.29 1438.17,2303.4 1434.12,2315.59 1421.03,2319.07 1438.93,2358.55 1451.15,2362.31 1479.1,2388 1481.01,2398.62 1495.39,2410.75 1489.33,2425.11 1503.41,2435.19 1517.62,2426.52 1526.07,2436.91 1526.09,2453.63 1544.88,2484.29 1556.03,2545.38 1575.32,2553.81 1583.06,2571.55 1576.69,2579.58 1588.01,2602.55 1575.24,2639.59 1665.27,2590.89 1683.08,2572.45 1723.18,2502.21 1752.06,2457.97 1771.07,2450.53 1806.32,2384.96 1848.05,2252.59 1835.88,2221.84 1800.69,2193.23 1789.05,2153.18 1763.98,2135.88 1732.06,2110.73 1687.04,2090.28 1668.91,2064.69 1615.81,2008.01 1590.62,2005.73 1577.04,2020.53 1556.13,1967.36 1455.35,1985.35 1387.63,1972.83 1371.85,2008.96 1391.5,2030.84 1407.04,2032.02 1411,2064.1 1419.71,2071.17 1413.09,2080.85 1417.03,2117.75 1432.35,2126.8 1432.73,2148.51 1419.08,2173.46 1430.02,2183.28 1453.3,2232.2"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124836256"
- class="fil1 str2"
- points="1110.41,2684 1091.63,2678 1088.98,2685.08 1078.95,2711.93 1075.46,2744.04 1085.02,2750.82 1085.72,2763.48 1100.22,2777.05 1108.9,2778.31 1110.07,2793.94 1120.95,2789.57 1137.1,2815.17 1152.26,2807.36 1152.52,2791.73 1172.74,2792.15 1172.81,2819.03 1200.87,2832.93 1217.13,2827.42 1238.68,2822.25 1231.64,2807.96 1237.75,2796.12 1219.84,2776.96 1201.56,2779.62 1182.67,2768.32 1189.19,2758.34 1204.56,2759.61 1208.29,2752.58 1246.36,2752.77 1270.32,2767.13 1291.58,2758.42 1324.79,2765.24 1374.61,2760.91 1400.05,2729.45 1407.65,2710.65 1421.92,2721.53 1459.43,2721.3 1464.27,2704.28 1494.89,2705.66 1525.75,2695.78 1544.82,2664.15 1569.12,2655.94 1574.78,2639.83 1575.24,2639.59 1588.01,2602.55 1576.69,2579.58 1583.06,2571.55 1575.32,2553.81 1556.03,2545.38 1544.88,2484.29 1526.09,2453.63 1526.07,2436.91 1517.62,2426.52 1503.41,2435.19 1489.33,2425.11 1495.39,2410.75 1481.01,2398.62 1479.1,2388 1451.15,2362.31 1438.93,2358.55 1428.86,2361.48 1402.76,2387.27 1389.03,2387.28 1389.08,2416.75 1377.16,2415.27 1367.72,2430.91 1378.59,2439.15 1372.33,2451.98 1390.09,2451.29 1391.34,2466.37 1408.03,2462.28 1431.03,2490.93 1423.76,2508.74 1377.71,2490.78 1349.11,2494.04 1331.64,2478.64 1306,2477.13 1291.23,2451.36 1240.04,2406.84 1215.45,2423.49 1204.84,2410.01 1183.37,2415.36 1177.82,2423.69 1162.88,2417.16 1146.97,2425.78 1136.42,2433.1 1153.07,2451.48 1138.33,2456.7 1129.62,2493.64 1111.94,2484.65 1087.34,2499.92 1073.45,2528.26 1095.71,2569.11 1089.18,2578.96 1094.35,2633.26 1115.66,2664.63"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124857376"
- class="fil1 str2"
- points="1430.02,2183.28 1419.08,2173.46 1432.73,2148.51 1432.35,2126.8 1417.03,2117.75 1413.09,2080.85 1419.71,2071.17 1411,2064.1 1407.04,2032.02 1391.5,2030.84 1371.85,2008.96 1360.87,2034.42 1320.53,1987.87 1258.55,1948.2 1207.19,1944.29 1163.78,1927.86 1129.2,1939.51 1079.2,1985.78 1086.69,2061.72 1078.37,2066.71 1062.15,2112.61 1055.07,2138.69 1065.73,2153.22 1069.09,2206.51 1089.65,2234.84 1077.41,2243.02 1087.11,2252.61 1079.04,2266.19 1049.57,2270.03 1091.51,2322.46 1103.87,2319.42 1121.72,2346.67 1126.64,2375.5 1106.95,2396.56 1107,2405.1 1129.41,2419.45 1140.29,2418.05 1146.97,2425.78 1162.88,2417.16 1177.82,2423.69 1183.37,2415.36 1204.84,2410.01 1215.45,2423.49 1240.04,2406.84 1291.23,2451.36 1306,2477.13 1331.64,2478.64 1349.11,2494.04 1377.71,2490.78 1423.76,2508.74 1431.03,2490.93 1408.03,2462.28 1391.34,2466.37 1390.09,2451.29 1372.33,2451.98 1378.59,2439.15 1367.72,2430.91 1377.16,2415.27 1389.08,2416.75 1389.03,2387.28 1402.76,2387.27 1428.86,2361.48 1438.93,2358.55 1421.03,2319.07 1434.12,2315.59 1438.17,2303.4 1463.16,2314.29 1481.78,2288.71 1464.08,2264.8 1485.88,2248.99 1453.3,2232.2"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124853848"
- class="fil1 str2"
- points="701.798,2879.74 696.659,2884.78 676.072,2862.29 645.998,2873.75 631.458,2873.97 629.168,2863.92 614.825,2853.04 604.484,2859.38 604.271,2867.68 616.528,2875.01 608.333,2894.11 593.691,2897.09 592.29,2911.08 600.574,2920.76 593.733,2926.89 594.498,2938.88 619.967,2951.96 639.263,2942.32 674.917,2969.69 706.523,2980.15 752.417,2988.06 758.077,3000.59 768.943,2992.27 780.117,2997.59 782.852,3008.01 810.923,3002.5 809.7,2988.07 817.6,2977.44 835.253,2980.06 865.162,2976.12 875.258,2971.8 895.324,2977.5 893.857,2968.57 907.1,2958.94 897.939,2952.53 888.946,2960.18 891.799,2947.46 902.202,2944.25 897.85,2933.28 891.37,2919.27 901.478,2910.74 883.856,2889.32 891.308,2858.88 918.923,2842.42 916.723,2804.85 901.898,2793.4 890.301,2798.88 893.515,2786.84 868.71,2776.92 851.034,2784.83 839.203,2773 833.758,2785.32 808.832,2775.62 780.133,2798.12 775.339,2794.5 771.866,2799.95 772.241,2806.46 775.576,2810.39 766.709,2820.94 697.552,2847.18"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124859200"
- class="fil1 str2"
- points="875.177,2729.06 952.598,2721.78 968.256,2665.41 991.77,2654.62 1004.25,2660.56 1020.62,2632.25 1038.87,2641.43 1059.76,2673.6 1089.21,2685.26 1079.08,2712.26 1075.59,2744.39 1085.15,2751.18 1085.86,2763.84 1100.35,2777.42 1109.03,2778.68 1110.2,2794.33 1100.89,2799.5 1092.94,2820.34 1071.79,2834.66 1049.87,2834.59 1046.16,2848.06 1052.01,2860.71 1056.41,2883.28 1043.9,2882.52 1038.47,2892.87 1054.6,2899.79 1046.81,2914.56 1047.42,2931.6 1061.07,2940.64 1063.31,2956.43 1067.62,2958.58 1065.96,2972.56 1052.68,2979.68 1039.93,2968.24 1019.93,2972.61 1019.16,2958.78 1005.74,2968.25 997.134,2966.83 968.842,2975.59 961.777,2966.76 960.302,2967.6 953.263,2942.05 948.506,2937.81 932.585,2954.49 912.046,2929.51 897.85,2933.28 891.37,2919.27 901.478,2910.74 883.856,2889.32 891.308,2858.88 918.923,2842.42 916.723,2804.85 901.898,2793.4 890.301,2798.88 893.515,2786.84 868.71,2776.92 866.502,2724.03"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <g
- id="g99">
- <polygon
- id="_124835824"
- class="fil1 str2"
- points="272.766,3011.9 264.519,3010.17 262.843,2978.21 269.052,2977.83 279.711,2993.66"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124854976"
- class="fil1 str2"
- points="247.784,2994.34 255.34,3006.32 252.8,3017.99 244.987,3022.33 238.476,3007.56 239.838,2999.49"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124848616"
- class="fil1 str2"
- points="264.712,3016.49 271.4,3024.56 268.86,3039.27 263.651,3044.05 257.14,3040.14 254.162,3025.55"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124852216"
- class="fil1 str2"
- points="240.646,3045.78 232.834,3047.96 227.625,3042.31 230.856,3032.13 240.582,3036.29"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124865992"
- class="fil1 str2"
- points="207.225,3045.35 207.225,3044.92 210.022,3036.03 215.841,3031.95 221.114,3037.1 217.208,3047.09 209.838,3048.7"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124847728"
- class="fil1 str2"
- points="211.131,3074.02 210.263,3069.67 210.022,3060.79 218.88,3056.71 224.153,3064.03 225.889,3068.37 215.915,3077.37"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124856152"
- class="fil1 str2"
- points="195.939,3087.92 192.901,3075.76 196.132,3070.35 202.386,3071.48 204.62,3077.06 204.609,3081.37 205.932,3087.8"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124861384"
- class="fil1 str2"
- points="200.289,3115.16 188.56,3114.41 185.836,3102.31 180.314,3096.17 186.149,3087.72 195.875,3093.63 202.016,3107.03 200.703,3110.04"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124839040"
- class="fil1 str2"
- points="163.395,3039.15 140.815,3037.53 141.249,3030.58 147.084,3026.04 163.374,3034.02"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124846792"
- class="fil1 str2"
- points="162.305,3068.36 154.259,3079.63 149.071,3079.54 149.935,3064.62 143.853,3058.38 150.798,3051.43 156.633,3046.89 160.407,3053.17 157.211,3060.58"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124864792"
- class="fil1 str2"
- points="151.655,3146.96 136.484,3146.44 133.441,3141.5 147.326,3130.05 154.897,3124.21 173.863,3126.57 178.914,3132.68 172.288,3140.89"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124846936"
- class="fil1 str2"
- points="166.183,3106.84 171.969,3107.92 178.799,3114.4 179,3119.16 166.867,3117.77 161.654,3111.96"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124848880"
- class="fil1 str2"
- points="123.462,3114.73 121.721,3099.37 131.459,3087.72 135.232,3088.35 136.811,3096.63 131.054,3107.45 134.293,3114.81"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124866136"
- class="fil1 str2"
- points="98.813,3085.09 90.3449,3105.11 92.4564,3108.56 100.794,3108.78 105.859,3105.46 122.12,3114.24 122.2,3120.94 118.794,3128.57 124.795,3134.78 123.752,3142.38 113.857,3149.22 111.359,3138.67 104.948,3139.89 100.309,3129.31 86.3825,3119.37 74.1171,3122.07 72.4157,3111.57 67.6728,3105.54 58.1744,3104.57 52.4884,3098.18 50.8534,3085.95 41.1199,3074.77 34.4915,3074.87 29.1595,3073.65 26.3728,3083.28 18.8654,3083.7 13.3646,3071.39 16.3306,3058.37 11.012,3052.68 14.3162,3043.96 33.5849,3035.75 42.3408,3038.52 51.701,3037.09 59.1953,3027.51 67.5138,3032.8 65.2332,3047.71 71.3886,3049.28 76.6471,3043.26 74.7148,3038.85 74.6712,3032.67 70.0742,3024.81 55.7411,3022.76 68.3286,3006.26 80.6746,3000.85 96.5307,3016.21 111.167,3018.9 117.585,3029.69 126.015,3033.32 127.334,3043.78 137.343,3055.96 129.954,3077.59 112.327,3080.44 101.229,3068.17 94.4933,3067.5 88.7378,3077.46"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124838896"
- class="fil1 str2"
- points="240.529,3169.96 238.749,3175.41 232.835,3175.24 227.614,3183.44 214.613,3173.8 217.212,3166.26 230.856,3159.83 234.906,3162.65 242.604,3166.52"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- </g>
- <g
- id="g116">
- <polygon
- id="_124848376"
- class="fil1 str2"
- points="443.893,2886.79 438.309,2878.57 411.303,2875.96 400.797,2846.4 389.267,2836 368.196,2851.22 367.103,2825.2 354.009,2835.06 342.792,2835.93 331.517,2820.04 326.984,2813.34 318.655,2817.98 323.011,2841.9 333.992,2853.29 331.73,2861.06 324.87,2855.63 318.389,2842.59 311.04,2843.08 307.199,2847.1 313.722,2854.08 313.266,2861.92 299.889,2864.62 300.748,2870.3 316.01,2879.55 314.431,2884.63 311.198,2886.84 309.348,2892.27 311.779,2901.47 312.318,2914.66 317.44,2922.78 317.118,2940.85 328.157,2969.79 342.51,2982.42 346.88,3001.15 358.094,3000.15 363.077,2978.55 383.336,2967.69 390.139,2970.75 383.218,2988.61 375.283,2987.85 367.985,2998.1 367.22,3006.12 383.919,3002.04 405.308,3001.37 413.36,3009.16 412.964,3017.12 405.489,3016.74 402.264,3020.74 413.217,3030.73 422.098,3025.01 425.606,3027.77 423.925,3048.85 431.993,3049.37 441.956,3058.82 479.824,3051.51 485.448,3046.64 494.459,3053.5 479.662,3077.15 479.701,3086.82 495.474,3086.45 505.365,3095.39 528.397,3088.6 564.025,3061.07 569.635,3070.42 561.105,3080.81 540.111,3106.4 544.117,3127.6 550.845,3131.65 560.044,3137.2 559.508,3141.76 584.629,3141.3 603.544,3121.5 613.217,3129.19 641.986,3114.91 658.085,3122.45 656.979,3088.1 671.961,3082.95 674.926,3063.09 684.832,3062.04 681.624,3042.72 671.403,3038.58 672.733,3024.74 696.041,3021.54 707.161,2996.65 701.625,2987.16 706.523,2980.15 674.917,2969.69 639.263,2942.32 619.967,2951.96 594.498,2938.88 593.733,2926.89 600.574,2920.76 592.29,2911.08 593.691,2897.09 608.333,2894.11 616.528,2875.01 604.271,2867.68 604.381,2859.88 596.51,2860.89 597.864,2850.36 578.371,2854.16 566.618,2840.33 550.978,2835.08 548.953,2862.17 523.876,2855.3 500.239,2862.47 505.417,2869 478.834,2876.05 459.805,2872.48"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124847464"
- class="fil1 str2"
- points="299.677,3000.61 295.944,2995.66 294.427,2993.64 291.924,2974.3 295.529,2971.31 308.358,2990.62 308.358,2996.39 308.358,3000.61"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124847848"
- class="fil1 str2"
- points="329.031,2986.39 329.231,2987.11 336.138,2993.66 333.051,3002.93 331.797,3006.69 324.877,3005.19 313.092,2990.17 313.193,2977.77 317.666,2973.92 328.759,2985.41"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124847872"
- class="fil1 str2"
- points="304.018,2973.25 297.507,2966.44 294.861,2963.67 293.66,2953.01 303.342,2946.12 310.095,2951.09 310.596,2959.87 310.963,2966.3"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124847752"
- class="fil1 str2"
- points="335.282,3215.49 330.944,3218.96 329.182,3220.36 321.389,3216.37 331.857,3205.19 341.683,3205.66 342.471,3208.36 343.048,3210.35"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124863352"
- class="fil1 str2"
- points="368.657,3186.46 365.666,3190.73 359.476,3190.18 356.961,3189.96 353.509,3179.88 358.325,3174.39 362.675,3167.4 368.594,3173.08 368.63,3180.81"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124864144"
- class="fil1 str2"
- points="280.679,3019.82 281.073,3016.86 286.414,3013.45 291.366,3023.26 288.896,3028.74 287.09,3032.75 279.711,3027.11"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124853872"
- class="fil1 str2"
- points="297.507,3047.09 294.421,3043.07 293.167,3041.44 295.831,3034.24 302.474,3033.43 308.728,3042.37 307.512,3044.59 306.622,3046.22"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124845808"
- class="fil1 str2"
- points="315.303,3039.7 312.217,3035.38 310.963,3033.62 312.325,3020.77 319.402,3019.96 321.38,3034.06 319.518,3034.69 318.157,3035.15"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124853584"
- class="fil1 str2"
- points="350.692,3028.72 348.107,3033.41 343.299,3033.56 341.346,3033.62 339.176,3031.45 339.236,3023.38 354.56,3013.88 356.538,3020.59 353.161,3025.29"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124858600"
- class="fil1 str2"
- points="304.387,3084.07 314.704,3083.78 322.248,3083.57 321.801,3090.79 321.06,3096.34 320.76,3098.6 315.034,3100.47 308.792,3103.12 288.826,3096.17 291.924,3078.11 298.568,3077.3"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124854832"
- class="fil1 str2"
- points="341.406,3096.35 351.956,3095.54 352.133,3102.75 351.092,3107.21 350.33,3110.47 349.762,3116.42 348.089,3119.2 347.41,3120.33 341.16,3124.66 328.055,3125.23 322.248,3117.89 330.061,3110.07 331.066,3108.12"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124841248"
- class="fil1 str2"
- points="317.436,3078.47 314.869,3081.4 309.4,3080.19 306.19,3077.96 304.886,3077.06 308.172,3073.76 308.791,3071.41 314.495,3065.51 322.007,3064.27 320.946,3074.45"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124855624"
- class="fil1 str2"
- points="333.45,3074.53 333.593,3068.55 339.369,3065.14 350.192,3087.44 343.578,3090.98 338.742,3093.56 333.099,3089.22"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124855696"
- class="fil1 str2"
- points="376.938,3026.67 378.674,3014.08 383.075,3010.35 393.191,3016.49 394.3,3021.89 404.193,3036.03 411.428,3046.36 409.442,3055.33 408.908,3061.53 408.692,3064.04 401.4,3071.3 391.758,3069.68 392.334,3063.18 394.302,3052.47 384.982,3044.8"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124855120"
- class="fil1 str2"
- points="390.822,3105.15 388.961,3107.86 377.541,3110.77 370.807,3120.65 368.071,3124.66 360.175,3121.75 362.605,3104.94 365.219,3094.43 383.208,3094.24 393.368,3101.45"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124851424"
- class="fil1 str2"
- points="374.131,3056.09 363.917,3058.38 357.435,3052.51 354.802,3050.13 355.915,3044.14 358.768,3039.89 372.356,3044.29 373.466,3050.56 373.85,3053.76"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124857712"
- class="fil1 str2"
- points="381.989,3117.07 384.751,3114.41 404.653,3124.03 402.716,3129.45 388.673,3129.27 378.405,3129.14 375.192,3123.61"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124849816"
- class="fil1 str2"
- points="410.742,3098.14 415.135,3095.74 420.713,3099.27 415.303,3112.51 406.526,3113.58 400.107,3114.37 399.933,3104.07"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124849072"
- class="fil1 str2"
- points="451.221,3063.78 479.133,3056.88 484.149,3064.9 464.092,3087.83 449.426,3104.6 439.897,3105.42 435.108,3099.99 433.162,3097.79 434.794,3088.66 423.633,3085.46 421.211,3076.19 428.723,3061.89 440.744,3064.9"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124849864"
- class="fil1 str2"
- points="459.76,3118.71 459.171,3118.43 453.445,3125.11 447.928,3125.11 445.687,3125.1 440.908,3120.02 454.189,3104.07 463.314,3103.56 468.892,3107.09 460.565,3119.08"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124849672"
- class="fil1 str2"
- points="477.802,3177.79 481.074,3175.09 482.403,3174 493.264,3175.66 500.932,3186.84 497.368,3191.84 489.077,3190.17 483.015,3188.96"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124848568"
- class="fil1 str2"
- points="457.845,3188.2 453.066,3188.09 450.891,3177.35 453.876,3174.62 455.089,3173.51 455.969,3173.02 459.398,3170.09 466.353,3174.36 465.774,3182.06 464.38,3188.36"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124849720"
- class="fil1 str2"
- points="476.853,3201.49 480.242,3201.72 479.663,3210.73 467.389,3219.36 460.618,3216.42 455.666,3214.27 468.513,3200.93"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124858408"
- class="fil1 str2"
- points="550.285,3136.71 552.295,3137.44 548.677,3145.58 539.905,3147.1 538.632,3144.5 537.701,3142.6 545.34,3134.91"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124849504"
- class="fil1 str2"
- points="540.821,3166.16 538.981,3167.25 531.315,3170.77 527.284,3159.11 532.95,3154.41 537.093,3150.98 545.35,3163.5"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124858072"
- class="fil1 str2"
- points="456.601,3155.12 459.535,3140.79 476.587,3127.59 475.468,3120.93 469.524,3113.58 475.468,3108.33 475.527,3102.43 479.816,3098.14 488.937,3104.5 546.41,3090.76 531.026,3112.24 536,3123.5 539.638,3131.74 524.275,3148.27 524.447,3155.21 524.517,3158.02 518.462,3166.46 505.873,3168.41 490.262,3162.06 480.217,3168.39 464.774,3167.46"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- </g>
- <polygon
- id="_124860688"
- class="fil1 str2"
- points="645.754,2416.75 673.61,2427.63 677.504,2417.78 698.495,2420.78 724.382,2399.46 735.962,2406.83 738.921,2431.19 750.321,2435.93 770.715,2412.47 797.152,2416.3 803.266,2405.07 825.52,2404.73 831.235,2365.9 823.655,2355.54 829.202,2347.65 823.967,2331.65 806.687,2286.3 815.776,2279.18 802.543,2261.43 797.81,2223.04 808.231,2208.56 778.643,2194.57 791.702,2189.18 766.274,2157.05 741.564,2149.62 714.195,2113.64 699.942,2096.18 682.31,2087.69 658.233,2087.36 649.109,2114.14 637.041,2124.73 619.645,2119.72 586.682,2125.52 555.396,2140.77 555.031,2165.28 563.071,2165.56 569.468,2193.63 553.069,2193.43 518.675,2253.04 521.205,2270.12 491.621,2301.21 454.775,2288.95 431.183,2264.34 424.509,2272.14 420.961,2308.75 428.463,2316.31 404.054,2342.78 384.527,2400.54 392.2,2419.5 403.237,2423.14 403.809,2451.54 410.475,2454.41 417.712,2464.96 402.523,2474.65 405.334,2489.15 397.085,2495.68 393.829,2524.51 407.269,2536.82 440.787,2542.76 479.433,2509.9 491.272,2509.84 512.035,2477.97 527.667,2477.44 541.062,2450.11 559.474,2459.25 570.796,2459.34 599.722,2459.44 631.338,2442.18"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124854568"
- class="fil1 str2"
- points="855.993,2624.48 863.048,2625.71 862.962,2632.14 855.746,2632.58 853.548,2626.45 848.018,2630.15 850.892,2639.92 849.764,2652.02 857.353,2656.57 859.788,2655.2 869.772,2661.13 860.037,2667.95 855.727,2677.44 857.886,2690.29 876.373,2705.54 875.177,2729.06 952.598,2721.78 968.256,2665.41 991.77,2654.62 1004.25,2660.56 1020.62,2632.25 1038.87,2641.43 1059.76,2673.6 1089.12,2685.39 1091.76,2678.3 1110.54,2684.31 1115.79,2664.92 1094.48,2633.52 1089.31,2579.19 1095.84,2569.33 1073.58,2528.45 1087.47,2500.09 1112.07,2484.81 1129.75,2493.81 1138.47,2456.84 1153.2,2451.62 1136.55,2433.22 1147.1,2425.9 1140.42,2418.16 1129.54,2419.56 1107.13,2405.2 1107.08,2396.66 1126.77,2375.58 1121.85,2346.73 1104,2319.46 1091.64,2322.51 1049.7,2270.03 1079.17,2266.2 1087.24,2252.6 1077.54,2243.01 1089.78,2234.82 1069.22,2206.47 1065.73,2153.22 1055.2,2138.59 1062.15,2112.61 1031.13,2112.83 1022.17,2093.91 1012.63,2085.96 988.916,2085.88 941.998,2053.69 927.197,2059.84 920.687,2100.29 902.573,2102.34 890.26,2104.44 866.13,2130.15 863.575,2199.98 840.551,2194.96 814.137,2204.71 807.95,2208.76 797.81,2223.04 802.543,2261.43 815.776,2279.18 806.687,2286.3 824.237,2332.36 829.202,2347.65 823.655,2355.54 831.235,2365.9 825.52,2404.73 803.266,2405.07 797.152,2416.3 770.715,2412.47 750.148,2435.87 750.251,2464.15 771.722,2477 782.995,2474.88 790.749,2497.03 811.397,2501.12 824.279,2496.5 846.796,2520.41 853.961,2546.7 839.501,2569.81 835.201,2562.17 821.734,2581.68"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124851472"
- class="fil1 str2"
- points="555.341,2497.17 554.459,2523.43 536.267,2525.2 527.031,2540.67 540.911,2547.49 540.927,2561.29 556.397,2572.87 562.553,2594.72 553.841,2625.16 540.705,2620.89 536.228,2644.07 547.471,2654.9 533.606,2666.6 524.204,2695.59 543.685,2709.22 541.029,2722.35 516.578,2725.93 507.308,2732.96 508.209,2746.41 521.353,2778.54 547.643,2787.26 556.244,2777.91 571.268,2793.24 564.401,2817.34 576.782,2838.73 566.618,2840.33 578.371,2854.16 597.864,2850.36 596.51,2860.89 604.484,2859.38 614.825,2853.04 629.168,2863.92 631.458,2873.97 645.998,2873.75 676.072,2862.29 696.659,2884.78 701.798,2879.74 697.552,2847.18 766.709,2820.94 775.576,2810.39 772.241,2806.46 771.866,2799.95 775.339,2794.5 780.133,2798.12 808.832,2775.62 833.758,2785.32 839.203,2773 851.034,2784.83 868.71,2776.92 866.502,2724.03 875.177,2729.06 876.373,2705.54 857.886,2690.29 855.727,2677.44 860.037,2667.95 869.772,2661.13 859.788,2655.2 857.353,2656.57 849.764,2652.02 850.892,2639.92 848.018,2630.15 853.548,2626.45 855.746,2632.58 862.962,2632.14 863.048,2625.71 855.993,2624.48 821.734,2581.68 835.201,2562.17 839.501,2569.81 853.961,2546.7 846.796,2520.41 824.279,2496.5 811.397,2501.12 790.749,2497.03 782.995,2474.88 771.722,2477 750.251,2464.15 750.321,2435.93 738.921,2431.19 735.962,2406.83 724.382,2399.46 698.495,2420.78 677.504,2417.78 673.61,2427.63 645.754,2416.75 631.338,2442.18 599.722,2459.44 570.925,2459.2 570.936,2489.64"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <path
- id="_124852264"
- class="fil1 str2"
- d="m 330.018,2773.03 5.87806,3.6842 0.89147,4.1264 0.65207,3.0179 -3.90645,5.2123 -4.01247,0.3086 -1.63018,0.1257 -2.64563,-10.0094 1.45035,-2.7836 3.32278,-3.6821 z m 21.2685,-141.603 4.92019,1.3962 5.70678,10.4659 4.17349,7.6536 -4.70929,5.2377 -7.14544,-0.018 -2.90298,-0.01 -6.9448,-7.3843 5.16728,-5.2314 1.73478,-12.1124 z m -19.6668,188.75 6.89607,-13.8531 7.37999,-42.1245 7.56752,5.0399 3.83492,-4.8703 -0.794,-6.6211 4.74292,-24.518 -10.3172,-24.1871 1.9471,-3.0372 4.71698,-1.5401 7.05852,2.7619 5.43546,-0.9924 -3.65423,-8.9301 -11.287,-5.953 -0.87722,-7.9605 7.60372,0.299 11.9813,3.5325 -0.34086,-4.5086 -6.61905,-5.3514 -7.10469,-14.4245 2.99874,-5.6943 5.61301,0.4024 8.92354,10.1747 6.698,0.2337 -12.9731,-29.1292 0.0108,-26.4175 -13.4715,-17.4435 2.70719,-5.9678 7.88757,-0.8359 0.51129,-4.6836 -6.05077,-4.707 -3.7175,-23.7106 -8.97313,-5.505 -2.06765,-7.6733 15.2106,-13.8608 30.7315,-3.6103 13.4402,12.3033 33.5185,5.947 38.6456,-32.8695 11.8388,-0.054 20.7637,-31.8695 15.6312,-0.5336 13.3957,-27.3312 18.4117,9.1425 11.4512,-0.048 0.0108,30.4422 -15.5953,7.5271 -0.88207,26.2619 -18.1913,1.7684 -9.23646,15.4676 13.8805,6.8188 0.0154,13.803 15.4705,11.5774 6.15593,21.8547 -8.7115,30.4391 -13.1364,-4.2698 -4.47759,23.1751 11.2437,10.8367 -13.8648,11.6991 -9.40262,28.9876 19.481,13.6291 -2.65617,13.1287 -24.4507,3.5818 -9.27009,7.0315 0.90116,13.4541 13.1441,32.122 26.2895,8.7234 8.60177,-9.3541 15.0236,15.3354 -6.86671,24.0939 12.3811,21.3936 -10.1641,1.6011 -15.6406,-5.2471 -2.0249,27.0827 -25.0769,-6.8693 -23.6365,7.1762 5.17782,6.5253 -26.5834,7.0506 -19.0284,-3.5705 -15.9119,14.3154 -5.5848,-8.227 -27.0052,-2.6114 -10.5064,-29.5513 -11.5298,-10.403 -21.0715,15.2223 -1.09239,-26.0202 -13.0942,9.8563 -11.2172,0.8664 -11.1722,-15.7441 z"
- inkscape:connector-curvature="0"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <g
- id="g149">
- <polygon
- id="_124852096"
- class="fil1 str2"
- points="1046.81,2914.56 1054.6,2899.79 1038.47,2892.87 1043.9,2882.52 1056.41,2883.28 1052.01,2860.71 1046.16,2848.06 1049.87,2834.59 1071.79,2834.66 1092.94,2820.34 1100.89,2799.5 1110.2,2794.33 1121.08,2789.95 1137.23,2815.57 1152.39,2807.76 1152.65,2792.11 1172.87,2792.53 1172.94,2819.43 1201,2833.34 1217.28,2827.87 1227.47,2851 1211.5,2856.94 1206.37,2874.25 1220.88,2891.94 1212.85,2896.74 1220.55,2909.89 1246.24,2917.38 1253.16,2929.55 1272.39,2939.79 1294.15,2939.26 1301.48,2954.11 1317.8,2956.53 1325.69,2975.93 1343.75,2985.16 1327.85,3000.45 1327.36,3010.63 1316.96,3017.51 1304.85,3009.58 1300.01,3013.29 1296.24,3030.21 1290.9,3038.94 1282.82,3039.19 1273.05,3040.6 1266.64,3037.07 1260.75,3041.02 1253.67,3047.69 1244.57,3034.19 1220.98,3031.41 1192.37,3022.07 1180.78,3033.71 1181.12,3052.38 1176.95,3059.87 1165.21,3059.51 1151.75,3046.07 1143.89,3053.24 1133.83,3053.59 1127.53,3046.94 1120.87,3051.57 1104.46,3054.96 1100.75,3043.55 1118.41,3009.43 1116.35,3006.32 1106.42,3004.64 1101.11,2986.67 1087.65,2984.09 1083.5,2966.13 1067.17,2958.28 1063.31,2956.43 1061.07,2940.64 1047.42,2931.6"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124856392"
- class="fil1 str2"
- points="1157.3,3082.72 1153.82,3088.51 1147.22,3084.67 1141.77,3080.94 1151.22,3073.1"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124840984"
- class="fil1 str2"
- points="1130.82,3055.78 1132.99,3063.75 1119.87,3073.81 1112.25,3067.04 1123.01,3055.72"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124850200"
- class="fil1 str2"
- points="1214.16,3108.49 1205.38,3108.12 1205.57,3100.48 1210.19,3095.95 1212.42,3096.12 1218.33,3101.66 1221.53,3104"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124846864"
- class="fil1 str2"
- points="1197.23,3075.77 1191.15,3075.91 1185.85,3063.38 1189.95,3049.66 1197.23,3052.25"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- </g>
- <polygon
- id="_124848544"
- class="fil1 str2"
- points="1211.5,2856.94 1227.47,2851 1217.26,2827.83 1238.81,2822.65 1231.77,2808.35 1237.88,2796.5 1219.97,2777.33 1201.69,2779.99 1182.8,2768.68 1189.32,2758.7 1204.69,2759.97 1208.42,2752.94 1246.49,2753.13 1270.46,2767.5 1291.71,2758.78 1324.92,2765.61 1374.74,2761.27 1400.18,2729.79 1407.78,2710.97 1422.05,2721.86 1459.56,2721.64 1464.4,2704.6 1495.02,2705.98 1525.89,2696.09 1544.95,2664.44 1569.25,2656.22 1574.91,2640.11 1664.71,2591.89 1661.79,2594.86 1649.79,2628.83 1619.63,2656.59 1599.34,2699.18 1573.78,2717.29 1568.01,2735.14 1530.07,2799.12 1485.65,2829.93 1469.78,2836.4 1450.69,2869.07 1448.29,2890.48 1427.77,2895.06 1389.32,2928.71 1381.94,2948.43 1343.75,2985.16 1325.69,2975.93 1317.8,2956.53 1301.48,2954.11 1294.15,2939.26 1272.39,2939.79 1253.16,2929.55 1246.24,2917.38 1220.55,2909.89 1212.85,2896.74 1220.88,2891.94 1206.37,2874.25"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <path
- id="_124846648"
- class="fil1 str2"
- d="m 902.573,2102.34 -61.6602,-75.4558 -16.5347,-49.7114 -14.8338,-5.8419 -5.0111,-21.0641 -10.8473,-5.6423 -9.47358,-37.8285 -20.6295,4.0073 -8.12612,15.2619 8.97085,12.1759 -7.81005,4.2507 -9.3744,-8.445 -12.4353,0.1644 -19.9116,-27.4683 -9.53827,1.6604 -11.8875,-11.3437 -8.03378,5.7268 -1.05734,45.9874 -48.0644,2.1745 -5.88005,8.5924 -6.6276,0.1484 -6.00146,-7.2283 -13.1235,-0.077 c -0.33117,0.4954 -0.40555,0.04 -0.73586,0.535 l 14.3502,39.4746 6.25511,-8.4744 32.8707,24.5459 23.2158,-11.3209 6.08098,9.0449 10.6797,-8.2831 36.9741,29.7283 -8.41767,9.0256 -17.3546,0.3961 -10.8128,-8.8127 -13.8161,8.9352 9.11904,16.1191 8.46156,-2.409 20.5309,37.2579 -7.83798,26.1533 27.3184,35.3211 24.7101,7.4236 25.4286,32.1328 -13.0591,5.3904 29.5875,13.9871 5.90656,-3.8517 26.4138,-9.7466 23.024,5.017 2.555,-69.8268 24.1298,-25.7087 12.313,-2.0975 z"
- inkscape:connector-curvature="0"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <g
- id="g158">
- <path
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.26771;"
- d="m 898.15625,2913.75 -14.125,3.75 4.3125,10.9062 -10.8125,3.125 -2.375,12.7188 8.96875,-7.5938 9.09375,6.375 -13.15625,9.5626 1.4375,8.875 -19.9375,-5.6563 -10.0625,4.3125 -29.71875,3.9062 -17.5625,-2.5937 -7.875,10.5625 1.21875,14.3438 -27.90625,5.5 -2.71875,-10.375 -11.125,-5.2813 -10.8125,8.25 -5.625,-12.4375 -45.65625,-7.875 -4.875,6.9688 5.53125,9.4374 -11.0625,24.75 -23.1875,3.1876 -1.3125,13.75 10.15625,4.125 3.1875,19.2187 -9.84375,1.0625 -2.96875,19.75 -14.90625,5.125 1.125,34.1562 -16.03125,-7.5 -28.59375,14.1876 -9.625,-7.625 -18.8125,19.6874 -25,0.4688 -4.15625,35.4062 -9.0625,-4.6874 -11.21875,0.5 -2.40625,11.75 9.71875,12.8437 17.71875,3.0937 4.75,-4.625 0.40625,-15.8124 5.625,-4.5313 4.75,7.375 -2.5625,19.2813 -5.625,6.7812 -27.625,9.7188 -6.5,7.3124 6.9375,8.75 20.71875,-8.625 25.03125,0.2188 12.9375,-11.0625 0.0312,-7.1875 9.90625,-11 12.09375,1.5625 7.78125,5.5313 15.96875,-3.4063 12.53125,2.7187 6.4375,-4.9062 -2.53125,-9.3125 18.09375,-1.6875 36.6875,-15.6875 30.21875,-0.6875 22.0625,-12.1875 -0.90625,19.1563 4.71875,0.062 6.9375,-6.0624 6,3.5 -12.9375,16.9687 9.53125,0.7187 29.34375,-36.875 -0.0312,-9.875 2.15625,-5.125 5.21875,5.2188 26.75,-9.4062 10.03125,6.8437 14.125,0.1875 4.78125,-7.5625 2.09375,11.6875 10.8125,-9.1562 -1.6875,-12.5313 10.8125,3.3437 7.71875,-10.5 2.25,-6.9687 5.6875,-1.5625 13.625,-3.75 24.25,-0.6562 6.125,-7.5313 0.34375,-13.2813 15.9375,-1.7812 3.9375,14.625 12.625,15.6875 5,0.9687 7.4375,-8 8.1875,5.0938 4.25005,-5.4688 -4.6563,-14.9374 4.1875,-3.4063 8.3438,17.1875 5.0937,-2.0312 -0.9063,-12.5 4.9376,-1.7188 7.5624,3.75 5.5938,-2.4375 -9.3438,-16.5313 -2.625,-10.5312 -9.5312,-12.875 1.375,-8.0938 15.5312,14.8126 10.8438,11.2187 5.1562,11.4375 6.0626,-0.4688 -3.8438,-12.9687 13.5312,0.3437 8.8438,11 0.6875,-10.8124 7.4687,0.2812 13.3126,-11.9688 -3.125,-11.8437 17.5624,-33.9375 -2.0624,-3.0938 -9.875,-1.6874 -5.2813,-17.875 -13.375,-2.5626 -4.125,-17.8437 -15.8125,-7.5313 -1.6562,13.9063 -13.1876,7.0937 -12.6874,-11.375 -19.9063,4.3438 -0.75,-13.75 -13.34375,9.4062 -8.5625,-1.4062 -28.15625,8.7188 -7.03125,-8.7813 -1.4375,0.8125 -7,-25.4062 -4.75,-4.2188 -15.84375,16.5938 -20.40625,-24.8438 z"
- transform="matrix(1.00541, 0, 0, 1.00541, 9.04408, 0.00501389)"
- id="_124858432"
- sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
- <polygon
- id="_124862656"
- class="fil1 str2"
- points="925.18,3112.1 932.084,3112.1 935.15,3113.47 940.911,3113.82 938.458,3118.35 935.188,3121.94 924.874,3122.62 922.573,3118.73 920.359,3116.23"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124867096"
- class="fil1 str2"
- points="956.431,3114.27 958.424,3131.82 952.116,3132.8 950.352,3129.15 950.309,3119.71"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124213728"
- class="fil1 str2"
- points="970.755,3094.72 972.868,3106.03 978.467,3112.69 978.256,3120.46 976.76,3122.09 976.655,3125.74 971.522,3131.08 966.873,3127.16 966.412,3113.95 965.935,3096.25"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124211160"
- class="fil1 str2"
- points="1018.4,3119.64 1020.93,3124.87 1014.49,3131.51 1001.6,3129.76 1001.14,3125.24 1002.39,3118.84 1008.15,3117.26 1011.56,3114.27"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124241040"
- class="fil1 str2"
- points="1038.46,3103.96 1051.49,3097.33 1053.99,3108.34 1044.88,3110.23"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124219728"
- class="fil1 str2"
- points="1056.69,3091.36 1058.77,3084.39 1065.81,3084.3 1070.49,3094.88 1064.41,3098.07 1057.81,3094.22"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124230192"
- class="fil1 str2"
- points="1113.02,3078.37 1112.59,3085.47 1097.3,3082.93 1093.15,3076.16 1097.4,3070.49"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- </g>
- <g
- id="g168">
-
- <polygon
- id="_124228272"
- class="fil1 str2"
- points="623.04,3214.18 632.594,3211.71 629.263,3219.37 624.842,3220.55 619.862,3223.33 614.304,3221.84 610.188,3219.05 615.656,3212.66"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124212648"
- class="fil1 str2"
- points="709.416,3181.17 712.578,3182.96 718.244,3182.88 707.745,3191.88 698.859,3199.44 690.487,3195.16 695.955,3185.29 702.946,3181.16"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- </g>
- <g
- id="g173">
- <polygon
- id="_124851736"
- class="fil1 str2"
- points="569.454,1974.32 570.959,1969.43 577.903,1975.51 576.704,1989.53 573.135,1993.22 570.525,1995.92 565.75,1986.37"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124221384"
- class="fil1 str2"
- points="454.604,2077.04 457.238,2076.28 461.144,2080.19 460.813,2088.57 456.24,2089.75 452.897,2090.62 448.122,2078.89"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124218600"
- class="fil1 str2"
- points="491.136,2114.13 481.213,2114.63 476.51,2118.25 474.6,2119.72 469.825,2119.28 479.808,2103.21 488.923,2103.21 494.523,2108.46 492.567,2111.73"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124231944"
- class="fil1 str2"
- points="506.071,2139.25 503.724,2143.67 490.328,2137.22 482.23,2137.44 478.94,2137.53 475.034,2128.84 488.055,2120.59 501.968,2126.49 508.455,2123.19 509.281,2133.22"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124213416"
- class="fil1 str2"
- points="444.259,2136.72 436.94,2129.83 433.472,2137.47 432.063,2140.57 426.42,2139.27 426.42,2128.84 434.233,2119.72 446.344,2130.17 445.139,2133.95"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124237632"
- class="fil1 str2"
- points="368.257,2111.03 362.393,2111.03 360.01,2111.03 363.483,2101.91 368.691,2091.92 374.291,2091.95 374.375,2097.52 374.437,2101.6"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124223424"
- class="fil1 str2"
- points="389.96,2117.11 382.552,2117.11 379.543,2117.11 374.768,2108.86 385.185,2100.61 392.521,2100.64 394.611,2105.46 396.139,2108.98"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124242240"
- class="fil1 str2"
- points="378.198,2166.66 369.228,2164.58 363.049,2158.81 356.104,2158.38 346.555,2121.89 353.065,2119.72 358.254,2125.56 367.337,2116.45 373.466,2121.89 373.643,2128.93 370.034,2132.39 367.395,2134.92 370.679,2140.64 377.934,2140.87 380.882,2140.97 384.805,2132.63 393.218,2134.91 400.059,2149.8 395.924,2160.55 384.637,2156.59"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124211352"
- class="fil1 str2"
- points="308.792,2223.1 304.471,2223.1 302.716,2223.1 299.243,2216.58 305.32,2207.46 311.788,2210.1 311.621,2214.42 311.5,2217.57"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124227576"
- class="fil1 str2"
- points="359.968,2221.39 357.943,2230.61 353.857,2230.52 352.197,2230.48 346.555,2225.7 346.555,2211.8 352.197,2208.33 359.013,2213.87 359.564,2218.22"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124229952"
- class="fil1 str2"
- points="347.857,2267.84 344.153,2270.93 342.648,2272.18 335.269,2267.84 340.478,2259.15 349.55,2254.84 351.891,2259.91 353.602,2263.62"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124236048"
- class="fil1 str2"
- points="334.401,2304.76 329.772,2305.07 327.891,2305.19 325.72,2300.85 326.588,2290.86 330.452,2290.02 333.795,2296.85 336.24,2301.84"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124228464"
- class="fil1 str2"
- points="324.852,2362.09 321.148,2358.39 319.644,2356.88 321.773,2350.78 324.809,2346.49 331.466,2353.97 331.657,2356.4 331.797,2358.19"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- <polygon
- id="_124220496"
- class="fil1 str2"
- points="657.422,2008.47 624.552,1983.92 618.297,1992.4 604.111,1953.24 594.918,1967 584.997,1973.56 587.76,1989.75 586.191,2001.6 574.065,2009.34 572.222,2018.05 565.518,2020.94 555.89,2029.24 554.878,2034.13 545.861,2040.72 542.07,2057.32 535.479,2048.67 528.625,2052.44 523.646,2074 516.005,2074.45 512.029,2079.73 514.431,2087.5 519.963,2093.06 532.104,2120.31 527.665,2131.1 516.539,2131.32 508.39,2146.78 495.38,2149.82 460.629,2137.37 435.891,2147.78 424.363,2148.04 419.5,2133.51 411.427,2141.71 410.657,2163.49 402.223,2173.97 403.459,2181.86 413.408,2190.53 416.553,2198.31 411.394,2200.31 402.206,2197.86 395.853,2199.94 385.845,2193.29 381.18,2200.87 391.702,2208.89 396.191,2218.55 395.125,2230.34 384.587,2240.35 385.901,2250.78 381.609,2255.16 370.303,2256.45 369.587,2250.92 358.574,2254.71 355.58,2272.87 349.848,2279 338.504,2278.41 337.303,2283.26 344.031,2290.92 343.06,2299.64 336.643,2305.46 331.715,2311.25 328.473,2331.91 332.311,2336.53 339.132,2330.79 344.328,2334.69 345.35,2341.23 335.43,2357.44 333.22,2376.18 337.853,2381.11 331.84,2405.05 338.319,2415.1 360.11,2416.17 359.461,2423.29 349.233,2436.92 349.269,2448.25 364.27,2454.11 365.851,2462.21 353.9,2475 354.361,2486.29 346.611,2498.97 339.362,2526.5 347.236,2539.57 347.887,2541.99 363.097,2528.12 393.829,2524.51 397.085,2495.68 405.334,2489.15 402.523,2474.65 417.712,2464.96 410.475,2454.41 403.809,2451.54 403.237,2423.14 392.2,2419.5 384.527,2400.54 404.054,2342.78 428.463,2316.31 420.961,2308.75 424.509,2272.14 431.183,2264.34 454.775,2288.95 491.621,2301.21 521.205,2270.12 518.675,2253.04 553.069,2193.43 569.468,2193.63 563.071,2165.56 555.031,2165.28 555.396,2140.77 586.682,2125.52 619.645,2119.72 637.041,2124.73 649.109,2114.14 658.233,2087.36 682.31,2087.69 699.942,2096.18 714.195,2113.64 722.083,2088.15 701.553,2050.89 693.091,2053.3 683.972,2037.18 697.788,2028.25 708.601,2037.06 725.955,2036.66 734.373,2027.64 697.399,1997.91 686.719,2006.19 680.638,1997.15"
- style="fill: none; stroke: rgb(99, 99, 71); stroke-width: 2.27997;" />
- </g>
- </g>
- <g
- id="_159700104">
- <polygon
- id="_159701568"
- class="fil1 str3"
- points="830.941,402.881 809.986,413.882 798.888,433.452 771.196,443.235 741.874,456.449 734.897,442.02 702.653,438.674 671.82,416.349 654.014,423.838 656.063,389.248 585.676,246.547 544.067,232.093 518.159,244.839 500.788,265.596 510.988,292.53 505.76,310.727 472.929,285.304 449.668,308.064 479.491,346.63 481.261,373.098 504.106,379.259 536.845,447.227 560.728,454.646 569.502,476.682 591.826,487.604 600.882,513.796 633.583,521.252 677.125,541.217 724.42,584.796 724.506,613.838 730.742,630.925 745.169,628.899 756.209,611.08 799.401,608.259 832.34,619.678 832.373,628.156 854.877,619.641 889.179,571.282 913.23,550.482 957.998,550.637 940.503,482.635 916.245,452.767 872.378,433.58"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <path
- id="_159701496"
- class="fil1 str3"
- d="m 844.926,622.977 3.04947,9.96206 -3.07084,7.73054 5.26532,3.25694 4.30203,12.1335 1.01259,15.5201 -5.95187,15.6483 7.54672,100.688 -23.0047,-6.0767 -79.2223,64.6364 -11.252,-18.8674 15.1462,-38.9343 -1.19613,-57.0159 0.4027,-18.5559 8.74912,-14.7435 11.0562,-13.1423 -26.5734,-27.6635 -6.016,-28.6544 11.0394,-17.8191 43.1924,-2.82118 32.9394,11.4195 0.0325,8.47723 c 4.28151,-1.61964 9.251,-3.77706 12.5533,-5.17811 z"
- inkscape:connector-curvature="0"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159701424"
- class="fil1 str3"
- points="1306.58,153.038 1285.89,179.766 1219.45,208.406 1210.75,221.372 1033.34,319.14 1035.53,355.861 1025.49,391.044 1005.05,385.808 986.507,396.951 961.225,434.135 964.057,470.073 946.707,469.967 940.503,482.635 957.998,550.637 1066.51,591.022 1093.21,576.148 1241.78,567.229 1334.38,532.257 1341.47,536.564 1364.26,525.223 1358.46,501.718 1387.41,449.541 1393.92,402.814 1385.74,388.966 1352.78,389.081 1406.98,343.479 1396.63,307.18 1400.14,273.285 1452.27,205.546 1422.82,130.452 1335.1,87.2276"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159701352"
- class="fil1 str3"
- points="1262.71,22.4227 1278.39,12.5376 1306.22,51.2835 1333.06,68.1732 1335.1,87.2276 1306.58,153.038 1285.89,179.766 1219.45,208.406 1210.75,221.372 1033.31,318.568 1031.81,293.372 1050.21,188.127 1059.65,170.934 1054.1,154.879 1068.55,131.72 1097.91,105.588 1115.32,64.1525 1143.85,54.1508 1193.47,67.0789 1236.46,33.0009 1247.21,17.3925"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159701280"
- class="fil1 str3"
- points="910.526,938.136 919.759,1009.8 845.438,990.214 840.15,982.822 778.951,982.805 756.34,931.753 757.445,900.132 781.291,887.737 775.935,869.381 783.001,853.424 755.287,848.647 754.853,846.476 834.075,781.84 857.08,787.917 860.305,834.435 864.918,851.355"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159701208"
- class="fil1 str3"
- points="1324.01,1140.37 1336.29,1109.06 1331.73,1083.64 1310.73,1079.13 1295.55,1023.01 1303.43,983.233 1351.09,954.848 1389.31,947.416 1454.25,813.119 1459.88,791.214 1479.05,776.938 1503.25,730.84 1549.63,765.543 1545.9,810.813 1447.28,995.77 1439.79,1020.47 1504.59,1129.9 1516.62,1162.12 1471.15,1167.96 1396.51,1150.45 1363.15,1149.31 1341.06,1171.64 1329.32,1171.72"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159701136"
- class="fil1 str3"
- points="1308.26,937.013 1351.09,954.848 1389.31,947.416 1454.25,813.119 1459.88,791.214 1479.05,776.938 1503.25,730.84 1455.73,633.814 1383.06,604.25 1282.31,784.33 1236.53,816.298 1216.86,857.497 1282.53,900.717 1296.64,936.237"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159701064"
- class="fil1 str3"
- points="1069.32,696.928 1055.83,645.759 1066.51,591.022 957.998,550.637 913.23,550.482 889.179,571.282 875.78,590.172 862.062,609.511 857.347,616.159 854.877,619.641 844.926,622.977 847.976,632.94 844.905,640.67 850.17,643.927 854.472,656.06 855.485,671.581 849.533,687.229 857.08,787.917 860.305,834.435 864.918,851.355 892.71,904.237 910.526,938.136 927.341,930.388 984.701,940.259 998.343,895.468 1014.46,887.082 1016.77,875.004 1039.78,855.903 1034.01,817.427"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700992"
- class="fil1 str3"
- points="1189.58,934.581 1133.78,1005.88 1117.02,1008.51 1048.93,951.218 984.701,940.259 998.343,895.468 1014.46,887.082 1016.77,875.004 1039.78,855.903 1034.01,817.427 1069.32,696.928 1055.83,645.759 1066.51,591.022 1093.21,576.148 1241.78,567.229 1334.38,532.257 1341.47,536.564 1364.26,525.223 1383.06,604.25 1282.31,784.33 1236.53,816.298 1216.86,857.497 1215.4,876.774 1198.93,884.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700920"
- class="fil1 str3"
- points="1215.4,876.774 1216.86,857.497 1282.53,900.717 1296.64,936.237 1308.26,937.013 1351.09,954.848 1303.43,983.233 1295.55,1023.01 1272.24,1008.21 1256.83,989.742 1238.48,990.369 1226.17,976.883 1206.43,993.921 1175.33,995.138 1133.78,1005.88 1189.58,934.581 1198.93,884.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700848"
- class="fil1 str3"
- points="919.759,1009.8 845.438,990.214 840.15,982.822 778.951,982.805 804.095,1042.11 786.503,1061.56 783.076,1118.06 774.948,1125.11 800.949,1150.15 829.999,1136.38 850.512,1108.4 879.438,1097.2 879.421,1073.07 906.527,1062.97 931.407,1065.34"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700776"
- class="fil1 str3"
- points="906.527,1062.97 879.421,1073.07 879.438,1097.2 850.512,1108.4 829.999,1136.38 800.949,1150.15 774.948,1125.11 765.291,1133.49 760.527,1149.03 754.505,1167.65 758.7,1184.48 754.073,1196.49 761.961,1235.63 782.238,1255.29 787,1229.8 904.756,1196.58 935.423,1157.82 931.407,1065.34"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700704"
- class="fil1 str3"
- points="904.756,1196.58 787,1229.8 782.238,1255.29 783.321,1276.01 800.196,1303.55 801.684,1323.4 811.888,1350.9 812.149,1372.98 823.287,1371.7 831.074,1359.29 840.805,1370.97 854.438,1376.02 867.731,1347.95 863.258,1246.66"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700632"
- class="fil1 str3"
- points="1178.97,1212.74 1181.92,1228.73 1193.14,1240.96 1220.26,1243.07 1224.26,1228.34 1218.34,1222.89 1218.47,1198.86 1200.67,1189.34 1148.62,1125.15 1142.92,1050.23 1117.02,1008.51 1048.93,951.218 984.701,940.259 927.341,930.388 910.526,938.136 919.759,1009.8 931.407,1065.34 935.423,1157.82 904.756,1196.58 967.983,1236.02 1026.79,1236.37 1066.31,1257.97 1084.68,1240.98 1107.47,1235.82 1114.1,1249.56 1135.74,1237.75 1132.91,1215.39"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700560"
- class="fil1 str3"
- points="1324.01,1140.37 1336.29,1109.06 1331.73,1083.64 1310.73,1079.13 1295.55,1023.01 1272.24,1008.21 1256.83,989.742 1238.48,990.369 1226.17,976.883 1206.43,993.921 1175.33,995.138 1133.78,1005.88 1117.02,1008.51 1142.92,1050.23 1148.62,1125.15 1200.67,1189.34 1218.47,1198.86 1238.22,1213.29 1247.72,1190.74 1260.92,1178.94 1282.03,1170.39 1304.33,1172.6 1329.32,1171.72"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700488"
- class="fil1 str3"
- points="1242.83,1319.3 1256.46,1325.5 1266.81,1320.59 1280.73,1355.15 1348.52,1365.88 1378.48,1352.79 1379.62,1333.66 1364.8,1311.34 1383.24,1302.42 1401.44,1307.59 1406.94,1303.11 1406.59,1286.23 1393.99,1277.05 1394.3,1259.63 1403.72,1258.16 1408.29,1226.72 1389.74,1218.91 1377.03,1191.57 1381.94,1173.14 1397,1167.18 1396.51,1150.45 1363.15,1149.31 1341.06,1171.64 1329.32,1171.72 1304.33,1172.6 1282.03,1170.39 1260.92,1178.94 1247.72,1190.74 1238.22,1213.29 1218.47,1198.86 1218.34,1222.89 1224.26,1228.34 1220.26,1243.07 1220.93,1254.53 1245.07,1273.46"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700416"
- class="fil1 str3"
- points="1066.31,1257.97 1028.13,1279.26 1033.68,1304.93 1013.64,1341.07 1048.31,1376.91 1072.98,1361.38 1076.5,1391.52 1168.84,1399.51 1200.14,1388.84 1242.83,1319.3 1245.07,1273.46 1220.93,1254.53 1220.26,1243.07 1193.14,1240.96 1181.92,1228.73 1178.97,1212.74 1132.91,1215.39 1135.74,1237.75 1114.1,1249.56 1107.47,1235.82 1084.68,1240.98"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700344"
- class="fil1 str3"
- points="880.458,1416.2 901.322,1377.63 917.538,1377.33 921.192,1354.57 934.532,1349.41 958.132,1325.83 988.105,1278.48 1002.35,1270.4 1028.13,1279.26 1033.68,1304.93 1013.64,1341.07 1048.31,1376.91 1026.26,1390.81 972.617,1387.74 969.415,1402.58 948.026,1413.68 932.974,1428.95 933.578,1428.39 927.013,1421.66 918.091,1422.49 909.761,1411.71 895.771,1409.63 888.751,1415.36"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700272"
- class="fil1 str3"
- points="904.756,1196.58 967.983,1236.02 1026.79,1236.37 1066.31,1257.97 1028.13,1279.26 1002.35,1270.4 988.105,1278.48 963.135,1317.93 941.832,1307.89 894.524,1311.66 865.372,1294.53 863.258,1246.66"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700200"
- class="fil1 str3"
- points="863.281,1357.34 854.438,1376.02 880.637,1366.66 894.337,1390.54 901.322,1377.63 917.538,1377.33 921.192,1354.57 934.532,1349.41 958.132,1325.83 963.135,1317.93 948.964,1311.25 941.832,1307.89 894.524,1311.66 865.372,1294.53 867.731,1347.95"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159700128"
- class="fil1 str3"
- points="861.805,1378.74 868.363,1388.45 860.985,1403.94 866.303,1410.09 876.5,1403.43 880.458,1416.2 894.337,1390.54 880.637,1366.66 854.438,1376.02"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_159699432">
- <polygon
- id="_159700032"
- class="fil1 str3"
- points="1540.33,1728.66 1600.37,1741.99 1611.43,1732.28 1612.08,1712.15 1601.44,1698.83 1605.92,1682.79 1555.24,1672.39 1540.33,1615.02 1545.72,1594.85 1565.07,1588.4 1572.7,1572.6 1565.67,1563.26 1574.25,1545.67 1566.06,1536.2 1539.81,1533.78 1550.79,1496.63 1552.94,1464.05 1556.39,1452.45 1519.34,1460.14 1484.2,1458.48 1478.14,1453.45 1465.64,1480.24 1450.78,1484.71 1442.05,1477.57 1400.94,1496.98 1397.55,1530.71 1324.9,1543.75 1309.94,1552.85 1343.45,1556.25 1350.6,1569.8 1341.77,1575.96 1336.49,1589.78 1353.21,1613.03 1359.56,1649.64 1428.05,1706.65 1438.94,1703.54 1485.49,1720.34 1520.45,1747.45 1520.38,1742.18"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699960"
- class="fil1 str3"
- points="1494.42,1943.21 1488.74,1979.2 1556.27,1967.15 1577.17,2020.35 1590.75,2005.54 1616.07,2007.81 1614.27,2006.04 1646.69,1982.92 1681,1893.37 1670.36,1843.89 1615.98,1806.59 1600.45,1764.83 1600.37,1741.99 1540.33,1728.66 1520.38,1742.18 1520.02,1747.45 1516.69,1768.98 1480.62,1789.12 1451.87,1778.26 1444.64,1768.92 1431.81,1780.17 1442.45,1797.99 1441.24,1819.68 1426.96,1839.2 1441.38,1854.34 1451.75,1905.5 1468.04,1929.41"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699888"
- class="fil1 str3"
- points="1520.02,1747.45 1516.69,1768.98 1480.62,1789.12 1451.87,1778.26 1444.64,1768.92 1440.54,1772.52 1381.01,1737.54 1366.27,1744.65 1344.03,1729.12 1334.92,1732.92 1331.21,1678.01 1344.15,1678.12 1359.56,1649.64 1428.05,1706.65 1438.94,1703.54 1467.3,1713.78 1485.49,1720.34"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699816"
- class="fil1 str3"
- points="1353.21,1613.03 1336.49,1589.78 1341.77,1575.96 1350.6,1569.8 1343.45,1556.25 1309.94,1552.85 1303.8,1590.57 1289.52,1580.72 1273.3,1578.6 1258.72,1589.47 1230.71,1589.35 1217.95,1610.3 1235.17,1624.71 1237.65,1665.79 1231.9,1681.26 1201.29,1674.21 1200.45,1681.63 1230.93,1709.32 1222.15,1712.23 1237.51,1757.31 1257.78,1776.69 1299.21,1765.71 1306.63,1753.35 1312.37,1743.79 1334.92,1732.92 1331.21,1678.01 1344.15,1678.12 1359.56,1649.64"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699744"
- class="fil1 str3"
- points="1334.92,1732.92 1312.37,1743.79 1306.63,1753.35 1318.4,1753.42 1331.59,1766.21 1333.62,1788.04 1426.96,1839.2 1441.24,1819.68 1442.45,1797.99 1431.81,1780.17 1440.54,1772.52 1381.01,1737.54 1366.27,1744.65 1344.03,1729.12"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699672"
- class="fil1 str3"
- points="1333.62,1788.04 1331.59,1766.21 1318.4,1753.42 1306.63,1753.35 1299.21,1765.71 1257.78,1776.69 1237.51,1757.31 1225.97,1778.79 1217.54,1779.01 1208.55,1798.46 1217.95,1812.39 1225.49,1823.55 1221.52,1834.82 1248.66,1840.68 1251.64,1832.12 1271.25,1836.15 1277.65,1822.96 1292.5,1825.65 1300.69,1818.49 1321.5,1827.14 1338.46,1838.26 1350.57,1828.77 1371.83,1828.94 1385.43,1816.43"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699600"
- class="fil1 str3"
- points="1494.42,1943.21 1468.04,1929.41 1451.75,1905.5 1441.38,1854.34 1426.96,1839.2 1385.43,1816.43 1371.83,1828.94 1350.57,1828.77 1338.46,1838.26 1311.41,1863.41 1305.1,1877.01 1303.24,1903.57 1308.29,1926.04 1326.97,1939.46 1343.7,1971.11 1320.53,1987.87 1360.91,2034.47 1387.76,1972.61 1455.48,1985.14 1488.74,1979.2"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699528"
- class="fil1 str3"
- points="1292.5,1825.65 1277.65,1822.96 1271.25,1836.15 1251.64,1832.12 1248.66,1840.68 1221.52,1834.82 1218.44,1852.12 1188.13,1850.14 1186.68,1840.27 1172.87,1832.48 1152.9,1843.74 1152.89,1914.16 1163.78,1927.86 1207.19,1944.29 1225.58,1945.69 1258.55,1948.2 1320.53,1987.87 1343.7,1971.11 1326.97,1939.46 1308.29,1926.04 1303.24,1903.57 1305.1,1877.01 1311.41,1863.41 1338.46,1838.26 1321.5,1827.14 1300.69,1818.49"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699456"
- class="fil1 str3"
- points="1125.43,1834.94 1110.87,1822.18 1113.15,1807.93 1105.72,1791.46 1092.43,1782.74 1117.62,1757.04 1130.9,1753.14 1135.85,1737.13 1164.36,1723.23 1174.42,1694.04 1200.45,1681.63 1230.93,1709.32 1222.15,1712.23 1237.51,1757.31 1225.97,1778.79 1217.54,1779.01 1208.55,1798.46 1225.49,1823.55 1221.48,1834.77 1218.44,1852.12 1188.13,1850.14 1186.68,1840.27 1172.87,1832.48 1152.9,1843.74 1137.22,1833.3"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_159697896">
- <polygon
- id="_159699360"
- class="fil1 str3"
- points="1123.9,1944.4 1079.19,1985.71 1086.69,2061.72 1078.37,2066.71 1067,2098.89 1100.17,2104.47 1114.73,2111.37 1133.43,2105.15 1141.24,2114.72 1152.48,2105.94 1160.39,2095.96 1165.99,2048.31 1172.68,2039.71 1167.97,2002 1155.66,1990.63 1153.06,1967.92"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699288"
- class="fil1 str3"
- points="1183.68,2057.16 1165.99,2048.31 1172.68,2039.71 1167.97,2002 1155.66,1990.63 1153.06,1967.92 1123.9,1944.4 1129.2,1939.51 1163.78,1927.86 1207.19,1944.29 1216.89,1954.73 1226.6,1954.58 1231.39,1962.95 1224.06,1973.56 1236.65,1985.33 1239.01,2003.12 1220.71,2012.42 1219.04,2025.35 1227.34,2036.49 1214.54,2047.17 1199.5,2039.49"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699216"
- class="fil1 str3"
- points="1258.55,1948.2 1207.19,1944.29 1216.89,1954.73 1226.6,1954.58 1231.39,1962.95 1224.06,1973.56 1236.65,1985.33 1239.01,2003.12 1220.71,2012.42 1219.04,2025.35 1227.34,2036.49 1236.69,2050.27 1251.41,2055.15 1265.87,2071.26 1275.12,2090.58 1288.36,2088.61 1316.2,2084.46 1319.86,2090.85 1338.13,2076.41 1336.07,2058.75 1352.47,2024.72 1320.53,1987.87"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699144"
- class="fil1 str3"
- points="1336.07,2058.75 1352.47,2024.72 1360.91,2034.47 1372.03,2008.84 1391.5,2030.84 1407.04,2032.02 1411,2064.1 1419.71,2071.17 1413.09,2080.85 1417.03,2117.75 1432.35,2126.8 1432.73,2148.51 1419.08,2173.46 1392.71,2161.81 1387.97,2130.55 1381.07,2129.43 1378.42,2146.08 1370.21,2146.01 1367.6,2134.03 1341.53,2120.5 1341.8,2115.52 1342.18,2103.98 1349.54,2097.33 1338.13,2076.41"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699072"
- class="fil1 str3"
- points="1262.93,2094.59 1267.07,2100.49 1275.12,2090.58 1265.87,2071.26 1251.41,2055.15 1236.69,2050.27 1227.34,2036.49 1214.54,2047.17 1199.5,2039.49 1183.68,2057.16 1165.99,2048.31 1160.39,2095.96 1181.22,2112.45 1181.14,2132.98 1191.04,2135.02 1191.13,2146.22 1206.79,2154.76 1206.38,2150.3 1214.46,2142.46 1209.04,2129.24 1216.49,2111.13 1231.91,2115.3 1242.5,2094.28"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159699000"
- class="fil1 str3"
- points="1267.07,2100.49 1275.12,2090.58 1288.36,2088.61 1316.2,2084.46 1319.86,2090.85 1338.13,2076.41 1349.54,2097.33 1342.18,2103.98 1341.8,2115.52 1325.78,2140.96 1304.25,2165.54 1282.37,2172.4 1275.52,2193.62 1265.61,2193.46 1259.02,2201.73 1238.84,2193.02 1233.27,2165.02 1214.46,2142.46 1209.04,2129.24 1216.49,2111.13 1231.91,2115.3 1242.5,2094.28 1262.93,2094.59"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698928"
- class="fil1 str3"
- points="1089.65,2234.84 1120.67,2255.67 1132.77,2236.78 1120.75,2220.97 1109.93,2173.15 1094.05,2159.54 1095.44,2135.05 1084.83,2120.65 1062.15,2112.61 1055.2,2138.59 1065.73,2153.22 1069.09,2206.51"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698856"
- class="fil1 str3"
- points="1084.83,2120.65 1062.15,2112.61 1067,2098.89 1100.17,2104.47 1114.73,2111.37 1133.43,2105.15 1141.24,2114.72 1152.48,2105.94 1160.39,2095.96 1181.22,2112.45 1181.14,2132.98 1191.04,2135.02 1191.13,2146.22 1206.79,2154.76 1206.77,2169.28 1197.06,2169.51 1197.05,2182.9 1186.18,2208.51 1170.13,2213.11 1170.4,2225.78 1132.77,2236.78 1120.75,2220.97 1109.93,2173.15 1094.05,2159.54 1095.44,2135.05"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698784"
- class="fil1 str3"
- points="1135.26,2265.63 1140.7,2275.76 1139.97,2297.38 1104,2319.46 1091.64,2322.51 1049.57,2270.03 1079.04,2266.19 1087.11,2252.61 1077.41,2243.02 1089.78,2234.82 1120.67,2255.67"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698712"
- class="fil1 str3"
- points="1197.06,2169.51 1197.05,2182.9 1186.18,2208.51 1210.13,2246.6 1247.95,2240.99 1253.67,2235.47 1262,2216.58 1253.99,2208.93 1259.02,2201.73 1238.84,2193.02 1233.27,2165.02 1214.46,2142.46 1206.38,2150.3 1206.79,2154.76 1206.77,2169.28"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698640"
- class="fil1 str3"
- points="1265.61,2193.46 1259.02,2201.73 1253.99,2208.93 1262,2216.58 1253.67,2235.47 1247.95,2240.99 1252.52,2253.7 1268.62,2260.23 1295.58,2259.92 1309.62,2265.5 1313.56,2248.05 1321.66,2245.7 1301.12,2235.27 1308.72,2219.08 1307.91,2198.02 1282.37,2172.4 1275.52,2193.62"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698568"
- class="fil1 str3"
- points="1370.21,2146.01 1367.6,2134.03 1341.53,2120.5 1341.8,2115.52 1325.78,2140.96 1304.25,2165.54 1282.37,2172.4 1307.91,2198.02 1308.72,2219.08 1301.12,2235.27 1321.66,2245.7 1331.09,2234.56 1330.16,2221.81 1350.23,2217.25 1362.14,2199.11 1374.65,2207.34 1386.6,2200.93 1381.06,2174.3 1392.71,2161.22 1387.97,2130.55 1381.07,2129.43 1378.42,2146.08"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698496"
- class="fil1 str3"
- points="1104,2319.46 1139.97,2297.38 1151.47,2299.72 1164.18,2314.17 1182.91,2374.34 1166.39,2379.08 1168.65,2419.74 1163.01,2417.28 1147.1,2425.9 1140.29,2418.05 1129.41,2419.45 1107,2405.1 1106.95,2396.56 1126.64,2375.5 1121.72,2346.67"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698424"
- class="fil1 str3"
- points="1135.26,2265.63 1120.67,2255.67 1132.77,2236.78 1170.4,2225.78 1170.13,2213.11 1186.18,2208.51 1210.13,2246.6 1188.52,2259.62 1181.47,2251.41 1173.01,2259.04 1181.53,2287.22 1176.1,2302.98 1174.41,2307.9 1164.18,2314.17 1151.47,2299.72 1139.97,2297.38 1140.7,2275.76"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698352"
- class="fil1 str3"
- points="1256.57,2356.74 1266.35,2363.2 1250.56,2378.16 1240.17,2406.95 1215.58,2423.61 1204.97,2410.12 1183.5,2415.47 1177.95,2423.8 1168.65,2419.74 1166.39,2379.08 1182.91,2374.34 1164.18,2314.17 1174.41,2307.9 1176.1,2302.98 1186.23,2308.99 1182.55,2324.82 1195.81,2330.66 1205.12,2325 1231.94,2341.95 1254.14,2342.2"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698280"
- class="fil1 str3"
- points="1392.71,2161.81 1381.06,2174.3 1386.6,2200.93 1374.65,2207.34 1362.14,2199.11 1350.23,2217.25 1330.16,2221.81 1331.09,2234.56 1344.63,2243.27 1351.01,2260.22 1373.95,2265.84 1394.21,2254.04 1399.16,2239.14 1389.45,2228.15 1396.27,2211.19 1414.34,2204.71 1441.82,2208.08 1430.02,2183.28 1419.08,2173.46"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698208"
- class="fil1 str3"
- points="1399.16,2239.14 1394.21,2254.04 1433.45,2281.73 1438.17,2303.4 1463.16,2314.29 1481.78,2288.71 1464.08,2264.8 1485.88,2248.99 1453.3,2232.2 1441.82,2208.08 1414.34,2204.71 1396.27,2211.19 1389.45,2228.15"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698136"
- class="fil1 str3"
- points="1433.45,2281.73 1394.21,2254.04 1373.95,2265.84 1373.53,2284.78 1360.87,2287.82 1371.05,2306.22 1377.55,2303.58 1385.85,2368.25 1411.19,2378.94 1428.86,2361.48 1438.93,2358.55 1421.03,2319.07 1434.12,2315.59 1438.17,2303.4"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159698064"
- class="fil1 str3"
- points="1351.01,2260.22 1344.63,2243.27 1331.09,2234.56 1321.66,2245.7 1313.56,2248.05 1309.62,2265.5 1295.58,2259.92 1268.62,2260.23 1252.52,2253.7 1247.95,2240.99 1210.13,2246.6 1188.52,2259.62 1181.47,2251.41 1173.01,2259.04 1181.53,2287.22 1176.1,2302.98 1186.23,2308.99 1182.55,2324.82 1195.81,2330.66 1205.12,2325 1231.94,2341.95 1254.14,2342.2 1278.78,2342.09 1304.93,2358.89 1323.67,2346.4 1362.03,2360.63 1365.68,2375.21 1385.85,2368.25 1377.55,2303.58 1371.05,2306.22 1360.87,2287.82 1373.53,2284.78 1373.95,2265.84"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697992"
- class="fil1 str3"
- points="1240.17,2406.95 1250.56,2378.16 1266.35,2363.2 1256.57,2356.74 1254.14,2342.2 1278.78,2342.09 1304.93,2358.89 1323.67,2346.4 1362.03,2360.63 1365.68,2375.21 1385.85,2368.25 1411.19,2378.94 1402.76,2387.27 1389.03,2387.28 1389.08,2416.75 1377.16,2415.27 1367.72,2430.91 1378.59,2439.15 1372.33,2451.98 1355.86,2452.02 1342.35,2465.65 1321.89,2441.27 1311.53,2449.46 1291.36,2451.5"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697920"
- class="fil1 str3"
- points="1342.35,2465.65 1321.89,2441.27 1311.53,2449.46 1291.36,2451.5 1306,2477.13 1331.64,2478.64 1349.11,2494.04 1377.71,2490.78 1423.89,2508.92 1431.16,2491.09 1408.16,2462.43 1391.47,2466.52 1390.09,2451.29 1372.33,2451.98 1355.86,2452.02"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_159696864">
- <polygon
- id="_159697824"
- class="fil1 str3"
- points="1371.85,2008.96 1391.5,2030.84 1407.17,2031.85 1411.13,2063.96 1419.85,2071.03 1436.24,2063.03 1449.2,2068.98 1468.11,2054.46 1458.53,2039.9 1467.73,2014.69 1493.43,2007.79 1493.29,1995.74 1484.34,1992.07 1486.87,1979.72 1455.35,1985.35 1387.63,1972.83"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697752"
- class="fil1 str3"
- points="1432.35,2126.8 1449.2,2126.77 1464.73,2109.24 1484.01,2104.35 1502.54,2112.96 1520.23,2130.08 1539.12,2132.48 1550.1,2113.39 1535.84,2066.3 1544.99,2040.14 1577.04,2020.53 1556.13,1967.36 1486.87,1979.72 1484.34,1992.07 1493.29,1995.74 1493.43,2007.79 1467.73,2014.69 1458.53,2039.9 1468.11,2054.46 1449.2,2068.98 1436.24,2063.03 1419.85,2071.03 1413.22,2080.72 1417.03,2117.75"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697680"
- class="fil1 str3"
- points="1664.78,2236.03 1686.02,2228.36 1700.27,2197.3 1716.54,2200.72 1746.88,2188.14 1755.11,2167.8 1789.05,2153.18 1763.98,2135.88 1732.06,2110.73 1687.04,2090.28 1668.91,2064.69 1615.81,2008.01 1590.62,2005.73 1577.17,2020.35 1544.99,2040.14 1535.84,2066.3 1550.1,2113.39 1539.12,2132.48 1548.54,2137.08 1547.92,2149.32 1555.01,2174.6 1566.26,2178 1565.15,2192.49 1577.47,2214.84 1587.64,2219.9 1597.52,2219.99 1609.65,2234.64 1619.32,2223.35 1658.58,2224.26"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697608"
- class="fil1 str3"
- points="1432.73,2148.51 1432.35,2126.8 1449.2,2126.77 1464.73,2109.24 1484.01,2104.35 1502.54,2112.96 1520.23,2130.08 1539.12,2132.48 1548.54,2137.08 1547.92,2149.32 1555.01,2174.6 1566.26,2178 1565.15,2192.49 1577.47,2214.84 1587.64,2219.9 1559.39,2254.75 1551.18,2247.92 1549.13,2229.58 1533.14,2213.89 1516.75,2228.41 1499.79,2232.19 1498.67,2248.26 1486.01,2248.98 1453.43,2232.17 1430.15,2183.22 1419.21,2173.4"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697536"
- class="fil1 str3"
- points="1765.79,2389.01 1772.74,2397.32 1763.82,2406.54 1766.76,2415.05 1790.19,2414.95 1806.32,2384.96 1848.05,2252.59 1835.88,2221.84 1800.69,2193.23 1789.05,2153.18 1755.11,2167.8 1746.88,2188.14 1716.54,2200.72 1700.27,2197.3 1686.02,2228.36 1664.78,2236.03 1677.29,2251.42 1701.56,2310.8 1693.62,2326.58 1699.62,2334.41 1707.67,2334.15 1708.96,2341.54 1728.83,2350.72 1723.05,2360.38 1738.67,2371.98 1746.45,2370.72 1755.24,2387.4"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697464"
- class="fil1 str3"
- points="1625.64,2298.16 1630.61,2314.35 1653.49,2322.57 1667.51,2348.19 1659.82,2354.15 1651.69,2350.13 1649.09,2348.85 1619.19,2369.46 1609.15,2357.41 1568.02,2352.34 1563.26,2367.29 1591.47,2388.54 1593.86,2425.12 1626.36,2436.42 1636.18,2424.51 1652.32,2428.01 1656.49,2421.66 1663.69,2421.61 1670.17,2438.37 1689.29,2442.96 1724.62,2435.47 1726.89,2443.66 1736.85,2442.96 1745.14,2468.57 1752.06,2457.97 1771.07,2450.53 1790.19,2414.95 1766.76,2415.05 1763.82,2406.54 1772.74,2397.32 1765.79,2389.01 1755.24,2387.4 1746.45,2370.72 1738.67,2371.98 1723.05,2360.38 1728.83,2350.72 1724.03,2348.5 1708.96,2341.54 1707.67,2334.15 1699.62,2334.41 1693.62,2326.58 1701.56,2310.8 1677.29,2251.42 1664.78,2236.03 1658.58,2224.26 1619.32,2223.35 1609.65,2234.64 1614.32,2251.47 1610.69,2278.05"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697392"
- class="fil1 str3"
- points="1630.61,2314.35 1625.64,2298.16 1610.69,2278.05 1614.32,2251.47 1609.65,2234.64 1597.52,2219.99 1587.64,2219.9 1559.39,2254.75 1575.62,2274.88 1575.64,2291.93 1556.5,2308.61 1559.84,2326.23 1567.79,2352.37 1609.15,2357.41 1619.19,2369.46 1649.09,2348.85 1659.82,2354.15 1667.51,2348.19 1653.49,2322.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697320"
- class="fil1 str3"
- points="1516.75,2228.41 1499.79,2232.19 1498.67,2248.26 1486.01,2248.98 1464.21,2264.81 1481.91,2288.72 1507.77,2299.84 1517.6,2332.33 1532.56,2339.8 1559.84,2326.23 1556.5,2308.61 1575.64,2291.93 1575.62,2274.88 1559.39,2254.75 1551.18,2247.92 1549.13,2229.58 1533.14,2213.89"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697248"
- class="fil1 str3"
- points="1463.29,2314.33 1481.91,2288.72 1507.77,2299.84 1517.6,2332.33 1522.2,2334.63 1517.42,2345.65 1508.19,2346.44 1489.03,2337.82 1473.06,2356.29 1483.37,2367.29 1472.33,2381.74 1451.15,2362.31 1438.93,2358.55 1421.16,2319.11 1434.25,2315.62 1438.3,2303.43"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697176"
- class="fil1 str3"
- points="1473.06,2356.29 1489.03,2337.82 1508.19,2346.44 1517.42,2345.65 1522.2,2334.63 1532.56,2339.8 1559.84,2326.23 1568.02,2352.34 1563.26,2367.29 1591.47,2388.54 1593.86,2425.12 1574.18,2445.35 1560.87,2432.19 1526.07,2436.91 1517.62,2426.52 1503.41,2435.19 1489.33,2425.11 1495.39,2410.75 1481.01,2398.62 1479.1,2388 1472.33,2381.74 1483.37,2367.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697104"
- class="fil1 str3"
- points="1656.49,2421.66 1663.69,2421.61 1670.17,2438.37 1689.29,2442.96 1724.62,2435.47 1726.89,2443.66 1736.85,2442.96 1745.14,2468.57 1723.6,2501.57 1707.85,2529.06 1688.17,2519.82 1684.29,2509.96 1664.89,2509.08 1659.65,2477.7 1640.91,2471.35 1628.18,2475.73 1623.57,2459.14 1630.09,2455.65 1626.36,2436.42 1636.18,2424.51 1652.32,2428.01"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159697032"
- class="fil1 str3"
- points="1602.13,2555.55 1636.74,2570.42 1649.57,2599.38 1665.27,2590.89 1683.08,2572.45 1707.85,2529.06 1688.17,2519.82 1684.29,2509.96 1664.89,2509.08 1659.65,2477.7 1640.91,2471.35 1629.36,2475.73 1613.58,2483.99 1624.26,2486.92 1615.31,2499.72 1596.08,2490.67 1583.28,2501.24 1555.61,2482.22 1544.88,2484.29 1551.22,2518.59 1565.06,2522.92 1582.07,2516.84 1595.2,2522.07"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696960"
- class="fil1 str3"
- points="1615.31,2499.72 1596.08,2490.67 1583.28,2501.24 1555.61,2482.22 1544.88,2484.29 1526.09,2453.63 1526.07,2436.91 1560.87,2432.19 1574.18,2445.35 1593.86,2425.12 1626.36,2436.42 1630.09,2455.65 1623.57,2459.14 1628.18,2475.73 1613.58,2483.99 1624.26,2486.92"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696888"
- class="fil1 str3"
- points="1565.06,2522.92 1551.22,2518.59 1556.03,2545.38 1575.32,2553.81 1583.06,2571.55 1576.69,2579.58 1588.01,2602.55 1575.24,2639.59 1649.57,2599.38 1636.74,2570.42 1602.13,2555.55 1595.2,2522.07 1582.07,2516.84"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_159695184">
- <polygon
- id="_159696792"
- class="fil1 str3"
- points="1008.31,2158.9 1000.6,2167.73 985.741,2167.58 951.776,2158.08 920.687,2100.29 927.197,2059.84 941.998,2053.69 954.771,2062.46 988.916,2085.88 1012.63,2085.96 1022.17,2093.91 1031.13,2112.83 1062.02,2112.72 1055.2,2138.59 1065.73,2153.22 1066.42,2163.77 1030.06,2155.63"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696720"
- class="fil1 str3"
- points="864.99,2161.31 866.13,2130.15 890.26,2104.44 902.573,2102.34 920.687,2100.29 951.776,2158.08 914.11,2173.68 880.3,2170.79"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696648"
- class="fil1 str3"
- points="1052.71,2273.96 1038.94,2290.88 1001.68,2272.63 997.067,2260.99 985.818,2262.87 972.074,2248.54 977.676,2239.46 974.56,2228.24 954.129,2216.64 951.776,2158.08 985.741,2167.58 1000.6,2167.73 1008.31,2158.9 1030.06,2155.63 1066.42,2163.77 1069.22,2206.47 1089.65,2234.84 1077.54,2243.01 1087.11,2252.61 1079.17,2266.2 1049.7,2270.03"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696576"
- class="fil1 str3"
- points="864.99,2161.31 880.3,2170.79 914.11,2173.68 951.776,2158.08 954.129,2216.64 926.402,2219.2 925.593,2235.61 911.808,2235.74 905.184,2228.21 884.096,2228.41 884.342,2220.69 863.575,2199.98"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696504"
- class="fil1 str3"
- points="967.874,2278.37 946.189,2301.32 925.339,2279.61 925.471,2266.71 910.22,2265.53 911.808,2235.74 925.593,2235.61 926.402,2219.2 954.129,2216.64 974.56,2228.24 977.676,2239.46 972.074,2248.54 985.818,2262.87 997.067,2260.99 1001.68,2272.63 986.718,2287.75 977.87,2277.21"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696432"
- class="fil1 str3"
- points="911.836,2294.35 899.929,2291.6 886,2298.19 884.918,2308.96 891.319,2317.5 885.861,2321.39 867.589,2315.07 849.88,2314.85 824.237,2332.36 806.687,2286.3 815.776,2279.18 802.543,2261.43 801.596,2253.75 830.301,2259.6 848.196,2244.3 860.427,2247.2 884.096,2228.41 905.184,2228.21 911.808,2235.74 910.22,2265.53 925.471,2266.71 925.339,2279.61 946.189,2301.32 928.206,2307.26"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696360"
- class="fil1 str3"
- points="808.231,2208.56 814.137,2204.71 840.551,2194.96 863.575,2199.98 884.342,2220.69 884.096,2228.41 860.427,2247.2 848.196,2244.3 830.301,2259.6 801.596,2253.75 800.65,2246.07 797.81,2223.04"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696288"
- class="fil1 str3"
- points="967.874,2278.37 946.189,2301.32 928.504,2307.16 911.836,2294.35 899.929,2291.6 886,2298.19 884.918,2308.96 891.319,2317.5 885.861,2321.39 867.589,2315.07 849.88,2314.85 824.237,2332.36 829.202,2347.65 856.512,2388.56 884.617,2373.15 889.963,2380.49 922.859,2378.53 928.514,2389.62 957.576,2393.78 969.151,2385.03 966.099,2345.53 970.099,2332.71 996.348,2325.83 997.801,2311.28 986.718,2287.75 977.87,2277.21"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696216"
- class="fil1 str3"
- points="970.099,2332.71 996.348,2325.83 997.801,2311.28 986.718,2287.75 1001.68,2272.63 1038.94,2290.88 1052.71,2273.96 1072.23,2298.22 1042.22,2302.25 1063.82,2325.34 1063.76,2338.85 1073.45,2347.16 1047.26,2381 1038.31,2386.71 1031.45,2398.98 1009.25,2394.92 988.733,2403.29 985.841,2389.84 969.151,2385.03 966.099,2345.53"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696144"
- class="fil1 str3"
- points="928.514,2389.62 957.576,2393.78 969.151,2385.03 985.841,2389.84 988.698,2403.13 981.52,2411.1 979.778,2424.44 975.248,2436.05 956.504,2434.66 939.318,2437.22 926.471,2428.87 914.596,2426.75"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696072"
- class="fil1 str3"
- points="1073.45,2347.16 1063.76,2338.85 1063.82,2325.34 1042.22,2302.25 1072.23,2298.22 1091.64,2322.51 1103.87,2319.42 1121.72,2346.67 1126.77,2375.58 1107.08,2396.66 1071.18,2389.21 1072.48,2414.23 1064.9,2414.13 1048.17,2391.95 1047.26,2381"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159696000"
- class="fil1 str3"
- points="1063.14,2493.35 1047.57,2501.09 1034.58,2476.96 1017.26,2458.72 1016.58,2438.05 1003.01,2438.1 979.778,2424.44 981.52,2411.1 988.961,2402.84 1009.25,2394.92 1031.45,2398.98 1038.31,2386.71 1047.26,2381 1048.17,2391.95 1064.9,2414.13 1072.48,2414.23 1072.76,2430.94 1083.59,2437.61 1070.72,2452.13 1087.34,2499.92"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695928"
- class="fil1 str3"
- points="1070.72,2452.13 1083.59,2437.61 1072.76,2430.94 1072.48,2414.23 1071.18,2389.21 1107.08,2396.66 1107,2405.1 1129.41,2419.45 1140.42,2418.16 1146.97,2425.78 1136.55,2433.22 1153.07,2451.48 1138.33,2456.7 1129.75,2493.81 1112.07,2484.81 1087.34,2499.92"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695856"
- class="fil1 str3"
- points="833.086,2422.25 825.52,2404.73 831.235,2365.9 823.655,2355.54 829.202,2347.65 856.512,2388.56 884.617,2373.15 889.963,2380.49 922.859,2378.53 928.514,2389.62 914.596,2426.75 908.87,2425.68 900.712,2436.03 900.477,2457.55 884.521,2457.69 875.308,2445.56 862.272,2452.35"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695784"
- class="fil1 str3"
- points="870.839,2541.65 853.961,2546.7 847.065,2520.15 824.279,2496.5 811.397,2501.12 790.749,2497.03 782.995,2474.88 771.722,2477 750.251,2464.15 750.148,2435.87 770.715,2412.47 797.152,2416.3 803.266,2405.07 825.52,2404.73 833.356,2421.99 862.541,2452.09 875.308,2445.56 884.521,2457.69 900.477,2457.55 900.341,2483.95 887.282,2492.83 868.514,2516.56"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695712"
- class="fil1 str3"
- points="900.341,2483.95 900.477,2457.55 900.712,2436.03 908.87,2425.68 926.471,2428.87 939.318,2437.22 941.784,2450.95 953.513,2450.58 963.669,2460.6 957.427,2486.08 943.734,2486.09 940.679,2503.45 931.284,2509.22 921.582,2509.1 887.282,2492.83"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695640"
- class="fil1 str3"
- points="1031.85,2580.61 1030.62,2559.06 1007.3,2543.59 964.979,2530.08 969.126,2510.5 960.181,2505.4 964.376,2489.08 978.249,2488.99 982.95,2498.63 996.419,2500.25 1005.99,2509.55 987.476,2513.4 987.67,2519.82 988.978,2523.69 1009.75,2528.11 1016.88,2520.54 1019.92,2523.62 1030.88,2531.04 1032.97,2515.32 1047.57,2501.09 1034.58,2476.96 1017.26,2458.72 1016.58,2438.05 1003.01,2438.1 979.778,2424.44 975.248,2436.05 956.504,2434.66 939.318,2437.22 941.784,2450.95 953.513,2450.58 963.669,2460.6 957.427,2486.08 943.734,2486.09 940.679,2503.45 931.284,2509.22 941.95,2529.11 933.362,2545.84 942.795,2555.4 937.717,2566.33 971.397,2606.13 997.357,2608.59 1001.21,2597.28 1018.1,2598.86"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695568"
- class="fil1 str3"
- points="960.181,2505.4 964.376,2489.08 978.249,2488.99 982.95,2498.63 996.419,2500.25 1005.99,2509.55 987.476,2513.4 987.67,2519.82 988.978,2523.69 1009.75,2528.11 1007.3,2543.59 964.979,2530.08 969.126,2510.5"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695496"
- class="fil1 str3"
- points="1009.75,2528.11 1016.88,2520.54 1019.92,2523.62 1030.8,2531.21 1032.97,2515.32 1047.57,2501.09 1063.14,2493.35 1087.34,2499.92 1073.58,2528.45 1081.62,2543.21 1064.93,2546.84 1055.8,2560.61 1046.12,2549.84 1032.9,2549.89 1030.62,2559.06 1007.22,2543.76"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695424"
- class="fil1 str3"
- points="997.357,2608.59 1001.21,2597.28 1018.1,2598.86 1023.8,2608.45 1020.62,2632.25 1004.25,2660.56 991.77,2654.62 968.256,2665.41 963.368,2633.49 971.397,2606.13"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695352"
- class="fil1 str3"
- points="855.727,2677.44 860.037,2667.95 882.17,2677.44 877.316,2648.33 888.537,2627.54 919.156,2642.82 943.918,2644.78 951.19,2635.95 963.368,2633.49 968.256,2665.41 952.598,2721.78 875.177,2729.06 876.373,2705.54 857.886,2690.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695280"
- class="fil1 str3"
- points="1030.62,2559.06 1032.9,2549.89 1046.12,2549.84 1055.8,2560.61 1064.93,2546.84 1081.62,2543.21 1095.71,2569.11 1089.18,2578.96 1089.51,2581.31 1094.35,2633.26 1115.79,2664.92 1110.41,2684 1091.63,2678 1089.21,2685.26 1059.76,2673.6 1038.87,2641.43 1020.62,2632.25 1023.8,2608.45 1018.1,2598.86 1031.85,2580.61"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695208"
- class="fil1 str3"
- points="863.048,2625.71 862.962,2632.14 855.746,2632.58 853.548,2626.45 848.018,2630.15 850.892,2639.92 849.764,2652.02 857.353,2656.57 859.788,2655.2 869.772,2661.13 860.037,2667.95 882.17,2677.44 877.316,2648.33 888.537,2627.54 919.156,2642.82 943.918,2644.78 951.19,2635.95 963.368,2633.49 971.397,2606.13 937.348,2566.23 942.795,2555.4 933.362,2545.84 941.95,2529.11 931.284,2509.22 921.582,2509.1 887.282,2492.83 868.514,2516.56 870.839,2541.65 853.961,2546.7 839.501,2569.81 835.201,2562.17 821.734,2581.68 855.993,2624.48"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_123528456">
- <polygon
- id="_159695112"
- class="fil1 str3"
- points="1494.89,2705.66 1479.58,2704.97 1465.08,2692.85 1464.8,2685.67 1467.17,2674.77 1483.92,2659.63 1506.16,2671.56 1528.56,2644.05 1503.1,2621.1 1522.22,2601.11 1532.64,2604.47 1545,2619.18 1561.43,2584.84 1576.69,2579.58 1588.01,2602.55 1575.24,2639.59 1574.78,2639.83 1569.12,2655.94 1544.82,2664.15 1525.75,2695.78"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159695040"
- class="fil1 str3"
- points="1263.4,2498.37 1271.98,2514.83 1282.3,2515.17 1282.39,2549.63 1260.51,2553.29 1247.99,2543.27 1244.6,2558.92 1208.71,2506.55 1193.04,2511.38 1184.93,2508.8 1179.53,2520.31 1167.49,2524.11 1137.18,2461.61 1138.33,2456.7 1153.07,2451.48 1136.42,2433.1 1146.97,2425.78 1162.88,2417.16 1168.65,2419.74 1177.82,2423.69 1183.37,2415.36 1204.84,2410.01 1215.45,2423.49 1240.04,2406.84 1291.36,2451.5 1280.47,2470.46 1261.34,2473.82"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_159694968"
- class="fil1 str3"
- points="1282.39,2552.58 1282.39,2549.63 1282.3,2515.17 1271.98,2514.83 1263.4,2498.37 1261.34,2473.82 1280.47,2470.46 1291.23,2451.36 1306,2477.13 1331.77,2478.8 1344.76,2490.21 1338.57,2505.2 1347.2,2528.48 1323.72,2536.79 1312.79,2548.68 1310.29,2561.53 1308.91,2568.64"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_88495024"
- class="fil1 str3"
- points="1188.93,2704.97 1198.08,2683.25 1238.38,2693.07 1260.97,2690.62 1269.3,2707.13 1280.39,2707.17 1279.58,2719.23 1296.67,2728.08 1321.5,2707.48 1318.4,2669.02 1299.04,2657.84 1277.23,2654.5 1249.26,2600.19 1256.04,2592.11 1258.98,2579.17 1244.6,2558.92 1208.71,2506.55 1193.04,2511.38 1184.93,2508.8 1179.53,2520.31 1167.49,2524.11 1163.68,2539.7 1209.92,2576.34 1177.08,2589.71 1160.81,2609.65 1166.55,2637.15 1187.77,2677.45"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123235464"
- class="fil1 str3"
- points="1089.4,2581.34 1089.18,2578.96 1095.71,2569.11 1081.62,2543.21 1073.45,2528.26 1087.34,2499.92 1111.94,2484.65 1129.62,2493.64 1137.18,2461.61 1167.49,2524.11 1163.68,2539.7 1209.92,2576.34 1177.08,2589.71 1160.81,2609.65 1143.63,2619.77 1124.87,2609.28 1092.36,2612.4"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_124843672"
- class="fil1 str3"
- points="1490.44,2458.02 1483.8,2451.46 1470.87,2458.58 1474.53,2468.67 1470.61,2477.94 1460.27,2476.77 1449.22,2466.58 1443.62,2474.97 1451.96,2491.29 1448.15,2493.32 1436.53,2480.17 1431.03,2490.93 1408.03,2462.28 1391.34,2466.37 1390.09,2451.29 1372.33,2451.98 1378.59,2439.15 1367.72,2430.91 1377.16,2415.27 1389.08,2416.75 1389.03,2387.28 1402.76,2387.27 1428.86,2361.48 1438.93,2358.55 1451.29,2362.39 1472.33,2381.74 1479.1,2388 1481.01,2398.62 1495.39,2410.75 1489.33,2425.11 1503.41,2435.19 1507.46,2450.69"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_124866928"
- class="fil1 str3"
- points="1503.1,2621.1 1483.5,2572.15 1471.14,2561.72 1497.94,2551.71 1503.39,2532.56 1529.7,2524.43 1526.52,2510.37 1548.95,2506.62 1556.03,2545.38 1575.32,2553.81 1583.06,2571.55 1576.69,2579.58 1561.43,2584.84 1545,2619.18 1532.64,2604.47 1522.22,2601.11"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_124851856"
- class="fil1 str3"
- points="1507.46,2450.69 1490.44,2458.02 1483.8,2451.46 1470.87,2458.58 1474.53,2468.67 1470.61,2477.94 1460.27,2476.77 1449.22,2466.58 1443.62,2474.97 1451.96,2491.29 1448.15,2493.32 1436.53,2480.17 1431.03,2490.93 1423.76,2508.74 1393.72,2497.02 1387.84,2510.31 1400.24,2518.03 1407.61,2517.24 1427.22,2529.12 1448.66,2567.59 1436.71,2580.38 1419.47,2575.41 1400.23,2596.23 1400.52,2604.94 1421.43,2615.35 1429.66,2636.27 1424.43,2649.2 1431.74,2658.48 1431.12,2669.58 1464.8,2685.67 1467.17,2674.77 1483.92,2659.63 1506.16,2671.56 1528.56,2644.05 1503.1,2621.1 1483.5,2572.15 1471.14,2561.72 1450.61,2545.74 1457.9,2536.79 1428.78,2512.87 1435.15,2487.46 1440.1,2487.72 1448.25,2496.23 1453.71,2490.52 1449.91,2483.43 1447.73,2474.6 1449.54,2470.34 1460.92,2480.02 1470.46,2479.68 1469.36,2492.46 1492.04,2523.26 1503.39,2532.56 1529.7,2524.43 1526.52,2510.37 1548.95,2506.62 1544.88,2484.29 1526.09,2453.63 1526.07,2436.91 1517.62,2426.52 1503.41,2435.19"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123522888"
- class="fil1 str3"
- points="1497.94,2551.71 1471.14,2561.72 1450.61,2545.74 1457.9,2536.79 1428.78,2512.87 1435.15,2487.46 1440.1,2487.72 1448.25,2496.23 1453.71,2490.52 1449.91,2483.43 1447.73,2474.6 1449.54,2470.34 1460.92,2480.02 1470.46,2479.68 1469.36,2492.46 1492.04,2523.26 1503.39,2532.56"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_124857088"
- class="fil1 str3"
- points="1367.29,2574.42 1356.68,2567.39 1344.75,2574.98 1310.29,2561.53 1312.79,2548.68 1323.72,2536.79 1347.2,2528.48 1338.57,2505.2 1344.76,2490.21 1349.11,2494.04 1377.71,2490.78 1393.72,2497.02 1387.84,2510.31 1400.24,2518.03 1407.61,2517.24 1427.22,2529.12 1448.66,2567.59 1436.71,2580.38 1419.47,2575.41 1400.23,2596.23"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535488"
- class="fil1 str3"
- points="1410.76,2687.38 1405.52,2673.33 1367.27,2659.2 1353.24,2641.51 1370.42,2638.05 1352.33,2620.25 1363.08,2603.32 1352.86,2595.01 1367.29,2574.42 1400.23,2596.23 1400.52,2604.94 1421.43,2615.35 1429.66,2636.27 1424.43,2649.2 1431.74,2658.48 1431.12,2669.58 1464.8,2685.67 1465.08,2692.85 1479.58,2704.97 1464.27,2704.28"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123522696"
- class="fil1 str3"
- points="1363.08,2603.32 1352.33,2620.25 1370.42,2638.05 1353.24,2641.51 1367.27,2659.2 1351.42,2676.96 1335.69,2670.87 1329.03,2679.21 1334.37,2692.89 1331.75,2701.94 1321.5,2707.48 1318.4,2669.02 1299.04,2657.84 1277.23,2654.5 1249.26,2600.19 1256.04,2592.11 1258.98,2579.17 1244.6,2558.92 1247.99,2543.27 1260.51,2553.29 1282.39,2549.63 1282.39,2552.58 1308.91,2568.64 1310.29,2561.53 1344.75,2574.98 1356.68,2567.39 1367.29,2574.42 1352.86,2595.01"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509784"
- class="fil1 str3"
- points="1295.86,2759.3 1292.87,2747.67 1301.05,2740.55 1296.67,2728.08 1321.5,2707.48 1331.75,2701.94 1334.37,2692.89 1329.03,2679.21 1335.69,2670.87 1351.42,2676.96 1367.27,2659.2 1405.52,2673.33 1410.76,2687.38 1464.27,2704.28 1459.43,2721.3 1421.92,2721.53 1407.65,2710.65 1400.05,2729.45 1374.61,2760.91 1324.79,2765.24"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123521664"
- class="fil1 str3"
- points="1246.36,2752.77 1208.29,2752.58 1196.11,2738.55 1195.8,2726.88 1188.33,2726.88 1185.03,2716.33 1188.93,2704.97 1198.08,2683.25 1238.38,2693.07 1260.97,2690.62 1269.3,2707.13 1280.39,2706.58 1279.58,2719.23 1296.67,2728.08 1301.05,2740.55 1292.87,2747.67 1295.86,2759.3 1291.58,2758.42 1270.32,2767.13"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_124238256"
- class="fil1 str3"
- points="1208.29,2752.58 1204.56,2759.61 1189.19,2758.34 1182.67,2768.32 1201.56,2779.62 1219.84,2776.96 1237.75,2796.12 1231.64,2807.96 1238.68,2822.25 1217.13,2827.42 1200.87,2832.93 1172.81,2819.03 1172.74,2792.15 1152.52,2791.73 1152.26,2807.36 1137.1,2815.17 1120.95,2789.57 1110.07,2793.94 1108.9,2778.31 1100.22,2777.05 1085.72,2763.48 1124.21,2763.37 1124.06,2742.75 1119.68,2732.6 1133.83,2723.52 1133.76,2706.02 1140.43,2694.65 1159.04,2696.69 1165.29,2714.69 1185.03,2716.33 1188.33,2726.88 1195.8,2726.88 1196.11,2738.55"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525384"
- class="fil1 str3"
- points="1127.32,2711.51 1118.47,2704.69 1110.41,2684 1115.66,2664.63 1094.35,2633.26 1092.36,2612.4 1124.87,2609.28 1143.63,2619.77 1160.81,2609.65 1166.55,2637.15 1187.77,2677.45 1188.93,2704.97 1185.03,2716.33 1165.29,2714.69 1159.04,2696.69 1140.43,2694.65 1133.76,2706.02"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_124863688"
- class="fil1 str3"
- points="1078.95,2711.93 1091.63,2678 1110.41,2684 1118.47,2704.69 1127.32,2711.51 1133.76,2706.02 1133.83,2723.52 1119.68,2732.6 1124.06,2742.75 1124.21,2763.37 1085.72,2763.48 1085.02,2750.82 1075.46,2744.04"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_123515016">
- <polygon
- id="_123514800"
- class="fil1 str3"
- points="708.601,2037.06 725.955,2036.66 734.373,2027.64 697.399,1997.91 686.719,2006.19 680.638,1997.15 657.422,2008.47 624.552,1983.92 618.297,1992.4 609.406,2001.45 625.958,2026.78 650.048,2036.58 682.31,2087.69 699.942,2096.18 714.195,2113.64 722.083,2088.15 701.553,2050.89 693.091,2053.3 683.972,2037.18 697.788,2028.25"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123507216"
- class="fil1 str3"
- points="602.732,2104.25 604.143,2072.32 560.912,2033.72 591.47,2034.67 599.345,2005.73 606.724,2003.75 609.406,2001.45 625.958,2026.78 650.048,2036.58 682.31,2087.69 658.233,2087.36 649.109,2114.14 637.041,2124.73 619.645,2119.72"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123531504"
- class="fil1 str3"
- points="574.065,2009.34 586.191,2001.6 599.345,2005.73 591.47,2034.67 560.912,2033.72 555.89,2029.24 565.518,2020.94 572.222,2018.05"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g304">
- <polygon
- id="_123532512"
- class="fil1 str3"
- points="569.454,1974.32 570.959,1969.43 577.903,1975.51 576.704,1989.53 573.135,1993.22 570.525,1995.92 565.75,1986.37"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123522432"
- class="fil1 str3"
- points="606.724,2003.75 609.406,2001.45 618.297,1992.4 609.713,1968.71 604.111,1953.24 594.918,1967 584.997,1973.56 587.76,1989.75 586.191,2001.6 599.345,2005.73"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123529656"
- class="fil1 str3"
- points="586.682,2125.52 619.645,2119.72 602.732,2104.25 604.143,2072.32 560.912,2033.72 555.89,2029.24 554.878,2034.13 545.861,2040.72 542.07,2057.32 535.479,2048.67 528.625,2052.44 523.646,2074 516.005,2074.45 512.029,2079.73 514.431,2087.5 519.963,2093.06 532.104,2120.31 555.396,2140.77"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g309">
- <polygon
- id="_123518352"
- class="fil1 str3"
- points="497.993,2124.8 501.968,2126.49 508.455,2123.19 509.281,2133.22 506.071,2139.25 503.452,2143.4 494.267,2138.97 490.328,2137.22 482.23,2137.44 478.94,2137.53 475.034,2128.84 488.055,2120.59"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526800"
- class="fil1 str3"
- points="454.604,2077.04 457.238,2076.28 461.144,2080.19 460.813,2088.57 456.24,2089.75 452.897,2090.62 448.122,2078.89"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532416"
- class="fil1 str3"
- points="491.136,2114.13 481.213,2114.63 476.51,2118.25 474.6,2119.72 469.825,2119.28 479.808,2103.21 488.923,2103.21 494.523,2108.46 492.567,2111.73"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509688"
- class="fil1 str3"
- points="527.665,2131.1 532.104,2120.31 555.396,2140.77 555.031,2165.28 563.071,2165.56 569.468,2193.63 553.069,2193.43 535.39,2198.79 521.204,2212.05 504.679,2205.76 479.858,2180.12 478.448,2170.6 469.279,2140.47 495.38,2149.82 508.39,2146.78 516.539,2131.32"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123526632"
- class="fil1 str3"
- points="521.204,2212.05 535.39,2198.79 553.069,2193.43 518.675,2253.04 521.205,2270.12 505.575,2286.54 497.439,2253.13 486.195,2236.05 504.679,2205.76"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123534936"
- class="fil1 str3"
- points="504.679,2205.76 486.195,2236.05 456.831,2205.46 479.858,2180.12"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g317">
- <polygon
- id="_123523032"
- class="fil1 str3"
- points="444.259,2136.72 436.94,2129.83 433.472,2137.47 432.063,2140.57 426.42,2139.27 426.42,2128.84 434.233,2119.72 446.344,2130.17 445.139,2133.95"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123521784"
- class="fil1 str3"
- points="368.257,2111.03 362.393,2111.03 360.01,2111.03 363.483,2101.91 368.691,2091.92 374.291,2091.95 374.375,2097.52 374.437,2101.6"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524160"
- class="fil1 str3"
- points="389.96,2117.11 382.552,2117.11 379.543,2117.11 374.768,2108.86 385.185,2100.61 392.521,2100.64 394.611,2105.46 396.139,2108.98"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532392"
- class="fil1 str3"
- points="378.198,2166.66 369.228,2164.58 363.049,2158.81 356.104,2158.38 346.555,2121.89 353.065,2119.72 358.254,2125.56 367.337,2116.45 373.466,2121.89 373.643,2128.93 370.034,2132.39 367.395,2134.92 370.679,2140.64 377.934,2140.87 380.882,2140.97 384.805,2132.63 393.218,2134.91 400.059,2149.8 395.924,2160.55 384.637,2156.59"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123521928"
- class="fil1 str3"
- points="460.629,2137.37 469.279,2140.47 478.448,2170.6 479.858,2180.12 456.831,2205.46 437.999,2253.13 405.042,2221.35 422.274,2202.18 436.107,2205.5 443.336,2190.18 445.199,2172.29 435.458,2167.51 427.14,2175.11 410.657,2163.49 411.427,2141.71 419.5,2133.51 424.363,2148.04 435.891,2147.78"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123515736"
- class="fil1 str3"
- points="395.853,2199.94 385.845,2193.29 381.18,2200.87 391.702,2208.89 396.191,2218.55 405.042,2221.35 422.274,2202.18 436.107,2205.5 443.336,2190.18 445.199,2172.29 435.458,2167.51 427.14,2175.11 410.657,2163.49 402.223,2173.97 403.459,2181.86 413.408,2190.53 416.553,2198.31 411.394,2200.31 402.206,2197.86"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525312"
- class="fil1 str3"
- points="431.183,2264.34 437.999,2253.13 456.831,2205.46 486.195,2236.05 497.439,2253.13 505.575,2286.54 491.621,2301.21 454.775,2288.95"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g326">
- <polygon
- id="_123512136"
- class="fil1 str3"
- points="308.792,2223.1 304.471,2223.1 302.716,2223.1 299.243,2216.58 305.32,2207.46 311.788,2210.1 311.621,2214.42 311.5,2217.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123518040"
- class="fil1 str3"
- points="359.968,2221.39 357.943,2230.61 353.857,2230.52 352.197,2230.48 346.555,2225.7 346.555,2211.8 352.197,2208.33 359.013,2213.87 359.564,2218.22"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123506688"
- class="fil1 str3"
- points="437.999,2253.13 431.183,2264.34 424.509,2272.14 422.735,2290.44 368.826,2294.62 367.633,2271.65 371.529,2267.62 370.303,2256.45 381.609,2255.16 385.901,2250.78 384.587,2240.35 395.125,2230.34 396.191,2218.55 405.042,2221.35"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="g331">
- <polygon
- id="_123526896"
- class="fil1 str3"
- points="347.857,2267.84 344.153,2270.93 342.648,2272.18 335.269,2267.84 340.478,2259.15 349.55,2254.84 351.891,2259.91 353.602,2263.62"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123530064"
- class="fil1 str3"
- points="334.401,2304.76 329.772,2305.07 327.891,2305.19 325.72,2300.85 326.588,2290.86 330.452,2290.02 333.795,2296.85 336.24,2301.84"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524664"
- class="fil1 str3"
- points="331.973,2310.95 331.011,2315.73 362.649,2315.76 368.826,2294.62 367.633,2271.65 371.529,2267.62 370.303,2256.45 369.587,2250.92 358.574,2254.71 355.58,2272.87 349.848,2279 338.504,2278.41 337.303,2283.26 344.031,2290.92 343.06,2299.64"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="g336">
- <polygon
- id="_123526992"
- class="fil1 str3"
- points="324.852,2362.09 321.148,2358.39 319.644,2356.88 321.773,2350.78 324.809,2346.49 331.466,2353.97 331.657,2356.4 331.797,2358.19"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123528384"
- class="fil1 str3"
- points="347.952,2415.57 358.025,2401.86 350.075,2389.46 332.954,2400.61 337.853,2381.11 333.22,2376.18 335.43,2357.44 345.35,2341.23 344.328,2334.69 339.132,2330.79 332.311,2336.53 328.473,2331.91 331.011,2315.73 362.649,2315.76 368.826,2294.62 422.735,2290.44 421.21,2308.62 428.463,2316.31 404.054,2342.78 384.527,2400.54 372.634,2422.35 349.233,2436.92 359.461,2423.29 360.11,2416.17"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123504672"
- class="fil1 str3"
- points="332.954,2400.61 350.075,2389.46 358.025,2401.86 347.952,2415.57 338.319,2415.1 331.84,2405.05"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123528288"
- class="fil1 str3"
- points="363.097,2528.12 347.887,2541.99 347.236,2539.57 339.362,2526.5 346.611,2498.97 354.361,2486.29 353.9,2475 365.851,2462.21 364.27,2454.11 349.269,2448.25 349.233,2436.92 372.634,2422.35 384.527,2400.54 392.2,2419.5 403.237,2423.14 403.809,2451.54 410.475,2454.41 417.712,2464.96 402.523,2474.65 405.334,2489.15 397.085,2495.68 393.829,2524.51"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_123507120">
- <g
- id="g343">
- <polygon
- id="_123516168"
- class="fil1 str3"
- points="951.99,1578.88 947.584,1569.28 956.308,1557.58 956.364,1539.27 964.998,1535.58 995.78,1539.13 1006.02,1540.57 1026.35,1524.47 1049.79,1525.04 1057.21,1535.21 1061.89,1556.18 1052.16,1556.41 1014.05,1547.56 999.253,1557.49 995.823,1568.69 1006.78,1577.38 1009.75,1587.79 1004.51,1600.44 980.109,1590.58 969.772,1595.81 964.457,1586.08"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524544"
- class="fil1 str3"
- points="951.187,1592.83 944.242,1592.83 937.731,1587.19 941.204,1581.11 949.971,1584.43"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123511296"
- class="fil1 str3"
- points="892.558,1634.74 881.896,1628.14 870.453,1631.06 860.036,1606.73 866.113,1595.44 899.535,1587.62 908.877,1598.64 918.083,1598.51 923.98,1595.47 929.149,1600.17 928.93,1606.22 916.609,1611.27 904.132,1603 894.158,1605.66 901.318,1628.45"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g348">
- <polygon
- id="_123532296"
- class="fil1 str3"
- points="723.31,1855.63 715.497,1858.67 714.87,1862.05 713.327,1870.39 720.706,1869.96 722.576,1866.59 725.133,1861.99"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513816"
- class="fil1 str3"
- points="757.474,1842.06 749.922,1837.06 740.913,1850.69 733.448,1856.71 725.828,1868.31 716.105,1883.13 714.896,1906.75 734.808,1934.22 747.243,1934.05 756.618,1942.5 764.428,1938.25 755.457,1926.07 763.583,1910.81 784.212,1906.8 790.68,1932.63 813.538,1928.76 820.94,1917.54 805.498,1897.4 795.716,1869.35 807.846,1863.11 805.145,1847.66 816.72,1831.45 771.579,1811.3 763.857,1823.97 763.625,1838.73"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123511080"
- class="fil1 str3"
- points="1001.06,1906.9 1018.13,1898.21 1004.95,1874.74 981.21,1828.82 976.195,1818.34 955.644,1835.42 941.487,1835.27 941.464,1849.9 932.232,1856.91 920.747,1879.77 899.164,1883.46 893.508,1893.31 918.623,1909 964.779,1954.89 987.348,1958.71 985.131,1947.28 987.934,1933.85 997.203,1932.51"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123504864"
- class="fil1 str3"
- points="1551.11,1416.34 1579.48,1397.44 1598.77,1395.63 1590.01,1334.1 1560.34,1249.47 1535.44,1212.77 1516.62,1162.12 1471.15,1167.96 1396.51,1150.45 1397,1167.18 1381.94,1173.14 1377.03,1191.57 1389.74,1218.91 1408.29,1226.72 1403.72,1258.16 1394.3,1259.63 1393.99,1277.05 1406.59,1286.23 1406.94,1303.11 1401.44,1307.59 1383.24,1302.42 1364.8,1311.34 1379.62,1333.66 1378.48,1352.79 1392.79,1360.37 1402.99,1382.63 1403.3,1420.9 1417.27,1430.13 1431.56,1429.74 1440.15,1420.73 1478.14,1453.45 1484.2,1458.48 1519.34,1460.14 1556.25,1452.97 1561.84,1434.11"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123533808"
- class="fil1 str3"
- points="1465.64,1480.24 1478.14,1453.45 1440.15,1420.73 1431.56,1429.74 1417.27,1430.13 1403.3,1420.9 1402.99,1382.63 1392.79,1360.37 1378.48,1352.79 1348.52,1365.88 1280.73,1355.15 1277.61,1368.71 1294.04,1430.21 1291.28,1474.28 1305.57,1493.61 1317.92,1493.78 1336.46,1512.05 1340.51,1540.95 1397.55,1530.71 1400.94,1496.98 1442.05,1477.57 1450.78,1484.71"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123520872"
- class="fil1 str3"
- points="1294.04,1430.21 1277.61,1368.71 1280.73,1355.15 1266.81,1320.59 1256.46,1325.5 1242.83,1319.3 1200.14,1388.84 1168.84,1399.51 1076.5,1391.52 1078.92,1441.61 1075.93,1487.6 1095,1498.02 1101.28,1497.21 1107.57,1510.27 1102.29,1526.69 1084.87,1532.4 1101.52,1559.96 1131.27,1585.48 1230.71,1589.35 1258.72,1589.47 1273.3,1578.6 1289.52,1580.72 1303.8,1590.57 1309.94,1552.85 1324.9,1543.75 1340.51,1540.95 1336.46,1512.05 1317.92,1493.78 1305.57,1493.61 1291.28,1474.28"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <path
- id="_123507576"
- class="fil1 str3"
- d="m 959.934,1460.96 6.52643,11.6125 -1.01801,12.4857 -8.20819,8.7163 0.0265,14.6825 -6.32465,7.7357 5.46852,10.0852 -0.0396,12.9904 8.63312,-3.6944 30.7828,3.5576 31.42888,-91.9069 30.9951,-8.8973 20.7187,3.2786 -2.427,-50.0862 -3.5192,-30.1461 -46.7181,29.4353 -53.64175,-3.066 -3.20165,14.8349 -21.389,11.1046 -14.4268,14.7101 c 0.61645,0.6401 1.23375,1.2765 1.85162,1.9095 l 0.5717,13.1287 6.99154,0.034 4.66996,-4.3003 12.2492,21.7957 z"
- inkscape:connector-curvature="0"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123531072"
- class="fil1 str3"
- points="1058.2,1438.33 1027.21,1447.23 995.78,1539.13 1006.02,1540.57 1026.35,1524.47 1049.79,1525.04 1057.21,1535.21 1084.87,1532.4 1102.29,1526.69 1107.57,1510.27 1101.28,1497.21 1095,1498.02 1075.93,1487.6 1078.92,1441.61"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123522384"
- class="fil1 str3"
- points="1084.02,1729.21 1091.23,1748.68 1109.12,1743.81 1116.82,1747.93 1117.62,1757.04 1130.9,1753.14 1135.85,1737.13 1164.36,1723.23 1174.42,1694.04 1200.45,1681.63 1201.29,1674.21 1231.9,1681.26 1237.65,1665.79 1235.17,1624.71 1217.95,1610.3 1230.71,1589.35 1131.27,1585.48 1138.85,1609.63 1157,1630.55 1139.03,1656.24 1129.65,1655.35 1125.19,1664.37 1112,1670.37 1118.12,1679.46 1109.37,1686.42 1086.03,1669.08 1075.33,1674.57 1102.38,1725.9"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123510912"
- class="fil1 str3"
- points="1032.7,1611.22 1047.11,1600.88 1058.39,1582.72 1049.38,1564.88 1052.16,1556.41 1014.05,1547.56 999.253,1557.49 995.823,1568.69 1006.78,1577.38 1009.75,1587.79 1004.51,1600.44"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525168"
- class="fil1 str3"
- points="1058.39,1582.72 1049.38,1564.88 1052.16,1556.41 1061.89,1556.18 1057.21,1535.21 1084.87,1532.4 1101.52,1559.96 1131.27,1585.48 1138.85,1609.63 1157,1630.55 1139.03,1656.24 1129.65,1655.35 1125.19,1664.37 1112,1670.37 1088.95,1662 1063.35,1627.69 1024.22,1657.93 1012.89,1642.69 978.389,1631.88 981.608,1632.03 982.389,1626.32 972.932,1616.68 969.772,1595.81 980.109,1590.58 1004.51,1600.44 1032.7,1611.22 1047.11,1600.88"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515184"
- class="fil1 str3"
- points="960.695,1620.02 947.233,1618.86 944.869,1625.57 946.032,1634.14 965.659,1653.85 967.439,1659.18 977.006,1661.59 974.448,1652.55 974.344,1643.03 978.389,1631.88 975.171,1631.73"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123504984"
- class="fil1 str3"
- points="1012.89,1642.69 978.389,1631.88 974.344,1643.03 974.448,1652.55 977.006,1661.59 993.27,1669.89 1008.08,1668.63 1018.27,1649.93"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123528000"
- class="fil1 str3"
- points="1086.03,1669.08 1109.37,1686.42 1118.12,1679.46 1112,1670.37 1088.95,1662 1063.35,1627.69 1024.22,1657.93 1055.73,1715.72 1049.94,1722.8 1073.54,1748.12 1092.43,1782.74 1117.62,1757.04 1116.82,1747.93 1109.12,1743.81 1091.23,1748.68 1084.02,1729.21 1102.38,1725.9 1075.33,1674.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513528"
- class="fil1 str3"
- points="1066.99,1752.89 1041.43,1732.49 1049.94,1722.8 1055.73,1715.72 1024.22,1657.93 1018.27,1649.93 1008.08,1668.63 993.27,1669.89 987.276,1673.01 993.835,1704.17 982.278,1704.51 980.537,1718.27 1011.99,1752.76 1019.43,1746.77 1009.48,1736.94 1017.42,1729.03 1036.07,1743.71 1047.58,1757.86 1063.95,1761.05"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515952"
- class="fil1 str3"
- points="1066.99,1752.89 1063.95,1761.05 1047.58,1757.86 1036.07,1743.71 1017.42,1729.03 1009.48,1736.94 1019.43,1746.77 1011.99,1752.76 980.537,1718.27 982.278,1704.51 993.835,1704.17 987.276,1673.01 993.27,1669.89 977.006,1661.59 967.439,1659.18 969.609,1665.68 964.448,1670.35 955.431,1669.57 937.238,1704.08 999.386,1751.24 1012.77,1773.59 1017.89,1763.82 1023.1,1763.85 1032.18,1774.11 1039.32,1762.17 1074.94,1791.22 1092.43,1782.74 1073.54,1748.12 1049.94,1722.8 1041.43,1732.49"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123520728"
- class="fil1 str3"
- points="953.652,1659.04 955.431,1669.57 937.238,1704.08 909.667,1684.22 918.965,1656.94 915.554,1647.45 933.954,1647.6"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123506952"
- class="fil1 str3"
- points="937.238,1704.08 982.066,1738.09 974.984,1744.16 966.871,1766.71 982.556,1772.35 976.32,1788.03 983.67,1802.74 983.816,1812.72 976.195,1818.34 976.105,1805.26 967.051,1793.78 938.385,1781.11 912.355,1757.17 894.016,1753.24 888.621,1746.34 886.536,1743.68 886.528,1728.33 886.601,1715.24 869.231,1685 858.027,1684.09 860.633,1670.62 873.052,1669.18 877.301,1661.48 884.505,1655.08 906.039,1654.86 915.554,1647.45 918.965,1656.94 909.667,1684.22"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123523464"
- class="fil1 str3"
- points="869.231,1685 858.027,1684.09 855.481,1697.25 836.256,1710.62 826.035,1753.87 813.334,1763.68 852.231,1780.02 877.52,1782.64 899.35,1809.52 904.492,1804.96 904.513,1792.91 895.733,1782.69 891.38,1763.88 894.016,1753.24 886.536,1743.68 886.528,1728.33 886.601,1715.24"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526584"
- class="fil1 str3"
- points="1152.9,1843.74 1137.22,1833.3 1125.43,1834.94 1110.87,1822.18 1113.15,1807.93 1105.72,1791.46 1092.43,1782.74 1074.94,1791.22 1039.32,1762.17 1032.18,1774.11 1023.1,1763.85 1017.89,1763.82 1012.77,1773.59 999.386,1751.24 982.066,1738.09 974.984,1744.16 966.871,1766.71 982.556,1772.35 976.32,1788.03 983.67,1802.74 983.816,1812.72 976.195,1818.34 981.21,1828.82 1004.95,1874.74 1018.13,1898.21 1042.12,1918.68 1078.19,1933.82 1078.24,1912.07 1068.28,1894.79 1071.66,1883.9 1085.38,1887.84 1093.62,1872.04 1121.19,1863.77 1141.27,1873.17 1152.89,1870.45"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123534576"
- class="fil1 str3"
- points="967.051,1793.78 976.105,1805.26 976.195,1818.34 955.644,1835.42 941.487,1835.27 915.39,1829.25 899.35,1809.52 904.492,1804.96 904.513,1792.91 895.733,1782.69 891.38,1763.88 894.016,1753.24 912.355,1757.17 938.385,1781.11"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123533976"
- class="fil1 str3"
- points="1152.89,1914.16 1163.78,1927.86 1129.2,1939.51 1087.05,1978.45 1086.47,1957.32 1078.17,1942.05 1078.19,1933.82 1078.24,1912.07 1068.28,1894.79 1071.66,1883.9 1085.38,1887.84 1093.62,1872.04 1121.19,1863.77 1141.27,1873.17 1152.89,1870.45"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513216"
- class="fil1 str3"
- points="988.916,2085.88 954.771,2062.46 984.632,2049.24 1004.27,1996.82 1086.47,1957.32 1087.05,1978.45 1079.19,1985.71 1086.69,2061.72 1078.37,2066.71 1062.15,2112.61 1031.13,2112.83 1022.17,2093.91 1012.63,2085.96"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532968"
- class="fil1 str3"
- points="1004.27,1996.82 994.841,1960.18 987.348,1958.71 985.131,1947.28 987.934,1933.85 997.203,1932.51 1001.06,1906.9 1018.13,1898.21 1042.12,1918.68 1078.19,1933.82 1078.17,1942.05 1086.47,1957.32"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525192"
- class="fil1 str3"
- points="994.841,1960.18 987.348,1958.71 964.779,1954.89 946.622,1953.72 941.182,1975.51 927.401,1998.06 902.086,1990.61 898.208,2014.19 919.154,2017.2 941.998,2053.69 954.771,2062.46 984.632,2049.24 1004.27,1996.82"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525912"
- class="fil1 str3"
- points="853.35,2042.04 903.105,2102.63 920.687,2100.29 927.197,2059.84 941.998,2053.69 919.154,2017.2 898.208,2014.19 895.453,2030.73 872.274,2022.81"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123516384"
- class="fil1 str3"
- points="853.35,2042.04 872.274,2022.81 895.453,2030.73 898.208,2014.19 902.086,1990.61 890.208,1969.58 859.115,1949.81 834.523,1940.28 820.94,1917.54 813.538,1928.76 790.68,1932.63 793.686,1944.63 804.533,1950.27 809.544,1971.34 824.378,1977.18 840.913,2026.89"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123519888"
- class="fil1 str3"
- points="899.506,1937.89 871.385,1937.68 859.115,1949.81 890.208,1969.58 902.086,1990.61 927.401,1998.06 941.182,1975.51 946.622,1953.72 964.779,1954.89 918.623,1909"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123536520"
- class="fil1 str3"
- points="857.778,1869.72 834.503,1875.81 824.964,1891.77 826.916,1902.36 820.94,1917.54 834.523,1940.28 859.115,1949.81 871.385,1937.68 899.506,1937.89 918.623,1909 893.508,1893.31"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123514200"
- class="fil1 str3"
- points="899.164,1883.46 893.508,1893.31 857.778,1869.72 851.884,1842.21 869.051,1845.22 869.101,1834.38 883.841,1820.72 883.987,1809.55 899.35,1809.52 915.39,1829.25 941.487,1835.27 941.464,1849.9 932.232,1856.91 920.747,1879.77"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123529440"
- class="fil1 str3"
- points="850.132,1824.32 866.155,1811.31 883.987,1809.55 899.35,1809.52 877.52,1782.64 852.231,1780.02 813.334,1763.68 812.447,1770.7 794.931,1782.31 774.609,1804.09 771.579,1811.3 816.72,1831.45 840.604,1810.62"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532032"
- class="fil1 str3"
- points="851.884,1842.21 869.051,1845.22 869.101,1834.38 883.841,1820.72 883.987,1809.55 866.155,1811.31 850.132,1824.32 840.604,1810.62 816.72,1831.45 857.778,1869.72"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123527832"
- class="fil1 str3"
- points="795.716,1869.35 807.846,1863.11 805.145,1847.66 816.72,1831.45 857.778,1869.72 834.503,1875.81 824.964,1891.77 826.916,1902.36 820.94,1917.54 805.498,1897.4"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
-
- <g
- id="_123524592">
- <polygon
- id="_123521616"
- class="fil1 str3"
- points="682.21,2928.73 675.663,2901.05 683.482,2888.24 696.659,2884.78 701.798,2879.74 701.09,2874.31 728.985,2889.25 724.994,2902.1 736.807,2918.6 728.161,2921.9 735.082,2932.22 725.235,2983.37 706.523,2980.15 674.917,2969.69 643.351,2945.45 653.789,2928.99 669.642,2936.15"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509544"
- class="fil1 str3"
- points="856.142,2914.42 851.628,2913.31 847.074,2924.88 839.33,2925.25 836.602,2935.47 827.385,2949.77 824.339,2943.07 810.131,2943.02 808.216,2952.16 793.893,2949.49 786.618,2943.56 797.658,2930.49 789.814,2899.94 811.017,2887.92 825.088,2864.91 835.357,2861.1 846.062,2868.43 859.462,2864.55 877.622,2884.02 877.557,2907.41 870.777,2907.92 872.565,2917.21 862.987,2924.52 856.943,2919.92"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123533376"
- class="fil1 str3"
- points="901.478,2910.74 891.37,2919.27 903.078,2944.58 891.799,2947.46 888.946,2960.18 897.939,2952.53 907.1,2958.94 893.857,2968.57 895.324,2977.5 875.258,2971.8 865.162,2976.12 855.256,2977.28 850.996,2964.14 856.021,2952.27 852.966,2942.73 836.602,2935.47 839.33,2925.25 847.074,2924.88 851.628,2913.31 856.142,2914.42 856.943,2919.92 862.987,2924.52 872.565,2917.21 870.777,2907.92 877.557,2907.41 890.922,2897.91"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123512832"
- class="fil1 str3"
- points="901.898,2793.4 916.723,2804.85 918.923,2842.42 891.308,2858.88 883.856,2889.32 890.922,2897.91 877.557,2907.41 877.622,2884.02 859.462,2864.55 846.062,2868.43 835.357,2861.1 825.088,2864.91 811.017,2887.92 789.814,2899.94 797.658,2930.49 786.618,2943.56 776.985,2934.04 744.975,2926.25 735.082,2932.22 728.161,2921.9 736.807,2918.6 724.994,2902.1 728.985,2889.25 701.09,2874.31 697.552,2847.18 719.506,2838.85 766.709,2820.94 766.392,2846.94 731.276,2886.66 729.083,2891.62 731.563,2894.66 729.417,2902.46 736.22,2905.04 735.175,2907.55 739.188,2909.15 743.214,2904.27 746.275,2906.89 771.03,2876.28 819.947,2848.12 805.823,2838.11 780.133,2798.12 808.832,2775.62 833.758,2785.32 839.203,2773 851.034,2784.83 868.71,2776.92 893.515,2786.84 890.301,2798.88"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123536496"
- class="fil1 str3"
- points="739.188,2909.15 735.175,2907.55 736.22,2905.04 729.417,2902.46 731.563,2894.66 729.083,2891.62 731.276,2886.66 766.392,2846.94 766.709,2820.94 775.576,2810.39 772.241,2806.46 771.866,2799.95 775.339,2794.5 780.133,2798.12 805.823,2838.11 819.947,2848.12 771.03,2876.28 746.275,2906.89 743.214,2904.27"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123510456"
- class="fil1 str3"
- points="696.659,2884.78 683.482,2888.24 675.663,2901.05 682.21,2928.73 669.642,2936.15 653.789,2928.99 657.19,2892.39 647.285,2882.87 645.998,2873.75 676.072,2862.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123517104"
- class="fil1 str3"
- points="657.19,2892.39 653.789,2928.99 643.351,2945.45 639.263,2942.32 629.615,2947.14 629.769,2941.37 612.904,2904.19 636.512,2900.79 647.285,2882.87"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123517536"
- class="fil1 str3"
- points="647.285,2882.87 636.512,2900.79 612.904,2904.19 608.333,2894.11 616.528,2875.01 604.271,2867.68 604.484,2859.38 614.825,2853.04 629.168,2863.92 631.458,2873.97 645.998,2873.75"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525480"
- class="fil1 str3"
- points="619.967,2951.96 594.283,2939.19 593.733,2926.89 600.574,2920.76 592.29,2911.08 593.691,2897.09 608.333,2894.11 629.769,2941.37 629.615,2947.14"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123514656"
- class="fil1 str3"
- points="782.852,3008.01 780.117,2997.59 768.943,2992.27 758.077,3000.59 752.417,2988.06 725.235,2983.37 735.082,2932.22 744.975,2926.25 776.985,2934.04 786.618,2943.56 793.893,2949.49 808.216,2952.16 810.131,2943.02 824.339,2943.07 827.385,2949.77 814.396,2968.88 817.6,2977.44 809.7,2988.07 810.923,3002.5"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123523560"
- class="fil1 str3"
- points="852.966,2942.73 856.021,2952.27 850.996,2964.14 855.256,2977.28 835.253,2980.06 817.6,2977.44 814.396,2968.88 827.385,2949.77 836.602,2935.47"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
-
- <g
- id="_123517872">
- <polygon
- id="_123529392"
- class="fil1 str3"
- points="33.5849,3035.75 41.1199,3074.77 34.4915,3074.87 29.1595,3073.65 26.3728,3083.28 18.8654,3083.7 13.3646,3071.39 16.3306,3058.37 11.012,3052.68 14.3162,3043.96"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123517752"
- class="fil1 str3"
- points="59.1953,3027.51 67.5138,3032.8 65.2332,3047.71 63.4896,3065.75 69.7114,3073.8 50.8534,3085.95 41.1199,3074.77 33.5849,3035.75 42.3408,3038.52 51.701,3037.09"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123530808"
- class="fil1 str3"
- points="79.2103,3067.68 88.7378,3077.46 98.813,3085.09 90.3449,3105.11 84.8333,3089.34 70.9434,3090.87 72.4157,3111.57 67.6728,3105.54 58.1744,3104.57 52.4884,3098.18 50.8534,3085.95 69.7114,3073.8"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123528240"
- class="fil1 str3"
- points="70.9434,3090.87 84.8333,3089.34 90.3449,3105.11 86.3825,3119.37 74.1171,3122.07 72.4157,3111.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123523920"
- class="fil1 str3"
- points="100.189,3128.84 86.3825,3119.37 90.3449,3105.11 92.4564,3108.56 100.794,3108.78 105.859,3105.46 122.12,3114.24 122.2,3120.94 118.794,3128.57 124.795,3134.78 123.752,3142.38 113.857,3149.22 111.359,3138.67 104.948,3139.89"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123510792"
- class="fil1 str3"
- points="127.334,3043.78 137.343,3055.96 129.954,3077.59 112.327,3080.44 101.229,3068.17 96.2591,3067.67 98.9053,3058.86 119.393,3050.51 126.972,3040.91"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526512"
- class="fil1 str3"
- points="88.7378,3077.46 79.2103,3067.68 69.7114,3073.8 63.4896,3065.75 65.2332,3047.71 71.3886,3049.28 76.6471,3043.26 74.7148,3038.85 74.6712,3032.67 71.3641,3027.63 73.55,3027.63 95.3594,3015.08 96.5307,3016.21 89.9829,3036.5 98.9053,3058.86 96.2591,3067.67 94.4933,3067.5"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509880"
- class="fil1 str3"
- points="70.0742,3024.81 55.7411,3022.76 68.3286,3006.26 80.6746,3000.85 95.3594,3015.08 73.55,3027.63 71.3641,3027.63"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525672"
- class="fil1 str3"
- points="123.462,3114.73 121.721,3099.37 131.459,3087.72 135.232,3088.35 136.811,3096.63 131.054,3107.45 134.293,3114.81"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g435">
- <polygon
- id="_123522000"
- class="fil1 str3"
- points="163.395,3039.15 140.815,3037.53 141.249,3030.58 147.084,3026.04 163.374,3034.02"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515568"
- class="fil1 str3"
- points="162.305,3068.36 154.259,3079.63 149.071,3079.54 149.935,3064.62 143.853,3058.38 150.798,3051.43 156.633,3046.89 160.407,3053.17 157.211,3060.58"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="g439">
- <polygon
- id="_123529344"
- class="fil1 str3"
- points="151.655,3146.96 136.484,3146.44 133.441,3141.5 147.326,3130.05 154.897,3124.21 173.863,3126.57 178.914,3132.68 172.288,3140.89"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509568"
- class="fil1 str3"
- points="166.183,3106.84 171.969,3107.92 178.799,3114.4 179,3119.16 166.867,3117.77 161.654,3111.96"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123517392"
- class="fil1 str3"
- points="200.289,3115.16 188.56,3114.41 185.836,3102.31 180.314,3096.17 186.149,3087.72 195.875,3093.63 202.016,3107.03 200.703,3110.04"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123531240"
- class="fil1 str3"
- points="240.529,3169.96 238.749,3175.41 232.835,3175.24 227.614,3183.44 214.613,3173.8 217.212,3166.26 230.856,3159.83 234.906,3162.65 242.604,3166.52"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g445">
- <polygon
- id="_123506592"
- class="fil1 str3"
- points="240.646,3045.78 232.834,3047.96 227.625,3042.31 230.856,3032.13 240.582,3036.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532080"
- class="fil1 str3"
- points="207.225,3045.35 207.225,3044.92 210.022,3036.03 215.841,3031.95 221.114,3037.1 217.208,3047.09 209.838,3048.7"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513576"
- class="fil1 str3"
- points="211.131,3074.02 210.263,3069.67 210.022,3060.79 218.88,3056.71 224.153,3064.03 225.889,3068.37 215.915,3077.37"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123505728"
- class="fil1 str3"
- points="195.939,3087.92 192.901,3075.76 196.132,3070.35 202.386,3071.48 204.62,3077.06 204.609,3081.37 205.932,3087.8"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="g451">
- <polygon
- id="_123522984"
- class="fil1 str3"
- points="272.766,3011.9 264.519,3010.17 262.843,2978.21 269.052,2977.83 279.711,2993.66"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535848"
- class="fil1 str3"
- points="247.784,2994.34 255.34,3006.32 252.8,3017.99 244.987,3022.33 238.476,3007.56 239.838,2999.49"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123528912"
- class="fil1 str3"
- points="264.712,3016.49 271.4,3024.56 268.86,3039.27 263.651,3044.05 257.14,3040.14 254.162,3025.55"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123529608"
- class="fil1 str3"
- points="126.972,3040.91 119.393,3050.51 98.9053,3058.86 89.9829,3036.5 96.5307,3016.21 111.167,3018.9 117.585,3029.69 126.015,3033.32"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_123519216">
- <polygon
- id="_123532104"
- class="fil1 str3"
- points="658.233,2087.36 682.31,2087.69 699.942,2096.18 714.245,2114.3 714.561,2139.08 704.215,2144.14 696.728,2135.21 682.861,2144.09 672.967,2134.35 663.731,2143.82 647.327,2132.41 649.109,2114.14"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123512568"
- class="fil1 str3"
- points="563.071,2165.56 555.031,2165.28 555.396,2140.77 586.682,2125.52 619.645,2119.72 637.041,2124.73 649.109,2114.14 647.327,2132.41 663.731,2143.82 672.967,2134.35 682.861,2144.09 663.037,2168.83 678.745,2188.31 679.841,2217.2 662.047,2226.57 621.288,2228.43 599.272,2209.66 580.212,2220.72 561.818,2207.59 543.924,2209.28 553.069,2193.43 569.468,2193.63 564.053,2169.86"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123517968"
- class="fil1 str3"
- points="679.841,2217.2 678.745,2188.31 663.037,2168.83 682.861,2144.09 696.728,2135.21 704.215,2144.14 714.561,2139.08 714.195,2113.64 741.564,2149.62 737.314,2173.94 717.836,2180.51 715.228,2190.71 707.745,2219.97 688.668,2243.43"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123531720"
- class="fil1 str3"
- points="619.767,2278.77 588.469,2268.18 590.276,2248.25 580.212,2220.72 599.272,2209.66 621.288,2228.43 662.047,2226.57 679.841,2217.2 688.668,2243.43 676.626,2248.09 685.092,2258.59 661.861,2273.17 647.411,2301.46 629.944,2293.6 611.653,2296.53"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123529008"
- class="fil1 str3"
- points="791.702,2189.18 778.643,2194.57 724.425,2210.56 715.228,2190.71 717.836,2180.51 737.314,2173.94 741.564,2149.62 766.274,2157.05"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513792"
- class="fil1 str3"
- points="756.723,2325.43 769.624,2291.36 755.993,2284.06 759.594,2259.24 761.068,2250.48 773.118,2245.73 800.65,2246.07 802.543,2261.43 815.776,2279.18 806.687,2286.3 824.237,2332.36 829.202,2347.65 815.941,2341.77 792.966,2323.57 788.842,2336.68 768.337,2339.41"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123522120"
- class="fil1 str3"
- points="685.092,2258.59 704.766,2281.54 725.711,2307.76 731.195,2314.63 747.831,2322.83 756.723,2325.43 769.624,2291.36 755.993,2284.06 759.594,2259.24 761.068,2250.48 773.118,2245.73 800.65,2246.07 797.81,2223.04 808.231,2208.56 778.643,2194.57 724.425,2210.56 715.228,2190.71 707.745,2219.97 688.668,2243.43 676.626,2248.09"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123517944"
- class="fil1 str3"
- points="685.092,2258.59 704.766,2281.54 725.711,2307.76 715.227,2315.33 701.505,2317.41 687.362,2345.36 669.595,2341.4 646.764,2317.17 647.411,2301.46 661.861,2273.17"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123504024"
- class="fil1 str3"
- points="505.575,2286.54 566.323,2268.55 581.177,2281.04 562.813,2298.48 561.618,2306.5 586.675,2329.74 587.11,2347.83 550.406,2355.19 533.002,2336.02 484.101,2317.52 480.922,2311.67 491.621,2301.21"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123506304"
- class="fil1 str3"
- points="518.675,2253.04 521.205,2270.12 505.575,2286.54 566.323,2268.55 581.177,2281.04 562.813,2298.48 561.618,2306.5 586.675,2329.74 587.11,2347.83 596.481,2377.61 604.225,2374.11 621.78,2420.77 612.569,2426.24 631.338,2442.18 645.754,2416.75 650.412,2407.34 642.291,2373.14 648.671,2366.44 632.281,2332.12 636.13,2321.07 646.764,2317.17 647.411,2301.46 629.944,2293.6 611.653,2296.53 619.767,2278.77 588.469,2268.18 590.276,2248.25 580.212,2220.72 561.818,2207.59 543.924,2209.28"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123514128"
- class="fil1 str3"
- points="540.701,2399.04 536.786,2385.21 539.248,2369.81 550.406,2355.19 587.11,2347.83 596.481,2377.61 604.225,2374.11 621.78,2420.77 612.569,2426.24 631.338,2442.18 599.722,2459.44 570.925,2459.2 559.474,2459.25 541.062,2450.11 550.752,2434.56"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515304"
- class="fil1 str3"
- points="480.922,2311.67 491.621,2301.21 454.775,2288.95 431.183,2264.34 424.509,2272.14 421.21,2308.62 428.463,2316.31 409.544,2336.83 428.602,2336.75 428.678,2350.24 449.003,2354.27 454.576,2341.47 472.572,2345.65 463.389,2368.06 475.99,2370.47 484.616,2362.48 509.875,2377.57 509.892,2386.71 540.701,2399.04 536.786,2385.21 539.248,2369.81 550.406,2355.19 533.002,2336.02 484.101,2317.52"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123527088"
- class="fil1 str3"
- points="428.602,2336.75 428.678,2350.24 449.003,2354.27 454.576,2341.47 472.706,2345.32 463.389,2368.06 453.552,2391.01 434.457,2421.37 386.163,2395.7 404.054,2342.78 409.544,2336.83"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535800"
- class="fil1 str3"
- points="434.457,2421.37 435.392,2444.48 428.834,2449.52 425.652,2464.91 417.712,2464.96 410.475,2454.41 403.809,2451.54 403.237,2423.14 392.2,2419.5 384.527,2400.54 386.163,2395.7"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524856"
- class="fil1 str3"
- points="478.835,2501.31 435.392,2444.48 434.457,2421.37 453.552,2391.01 463.389,2368.06 475.99,2370.47 484.616,2362.48 509.875,2377.57 509.892,2386.71 540.701,2399.04 550.752,2434.56 541.062,2450.11 527.667,2477.44 512.035,2477.97 491.272,2509.84 479.433,2509.9"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532368"
- class="fil1 str3"
- points="402.523,2474.65 417.712,2464.96 425.652,2464.91 428.834,2449.52 435.392,2444.48 478.835,2501.31 479.433,2509.9 440.787,2542.76 407.269,2536.82 393.829,2524.51 397.085,2495.68 405.334,2489.15"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532632"
- class="fil1 str3"
- points="645.754,2416.75 650.412,2407.34 642.291,2373.14 648.671,2366.44 632.281,2332.12 636.13,2321.07 646.764,2317.17 669.595,2341.4 687.362,2345.36 701.505,2317.41 715.227,2315.33 713.307,2353.46 708.432,2356.26 724.382,2399.46 698.495,2420.78 677.504,2417.78 673.61,2427.63"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513984"
- class="fil1 str3"
- points="725.711,2307.76 731.195,2314.63 747.831,2322.83 751.728,2339.56 746.476,2350.29 754.242,2373.16 749.337,2373.27 724.382,2399.46 708.432,2356.26 713.307,2353.46 715.227,2315.33"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515472"
- class="fil1 str3"
- points="770.715,2412.47 750.321,2435.93 738.921,2431.19 735.962,2406.83 724.382,2399.46 749.337,2373.27 754.242,2373.16 746.476,2350.29 751.728,2339.56 747.831,2322.83 756.723,2325.43 768.337,2339.41 788.842,2336.68 792.966,2323.57 815.941,2341.77 829.202,2347.65 823.655,2355.54 831.235,2365.9 825.52,2404.73 803.266,2405.07 797.152,2416.3"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_123510552">
- <polygon
- id="_123526656"
- class="fil1 str3"
- points="368.184,2588.27 368.696,2583.58 362.645,2578.87 358.927,2555.16 349.954,2549.66 347.887,2541.99 363.097,2528.12 393.829,2524.51 407.269,2536.82 404.405,2569.89 396.31,2569.52 389.882,2586.04 401.744,2613.79 371.06,2615.14 371.061,2612.51 357.59,2595.07 360.297,2589.1"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123508824"
- class="fil1 str3"
- points="407.269,2536.82 440.787,2542.76 444.255,2559.86 465.297,2565.05 444.003,2600.73 451.982,2605.6 442.583,2620.29 435.07,2612.17 401.744,2613.79 389.882,2586.04 396.31,2569.52 404.405,2569.89"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123519672"
- class="fil1 str3"
- points="540.101,2610.95 540.705,2620.89 537.311,2638.46 523.038,2639.63 498.95,2624.04 479.489,2611.45 469.188,2619.19 463.398,2611.34 451.982,2605.6 444.003,2600.73 465.297,2565.05 482.941,2564.95 497.483,2553.25 498.893,2542.26 511.497,2537.62 527.031,2540.67 540.911,2547.49 540.927,2561.29 525.036,2566.94 523.068,2575.95 529.296,2582.42 527.441,2606.45"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123536664"
- class="fil1 str3"
- points="556.397,2572.87 562.553,2594.72 553.841,2625.16 540.705,2620.89 540.101,2610.95 527.441,2606.45 529.296,2582.42 523.068,2575.95 525.036,2566.94 540.927,2561.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123534312"
- class="fil1 str3"
- points="413.219,2628.97 406.119,2622.66 401.744,2613.79 435.07,2612.17 442.583,2620.29 451.982,2605.6 463.398,2611.34 469.188,2619.19 479.489,2611.45 498.95,2624.04 490.608,2633.11 483.734,2630.52 460.95,2653.3 440.578,2653.3"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515088"
- class="fil1 str3"
- points="490.608,2633.11 498.95,2624.04 523.038,2639.63 537.311,2638.46 536.228,2644.07 547.471,2654.9 533.606,2666.6 525.852,2690.51 500.054,2701.59 477.713,2672.47 490.399,2661.06 496.299,2646.92"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g484">
- <polygon
- id="_123510816"
- class="fil1 str3"
- points="361.873,2683.69 373.855,2687.23 373.514,2682.72 366.895,2677.37 359.79,2662.94 362.789,2657.25 368.402,2657.65 377.325,2667.83 384.023,2668.06 371.05,2638.93 371.06,2615.14 401.744,2613.79 406.119,2622.66 413.219,2628.97 440.578,2653.3 460.95,2653.3 483.734,2630.52 490.608,2633.11 496.299,2646.92 490.399,2661.06 477.713,2672.47 454.567,2670.93 430.709,2681.78 421.085,2703.37 410.446,2705.58 403.76,2725.7 391.354,2725.8 384.082,2714.43 370.516,2713.57 364.653,2707.23 370.088,2706.24 366.452,2697.82 355.147,2691.36 354.27,2683.4"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123529512"
- class="fil1 str3"
- points="344.384,2648.78 349.552,2643.54 351.287,2631.43 356.207,2632.83 366.087,2650.95 361.378,2656.18 351.329,2656.16"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123535248"
- class="fil1 str3"
- points="430.709,2681.78 454.567,2670.93 477.713,2672.47 500.054,2701.59 479.768,2717.17 463.392,2720.77 453.239,2721.06 443.802,2717.86 415.341,2725.89 403.76,2725.7 410.446,2705.58 421.085,2703.37"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123508680"
- class="fil1 str3"
- points="500.054,2701.59 525.852,2690.51 524.204,2695.59 543.685,2709.22 541.029,2722.35 516.578,2725.93"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123508968"
- class="fil1 str3"
- points="456.605,2760.8 470.037,2762.72 479.498,2751.82 463.392,2720.77 479.768,2717.17 500.054,2701.59 516.578,2725.93 507.308,2732.96 508.209,2746.41 518.322,2771.13 500.918,2799.71 497.496,2795.76 472.037,2787.19 459.75,2775.04 453.14,2768.51"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123518136"
- class="fil1 str3"
- points="463.392,2720.77 479.498,2751.82 470.037,2762.72 456.605,2760.8 453.14,2768.51 439.976,2767.55 425.535,2753.11 439.388,2745.12 439.334,2731.61 453.239,2721.06"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123514272"
- class="fil1 str3"
- points="415.341,2725.89 443.802,2717.86 453.239,2721.06 439.334,2731.61 439.388,2745.12 425.535,2753.11 417.074,2752.47 410.923,2758.08 400.372,2740.67 391.354,2725.8 403.76,2725.7"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123529584"
- class="fil1 str3"
- points="350.93,2709.05 352.877,2706.01 357.594,2704.47 364.653,2707.23 370.516,2713.57 384.082,2714.43 391.354,2725.8 400.372,2740.67 397.616,2756.64 381.401,2758.11 358.364,2748.14 361.247,2733.23"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526608"
- class="fil1 str3"
- points="345.896,2764.2 353.463,2769.24 357.298,2764.37 356.504,2757.75 358.364,2748.14 381.401,2758.11 397.616,2756.64 400.372,2740.67 410.923,2758.08 414.018,2788.5 422.472,2792.25 410.526,2801.86 407.243,2798.03 371.293,2801.39 368.093,2789.37 344.23,2773.71"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g495">
- <polygon
- id="_123510144"
- class="fil1 str3"
- points="342.792,2835.93 354.009,2835.06 367.103,2825.2 368.196,2851.22 389.267,2836 400.797,2846.4 432.916,2833.01 430.636,2816.03 418.79,2816.1 410.526,2801.86 407.243,2798.03 371.293,2801.39 368.093,2789.37 344.23,2773.71 338.516,2806.33 331.62,2820.18"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509280"
- class="fil1 str3"
- points="325.97,2778.11 330.018,2773.03 335.896,2776.72 337.44,2783.86 333.533,2789.08 327.891,2789.51"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123516648"
- class="fil1 str3"
- points="418.79,2816.1 410.526,2801.86 422.472,2792.25 414.018,2788.5 410.923,2758.08 417.074,2752.47 425.535,2753.11 439.976,2767.55 453.14,2768.51 459.75,2775.04 452.491,2790.33 459.031,2798.4 458.052,2818.88 456.273,2856.14 464.873,2873.43 459.805,2872.48 443.893,2886.79 438.309,2878.57 411.303,2875.96 400.797,2846.4 432.916,2833.01 430.636,2816.03"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532560"
- class="fil1 str3"
- points="500.918,2799.71 509.706,2824.09 511.538,2846.49 458.128,2817.31 459.031,2798.4 452.491,2790.33 459.75,2775.04 472.037,2787.19 497.496,2795.76"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123523848"
- class="fil1 str3"
- points="523.876,2855.3 511.538,2846.49 509.706,2824.09 500.918,2799.71 518.322,2771.13 521.353,2778.54 547.8,2787.77 556.244,2777.91 571.268,2793.24 564.473,2817.08 576.782,2838.73 566.618,2840.33 550.978,2835.08 548.953,2862.17"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123511032"
- class="fil1 str3"
- points="505.417,2869 478.834,2876.05 464.873,2873.43 456.273,2856.14 458.128,2817.31 511.538,2846.49 523.876,2855.3 500.239,2862.47"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123516624"
- class="fil1 str3"
- points="479.433,2509.9 491.272,2509.84 502.787,2492.17 513.164,2500.34 511.497,2537.62 498.893,2542.26 497.483,2553.25 482.941,2564.95 465.297,2565.05 444.255,2559.86 440.787,2542.76"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524928"
- class="fil1 str3"
- points="513.164,2500.34 502.787,2492.17 512.035,2477.97 527.667,2477.44 541.062,2450.11 559.474,2459.25 570.925,2459.2 570.936,2489.64 555.341,2497.17 554.459,2523.43 536.267,2525.2 527.031,2540.67 511.497,2537.62"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="g3502"><g
- id="g398">
- <polygon
- id="_123534648"
- class="fil1 str3"
- points="740.129,3147.08 746.165,3142.23 758.438,3165.34 747.17,3171.57 716.781,3172.24 682.735,3186.74 679.56,3174.67 696.474,3167.28 689.669,3145.17 705.885,3139.88 721.496,3134.58"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123523368"
- class="fil1 str3"
- points="698.859,3199.44 690.487,3195.16 695.955,3185.29 702.946,3181.16 709.416,3181.17 712.578,3182.96 718.244,3182.88"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g><polygon
- id="_123534504"
- class="fil1 str3"
- points="884.915,3002.74 899.642,2983.76 895.324,2977.5 893.857,2968.57 907.1,2958.94 897.939,2952.53 888.946,2960.18 891.64,2947.39 903.078,2944.58 897.85,2933.28 901.271,2931.98 912.046,2929.51 932.585,2954.49 948.506,2937.81 953.263,2942.05 960.302,2967.6 940.789,2980.38 953.702,3005.8 948.982,3020.96 944.296,3021.34 939.611,3021.72 937.467,3012.8 912.643,3018.12 909.511,3034.7 896.616,3017.94"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123507432"
- class="fil1 str3"
- points="881.153,3045.86 882.919,3021.73 896.616,3017.94 909.511,3034.7 902.779,3041.84"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123526176"
- class="fil1 str3"
- points="879.859,3079.01 870.455,3079.01 854.518,3060.99 870.802,3027.7 861.091,3005.43 877.978,3004.55 884.915,3002.74 896.616,3017.94 882.919,3021.73 881.153,3045.86 902.779,3041.84 904.137,3048.14 902.393,3048.07 898.93,3049.38 886.262,3054.78 887.038,3072.34 879.921,3068.99"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123517008"
- class="fil1 str3"
- points="904.137,3048.14 907.376,3064.45 899.895,3076.46 887.038,3072.34 886.262,3054.78 902.393,3048.07"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123522240"
- class="fil1 str3"
- points="858.708,3100.04 848.491,3106.32 841.873,3101.98 837.603,3074.7 854.518,3060.99 870.455,3079.01 879.859,3079.01 879.921,3068.99 887.038,3072.34 899.895,3076.46 894.369,3085.33 908.247,3098.19 898.719,3104.53 900.62,3109.05 897.135,3114.01 883.071,3101.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123533688"
- class="fil1 str3"
- points="877.758,3148.68 875.629,3136.95 870.838,3144.55 856.642,3144.36 846.544,3137.47 848.491,3106.32 858.708,3100.04 883.071,3101.57 897.214,3113.9 900.62,3109.05 898.719,3104.53 908.247,3098.19 915.611,3095.34 912.308,3103.34 913.525,3111.1 907.83,3112.67 905.564,3119.68 897.779,3130.24 886.92,3126.88 888.623,3139.49"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123511968"
- class="fil1 str3"
- points="849.435,3019.93 855.754,3005.71 861.091,3005.43 870.802,3027.7 854.518,3060.99 837.603,3074.7 817.593,3068.81 805.34,3033.51 820.562,3019.72 832.665,3023.47 836.018,3002.14"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123508776"
- class="fil1 str3"
- points="820.562,3019.72 810.923,3002.5 809.7,2988.07 817.6,2977.44 835.253,2980.06 854.536,2977.82 865.162,2976.12 875.258,2971.8 895.324,2977.5 899.642,2983.76 884.915,3002.74 877.978,3004.55 861.091,3005.43 855.754,3005.71 849.435,3019.93 836.018,3002.14 832.665,3023.47"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123521688"
- class="fil1 str3"
- points="769.732,3108.66 763.162,3123.91 775.391,3145.56 769.358,3159.3 758.438,3165.34 746.165,3142.23 740.129,3147.08 721.496,3134.58 733.07,3109.35 749.847,3107.82 764.694,3095.01"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123516120"
- class="fil1 str3"
- points="775.391,3145.56 763.162,3123.91 769.732,3108.66 784.878,3091.29 796.998,3091.32 799.204,3124.95 812.242,3146.82 812.282,3156.77 782.761,3193.85 773.2,3193.11 786.207,3176.04 780.156,3172.55 773.188,3178.62 768.431,3178.57 769.358,3159.3"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><g
- id="g412">
- <polygon
- id="_123517416"
- class="fil1 str3"
- points="623.04,3214.18 632.594,3211.71 629.263,3219.37 624.842,3220.55 619.862,3223.33 614.304,3221.84 610.188,3219.05 615.656,3212.66"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532920"
- class="fil1 str3"
- points="565.296,3180.45 564.876,3196.36 560.113,3201 542.296,3197.89 532.525,3184.98 534.937,3173.17 546.22,3172.67 555.331,3177.38 559.508,3141.76 584.629,3141.3 603.544,3121.5 613.217,3129.19 641.986,3114.91 658.085,3122.45 660.241,3126.33 689.379,3118.68 698.98,3116.63 705.885,3139.88 689.669,3145.17 696.474,3167.28 679.56,3174.67 682.64,3186.87 679.897,3188.04 661.696,3189.71 664.258,3199.07 657.776,3204.03 645.171,3201.29 629.122,3204.72 621.295,3199.14 609.151,3197.57 600.829,3206.79 573.539,3199.61 575.723,3183.32 570.936,3175.91"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g><polygon
- id="_123523296"
- class="fil1 str3"
- points="660.241,3126.33 658.085,3122.45 656.979,3088.1 671.961,3082.95 680.911,3089.48 688.637,3084.75 698.423,3091.03 689.379,3118.68"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123536448"
- class="fil1 str3"
- points="573.539,3199.61 600.829,3206.79 599.173,3208.63 599.17,3215.85 586.153,3226.97 560.976,3226.77 540.143,3235.42 533.188,3226.63 539.698,3219.29 567.487,3209.5 573.125,3202.7"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123518016"
- class="fil1 str3"
- points="810.124,3085.66 817.593,3068.81 837.603,3074.7 841.873,3101.98 848.491,3106.32 846.544,3137.47 819.64,3146.92 814.402,3141.68 812.242,3146.82 799.204,3124.95 796.998,3091.32 800.464,3082.68"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123512016"
- class="fil1 str3"
- points="824.938,3124.81 821.936,3114.13 831.717,3104.2 840.541,3112.3 836.791,3124.94"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123524088"
- class="fil1 str3"
- points="768.943,2992.27 780.117,2997.59 782.852,3008.01 789.333,3006.74 791.961,3026.01 763.621,3035.14 757.993,3028.74 746.382,3027.62 725.235,2983.37 752.417,2988.06 758.077,3000.59"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123531648"
- class="fil1 str3"
- points="764.406,3095.3 764.804,3083.62 756.144,3083.62 738.43,3052.22 746.382,3027.62 757.993,3028.74 763.621,3035.14 791.961,3026.01 789.333,3006.74 810.923,3002.5 820.562,3019.72 805.34,3033.51 817.593,3068.81 810.124,3085.66 800.464,3082.68 796.998,3091.32 784.878,3091.29 769.732,3108.66"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123522096"
- class="fil1 str3"
- points="674.926,3063.09 671.961,3082.95 680.911,3089.48 688.637,3084.75 698.423,3091.03 689.379,3118.68 698.98,3116.63 705.885,3139.88 721.496,3134.58 733.07,3109.35 749.847,3107.82 764.694,3095.01 764.804,3083.62 756.144,3083.62 738.43,3052.22 733.378,3067.85 709.461,3075.66 684.832,3062.04"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123516336"
- class="fil1 str3"
- points="706.523,2980.15 725.235,2983.37 746.382,3027.62 733.378,3067.85 709.461,3075.66 684.832,3062.04 681.624,3042.72 671.403,3038.58 672.733,3024.74 696.041,3021.54 707.161,2996.65 701.625,2987.16"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123535080"
- class="fil1 str3"
- points="912.643,3018.12 937.467,3012.8 939.611,3021.72 946.113,3044.96 954.725,3053.64 934.185,3063.66 909.511,3034.7"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><g
- id="g506">
- <polygon
- id="_123531816"
- class="fil1 str3"
- points="902.779,3041.84 909.511,3034.7 934.185,3063.66 934.155,3082.53 954.687,3102.9 951.609,3106.69 927.23,3107.33 913.525,3111.1 912.308,3103.34 915.611,3095.34 908.247,3098.19 894.369,3085.33 907.376,3064.45"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513144"
- class="fil1 str3"
- points="940.911,3113.82 938.458,3118.35 935.188,3121.94 924.874,3122.62 923.249,3119.87 922.573,3118.73 920.359,3116.23 925.18,3112.1 932.084,3112.1 935.15,3113.47"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g><g
- id="g510">
- <polygon
- id="_123509616"
- class="fil1 str3"
- points="990.8,3114.45 978.112,3098.68 974.135,3083.96 958.129,3085.77 957.765,3099.11 954.687,3102.9 934.155,3082.53 934.185,3063.66 954.725,3053.64 946.113,3044.96 973.294,3035.35 986.764,3039.1 996.127,3022.44 1003.05,3016.89 1000.81,3040.62 1019.02,3060.57 1021.59,3101.45 1015.33,3088.55 1011.12,3091.97 1015.81,3106.98 1011.54,3112.5 1003.29,3107.36 995.826,3115.4"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535224"
- class="fil1 str3"
- points="950.352,3129.15 950.309,3119.71 956.431,3114.27 958.424,3131.82 952.116,3132.8"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123512208"
- class="fil1 str3"
- points="976.76,3122.09 976.655,3125.74 971.522,3131.08 966.873,3127.16 965.935,3096.25 970.755,3094.72 972.868,3106.03 978.467,3112.69 978.256,3120.46"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525456"
- class="fil1 str3"
- points="1014.49,3131.51 1001.6,3129.76 1001.14,3125.24 1002.39,3118.84 1008.15,3117.26 1011.56,3114.27 1018.4,3119.64 1020.93,3124.87"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g><polygon
- id="_123510648"
- class="fil1 str3"
- points="1003.05,3016.89 996.127,3022.44 986.764,3039.1 973.294,3035.35 946.113,3044.96 939.611,3021.72 948.982,3020.96 953.702,3005.8 984.173,2994.61 997.376,3004.42 1003.51,3014.31"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123536400"
- class="fil1 str3"
- points="997.134,2966.83 995.162,2980.61 984.173,2994.61 953.702,3005.8 940.91,2980.41 940.789,2980.38 960.302,2967.6 961.777,2966.76 968.842,2975.59"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><polygon
- id="_123520104"
- class="fil1 str3"
- points="1019.16,2958.78 1019.93,2972.61 1019.38,2988.4 1027.21,2989.3 1027.38,2997.33 1022.13,3008.78 1003.51,3014.31 997.376,3004.42 984.173,2994.61 995.162,2980.61 997.134,2966.83 1005.74,2968.25"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /><g
- id="g519">
- <polygon
- id="_123530016"
- class="fil1 str3"
- points="1021.6,3101.47 1023.72,3105.84 1028.85,3103.79 1027.92,3091.22 1032.77,3088.93 1040.51,3093.28 1046.13,3090.82 1036.74,3074.18 1034.09,3063.59 1024.52,3050.67 1025.88,3042.53 1052.42,3068.69 1057.59,3080.2 1063.67,3079.72 1059.82,3066.67 1073.44,3067.02 1082.31,3078.1 1083.02,3067.23 1090.52,3067.5 1104.46,3054.96 1100.75,3043.55 1108.85,3028.24 1118.41,3009.43 1116.35,3006.32 1106.42,3004.64 1101.11,2986.67 1087.65,2984.09 1090.16,3032.79 1072.87,3037.18 1068.53,3020.71 1064.52,3005.48 1059.56,3004.96 1056.01,3009.5 1049.77,3009.87 1042.89,2990.54 1027.21,2989.3 1027.38,2997.33 1022.13,3008.78 1003.51,3014.31 1003.05,3016.89 1000.81,3040.62 1019.02,3060.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123530256"
- class="fil1 str3"
- points="1038.46,3103.96 1051.49,3097.33 1053.99,3108.34 1044.88,3110.23"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123504408"
- class="fil1 str3"
- points="1070.49,3094.88 1064.41,3098.07 1057.81,3094.22 1056.69,3091.36 1058.77,3084.39 1065.81,3084.3"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123510696"
- class="fil1 str3"
- points="1113.02,3078.37 1112.59,3085.47 1097.3,3082.93 1093.15,3076.16 1097.4,3070.49"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g><polygon
- id="_123520128"
- class="fil1 str3"
- points="1027.21,2989.3 1019.38,2988.4 1019.93,2972.61 1039.93,2968.24 1052.68,2979.68 1065.96,2972.56 1067.62,2958.58 1075.34,2962.21 1083.5,2966.13 1087.65,2984.09 1090.16,3032.79 1072.87,3037.18 1068.53,3020.71 1064.52,3005.48 1059.56,3004.96 1056.01,3009.5 1049.77,3009.87 1042.89,2990.54"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" /></g>
- <g
- id="_123534360">
- <polygon
- id="_123516696"
- class="fil1 str3"
- points="1087.23,2878.88 1088.75,2879.43 1092.02,2872.76 1109.54,2876.35 1116.53,2909.85 1105.6,2914.68 1108.26,2929.95 1095.53,2938.97 1097.12,2949.9 1075.34,2962.21 1067.62,2958.58 1063.31,2956.43 1061.07,2940.64 1047.42,2931.6 1046.81,2914.56 1054.6,2899.79 1038.47,2892.87 1043.9,2882.52 1056.41,2883.28 1052.01,2860.71 1046.16,2848.06 1049.87,2834.59 1071.79,2834.66 1084.66,2846.38 1072.93,2869.92 1081.16,2878.5 1083.28,2877.28 1086.11,2879.86"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515856"
- class="fil1 str3"
- points="1259.03,2990.59 1253.16,2929.55 1272.39,2939.79 1294.15,2939.26 1301.48,2954.11 1317.8,2956.53 1325.69,2975.93 1343.75,2985.16 1331.28,2997.15 1311.86,2986.69 1297.95,2995.24 1284.31,2984.34 1272.72,2984.97 1273.02,2995.68"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123523440"
- class="fil1 str3"
- points="1296.24,3030.21 1290.9,3038.94 1282.82,3039.19 1273.05,3040.6 1266.64,3037.07 1260.75,3041.02 1257.21,3044.35 1243.05,3009.83 1259.03,2990.59 1273.02,2995.68 1272.72,2984.97 1284.31,2984.34 1297.95,2995.24 1311.86,2986.69 1331.28,2997.15 1327.85,3000.45 1327.36,3010.63 1316.96,3017.51 1304.85,3009.58 1300.01,3013.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509904"
- class="fil1 str3"
- points="1121.08,2789.95 1110.2,2794.33 1100.89,2799.5 1092.94,2820.34 1071.79,2834.66 1084.66,2846.38 1072.93,2869.92 1081.16,2878.5 1083.28,2877.28 1086.11,2879.86 1087.23,2878.88 1088.75,2879.43 1092.02,2872.76 1109.54,2876.35 1116.53,2909.85 1105.6,2914.68 1108.26,2929.95 1095.53,2938.97 1097.12,2949.9 1075.34,2962.21 1083.5,2966.13 1087.65,2984.09 1101.11,2986.67 1106.42,3004.64 1116.35,3006.32 1126.37,2988.95 1133.84,2989.42 1136.96,2989.62 1149.08,3013.22 1153.89,3002.76 1153.84,2979.88 1173.72,2988.99 1200.32,2974.38 1208.36,2964.09 1208.17,2947.96 1224.52,2953.76 1236.81,2935.19 1253.16,2929.55 1246.24,2917.38 1220.55,2909.89 1212.85,2896.74 1220.88,2891.94 1206.37,2874.25 1211.5,2856.94 1227.47,2851 1217.28,2827.87 1201,2833.34 1172.94,2819.43 1172.87,2792.53 1152.65,2792.11 1152.39,2807.76 1137.23,2815.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123527976"
- class="fil1 str3"
- points="1197.95,3023.89 1195.62,3001.4 1173.72,2988.99 1200.32,2974.38 1208.36,2964.09 1208.17,2947.96 1224.52,2953.76 1236.81,2935.19 1253.16,2929.55 1259.03,2990.59 1243.05,3009.83 1257.21,3044.35 1253.67,3047.69 1244.57,3034.19 1220.98,3031.41"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g532">
- <polygon
- id="_123517608"
- class="fil1 str3"
- points="1118.41,3009.43 1116.35,3006.32 1126.37,2988.95 1136.96,2989.62 1149.08,3013.22 1169.32,3059.64 1165.21,3059.51 1151.75,3046.07 1143.89,3053.24 1133.83,3053.59 1127.53,3046.94 1120.87,3051.57 1104.46,3054.96 1100.75,3043.55"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513720"
- class="fil1 str3"
- points="1153.82,3088.51 1147.22,3084.67 1141.77,3080.94 1151.22,3073.1 1157.3,3082.72"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123514320"
- class="fil1 str3"
- points="1132.99,3063.75 1119.87,3073.81 1112.25,3067.04 1123.01,3055.72 1130.82,3055.78"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="g537">
- <polygon
- id="_123507000"
- class="fil1 str3"
- points="1153.84,2979.88 1173.72,2988.99 1195.62,3001.4 1197.95,3023.89 1192.37,3022.07 1180.78,3033.71 1181.12,3052.38 1176.95,3059.87 1169.32,3059.64 1149.08,3013.22 1153.89,3002.76"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123508464"
- class="fil1 str3"
- points="1185.85,3063.38 1189.95,3049.66 1197.23,3052.25 1197.23,3075.77 1191.15,3075.91"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524472"
- class="fil1 str3"
- points="1205.38,3108.12 1205.57,3100.48 1210.19,3095.95 1212.42,3096.12 1218.33,3101.66 1221.53,3104 1214.16,3108.49"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- </g>
- <g
- id="_123526296">
- <polygon
- id="_123509520"
- class="fil1 str3"
- points="1219.97,2777.33 1201.69,2779.99 1182.8,2768.68 1189.32,2758.7 1204.69,2759.97 1208.42,2752.94 1246.49,2753.13 1270.46,2767.5 1291.71,2758.78 1307.95,2762.12 1297.62,2774.74 1279.71,2774.33 1270.42,2793.3 1254.87,2794.64 1238.81,2822.65 1231.77,2808.35 1237.88,2796.5"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123533496"
- class="fil1 str3"
- points="1293.68,2828.91 1294.79,2845.43 1282.55,2849.31 1283.32,2862.94 1269.88,2875.84 1253.96,2871.46 1244.22,2843.51 1227.47,2851 1217.26,2827.83 1238.81,2822.65 1254.87,2794.64 1270.42,2793.3 1279.71,2774.33 1297.62,2774.74 1307.95,2762.12 1324.92,2765.61 1315.25,2780.49 1320.61,2795.04 1305.44,2795.13 1301.18,2801.77 1307.53,2813.31 1308.69,2823.23"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535896"
- class="fil1 str3"
- points="1294.15,2939.26 1272.39,2939.79 1253.16,2929.55 1246.24,2917.38 1220.55,2909.89 1212.85,2896.74 1220.88,2891.94 1206.37,2874.25 1211.5,2856.94 1227.47,2851 1244.22,2843.51 1253.96,2871.46 1269.88,2875.84 1276.05,2877.54 1319.61,2878.03 1328.43,2878.13 1334.25,2912.23 1321.59,2931.15 1312.5,2930.96 1305.41,2922.72 1300.2,2923.07"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123529944"
- class="fil1 str3"
- points="1458.49,2839.29 1466.02,2842.83 1450.69,2869.07 1448.29,2890.48 1427.77,2895.06 1389.32,2928.71 1381.94,2948.43 1343.75,2985.16 1325.69,2975.93 1317.8,2956.53 1301.48,2954.11 1294.15,2939.26 1300.2,2923.07 1305.41,2922.72 1312.5,2930.96 1321.59,2931.15 1334.25,2912.23 1328.43,2878.13 1319.61,2878.03 1321.43,2869.57 1340.2,2852.83 1393.11,2835.31 1402.66,2820.19 1387.65,2808.8 1385.47,2800.02 1400.24,2786.25 1431.65,2811.94 1444.27,2805.19"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123520008"
- class="fil1 str3"
- points="1322.54,2826.93 1340.2,2852.83 1321.43,2869.57 1319.61,2878.03 1276.05,2877.54 1269.88,2875.84 1283.32,2862.94 1282.55,2849.31 1294.79,2845.43 1293.68,2828.91 1308.69,2823.23"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509136"
- class="fil1 str3"
- points="1301.18,2801.77 1305.44,2795.13 1320.61,2795.04 1315.25,2780.49 1324.92,2765.61 1374.74,2761.27 1393.39,2775.9 1400.24,2786.25 1385.47,2800.02 1387.65,2808.8 1402.66,2820.19 1393.11,2835.31 1340.2,2852.83 1322.54,2826.93 1308.69,2823.23 1307.53,2813.31"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526776"
- class="fil1 str3"
- points="1489.01,2827.6 1477.85,2809.89 1487.59,2798.01 1480.11,2783.99 1467.91,2782.79 1463.85,2796.39 1444.23,2796.23 1444.27,2805.19 1431.65,2811.94 1400.24,2786.25 1393.39,2775.9 1374.74,2761.27 1400.18,2729.79 1407.78,2710.97 1422.05,2721.86 1459.56,2721.64 1464.4,2704.6 1495.02,2705.98 1525.89,2696.09 1524.42,2706.79 1522.66,2719.65 1508.5,2719.29 1503.73,2731.24 1512.04,2737.16 1495.67,2800.73 1511.7,2811.87"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535344"
- class="fil1 str3"
- points="1463.85,2796.39 1467.91,2782.79 1480.11,2783.99 1487.59,2798.01 1477.85,2809.89 1489.01,2827.6 1485.65,2829.93 1469.78,2836.4 1466.02,2842.83 1458.49,2839.29 1444.27,2805.19 1444.23,2796.23"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123529704"
- class="fil1 str3"
- points="1511.7,2811.87 1495.67,2800.73 1512.04,2737.16 1503.73,2731.24 1508.5,2719.29 1522.66,2719.65 1524.42,2706.79 1562.21,2744.91 1530.07,2799.12"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123534144"
- class="fil1 str3"
- points="1525.89,2696.09 1544.95,2664.44 1557.1,2660.33 1569.25,2656.22 1574.91,2640.11 1664.71,2591.89 1661.79,2594.86 1649.79,2628.83 1619.63,2656.59 1599.34,2699.18 1573.78,2717.29 1568.01,2735.14 1562.21,2744.91 1524.42,2706.79"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_123514032">
- <polygon
- id="_123504168"
- class="fil1 str3"
- points="863.575,2199.98 866.13,2130.15 841.823,2119.67 829.36,2119.6 820.603,2119.55 809.876,2137.83 785.329,2135.35 766.274,2157.05 791.702,2189.18 778.643,2194.57 808.231,2208.56 814.137,2204.71 840.551,2194.96"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123523944"
- class="fil1 str3"
- points="866.13,2130.15 841.823,2119.67 829.36,2119.6 826.575,2068.38 852.991,2041.67 902.573,2102.34 890.26,2104.44"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123516456"
- class="fil1 str3"
- points="799.741,1967.2 808.386,1966.47 809.544,1971.34 824.378,1977.18 840.913,2026.89 852.991,2041.67 826.575,2068.38 763.028,1992.38 787.295,1972.58"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526464"
- class="fil1 str3"
- points="804.533,1950.27 808.386,1966.47 799.741,1967.2 787.295,1972.58 763.028,1992.38 743.073,1975.99 724.913,1951.4 738.721,1941 734.808,1934.22 747.243,1934.05 756.618,1942.5 764.428,1938.25 755.457,1926.07 763.583,1910.81 784.212,1906.8 793.686,1944.63"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123508800"
- class="fil1 str3"
- points="785.329,2135.35 772.567,2116.37 776.902,2090.23 766.881,2078.38 758.176,2083.62 748.127,2072.18 727.288,2079.8 718.147,2081.01 722.083,2088.15 714.245,2114.3 741.564,2149.62 766.274,2157.05"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123511488"
- class="fil1 str3"
- points="809.326,2085.33 826.575,2068.38 829.36,2119.6 820.603,2119.55 809.876,2137.83 785.329,2135.35 772.567,2116.37 776.902,2090.23 766.881,2078.38 784.67,2066.18"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123516024"
- class="fil1 str3"
- points="766.881,2078.38 784.67,2066.18 734.373,2027.64 725.955,2036.66 708.601,2037.06 697.788,2028.25 683.972,2037.18 693.091,2053.3 701.553,2050.89 718.147,2081.01 727.288,2079.8 748.127,2072.18 758.176,2083.62"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <path
- id="_123536280"
- class="fil1 str3"
- d="m 784.67,2066.18 -36.0911,-27.6541 -14.2054,-10.8843 -36.9741,-29.7283 -10.6797,8.2832 -6.08098,-9.045 -23.2158,11.3209 -32.8707,-24.5459 -6.25511,8.4744 -14.3502,-39.4746 c 0.33031,-0.4948 0.4047,-0.04 0.73586,-0.5349 l 13.1235,0.077 6.00146,7.2284 6.6276,-0.1485 5.88005,-8.5924 28.2198,-1.2765 19.8446,-0.898 0.28243,-12.2868 0.77491,-33.7006 8.03378,-5.7267 11.8875,11.3437 9.53827,-1.6604 19.9116,27.4683 3.91329,6.7877 -13.8081,10.3944 18.1603,24.5907 19.9543,16.3942 63.5477,75.9955 -17.2491,16.9488 -24.6568,-19.1504 z"
- inkscape:connector-curvature="0"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_123507816">
- <polygon
- id="_123534168"
- class="fil1 str3"
- points="324.87,2855.63 331.73,2861.06 333.992,2853.29 323.011,2841.9 318.655,2817.98 326.984,2813.34 331.62,2820.18 342.792,2835.93 354.009,2835.06 367.103,2825.2 368.196,2851.22 359.619,2859.62 346.146,2848.09 347.305,2880.9 337.459,2880.75"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526272"
- class="fil1 str3"
- points="346.146,2848.09 359.619,2859.62 368.196,2851.22 389.267,2836 400.797,2846.4 411.303,2875.96 438.309,2878.57 422.602,2898.76 386.162,2924.3 378.67,2921.73 369.378,2899.03 354.164,2895.41 347.305,2880.9"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123530592"
- class="fil1 str3"
- points="312.318,2914.66 311.779,2901.47 309.348,2892.27 311.198,2886.84 314.431,2884.63 316.01,2879.55 300.748,2870.3 299.889,2864.62 313.266,2861.92 313.722,2854.08 307.199,2847.1 311.04,2843.08 318.389,2842.59 324.929,2855.67 337.459,2880.75 347.305,2880.9 354.164,2895.41 369.378,2899.03 378.67,2921.73 345.974,2930.51 345.957,2960.27 322.638,2955.32 317.118,2940.85 317.44,2922.78"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123505704"
- class="fil1 str3"
- points="389.007,2973.67 395.432,2973.99 397.616,2976.78 408.297,2967.11 415.13,2960.93 428.886,2948.15 462.271,2934.8 481.871,2934.36 460.365,2914.78 443.893,2886.79 438.309,2878.57 422.602,2898.76 386.162,2924.3 384.558,2947.57 383.336,2967.69 390.139,2970.75"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526536"
- class="fil1 str3"
- points="383.336,2967.69 372.159,2973.68 365.579,2965.56 345.957,2960.27 345.974,2930.51 378.67,2921.73 386.162,2924.3 384.558,2947.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123529968"
- class="fil1 str3"
- points="423.852,3026.39 428.807,2998.42 436.485,2995.33 452.374,3008.49 444.388,3022.57"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123528624"
- class="fil1 str3"
- points="448.827,2960.15 421.529,2983.79 408.297,2967.11 415.13,2960.93 428.886,2948.15 462.271,2934.8 481.871,2934.36 454.881,2963.15"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123510528"
- class="fil1 str3"
- points="452.374,3008.49 436.485,2995.33 448.077,2975.05 454.881,2963.15 481.871,2934.36 477.682,2963.89 466.052,2984.39"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513024"
- class="fil1 str3"
- points="375.283,2987.85 383.218,2988.61 389.007,2973.67 395.432,2973.99 397.616,2976.78 408.297,2967.11 421.529,2983.79 448.827,2960.15 454.881,2963.15 448.077,2975.05 436.485,2995.33 428.807,2998.42 410.045,3005.96 405.308,3001.37 398.968,3001.57 383.919,3002.04 367.22,3006.12 367.985,2998.1"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123503976"
- class="fil1 str3"
- points="425.606,3027.77 423.852,3026.39 444.388,3022.57 477.682,2963.89 481.871,2934.36 487.537,2968.46 467.627,3017.66 467.929,3021.23 453.356,3036.83 459.955,3055.35 441.956,3058.82 431.993,3049.37 423.925,3048.85"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515400"
- class="fil1 str3"
- points="502.567,3012.31 500.55,3048.8 497.701,3048.44 494.459,3053.5 485.448,3046.64 482.636,3049.08 479.824,3051.51 459.955,3055.35 453.356,3036.83 467.929,3021.23 474.024,3029.43"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535680"
- class="fil1 str3"
- points="498.364,2979.53 507.12,2974.62 514.309,2979.86 511.234,2985.66 511.389,2997.58 516.83,3003.39 502.567,3012.31 474.024,3029.43 467.929,3021.23 467.627,3017.66 487.537,2968.46"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123523896"
- class="fil1 str3"
- points="537.879,3054.52 500.55,3048.8 502.567,3012.31 516.83,3003.39 539.728,3006.93 540.445,3011.49 543.097,3028.35"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123505560"
- class="fil1 str3"
- points="539.728,3006.93 516.83,3003.39 511.389,2997.58 511.234,2985.66 514.309,2979.86 525.78,2970.98 545.95,2975.66 536.584,2994.16"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123530352"
- class="fil1 str3"
- points="581.261,2996.68 540.445,3011.49 539.728,3006.93 536.584,2994.16 545.95,2975.66 559.567,2951.02 568.818,2978.35 579.098,2991.28"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123531936"
- class="fil1 str3"
- points="598.175,2940.77 607.44,2975.16 601.749,2991.75 580.517,2994.82 579.098,2991.28 568.818,2978.35 559.567,2951.02 580.321,2950.9 594.498,2938.88"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123509232"
- class="fil1 str3"
- points="525.801,2959.64 525.78,2970.98 514.309,2979.86 507.12,2974.62 498.364,2979.53 487.537,2968.46 481.871,2934.36 495.842,2944.72 501.356,2959.62"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polyline
- id="_123534192"
- class="fil1 str3"
- points="481.871,2934.36 495.842,2944.72 501.356,2959.62 525.801,2959.64 525.78,2970.98 545.95,2975.66 559.567,2951.02 547.399,2929.21 539.728,2915.46 505.249,2905.36 503.288,2893.16 512.488,2879.23 505.417,2869 478.834,2876.05 464.873,2873.43 459.805,2872.48 443.893,2886.79 460.365,2914.78 481.871,2934.36"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123505536"
- class="fil1 str3"
- points="594.498,2938.88 580.321,2950.9 559.567,2951.02 547.399,2929.21 539.728,2915.46 539.354,2887.19 539.532,2871.55 523.952,2883.3 516.785,2885.45 512.488,2879.23 505.417,2869 500.239,2862.47 523.876,2855.3 548.953,2862.17 550.978,2835.08 566.84,2840.65 578.371,2854.16 597.864,2850.36 596.51,2860.89 604.381,2859.88 604.271,2867.68 616.528,2875.01 608.333,2894.11 593.691,2897.09 592.29,2911.08 600.574,2920.76 593.733,2926.89 594.133,2935.82"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123504960"
- class="fil1 str3"
- points="539.602,2887.22 539.728,2915.46 505.249,2905.36 503.288,2893.16 512.488,2879.23 516.785,2885.45 523.952,2883.3 539.532,2871.55"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g583">
- <polygon
- id="_123513408"
- class="fil1 str3"
- points="564.339,3076.87 569.635,3070.42 565.592,3063.68 564.025,3061.07 540.807,3079.01 537.879,3054.52 543.097,3028.35 540.445,3011.49 581.261,2996.68 580.517,2994.82 601.749,2991.75 626.324,3000.88 643.104,2996.27 644.548,3010.6 652.187,3015.24 656.501,3026.63 672.733,3024.74 671.403,3038.58 681.624,3042.72 684.832,3062.04 674.926,3063.09 671.961,3082.95 656.979,3088.1 658.085,3122.45 641.986,3114.91 613.217,3129.19 603.544,3121.5 584.629,3141.3 573.772,3141.5 559.508,3141.76 560.044,3137.2 544.117,3127.6 543.361,3123.6 540.111,3106.4"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123511896"
- class="fil1 str3"
- points="548.677,3145.58 552.295,3137.44 545.34,3134.91 537.701,3142.6 539.905,3147.1"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123514008"
- class="fil1 str3"
- points="545.35,3163.5 538.981,3167.25 531.315,3170.77 527.284,3159.11 537.093,3150.98"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123508632"
- class="fil1 str3"
- points="652.187,3015.24 644.548,3010.6 643.104,2996.27 626.324,3000.88 601.749,2991.75 607.44,2975.16 598.175,2940.77 619.967,2951.96 629.615,2947.14 639.263,2942.32 644.229,2946.13 674.917,2969.69 706.523,2980.15 701.625,2987.16 707.161,2996.65 696.041,3021.54 672.733,3024.74 656.501,3026.63"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g589">
- <polygon
- id="_123526920"
- class="fil1 str3"
- points="299.677,3000.61 295.944,2995.66 294.427,2993.64 291.924,2974.3 295.529,2971.31 308.358,2990.62 308.358,2996.39 308.358,3000.61"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526944"
- class="fil1 str3"
- points="329.031,2986.39 329.231,2987.11 336.138,2993.66 333.051,3002.93 331.797,3006.69 324.877,3005.19 313.092,2990.17 313.193,2977.77 317.666,2973.92 328.759,2985.41"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513840"
- class="fil1 str3"
- points="304.018,2973.25 297.507,2966.44 294.861,2963.67 293.66,2953.01 303.342,2946.12 310.095,2951.09 310.596,2959.87 310.963,2966.3"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123532992"
- class="fil1 str3"
- points="372.159,2973.68 363.077,2978.55 358.094,3000.15 346.88,3001.15 342.51,2982.42 328.157,2969.79 322.638,2955.32 345.957,2960.27 365.579,2965.56"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g595">
- <polygon
- id="_123525264"
- class="fil1 str3"
- points="422.098,3025.01 413.217,3030.73 402.264,3020.74 405.489,3016.74 412.964,3017.12 413.36,3009.16 410.045,3005.96 428.807,2998.42 423.852,3026.39"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123517440"
- class="fil1 str3"
- points="350.692,3028.72 348.107,3033.41 343.299,3033.56 341.346,3033.62 339.176,3031.45 339.236,3023.38 354.56,3013.88 356.538,3020.59 353.161,3025.29"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525072"
- class="fil1 str3"
- points="374.131,3056.09 363.917,3058.38 357.435,3052.51 354.802,3050.13 355.915,3044.14 358.768,3039.89 372.356,3044.29 373.466,3050.56 373.85,3053.76"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524640"
- class="fil1 str3"
- points="392.334,3063.18 394.302,3052.47 384.982,3044.8 376.938,3026.67 378.674,3014.08 383.075,3010.35 393.191,3016.49 394.3,3021.89 404.193,3036.03 411.428,3046.36 409.442,3055.33 408.908,3061.53 408.692,3064.04 401.4,3071.3 391.758,3069.68"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123507528"
- class="fil1 str3"
- points="540.807,3079.01 528.397,3088.6 505.365,3095.39 495.474,3086.45 479.701,3086.82 479.662,3077.15 494.459,3053.5 497.701,3048.44 500.55,3048.8 537.879,3054.52"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <g
- id="g602">
- <polygon
- id="_123522600"
- class="fil1 str3"
- points="477.802,3177.79 481.074,3175.09 482.403,3174 493.264,3175.66 500.932,3186.84 497.368,3191.84 489.077,3190.17 483.015,3188.96"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524280"
- class="fil1 str3"
- points="457.845,3188.2 453.066,3188.09 450.891,3177.35 453.876,3174.62 455.089,3173.51 455.969,3173.02 459.398,3170.09 466.353,3174.36 465.774,3182.06 464.38,3188.36"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123527688"
- class="fil1 str3"
- points="476.853,3201.49 480.242,3201.72 479.663,3210.73 467.389,3219.36 460.618,3216.42 455.666,3214.27 468.513,3200.93"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535872"
- class="fil1 str3"
- points="524.275,3148.27 539.638,3131.74 536,3123.5 531.026,3112.24 546.41,3090.76 488.937,3104.5 479.816,3098.14 475.527,3102.43 475.468,3108.33 469.524,3113.58 475.468,3120.93 476.26,3125.65 476.587,3127.59 459.535,3140.79 456.601,3155.12 464.774,3167.46 480.217,3168.39 490.262,3162.06 505.873,3168.41 518.462,3166.46 523.893,3158.89 524.517,3158.02 524.447,3155.21"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="g608">
- <polygon
- id="_123524736"
- class="fil1 str3"
- points="280.679,3019.82 281.073,3016.86 286.414,3013.45 291.366,3023.26 288.896,3028.74 287.09,3032.75 279.711,3027.11"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123529536"
- class="fil1 str3"
- points="297.507,3047.09 294.421,3043.07 293.167,3041.44 295.831,3034.24 302.474,3033.43 308.728,3042.37 307.512,3044.59 306.622,3046.22"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123508944"
- class="fil1 str3"
- points="315.303,3039.7 312.217,3035.38 310.963,3033.62 312.325,3020.77 319.402,3019.96 321.38,3034.06 319.518,3034.69 318.157,3035.15"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123530784"
- class="fil1 str3"
- points="304.387,3084.07 314.704,3083.78 322.248,3083.57 321.801,3090.79 321.06,3096.34 320.76,3098.6 315.034,3100.47 308.792,3103.12 288.826,3096.17 291.924,3078.11 298.568,3077.3"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123528264"
- class="fil1 str3"
- points="317.436,3078.47 314.869,3081.4 309.4,3080.19 306.19,3077.96 304.886,3077.06 308.172,3073.76 308.791,3071.41 314.495,3065.51 322.007,3064.27 320.946,3074.45"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123522024"
- class="fil1 str3"
- points="368.657,3186.46 365.666,3190.73 359.476,3190.18 356.961,3189.96 353.509,3179.88 358.325,3174.39 362.675,3167.4 368.594,3173.08 368.63,3180.81"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123521520"
- class="fil1 str3"
- points="390.822,3105.15 388.961,3107.86 377.541,3110.77 370.807,3120.65 368.071,3124.66 360.175,3121.75 362.605,3104.94 365.219,3094.43 383.208,3094.24 393.368,3101.45"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123515040"
- class="fil1 str3"
- points="381.989,3117.07 384.751,3114.41 404.653,3124.03 402.716,3129.45 388.673,3129.27 378.405,3129.14 375.192,3123.61"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123530424"
- class="fil1 str3"
- points="410.742,3098.14 415.135,3095.74 420.713,3099.27 415.303,3112.51 406.526,3113.58 400.107,3114.37 399.933,3104.07"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123528648"
- class="fil1 str3"
- points="451.221,3063.78 479.133,3056.88 484.149,3064.9 464.092,3087.83 449.426,3104.6 439.897,3105.42 435.108,3099.99 433.162,3097.79 434.794,3088.66 423.633,3085.46 421.211,3076.19 428.723,3061.89 440.744,3064.9"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123525576"
- class="fil1 str3"
- points="459.76,3118.71 459.171,3118.43 453.445,3125.11 447.928,3125.11 445.687,3125.1 440.908,3120.02 454.189,3104.07 463.314,3103.56 468.892,3107.09 460.565,3119.08"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123516984"
- class="fil1 str3"
- points="335.282,3215.49 330.944,3218.96 329.182,3220.36 321.389,3216.37 331.857,3205.19 341.683,3205.66 342.471,3208.36 343.048,3210.35"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513432"
- class="fil1 str3"
- points="341.406,3096.35 351.956,3095.54 352.133,3102.75 351.092,3107.21 350.33,3110.47 349.762,3116.42 348.089,3119.2 347.41,3120.33 341.16,3124.66 328.055,3125.23 322.248,3117.89 330.061,3110.07 331.066,3108.12"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123519768"
- class="fil1 str3"
- points="333.45,3074.53 333.593,3068.55 339.369,3065.14 350.192,3087.44 343.578,3090.98 338.742,3093.56 333.099,3089.22"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <polygon
- id="_123530832"
- class="fil1 str3"
- points="501.356,2959.62 495.842,2944.72 481.871,2934.36 460.365,2914.78 443.893,2886.79 459.805,2872.48 478.834,2876.05 505.417,2869 512.488,2879.23 503.288,2893.16 505.249,2905.36 539.728,2915.46 559.567,2951.02 545.95,2975.66 525.78,2970.98 525.801,2959.64"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- id="_123507288">
- <polygon
- id="_123513936"
- class="fil1 str3"
- points="591.872,2574.72 585.27,2557.09 568.262,2555.04 556.397,2572.87 540.927,2561.29 540.911,2547.49 527.031,2540.67 536.267,2525.2 554.459,2523.43 555.341,2497.17 570.936,2489.64 570.796,2459.34 599.722,2459.44 603.154,2494.78 614.514,2518.96 643.074,2517.05 649.307,2523.61 639.687,2565.36 637.105,2576.57 614.401,2578.71 606.468,2562.92"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123533784"
- class="fil1 str3"
- points="614.514,2518.96 603.154,2494.78 599.722,2459.44 631.338,2442.18 656.435,2491.38 653.002,2497.98 643.074,2517.05"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123514536"
- class="fil1 str3"
- points="723.014,2502.83 720.436,2518.72 695.882,2527.59 687.356,2530.67 653.002,2497.98 656.435,2491.38 631.338,2442.18 645.754,2416.75 673.61,2427.63 677.504,2417.78 698.495,2420.78 724.382,2399.46 735.962,2406.83 738.921,2431.19 750.321,2435.93 750.251,2464.15 771.722,2477 771.52,2488.1 747.347,2513.38"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123510840"
- class="fil1 str3"
- points="840.872,2514.12 847.065,2520.15 853.961,2546.7 839.501,2569.81 835.201,2562.17 821.734,2581.68 807.25,2584.4 794.291,2570.77 788.423,2534.92 747.347,2513.38 771.52,2488.1 771.722,2477 782.995,2474.88 790.749,2497.03 811.397,2501.12 824.279,2496.5"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123517848"
- class="fil1 str3"
- points="710.537,2565.34 695.882,2527.59 720.436,2518.72 723.014,2502.83 747.347,2513.38 788.423,2534.92 794.291,2570.77 807.25,2584.4 805.805,2595.64 769.166,2612.12 751.885,2619.9 738.141,2626.08 721.349,2606.48"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123530304"
- class="fil1 str3"
- points="566.931,2641.39 537.311,2638.46 540.705,2620.89 553.841,2625.16 562.553,2594.72 556.397,2572.87 568.262,2555.04 585.27,2557.09 591.872,2574.72 606.468,2562.92 614.401,2578.71 637.105,2576.57 639.687,2565.36 676.478,2598.66 676.077,2607.38 648.661,2610.81 617.198,2633.15"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123504912"
- class="fil1 str3"
- points="676.077,2607.38 648.661,2610.81 617.198,2633.15 617.503,2653.46 637.944,2657.21 664.57,2649.05 660.545,2678.27 654.843,2683.29 667.241,2697.91 698.41,2695.83 695.523,2650.84 701.463,2644.8 707.613,2610.23 721.349,2606.48 710.537,2565.34 695.882,2527.59 687.049,2530.38 653.114,2498.28 643.074,2517.05 649.307,2523.61 639.687,2565.36 676.478,2598.66"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123511992"
- class="fil1 str3"
- points="822.15,2642.71 805.822,2642.71 769.166,2612.12 805.805,2595.64 807.25,2584.4 821.734,2581.68 838.747,2602.47"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123522552"
- class="fil1 str3"
- points="518.322,2771.13 508.209,2746.41 507.308,2732.96 516.578,2725.93 541.029,2722.35 543.685,2709.22 524.204,2695.59 525.852,2690.51 533.606,2666.6 547.471,2654.9 536.228,2644.07 537.311,2638.46 566.931,2641.39 567.169,2661.7 572.387,2667.98 594.405,2669.8 594.255,2689.47 611.14,2695.29 611.147,2708.9 602.207,2715.02 619.854,2744.58 612.354,2753.85 617.233,2755.59 619.507,2759.32 621.89,2774.45 617.648,2795.32 581.119,2801.61 571.268,2793.24 556.244,2777.91 547.8,2787.77 521.353,2778.54"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123506472"
- class="fil1 str3"
- points="572.387,2667.98 567.169,2661.7 566.931,2641.39 617.198,2633.15 617.503,2653.46 637.944,2657.21 664.57,2649.05 660.545,2678.27 654.843,2683.29 636.621,2699.36 617.095,2697.35 611.14,2695.29 594.255,2689.47 594.405,2669.8"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123512088"
- class="fil1 str3"
- points="698.41,2695.83 695.523,2650.84 701.463,2644.8 707.613,2610.23 721.349,2606.48 738.141,2626.08 751.885,2619.9 749.901,2671.12 714.477,2731.91 696.209,2727.71 696.241,2726.21 695.979,2715.23 682.835,2712.22 677.122,2716.99 667.241,2697.91"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526224"
- class="fil1 str3"
- points="797.908,2699.55 830.653,2712.62 835.508,2704.87 845.078,2706.71 847.842,2693.94 857.886,2690.29 876.373,2705.54 875.177,2729.06 866.502,2724.03 861.709,2721.37 824.038,2734.83 806.005,2740.93 780.523,2732.7 777.388,2746.91 752.049,2754.13 747.2,2758.99 734.763,2771.44 722.863,2767.55 714.477,2731.91 749.901,2671.12 768.508,2687.12 789.468,2688.16"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532536"
- class="fil1 str3"
- points="808.832,2775.62 833.758,2785.32 839.203,2773 851.034,2784.83 868.71,2776.92 866.502,2724.03 861.709,2721.37 824.038,2734.83 806.005,2740.93 780.523,2732.7 777.388,2746.91 752.049,2754.13 747.2,2758.99 752.398,2767.95 746.03,2779.43 754.751,2786.74 775.339,2794.5 780.133,2798.12 804.467,2779.24"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123534624"
- class="fil1 str3"
- points="612.354,2753.85 619.854,2744.58 602.207,2715.02 611.147,2708.9 611.14,2695.29 617.095,2697.35 636.621,2699.36 654.843,2683.29 667.241,2697.91 677.122,2716.99 657.535,2729.59 656.03,2743.7 646.395,2746.79 651.765,2761.06 619.507,2759.32 617.233,2755.59"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535632"
- class="fil1 str3"
- points="667.06,2750.32 656.03,2743.7 657.535,2729.59 677.122,2716.99 682.835,2712.22 695.979,2715.23 696.209,2727.71"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123507864"
- class="fil1 str3"
- points="689.343,2789.46 689.314,2775.55 667.284,2749.75 696.209,2727.71 714.477,2731.91 722.863,2767.55 704.31,2792.96"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123526032"
- class="fil1 str3"
- points="715.359,2828.43 726.459,2809.83 704.31,2792.96 722.863,2767.55 734.763,2771.44 747.2,2758.99 752.398,2767.95 746.03,2779.43 754.751,2786.74 775.339,2794.5 771.866,2799.95 772.241,2806.46 775.576,2810.39 766.709,2820.94 719.506,2838.85"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123535824"
- class="fil1 str3"
- points="566.84,2840.65 576.782,2838.73 564.473,2817.08 571.268,2793.24 580.427,2801.12 617.648,2795.32 616.183,2802.37 631.34,2820.92 620.014,2824.51 617.597,2855.14 614.825,2853.04 604.381,2859.88 596.51,2860.89 597.864,2850.36 578.371,2854.16"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123513288"
- class="fil1 str3"
- points="621.89,2774.45 619.507,2759.32 651.765,2761.06 646.395,2746.79 656.03,2743.7 667.284,2749.75 689.314,2775.55 689.343,2789.46 667.501,2793.55 660.884,2804.17 637.476,2805.14 636.106,2796.78 617.648,2795.32"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123524976"
- class="fil1 str3"
- points="726.459,2809.83 704.31,2792.96 689.343,2789.46 667.501,2793.55 660.884,2804.17 654.864,2812.91 662.648,2828.41 675.01,2825.19 697.552,2847.18 719.506,2838.85 715.359,2828.43"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123532848"
- class="fil1 str3"
- points="631.458,2873.97 629.168,2863.92 617.597,2855.14 620.014,2824.51 631.34,2820.92 616.183,2802.37 617.648,2795.32 636.106,2796.78 637.476,2805.14 660.884,2804.17 654.864,2812.91 662.648,2828.41 675.01,2825.19 697.552,2847.18 701.798,2879.74 696.659,2884.78 676.072,2862.29 645.998,2873.75"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- <polygon
- id="_123520896"
- class="fil1 str3"
- points="849.764,2652.02 857.353,2656.57 859.788,2655.2 869.772,2661.13 860.037,2667.95 855.727,2677.44 857.886,2690.29 847.842,2693.94 845.078,2706.71 835.508,2704.87 830.653,2712.62 797.908,2699.55 789.468,2688.16 768.508,2687.12 749.901,2671.12 751.885,2619.9 769.166,2612.12 805.822,2642.71 822.15,2642.71 838.864,2603.08 855.993,2624.48 863.048,2625.71 862.962,2632.14 855.746,2632.58 853.548,2626.45 848.018,2630.15 850.892,2639.92"
- style="fill: none; stroke: rgb(199, 199, 162); stroke-width: 0.797991;" />
- </g>
- <g
- transform="matrix(1.0054068,0,0,1.0054068,-0.02738123,-0.03888718)"
- id="_74312864"><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_53586096"
- points="1059.63,2737.39 1053.24,2749.32 1006.35,2749.25 1000.42,2769.94 992.882,2750.74 961.773,2752.66 956.125,2733.71 959.5,2724.72 947.476,2707.15 963.05,2651.08 986.438,2640.35 998.847,2646.25 1022.17,2695.83 1008.68,2709.29 1024.51,2726.86 1043.94,2714.13 " /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_55040216"
- points="931.519,2785.71 911.795,2789.77 897.049,2778.38 885.515,2783.83 888.711,2771.86 864.04,2761.99 861.843,2709.39 870.471,2714.38 947.476,2707.15 959.5,2724.72 956.125,2733.71 961.773,2752.66 941.39,2764.32 " /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_54401600"
- points="1043.94,2714.13 1024.51,2726.86 1008.68,2709.29 1022.17,2695.83 998.847,2646.25 1015.13,2618.1 1033.29,2627.23 1054.06,2659.23 1083.26,2670.95 1073.28,2697.67 1069.81,2729.63 1059.63,2737.39 " /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_55213984"
- points="1020.5,2817.69 1012.39,2827.94 995.848,2827.45 961.283,2826.41 954.268,2816.05 923.26,2831.7 913.982,2827.14 911.795,2789.77 931.519,2785.71 941.39,2764.32 961.773,2752.66 992.882,2750.74 1000.42,2769.94 1013.37,2776.81 1022.09,2789.84 1013.87,2800.75 " /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_55250640"
- points="886.516,2843.51 913.982,2827.14 923.26,2831.7 913.932,2853.9 917.503,2861.54 896.631,2895.09 879.104,2873.78 " /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_55261112"
- points="969.837,2846.07 956.706,2865.06 961.423,2883.98 975.625,2890.25 973.584,2902.46 941.39,2906.56 926.458,2892 926.696,2880.84 917.503,2861.54 913.932,2853.9 923.26,2831.7 954.268,2816.05 961.283,2826.41 995.848,2827.45 986.881,2836.89 999.636,2841.15 995.497,2850.72 " /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_54158464"
- points="969.837,2846.07 995.497,2850.72 1005.21,2854.47 991.145,2891.34 975.625,2890.25 961.423,2883.98 956.706,2865.06 " /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_55233608"
- points="907.143,2913.76 893.023,2917.51 886.578,2903.58 896.631,2895.09 917.503,2861.54 926.696,2880.84 926.458,2892 941.39,2906.56 943.406,2922.02 927.571,2938.6 " /><path
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- d="M 1012.0625 2889.75 L 1004.4062 2901.9375 L 982.125 2891.2812 L 966.59375 2890.2188 L 964.5625 2902.4062 L 932.375 2906.5312 L 934.375 2921.9688 L 939.125 2926.1875 L 946.125 2951.5938 L 947.59375 2950.7812 L 954.625 2959.5625 L 982.75 2950.8438 L 991.3125 2952.25 L 1004.6562 2942.8125 L 1005.4375 2956.5625 L 1025.3125 2952.25 L 1038 2963.625 L 1051.2188 2956.5312 L 1052.8438 2942.625 L 1048.5625 2940.5 L 1046.3438 2924.7812 L 1032.7812 2915.7812 L 1032.1562 2898.8438 L 1012.0625 2889.75 z "
- transform="translate(9.0226775,0.04366498)"
- id="_55216032" /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_74091008"
- points="1032.89,2877.32 1048.93,2884.2 1041.19,2898.89 1021.09,2889.78 1013.43,2901.99 991.145,2891.34 1005.21,2854.47 995.497,2850.72 999.636,2841.15 986.881,2836.89 995.848,2827.45 1012.77,2827.96 1020.39,2839.26 1040.53,2832.74 1046.35,2845.33 1050.73,2867.78 1038.29,2867.02 " /><polygon
- style="fill:none;stroke:#cfcfa9;stroke-width:0.70866197"
- id="_74456064"
- points="1094.31,2762.12 1103.07,2763.74 1104.1,2778.92 1094.97,2784.45 1087.07,2805.18 1066.03,2819.42 1044.23,2819.35 1040.53,2832.74 1020.39,2839.26 1012.77,2827.96 1020.5,2817.69 1013.87,2800.75 1022.09,2789.84 1013.76,2776.83 1000.42,2769.94 1006.35,2749.25 1053.24,2749.32 1059.63,2737.39 1069.68,2729.29 1079.31,2736.39 1079.89,2748.62 " /></g></g>
-</svg> \ No newline at end of file
diff --git a/examples/mapdata/doc/images/mapdata-example.png b/examples/mapdata/doc/images/mapdata-example.png
deleted file mode 100644
index 8bd8fc18..00000000
--- a/examples/mapdata/doc/images/mapdata-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/mapdata/doc/src/mapdata.qdoc b/examples/mapdata/doc/src/mapdata.qdoc
deleted file mode 100644
index 3014cadb..00000000
--- a/examples/mapdata/doc/src/mapdata.qdoc
+++ /dev/null
@@ -1,29 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-/*!
- \example mapdata
- \title Mapdata Example
-
- The mapdata example shows how to make a simple 3D maps visualization using Q3DMaps and
- combining the use of widgets for adjusting several adjustable qualities.
-
- \image mapdata-example.png
-
- TODO
-*/
diff --git a/examples/mapdata/main.cpp b/examples/mapdata/main.cpp
deleted file mode 100644
index d176bd55..00000000
--- a/examples/mapdata/main.cpp
+++ /dev/null
@@ -1,201 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "mapdata.h"
-
-#include <QApplication>
-#include <QWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QCheckBox>
-#include <QSlider>
-#include <QComboBox>
-#include <QFontComboBox>
-#include <QLabel>
-#include <QScreen>
-#include <QFontDatabase>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
-
- Q3DMaps *chart = new Q3DMaps();
- QSize screenSize = chart->screen()->size();
-
- QWidget *container = QWidget::createWindowContainer(chart);
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- widget->setWindowTitle(QStringLiteral("Population of a few cities in Finland"));
-
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
-
-// QPushButton *dataButton = new QPushButton(widget);
-// dataButton->setText(QStringLiteral("Add a row of random data"));
-// dataButton->setEnabled(false);
-
- QPushButton *themeButton = new QPushButton(widget);
- themeButton->setText(QStringLiteral("Change theme"));
-
- QPushButton *labelButton = new QPushButton(widget);
- labelButton->setText(QStringLiteral("Change label style"));
-
- QPushButton *styleButton = new QPushButton(widget);
- styleButton->setText(QStringLiteral("Change bar style"));
-
- QPushButton *cameraButton = new QPushButton(widget);
- cameraButton->setText(QStringLiteral("Change camera preset"));
-
-// QPushButton *selectionButton = new QPushButton(widget);
-// selectionButton->setText(QStringLiteral("Change selection mode"));
-
-// QCheckBox *gridCheckBox = new QCheckBox(widget);
-// gridCheckBox->setText(QStringLiteral("Show grid"));
-// gridCheckBox->setChecked(true);
-
-// QCheckBox *rotationCheckBox = new QCheckBox(widget);
-// rotationCheckBox->setText("Rotate with slider");
-
-// QSlider *rotationSliderX = new QSlider(Qt::Horizontal, widget);
-// rotationSliderX->setTickInterval(1);
-// rotationSliderX->setMinimum(-180);
-// rotationSliderX->setValue(0);
-// rotationSliderX->setMaximum(180);
-// rotationSliderX->setEnabled(false);
-// QSlider *rotationSliderY = new QSlider(Qt::Horizontal, widget);
-// rotationSliderY->setTickInterval(1);
-// rotationSliderY->setMinimum(0);
-// rotationSliderY->setValue(0);
-// rotationSliderY->setMaximum(90);
-// rotationSliderY->setEnabled(false);
-
-// QSlider *sizeSliderX = new QSlider(Qt::Horizontal, widget);
-// sizeSliderX->setTickInterval(1);
-// sizeSliderX->setMinimum(1);
-// sizeSliderX->setValue(100);
-// sizeSliderX->setMaximum(100);
-// QSlider *sizeSliderZ = new QSlider(Qt::Horizontal, widget);
-// sizeSliderZ->setTickInterval(1);
-// sizeSliderZ->setMinimum(1);
-// sizeSliderZ->setValue(100);
-// sizeSliderZ->setMaximum(100);
-
- QComboBox *valueDimension = new QComboBox(widget);
- valueDimension->addItem(QStringLiteral("Height"));
- valueDimension->addItem(QStringLiteral("Width"));
- valueDimension->addItem(QStringLiteral("Depth"));
- valueDimension->addItem(QStringLiteral("Radius"));
- valueDimension->addItem(QStringLiteral("All"));
- valueDimension->setCurrentIndex(4);
-
- QComboBox *shadowQuality = new QComboBox(widget);
- shadowQuality->addItem(QStringLiteral("None"));
- shadowQuality->addItem(QStringLiteral("Low"));
- shadowQuality->addItem(QStringLiteral("Medium"));
- shadowQuality->addItem(QStringLiteral("High"));
- shadowQuality->setCurrentIndex(1);
-
- QFontComboBox *fontList = new QFontComboBox(widget);
-
- QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget);
- fontSizeSlider->setTickInterval(1);
- fontSizeSlider->setMinimum(1);
- fontSizeSlider->setValue(80);
- fontSizeSlider->setMaximum(200);
-
-// vLayout->addWidget(rotationCheckBox, 0, Qt::AlignTop);
-// vLayout->addWidget(rotationSliderX, 0, Qt::AlignTop);
-// vLayout->addWidget(rotationSliderY, 0, Qt::AlignTop);
-// vLayout->addWidget(new QLabel(QStringLiteral("Adjust relative bar size")));
-// vLayout->addWidget(sizeSliderX, 0, Qt::AlignTop);
-// vLayout->addWidget(sizeSliderZ, 0, Qt::AlignTop);
-// vLayout->addWidget(dataButton, 0, Qt::AlignTop);
- vLayout->addWidget(themeButton, 0, Qt::AlignTop);
- vLayout->addWidget(labelButton, 0, Qt::AlignTop);
- vLayout->addWidget(styleButton, 0, Qt::AlignTop);
- vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Apply value to:")));
- vLayout->addWidget(valueDimension, 0, Qt::AlignTop);
-// vLayout->addWidget(selectionButton, 0, Qt::AlignTop);
-// vLayout->addWidget(gridCheckBox);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
- vLayout->addWidget(shadowQuality);
- vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
- vLayout->addWidget(fontList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust font size")));
- vLayout->addWidget(fontSizeSlider, 1, Qt::AlignTop);
-// // TODO: Add example for setMeshFileName
-
- widget->show();
-
- MapsModifier *modifier = new MapsModifier(chart);
-
-// QObject::connect(rotationSliderX, &QSlider::valueChanged, modifier, &MapsModifier::rotateX);
-// QObject::connect(rotationSliderY, &QSlider::valueChanged, modifier, &MapsModifier::rotateY);
-
-// QObject::connect(sizeSliderX, &QSlider::valueChanged, modifier, &MapsModifier::setSpecsX);
-// QObject::connect(sizeSliderZ, &QSlider::valueChanged, modifier, &MapsModifier::setSpecsZ);
-
- QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
- &MapsModifier::changeFontSize);
-
- QObject::connect(styleButton, &QPushButton::clicked, modifier, &MapsModifier::changeStyle);
- QObject::connect(cameraButton, &QPushButton::clicked, modifier,
- &MapsModifier::changePresetCamera);
- QObject::connect(themeButton, &QPushButton::clicked, modifier, &MapsModifier::changeTheme);
- QObject::connect(labelButton, &QPushButton::clicked, modifier,
- &MapsModifier::changeTransparency);
-// QObject::connect(dataButton, &QPushButton::clicked, modifier, &MapsModifier::addBars);
-// QObject::connect(selectionButton, &QPushButton::clicked, modifier,
-// &MapsModifier::changeSelectionMode);
-
- QObject::connect(valueDimension, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeValueDimension(int)));
-
- QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeShadowQuality(int)));
- QObject::connect(modifier, &MapsModifier::shadowQuality, shadowQuality,
- &QComboBox::setCurrentIndex);
-
- QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
- &MapsModifier::changeFont);
-
-// QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
-// &MapsModifier::setGridEnabled);
-
-// QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderX,
-// &QSlider::setEnabled);
-// QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderX,
-// &QSlider::setValue);
-// QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderY,
-// &QSlider::setEnabled);
-// QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderY,
-// &QSlider::setValue);
-
- modifier->start();
-
- return app.exec();
-}
diff --git a/examples/mapdata/mapdata.cpp b/examples/mapdata/mapdata.cpp
deleted file mode 100644
index 6f0157da..00000000
--- a/examples/mapdata/mapdata.cpp
+++ /dev/null
@@ -1,368 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "mapdata.h"
-#include <QtDataVis3D/qmapdataproxy.h>
-#include <QImage>
-#include <QFile>
-
-using namespace QtDataVis3D;
-
-MapsModifier::MapsModifier(Q3DMaps *maps)
- : m_chart(maps),
- m_imageRect(QRect()),
- m_fontSize(80.0f),
- m_barSpecs(QVector3D(30.0f, 30.0f, 30.0f))
-{
- QImage image = QImage(QStringLiteral(":/images/finland"));
- m_imageRect = image.rect();
- m_chart->setAreaSpecs(m_imageRect, image);
- m_chart->setFontSize(m_fontSize);
-
-#if 0
- m_chart->setBarSpecs(m_barSpecs, Q3DMaps::AdjustHeight);
- m_chart->setBarType(BevelBars, true);
- m_chart->setTheme(ThemeBlueIcy);
- m_chart->setShadowQuality(ShadowMedium);
-#else
- m_chart->setBarSpecs(m_barSpecs, Q3DMaps::AdjustAll);
- m_chart->setMeshFileName(QStringLiteral(":/meshes/weirdthing"));
-#endif
- QMapDataProxy *proxy = new QMapDataProxy;
- m_chart->setDataProxy(proxy);
-}
-
-MapsModifier::~MapsModifier()
-{
- delete m_chart;
-}
-
-void MapsModifier::start()
-{
- addData();
-}
-
-void MapsModifier::addData()
-{
- QMapDataArray *dataArray = new QMapDataArray;
- QMapDataItem *item;
- item = new QMapDataItem();
- item->setValue(191050);
- item->setLabel("Oulu");
- item->setMapPosition(QPointF(963, 1604));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(22274);
- item->setLabel("Kemi");
- item->setMapPosition(QPointF(857, 1383));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(60887);
- item->setLabel("Rovaniemi");
- item->setMapPosition(QPointF(1061, 1119));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(16176);
- item->setLabel("Kuusamo");
- item->setMapPosition(QPointF(1459, 1284));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(3998);
- item->setLabel("Ivalo");
- item->setMapPosition(QPointF(1239, 474));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(37978);
- item->setLabel("Kajaani");
- item->setMapPosition(QPointF(1285, 1859));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(46809);
- item->setLabel("Kokkola");
- item->setMapPosition(QPointF(580, 1973));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(105236);
- item->setLabel("Kuopio");
- item->setMapPosition(QPointF(1292, 2283));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(133557);
- item->setLabel("Jyväskylä");
- item->setMapPosition(QPointF(991, 2496));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(65771);
- item->setLabel("Vaasa");
- item->setMapPosition(QPointF(441, 2184));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(217603);
- item->setLabel("Tampere");
- item->setMapPosition(QPointF(686, 2656));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(180350);
- item->setLabel("Turku");
- item->setMapPosition(QPointF(430, 3046));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(72400);
- item->setLabel("Lappeenranta");
- item->setMapPosition(QPoint(1365, 2852));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(14754);
- item->setLabel("Tammisaari");
- item->setMapPosition(QPointF(605, 3215));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(1879);
- item->setLabel("Enontekiö");
- item->setMapPosition(QPointF(752, 556));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(36624);
- item->setLabel("Savonlinna");
- item->setMapPosition(QPointF(1445, 2586));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(605022);
- item->setLabel("Helsinki");
- item->setMapPosition(QPointF(822, 3130));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(54887);
- item->setLabel("Kotka");
- item->setMapPosition(QPointF(1162, 3051));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(11372);
- item->setLabel("Maarianhamina");
- item->setMapPosition(QPointF(56, 3101));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(9266);
- item->setLabel("Hanko");
- item->setMapPosition(QPointF(527, 3228));
- dataArray->append(*item);
- delete item;
-
- item = new QMapDataItem();
- item->setValue(1287);
- item->setLabel("Utsjoki");
- item->setMapPosition(QPointF(1180, 72));
- dataArray->append(*item);
- delete item;
-
- static_cast<QMapDataProxy *>(m_chart->dataProxy())->resetArray(dataArray);
-}
-
-void MapsModifier::changeStyle()
-{
- static int model = 0;
- switch (model) {
- case 0:
- m_chart->setBarType(QDataVis::Cylinders, false);
- break;
- case 1:
- m_chart->setBarType(QDataVis::Cylinders, true);
- break;
- case 2:
- m_chart->setBarType(QDataVis::Cones, false);
- break;
- case 3:
- m_chart->setBarType(QDataVis::Cones, true);
- break;
- case 4:
- m_chart->setBarType(QDataVis::Bars, false);
- break;
- case 5:
- m_chart->setBarType(QDataVis::Bars, true);
- break;
- case 6:
- m_chart->setBarType(QDataVis::Pyramids, false);
- break;
- case 7:
- m_chart->setBarType(QDataVis::Pyramids, true);
- break;
- case 8:
- m_chart->setBarType(QDataVis::BevelBars, false);
- break;
- case 9:
- m_chart->setBarType(QDataVis::BevelBars, true);
- break;
- case 10:
- m_chart->setBarType(QDataVis::Spheres, false);
- break;
- case 11:
- m_chart->setBarType(QDataVis::Spheres, true);
- break;
- }
- model++;
- if (model > 11)
- model = 0;
-}
-
-void MapsModifier::changePresetCamera()
-{
- static int preset = QDataVis::PresetFrontLow;
-
- m_chart->setCameraPreset((QDataVis::CameraPreset)preset);
-
- if (++preset > QDataVis::PresetDirectlyAboveCCW45)
- preset = QDataVis::PresetFrontLow;
-}
-
-void MapsModifier::changeTheme()
-{
- static int theme = QDataVis::ThemeSystem;
-
- m_chart->setTheme((QDataVis::ColorTheme)theme);
-
- if (++theme > QDataVis::ThemeLight)
- theme = QDataVis::ThemeSystem;
-}
-
-void MapsModifier::changeTransparency()
-{
- static int transparency = QDataVis::TransparencyNone;
-
- m_chart->setLabelTransparency((QDataVis::LabelTransparency)transparency);
-
- if (++transparency > QDataVis::TransparencyNoBackground)
- transparency = QDataVis::TransparencyFromTheme;
-}
-
-void MapsModifier::changeValueDimension(int dimension)
-{
- m_chart->setBarSpecs(m_barSpecs, (Q3DMaps::AdjustmentDirection)dimension);
-}
-
-void MapsModifier::changeFont(const QFont &font)
-{
- QFont newFont = font;
- newFont.setPointSizeF(m_fontSize);
- //qDebug() << newFont << newFont.style();
- m_chart->setFont(newFont);
-}
-
-void MapsModifier::changeFontSize(int fontsize)
-{
- m_fontSize = fontsize;
- m_chart->setFontSize((GLfloat)m_fontSize);
-}
-
-void MapsModifier::changeShadowQuality(int quality)
-{
- QDataVis::ShadowQuality sq = QDataVis::ShadowNone;
- switch (quality) {
- case 1:
- sq = QDataVis::ShadowLow;
- break;
- case 2:
- sq = QDataVis::ShadowMedium;
- break;
- case 3:
- sq = QDataVis::ShadowHigh;
- break;
- }
- QDataVis::ShadowQuality realquality = m_chart->setShadowQuality(sq);
- // Check if it setting quality was successful
- if (realquality != sq) {
- switch (realquality) {
- case QDataVis::ShadowLow:
- quality = 1;
- break;
- case QDataVis::ShadowMedium:
- quality = 2;
- break;
- case QDataVis::ShadowHigh:
- quality = 3;
- break;
- }
- emit shadowQuality(quality);
- }
-}
-
-//void MapsModifier::setGridEnabled(int enabled)
-//{
-// m_chart->setGridEnabled((bool)enabled);
-//}
-
-//void MapsModifier::rotateX(int rotation)
-//{
-// m_xRotation = rotation;
-// m_chart->setCameraPosition(m_xRotation, m_yRotation);
-//}
-
-//void MapsModifier::rotateY(int rotation)
-//{
-// m_yRotation = rotation;
-// m_chart->setCameraPosition(m_xRotation, m_yRotation);
-//}
-
-//void MapsModifier::setSpecsX(int barwidth)
-//{
-// m_barWidth = (float)barwidth / 100.0f;
-// m_chart->setBarSpecs(QSizeF(m_barWidth, m_barDepth), QSizeF(m_barSpacingX, m_barSpacingZ));
-//}
-
-//void MapsModifier::setSpecsZ(int bardepth)
-//{
-// m_barDepth = (float)bardepth / 100.0f;
-// m_chart->setBarSpecs(QSizeF(m_barWidth, m_barDepth), QSizeF(m_barSpacingX, m_barSpacingZ));
-//}
diff --git a/examples/mapdata/mapdata.h b/examples/mapdata/mapdata.h
deleted file mode 100644
index 8aed69fe..00000000
--- a/examples/mapdata/mapdata.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#ifndef CHARTMODIFIER_H
-#define CHARTMODIFIER_H
-
-#include <QtDataVis3D/q3dmaps.h>
-
-#include <QFont>
-#include <QDebug>
-
-using namespace QtDataVis3D;
-
-class MapsModifier : public QObject
-{
- Q_OBJECT
-public:
- explicit MapsModifier(Q3DMaps *maps);
- ~MapsModifier();
-
- void addData();
- void changeStyle();
- void changePresetCamera();
- void changeTheme();
-// void changeSelectionMode();
- void changeTransparency();
- void changeFont(const QFont &font);
- void changeFontSize(int fontsize);
-// void rotateX(int rotation);
-// void rotateY(int rotation);
-// void setGridEnabled(int enabled);
-// void setSpecsX(int barwidth);
-// void setSpecsZ(int bardepth);
- void start();
-
-public slots:
- void changeValueDimension(int dimension);
- void changeShadowQuality(int quality);
-
-signals:
- void shadowQuality(int quality);
-
-private:
- Q3DMaps *m_chart;
- QRect m_imageRect;
- int m_fontSize;
- QVector3D m_barSpecs;
-};
-
-#endif
diff --git a/examples/mapdata/mapdata.qrc b/examples/mapdata/mapdata.qrc
deleted file mode 100644
index 76ea5f05..00000000
--- a/examples/mapdata/mapdata.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/images">
- <file alias="finland">Suomi.karttapohja.svg</file>
- </qresource>
- <qresource prefix="/meshes">
- <file alias="weirdthing">weirdthing.obj</file>
- </qresource>
-</RCC>
diff --git a/examples/mapdata/weirdthing.obj b/examples/mapdata/weirdthing.obj
deleted file mode 100644
index 46c9e789..00000000
--- a/examples/mapdata/weirdthing.obj
+++ /dev/null
@@ -1,1232 +0,0 @@
-# Blender v2.66 (sub 0) OBJ File: 'kummajuttu.blend'
-# www.blender.org
-o Sphere
-v 0.003570 0.980785 -0.198744
-v 0.003570 0.923880 -0.386337
-v 0.003570 0.831470 -0.559224
-v 0.003570 0.707107 -0.710760
-v 0.003570 0.555570 -0.835123
-v 0.003570 0.382683 -0.927533
-v 0.003570 0.195090 -0.984439
-v 0.003570 0.000000 -1.003654
-v 0.003570 -0.195090 -0.984439
-v 0.003570 -0.382683 -0.927533
-v 0.003570 -0.555570 -0.835123
-v 0.003570 -0.707107 -0.710760
-v 0.003570 -0.831470 -0.559224
-v 0.003570 -0.923880 -0.386337
-v 0.003570 -0.980785 -0.198744
-v 0.078228 0.980785 -0.183894
-v 0.150016 0.923880 -0.357207
-v 0.216177 0.831470 -0.516933
-v 0.274168 0.707107 -0.656935
-v 0.321760 0.555570 -0.771831
-v 0.357123 0.382683 -0.857207
-v 0.378900 0.195090 -0.909781
-v 0.386254 0.000000 -0.927533
-v 0.378900 -0.195090 -0.909781
-v 0.357124 -0.382683 -0.857207
-v 0.321760 -0.555570 -0.771831
-v 0.274168 -0.707107 -0.656935
-v 0.216177 -0.831470 -0.516933
-v 0.150016 -0.923880 -0.357207
-v 0.078227 -0.980785 -0.183893
-v 0.003569 -1.000000 -0.003653
-v 0.141519 0.980785 -0.141603
-v 0.274168 0.923880 -0.274251
-v 0.396417 0.831470 -0.396501
-v 0.503570 0.707107 -0.503653
-v 0.591508 0.555570 -0.591591
-v 0.656851 0.382683 -0.656934
-v 0.697090 0.195090 -0.697173
-v 0.710677 0.000000 -0.710760
-v 0.697090 -0.195090 -0.697173
-v 0.656852 -0.382683 -0.656935
-v 0.591508 -0.555570 -0.591591
-v 0.503570 -0.707107 -0.503653
-v 0.396417 -0.831470 -0.396501
-v 0.274168 -0.923880 -0.274251
-v 0.141519 -0.980785 -0.141603
-v 0.183810 0.980785 -0.078311
-v 0.357123 0.923880 -0.150100
-v 0.516850 0.831470 -0.216261
-v 0.656851 0.707107 -0.274251
-v 0.771748 0.555570 -0.321843
-v 0.857123 0.382683 -0.357206
-v 0.909697 0.195090 -0.378983
-v 0.927450 0.000000 -0.386336
-v 0.909697 -0.195090 -0.378983
-v 0.857123 -0.382683 -0.357206
-v 0.771748 -0.555570 -0.321843
-v 0.656851 -0.707107 -0.274251
-v 0.516850 -0.831470 -0.216261
-v 0.357123 -0.923880 -0.150100
-v 0.183810 -0.980785 -0.078311
-v 0.198660 0.980785 -0.003653
-v 0.677357 1.471222 -0.125912
-v 0.559140 0.831470 -0.003653
-v 0.710676 0.707107 -0.003653
-v 0.835039 0.555570 -0.003653
-v 0.927449 0.382683 -0.003653
-v 0.984355 0.195090 -0.003653
-v 1.003570 0.000000 -0.003653
-v 0.984355 -0.195090 -0.003653
-v 0.927449 -0.382683 -0.003653
-v 0.835039 -0.555570 -0.003653
-v 0.710676 -0.707107 -0.003653
-v 0.559140 -0.831470 -0.003653
-v 0.386253 -0.923880 -0.003653
-v 0.198660 -0.980785 -0.003653
-v 0.183810 0.980785 0.071005
-v 0.357123 0.923880 0.142794
-v 0.516850 0.831470 0.208955
-v 0.656851 0.707107 0.266945
-v 0.771747 0.555570 0.314537
-v 0.857123 0.382683 0.349901
-v 0.909697 0.195090 0.371678
-v 0.927449 0.000000 0.379031
-v 0.909697 -0.195090 0.371678
-v 0.857123 -0.382683 0.349901
-v 0.771747 -0.555570 0.314537
-v 0.656851 -0.707107 0.266945
-v 0.516850 -0.831470 0.208955
-v 0.357123 -0.923880 0.142794
-v 0.183809 -0.980785 0.071005
-v 0.141519 0.980785 0.134297
-v 0.274168 0.923880 0.266945
-v 0.396417 0.831470 0.389194
-v 0.503569 0.707107 0.496347
-v 0.510364 0.555081 0.463719
-v 0.656851 0.382683 0.649629
-v 0.697089 0.195090 0.689867
-v 0.710676 0.000000 0.703454
-v 0.748412 -0.191114 0.569205
-v 0.656851 -0.382683 0.649629
-v 0.591507 -0.555570 0.584285
-v 0.503569 -0.707107 0.496347
-v 0.396417 -0.831470 0.389195
-v 0.274167 -0.923880 0.266945
-v 0.141519 -0.980785 0.134296
-v 0.078227 0.980785 0.176587
-v 0.150016 0.923880 0.349900
-v 0.216177 0.831470 0.509627
-v 0.274167 0.707107 0.649628
-v 0.291322 0.560724 0.763409
-v 0.277774 0.364301 0.818832
-v 0.378899 0.195090 0.902475
-v 0.386252 0.000000 0.920227
-v 0.379597 -0.105845 0.875443
-v 0.357122 -0.382683 0.849900
-v 0.321759 -0.555570 0.764525
-v 0.274167 -0.707107 0.649628
-v 0.216177 -0.831470 0.509627
-v 0.150016 -0.923880 0.349900
-v 0.078227 -0.980785 0.176587
-v 0.003569 0.980785 0.191437
-v 0.003569 0.923880 0.379030
-v 0.003569 0.831470 0.551917
-v 0.003569 0.707107 0.703454
-v 0.003569 0.555570 0.827816
-v 0.002822 0.396037 1.575037
-v -0.004287 0.229143 1.537837
-v 0.003569 0.000000 0.996347
-v 0.002270 0.152905 1.513075
-v 0.003569 -0.382683 0.920226
-v 0.003569 -0.555570 0.827816
-v 0.003569 -0.707107 0.703454
-v 0.003569 -0.831470 0.551917
-v 0.003569 -0.923880 0.379030
-v 0.003569 -0.980785 0.191437
-v -0.071089 0.980785 0.176587
-v -0.142877 0.923880 0.349900
-v -0.209038 0.831470 0.509627
-v -0.267029 0.707107 0.649628
-v -0.278921 0.569917 0.759967
-v -0.256269 0.375922 0.808299
-v -0.371761 0.195090 0.902474
-v -0.379115 0.000000 0.920226
-v -0.376325 -0.115657 0.878437
-v -0.349985 -0.382683 0.849900
-v -0.314621 -0.555570 0.764524
-v -0.267029 -0.707107 0.649628
-v -0.209038 -0.831470 0.509627
-v -0.142877 -0.923880 0.349900
-v -0.071088 -0.980785 0.176587
-v -0.134381 0.980785 0.134296
-v -0.267029 0.923880 0.266945
-v -0.389278 0.831470 0.389194
-v -0.496431 0.707107 0.496346
-v -0.514055 0.534945 0.480404
-v -0.649713 0.382683 0.649628
-v -0.689951 0.195090 0.689866
-v -0.703538 0.000000 0.703453
-v -0.717210 -0.189018 0.574779
-v -0.649712 -0.382683 0.649628
-v -0.584369 -0.555570 0.584284
-v -0.496431 -0.707107 0.496346
-v -0.389278 -0.831470 0.389194
-v -0.267029 -0.923880 0.266945
-v -0.134380 -0.980785 0.134296
-v -0.176671 0.980785 0.071004
-v -0.349984 0.923880 0.142793
-v -0.509711 0.831470 0.208954
-v -0.649712 0.707107 0.266944
-v -0.764608 0.555570 0.314536
-v -0.849984 0.382683 0.349899
-v -0.902558 0.195090 0.371676
-v -0.920310 0.000000 0.379030
-v -0.902558 -0.195090 0.371676
-v -0.849984 -0.382683 0.349899
-v -0.764608 -0.555570 0.314536
-v -0.649712 -0.707107 0.266944
-v -0.509711 -0.831470 0.208954
-v -0.349984 -0.923880 0.142793
-v -0.176671 -0.980785 0.071004
-v -0.191521 0.980785 -0.003654
-v -0.670833 1.424588 -0.130514
-v -0.552001 0.831470 -0.003654
-v -0.703537 0.707107 -0.003654
-v -0.827900 0.555570 -0.003654
-v -0.920310 0.382683 -0.003654
-v -0.977216 0.195090 -0.003654
-v -0.996431 0.000000 -0.003654
-v -0.977216 -0.195090 -0.003654
-v -0.920310 -0.382683 -0.003654
-v -0.827900 -0.555570 -0.003654
-v -0.703537 -0.707107 -0.003654
-v -0.552001 -0.831470 -0.003654
-v -0.379114 -0.923880 -0.003654
-v -0.191521 -0.980785 -0.003653
-v -0.176671 0.980785 -0.078311
-v -0.349984 0.923880 -0.150100
-v -0.509711 0.831470 -0.216261
-v -0.649712 0.707107 -0.274252
-v -0.764608 0.555570 -0.321844
-v -0.849984 0.382683 -0.357207
-v -0.902558 0.195090 -0.378984
-v -0.920310 0.000000 -0.386338
-v -0.902558 -0.195090 -0.378984
-v -0.849984 -0.382683 -0.357207
-v -0.764608 -0.555570 -0.321844
-v -0.649712 -0.707107 -0.274252
-v -0.509711 -0.831470 -0.216261
-v -0.349984 -0.923880 -0.150100
-v -0.176670 -0.980785 -0.078311
-v -0.004740 0.946694 -0.042452
-v -0.134380 0.980785 -0.141603
-v -0.267029 0.923880 -0.274252
-v -0.389278 0.831470 -0.396501
-v -0.496430 0.707107 -0.503654
-v -0.584368 0.555570 -0.591592
-v -0.649712 0.382683 -0.656935
-v -0.689950 0.195090 -0.697174
-v -0.703537 0.000000 -0.710761
-v -0.689950 -0.195090 -0.697174
-v -0.649711 -0.382683 -0.656935
-v -0.584368 -0.555570 -0.591592
-v -0.496430 -0.707107 -0.503654
-v -0.389278 -0.831470 -0.396501
-v -0.267029 -0.923880 -0.274252
-v -0.134380 -0.980785 -0.141603
-v -0.071088 0.980785 -0.183894
-v -0.142877 0.923880 -0.357207
-v -0.209038 0.831470 -0.516934
-v -0.267028 0.707107 -0.656935
-v -0.314620 0.555570 -0.771831
-v -0.349983 0.382683 -0.857207
-v -0.371760 0.195090 -0.909781
-v -0.379113 0.000000 -0.927533
-v -0.371760 -0.195090 -0.909781
-v -0.349983 -0.382683 -0.857207
-v -0.314620 -0.555570 -0.771831
-v -0.267028 -0.707107 -0.656935
-v -0.209038 -0.831470 -0.516934
-v -0.142877 -0.923880 -0.357207
-v -0.071088 -0.980785 -0.183893
-vt 0.999851 0.254364
-vt 1.000216 0.316861
-vt 0.947490 0.313317
-vt 1.001430 0.629353
-vt 1.001720 0.691851
-vt 0.931922 0.687175
-vt 0.999311 0.191868
-vt 0.951339 0.251099
-vt 1.001186 0.566854
-vt 0.934881 0.624892
-vt 1.007035 0.941813
-vt 0.425056 0.995097
-vt 0.688036 0.976661
-vt 0.998332 0.129375
-vt 0.957069 0.189020
-vt 1.000962 0.504356
-vt 0.937391 0.562576
-vt 1.003771 0.879336
-vt 0.883350 0.933568
-vt 1.000738 0.441858
-vt 0.939710 0.500246
-vt 1.002681 0.816844
-vt 0.911801 0.873194
-vt 1.000498 0.379359
-vt 0.942029 0.437916
-vt 1.002102 0.754348
-vt 0.922311 0.811468
-vt 0.944536 0.375600
-vt 0.928063 0.749391
-vt 0.967518 0.127291
-vt 0.914370 0.179467
-vt 0.874297 0.548708
-vt 0.793367 0.911832
-vt 0.878776 0.486849
-vt 0.830431 0.854878
-vt 0.883328 0.425001
-vt 0.847177 0.794812
-vt 0.888332 0.363217
-vt 0.857097 0.733741
-vt 0.894325 0.301577
-vt 0.864050 0.672239
-vt 0.902279 0.240220
-vt 0.869538 0.610526
-vt 0.673229 0.952622
-vt 0.840021 0.282844
-vt 0.799196 0.650007
-vt 0.851832 0.222629
-vt 0.806082 0.588829
-vt 0.647674 0.930190
-vt 0.936876 0.120264
-vt 0.870487 0.163782
-vt 0.812241 0.527510
-vt 0.728438 0.886032
-vt 0.818195 0.466151
-vt 0.761780 0.830244
-vt 0.824401 0.404841
-vt 0.779430 0.771193
-vt 0.831401 0.343685
-vt 0.790798 0.710891
-vt 0.764618 0.380134
-vt 0.718010 0.745282
-vt 0.772877 0.319381
-vt 0.728814 0.685077
-vt 0.783442 0.259124
-vt 0.737196 0.624350
-vt 0.798621 0.199874
-vt 0.744340 0.563358
-vt 0.707182 0.860354
-vt 0.906609 0.108594
-vt 0.824112 0.142946
-vt 0.750946 0.502250
-vt 0.757534 0.441139
-vt 0.702334 0.804422
-vt 0.876972 0.092772
-vt 0.772639 0.118425
-vt 0.689719 0.476662
-vt 0.628630 0.839481
-vt 0.696023 0.415406
-vt 0.648446 0.780984
-vt 0.703032 0.354290
-vt 0.660884 0.720963
-vt 0.711521 0.293471
-vt 0.669897 0.660249
-vt 0.722910 0.233237
-vt 0.677174 0.599187
-vt 0.740364 0.174247
-vt 0.683593 0.537954
-vt 0.619392 0.910335
-vt 0.589901 0.893857
-vt 0.656384 0.208905
-vt 0.618155 0.578027
-vt 0.673599 0.149088
-vt 0.623041 0.516276
-vt 0.559721 0.881431
-vt 0.848420 0.073445
-vt 0.710510 0.092518
-vt 0.654100 0.398336
-vt 0.584434 0.822825
-vt 0.597641 0.762372
-vt 0.638711 0.331180
-vt 0.615729 0.669357
-vt 0.646031 0.269806
-vt 0.571320 0.314734
-vt 0.606283 0.701204
-vt 0.552981 0.688148
-vt 0.575821 0.252624
-vt 0.551486 0.628681
-vt 0.582490 0.190702
-vt 0.562178 0.501443
-vt 0.594534 0.129251
-vt 0.627829 0.454510
-vt 0.529129 0.873575
-vt 0.822173 0.051396
-vt 0.626046 0.069542
-vt 0.568416 0.404557
-vt 0.541593 0.812161
-vt 0.548412 0.750252
-vt 0.498332 0.870625
-vt 0.803855 0.027548
-vt 0.507034 0.058187
-vt 0.564908 0.439180
-vt 0.501186 0.433146
-vt 0.499311 0.808132
-vt 0.501720 0.308149
-vt 0.499851 0.745636
-vt 0.500216 0.683139
-vt 0.502102 0.245652
-vt 0.548785 0.563632
-vt 0.500498 0.620641
-vt 0.502681 0.183156
-vt 0.500213 0.480106
-vt 0.503771 0.120664
-vt 0.500833 0.511381
-vt 0.450277 0.630514
-vt 0.411801 0.126807
-vt 0.439710 0.499754
-vt 0.383351 0.066432
-vt 0.437391 0.437424
-vt 0.457069 0.810979
-vt 0.925055 0.004903
-vt 1.188037 0.023339
-vt 0.500933 0.465124
-vt 0.433581 0.399732
-vt 0.451339 0.748901
-vt 0.431922 0.312826
-vt 0.447490 0.686683
-vt 0.428063 0.250609
-vt 0.422311 0.188532
-vt 0.351556 0.393216
-vt 0.394325 0.698423
-vt 0.357098 0.266259
-vt 0.347177 0.205188
-vt 0.454645 0.567651
-vt 0.385200 0.656262
-vt 0.330431 0.145123
-vt 0.378776 0.513151
-vt 0.293367 0.088168
-vt 0.374297 0.451292
-vt 0.467518 0.872709
-vt 0.414370 0.820533
-vt 0.188037 0.023339
-vt 0.173229 0.047378
-vt 0.402279 0.759780
-vt 0.228438 0.113968
-vt 0.312241 0.472490
-vt 0.436876 0.879736
-vt 0.370488 0.836218
-vt 0.147674 0.069810
-vt 0.306082 0.411171
-vt 0.351833 0.777370
-vt 0.364050 0.327761
-vt 0.340021 0.717156
-vt 0.290798 0.289109
-vt 0.331401 0.656315
-vt 0.279430 0.228807
-vt 0.383329 0.574999
-vt 0.261780 0.169756
-vt 0.318195 0.533849
-vt 0.218010 0.254718
-vt 0.324402 0.595159
-vt 0.264618 0.619866
-vt 0.202334 0.195578
-vt 0.257534 0.558861
-vt 0.175646 0.138926
-vt 0.250946 0.497750
-vt 0.406609 0.891406
-vt 0.376972 0.907228
-vt 0.119392 0.089665
-vt 0.244340 0.436642
-vt 0.298621 0.800125
-vt 0.299196 0.349993
-vt 0.237196 0.375650
-vt 0.283443 0.740876
-vt 0.228814 0.314923
-vt 0.272877 0.680619
-vt 0.177174 0.400813
-vt 0.222910 0.766763
-vt 0.169898 0.339751
-vt 0.211521 0.706529
-vt 0.160884 0.279037
-vt 0.203032 0.645710
-vt 0.148446 0.219016
-vt 0.128630 0.160519
-vt 0.189719 0.523338
-vt 0.290338 0.852691
-vt 0.272639 0.881575
-vt 0.089901 0.106143
-vt 0.183593 0.462046
-vt 0.084435 0.177175
-vt 0.196023 0.584594
-vt 0.127829 0.545490
-vt 0.348421 0.926554
-vt 0.210511 0.907482
-vt 0.059721 0.118569
-vt 0.123041 0.483724
-vt 0.240365 0.825753
-vt 0.173599 0.850912
-vt 0.118155 0.421973
-vt 0.156384 0.791095
-vt 0.112765 0.360300
-vt 0.146031 0.730194
-vt 0.106283 0.298796
-vt 0.138711 0.668820
-vt 0.097641 0.237628
-vt 0.132896 0.607213
-vt 0.052981 0.311852
-vt 0.071320 0.685266
-vt 0.048412 0.249748
-vt 0.067856 0.623066
-vt 0.041593 0.187839
-vt 0.064908 0.560821
-vt 0.322173 0.948604
-vt 0.126046 0.930458
-vt 0.029129 0.126425
-vt 0.062178 0.498557
-vt 0.094534 0.870749
-vt 0.059443 0.436293
-vt 0.082490 0.809298
-vt 0.056480 0.374049
-vt 0.075821 0.747376
-vt 0.486102 0.945947
-vt 0.995670 0.066893
-vt 1.173229 0.047378
-vt 1.147674 0.069810
-vt 1.119392 0.089665
-vt 1.089901 0.106143
-vt 1.059721 0.118569
-vt 0.303856 0.972452
-vt 1.029129 0.126425
-vt 0.000738 0.441858
-vt 0.002681 0.816844
-vt 0.002103 0.754348
-vt 0.000498 0.379359
-vt 0.001720 0.691851
-vt 1.048412 0.249748
-vt 1.052981 0.311852
-vt 0.001430 0.629353
-vt 1.041593 0.187839
-vt 0.001186 0.566854
-vt 0.007035 0.941813
-vt 0.000962 0.504356
-vt 0.003771 0.879336
-vt 1.383351 0.066432
-vt 0.000216 0.316861
-vn 0.000000 -0.825831 -0.563891
-vn 0.000000 -0.701041 -0.713095
-vn 0.272866 -0.701041 -0.658803
-vn 0.000000 0.192785 -0.981231
-vn 0.000000 0.378430 -0.925596
-vn 0.354198 0.378430 -0.855159
-vn 0.000000 -0.919523 -0.393017
-vn 0.215796 -0.825831 -0.520981
-vn 0.000000 0.000000 -1.000000
-vn 0.375500 0.192785 -0.906522
-vn 0.000000 0.919523 -0.393017
-vn -0.000519 0.997436 -0.071200
-vn 0.027406 0.997192 -0.069613
-vn 0.000000 -0.978362 -0.206793
-vn 0.150395 -0.919523 -0.363109
-vn 0.000000 -0.192785 -0.981231
-vn 0.382672 0.000000 -0.923856
-vn 0.000000 0.825831 -0.563891
-vn 0.150395 0.919523 -0.363109
-vn 0.000000 -0.378430 -0.925596
-vn 0.375500 -0.192785 -0.906522
-vn 0.000000 0.701041 -0.713095
-vn 0.215796 0.825831 -0.520981
-vn 0.000000 -0.550005 -0.835139
-vn 0.354198 -0.378430 -0.855159
-vn 0.000000 0.550005 -0.835139
-vn 0.272866 0.701041 -0.658803
-vn 0.319590 -0.550005 -0.771569
-vn 0.319590 0.550005 -0.771569
-vn 0.079134 -0.978362 -0.191046
-vn 0.277902 -0.919523 -0.277902
-vn 0.707083 0.000000 -0.707083
-vn 0.277902 0.919523 -0.277902
-vn 0.693838 -0.192785 -0.693838
-vn 0.398724 0.825831 -0.398724
-vn 0.654500 -0.378430 -0.654500
-vn 0.504227 0.701041 -0.504227
-vn 0.590533 -0.550005 -0.590533
-vn 0.590533 0.550005 -0.590533
-vn 0.504227 -0.701041 -0.504227
-vn 0.654500 0.378430 -0.654500
-vn 0.398724 -0.825831 -0.398724
-vn 0.693838 0.192785 -0.693838
-vn 0.055757 0.996734 -0.058199
-vn 0.658803 -0.701041 -0.272866
-vn 0.855159 0.378430 -0.354198
-vn 0.520981 -0.825831 -0.215796
-vn 0.906522 0.192785 -0.375500
-vn -0.236305 0.959014 -0.156285
-vn 0.146214 -0.978362 -0.146214
-vn 0.363109 -0.919523 -0.150395
-vn 0.923856 0.000000 -0.382672
-vn 0.011261 0.683889 -0.729453
-vn 0.906522 -0.192785 -0.375500
-vn 0.605701 0.653768 -0.453536
-vn 0.855159 -0.378430 -0.354198
-vn 0.658803 0.701041 -0.272866
-vn 0.771569 -0.550005 -0.319590
-vn 0.771569 0.550005 -0.319590
-vn 0.925596 -0.378430 0.000000
-vn 0.713095 0.701041 0.000000
-vn 0.835139 -0.550005 0.000000
-vn 0.835139 0.550005 0.000000
-vn 0.713095 -0.701041 0.000000
-vn 0.925596 0.378430 0.000000
-vn 0.563891 -0.825831 0.000000
-vn 0.981231 0.192785 0.000000
-vn 0.457015 0.878414 -0.139592
-vn 0.191046 -0.978362 -0.079134
-vn 0.393017 -0.919523 0.000000
-vn 1.000000 0.000000 0.000000
-vn 0.981231 -0.192785 0.000000
-vn 0.826655 0.536607 0.169225
-vn 0.206793 -0.978362 0.000000
-vn 0.363109 -0.919523 0.150395
-vn 0.918363 -0.013153 0.395428
-vn 0.332072 0.776086 0.536058
-vn 0.887234 -0.192480 0.419202
-vn 0.520981 0.825831 0.215796
-vn 0.853755 -0.365734 0.370556
-vn 0.661458 0.653645 0.367626
-vn 0.771569 -0.550005 0.319590
-vn 0.697836 0.595203 0.398389
-vn 0.658803 -0.701041 0.272866
-vn 0.855159 0.378430 0.354198
-vn 0.520981 -0.825831 0.215796
-vn 0.906522 0.192785 0.375500
-vn -0.493942 0.869381 -0.011963
-vn -0.170476 0.970946 0.167882
-vn 0.504227 -0.701041 0.504227
-vn 0.585894 0.507614 0.631642
-vn 0.398724 -0.825831 0.398724
-vn 0.693838 0.192785 0.693838
-vn 0.071383 0.994934 0.070467
-vn 0.191046 -0.978362 0.079134
-vn 0.277902 -0.919523 0.277902
-vn 0.742882 -0.188543 0.642293
-vn 0.277902 0.919523 0.277902
-vn 0.398724 0.825831 0.398724
-vn 0.673086 -0.270486 0.688314
-vn 0.604236 0.484725 0.632374
-vn 0.590533 -0.550005 0.590533
-vn 0.363536 -0.292184 0.884548
-vn 0.652760 0.351756 0.670919
-vn 0.377728 0.636097 0.672811
-vn 0.319590 -0.550005 0.771569
-vn 0.382183 0.480911 0.789056
-vn 0.272866 -0.701041 0.658803
-vn 0.561907 0.233131 0.793634
-vn 0.215796 -0.825831 0.520981
-vn 0.683676 -0.129032 0.718253
-vn 0.039155 0.994781 0.093997
-vn 0.146214 -0.978362 0.146214
-vn 0.150395 -0.919523 0.363109
-vn 0.489853 -0.255684 0.833430
-vn 0.150395 0.919523 0.363109
-vn 0.215796 0.825831 0.520981
-vn -0.000214 0.994781 0.101779
-vn 0.079134 -0.978362 0.191046
-vn 0.000000 -0.919523 0.393017
-vn 0.373913 -0.143284 0.916318
-vn 0.483200 0.406323 0.775475
-vn 0.000000 0.919523 0.393017
-vn 0.090335 -0.566515 0.819056
-vn 0.000000 0.825831 0.563891
-vn 0.001495 0.700217 0.713889
-vn 0.000000 -0.550005 0.835139
-vn 0.503006 0.524033 0.687246
-vn 0.164159 0.810419 0.562334
-vn 0.000000 -0.701041 0.713095
-vn 0.058321 -0.465743 0.882962
-vn 0.000000 -0.825831 0.563891
-vn 0.073977 0.415296 0.906644
-vn -0.589007 0.456130 0.667043
-vn -0.215796 -0.825831 0.520981
-vn -0.704520 0.368694 0.606342
-vn -0.150395 -0.919523 0.363109
-vn -0.530290 -0.262947 0.805994
-vn -0.150395 0.919523 0.363109
-vn 0.000000 -0.978362 0.206793
-vn -0.079134 -0.978362 0.191046
-vn 0.049959 0.476424 0.877773
-vn -0.661336 -0.128391 0.738975
-vn -0.215796 0.825831 0.520981
-vn -0.469863 -0.393567 0.790124
-vn -0.287149 0.689108 0.665304
-vn -0.319590 -0.550005 0.771569
-vn -0.272866 -0.701041 0.658803
-vn -0.673421 -0.193152 0.713553
-vn -0.604236 0.498520 0.621540
-vn -0.590533 -0.550005 0.590533
-vn -0.504227 -0.701041 0.504227
-vn -0.768883 0.370861 0.520829
-vn -0.544877 0.410474 0.731132
-vn -0.398724 -0.825831 0.398724
-vn -0.666066 0.221381 0.712241
-vn -0.277902 -0.919523 0.277902
-vn -0.671102 -0.151128 0.725761
-vn -0.038942 0.994964 0.092257
-vn -0.277902 0.919523 0.277902
-vn -0.146214 -0.978362 0.146214
-vn -0.398724 0.825831 0.398724
-vn -0.363109 -0.919523 0.150395
-vn -0.923856 0.000000 0.382672
-vn -0.069369 0.995270 0.067782
-vn -0.291696 0.836390 0.464003
-vn -0.191046 -0.978362 0.079134
-vn -0.897244 -0.193762 0.396680
-vn -0.520981 0.825831 0.215796
-vn -0.655873 -0.216712 0.723075
-vn -0.658803 0.701041 0.272866
-vn -0.771569 -0.550005 0.319590
-vn -0.740257 0.558123 0.374828
-vn -0.658803 -0.701041 0.272866
-vn -0.502091 0.528520 0.684500
-vn -0.520981 -0.825831 0.215796
-vn -0.906522 0.192785 0.375500
-vn -0.713095 -0.701041 0.000000
-vn -0.855159 0.378430 0.354198
-vn -0.925596 0.378430 0.000000
-vn -0.563891 -0.825831 0.000000
-vn -0.981231 0.192785 0.000000
-vn -0.393017 -0.919523 0.000000
-vn -1.000000 0.000000 0.000000
-vn -0.085879 0.995697 0.033967
-vn 0.169530 0.985382 0.015473
-vn -0.206793 -0.978362 0.000000
-vn -0.981231 -0.192785 0.000000
-vn -0.759606 0.649922 0.023621
-vn -0.855159 -0.378430 0.354198
-vn -0.925596 -0.378430 0.000000
-vn -0.713095 0.701041 0.000000
-vn -0.835139 -0.550005 0.000000
-vn -0.835139 0.550005 0.000000
-vn -0.855159 -0.378430 -0.354198
-vn -0.658803 0.701041 -0.272866
-vn -0.771569 -0.550005 -0.319590
-vn -0.771569 0.550005 -0.319590
-vn -0.658803 -0.701041 -0.272866
-vn -0.855159 0.378430 -0.354198
-vn -0.520981 -0.825831 -0.215796
-vn -0.363109 -0.919523 -0.150395
-vn -0.923856 0.000000 -0.382672
-vn -0.495224 0.845058 -0.201483
-vn -0.237465 0.770379 -0.591693
-vn -0.191046 -0.978362 -0.079134
-vn -0.906522 -0.192785 -0.375500
-vn -0.277902 -0.919523 -0.277902
-vn -0.906522 0.192785 -0.375500
-vn -0.707083 0.000000 -0.707083
-vn -0.073366 0.996765 -0.032228
-vn -0.277902 0.919523 -0.277902
-vn -0.146214 -0.978362 -0.146214
-vn -0.693838 -0.192785 -0.693838
-vn -0.520981 0.825831 -0.215796
-vn -0.398724 0.825831 -0.398724
-vn -0.654500 -0.378430 -0.654500
-vn -0.504227 0.701041 -0.504227
-vn -0.590533 -0.550005 -0.590533
-vn -0.590533 0.550005 -0.590533
-vn -0.504227 -0.701041 -0.504227
-vn -0.654500 0.378430 -0.654500
-vn -0.398724 -0.825831 -0.398724
-vn -0.693838 0.192785 -0.693838
-vn -0.272866 -0.701041 -0.658803
-vn -0.354198 0.378430 -0.855159
-vn -0.215796 -0.825831 -0.520981
-vn -0.375500 0.192785 -0.906522
-vn -0.150395 -0.919523 -0.363109
-vn -0.382672 0.000000 -0.923856
-vn -0.051729 0.997223 -0.053529
-vn -0.150395 0.919523 -0.363109
-vn -0.079134 -0.978362 -0.191046
-vn -0.375500 -0.192785 -0.906522
-vn -0.215796 0.825831 -0.520981
-vn -0.354198 -0.378430 -0.855159
-vn -0.272866 0.701041 -0.658803
-vn -0.319590 -0.550005 -0.771569
-vn -0.319590 0.550005 -0.771569
-vn 0.007691 0.999298 0.035981
-vn 0.000000 -0.999969 0.000000
-vn -0.026765 0.997467 -0.065828
-s 1
-f 13/1/1 12/2/2 27/3/3
-f 7/4/4 6/5/5 21/6/6
-f 14/7/7 13/1/1 28/8/8
-f 8/9/9 7/4/4 22/10/10
-f 2/11/11 1/12/12 16/13/13
-f 15/14/14 14/7/7 29/15/15
-f 9/16/16 8/9/9 23/17/17
-f 3/18/18 2/11/11 17/19/19
-f 10/20/20 9/16/16 24/21/21
-f 4/22/22 3/18/18 18/23/23
-f 11/24/24 10/20/20 25/25/25
-f 5/26/26 4/22/22 19/27/27
-f 12/2/2 11/24/24 26/28/28
-f 6/5/5 5/26/26 20/29/29
-f 30/30/30 29/15/15 45/31/31
-f 24/21/21 23/17/17 39/32/32
-f 18/23/23 17/19/19 33/33/33
-f 25/25/25 24/21/21 40/34/34
-f 19/27/27 18/23/23 34/35/35
-f 26/28/28 25/25/25 41/36/36
-f 20/29/29 19/27/27 35/37/37
-f 27/3/3 26/28/28 42/38/38
-f 21/6/6 20/29/29 36/39/39
-f 28/8/8 27/3/3 43/40/40
-f 22/10/10 21/6/6 37/41/41
-f 29/15/15 28/8/8 44/42/42
-f 23/17/17 22/10/10 38/43/43
-f 17/19/19 16/13/13 32/44/44
-f 44/42/42 43/40/40 58/45/45
-f 38/43/43 37/41/41 52/46/46
-f 45/31/31 44/42/42 59/47/47
-f 39/32/32 38/43/43 53/48/48
-f 33/33/33 32/44/44 47/49/49
-f 46/50/50 45/31/31 60/51/51
-f 40/34/34 39/32/32 54/52/52
-f 34/35/35 33/33/33 48/53/53
-f 41/36/36 40/34/34 55/54/54
-f 35/37/37 34/35/35 49/55/55
-f 42/38/38 41/36/36 56/56/56
-f 36/39/39 35/37/37 50/57/57
-f 43/40/40 42/38/38 57/58/58
-f 37/41/41 36/39/39 51/59/59
-f 57/58/58 56/56/56 71/60/60
-f 51/59/59 50/57/57 65/61/61
-f 58/45/45 57/58/58 72/62/62
-f 52/46/46 51/59/59 66/63/63
-f 59/47/47 58/45/45 73/64/64
-f 53/48/48 52/46/46 67/65/65
-f 60/51/51 59/47/47 74/66/66
-f 54/52/52 53/48/48 68/67/67
-f 48/53/53 47/49/49 63/68/68
-f 61/69/69 60/51/51 75/70/70
-f 55/54/54 54/52/52 69/71/71
-f 49/55/55 48/53/53 63/68/68
-f 56/56/56 55/54/54 70/72/72
-f 50/57/57 49/55/55 64/73/73
-f 76/74/74 75/70/70 90/75/75
-f 70/72/72 69/71/71 84/76/76
-f 64/73/73 63/68/68 78/77/77
-f 71/60/60 70/72/72 85/78/78
-f 65/61/61 64/73/73 79/79/79
-f 72/62/62 71/60/60 86/80/80
-f 66/63/63 65/61/61 80/81/81
-f 73/64/64 72/62/62 87/82/82
-f 67/65/65 66/63/63 81/83/83
-f 74/66/66 73/64/64 88/84/84
-f 68/67/67 67/65/65 82/85/85
-f 75/70/70 74/66/66 89/86/86
-f 69/71/71 68/67/67 83/87/87
-f 63/68/68 62/88/88 77/89/89
-f 89/86/86 88/84/84 103/90/90
-f 83/87/87 82/85/85 97/91/91
-f 90/75/75 89/86/86 104/92/92
-f 84/76/76 83/87/87 98/93/93
-f 78/77/77 77/89/89 92/94/94
-f 91/95/95 90/75/75 105/96/96
-f 85/78/78 84/76/76 100/97/97
-f 79/79/79 78/77/77 93/98/98
-f 86/80/80 85/78/78 100/97/97
-f 80/81/81 79/79/79 94/99/99
-f 87/82/82 86/80/80 101/100/100
-f 81/83/83 80/81/81 96/101/101
-f 88/84/84 87/82/82 102/102/102
-f 82/85/85 81/83/83 97/91/91
-f 102/102/102 101/100/100 116/103/103
-f 96/101/101 95/104/104 110/105/105
-f 103/90/90 102/102/102 117/106/106
-f 97/91/91 96/101/101 111/107/107
-f 104/92/92 103/90/90 118/108/108
-f 98/93/93 97/91/91 113/109/109
-f 105/96/96 104/92/92 119/110/110
-f 99/111/111 98/93/93 113/109/109
-f 93/98/98 92/94/94 107/112/112
-f 106/113/113 105/96/96 120/114/114
-f 100/97/97 99/111/111 115/115/115
-f 94/99/99 93/98/98 108/116/116
-f 101/100/100 100/97/97 115/115/115
-f 95/104/104 94/99/99 109/117/117
-f 108/116/116 107/112/112 122/118/118
-f 121/119/119 120/114/114 135/120/120
-f 115/115/115 114/121/121 129/122/122
-f 109/117/117 108/116/116 123/123/123
-f 116/103/103 115/115/115 131/124/124
-f 110/105/105 109/117/117 124/125/125
-f 117/106/106 116/103/103 131/124/124
-f 111/107/107 110/105/105 125/126/126
-f 118/108/108 117/106/106 132/127/127
-f 112/128/128 111/107/107 126/129/129
-f 119/110/110 118/108/108 133/130/130
-f 113/109/109 112/128/128 128/131/131
-f 120/114/114 119/110/110 134/132/132
-f 114/121/121 113/109/109 129/122/122
-f 127/133/133 126/129/129 141/134/134
-f 134/132/132 133/130/130 149/135/135
-f 128/131/131 127/133/133 143/136/136
-f 135/120/120 134/132/132 150/137/137
-f 129/122/122 128/131/131 144/138/138
-f 123/123/123 122/118/118 138/139/139
-f 136/140/140 135/120/120 151/141/141
-f 130/142/142 129/122/122 145/143/143
-f 124/125/125 123/123/123 139/144/144
-f 131/124/124 130/142/142 146/145/145
-f 125/126/126 124/125/125 140/146/146
-f 132/127/127 131/124/124 147/147/147
-f 126/129/129 125/126/126 140/146/146
-f 133/130/130 132/127/127 148/148/148
-f 146/145/145 145/143/143 160/149/149
-f 140/146/146 139/144/144 155/150/150
-f 147/147/147 146/145/145 162/151/151
-f 141/134/134 140/146/146 155/150/150
-f 148/148/148 147/147/147 163/152/152
-f 142/153/153 141/134/134 156/154/154
-f 149/135/135 148/148/148 164/155/155
-f 143/136/136 142/153/153 158/156/156
-f 150/137/137 149/135/135 165/157/157
-f 144/138/138 143/136/136 159/158/158
-f 138/139/139 137/159/159 153/160/160
-f 151/161/141 150/137/137 166/162/161
-f 145/143/143 144/138/138 160/149/149
-f 139/144/144 138/139/139 154/163/162
-f 165/157/157 164/155/155 180/164/163
-f 159/158/158 158/156/156 174/165/164
-f 153/160/160 152/166/165 168/167/166
-f 166/162/161 165/157/157 181/168/167
-f 160/149/149 159/158/158 175/169/168
-f 154/163/162 153/160/160 169/170/169
-f 161/171/170 160/149/149 175/169/168
-f 155/150/150 154/163/162 170/172/171
-f 162/151/151 161/171/170 177/173/172
-f 156/154/154 155/150/150 171/174/173
-f 163/152/152 162/151/151 178/175/174
-f 157/176/175 156/154/154 171/174/173
-f 164/155/155 163/152/152 179/177/176
-f 158/156/156 157/176/175 173/178/177
-f 178/175/174 177/173/172 193/179/178
-f 172/180/179 171/174/173 187/181/180
-f 179/177/176 178/175/174 194/182/181
-f 173/178/177 172/180/179 188/183/182
-f 180/164/163 179/177/176 195/184/183
-f 174/165/164 173/178/177 189/185/184
-f 168/167/166 167/186/185 182/187/186
-f 181/168/167 180/164/163 196/188/187
-f 175/169/168 174/165/164 190/189/188
-f 169/170/169 168/167/166 184/190/189
-f 176/191/190 175/169/168 191/192/191
-f 170/172/171 169/170/169 185/193/192
-f 177/173/172 176/191/190 192/194/193
-f 171/174/173 170/172/171 186/195/194
-f 191/192/191 190/189/188 206/196/195
-f 185/193/192 184/190/189 200/197/196
-f 192/194/193 191/192/191 207/198/197
-f 186/195/194 185/193/192 201/199/198
-f 193/179/178 192/194/193 208/200/199
-f 187/181/180 186/195/194 202/201/200
-f 194/182/181 193/179/178 209/202/201
-f 188/183/182 187/181/180 202/201/200
-f 195/184/183 194/182/181 210/203/202
-f 189/185/184 188/183/182 204/204/203
-f 183/205/204 182/187/186 198/206/205
-f 196/188/187 195/184/183 211/207/206
-f 190/189/188 189/185/184 205/208/207
-f 184/190/189 183/205/204 198/206/205
-f 210/203/202 209/202/201 226/209/208
-f 204/204/203 203/210/209 220/211/210
-f 198/206/205 197/212/211 214/213/212
-f 211/207/206 210/203/202 227/214/213
-f 205/208/207 204/204/203 221/215/214
-f 199/216/215 198/206/205 215/217/216
-f 206/196/195 205/208/207 222/218/217
-f 200/197/196 199/216/215 216/219/218
-f 207/198/197 206/196/195 223/220/219
-f 201/199/198 200/197/196 217/221/220
-f 208/200/199 207/198/197 224/222/221
-f 202/201/200 201/199/198 218/223/222
-f 209/202/201 208/200/199 225/224/223
-f 203/210/209 202/201/200 219/225/224
-f 224/222/221 223/220/219 239/226/225
-f 218/223/222 217/221/220 233/227/226
-f 225/224/223 224/222/221 240/228/227
-f 219/225/224 218/223/222 234/229/228
-f 226/209/208 225/224/223 241/230/229
-f 220/211/210 219/225/224 235/231/230
-f 214/213/212 213/232/231 229/233/232
-f 227/214/213 226/209/208 242/234/233
-f 221/215/214 220/211/210 236/235/234
-f 215/217/216 214/213/212 230/236/235
-f 222/218/217 221/215/214 237/237/236
-f 216/219/218 215/217/216 231/238/237
-f 223/220/219 222/218/217 238/239/238
-f 217/221/220 216/219/218 232/240/239
-f 1/12/12 212/241/240 16/13/13
-f 31/242/241 15/14/14 30/30/30
-f 31/242/241 30/30/30 46/50/50
-f 16/13/13 212/241/240 32/44/44
-f 32/44/44 212/241/240 47/49/49
-f 31/242/241 46/50/50 61/69/69
-f 47/49/49 212/241/240 62/88/88
-f 31/242/241 61/69/69 76/74/74
-f 31/242/241 76/74/74 91/95/95
-f 62/88/88 212/241/240 77/89/89
-f 77/89/89 212/241/240 92/94/94
-f 31/242/241 91/95/95 106/113/113
-f 92/94/94 212/241/240 107/112/112
-f 31/242/241 106/113/113 121/119/119
-f 31/242/241 121/119/119 136/140/140
-f 107/112/112 212/241/240 122/118/118
-f 122/118/118 212/241/240 137/159/159
-f 31/242/241 136/140/140 151/141/141
-f 137/159/159 212/241/240 152/166/165
-f 31/242/241 151/141/141 166/243/161
-f 31/242/241 166/243/161 181/244/167
-f 152/166/165 212/241/240 167/186/185
-f 167/186/185 212/241/240 182/187/186
-f 31/242/241 181/244/167 196/245/187
-f 31/242/241 196/245/187 211/246/206
-f 182/187/186 212/241/240 197/212/211
-f 31/242/241 211/246/206 227/247/213
-f 197/212/211 212/241/240 213/232/231
-f 213/232/231 212/241/240 228/248/242
-f 31/242/241 227/247/213 242/249/233
-f 31/242/241 242/249/233 15/14/14
-f 237/237/236 236/235/234 10/250/20
-f 231/238/237 230/236/235 4/251/22
-f 238/239/238 237/237/236 10/250/20
-f 232/240/239 231/238/237 5/252/26
-f 239/226/225 238/239/238 11/253/24
-f 233/227/226 232/240/239 6/254/5
-f 240/255/227 239/256/225 13/1/1
-f 234/229/228 233/227/226 7/257/4
-f 228/248/242 212/241/240 1/12/12
-f 241/258/229 240/255/227 14/7/7
-f 235/231/230 234/229/228 8/259/9
-f 229/233/232 228/248/242 2/260/11
-f 242/249/233 241/258/229 15/14/14
-f 236/235/234 235/231/230 9/261/16
-f 230/236/235 229/233/232 3/262/18
-f 28/8/8 13/1/1 27/3/3
-f 22/10/10 7/4/4 21/6/6
-f 29/15/15 14/7/7 28/8/8
-f 23/17/17 8/9/9 22/10/10
-f 17/19/19 2/11/11 16/13/13
-f 30/30/30 15/14/14 29/15/15
-f 24/21/21 9/16/16 23/17/17
-f 18/23/23 3/18/18 17/19/19
-f 25/25/25 10/20/20 24/21/21
-f 19/27/27 4/22/22 18/23/23
-f 26/28/28 11/24/24 25/25/25
-f 20/29/29 5/26/26 19/27/27
-f 27/3/3 12/2/2 26/28/28
-f 21/6/6 6/5/5 20/29/29
-f 46/50/50 30/30/30 45/31/31
-f 40/34/34 24/21/21 39/32/32
-f 34/35/35 18/23/23 33/33/33
-f 41/36/36 25/25/25 40/34/34
-f 35/37/37 19/27/27 34/35/35
-f 42/38/38 26/28/28 41/36/36
-f 36/39/39 20/29/29 35/37/37
-f 43/40/40 27/3/3 42/38/38
-f 37/41/41 21/6/6 36/39/39
-f 44/42/42 28/8/8 43/40/40
-f 38/43/43 22/10/10 37/41/41
-f 45/31/31 29/15/15 44/42/42
-f 39/32/32 23/17/17 38/43/43
-f 33/33/33 17/19/19 32/44/44
-f 59/47/47 44/42/42 58/45/45
-f 53/48/48 38/43/43 52/46/46
-f 60/51/51 45/31/31 59/47/47
-f 54/52/52 39/32/32 53/48/48
-f 48/53/53 33/33/33 47/49/49
-f 61/69/69 46/50/50 60/51/51
-f 55/54/54 40/34/34 54/52/52
-f 49/55/55 34/35/35 48/53/53
-f 56/56/56 41/36/36 55/54/54
-f 50/57/57 35/37/37 49/55/55
-f 57/58/58 42/38/38 56/56/56
-f 51/59/59 36/39/39 50/57/57
-f 58/45/45 43/40/40 57/58/58
-f 52/46/46 37/41/41 51/59/59
-f 72/62/62 57/58/58 71/60/60
-f 66/63/63 51/59/59 65/61/61
-f 73/64/64 58/45/45 72/62/62
-f 67/65/65 52/46/46 66/63/63
-f 74/66/66 59/47/47 73/64/64
-f 68/67/67 53/48/48 67/65/65
-f 75/70/70 60/51/51 74/66/66
-f 69/71/71 54/52/52 68/67/67
-f 47/49/49 62/88/88 63/68/68
-f 76/74/74 61/69/69 75/70/70
-f 70/72/72 55/54/54 69/71/71
-f 64/73/73 49/55/55 63/68/68
-f 71/60/60 56/56/56 70/72/72
-f 65/61/61 50/57/57 64/73/73
-f 91/95/95 76/74/74 90/75/75
-f 85/78/78 70/72/72 84/76/76
-f 79/79/79 64/73/73 78/77/77
-f 86/80/80 71/60/60 85/78/78
-f 80/81/81 65/61/61 79/79/79
-f 87/82/82 72/62/62 86/80/80
-f 81/83/83 66/63/63 80/81/81
-f 88/84/84 73/64/64 87/82/82
-f 82/85/85 67/65/65 81/83/83
-f 89/86/86 74/66/66 88/84/84
-f 83/87/87 68/67/67 82/85/85
-f 90/75/75 75/70/70 89/86/86
-f 84/76/76 69/71/71 83/87/87
-f 78/77/77 63/68/68 77/89/89
-f 104/92/92 89/86/86 103/90/90
-f 98/93/93 83/87/87 97/91/91
-f 105/96/96 90/75/75 104/92/92
-f 99/111/111 84/76/76 98/93/93
-f 93/98/98 78/77/77 92/94/94
-f 106/113/113 91/95/95 105/96/96
-f 84/76/76 99/111/111 100/97/97
-f 94/99/99 79/79/79 93/98/98
-f 101/100/100 86/80/80 100/97/97
-f 95/104/104 80/81/81 94/99/99
-f 102/102/102 87/82/82 101/100/100
-f 80/81/81 95/104/104 96/101/101
-f 103/90/90 88/84/84 102/102/102
-f 81/83/83 96/101/101 97/91/91
-f 117/106/106 102/102/102 116/103/103
-f 111/107/107 96/101/101 110/105/105
-f 118/108/108 103/90/90 117/106/106
-f 112/128/128 97/91/91 111/107/107
-f 119/110/110 104/92/92 118/108/108
-f 97/91/91 112/128/128 113/109/109
-f 120/114/114 105/96/96 119/110/110
-f 114/121/121 99/111/111 113/109/109
-f 108/116/116 93/98/98 107/112/112
-f 121/119/119 106/113/113 120/114/114
-f 99/111/111 114/121/121 115/115/115
-f 109/117/117 94/99/99 108/116/116
-f 116/103/103 101/100/100 115/115/115
-f 110/105/105 95/104/104 109/117/117
-f 123/123/123 108/116/116 122/118/118
-f 136/140/140 121/119/119 135/120/120
-f 130/142/142 115/115/115 129/122/122
-f 124/125/125 109/117/117 123/123/123
-f 115/115/115 130/142/142 131/124/124
-f 125/126/126 110/105/105 124/125/125
-f 132/127/127 117/106/106 131/124/124
-f 126/129/129 111/107/107 125/126/126
-f 133/130/130 118/108/108 132/127/127
-f 127/133/133 112/128/128 126/129/129
-f 134/132/132 119/110/110 133/130/130
-f 112/128/128 127/133/133 128/131/131
-f 135/120/120 120/114/114 134/132/132
-f 113/109/109 128/131/131 129/122/122
-f 142/153/153 127/133/133 141/134/134
-f 133/130/130 148/148/148 149/135/135
-f 127/133/133 142/153/153 143/136/136
-f 134/132/132 149/135/135 150/137/137
-f 128/131/131 143/136/136 144/138/138
-f 122/118/118 137/159/159 138/139/139
-f 135/120/120 150/263/137 151/141/141
-f 129/122/122 144/138/138 145/143/143
-f 123/123/123 138/139/139 139/144/144
-f 130/142/142 145/143/143 146/145/145
-f 124/125/125 139/144/144 140/146/146
-f 131/124/124 146/145/145 147/147/147
-f 141/134/134 126/129/129 140/146/146
-f 132/127/127 147/147/147 148/148/148
-f 161/171/170 146/145/145 160/149/149
-f 139/144/144 154/163/162 155/150/150
-f 146/145/145 161/171/170 162/151/151
-f 156/154/154 141/134/134 155/150/150
-f 147/147/147 162/151/151 163/152/152
-f 157/176/175 142/153/153 156/154/154
-f 148/148/148 163/152/152 164/155/155
-f 142/153/153 157/176/175 158/156/156
-f 149/135/135 164/155/155 165/157/157
-f 143/136/136 158/156/156 159/158/158
-f 137/159/159 152/166/165 153/160/160
-f 150/137/137 165/157/157 166/162/161
-f 144/138/138 159/158/158 160/149/149
-f 138/139/139 153/160/160 154/163/162
-f 164/155/155 179/177/176 180/164/163
-f 158/156/156 173/178/177 174/165/164
-f 152/166/165 167/186/185 168/167/166
-f 165/157/157 180/164/163 181/168/167
-f 159/158/158 174/165/164 175/169/168
-f 153/160/160 168/167/166 169/170/169
-f 176/191/190 161/171/170 175/169/168
-f 154/163/162 169/170/169 170/172/171
-f 161/171/170 176/191/190 177/173/172
-f 155/150/150 170/172/171 171/174/173
-f 162/151/151 177/173/172 178/175/174
-f 172/180/179 157/176/175 171/174/173
-f 163/152/152 178/175/174 179/177/176
-f 157/176/175 172/180/179 173/178/177
-f 177/173/172 192/194/193 193/179/178
-f 171/174/173 186/195/194 187/181/180
-f 178/175/174 193/179/178 194/182/181
-f 172/180/179 187/181/180 188/183/182
-f 179/177/176 194/182/181 195/184/183
-f 173/178/177 188/183/182 189/185/184
-f 183/205/204 168/167/166 182/187/186
-f 180/164/163 195/184/183 196/188/187
-f 174/165/164 189/185/184 190/189/188
-f 168/167/166 183/205/204 184/190/189
-f 175/169/168 190/189/188 191/192/191
-f 169/170/169 184/190/189 185/193/192
-f 176/191/190 191/192/191 192/194/193
-f 170/172/171 185/193/192 186/195/194
-f 190/189/188 205/208/207 206/196/195
-f 184/190/189 199/216/215 200/197/196
-f 191/192/191 206/196/195 207/198/197
-f 185/193/192 200/197/196 201/199/198
-f 192/194/193 207/198/197 208/200/199
-f 186/195/194 201/199/198 202/201/200
-f 193/179/178 208/200/199 209/202/201
-f 203/210/209 188/183/182 202/201/200
-f 194/182/181 209/202/201 210/203/202
-f 188/183/182 203/210/209 204/204/203
-f 182/187/186 197/212/211 198/206/205
-f 195/184/183 210/203/202 211/207/206
-f 189/185/184 204/204/203 205/208/207
-f 199/216/215 184/190/189 198/206/205
-f 209/202/201 225/224/223 226/209/208
-f 203/210/209 219/225/224 220/211/210
-f 197/212/211 213/232/231 214/213/212
-f 210/203/202 226/209/208 227/214/213
-f 204/204/203 220/211/210 221/215/214
-f 198/206/205 214/213/212 215/217/216
-f 205/208/207 221/215/214 222/218/217
-f 199/216/215 215/217/216 216/219/218
-f 206/196/195 222/218/217 223/220/219
-f 200/197/196 216/219/218 217/221/220
-f 207/198/197 223/220/219 224/222/221
-f 201/199/198 217/221/220 218/223/222
-f 208/200/199 224/222/221 225/224/223
-f 202/201/200 218/223/222 219/225/224
-f 223/220/219 238/239/238 239/226/225
-f 217/221/220 232/240/239 233/227/226
-f 224/222/221 239/226/225 240/228/227
-f 218/223/222 233/227/226 234/229/228
-f 225/224/223 240/228/227 241/230/229
-f 219/225/224 234/229/228 235/231/230
-f 213/232/231 228/248/242 229/233/232
-f 226/209/208 241/230/229 242/234/233
-f 220/211/210 235/231/230 236/235/234
-f 214/213/212 229/233/232 230/236/235
-f 221/215/214 236/235/234 237/237/236
-f 215/217/216 230/236/235 231/238/237
-f 222/218/217 237/237/236 238/239/238
-f 216/219/218 231/238/237 232/240/239
-f 236/235/234 9/261/16 10/250/20
-f 230/236/235 3/262/18 4/251/22
-f 11/253/24 238/239/238 10/250/20
-f 231/238/237 4/251/22 5/252/26
-f 12/264/2 239/226/225 11/253/24
-f 232/240/239 5/252/26 6/254/5
-f 239/256/225 12/2/2 13/1/1
-f 233/227/226 6/254/5 7/257/4
-f 240/255/227 13/1/1 14/7/7
-f 234/229/228 7/257/4 8/259/9
-f 228/248/242 1/12/12 2/260/11
-f 241/258/229 14/7/7 15/14/14
-f 235/231/230 8/259/9 9/261/16
-f 229/233/232 2/260/11 3/262/18
diff --git a/examples/qmlbarchart/qml/qmlbarchart/main.qml b/examples/qmlbarchart/qml/qmlbarchart/main.qml
deleted file mode 100644
index f10f98b9..00000000
--- a/examples/qmlbarchart/qml/qmlbarchart/main.qml
+++ /dev/null
@@ -1,205 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Window 2.1
-import QtQuick.Controls 1.0
-import com.digia.QtDataVis3D 1.0
-
-Item {
- id: mainview
- width: 800
- height: 600
- visible: true
-
- Item {
- id: dataView
- width: parent.width - tableView.width
- height: parent.height
- anchors.right: parent.right;
-
- BarDataMapping {
- id: valueMapping
- rowRole: "year"
- columnRole: "month"
- valueRole: "expenses"
- rowCategories: ["2000", "2001", "2002", "2003", "2004"]
- columnCategories: ["Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
- }
-
- ListModel {
- id: dataModel
- ListElement{ year: "2000"; month: "Jan"; expenses: "3"; income: "8" }
- ListElement{ year: "2000"; month: "Feb"; expenses: "8"; income: "14" }
- ListElement{ year: "2000"; month: "Mar"; expenses: "10"; income: "20" }
- ListElement{ year: "2000"; month: "Apr"; expenses: "12"; income: "24" }
- ListElement{ year: "2000"; month: "May"; expenses: "10"; income: "19" }
- ListElement{ year: "2000"; month: "Jun"; expenses: "5"; income: "8" }
- ListElement{ year: "2000"; month: "Jul"; expenses: "1"; income: "4" }
- ListElement{ year: "2000"; month: "Aug"; expenses: "7"; income: "12" }
- ListElement{ year: "2000"; month: "Sep"; expenses: "4"; income: "16" }
- ListElement{ year: "2000"; month: "Oct"; expenses: "22"; income: "33" }
- ListElement{ year: "2000"; month: "Nov"; expenses: "16"; income: "25" }
- ListElement{ year: "2000"; month: "Dec"; expenses: "2"; income: "7" }
-
- ListElement{ year: "2001"; month: "Jan"; expenses: "4"; income: "5" }
- ListElement{ year: "2001"; month: "Feb"; expenses: "4"; income: "7" }
- ListElement{ year: "2001"; month: "Mar"; expenses: "11"; income: "14" }
- ListElement{ year: "2001"; month: "Apr"; expenses: "16"; income: "22" }
- ListElement{ year: "2001"; month: "May"; expenses: "3"; income: "5" }
- ListElement{ year: "2001"; month: "Jun"; expenses: "4"; income: "8" }
- ListElement{ year: "2001"; month: "Jul"; expenses: "7"; income: "9" }
- ListElement{ year: "2001"; month: "Aug"; expenses: "9"; income: "13" }
- ListElement{ year: "2001"; month: "Sep"; expenses: "1"; income: "6" }
- ListElement{ year: "2001"; month: "Oct"; expenses: "14"; income: "25" }
- ListElement{ year: "2001"; month: "Nov"; expenses: "19"; income: "29" }
- ListElement{ year: "2001"; month: "Dec"; expenses: "5"; income: "7" }
-
- ListElement{ year: "2002"; month: "Jan"; expenses: "14"; income: "22" }
- ListElement{ year: "2002"; month: "Feb"; expenses: "5"; income: "7" }
- ListElement{ year: "2002"; month: "Mar"; expenses: "1"; income: "9" }
- ListElement{ year: "2002"; month: "Apr"; expenses: "1"; income: "12" }
- ListElement{ year: "2002"; month: "May"; expenses: "5"; income: "9" }
- ListElement{ year: "2002"; month: "Jun"; expenses: "5"; income: "8" }
- ListElement{ year: "2002"; month: "Jul"; expenses: "3"; income: "7" }
- ListElement{ year: "2002"; month: "Aug"; expenses: "1"; income: "5" }
- ListElement{ year: "2002"; month: "Sep"; expenses: "2"; income: "4" }
- ListElement{ year: "2002"; month: "Oct"; expenses: "10"; income: "13" }
- ListElement{ year: "2002"; month: "Nov"; expenses: "12"; income: "17" }
- ListElement{ year: "2002"; month: "Dec"; expenses: "6"; income: "9" }
-
- ListElement{ year: "2003"; month: "Jan"; expenses: "2"; income: "6" }
- ListElement{ year: "2003"; month: "Feb"; expenses: "4"; income: "8" }
- ListElement{ year: "2003"; month: "Mar"; expenses: "7"; income: "12" }
- ListElement{ year: "2003"; month: "Apr"; expenses: "9"; income: "15" }
- // rest of 2003 missing on purpose, as well as whole of 2004
- }
-
- CategoryAxis {
- id: rowAxis
- categoryLabels: ["2000", "2001", "2002", "2003", "2004"]
- }
- CategoryAxis {
- id: columnAxis
- categoryLabels: ["January", "February", "March", "April", "May", "June",
- "July", "August", "September", "October", "November", "December"]
- }
- ValueAxis {
- id: valueAxis
- min: 0
- max: 35
- labelFormat: "M\u20AC"
- }
- Bars3D {
- id: testchart
- width: dataView.width
- height: dataView.height
- gridVisible: true
- shadowQuality: Bars3D.ShadowNone
- selectionMode: Bars3D.ModeItem
- labelTransparency: Bars3D.TransparencyNone
- rows: 5
- columns: 12
- mapping: valueMapping
- barThickness: Qt.size(0.5, 1.0)
- barSpacing: Qt.size(0.5, 0.5)
- barSpacingRelative: false
- barType: Bars3D.BevelBars
- axisX: rowAxis
- axisY: valueAxis
- axisZ: columnAxis
- }
- }
-
- Component.onCompleted: {
- testchart.data = dataModel
- }
-
- TableView {
- id: tableView
- x: 0
- y: 0
- width: 270
- height: 500
- TableViewColumn{ role: "year" ; title: "Year" ; width: 40 }
- TableViewColumn{ role: "month" ; title: "Month" ; width: 80 }
- TableViewColumn{ role: "expenses" ; title: "Expenses" ; width: 70 }
- TableViewColumn{ role: "income" ; title: "Income" ; width: 60 }
- model: dataModel
- }
-
- Rectangle {
- id: shadowToggle
- color: "#FFFFFF"
- x: 0
- y: tableView.height
- width: tableView.width
- height: 50
-
- TextArea {
- id: shadowButtonText
- text: "Toggle Shadows"
- anchors.fill: parent
- textColor: "#000000"
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (testchart.shadowQuality == Bars3D.ShadowNone) {
- testchart.shadowQuality = Bars3D.ShadowLow;
- shadowButtonText.textColor = "#FFFFFF";
- shadowToggle.color = "#000000";
- } else {
- testchart.shadowQuality = Bars3D.ShadowNone;
- shadowButtonText.textColor = "#000000";
- shadowToggle.color = "#FFFFFF";
- }
- }
- }
- }
- Rectangle {
- id: mappingToggle
- color: "#FFFFFF"
- x: 0
- y: shadowToggle.height + shadowToggle.y
- width: shadowToggle.width
- height: 50
-
- TextArea {
- id: mappingButtonText
- text: "Show Income"
- anchors.fill: parent
- textColor: "#000000"
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (valueMapping.valueRole == "expenses") {
- valueMapping.valueRole = "income"
- mappingButtonText.text = "Show Expenses"
- } else {
- valueMapping.valueRole = "expenses"
- mappingButtonText.text = "Show Income"
- }
- }
- }
- }
-}
diff --git a/examples/qmlbarchart/qmlbarchart.qrc b/examples/qmlbarchart/qmlbarchart.qrc
deleted file mode 100644
index b96401d5..00000000
--- a/examples/qmlbarchart/qmlbarchart.qrc
+++ /dev/null
@@ -1,5 +0,0 @@
-<RCC>
- <qresource prefix="/qml">
- <file alias="main.qml">qml/qmlbarchart/main.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/qmlbars/doc/images/qmlbars-example.png b/examples/qmlbars/doc/images/qmlbars-example.png
new file mode 100644
index 00000000..b23491e9
--- /dev/null
+++ b/examples/qmlbars/doc/images/qmlbars-example.png
Binary files differ
diff --git a/examples/qmlbars/doc/src/qmlbars.qdoc b/examples/qmlbars/doc/src/qmlbars.qdoc
new file mode 100644
index 00000000..185956ea
--- /dev/null
+++ b/examples/qmlbars/doc/src/qmlbars.qdoc
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+/*!
+ \example qmlbars
+ \title Qt Quick 2 Bars Example
+ \ingroup qtdatavisualization_examples
+ \brief Using Bars3D in a QML application.
+
+ The Qt Quick 2 bars example shows how to make a simple 3D bar graph using Bars3D and Qt
+ Quick 2.
+
+ \image qmlbars-example.png
+
+ The interesting thing about this example is remapping the data, so we concentrate on that
+ and skip explaining the basic Bars3D functionality - for more detailed QML example documentation,
+ see \l{Qt Quick 2 Scatter Example}.
+
+ \section1 Data
+
+ The example data is monthly income and expenses of a fictional company over several years.
+ The data is defined in a list model in \c data.qml like this:
+
+ \snippet ../examples/qmlbars/qml/qmlbars/data.qml 0
+ \dots 4
+
+ Each data item has four roles: year, month, income, and expenses. Years and months are natural to
+ map to rows and columns of a bar chart, but we can only show either income or expenses as the value.
+ We choose to default to showing expenses when we initialize the mapping item:
+
+ \snippet ../examples/qmlbars/qml/qmlbars/data.qml 1
+
+ Final piece we need for handling data is the proxy to bring the model and mapping together:
+
+ \snippet ../examples/qmlbars/qml/qmlbars/data.qml 2
+
+ \section1 Custom axis labels
+
+ One interesting tidbit about axes is that we redefine the category labels for column axis in
+ \c axes.qml. This is done because the data contains abbreviated month names, which we don't want
+ to use for our column labels:
+
+ \snippet ../examples/qmlbars/qml/qmlbars/axes.qml 0
+
+ \section1 Using mapping
+
+ In the \c main.qml, we set up the graph and various UI elements. There are three interesting
+ mapping related code blocks we want to highlight here. The first one shows how to change the
+ visualized data from expenses to income, and vice versa, by simply changing the value role on the
+ BarDataMapping item:
+
+ \snippet ../examples/qmlbars/qml/qmlbars/main.qml 0
+
+ The axis change is done because income and expenses have different label format. The same could have
+ been achieved using a single axis and just changing the label format.
+
+ The second interesting block is where we filter some of the rows away from the visualized data:
+
+ \snippet ../examples/qmlbars/qml/qmlbars/main.qml 1
+
+ The filtering is done by setting \c autoRowCategories to false on the BarDataMapping item and defining
+ the row categories explicitly. This way, only the items in specified rows are visualized.
+
+ The third interesting block shows how to get the row and column index of an item if you know the
+ row and column values by using BarDataMapping methods \c rowCategoryIndex() and \c columnCategoryIndex():
+
+ \snippet ../examples/qmlbars/qml/qmlbars/main.qml 2
+*/
diff --git a/examples/qmlmaps/main.cpp b/examples/qmlbars/main.cpp
index b58e66f8..58cd5e32 100644
--- a/examples/qmlmaps/main.cpp
+++ b/examples/qmlbars/main.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -33,10 +33,9 @@ int main(int argc, char *argv[])
viewer.addImportPath(QString::fromLatin1("assets:/qml"));
viewer.engine()->addPluginPath(QString::fromLatin1("%1/../%2").arg(QDir::homePath(),
QString::fromLatin1("lib")));
-#else
- viewer.addImportPath(QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
#endif
+ viewer.setTitle(QStringLiteral("Monthly income/expenses"));
+
viewer.setSource(QUrl("qrc:/qml/main.qml"));
viewer.setResizeMode(QQuickView::SizeRootObjectToView);
viewer.show();
diff --git a/examples/qmlbars/qml/qmlbars/axes.qml b/examples/qmlbars/qml/qmlbars/axes.qml
new file mode 100644
index 00000000..66be99a0
--- /dev/null
+++ b/examples/qmlbars/qml/qmlbars/axes.qml
@@ -0,0 +1,52 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import com.digia.QtDataVisualization 1.0
+
+Item {
+ property alias column: columnAxis
+ property alias expenses: expensesAxis
+ property alias income: incomeAxis
+
+ // For row labels we can use row labels from data proxy, so default axis
+ // suffices for rows.
+
+ // Custom labels for columns, since the data contains abbreviated month names.
+ //! [0]
+ CategoryAxis3D {
+ id: columnAxis
+ categoryLabels: ["January", "February", "March", "April", "May", "June",
+ "July", "August", "September", "October", "November", "December"]
+ }
+ //! [0]
+ ValueAxis3D {
+ id: incomeAxis
+ min: 0
+ max: 35
+ labelFormat: "%.2f M\u20AC"
+ title: "Monthly income"
+ }
+ ValueAxis3D {
+ id: expensesAxis
+ min: 0
+ max: 35
+ labelFormat: "-%.2f M\u20AC"
+ title: "Monthly expenses"
+ }
+}
diff --git a/examples/qmlbars/qml/qmlbars/data.qml b/examples/qmlbars/qml/qmlbars/data.qml
new file mode 100644
index 00000000..ecb05030
--- /dev/null
+++ b/examples/qmlbars/qml/qmlbars/data.qml
@@ -0,0 +1,137 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import com.digia.QtDataVisualization 1.0
+
+Item {
+ property alias mapping: valueMapping
+ property alias model: dataModel
+ property alias proxy: modelProxy
+
+ //! [1]
+ BarDataMapping {
+ id: valueMapping
+ rowRole: "year"
+ columnRole: "month"
+ valueRole: "expenses"
+ }
+ //! [1]
+ //! [2]
+ ItemModelBarDataProxy {
+ id: modelProxy
+ activeMapping: valueMapping
+ itemModel: dataModel
+ }
+ //! [2]
+ //! [0]
+ ListModel {
+ id: dataModel
+ ListElement{ year: "2006"; month: "Jan"; expenses: "4"; income: "5" }
+ ListElement{ year: "2006"; month: "Feb"; expenses: "5"; income: "6" }
+ ListElement{ year: "2006"; month: "Mar"; expenses: "7"; income: "4" }
+ //! [0]
+ ListElement{ year: "2006"; month: "Apr"; expenses: "3"; income: "2" }
+ ListElement{ year: "2006"; month: "May"; expenses: "4"; income: "1" }
+ ListElement{ year: "2006"; month: "Jun"; expenses: "2"; income: "2" }
+ ListElement{ year: "2006"; month: "Jul"; expenses: "1"; income: "3" }
+ ListElement{ year: "2006"; month: "Aug"; expenses: "5"; income: "1" }
+ ListElement{ year: "2006"; month: "Sep"; expenses: "2"; income: "3" }
+ ListElement{ year: "2006"; month: "Oct"; expenses: "5"; income: "2" }
+ ListElement{ year: "2006"; month: "Nov"; expenses: "8"; income: "5" }
+ ListElement{ year: "2006"; month: "Dec"; expenses: "3"; income: "3" }
+
+ ListElement{ year: "2007"; month: "Jan"; expenses: "3"; income: "1" }
+ ListElement{ year: "2007"; month: "Feb"; expenses: "4"; income: "2" }
+ ListElement{ year: "2007"; month: "Mar"; expenses: "12"; income: "4" }
+ ListElement{ year: "2007"; month: "Apr"; expenses: "13"; income: "6" }
+ ListElement{ year: "2007"; month: "May"; expenses: "14"; income: "11" }
+ ListElement{ year: "2007"; month: "Jun"; expenses: "7"; income: "7" }
+ ListElement{ year: "2007"; month: "Jul"; expenses: "6"; income: "4" }
+ ListElement{ year: "2007"; month: "Aug"; expenses: "4"; income: "15" }
+ ListElement{ year: "2007"; month: "Sep"; expenses: "2"; income: "18" }
+ ListElement{ year: "2007"; month: "Oct"; expenses: "29"; income: "25" }
+ ListElement{ year: "2007"; month: "Nov"; expenses: "23"; income: "29" }
+ ListElement{ year: "2007"; month: "Dec"; expenses: "5"; income: "9" }
+
+ ListElement{ year: "2008"; month: "Jan"; expenses: "3"; income: "8" }
+ ListElement{ year: "2008"; month: "Feb"; expenses: "8"; income: "14" }
+ ListElement{ year: "2008"; month: "Mar"; expenses: "10"; income: "20" }
+ ListElement{ year: "2008"; month: "Apr"; expenses: "12"; income: "24" }
+ ListElement{ year: "2008"; month: "May"; expenses: "10"; income: "19" }
+ ListElement{ year: "2008"; month: "Jun"; expenses: "5"; income: "8" }
+ ListElement{ year: "2008"; month: "Jul"; expenses: "1"; income: "4" }
+ ListElement{ year: "2008"; month: "Aug"; expenses: "7"; income: "12" }
+ ListElement{ year: "2008"; month: "Sep"; expenses: "4"; income: "16" }
+ ListElement{ year: "2008"; month: "Oct"; expenses: "22"; income: "33" }
+ ListElement{ year: "2008"; month: "Nov"; expenses: "16"; income: "25" }
+ ListElement{ year: "2008"; month: "Dec"; expenses: "2"; income: "7" }
+
+ ListElement{ year: "2009"; month: "Jan"; expenses: "4"; income: "5" }
+ ListElement{ year: "2009"; month: "Feb"; expenses: "4"; income: "7" }
+ ListElement{ year: "2009"; month: "Mar"; expenses: "11"; income: "14" }
+ ListElement{ year: "2009"; month: "Apr"; expenses: "16"; income: "22" }
+ ListElement{ year: "2009"; month: "May"; expenses: "3"; income: "5" }
+ ListElement{ year: "2009"; month: "Jun"; expenses: "4"; income: "8" }
+ ListElement{ year: "2009"; month: "Jul"; expenses: "7"; income: "9" }
+ ListElement{ year: "2009"; month: "Aug"; expenses: "9"; income: "13" }
+ ListElement{ year: "2009"; month: "Sep"; expenses: "1"; income: "6" }
+ ListElement{ year: "2009"; month: "Oct"; expenses: "14"; income: "25" }
+ ListElement{ year: "2009"; month: "Nov"; expenses: "19"; income: "29" }
+ ListElement{ year: "2009"; month: "Dec"; expenses: "5"; income: "7" }
+
+ ListElement{ year: "2010"; month: "Jan"; expenses: "14"; income: "22" }
+ ListElement{ year: "2010"; month: "Feb"; expenses: "5"; income: "7" }
+ ListElement{ year: "2010"; month: "Mar"; expenses: "1"; income: "9" }
+ ListElement{ year: "2010"; month: "Apr"; expenses: "1"; income: "12" }
+ ListElement{ year: "2010"; month: "May"; expenses: "5"; income: "9" }
+ ListElement{ year: "2010"; month: "Jun"; expenses: "5"; income: "8" }
+ ListElement{ year: "2010"; month: "Jul"; expenses: "3"; income: "7" }
+ ListElement{ year: "2010"; month: "Aug"; expenses: "1"; income: "5" }
+ ListElement{ year: "2010"; month: "Sep"; expenses: "2"; income: "4" }
+ ListElement{ year: "2010"; month: "Oct"; expenses: "10"; income: "13" }
+ ListElement{ year: "2010"; month: "Nov"; expenses: "12"; income: "17" }
+ ListElement{ year: "2010"; month: "Dec"; expenses: "6"; income: "9" }
+
+ ListElement{ year: "2011"; month: "Jan"; expenses: "2"; income: "6" }
+ ListElement{ year: "2011"; month: "Feb"; expenses: "4"; income: "8" }
+ ListElement{ year: "2011"; month: "Mar"; expenses: "7"; income: "12" }
+ ListElement{ year: "2011"; month: "Apr"; expenses: "9"; income: "15" }
+ ListElement{ year: "2011"; month: "May"; expenses: "7"; income: "19" }
+ ListElement{ year: "2011"; month: "Jun"; expenses: "9"; income: "18" }
+ ListElement{ year: "2011"; month: "Jul"; expenses: "13"; income: "17" }
+ ListElement{ year: "2011"; month: "Aug"; expenses: "5"; income: "9" }
+ ListElement{ year: "2011"; month: "Sep"; expenses: "3"; income: "8" }
+ ListElement{ year: "2011"; month: "Oct"; expenses: "13"; income: "15" }
+ ListElement{ year: "2011"; month: "Nov"; expenses: "8"; income: "17" }
+ ListElement{ year: "2011"; month: "Dec"; expenses: "7"; income: "10" }
+
+ ListElement{ year: "2012"; month: "Jan"; expenses: "12"; income: "16" }
+ ListElement{ year: "2012"; month: "Feb"; expenses: "24"; income: "28" }
+ ListElement{ year: "2012"; month: "Mar"; expenses: "27"; income: "22" }
+ ListElement{ year: "2012"; month: "Apr"; expenses: "29"; income: "25" }
+ ListElement{ year: "2012"; month: "May"; expenses: "27"; income: "29" }
+ ListElement{ year: "2012"; month: "Jun"; expenses: "19"; income: "18" }
+ ListElement{ year: "2012"; month: "Jul"; expenses: "13"; income: "17" }
+ ListElement{ year: "2012"; month: "Aug"; expenses: "15"; income: "19" }
+ ListElement{ year: "2012"; month: "Sep"; expenses: "3"; income: "8" }
+ ListElement{ year: "2012"; month: "Oct"; expenses: "3"; income: "6" }
+ ListElement{ year: "2012"; month: "Nov"; expenses: "4"; income: "8" }
+ ListElement{ year: "2012"; month: "Dec"; expenses: "5"; income: "9" }
+ }
+}
diff --git a/examples/qmlbars/qml/qmlbars/main.qml b/examples/qmlbars/qml/qmlbars/main.qml
new file mode 100644
index 00000000..6f44fe63
--- /dev/null
+++ b/examples/qmlbars/qml/qmlbars/main.qml
@@ -0,0 +1,163 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import QtQuick.Controls 1.0
+import com.digia.QtDataVisualization 1.0
+import "."
+
+Item {
+ id: mainview
+ width: 1280
+ height: 1024
+ visible: true
+
+ Data {
+ id: graphData
+ }
+
+ Axes {
+ id: graphAxes
+ }
+
+ Item {
+ id: dataView
+ width: parent.width - tableView.width
+ height: parent.height
+ anchors.right: parent.right;
+
+ Bars3D {
+ id: testGraph
+ width: dataView.width
+ height: dataView.height
+ shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ selectionMode: AbstractGraph3D.SelectionModeItem
+ font.pointSize: 35
+ theme: AbstractGraph3D.ThemeRetro
+ labelStyle: AbstractGraph3D.LabelStyleFromTheme
+ dataProxy: graphData.proxy
+ barThickness: 0.5
+ barSpacing: Qt.size(0.5, 0.5)
+ barSpacingRelative: false
+ scene.activeCamera.cameraPreset: AbstractGraph3D.CameraPresetRight
+ columnAxis: graphAxes.column
+ valueAxis: graphAxes.expenses
+ itemLabelFormat: "@valueTitle for @colLabel, @rowLabel: @valueLabel"
+
+ onSelectedBarPosChanged: {
+ // Set tableView current row to selected bar
+ var rowRole = graphData.proxy.rowLabels[position.x];
+ var colRole = graphData.proxy.columnLabels[position.y];
+ var currentRow = tableView.currentRow
+ if (currentRow === -1 || rowRole !== graphData.model.get(currentRow).year
+ || colRole !== graphData.model.get(currentRow).month) {
+ var totalRows = tableView.rowCount;
+ for (var i = 0; i < totalRows; i++) {
+ var currentRowRole = graphData.model.get(i).year
+ var currentColRole = graphData.model.get(i).month
+ if (currentRowRole === rowRole && currentColRole === colRole) {
+ tableView.currentRow = i
+ break
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Button {
+ id: mappingToggle
+ anchors.bottom: parent.bottom
+ width: tableView.width
+ height: 60
+ text: "Show Income"
+ //! [0]
+ onClicked: {
+ if (graphData.mapping.valueRole === "expenses") {
+ graphData.mapping.valueRole = "income"
+ text = "Show Expenses"
+ testGraph.valueAxis = graphAxes.income
+ } else {
+ graphData.mapping.valueRole = "expenses"
+ text = "Show Income"
+ testGraph.valueAxis = graphAxes.expenses
+ }
+ }
+ //! [0]
+ }
+
+ Button {
+ id: shadowToggle
+ anchors.bottom: mappingToggle.top
+ width: tableView.width
+ height: 60
+ text: "Hide Shadows"
+ onClicked: {
+ if (testGraph.shadowQuality == AbstractGraph3D.ShadowQualityNone) {
+ testGraph.shadowQuality = AbstractGraph3D.ShadowQualityMedium;
+ text = "Hide Shadows"
+ } else {
+ testGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
+ text = "Show Shadows"
+ }
+ }
+ }
+
+ Button {
+ id: dataToggle
+ anchors.bottom: shadowToggle.top
+ width: tableView.width
+ height: 60
+ text: "Show 2010 - 2012"
+ //! [1]
+ onClicked: {
+ if (testGraph.rowAxis.max !== 6) {
+ text = "Show 2010 - 2012"
+ graphData.mapping.autoRowCategories = true
+ } else {
+ text = "Show all years"
+ // Explicitly defining row categories, since we do not want to show data for
+ // all years in the model, just for the selected ones.
+ graphData.mapping.autoRowCategories = false
+ graphData.mapping.rowCategories = ["2010", "2011", "2012"]
+ }
+ }
+ //! [1]
+ }
+
+ TableView {
+ id: tableView
+ x: 0
+ y: 0
+ width: 298
+ height: parent.height - mappingToggle.height - shadowToggle.height - dataToggle.height
+ TableViewColumn{ role: "year" ; title: "Year" ; width: 80 }
+ TableViewColumn{ role: "month" ; title: "Month" ; width: 80 }
+ TableViewColumn{ role: "expenses" ; title: "Expenses" ; width: 60 }
+ TableViewColumn{ role: "income" ; title: "Income" ; width: 60 }
+ model: graphData.model
+
+ //! [2]
+ onCurrentRowChanged: {
+ var rowIndex = graphData.proxy.activeMapping.rowCategoryIndex(graphData.model.get(currentRow).year)
+ var colIndex = graphData.proxy.activeMapping.columnCategoryIndex(graphData.model.get(currentRow).month)
+ testGraph.selectedBarPos = Qt.point(rowIndex, colIndex)
+ }
+ //! [2]
+ }
+}
diff --git a/examples/qmlmaps/qmlmaps.desktop b/examples/qmlbars/qmlbars.desktop
index 25959510..cf59c6b8 100644
--- a/examples/qmlmaps/qmlmaps.desktop
+++ b/examples/qmlbars/qmlbars.desktop
@@ -3,9 +3,9 @@ Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
-Name=qmlmaps
-Exec=/opt/qmlmaps/bin/qmlmaps
-Icon=qmlmaps64
+Name=qmlbars
+Exec=/opt/qmlbars/bin/qmlbars
+Icon=qmlbars64
X-Window-Icon=
X-HildonDesk-ShowInToolbar=true
X-Osso-Type=application/x-executable
diff --git a/examples/qmlmaps/qmlmaps.pro b/examples/qmlbars/qmlbars.pro
index 44963d48..758e7b76 100644
--- a/examples/qmlmaps/qmlmaps.pro
+++ b/examples/qmlbars/qmlbars.pro
@@ -2,28 +2,24 @@
error( "Couldn't find the examples.pri file!" )
}
+QT += widgets
+
# Add more folders to ship with the application, here
-folder_01.source = qml/qmlmaps
+folder_01.source = qml/qmlbars
folder_01.target = qml
DEPLOYMENTFOLDERS = folder_01
# Additional import path used to resolve QML modules in Creator's code model
QML_IMPORT_PATH =
-# If your application uses the Qt Mobility libraries, uncomment the following
-# lines and add the respective components to the MOBILITY variable.
-# CONFIG += mobility
-# MOBILITY +=
-
# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp
-# Installation path
-# target.path =
-
# Please do not modify the following two lines. Required for deployment.
include(qtquick2applicationviewer/qtquick2applicationviewer.pri)
qtcAddDeployment()
-RESOURCES += \
- qmlmaps.qrc
+RESOURCES += qmlbars.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/*
diff --git a/examples/qmlbars/qmlbars.qrc b/examples/qmlbars/qmlbars.qrc
new file mode 100644
index 00000000..7c291fd3
--- /dev/null
+++ b/examples/qmlbars/qmlbars.qrc
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/qml">
+ <file alias="Axes.qml">qml/qmlbars/axes.qml</file>
+ <file alias="Data.qml">qml/qmlbars/data.qml</file>
+ <file alias="main.qml">qml/qmlbars/main.qml</file>
+ </qresource>
+</RCC>
diff --git a/examples/qmlbarchart/qmlbarchart64.png b/examples/qmlbars/qmlbars64.png
index 707d5c4e..707d5c4e 100644
--- a/examples/qmlbarchart/qmlbarchart64.png
+++ b/examples/qmlbars/qmlbars64.png
Binary files differ
diff --git a/examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.cpp
index 10709d7a..10709d7a 100644
--- a/examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.cpp
+++ b/examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.cpp
diff --git a/examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.h
index cf66f140..cf66f140 100644
--- a/examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.h
+++ b/examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.h
diff --git a/examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.pri
index e5f7990f..a071e63d 100644
--- a/examples/qmlbarchart/qtquick2applicationviewer/qtquick2applicationviewer.pri
+++ b/examples/qmlbars/qtquick2applicationviewer/qtquick2applicationviewer.pri
@@ -61,16 +61,6 @@ android-no-sdk {
export($$itempath)
INSTALLS += $$item
}
-
- x86 {
- target.path = /libs/x86
- } else: armeabi-v7a {
- target.path = /libs/armeabi-v7a
- } else {
- target.path = /libs/armeabi
- }
-
- export(target.path)
INSTALLS += target
} else:win32 {
copyCommand =
diff --git a/examples/qmlmaps/floorplan.jpg b/examples/qmlmaps/floorplan.jpg
deleted file mode 100644
index 578d8252..00000000
--- a/examples/qmlmaps/floorplan.jpg
+++ /dev/null
Binary files differ
diff --git a/examples/qmlmaps/qml/qmlmaps/main.qml b/examples/qmlmaps/qml/qmlmaps/main.qml
deleted file mode 100644
index 9a8fa93b..00000000
--- a/examples/qmlmaps/qml/qmlmaps/main.qml
+++ /dev/null
@@ -1,114 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-import QtQuick 2.1
-import QtQuick.Controls 1.0
-import com.digia.QtDataVis3D 1.0
-
-Item {
- id: mainview
- width: 800
- height: 500
- visible: true
- //title: "Noise levels from construction site"
-
- Item {
- id: dataView
- width: parent.width
- height: parent.height - shadowToggle.height
- anchors.bottom: parent.bottom
-
- Image {
- id: testimage
- source: "qrc:/images/floorplan.jpg"
- visible: false
- }
-
- MapDataMapping {
- id: mapMapping
- labelRole: "label"
- valueRole: "value"
- xPosRole: "xPos"
- yPosRole: "yPos"
- }
-
- ListModel {
- id: dataModel
- ListElement{ label: "dB"; value: 76; xPos: 95.0; yPos: 490.0 }
- ListElement{ label: "dB"; value: 88; xPos: 185.0; yPos: 105.0 }
- ListElement{ label: "dB"; value: 85; xPos: 700.0; yPos: 465.0 }
- ListElement{ label: "dB"; value: 92; xPos: 505.0; yPos: 225.0 }
- }
-
- Maps3D {
- id: testmap
- width: dataView.width
- height: dataView.height
- fontSize: 300.0
- mapping: mapMapping
-
- Component.onCompleted: {
- console.log("testmap complete");
- console.log(testimage);
- console.log(testimage.sourceSize);
- setBarSpecs(Qt.vector3d(10.0, 10.0, 10.0));
- setAreaSpecs(Qt.rect(0, 0, testimage.sourceSize.width, testimage.sourceSize.height),
- testimage);
- //setImage(testimage);
- setImage(":/images/floorplan.jpg");
- shadowQuality = Maps3D.ShadowNone
- selectionMode = Maps3D.ModeBar
- labelTransparency = Maps3D.TransparencyNoBackground//.TransparencyFromTheme
- data = dataModel
- }
- }
- }
-
- Component.onCompleted: {
- console.log("mainview complete");
- }
-
- Rectangle {
- id: shadowToggle
- color: "#FFFFFF"
- x: 0
- y: 0
- width: parent.width
- height: 60
-
- TextArea {
- id: buttonText
- text: "Toggle Shadows"
- anchors.fill: parent
- textColor: "#000000"
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (testmap.shadowQuality === Maps3D.ShadowNone) {
- testmap.shadowQuality = Maps3D.ShadowLow;
- buttonText.textColor = "#999999";
- } else {
- testmap.shadowQuality = Maps3D.ShadowNone;
- buttonText.textColor = "#000000";
- }
- }
- }
- }
-}
diff --git a/examples/qmlmaps/qmlmaps.qrc b/examples/qmlmaps/qmlmaps.qrc
deleted file mode 100644
index 81f1f83c..00000000
--- a/examples/qmlmaps/qmlmaps.qrc
+++ /dev/null
@@ -1,8 +0,0 @@
-<RCC>
- <qresource prefix="/images">
- <file>floorplan.jpg</file>
- </qresource>
- <qresource prefix="/qml">
- <file alias="main.qml">qml/qmlmaps/main.qml</file>
- </qresource>
-</RCC>
diff --git a/examples/qmlscatter/doc/images/qmlscatter-example.png b/examples/qmlscatter/doc/images/qmlscatter-example.png
new file mode 100644
index 00000000..039c1efc
--- /dev/null
+++ b/examples/qmlscatter/doc/images/qmlscatter-example.png
Binary files differ
diff --git a/examples/qmlscatter/doc/images/qmlscatter-newproject.png b/examples/qmlscatter/doc/images/qmlscatter-newproject.png
new file mode 100644
index 00000000..b64e6fc6
--- /dev/null
+++ b/examples/qmlscatter/doc/images/qmlscatter-newproject.png
Binary files differ
diff --git a/examples/qmlscatter/doc/src/qmlscatter.qdoc b/examples/qmlscatter/doc/src/qmlscatter.qdoc
index d52798c2..c0d207d8 100644
--- a/examples/qmlscatter/doc/src/qmlscatter.qdoc
+++ b/examples/qmlscatter/doc/src/qmlscatter.qdoc
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -19,11 +19,150 @@
/*!
\example qmlscatter
\title Qt Quick 2 Scatter Example
+ \ingroup qtdatavisualization_examples
+ \brief Using Scatter3D in a QML application.
- The Qt Quick 2 scatter example shows how to make a simple scatter chart visualization using
- Q3DScatter using Qt Quick 2.
+ The Qt Quick 2 scatter example shows how to make a simple scatter graph visualization using
+ Scatter3D and Qt Quick 2.
\image qmlscatter-example.png
- TODO
+ \section1 Creating the application
+
+ The application main is created by creating a new Qt Quick 2 Application project in QtCreator:
+
+ \image qmlscatter-newproject.png
+
+ We'll modify the generated \c main.cpp a bit, as we want to add our \c main.qml file as a
+ resource. We do it by replacing
+
+ \code viewer.setMainQmlFile(QStringLiteral("qml/qmlscatter/main.qml")); \endcode
+
+ with
+
+ \snippet ../examples/qmlscatter/main.cpp 0
+
+ This will help us when deploying the application to Android. We'll also change the application
+ to be shown maximized by replacing
+
+ \code viewer.showExpanded(); \endcode
+
+ with
+
+ \snippet ../examples/qmlscatter/main.cpp 1
+
+ We won't look into that any closer, as we'll change nothing in the generated
+ \c qtquick2applicationviewer files.
+
+ Next we'll create new qml files for data (\c data.qml) and a QtQuick.Controls button
+ we want to modify a bit (\c newbutton.qml), and add them to the resource file, in addition to
+ main.qml:
+
+ \code
+ <RCC>
+ <qresource prefix="/qml">
+ <file alias="main.qml">qml/qmlscatter/main.qml</file>
+ <file alias="Data.qml">qml/qmlscatter/data.qml</file>
+ <file alias="NewButton.qml">qml/qmlscatter/newbutton.qml</file>
+ </qresource>
+ </RCC>
+ \endcode
+
+ Now the base for our application is done, and we can start setting up the graph.
+
+ \section1 Setting up the graph
+
+ Let's start modifying the generated \c {main.qml}. We can remove all previous content from it,
+ as it has nothing we need.
+
+ First we'll import all the QML modules we need:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 0
+
+ The last \c import just imports all the qml files in the same directory as our \c {main.qml},
+ because that's where \c newbutton.qml and \c data.qml are.
+
+ Then we create our main \c Item, call it \c mainView and set it visible:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 1
+
+ Then we'll add another \c Item inside it, and call it \c dataView. This will be the item to hold
+ the \c Scatter3D graph. We'll anchor it to the parent bottom:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 9
+
+ Next we're ready to add the \c Scatter3D graph itself. We'll add it inside the \c dataView and
+ name it \c {scatterGraph}. Let's make it fill the \c {dataView}:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 2
+
+ Now the graph is ready to use, but has no data. It also has the default proxy, axes and visual
+ properties.
+
+ Let's modify some visual properties first by adding the following inside \c {scatterGraph}:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 3
+
+ We changed the font, theme and shadow quality. We're happy with the other visual properties,
+ so we won't change them.
+
+ Then it's time to start feeding the graph some data.
+
+ \section1 Adding data to the graph
+
+ Let's create a \c Data item inside the \c mainView and name it \c {graphData}:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 4
+
+ This is the component that holds our data in \c {data.qml}. It has an \c Item as the main
+ component.
+
+ In the main component we'll add the data itself in a \c ListModel and name it
+ \c {dataModel}:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/data.qml 0
+ \dots
+
+ That itself doesn't do us much good, so we'll create a \c ScatterDataMapping and name it
+ \c {scatterMapping}:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/data.qml 1
+
+ In \c scatterMapping we need to define axis roles to match the roles in the \c ListElement
+ items of the \c {dataModel}.
+
+ We'll still need a data proxy, so we'll create a \c ItemModelScatterDataProxy and call it
+ \c {modelProxy}:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/data.qml 2
+
+ We set \c scatterMapping as the active mapping and \c dataModel as the item model.
+
+ We still need to expose the proxy to be usable from \c {main.qml}. We do this by defining it as
+ an alias in the main data component:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/data.qml 3
+
+ Now we can use the data from \c data.qml with \c scatterGraph in \c {main.qml}. We'll just set
+ \c proxy as the \c dataProxy for the graph:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 5
+
+ We'll set up selection label format and the axes in \c scatterGraph as well:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 6
+
+ After that we'll add a few buttons to the \c mainView to control the graph. We'll only show one
+ as an example:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 7
+
+ Then we'll modify \c dataView to make room for the buttons at the top:
+
+ \snippet ../examples/qmlscatter/qml/qmlscatter/main.qml 8
+ \dots
+
+ And we're done!
+
+ \section1 Example contents
*/
diff --git a/examples/qmlscatter/main.cpp b/examples/qmlscatter/main.cpp
index d48bea3d..cc3fa4c3 100644
--- a/examples/qmlscatter/main.cpp
+++ b/examples/qmlscatter/main.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -33,14 +33,15 @@ int main(int argc, char *argv[])
viewer.addImportPath(QString::fromLatin1("assets:/qml"));
viewer.engine()->addPluginPath(QString::fromLatin1("%1/../%2").arg(QDir::homePath(),
QString::fromLatin1("lib")));
-#else
- viewer.addImportPath(QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
#endif
+ viewer.setTitle(QStringLiteral("QML scatter example"));
+ //! [0]
viewer.setSource(QUrl("qrc:/qml/main.qml"));
+ //! [0]
viewer.setResizeMode(QQuickView::SizeRootObjectToView);
- viewer.setMinimumSize(QSize(640, 480));
- viewer.show();
+ //! [1]
+ viewer.showMaximized();
+ //! [1]
return app.exec();
}
diff --git a/examples/qmlscatter/qml/qmlscatter/data.qml b/examples/qmlscatter/qml/qmlscatter/data.qml
new file mode 100644
index 00000000..37b0dc61
--- /dev/null
+++ b/examples/qmlscatter/qml/qmlscatter/data.qml
@@ -0,0 +1,1109 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import com.digia.QtDataVisualization 1.0
+
+Item {
+ //! [3]
+ property alias proxy: modelProxy
+ //! [3]
+
+ //! [1]
+ ScatterDataMapping {
+ id: scatterMapping
+ xPosRole: "xPos"
+ yPosRole: "yPos"
+ zPosRole: "zPos"
+ }
+ //! [1]
+
+ //! [2]
+ ItemModelScatterDataProxy {
+ id: modelProxy
+ activeMapping: scatterMapping
+ itemModel: dataModel
+ }
+ //! [2]
+
+ //! [0]
+ ListModel {
+ id: dataModel
+ ListElement{ xPos: -10.0; yPos: 5.0; zPos: -5.0 }
+ //! [0]
+ ListElement{ xPos: -9.0; yPos: 3.0; zPos: -4.5 }
+ ListElement{ xPos: -8.5; yPos: 4.1; zPos: -4.0 }
+ ListElement{ xPos: -8.0; yPos: 4.75; zPos: -3.9 }
+ ListElement{ xPos: -9.5; yPos: 4.9; zPos: -4.2 }
+ ListElement{ xPos: -9.9; yPos: 3.42; zPos: -3.5 }
+ ListElement{ xPos: -7.8; yPos: 3.1; zPos: -4.9 }
+ ListElement{ xPos: -7.3; yPos: 2.91; zPos: -4.1 }
+ ListElement{ xPos: -7.1 ; yPos: 3.68 ; zPos: -4.52 }
+ ListElement{ xPos: -8.8 ; yPos: 2.96 ; zPos: -3.6 }
+ ListElement{ xPos: -6.94 ; yPos: 2.4 ; zPos: -2.92 }
+ ListElement{ xPos: -9.02 ; yPos: 4.74 ; zPos: -4.18 }
+ ListElement{ xPos: -9.54 ; yPos: 3.1 ; zPos: -3.8 }
+ ListElement{ xPos: -6.86 ; yPos: 3.66 ; zPos: -3.58 }
+ ListElement{ xPos: -8.16 ; yPos: 1.82 ; zPos: -4.64 }
+ ListElement{ xPos: -7.4 ; yPos: 3.18 ; zPos: -4.22 }
+ ListElement{ xPos: -7.9 ; yPos: 3.06 ; zPos: -4.3 }
+ ListElement{ xPos: -8.98 ; yPos: 2.64 ; zPos: -4.44 }
+ ListElement{ xPos: -6.36 ; yPos: 3.96 ; zPos: -4.38 }
+ ListElement{ xPos: -7.18 ; yPos: 3.32 ; zPos: -4.04 }
+ ListElement{ xPos: -7.9 ; yPos: 3.4 ; zPos: -2.78 }
+ ListElement{ xPos: -7.4 ; yPos: 3.12 ; zPos: -3.1 }
+ ListElement{ xPos: -7.54 ; yPos: 2.8 ; zPos: -3.68 }
+
+ ListElement{ xPos: 2.25 ; yPos: 1.36 ; zPos: -1.3 }
+ ListElement{ xPos: -2 ; yPos: -0.08 ; zPos: 1 }
+ ListElement{ xPos: 2.65 ; yPos: -1.2 ; zPos: 2.7 }
+ ListElement{ xPos: -2.55 ; yPos: 3.48 ; zPos: -0.45 }
+ ListElement{ xPos: -3.85 ; yPos: 0.2 ; zPos: 0.5 }
+ ListElement{ xPos: 2.85 ; yPos: 1.32 ; zPos: 1.05 }
+ ListElement{ xPos: -0.4 ; yPos: -2.36 ; zPos: -1.6 }
+ ListElement{ xPos: 1.5 ; yPos: 0.36 ; zPos: -0.55 }
+ ListElement{ xPos: 0.25 ; yPos: 0.12 ; zPos: -0.75 }
+ ListElement{ xPos: -2.45 ; yPos: -0.72 ; zPos: -1.1 }
+ ListElement{ xPos: 4.1 ; yPos: 1.92 ; zPos: -0.95 }
+ ListElement{ xPos: 2.05 ; yPos: 0.64 ; zPos: -0.1 }
+ ListElement{ xPos: 0.25 ; yPos: 0.8 ; zPos: 3.05 }
+ ListElement{ xPos: 1.5 ; yPos: 0.24 ; zPos: 2.25 }
+ ListElement{ xPos: 1.15 ; yPos: -0.4 ; zPos: 0.8 }
+ ListElement{ xPos: -0.05 ; yPos: 0.12 ; zPos: 0.25 }
+ ListElement{ xPos: 0.9 ; yPos: -0.48 ; zPos: -3.2 }
+ ListElement{ xPos: 3.55 ; yPos: -1.04 ; zPos: -0.95 }
+ ListElement{ xPos: -2.4 ; yPos: -0.96 ; zPos: -0.65 }
+ ListElement{ xPos: 4.25 ; yPos: 0.16 ; zPos: 2.05 }
+ ListElement{ xPos: -0.6 ; yPos: 1 ; zPos: -0.2 }
+ ListElement{ xPos: 0 ; yPos: -0.84 ; zPos: -0.95 }
+ ListElement{ xPos: -4.2 ; yPos: 1.44 ; zPos: 0.85 }
+ ListElement{ xPos: -1.5 ; yPos: -1.2 ; zPos: -1.5 }
+ ListElement{ xPos: -3.35 ; yPos: -1.96 ; zPos: 1.8 }
+ ListElement{ xPos: -2.75 ; yPos: -0.96 ; zPos: -1.2 }
+ ListElement{ xPos: -2.45 ; yPos: 0.28 ; zPos: -4.55 }
+ ListElement{ xPos: 2.7 ; yPos: -1.4 ; zPos: -0.65 }
+ ListElement{ xPos: 2.7 ; yPos: 2.2 ; zPos: -2.4 }
+ ListElement{ xPos: -0.8 ; yPos: -2.04 ; zPos: 3.75 }
+ ListElement{ xPos: -1 ; yPos: -1.84 ; zPos: 2.35 }
+ ListElement{ xPos: -3.25 ; yPos: -1.6 ; zPos: -4.4 }
+ ListElement{ xPos: -0.35 ; yPos: -0.56 ; zPos: -1.75 }
+ ListElement{ xPos: -0.8 ; yPos: -0.28 ; zPos: -0.05 }
+ ListElement{ xPos: 4.75 ; yPos: -1.48 ; zPos: -2.45 }
+ ListElement{ xPos: 4.35 ; yPos: 1.4 ; zPos: 0.8 }
+ ListElement{ xPos: -3.2 ; yPos: 2 ; zPos: 0.5 }
+ ListElement{ xPos: 2 ; yPos: 1.92 ; zPos: 0.55 }
+ ListElement{ xPos: -0.45 ; yPos: 0.68 ; zPos: -0.8 }
+ ListElement{ xPos: -2.7 ; yPos: 2 ; zPos: -2.4 }
+ ListElement{ xPos: -1.65 ; yPos: 1.32 ; zPos: -2.05 }
+ ListElement{ xPos: -1.6 ; yPos: 1.8 ; zPos: -3.65 }
+ ListElement{ xPos: -1.2 ; yPos: -0.72 ; zPos: 0.85 }
+ ListElement{ xPos: 1.4 ; yPos: 1.08 ; zPos: 2.1 }
+ ListElement{ xPos: -3.9 ; yPos: -1.16 ; zPos: -0.85 }
+ ListElement{ xPos: 3.15 ; yPos: 0.12 ; zPos: -0.95 }
+ ListElement{ xPos: -1.35 ; yPos: -2.64 ; zPos: -0.5 }
+ ListElement{ xPos: -4.15 ; yPos: 1.28 ; zPos: -4.4 }
+ ListElement{ xPos: -2 ; yPos: 2.48 ; zPos: -0.15 }
+ ListElement{ xPos: -3.4 ; yPos: 0.6 ; zPos: 0 }
+ ListElement{ xPos: -1.5 ; yPos: -0.96 ; zPos: 2.35 }
+ ListElement{ xPos: -0.75 ; yPos: 1.16 ; zPos: -0.75 }
+ ListElement{ xPos: -0.85 ; yPos: 0.64 ; zPos: -1.75 }
+ ListElement{ xPos: 0.85 ; yPos: 0.48 ; zPos: 2.9 }
+ ListElement{ xPos: 4.05 ; yPos: 3.24 ; zPos: -0.1 }
+ ListElement{ xPos: 0.65 ; yPos: 0.84 ; zPos: 0.3 }
+ ListElement{ xPos: -2.1 ; yPos: 0.92 ; zPos: -2.75 }
+ ListElement{ xPos: -0.65 ; yPos: 0.16 ; zPos: 1.6 }
+ ListElement{ xPos: -1.8 ; yPos: -1.48 ; zPos: -2.15 }
+ ListElement{ xPos: -1.6 ; yPos: 2.96 ; zPos: 1.85 }
+ ListElement{ xPos: -0.75 ; yPos: 0.28 ; zPos: -0.75 }
+ ListElement{ xPos: 2.2 ; yPos: 1.16 ; zPos: 2.65 }
+ ListElement{ xPos: 2.6 ; yPos: 2.92 ; zPos: -0.2 }
+ ListElement{ xPos: -1.65 ; yPos: 3.28 ; zPos: 2.5 }
+ ListElement{ xPos: -0.5 ; yPos: 2.52 ; zPos: -1.15 }
+ ListElement{ xPos: -1.85 ; yPos: 0.52 ; zPos: -2 }
+ ListElement{ xPos: 0.15 ; yPos: -2.36 ; zPos: -0.5 }
+ ListElement{ xPos: -3.9 ; yPos: 0.28 ; zPos: -0.25 }
+ ListElement{ xPos: 0.1 ; yPos: -3.88 ; zPos: -0.7 }
+ ListElement{ xPos: -1 ; yPos: -1.96 ; zPos: 0.95 }
+ ListElement{ xPos: -0.3 ; yPos: -3.52 ; zPos: -1.45 }
+ ListElement{ xPos: 3.2 ; yPos: -2.56 ; zPos: 2.5 }
+ ListElement{ xPos: 0 ; yPos: -2.44 ; zPos: 1.35 }
+ ListElement{ xPos: 1.45 ; yPos: -1.96 ; zPos: 0.1 }
+ ListElement{ xPos: 3.55 ; yPos: -2.16 ; zPos: 1.75 }
+ ListElement{ xPos: 2.8 ; yPos: -0.72 ; zPos: -0.3 }
+ ListElement{ xPos: -1.65 ; yPos: -0.6 ; zPos: 0.25 }
+ ListElement{ xPos: -4.35 ; yPos: -1.32 ; zPos: -2.3 }
+ ListElement{ xPos: 2.75 ; yPos: -1.88 ; zPos: 1.7 }
+ ListElement{ xPos: 2.75 ; yPos: -0.6 ; zPos: 2.45 }
+ ListElement{ xPos: 0.15 ; yPos: -0.88 ; zPos: -0.2 }
+ ListElement{ xPos: 0.15 ; yPos: 0.04 ; zPos: -0.1 }
+ ListElement{ xPos: -1.2 ; yPos: -2.92 ; zPos: -3 }
+ ListElement{ xPos: -0.7 ; yPos: 0.16 ; zPos: 3.5 }
+ ListElement{ xPos: -1.8 ; yPos: -2.4 ; zPos: 0.2 }
+ ListElement{ xPos: 1.25 ; yPos: 2.64 ; zPos: 1.65 }
+ ListElement{ xPos: -0.65 ; yPos: 1.32 ; zPos: -0.55 }
+ ListElement{ xPos: 3.85 ; yPos: 2.32 ; zPos: -1 }
+ ListElement{ xPos: 1.65 ; yPos: -2.28 ; zPos: 0.95 }
+ ListElement{ xPos: -2.45 ; yPos: -2.96 ; zPos: 3.45 }
+ ListElement{ xPos: -1.75 ; yPos: 0.36 ; zPos: 1.6 }
+ ListElement{ xPos: 1.1 ; yPos: -0.84 ; zPos: 0.35 }
+ ListElement{ xPos: -1.55 ; yPos: 1.6 ; zPos: -3.1 }
+ ListElement{ xPos: 0.4 ; yPos: -1.36 ; zPos: -1.55 }
+ ListElement{ xPos: -3.95 ; yPos: 0.2 ; zPos: 3.7 }
+ ListElement{ xPos: -1.8 ; yPos: -0.24 ; zPos: 2.2 }
+ ListElement{ xPos: -0.45 ; yPos: 1.64 ; zPos: 1.35 }
+ ListElement{ xPos: -0.6 ; yPos: -0.72 ; zPos: 2.5 }
+ ListElement{ xPos: -1.2 ; yPos: -3.04 ; zPos: -1.55 }
+ ListElement{ xPos: -0.95 ; yPos: 1.48 ; zPos: 0.95 }
+ ListElement{ xPos: 1.7 ; yPos: -1.36 ; zPos: 2.15 }
+ ListElement{ xPos: -3.9 ; yPos: -0.32 ; zPos: -2.45 }
+ ListElement{ xPos: 2.95 ; yPos: 3.12 ; zPos: -2.4 }
+ ListElement{ xPos: 3.55 ; yPos: -1.48 ; zPos: 0.15 }
+ ListElement{ xPos: -1.4 ; yPos: 3.24 ; zPos: 0.7 }
+ ListElement{ xPos: -3.3 ; yPos: -0.8 ; zPos: 0 }
+ ListElement{ xPos: 1.15 ; yPos: 0.36 ; zPos: -2.7 }
+ ListElement{ xPos: 0.4 ; yPos: 0.12 ; zPos: 1.35 }
+ ListElement{ xPos: 1.9 ; yPos: -3.32 ; zPos: -0.75 }
+ ListElement{ xPos: 0.4 ; yPos: -0.2 ; zPos: -2.4 }
+ ListElement{ xPos: 0.55 ; yPos: 1.56 ; zPos: 2.25 }
+ ListElement{ xPos: 4.35 ; yPos: -0.96 ; zPos: -0.7 }
+ ListElement{ xPos: 3.35 ; yPos: -1.04 ; zPos: -0.85 }
+ ListElement{ xPos: 1.7 ; yPos: -0.28 ; zPos: -0.25 }
+ ListElement{ xPos: -3.05 ; yPos: -0.44 ; zPos: 1.3 }
+ ListElement{ xPos: -3.95 ; yPos: -2.72 ; zPos: -3.8 }
+ ListElement{ xPos: 2.1 ; yPos: 1.32 ; zPos: 1.15 }
+ ListElement{ xPos: 1.4 ; yPos: -0.44 ; zPos: -2.85 }
+ ListElement{ xPos: -2.1 ; yPos: 0.04 ; zPos: 2 }
+ ListElement{ xPos: 2.45 ; yPos: -2.44 ; zPos: -2.85 }
+ ListElement{ xPos: 4.35 ; yPos: 0.24 ; zPos: 1.1 }
+ ListElement{ xPos: 1.8 ; yPos: 1.8 ; zPos: -0.7 }
+ ListElement{ xPos: 1.8 ; yPos: 2.04 ; zPos: -0.95 }
+ ListElement{ xPos: 1.65 ; yPos: -2.48 ; zPos: 0.35 }
+ ListElement{ xPos: -3.3 ; yPos: 0.28 ; zPos: -1.6 }
+ ListElement{ xPos: 1.85 ; yPos: 1 ; zPos: 2.25 }
+ ListElement{ xPos: -2 ; yPos: -0.88 ; zPos: -2.6 }
+ ListElement{ xPos: -0.1 ; yPos: 0.28 ; zPos: -1.75 }
+ ListElement{ xPos: -2.5 ; yPos: -2.76 ; zPos: -0.2 }
+ ListElement{ xPos: 0.3 ; yPos: -1.64 ; zPos: -0.75 }
+ ListElement{ xPos: 2.3 ; yPos: -1.28 ; zPos: -2.7 }
+ ListElement{ xPos: -1.7 ; yPos: -1.48 ; zPos: -2.6 }
+ ListElement{ xPos: 0.5 ; yPos: 0.24 ; zPos: -2.2 }
+ ListElement{ xPos: 0.45 ; yPos: -1.88 ; zPos: -0.95 }
+ ListElement{ xPos: -1.2 ; yPos: 0.96 ; zPos: 2.35 }
+ ListElement{ xPos: -0.55 ; yPos: -0.36 ; zPos: -1.8 }
+ ListElement{ xPos: 2.7 ; yPos: -0.56 ; zPos: -0.4 }
+ ListElement{ xPos: 1.1 ; yPos: 2.76 ; zPos: -2.35 }
+ ListElement{ xPos: -1.2 ; yPos: -2.16 ; zPos: 3.1 }
+ ListElement{ xPos: -0.05 ; yPos: 1.76 ; zPos: 1 }
+ ListElement{ xPos: 1.45 ; yPos: -0.72 ; zPos: 0.7 }
+ ListElement{ xPos: 0.2 ; yPos: -3.2 ; zPos: -0.25 }
+ ListElement{ xPos: -0.8 ; yPos: 1.08 ; zPos: -0.1 }
+ ListElement{ xPos: -2.45 ; yPos: 0.56 ; zPos: -0.55 }
+ ListElement{ xPos: 2 ; yPos: 1.12 ; zPos: 2 }
+ ListElement{ xPos: -1.05 ; yPos: -2.16 ; zPos: -1.8 }
+ ListElement{ xPos: 1.2 ; yPos: -2.12 ; zPos: -1.55 }
+ ListElement{ xPos: -4 ; yPos: -0.76 ; zPos: 0.2 }
+ ListElement{ xPos: -0.15 ; yPos: -0.2 ; zPos: -2 }
+ ListElement{ xPos: -2.95 ; yPos: 1.36 ; zPos: -3.65 }
+ ListElement{ xPos: 2.7 ; yPos: 1.16 ; zPos: 2.05 }
+ ListElement{ xPos: 0.95 ; yPos: -1.52 ; zPos: -1.05 }
+ ListElement{ xPos: -1.8 ; yPos: 2.72 ; zPos: -0.55 }
+ ListElement{ xPos: 0.45 ; yPos: 2.88 ; zPos: -4.4 }
+ ListElement{ xPos: 1.35 ; yPos: 1.08 ; zPos: -0.8 }
+ ListElement{ xPos: -2.7 ; yPos: -1.36 ; zPos: -2.65 }
+ ListElement{ xPos: 0.35 ; yPos: 2.32 ; zPos: -1.6 }
+ ListElement{ xPos: -0.45 ; yPos: 1.6 ; zPos: 0.1 }
+ ListElement{ xPos: 3.75 ; yPos: 1.12 ; zPos: -3.8 }
+ ListElement{ xPos: 0.5 ; yPos: 2.6 ; zPos: 0.5 }
+ ListElement{ xPos: -0.75 ; yPos: -3.52 ; zPos: -3.2 }
+ ListElement{ xPos: 0.25 ; yPos: -1.32 ; zPos: 2.25 }
+ ListElement{ xPos: -2.8 ; yPos: -1.6 ; zPos: -2.45 }
+ ListElement{ xPos: 0.15 ; yPos: -0.56 ; zPos: 3.9 }
+ ListElement{ xPos: 2.15 ; yPos: -1.68 ; zPos: -1.7 }
+ ListElement{ xPos: -4.2 ; yPos: -1.92 ; zPos: 2.35 }
+ ListElement{ xPos: 1.95 ; yPos: -1.32 ; zPos: 0.3 }
+ ListElement{ xPos: 0.5 ; yPos: 0.64 ; zPos: 0.75 }
+ ListElement{ xPos: 0.85 ; yPos: -0.84 ; zPos: -0.5 }
+ ListElement{ xPos: -2.15 ; yPos: -1.64 ; zPos: -2.3 }
+ ListElement{ xPos: -0.85 ; yPos: -2.84 ; zPos: -0.3 }
+ ListElement{ xPos: -3.1 ; yPos: -0.32 ; zPos: -0.85 }
+ ListElement{ xPos: 3.45 ; yPos: 0 ; zPos: 0.8 }
+ ListElement{ xPos: 1.4 ; yPos: 0.2 ; zPos: 0.3 }
+ ListElement{ xPos: 0.45 ; yPos: 1.76 ; zPos: -0.15 }
+ ListElement{ xPos: 0.85 ; yPos: 3.16 ; zPos: -2 }
+ ListElement{ xPos: 2.15 ; yPos: 0.72 ; zPos: -0.95 }
+ ListElement{ xPos: -2.4 ; yPos: 0.6 ; zPos: -0.5 }
+ ListElement{ xPos: 1.45 ; yPos: -0.4 ; zPos: -1.95 }
+ ListElement{ xPos: 0.6 ; yPos: -1.84 ; zPos: 1.8 }
+ ListElement{ xPos: 3.4 ; yPos: -0.2 ; zPos: -0.55 }
+ ListElement{ xPos: 0.2 ; yPos: -0.84 ; zPos: 4.6 }
+ ListElement{ xPos: -0.25 ; yPos: -2.4 ; zPos: 2.1 }
+ ListElement{ xPos: -1.15 ; yPos: -3.16 ; zPos: -3.05 }
+ ListElement{ xPos: 1.45 ; yPos: 0.96 ; zPos: -0.7 }
+ ListElement{ xPos: 0.35 ; yPos: 0.52 ; zPos: -1 }
+ ListElement{ xPos: 2.6 ; yPos: 0.28 ; zPos: -0.85 }
+ ListElement{ xPos: -1.25 ; yPos: 0.76 ; zPos: -1.6 }
+ ListElement{ xPos: -0.65 ; yPos: -2.16 ; zPos: 3 }
+ ListElement{ xPos: -0.25 ; yPos: -2.36 ; zPos: -1.8 }
+ ListElement{ xPos: 0.35 ; yPos: -0.8 ; zPos: 1.85 }
+ ListElement{ xPos: 0.05 ; yPos: 0.6 ; zPos: 0.85 }
+ ListElement{ xPos: -2.5 ; yPos: 2.28 ; zPos: -2.05 }
+ ListElement{ xPos: 1.65 ; yPos: 1.2 ; zPos: 2.1 }
+ ListElement{ xPos: -3 ; yPos: -0.24 ; zPos: 0.7 }
+ ListElement{ xPos: -2.1 ; yPos: -0.84 ; zPos: -0.2 }
+ ListElement{ xPos: 0.45 ; yPos: 0.96 ; zPos: 2.5 }
+ ListElement{ xPos: -2.4 ; yPos: 1.28 ; zPos: 2.75 }
+ ListElement{ xPos: -1.7 ; yPos: -3.2 ; zPos: -2.3 }
+ ListElement{ xPos: 0.95 ; yPos: -0.08 ; zPos: 0.3 }
+ ListElement{ xPos: 1.4 ; yPos: 0.88 ; zPos: 0.45 }
+ ListElement{ xPos: 2.1 ; yPos: 1.08 ; zPos: 0.2 }
+ ListElement{ xPos: -2.1 ; yPos: -0.2 ; zPos: -0.6 }
+ ListElement{ xPos: 0.5 ; yPos: 1.24 ; zPos: -0.45 }
+ ListElement{ xPos: 2.55 ; yPos: -0.56 ; zPos: -2.65 }
+ ListElement{ xPos: -4.5 ; yPos: -0.48 ; zPos: -1.25 }
+ ListElement{ xPos: 3.45 ; yPos: -0.44 ; zPos: 2.2 }
+ ListElement{ xPos: -0.25 ; yPos: 0.64 ; zPos: 1.65 }
+ ListElement{ xPos: 1.25 ; yPos: -0.6 ; zPos: -0.35 }
+ ListElement{ xPos: 1.95 ; yPos: -1.56 ; zPos: -4.1 }
+ ListElement{ xPos: 2.75 ; yPos: -1 ; zPos: 3.3 }
+ ListElement{ xPos: 3.05 ; yPos: 1.04 ; zPos: -0.9 }
+ ListElement{ xPos: -2.95 ; yPos: 1.4 ; zPos: -2.25 }
+ ListElement{ xPos: 1.3 ; yPos: 0.36 ; zPos: -2.9 }
+ ListElement{ xPos: 0.4 ; yPos: -2.48 ; zPos: 3.25 }
+ ListElement{ xPos: -1.15 ; yPos: 0.36 ; zPos: 0.45 }
+ ListElement{ xPos: -2.25 ; yPos: 0.04 ; zPos: 0.65 }
+ ListElement{ xPos: -1.85 ; yPos: -0.96 ; zPos: 4.25 }
+ ListElement{ xPos: 1.5 ; yPos: 0.04 ; zPos: -3.85 }
+ ListElement{ xPos: 0.05 ; yPos: 0.68 ; zPos: -2.45 }
+ ListElement{ xPos: -0.1 ; yPos: -0.48 ; zPos: 1.9 }
+ ListElement{ xPos: 2.1 ; yPos: -1.52 ; zPos: -4 }
+ ListElement{ xPos: 3.4 ; yPos: 0 ; zPos: -2.05 }
+ ListElement{ xPos: 0.7 ; yPos: 2.68 ; zPos: -0.85 }
+ ListElement{ xPos: 1.6 ; yPos: 1.68 ; zPos: -0.8 }
+ ListElement{ xPos: 2.1 ; yPos: -2.44 ; zPos: 1.2 }
+ ListElement{ xPos: -0.15 ; yPos: -1.88 ; zPos: -0.35 }
+ ListElement{ xPos: -0.35 ; yPos: 1.76 ; zPos: 1.6 }
+ ListElement{ xPos: -2.15 ; yPos: 0.08 ; zPos: 0.75 }
+ ListElement{ xPos: -0.15 ; yPos: -3.36 ; zPos: 0.35 }
+ ListElement{ xPos: 2.7 ; yPos: -2.84 ; zPos: 0.35 }
+ ListElement{ xPos: -1.35 ; yPos: 0 ; zPos: -0.5 }
+ ListElement{ xPos: -0.35 ; yPos: -2.56 ; zPos: -0.9 }
+ ListElement{ xPos: -2.75 ; yPos: -3.56 ; zPos: 1.55 }
+ ListElement{ xPos: -2.5 ; yPos: -0.68 ; zPos: 2.7 }
+ ListElement{ xPos: 1.35 ; yPos: 0.6 ; zPos: -2.2 }
+ ListElement{ xPos: -1.3 ; yPos: -0.24 ; zPos: -1.65 }
+ ListElement{ xPos: -1.4 ; yPos: -1.44 ; zPos: 4.45 }
+ ListElement{ xPos: -1.8 ; yPos: 3.64 ; zPos: 2.05 }
+ ListElement{ xPos: -0.65 ; yPos: 0.08 ; zPos: 3.9 }
+ ListElement{ xPos: 2.25 ; yPos: 2.96 ; zPos: -2.35 }
+ ListElement{ xPos: 1.3 ; yPos: 1.64 ; zPos: -0.05 }
+ ListElement{ xPos: 1.75 ; yPos: 2.24 ; zPos: -2.85 }
+ ListElement{ xPos: -0.05 ; yPos: -1.56 ; zPos: -0.05 }
+ ListElement{ xPos: -3.85 ; yPos: -0.8 ; zPos: -0.3 }
+ ListElement{ xPos: 0.95 ; yPos: 0.32 ; zPos: -2.5 }
+ ListElement{ xPos: -2.4 ; yPos: 0.4 ; zPos: -3.55 }
+ ListElement{ xPos: 3.7 ; yPos: 2.36 ; zPos: 3.6 }
+ ListElement{ xPos: 0.55 ; yPos: 0.88 ; zPos: 3.15 }
+ ListElement{ xPos: -1 ; yPos: -1.36 ; zPos: -2.1 }
+ ListElement{ xPos: 2.05 ; yPos: 0.44 ; zPos: -0.8 }
+ ListElement{ xPos: -4.75 ; yPos: 1.8 ; zPos: -1.7 }
+ ListElement{ xPos: 0.15 ; yPos: 2.64 ; zPos: -2.2 }
+ ListElement{ xPos: -2.05 ; yPos: -2.56 ; zPos: 1.15 }
+ ListElement{ xPos: -3.7 ; yPos: 2.12 ; zPos: 1.3 }
+ ListElement{ xPos: 1.05 ; yPos: 0 ; zPos: 4 }
+ ListElement{ xPos: -0.7 ; yPos: -0.88 ; zPos: 1.35 }
+ ListElement{ xPos: 0.95 ; yPos: -1.84 ; zPos: 0.1 }
+ ListElement{ xPos: 0.75 ; yPos: 1.16 ; zPos: 4.25 }
+ ListElement{ xPos: -1.3 ; yPos: 0.72 ; zPos: 0.65 }
+ ListElement{ xPos: 3 ; yPos: -0.08 ; zPos: -1.75 }
+ ListElement{ xPos: 2.85 ; yPos: -0.68 ; zPos: 0.65 }
+ ListElement{ xPos: -0.4 ; yPos: 3.04 ; zPos: -2.35 }
+ ListElement{ xPos: 3.05 ; yPos: -0.6 ; zPos: -0.6 }
+ ListElement{ xPos: -0.85 ; yPos: -0.44 ; zPos: 0.35 }
+ ListElement{ xPos: 0 ; yPos: -1.92 ; zPos: 0 }
+ ListElement{ xPos: -1.25 ; yPos: -1.44 ; zPos: 1.9 }
+ ListElement{ xPos: -1.6 ; yPos: 0.04 ; zPos: -0.7 }
+ ListElement{ xPos: 1.45 ; yPos: -1 ; zPos: -3.4 }
+ ListElement{ xPos: -2.8 ; yPos: -1.24 ; zPos: -3 }
+ ListElement{ xPos: 0.2 ; yPos: -0.68 ; zPos: -3.7 }
+ ListElement{ xPos: 3.35 ; yPos: 0.68 ; zPos: -1.9 }
+ ListElement{ xPos: -2.3 ; yPos: 1.08 ; zPos: -1 }
+ ListElement{ xPos: 1.5 ; yPos: 1.8 ; zPos: -1.2 }
+ ListElement{ xPos: 1.55 ; yPos: 3.64 ; zPos: 1.35 }
+ ListElement{ xPos: 1.15 ; yPos: -1.36 ; zPos: 0.75 }
+ ListElement{ xPos: -1.95 ; yPos: 0.08 ; zPos: -0.85 }
+ ListElement{ xPos: -2.25 ; yPos: -0.52 ; zPos: 1.05 }
+ ListElement{ xPos: -2.6 ; yPos: -1.32 ; zPos: 1.05 }
+ ListElement{ xPos: -0.4 ; yPos: -1.52 ; zPos: 2.45 }
+ ListElement{ xPos: -0.05 ; yPos: 0.64 ; zPos: -2.85 }
+ ListElement{ xPos: 4.45 ; yPos: -0.24 ; zPos: -0.15 }
+ ListElement{ xPos: 3.45 ; yPos: 1.72 ; zPos: -1.1 }
+ ListElement{ xPos: 3.3 ; yPos: -1.72 ; zPos: -0.25 }
+ ListElement{ xPos: 1.7 ; yPos: 2.76 ; zPos: 2 }
+ ListElement{ xPos: 2.1 ; yPos: -2.88 ; zPos: -1.75 }
+ ListElement{ xPos: -3.7 ; yPos: -0.04 ; zPos: 0.25 }
+ ListElement{ xPos: -0.45 ; yPos: -3 ; zPos: -2.95 }
+ ListElement{ xPos: 3.1 ; yPos: -2.32 ; zPos: 0.1 }
+ ListElement{ xPos: 0.7 ; yPos: -2.88 ; zPos: -3.45 }
+ ListElement{ xPos: 2.9 ; yPos: 0.4 ; zPos: -0.65 }
+ ListElement{ xPos: -1.8 ; yPos: -2.48 ; zPos: -3.5 }
+ ListElement{ xPos: 1.65 ; yPos: 3.16 ; zPos: 2.15 }
+ ListElement{ xPos: -1.25 ; yPos: -0.76 ; zPos: 2.15 }
+ ListElement{ xPos: 3.55 ; yPos: 0.28 ; zPos: 2.4 }
+ ListElement{ xPos: 0.25 ; yPos: 0.52 ; zPos: 2.3 }
+ ListElement{ xPos: -1.7 ; yPos: -1.36 ; zPos: -2.5 }
+ ListElement{ xPos: 3.8 ; yPos: 1.04 ; zPos: 0.45 }
+ ListElement{ xPos: 2.45 ; yPos: -0.72 ; zPos: -4.05 }
+ ListElement{ xPos: -0.85 ; yPos: 0.16 ; zPos: -0.55 }
+ ListElement{ xPos: 0.65 ; yPos: 0.52 ; zPos: 3.3 }
+ ListElement{ xPos: 0.85 ; yPos: -0.08 ; zPos: 0.6 }
+ ListElement{ xPos: -0.1 ; yPos: 1.12 ; zPos: -3.15 }
+ ListElement{ xPos: -2.95 ; yPos: 0.24 ; zPos: 0.8 }
+ ListElement{ xPos: 0.2 ; yPos: -0.6 ; zPos: -0.45 }
+ ListElement{ xPos: 0.15 ; yPos: 2.52 ; zPos: 1.5 }
+ ListElement{ xPos: 0.65 ; yPos: -1.4 ; zPos: -1.5 }
+ ListElement{ xPos: 4.75 ; yPos: 1.76 ; zPos: 1.15 }
+ ListElement{ xPos: -1.75 ; yPos: -1.44 ; zPos: -3.6 }
+ ListElement{ xPos: 0.85 ; yPos: 0.04 ; zPos: -0.3 }
+ ListElement{ xPos: -0.55 ; yPos: -0.28 ; zPos: -1.85 }
+ ListElement{ xPos: -4.05 ; yPos: 0.52 ; zPos: -2.35 }
+ ListElement{ xPos: -0.35 ; yPos: -0.96 ; zPos: 0.8 }
+ ListElement{ xPos: -1.8 ; yPos: -0.04 ; zPos: 0.05 }
+ ListElement{ xPos: -2 ; yPos: 0.12 ; zPos: -2.5 }
+ ListElement{ xPos: -1.85 ; yPos: -1.04 ; zPos: -1.2 }
+ ListElement{ xPos: -1 ; yPos: -3.44 ; zPos: -1 }
+ ListElement{ xPos: 2.25 ; yPos: 0.16 ; zPos: -0.05 }
+ ListElement{ xPos: -1.3 ; yPos: 0.24 ; zPos: -1.5 }
+ ListElement{ xPos: -0.05 ; yPos: -0.48 ; zPos: 1.7 }
+ ListElement{ xPos: -2.5 ; yPos: 0.28 ; zPos: -2.1 }
+ ListElement{ xPos: 3.9 ; yPos: -0.44 ; zPos: -0.85 }
+ ListElement{ xPos: -0.3 ; yPos: -1.96 ; zPos: 1.3 }
+ ListElement{ xPos: 1.35 ; yPos: 2.92 ; zPos: -1.15 }
+ ListElement{ xPos: -2.2 ; yPos: -2.2 ; zPos: -0.45 }
+ ListElement{ xPos: -0.2 ; yPos: -0.12 ; zPos: 0.15 }
+ ListElement{ xPos: 0.7 ; yPos: 1.4 ; zPos: -3 }
+ ListElement{ xPos: -0.3 ; yPos: 3.16 ; zPos: 2.65 }
+ ListElement{ xPos: -1.1 ; yPos: -1.44 ; zPos: 0.45 }
+ ListElement{ xPos: 0.25 ; yPos: -1.04 ; zPos: 4.3 }
+ ListElement{ xPos: -2.2 ; yPos: -2.48 ; zPos: 0.4 }
+ ListElement{ xPos: 0.95 ; yPos: -3.4 ; zPos: -1.2 }
+ ListElement{ xPos: 2.75 ; yPos: -1.6 ; zPos: -1.95 }
+ ListElement{ xPos: 0.75 ; yPos: -1.84 ; zPos: -0.15 }
+ ListElement{ xPos: -0.75 ; yPos: -1.84 ; zPos: 0.35 }
+ ListElement{ xPos: -2.85 ; yPos: -2.12 ; zPos: -0.95 }
+ ListElement{ xPos: -0.8 ; yPos: -2.84 ; zPos: -0.15 }
+ ListElement{ xPos: -1.95 ; yPos: -0.44 ; zPos: 2.1 }
+ ListElement{ xPos: -1.05 ; yPos: -2.48 ; zPos: -1.25 }
+ ListElement{ xPos: -2.6 ; yPos: -1.48 ; zPos: 0.8 }
+ ListElement{ xPos: 2.5 ; yPos: -1.08 ; zPos: 1.9 }
+ ListElement{ xPos: 0.45 ; yPos: 2.52 ; zPos: 0.45 }
+ ListElement{ xPos: 1.55 ; yPos: -0.16 ; zPos: 0.25 }
+ ListElement{ xPos: -2.9 ; yPos: 0.36 ; zPos: 0.35 }
+ ListElement{ xPos: 2.95 ; yPos: -1.56 ; zPos: -2.7 }
+ ListElement{ xPos: 3.4 ; yPos: -1.76 ; zPos: 3.05 }
+ ListElement{ xPos: 1.75 ; yPos: -2.84 ; zPos: 0.5 }
+ ListElement{ xPos: -0.95 ; yPos: 0.64 ; zPos: 1.1 }
+ ListElement{ xPos: 2 ; yPos: 2.04 ; zPos: 0.1 }
+ ListElement{ xPos: -0.15 ; yPos: -0.08 ; zPos: -0.9 }
+ ListElement{ xPos: 2.2 ; yPos: -1.2 ; zPos: 2.8 }
+ ListElement{ xPos: -0.8 ; yPos: 2.68 ; zPos: -0.3 }
+ ListElement{ xPos: 3.4 ; yPos: 0.84 ; zPos: -2.65 }
+ ListElement{ xPos: -0.25 ; yPos: -0.24 ; zPos: 0.45 }
+ ListElement{ xPos: 2.7 ; yPos: 1.64 ; zPos: -1.95 }
+ ListElement{ xPos: 1.35 ; yPos: -2.96 ; zPos: 0.65 }
+ ListElement{ xPos: -1.45 ; yPos: -0.2 ; zPos: 0.8 }
+ ListElement{ xPos: 1.45 ; yPos: 1.64 ; zPos: -3.45 }
+ ListElement{ xPos: -1.1 ; yPos: 3.08 ; zPos: 1.1 }
+ ListElement{ xPos: 0.8 ; yPos: 1.88 ; zPos: -2.1 }
+ ListElement{ xPos: 1.15 ; yPos: 3.04 ; zPos: -0.75 }
+ ListElement{ xPos: -0.45 ; yPos: 1.36 ; zPos: -0.15 }
+ ListElement{ xPos: -2.8 ; yPos: -1.24 ; zPos: 2.55 }
+ ListElement{ xPos: 4.4 ; yPos: 2.04 ; zPos: 1.25 }
+ ListElement{ xPos: -0.95 ; yPos: 1.24 ; zPos: 3.65 }
+ ListElement{ xPos: 3.45 ; yPos: 1.32 ; zPos: 2.5 }
+ ListElement{ xPos: -3 ; yPos: 1.12 ; zPos: -1.2 }
+ ListElement{ xPos: -2.45 ; yPos: 0.68 ; zPos: 4.35 }
+ ListElement{ xPos: 0.55 ; yPos: -0.12 ; zPos: -3.95 }
+ ListElement{ xPos: -0.35 ; yPos: 3.08 ; zPos: -0.3 }
+ ListElement{ xPos: 1.35 ; yPos: -2.92 ; zPos: -3.3 }
+ ListElement{ xPos: 0.5 ; yPos: -0.2 ; zPos: 0.95 }
+ ListElement{ xPos: 1.2 ; yPos: -0.24 ; zPos: -0.75 }
+ ListElement{ xPos: -1.2 ; yPos: 2.16 ; zPos: 3.35 }
+ ListElement{ xPos: -3.35 ; yPos: 2.36 ; zPos: 3.45 }
+ ListElement{ xPos: 0.95 ; yPos: -0.88 ; zPos: 1.25 }
+ ListElement{ xPos: 0.1 ; yPos: 1.24 ; zPos: 0 }
+ ListElement{ xPos: 1.8 ; yPos: 1.56 ; zPos: -1.05 }
+ ListElement{ xPos: -1.35 ; yPos: 3.8 ; zPos: -1.45 }
+ ListElement{ xPos: 1.45 ; yPos: -2.64 ; zPos: 0.5 }
+ ListElement{ xPos: 2.05 ; yPos: 1.16 ; zPos: 1.4 }
+ ListElement{ xPos: 2.9 ; yPos: -2.4 ; zPos: 0.15 }
+ ListElement{ xPos: -1.1 ; yPos: 0.76 ; zPos: -1.65 }
+ ListElement{ xPos: -2.5 ; yPos: -2.4 ; zPos: 1.05 }
+ ListElement{ xPos: 3.55 ; yPos: -1.8 ; zPos: -2.55 }
+ ListElement{ xPos: -0.8 ; yPos: 1.24 ; zPos: -3.75 }
+ ListElement{ xPos: -1.35 ; yPos: -2.48 ; zPos: 2.85 }
+ ListElement{ xPos: -2.1 ; yPos: 1.48 ; zPos: -0.15 }
+ ListElement{ xPos: -0.45 ; yPos: 2.68 ; zPos: 2.85 }
+ ListElement{ xPos: 0.8 ; yPos: 1.4 ; zPos: -3.35 }
+ ListElement{ xPos: -2.2 ; yPos: -2.24 ; zPos: 0.35 }
+ ListElement{ xPos: 1.4 ; yPos: -2.32 ; zPos: 0.55 }
+ ListElement{ xPos: 3.65 ; yPos: 1.12 ; zPos: -4.5 }
+ ListElement{ xPos: 0.1 ; yPos: -0.68 ; zPos: 1.85 }
+ ListElement{ xPos: -1.95 ; yPos: -0.56 ; zPos: -2.05 }
+ ListElement{ xPos: 1.85 ; yPos: 1.32 ; zPos: -4.4 }
+ ListElement{ xPos: -0.6 ; yPos: 0.64 ; zPos: -0.3 }
+ ListElement{ xPos: -1.55 ; yPos: 1.52 ; zPos: -3.75 }
+ ListElement{ xPos: 1.85 ; yPos: 0.48 ; zPos: 0.65 }
+ ListElement{ xPos: 3.35 ; yPos: 2.52 ; zPos: 1.9 }
+ ListElement{ xPos: 0.4 ; yPos: 1.4 ; zPos: -1.3 }
+ ListElement{ xPos: -2.7 ; yPos: 0.84 ; zPos: 1.6 }
+ ListElement{ xPos: -0.5 ; yPos: 1 ; zPos: 0.4 }
+ ListElement{ xPos: 2.25 ; yPos: -1 ; zPos: 1.25 }
+ ListElement{ xPos: 1.7 ; yPos: 2.4 ; zPos: -0.95 }
+ ListElement{ xPos: -3.55 ; yPos: 1.04 ; zPos: 3.95 }
+ ListElement{ xPos: 0.9 ; yPos: 1.28 ; zPos: 2.05 }
+ ListElement{ xPos: -3.15 ; yPos: 1.96 ; zPos: -0.3 }
+ ListElement{ xPos: 1.35 ; yPos: -0.92 ; zPos: -1 }
+ ListElement{ xPos: -3.1 ; yPos: -3.08 ; zPos: 0.9 }
+ ListElement{ xPos: 1.25 ; yPos: -2.44 ; zPos: 2.25 }
+ ListElement{ xPos: -3.8 ; yPos: 0.76 ; zPos: -1.05 }
+ ListElement{ xPos: -1.05 ; yPos: -3.8 ; zPos: -0.8 }
+ ListElement{ xPos: -4 ; yPos: 1.24 ; zPos: -2.6 }
+ ListElement{ xPos: 2.45 ; yPos: -1.84 ; zPos: 0.35 }
+ ListElement{ xPos: -1.5 ; yPos: 2.16 ; zPos: 4.3 }
+ ListElement{ xPos: 2.1 ; yPos: -1.8 ; zPos: -0.95 }
+ ListElement{ xPos: -1.8 ; yPos: -0.2 ; zPos: 0.2 }
+ ListElement{ xPos: 0.75 ; yPos: 1.04 ; zPos: -1.3 }
+ ListElement{ xPos: 2.85 ; yPos: 1.6 ; zPos: -2.05 }
+ ListElement{ xPos: -2 ; yPos: -0.2 ; zPos: -2.15 }
+ ListElement{ xPos: 1.75 ; yPos: 2.28 ; zPos: 0.75 }
+ ListElement{ xPos: 1.95 ; yPos: -0.68 ; zPos: -2.3 }
+ ListElement{ xPos: -0.8 ; yPos: 1.08 ; zPos: 1.65 }
+ ListElement{ xPos: -1.85 ; yPos: 1.8 ; zPos: -0.75 }
+ ListElement{ xPos: -3.05 ; yPos: 2.44 ; zPos: 0.35 }
+ ListElement{ xPos: -0.4 ; yPos: -3 ; zPos: -2.85 }
+ ListElement{ xPos: -0.95 ; yPos: 0.64 ; zPos: 2.15 }
+ ListElement{ xPos: -1.35 ; yPos: -0.2 ; zPos: -0.8 }
+ ListElement{ xPos: 2.1 ; yPos: -0.04 ; zPos: 0.65 }
+ ListElement{ xPos: 2.6 ; yPos: 0.2 ; zPos: 2.75 }
+ ListElement{ xPos: 1.65 ; yPos: -0.16 ; zPos: 1.65 }
+ ListElement{ xPos: -1.85 ; yPos: 0.68 ; zPos: 1.95 }
+ ListElement{ xPos: -3.05 ; yPos: -2.28 ; zPos: 0.1 }
+ ListElement{ xPos: 3.4 ; yPos: -1.88 ; zPos: 3 }
+ ListElement{ xPos: -0.75 ; yPos: 0.36 ; zPos: 1.5 }
+ ListElement{ xPos: 2.9 ; yPos: -1 ; zPos: -1.85 }
+ ListElement{ xPos: 0.4 ; yPos: 1.08 ; zPos: 0.8 }
+ ListElement{ xPos: -1.05 ; yPos: 1.04 ; zPos: 2.15 }
+ ListElement{ xPos: 2.6 ; yPos: -2.08 ; zPos: -0.1 }
+ ListElement{ xPos: 0 ; yPos: -2.84 ; zPos: -0.95 }
+ ListElement{ xPos: 0.4 ; yPos: 1.88 ; zPos: 2.05 }
+ ListElement{ xPos: -3.1 ; yPos: -2.76 ; zPos: -2.75 }
+ ListElement{ xPos: -2.65 ; yPos: 3.52 ; zPos: -1.2 }
+ ListElement{ xPos: -4.3 ; yPos: -0.28 ; zPos: 3 }
+ ListElement{ xPos: -2.8 ; yPos: -2.56 ; zPos: -2.85 }
+ ListElement{ xPos: -0.15 ; yPos: 2.72 ; zPos: -2.8 }
+ ListElement{ xPos: -0.95 ; yPos: -0.6 ; zPos: 1.05 }
+ ListElement{ xPos: 1.9 ; yPos: 2.56 ; zPos: 1.25 }
+ ListElement{ xPos: -0.85 ; yPos: 0.24 ; zPos: 0.05 }
+ ListElement{ xPos: 2.4 ; yPos: 2.56 ; zPos: -1.2 }
+ ListElement{ xPos: 2.35 ; yPos: -1.08 ; zPos: 2.7 }
+ ListElement{ xPos: -2.1 ; yPos: -0.76 ; zPos: 2.8 }
+ ListElement{ xPos: 1.4 ; yPos: 1 ; zPos: 2.35 }
+ ListElement{ xPos: -0.9 ; yPos: 1.72 ; zPos: 4.1 }
+ ListElement{ xPos: 3.7 ; yPos: -1.4 ; zPos: 2.05 }
+ ListElement{ xPos: -0.25 ; yPos: 0.76 ; zPos: -1.4 }
+ ListElement{ xPos: -1.6 ; yPos: 0.32 ; zPos: 0.05 }
+ ListElement{ xPos: 2.5 ; yPos: -3.08 ; zPos: 0.85 }
+ ListElement{ xPos: 0.05 ; yPos: -1.96 ; zPos: 1.55 }
+ ListElement{ xPos: -3.7 ; yPos: 0.84 ; zPos: -0.25 }
+ ListElement{ xPos: 2.35 ; yPos: 0.6 ; zPos: -1.5 }
+ ListElement{ xPos: 1.1 ; yPos: 2.64 ; zPos: -1.45 }
+ ListElement{ xPos: 2.55 ; yPos: -1.56 ; zPos: 2.05 }
+ ListElement{ xPos: -2.15 ; yPos: 3.56 ; zPos: 3.25 }
+ ListElement{ xPos: -0.55 ; yPos: -1.24 ; zPos: 2.65 }
+ ListElement{ xPos: -0.3 ; yPos: 1.32 ; zPos: 0.85 }
+ ListElement{ xPos: -1.9 ; yPos: 1.24 ; zPos: 1.15 }
+ ListElement{ xPos: 0.35 ; yPos: -2.44 ; zPos: -1.35 }
+ ListElement{ xPos: 2.9 ; yPos: -1.08 ; zPos: -4.3 }
+ ListElement{ xPos: 1.8 ; yPos: -0.44 ; zPos: 1.25 }
+ ListElement{ xPos: -0.6 ; yPos: -1.08 ; zPos: -0.6 }
+ ListElement{ xPos: -0.3 ; yPos: -0.88 ; zPos: -1.45 }
+ ListElement{ xPos: -1 ; yPos: 2.12 ; zPos: 2.3 }
+ ListElement{ xPos: 3.15 ; yPos: 0.52 ; zPos: -2.8 }
+ ListElement{ xPos: 0.45 ; yPos: 2.48 ; zPos: -1.3 }
+ ListElement{ xPos: 0.5 ; yPos: -0.84 ; zPos: 0.7 }
+ ListElement{ xPos: -0.6 ; yPos: -0.44 ; zPos: -1.35 }
+ ListElement{ xPos: -1.7 ; yPos: -0.12 ; zPos: -2.55 }
+ ListElement{ xPos: -0.5 ; yPos: 0.52 ; zPos: 1.4 }
+ ListElement{ xPos: 4 ; yPos: -1.68 ; zPos: -0.1 }
+ ListElement{ xPos: 1.4 ; yPos: -1.64 ; zPos: 1.35 }
+ ListElement{ xPos: 0.05 ; yPos: 0.28 ; zPos: -2.2 }
+ ListElement{ xPos: 1.55 ; yPos: -1.2 ; zPos: 0.45 }
+ ListElement{ xPos: 3.1 ; yPos: 3.64 ; zPos: 1.45 }
+ ListElement{ xPos: -1.55 ; yPos: 2.16 ; zPos: 0.15 }
+ ListElement{ xPos: 3.9 ; yPos: -2.56 ; zPos: -1.25 }
+ ListElement{ xPos: 4.15 ; yPos: 0.64 ; zPos: 2.65 }
+ ListElement{ xPos: -2.8 ; yPos: 0.56 ; zPos: -1.35 }
+ ListElement{ xPos: 1.3 ; yPos: 1.28 ; zPos: 0.8 }
+ ListElement{ xPos: -2.3 ; yPos: -3.08 ; zPos: 1.2 }
+ ListElement{ xPos: 0.5 ; yPos: -0.36 ; zPos: -2.4 }
+ ListElement{ xPos: 0.6 ; yPos: 0.52 ; zPos: 2.75 }
+ ListElement{ xPos: 3.9 ; yPos: -0.52 ; zPos: -4.25 }
+ ListElement{ xPos: -0.5 ; yPos: 1.28 ; zPos: -0.05 }
+ ListElement{ xPos: -0.25 ; yPos: -3.84 ; zPos: 3.15 }
+ ListElement{ xPos: -0.9 ; yPos: -1.72 ; zPos: -3.15 }
+ ListElement{ xPos: 0.85 ; yPos: 0.84 ; zPos: -1.7 }
+ ListElement{ xPos: -3.35 ; yPos: 0.72 ; zPos: 2.15 }
+ ListElement{ xPos: -1.6 ; yPos: 0.6 ; zPos: 1.65 }
+ ListElement{ xPos: -3.6 ; yPos: 0.8 ; zPos: 2.6 }
+ ListElement{ xPos: -0.7 ; yPos: 1.96 ; zPos: -0.9 }
+ ListElement{ xPos: -2.4 ; yPos: 1.32 ; zPos: -2.75 }
+ ListElement{ xPos: -1.75 ; yPos: 0.72 ; zPos: -0.85 }
+ ListElement{ xPos: -2.7 ; yPos: 0.6 ; zPos: -2.5 }
+ ListElement{ xPos: -2.2 ; yPos: -3.4 ; zPos: -1.85 }
+ ListElement{ xPos: 0.85 ; yPos: 2.2 ; zPos: -3.75 }
+ ListElement{ xPos: -3.85 ; yPos: 2.44 ; zPos: 4.3 }
+ ListElement{ xPos: -3.65 ; yPos: 0.52 ; zPos: 0.2 }
+ ListElement{ xPos: -4.35 ; yPos: -0.52 ; zPos: 1.5 }
+ ListElement{ xPos: 1.45 ; yPos: -0.08 ; zPos: -0.4 }
+ ListElement{ xPos: 1.85 ; yPos: -0.76 ; zPos: -4.6 }
+ ListElement{ xPos: 0.95 ; yPos: 0.52 ; zPos: -1 }
+ ListElement{ xPos: -2.5 ; yPos: -0.88 ; zPos: -0.3 }
+ ListElement{ xPos: -2.9 ; yPos: 1.68 ; zPos: -1.15 }
+ ListElement{ xPos: -3.2 ; yPos: 0.2 ; zPos: 1.1 }
+ ListElement{ xPos: 0.9 ; yPos: -0.2 ; zPos: 0.7 }
+ ListElement{ xPos: 3.6 ; yPos: 1.08 ; zPos: -2.15 }
+ ListElement{ xPos: -0.8 ; yPos: 1.72 ; zPos: 2.85 }
+ ListElement{ xPos: 0.3 ; yPos: 1.76 ; zPos: 0.9 }
+ ListElement{ xPos: -1.3 ; yPos: -0.56 ; zPos: -2.3 }
+ ListElement{ xPos: -2.8 ; yPos: 0.4 ; zPos: 4.2 }
+ ListElement{ xPos: 1 ; yPos: -0.32 ; zPos: 0.35 }
+ ListElement{ xPos: -0.6 ; yPos: -0.24 ; zPos: 4.05 }
+ ListElement{ xPos: -2 ; yPos: -1.84 ; zPos: -2.2 }
+ ListElement{ xPos: -1.95 ; yPos: -0.8 ; zPos: 1.85 }
+ ListElement{ xPos: -0.05 ; yPos: -0.16 ; zPos: 3.85 }
+ ListElement{ xPos: 0.15 ; yPos: -2.64 ; zPos: 1.7 }
+ ListElement{ xPos: -3.85 ; yPos: 1.4 ; zPos: 0.1 }
+ ListElement{ xPos: 0.25 ; yPos: 1 ; zPos: -2.45 }
+ ListElement{ xPos: -4.1 ; yPos: 0 ; zPos: -0.1 }
+ ListElement{ xPos: -1.4 ; yPos: -0.32 ; zPos: -0.8 }
+ ListElement{ xPos: -1.9 ; yPos: -1.84 ; zPos: -3 }
+ ListElement{ xPos: 0.35 ; yPos: 1.32 ; zPos: -3.95 }
+ ListElement{ xPos: -2.6 ; yPos: -1.04 ; zPos: 4.25 }
+ ListElement{ xPos: -3.1 ; yPos: -0.96 ; zPos: -1.65 }
+ ListElement{ xPos: -0.55 ; yPos: -1.16 ; zPos: 4.05 }
+ ListElement{ xPos: -3.1 ; yPos: -1 ; zPos: -0.5 }
+ ListElement{ xPos: 2.25 ; yPos: 1.24 ; zPos: 3.4 }
+ ListElement{ xPos: -1.2 ; yPos: -1.24 ; zPos: -4.05 }
+ ListElement{ xPos: 3.05 ; yPos: 1.92 ; zPos: 1 }
+ ListElement{ xPos: 0.55 ; yPos: -2.76 ; zPos: -3.25 }
+ ListElement{ xPos: -2.05 ; yPos: 1.6 ; zPos: 0.6 }
+ ListElement{ xPos: -0.45 ; yPos: 0.12 ; zPos: -0.15 }
+ ListElement{ xPos: 2.1 ; yPos: 2.96 ; zPos: 1.1 }
+ ListElement{ xPos: 0.05 ; yPos: -2.08 ; zPos: -0.7 }
+ ListElement{ xPos: -3.15 ; yPos: 1.08 ; zPos: -0.1 }
+ ListElement{ xPos: -1.95 ; yPos: 0.44 ; zPos: 0.6 }
+ ListElement{ xPos: 0.15 ; yPos: -0.32 ; zPos: 2.85 }
+ ListElement{ xPos: 0.55 ; yPos: 1 ; zPos: 0.55 }
+ ListElement{ xPos: -2.05 ; yPos: 1.84 ; zPos: -1 }
+ ListElement{ xPos: -0.25 ; yPos: 0.36 ; zPos: 1.2 }
+ ListElement{ xPos: 4.6 ; yPos: -0.2 ; zPos: 0.6 }
+ ListElement{ xPos: -1.95 ; yPos: -0.8 ; zPos: 0.05 }
+ ListElement{ xPos: -0.35 ; yPos: -1.04 ; zPos: 0.8 }
+ ListElement{ xPos: 0.7 ; yPos: 3.04 ; zPos: -3.55 }
+ ListElement{ xPos: -0.15 ; yPos: 1.12 ; zPos: -2.5 }
+ ListElement{ xPos: -0.5 ; yPos: -1.68 ; zPos: 1.5 }
+ ListElement{ xPos: 1 ; yPos: -0.44 ; zPos: -1.5 }
+ ListElement{ xPos: 4.05 ; yPos: -1.32 ; zPos: 2.85 }
+ ListElement{ xPos: 1.6 ; yPos: -1.56 ; zPos: 2.15 }
+ ListElement{ xPos: 0.3 ; yPos: -1.16 ; zPos: 1.25 }
+ ListElement{ xPos: -2.65 ; yPos: -1.28 ; zPos: 0.45 }
+ ListElement{ xPos: 0 ; yPos: 1.52 ; zPos: -1.35 }
+ ListElement{ xPos: 1.3 ; yPos: 1.68 ; zPos: -2.75 }
+ ListElement{ xPos: 1.25 ; yPos: 0.4 ; zPos: 0.3 }
+ ListElement{ xPos: -0.95 ; yPos: 3.68 ; zPos: 1.75 }
+ ListElement{ xPos: -3.55 ; yPos: 0.48 ; zPos: 1.15 }
+ ListElement{ xPos: -1.7 ; yPos: -2.64 ; zPos: -3.3 }
+ ListElement{ xPos: -2.2 ; yPos: -2.4 ; zPos: 1.05 }
+ ListElement{ xPos: 0.1 ; yPos: 0.44 ; zPos: -1.05 }
+ ListElement{ xPos: 2.05 ; yPos: 0.4 ; zPos: 0.8 }
+ ListElement{ xPos: 0.4 ; yPos: 0.04 ; zPos: 4.2 }
+ ListElement{ xPos: -1.25 ; yPos: 0.76 ; zPos: 0.45 }
+ ListElement{ xPos: 1.6 ; yPos: 2.04 ; zPos: -2.95 }
+ ListElement{ xPos: -2.05 ; yPos: -0.44 ; zPos: 1.35 }
+ ListElement{ xPos: -3.25 ; yPos: 0.44 ; zPos: 2.15 }
+ ListElement{ xPos: -1.75 ; yPos: 0.04 ; zPos: 2.35 }
+ ListElement{ xPos: -4.15 ; yPos: 0.68 ; zPos: 0.8 }
+ ListElement{ xPos: -1.6 ; yPos: 1.12 ; zPos: 0.55 }
+ ListElement{ xPos: -0.15 ; yPos: 3.4 ; zPos: 3.05 }
+ ListElement{ xPos: -0.2 ; yPos: 0.04 ; zPos: -1.45 }
+ ListElement{ xPos: 2.9 ; yPos: -0.36 ; zPos: 1.45 }
+ ListElement{ xPos: -1.4 ; yPos: 1.56 ; zPos: 1 }
+ ListElement{ xPos: 3.4 ; yPos: -1.2 ; zPos: -4.2 }
+ ListElement{ xPos: -1.1 ; yPos: 0.6 ; zPos: 1.55 }
+ ListElement{ xPos: -0.35 ; yPos: 1.52 ; zPos: -0.35 }
+ ListElement{ xPos: 0.3 ; yPos: 0.96 ; zPos: 1.8 }
+ ListElement{ xPos: 2.5 ; yPos: -1.84 ; zPos: 1.65 }
+ ListElement{ xPos: -0.6 ; yPos: 2.24 ; zPos: -2.9 }
+ ListElement{ xPos: -0.25 ; yPos: -2.32 ; zPos: -0.7 }
+ ListElement{ xPos: 3.35 ; yPos: -2.24 ; zPos: 1.5 }
+ ListElement{ xPos: 1.6 ; yPos: 1.96 ; zPos: 3.9 }
+ ListElement{ xPos: 1.8 ; yPos: 0.68 ; zPos: -1.55 }
+ ListElement{ xPos: 2.7 ; yPos: 1.76 ; zPos: -2.9 }
+ ListElement{ xPos: -2.35 ; yPos: -0.6 ; zPos: -3.9 }
+ ListElement{ xPos: -1.85 ; yPos: 1.96 ; zPos: -1.2 }
+ ListElement{ xPos: -4.05 ; yPos: 1.12 ; zPos: -2.75 }
+ ListElement{ xPos: -2.85 ; yPos: -1.36 ; zPos: 0.65 }
+ ListElement{ xPos: -1.75 ; yPos: 2.12 ; zPos: -1.35 }
+ ListElement{ xPos: -2.95 ; yPos: -0.08 ; zPos: 3.65 }
+ ListElement{ xPos: -2.4 ; yPos: 2 ; zPos: 4.5 }
+ ListElement{ xPos: -0.05 ; yPos: 0.04 ; zPos: 0.35 }
+ ListElement{ xPos: -3.2 ; yPos: 0.16 ; zPos: 1.1 }
+ ListElement{ xPos: 3 ; yPos: 2.32 ; zPos: 1.3 }
+ ListElement{ xPos: 4.9 ; yPos: -1.88 ; zPos: 0.45 }
+ ListElement{ xPos: -2.35 ; yPos: -1.44 ; zPos: -0.7 }
+ ListElement{ xPos: 2.4 ; yPos: -0.6 ; zPos: 0.1 }
+ ListElement{ xPos: 1 ; yPos: 1.6 ; zPos: 1 }
+ ListElement{ xPos: 1.3 ; yPos: -0.4 ; zPos: -0.4 }
+ ListElement{ xPos: -0.9 ; yPos: -2.72 ; zPos: -3.6 }
+ ListElement{ xPos: 1.2 ; yPos: -0.44 ; zPos: 2.1 }
+ ListElement{ xPos: 0.65 ; yPos: 3 ; zPos: -1.55 }
+ ListElement{ xPos: -1.55 ; yPos: -2.64 ; zPos: 0.55 }
+ ListElement{ xPos: 1.9 ; yPos: -0.32 ; zPos: -2.1 }
+ ListElement{ xPos: 1.35 ; yPos: -2.84 ; zPos: -0.4 }
+ ListElement{ xPos: 0.25 ; yPos: -2.68 ; zPos: -0.2 }
+ ListElement{ xPos: -2.05 ; yPos: -1.6 ; zPos: -3.05 }
+ ListElement{ xPos: 1.65 ; yPos: -0.44 ; zPos: -0.75 }
+ ListElement{ xPos: -1.25 ; yPos: 0.96 ; zPos: -4.15 }
+ ListElement{ xPos: -4.2 ; yPos: -0.56 ; zPos: 1.45 }
+ ListElement{ xPos: 0.95 ; yPos: -2.4 ; zPos: -1.6 }
+ ListElement{ xPos: -0.05 ; yPos: 0.88 ; zPos: 3.15 }
+ ListElement{ xPos: -1.65 ; yPos: -0.88 ; zPos: -3.85 }
+ ListElement{ xPos: 0.35 ; yPos: 0.2 ; zPos: 4.25 }
+ ListElement{ xPos: 0.8 ; yPos: 0.84 ; zPos: 3.1 }
+ ListElement{ xPos: 1.85 ; yPos: -2.16 ; zPos: -2.2 }
+ ListElement{ xPos: -2.05 ; yPos: 0.16 ; zPos: -0.4 }
+ ListElement{ xPos: 0.85 ; yPos: 1.84 ; zPos: -1.45 }
+ ListElement{ xPos: 1.6 ; yPos: 1.56 ; zPos: -1.45 }
+ ListElement{ xPos: 1.25 ; yPos: -0.84 ; zPos: -2.95 }
+ ListElement{ xPos: -1.9 ; yPos: 2.32 ; zPos: -1.8 }
+ ListElement{ xPos: -0.6 ; yPos: 2.4 ; zPos: -3.65 }
+ ListElement{ xPos: 4.45 ; yPos: 0.52 ; zPos: 3 }
+ ListElement{ xPos: 2.7 ; yPos: 0.28 ; zPos: -1.8 }
+ ListElement{ xPos: 0.35 ; yPos: -2.56 ; zPos: 3.9 }
+ ListElement{ xPos: -0.95 ; yPos: -1.28 ; zPos: 1.6 }
+ ListElement{ xPos: 0.4 ; yPos: -0.2 ; zPos: -2.15 }
+ ListElement{ xPos: -0.05 ; yPos: -1.08 ; zPos: -4.1 }
+ ListElement{ xPos: 3.1 ; yPos: -1.2 ; zPos: -3.85 }
+ ListElement{ xPos: 0.75 ; yPos: 0.12 ; zPos: -3.1 }
+ ListElement{ xPos: -1.65 ; yPos: -1.16 ; zPos: -1.65 }
+ ListElement{ xPos: -1.65 ; yPos: 3.84 ; zPos: 4.65 }
+ ListElement{ xPos: 2.8 ; yPos: -2.6 ; zPos: -1.65 }
+ ListElement{ xPos: 1.2 ; yPos: -2.76 ; zPos: -2.2 }
+ ListElement{ xPos: 0.4 ; yPos: 3.04 ; zPos: 3.45 }
+ ListElement{ xPos: -3.6 ; yPos: 1.04 ; zPos: -0.6 }
+ ListElement{ xPos: 2.25 ; yPos: 1.64 ; zPos: 2.9 }
+ ListElement{ xPos: -3.05 ; yPos: -0.76 ; zPos: -2.3 }
+ ListElement{ xPos: -2.85 ; yPos: 2.12 ; zPos: -0.65 }
+ ListElement{ xPos: -0.1 ; yPos: 0.08 ; zPos: -1.6 }
+ ListElement{ xPos: -1.55 ; yPos: -1.36 ; zPos: 2.2 }
+ ListElement{ xPos: -0.4 ; yPos: 1.56 ; zPos: -0.3 }
+ ListElement{ xPos: 0.3 ; yPos: -2.36 ; zPos: 1.35 }
+ ListElement{ xPos: 0.2 ; yPos: -0.6 ; zPos: 1.6 }
+ ListElement{ xPos: -0.65 ; yPos: 1.96 ; zPos: -3.1 }
+ ListElement{ xPos: 0.6 ; yPos: -1.04 ; zPos: 2.5 }
+ ListElement{ xPos: -2 ; yPos: -1.08 ; zPos: -0.85 }
+ ListElement{ xPos: 1.45 ; yPos: -2.56 ; zPos: -2.6 }
+ ListElement{ xPos: -2.45 ; yPos: 0.04 ; zPos: -2.85 }
+ ListElement{ xPos: -0.05 ; yPos: -1.24 ; zPos: -1.25 }
+ ListElement{ xPos: -2.95 ; yPos: -1.8 ; zPos: -2.05 }
+ ListElement{ xPos: 4.3 ; yPos: -0.96 ; zPos: 3.5 }
+ ListElement{ xPos: 2.15 ; yPos: -1.6 ; zPos: -0.8 }
+ ListElement{ xPos: -1.2 ; yPos: -1 ; zPos: 1.75 }
+ ListElement{ xPos: -1.5 ; yPos: -1.28 ; zPos: -0.25 }
+ ListElement{ xPos: 2.5 ; yPos: -2.6 ; zPos: -0.3 }
+ ListElement{ xPos: -1.6 ; yPos: -0.36 ; zPos: 3.15 }
+ ListElement{ xPos: -0.1 ; yPos: -0.64 ; zPos: -3.6 }
+ ListElement{ xPos: -1.9 ; yPos: 1.88 ; zPos: 2.1 }
+ ListElement{ xPos: -2.85 ; yPos: -2.28 ; zPos: -1.55 }
+ ListElement{ xPos: -1.3 ; yPos: -0.48 ; zPos: -2.2 }
+ ListElement{ xPos: 0.5 ; yPos: 0.28 ; zPos: 0.65 }
+ ListElement{ xPos: -1.1 ; yPos: 0.24 ; zPos: -2.25 }
+ ListElement{ xPos: 1.75 ; yPos: -1.4 ; zPos: 0.3 }
+ ListElement{ xPos: 1.5 ; yPos: -1.32 ; zPos: -2.8 }
+ ListElement{ xPos: -0.95 ; yPos: 2.08 ; zPos: -0.3 }
+ ListElement{ xPos: 2.75 ; yPos: 0.24 ; zPos: 0.75 }
+ ListElement{ xPos: 0.75 ; yPos: 0.56 ; zPos: -1.5 }
+ ListElement{ xPos: 1.1 ; yPos: -3.76 ; zPos: 0 }
+ ListElement{ xPos: 0.3 ; yPos: -1.2 ; zPos: 2.6 }
+ ListElement{ xPos: -0.25 ; yPos: 2.68 ; zPos: -3 }
+ ListElement{ xPos: 1.8 ; yPos: -0.76 ; zPos: 4.4 }
+ ListElement{ xPos: 0 ; yPos: 0 ; zPos: -1.9 }
+ ListElement{ xPos: -1.6 ; yPos: -0.12 ; zPos: -2.4 }
+ ListElement{ xPos: -1.25 ; yPos: 2.36 ; zPos: -2.9 }
+ ListElement{ xPos: 2.65 ; yPos: 0.04 ; zPos: 0.1 }
+ ListElement{ xPos: -3.35 ; yPos: 0.08 ; zPos: -1.3 }
+ ListElement{ xPos: 3.35 ; yPos: 0.04 ; zPos: 2.8 }
+ ListElement{ xPos: 4.45 ; yPos: 1.24 ; zPos: -0.95 }
+ ListElement{ xPos: -0.1 ; yPos: -1.52 ; zPos: -4.6 }
+ ListElement{ xPos: 1.1 ; yPos: 1.72 ; zPos: -3.2 }
+ ListElement{ xPos: -0.45 ; yPos: 1.92 ; zPos: 1.2 }
+ ListElement{ xPos: -0.7 ; yPos: -0.16 ; zPos: 0.8 }
+ ListElement{ xPos: 2.3 ; yPos: 0.2 ; zPos: 2.75 }
+ ListElement{ xPos: 1.7 ; yPos: 2.08 ; zPos: -0.95 }
+ ListElement{ xPos: 2.1 ; yPos: 1.56 ; zPos: 1.2 }
+ ListElement{ xPos: 3.05 ; yPos: -1.56 ; zPos: -0.45 }
+ ListElement{ xPos: 0.1 ; yPos: -3.08 ; zPos: -1.3 }
+ ListElement{ xPos: 1.65 ; yPos: -0.32 ; zPos: -0.8 }
+ ListElement{ xPos: 2.05 ; yPos: -1.8 ; zPos: 1.8 }
+ ListElement{ xPos: -0.55 ; yPos: 1.52 ; zPos: -0.8 }
+ ListElement{ xPos: -2.05 ; yPos: 1.52 ; zPos: 2.3 }
+ ListElement{ xPos: -2.35 ; yPos: -3.28 ; zPos: 3.5 }
+ ListElement{ xPos: -2.25 ; yPos: 2.56 ; zPos: -1.9 }
+ ListElement{ xPos: 0.3 ; yPos: -3.28 ; zPos: 3.4 }
+ ListElement{ xPos: 0.95 ; yPos: -1.68 ; zPos: -1.8 }
+ ListElement{ xPos: 2 ; yPos: 2.2 ; zPos: -0.05 }
+ ListElement{ xPos: 3 ; yPos: 2.92 ; zPos: -2.1 }
+ ListElement{ xPos: 2.55 ; yPos: 3.12 ; zPos: 2.95 }
+ ListElement{ xPos: -0.5 ; yPos: -2.8 ; zPos: -0.3 }
+ ListElement{ xPos: 0.35 ; yPos: 0.64 ; zPos: 0.35 }
+ ListElement{ xPos: -1.15 ; yPos: -0.16 ; zPos: -0.45 }
+ ListElement{ xPos: -2.4 ; yPos: -0.88 ; zPos: -0.3 }
+ ListElement{ xPos: 1.55 ; yPos: -1.48 ; zPos: -0.5 }
+ ListElement{ xPos: -0.85 ; yPos: -2.08 ; zPos: -1.1 }
+ ListElement{ xPos: 0.5 ; yPos: -0.8 ; zPos: 1.35 }
+ ListElement{ xPos: -2.15 ; yPos: 1.04 ; zPos: -3.25 }
+ ListElement{ xPos: -0.65 ; yPos: -1.32 ; zPos: -3.1 }
+ ListElement{ xPos: 0.35 ; yPos: -0.84 ; zPos: -1.7 }
+ ListElement{ xPos: -2.1 ; yPos: 0.96 ; zPos: 2.5 }
+ ListElement{ xPos: 1 ; yPos: -0.6 ; zPos: -3.15 }
+ ListElement{ xPos: -1.35 ; yPos: 0.76 ; zPos: 3.45 }
+ ListElement{ xPos: -3.05 ; yPos: -1.2 ; zPos: 1.45 }
+ ListElement{ xPos: -1.6 ; yPos: 0.8 ; zPos: -1.9 }
+ ListElement{ xPos: 0.7 ; yPos: 1.68 ; zPos: 2.3 }
+ ListElement{ xPos: 0 ; yPos: -0.76 ; zPos: -0.95 }
+ ListElement{ xPos: -2.3 ; yPos: -0.16 ; zPos: -1.25 }
+ ListElement{ xPos: -0.55 ; yPos: -2.28 ; zPos: 1.5 }
+ ListElement{ xPos: 0 ; yPos: -0.24 ; zPos: 0.55 }
+ ListElement{ xPos: -0.4 ; yPos: -0.92 ; zPos: -0.7 }
+ ListElement{ xPos: -2.6 ; yPos: -1.64 ; zPos: -0.9 }
+ ListElement{ xPos: 0.25 ; yPos: -1.24 ; zPos: 0.9 }
+ ListElement{ xPos: 0.7 ; yPos: 2.88 ; zPos: 0.4 }
+ ListElement{ xPos: -0.6 ; yPos: -1.84 ; zPos: -2.4 }
+ ListElement{ xPos: 0.5 ; yPos: 2.8 ; zPos: 1.6 }
+ ListElement{ xPos: -3.2 ; yPos: 3.28 ; zPos: -3.45 }
+ ListElement{ xPos: -1.45 ; yPos: 2.52 ; zPos: 2.7 }
+ ListElement{ xPos: 1 ; yPos: -2.68 ; zPos: 3 }
+ ListElement{ xPos: -0.6 ; yPos: -2.56 ; zPos: 1.35 }
+ ListElement{ xPos: 1.95 ; yPos: -1.48 ; zPos: -3.85 }
+ ListElement{ xPos: 3.85 ; yPos: 0.08 ; zPos: -1.65 }
+ ListElement{ xPos: -1.1 ; yPos: -1.6 ; zPos: -1.05 }
+ ListElement{ xPos: 1.25 ; yPos: -0.04 ; zPos: 1.35 }
+ ListElement{ xPos: 2.9 ; yPos: 2.08 ; zPos: 0.2 }
+ ListElement{ xPos: 0.7 ; yPos: 2.52 ; zPos: 0.65 }
+ ListElement{ xPos: -1.85 ; yPos: -1.8 ; zPos: 1.05 }
+ ListElement{ xPos: 1.6 ; yPos: 1.12 ; zPos: -3.05 }
+ ListElement{ xPos: -2.8 ; yPos: 0.12 ; zPos: 0.5 }
+ ListElement{ xPos: -1.4 ; yPos: 1.64 ; zPos: -1.95 }
+ ListElement{ xPos: 2.35 ; yPos: 0.4 ; zPos: -0.95 }
+ ListElement{ xPos: 0.95 ; yPos: -0.28 ; zPos: -0.8 }
+ ListElement{ xPos: -1.5 ; yPos: -1.76 ; zPos: 2.5 }
+ ListElement{ xPos: -3.05 ; yPos: 2.44 ; zPos: -0.2 }
+ ListElement{ xPos: -0.6 ; yPos: 1.12 ; zPos: -0.5 }
+ ListElement{ xPos: -1.7 ; yPos: -0.72 ; zPos: -1.05 }
+ ListElement{ xPos: 0.45 ; yPos: 0.84 ; zPos: -0.1 }
+ ListElement{ xPos: -3.5 ; yPos: 0.36 ; zPos: 1.1 }
+ ListElement{ xPos: 0.2 ; yPos: -2.08 ; zPos: 0.25 }
+ ListElement{ xPos: -2.1 ; yPos: 0.72 ; zPos: 0.85 }
+ ListElement{ xPos: -2.45 ; yPos: -0.72 ; zPos: -0.8 }
+ ListElement{ xPos: 4.25 ; yPos: 1.84 ; zPos: -0.55 }
+ ListElement{ xPos: 0.1 ; yPos: -1.32 ; zPos: -1.45 }
+ ListElement{ xPos: -3.65 ; yPos: 0.36 ; zPos: 0.3 }
+ ListElement{ xPos: 0.9 ; yPos: 0.32 ; zPos: -3.6 }
+ ListElement{ xPos: -0.25 ; yPos: 1.84 ; zPos: 0 }
+ ListElement{ xPos: 3.5 ; yPos: 0.92 ; zPos: -2.1 }
+ ListElement{ xPos: 0.65 ; yPos: 2.36 ; zPos: 4 }
+ ListElement{ xPos: 0.55 ; yPos: -1.08 ; zPos: 0.2 }
+ ListElement{ xPos: 1 ; yPos: 0.04 ; zPos: -3.75 }
+ ListElement{ xPos: 0.05 ; yPos: 0.52 ; zPos: -3.8 }
+ ListElement{ xPos: 3.45 ; yPos: 0.56 ; zPos: 4.2 }
+ ListElement{ xPos: -0.25 ; yPos: 2.36 ; zPos: -3.55 }
+ ListElement{ xPos: 1.95 ; yPos: 1.28 ; zPos: 4.25 }
+ ListElement{ xPos: 1.8 ; yPos: 3.12 ; zPos: 0.65 }
+ ListElement{ xPos: -3.35 ; yPos: 0.8 ; zPos: -1 }
+ ListElement{ xPos: 2.4 ; yPos: -0.16 ; zPos: 1.25 }
+ ListElement{ xPos: 2.5 ; yPos: 0.96 ; zPos: 1.45 }
+ ListElement{ xPos: 0.8 ; yPos: -0.16 ; zPos: -0.55 }
+ ListElement{ xPos: -3.45 ; yPos: -0.08 ; zPos: 0.85 }
+ ListElement{ xPos: -3.4 ; yPos: 0.8 ; zPos: 1.35 }
+ ListElement{ xPos: -0.8 ; yPos: 0.24 ; zPos: -1.2 }
+ ListElement{ xPos: 3.6 ; yPos: 1.16 ; zPos: -0.1 }
+ ListElement{ xPos: -1.45 ; yPos: -3.08 ; zPos: -0.3 }
+ ListElement{ xPos: -3.65 ; yPos: -1.04 ; zPos: 0.15 }
+ ListElement{ xPos: 1.35 ; yPos: -0.76 ; zPos: 0.55 }
+ ListElement{ xPos: -2.75 ; yPos: -1 ; zPos: -1.55 }
+ ListElement{ xPos: 1.6 ; yPos: 2.04 ; zPos: 0.9 }
+ ListElement{ xPos: 3 ; yPos: -3.24 ; zPos: 0.1 }
+ ListElement{ xPos: -4.25 ; yPos: 0.56 ; zPos: -4.35 }
+ ListElement{ xPos: -2.6 ; yPos: -0.44 ; zPos: 0.5 }
+ ListElement{ xPos: 0.2 ; yPos: -0.64 ; zPos: -0.35 }
+ ListElement{ xPos: -3.2 ; yPos: -3.52 ; zPos: 1 }
+ ListElement{ xPos: -0.7 ; yPos: -1.84 ; zPos: -2.45 }
+ ListElement{ xPos: -4.1 ; yPos: 0.12 ; zPos: 3.85 }
+ ListElement{ xPos: -4.05 ; yPos: 0.04 ; zPos: -0.3 }
+ ListElement{ xPos: 2 ; yPos: 2.32 ; zPos: 1.2 }
+ ListElement{ xPos: -0.35 ; yPos: 1 ; zPos: -0.7 }
+ ListElement{ xPos: -0.9 ; yPos: 0.36 ; zPos: 1.55 }
+ ListElement{ xPos: -0.05 ; yPos: 2.4 ; zPos: -4.35 }
+ ListElement{ xPos: 1.5 ; yPos: -0.96 ; zPos: -3.4 }
+ ListElement{ xPos: -2.8 ; yPos: 2.08 ; zPos: -1.75 }
+ ListElement{ xPos: -0.2 ; yPos: 0.72 ; zPos: 0.9 }
+ ListElement{ xPos: -1.1 ; yPos: -1.68 ; zPos: 0.1 }
+ ListElement{ xPos: -1.2 ; yPos: -0.32 ; zPos: -0.85 }
+ ListElement{ xPos: 0.75 ; yPos: 0.56 ; zPos: 3.95 }
+ ListElement{ xPos: 1.15 ; yPos: 2.8 ; zPos: 0.65 }
+ ListElement{ xPos: -2.55 ; yPos: -2.56 ; zPos: 0.75 }
+ ListElement{ xPos: 0.95 ; yPos: 0.84 ; zPos: -0.85 }
+ ListElement{ xPos: -2.15 ; yPos: 0.24 ; zPos: -3.1 }
+ ListElement{ xPos: 0.35 ; yPos: -1.68 ; zPos: 0.45 }
+ ListElement{ xPos: -0.75 ; yPos: -2.4 ; zPos: -0.35 }
+ ListElement{ xPos: 0.2 ; yPos: 2.04 ; zPos: 0.1 }
+ ListElement{ xPos: -2.4 ; yPos: 0.68 ; zPos: 1.8 }
+ ListElement{ xPos: 1.9 ; yPos: 0.88 ; zPos: 1.45 }
+ ListElement{ xPos: 0.25 ; yPos: 1.92 ; zPos: -1.7 }
+ ListElement{ xPos: -0.95 ; yPos: -0.6 ; zPos: -2 }
+ ListElement{ xPos: 0.2 ; yPos: -2.44 ; zPos: 1.05 }
+ ListElement{ xPos: 0.3 ; yPos: -0.6 ; zPos: -3.35 }
+ ListElement{ xPos: 0.05 ; yPos: 0.52 ; zPos: -3.3 }
+ ListElement{ xPos: -0.05 ; yPos: -0.88 ; zPos: -0.8 }
+ ListElement{ xPos: 0.45 ; yPos: 2.84 ; zPos: -1.9 }
+ ListElement{ xPos: 2.85 ; yPos: -0.68 ; zPos: -2.45 }
+ ListElement{ xPos: -1.05 ; yPos: -1.92 ; zPos: 0.9 }
+ ListElement{ xPos: -2.75 ; yPos: -0.16 ; zPos: -1.55 }
+ ListElement{ xPos: 1.9 ; yPos: 1 ; zPos: 3.15 }
+ ListElement{ xPos: -2.25 ; yPos: 0.8 ; zPos: -4.35 }
+ ListElement{ xPos: 1.8 ; yPos: -0.72 ; zPos: -3.8 }
+ ListElement{ xPos: -3.25 ; yPos: -1.16 ; zPos: -1.85 }
+ ListElement{ xPos: -1.6 ; yPos: -2.32 ; zPos: -0.8 }
+ ListElement{ xPos: 3.1 ; yPos: 0.32 ; zPos: 2.15 }
+ ListElement{ xPos: -1.05 ; yPos: -0.56 ; zPos: -3.45 }
+ ListElement{ xPos: 0.75 ; yPos: -1.08 ; zPos: -0.25 }
+ ListElement{ xPos: -0.45 ; yPos: -2.24 ; zPos: 2.5 }
+ ListElement{ xPos: 0.2 ; yPos: 0.12 ; zPos: 0 }
+ ListElement{ xPos: -1 ; yPos: 1.56 ; zPos: -1.6 }
+ ListElement{ xPos: 1.3 ; yPos: -2.84 ; zPos: -0.25 }
+ ListElement{ xPos: 0.55 ; yPos: 1.36 ; zPos: 2.95 }
+ ListElement{ xPos: -1.9 ; yPos: -0.88 ; zPos: 0.05 }
+ ListElement{ xPos: -1.9 ; yPos: 0.56 ; zPos: -0.7 }
+ ListElement{ xPos: -1.25 ; yPos: -0.52 ; zPos: 2.35 }
+ ListElement{ xPos: 2.1 ; yPos: -0.72 ; zPos: -1.4 }
+ ListElement{ xPos: -0.9 ; yPos: -0.72 ; zPos: -2.05 }
+ ListElement{ xPos: 0.9 ; yPos: -0.96 ; zPos: -3 }
+ ListElement{ xPos: 2.7 ; yPos: -2.36 ; zPos: 1.25 }
+ ListElement{ xPos: 3.3 ; yPos: -1 ; zPos: -3.55 }
+ ListElement{ xPos: -0.75 ; yPos: -1.96 ; zPos: 2 }
+ ListElement{ xPos: -0.45 ; yPos: 0.52 ; zPos: -0.1 }
+ ListElement{ xPos: 0.8 ; yPos: 0 ; zPos: -3.3 }
+ ListElement{ xPos: -0.45 ; yPos: -0.44 ; zPos: -2.8 }
+ ListElement{ xPos: -3.2 ; yPos: 3.12 ; zPos: 0.5 }
+ ListElement{ xPos: -3.1 ; yPos: 2.84 ; zPos: -0.45 }
+ ListElement{ xPos: 0.2 ; yPos: -1.2 ; zPos: 0.9 }
+ ListElement{ xPos: -0.65 ; yPos: -1.4 ; zPos: -1.35 }
+ ListElement{ xPos: -0.45 ; yPos: 1.84 ; zPos: -0.95 }
+ ListElement{ xPos: -1.3 ; yPos: 0.8 ; zPos: -1 }
+ ListElement{ xPos: 2.35 ; yPos: -0.28 ; zPos: 1.55 }
+ ListElement{ xPos: 2 ; yPos: -2.4 ; zPos: 1.2 }
+ ListElement{ xPos: 1.2 ; yPos: -1.72 ; zPos: -0.4 }
+ ListElement{ xPos: -2 ; yPos: 3.04 ; zPos: 1.9 }
+ ListElement{ xPos: -1.85 ; yPos: -0.16 ; zPos: -2.9 }
+ ListElement{ xPos: -0.95 ; yPos: -2.76 ; zPos: 2.5 }
+ ListElement{ xPos: 2.55 ; yPos: -0.64 ; zPos: 3.25 }
+ ListElement{ xPos: -0.6 ; yPos: -0.72 ; zPos: -1.45 }
+ ListElement{ xPos: 0.8 ; yPos: 0.16 ; zPos: 2.2 }
+ ListElement{ xPos: 0.6 ; yPos: 0.04 ; zPos: 3.2 }
+ ListElement{ xPos: -3.75 ; yPos: -0.24 ; zPos: 0.2 }
+ ListElement{ xPos: 0.4 ; yPos: -0.32 ; zPos: 0.6 }
+ ListElement{ xPos: -2.1 ; yPos: -3.68 ; zPos: 0.2 }
+ ListElement{ xPos: 0.45 ; yPos: -2.44 ; zPos: 3 }
+ ListElement{ xPos: 0.5 ; yPos: -1.8 ; zPos: -1.9 }
+ ListElement{ xPos: 0 ; yPos: 1.8 ; zPos: -1.25 }
+ ListElement{ xPos: 2.6 ; yPos: 2.2 ; zPos: -4.25 }
+ ListElement{ xPos: 0.25 ; yPos: 2.28 ; zPos: -0.4 }
+ ListElement{ xPos: -0.3 ; yPos: -1.24 ; zPos: 0.7 }
+ ListElement{ xPos: 0.1 ; yPos: -3 ; zPos: 0.05 }
+ ListElement{ xPos: -1.2 ; yPos: -0.76 ; zPos: 2.65 }
+ ListElement{ xPos: 2.8 ; yPos: 0.44 ; zPos: 0.55 }
+ ListElement{ xPos: 2.6 ; yPos: -0.68 ; zPos: 0.2 }
+ ListElement{ xPos: 1.75 ; yPos: -0.16 ; zPos: -3.6 }
+ ListElement{ xPos: -0.55 ; yPos: -0.16 ; zPos: 2.3 }
+ ListElement{ xPos: 0.1 ; yPos: -1.72 ; zPos: -0.4 }
+ ListElement{ xPos: 3.6 ; yPos: -0.84 ; zPos: -0.2 }
+ ListElement{ xPos: -1.4 ; yPos: -1.48 ; zPos: -2.7 }
+ ListElement{ xPos: 1.1 ; yPos: -0.2 ; zPos: -2.75 }
+ ListElement{ xPos: -1.85 ; yPos: 1.76 ; zPos: -0.85 }
+ ListElement{ xPos: 0.05 ; yPos: -0.4 ; zPos: 1.05 }
+ ListElement{ xPos: -1.25 ; yPos: 0.52 ; zPos: -0.3 }
+ ListElement{ xPos: -0.85 ; yPos: -0.24 ; zPos: 1.9 }
+ ListElement{ xPos: -1.95 ; yPos: -0.08 ; zPos: -1.95 }
+ ListElement{ xPos: -2.7 ; yPos: -0.52 ; zPos: -0.35 }
+ ListElement{ xPos: 0.1 ; yPos: 0.16 ; zPos: 4.1 }
+ ListElement{ xPos: -0.6 ; yPos: -0.52 ; zPos: -1.2 }
+ ListElement{ xPos: -2.3 ; yPos: -0.4 ; zPos: -2.85 }
+ ListElement{ xPos: -0.35 ; yPos: -1.2 ; zPos: -1.85 }
+ ListElement{ xPos: 1.7 ; yPos: -0.2 ; zPos: 3.35 }
+ ListElement{ xPos: 2.75 ; yPos: -2.32 ; zPos: 3.15 }
+ ListElement{ xPos: 2.85 ; yPos: 0.44 ; zPos: 0.9 }
+ ListElement{ xPos: -2.1 ; yPos: 0.4 ; zPos: 1 }
+ ListElement{ xPos: 4.45 ; yPos: -0.4 ; zPos: -3.75 }
+ ListElement{ xPos: 0.7 ; yPos: -1.44 ; zPos: 0.85 }
+ ListElement{ xPos: -0.85 ; yPos: 1.76 ; zPos: 1.05 }
+ ListElement{ xPos: -0.4 ; yPos: -0.92 ; zPos: -2.4 }
+ ListElement{ xPos: -1 ; yPos: -0.28 ; zPos: -1.6 }
+ ListElement{ xPos: -0.75 ; yPos: 0.56 ; zPos: -0.75 }
+ ListElement{ xPos: 0.55 ; yPos: 1.72 ; zPos: -0.2 }
+ ListElement{ xPos: 2.75 ; yPos: -0.24 ; zPos: -0.5 }
+ ListElement{ xPos: -2.2 ; yPos: -1.04 ; zPos: -4.05 }
+ ListElement{ xPos: 3.35 ; yPos: -0.56 ; zPos: -2.9 }
+ ListElement{ xPos: 2.4 ; yPos: -0.32 ; zPos: -1.55 }
+ ListElement{ xPos: 0.85 ; yPos: -0.88 ; zPos: -2.1 }
+ ListElement{ xPos: 0.4 ; yPos: 0.24 ; zPos: -0.45 }
+ ListElement{ xPos: -4.1 ; yPos: -0.72 ; zPos: 0.35 }
+ ListElement{ xPos: -0.5 ; yPos: 0.04 ; zPos: -0.95 }
+ ListElement{ xPos: -2.8 ; yPos: 2.92 ; zPos: 0.95 }
+ ListElement{ xPos: -1.65 ; yPos: 0.96 ; zPos: 1.25 }
+ ListElement{ xPos: 1.45 ; yPos: 0.84 ; zPos: 0.25 }
+ ListElement{ xPos: 2.2 ; yPos: -1.76 ; zPos: 0 }
+ ListElement{ xPos: -0.75 ; yPos: 1.08 ; zPos: -2.1 }
+ ListElement{ xPos: -3.15 ; yPos: -0.16 ; zPos: -1.1 }
+ ListElement{ xPos: 2.55 ; yPos: -1.6 ; zPos: 1.1 }
+ ListElement{ xPos: 0.15 ; yPos: 1.84 ; zPos: 0.4 }
+ ListElement{ xPos: -1.5 ; yPos: 2.04 ; zPos: 3.2 }
+ ListElement{ xPos: -1.05 ; yPos: -0.84 ; zPos: -1.9 }
+ ListElement{ xPos: 0.1 ; yPos: -2.96 ; zPos: -0.2 }
+ ListElement{ xPos: 2.6 ; yPos: 0.68 ; zPos: -2.6 }
+ ListElement{ xPos: -0.4 ; yPos: -0.36 ; zPos: -1.05 }
+ ListElement{ xPos: 1.1 ; yPos: 0.04 ; zPos: -2.4 }
+ ListElement{ xPos: -2.3 ; yPos: 1.4 ; zPos: -0.1 }
+ ListElement{ xPos: 0.85 ; yPos: -1.2 ; zPos: 1.5 }
+ ListElement{ xPos: 0.1 ; yPos: 0.24 ; zPos: -2.75 }
+ ListElement{ xPos: 1.15 ; yPos: 1.32 ; zPos: -1.7 }
+ ListElement{ xPos: 0.35 ; yPos: -1.6 ; zPos: -2.75 }
+ ListElement{ xPos: 0.35 ; yPos: -1.36 ; zPos: 2.55 }
+ ListElement{ xPos: -1.65 ; yPos: -0.28 ; zPos: 2.75 }
+ ListElement{ xPos: -3.8 ; yPos: -3.28 ; zPos: 2.55 }
+ ListElement{ xPos: -2.6 ; yPos: 1.08 ; zPos: -0.45 }
+ ListElement{ xPos: 1.6 ; yPos: -2.2 ; zPos: 2.45 }
+ ListElement{ xPos: -0.75 ; yPos: 1.16 ; zPos: -1.9 }
+ ListElement{ xPos: -2.05 ; yPos: 3.04 ; zPos: 1.9 }
+ ListElement{ xPos: -0.6 ; yPos: 2.88 ; zPos: 1 }
+ ListElement{ xPos: 3.25 ; yPos: -2 ; zPos: -0.35 }
+ ListElement{ xPos: -0.7 ; yPos: 1.36 ; zPos: 1.85 }
+ ListElement{ xPos: 0.85 ; yPos: 1.08 ; zPos: 0.95 }
+ ListElement{ xPos: 1.15 ; yPos: 1.32 ; zPos: 3.4 }
+ ListElement{ xPos: 3.6 ; yPos: 0.44 ; zPos: -0.4 }
+ ListElement{ xPos: 0.9 ; yPos: 2.12 ; zPos: 1.95 }
+ ListElement{ xPos: -0.6 ; yPos: -0.24 ; zPos: 1.05 }
+ ListElement{ xPos: -1.6 ; yPos: 0.64 ; zPos: -1.3 }
+ ListElement{ xPos: -1.3 ; yPos: -0.6 ; zPos: -1.95 }
+ ListElement{ xPos: -0.1 ; yPos: 0.36 ; zPos: -1.25 }
+ ListElement{ xPos: 1 ; yPos: -1.48 ; zPos: 0.95 }
+ ListElement{ xPos: 1.2 ; yPos: -1.92 ; zPos: -0.9 }
+ ListElement{ xPos: 0.1 ; yPos: 2.2 ; zPos: -0.4 }
+ ListElement{ xPos: -2.85 ; yPos: 0.64 ; zPos: 0.55 }
+ ListElement{ xPos: -1.6 ; yPos: 2.56 ; zPos: -2.2 }
+ ListElement{ xPos: -3.2 ; yPos: -0.08 ; zPos: -0.65 }
+ ListElement{ xPos: 3.15 ; yPos: -0.76 ; zPos: 1.15 }
+ ListElement{ xPos: 1.2 ; yPos: 0.6 ; zPos: -2.6 }
+ ListElement{ xPos: 2.65 ; yPos: -3.52 ; zPos: 1.5 }
+ ListElement{ xPos: -1.85 ; yPos: -1.76 ; zPos: -1.7 }
+ ListElement{ xPos: -1.55 ; yPos: 1.2 ; zPos: 2.15 }
+ ListElement{ xPos: -0.55 ; yPos: 2.88 ; zPos: -2.85 }
+ ListElement{ xPos: -3.1 ; yPos: -0.28 ; zPos: -3.35 }
+ ListElement{ xPos: 2.45 ; yPos: 0.08 ; zPos: -2.2 }
+ ListElement{ xPos: -2.05 ; yPos: 0.88 ; zPos: -0.65 }
+ ListElement{ xPos: 1.1 ; yPos: -0.56 ; zPos: -3.65 }
+ ListElement{ xPos: -0.5 ; yPos: -0.68 ; zPos: 0.3 }
+ ListElement{ xPos: 0.4 ; yPos: 0.88 ; zPos: -1.65 }
+ ListElement{ xPos: 1.65 ; yPos: 0.16 ; zPos: 0.75 }
+ ListElement{ xPos: -0.2 ; yPos: 1.72 ; zPos: 0.6 }
+ ListElement{ xPos: 1.15 ; yPos: -0.48 ; zPos: 0.1 }
+ ListElement{ xPos: 0.05 ; yPos: 1.04 ; zPos: 2.15 }
+ ListElement{ xPos: 0.15 ; yPos: -0.64 ; zPos: -1.3 }
+ ListElement{ xPos: 1.7 ; yPos: -1.88 ; zPos: -2.85 }
+ ListElement{ xPos: 3.35 ; yPos: 1.28 ; zPos: -1.05 }
+ ListElement{ xPos: -3.7 ; yPos: -2.88 ; zPos: -1.05 }
+ ListElement{ xPos: -1.7 ; yPos: 3.08 ; zPos: 0.15 }
+ ListElement{ xPos: 3 ; yPos: -2.52 ; zPos: -2.45 }
+ ListElement{ xPos: -0.15 ; yPos: 0.16 ; zPos: -0.3 }
+ ListElement{ xPos: -2.15 ; yPos: -0.8 ; zPos: 1.25 }
+ ListElement{ xPos: -1.95 ; yPos: -0.84 ; zPos: -3.1 }
+ ListElement{ xPos: -0.2 ; yPos: -0.8 ; zPos: -3.55 }
+ ListElement{ xPos: 0.4 ; yPos: 0.32 ; zPos: -1.55 }
+ ListElement{ xPos: 1.9 ; yPos: -2.84 ; zPos: -0.55 }
+ ListElement{ xPos: 1.05 ; yPos: 1.32 ; zPos: 0.6 }
+ ListElement{ xPos: 2.4 ; yPos: 1 ; zPos: 2.35 }
+ ListElement{ xPos: -0.7 ; yPos: 0.28 ; zPos: -1.3 }
+ ListElement{ xPos: 0.85 ; yPos: 0.96 ; zPos: -2.7 }
+ ListElement{ xPos: -0.85 ; yPos: -0.88 ; zPos: 1.1 }
+ ListElement{ xPos: 1.5 ; yPos: 0.28 ; zPos: -3.1 }
+ ListElement{ xPos: 1.9 ; yPos: 0.28 ; zPos: -1.75 }
+ ListElement{ xPos: 0.2 ; yPos: -2.04 ; zPos: -0.85 }
+ ListElement{ xPos: -1.5 ; yPos: 2.04 ; zPos: -1.35 }
+ ListElement{ xPos: -0.7 ; yPos: 1.24 ; zPos: 1.95 }
+ ListElement{ xPos: 1.65 ; yPos: -1.04 ; zPos: -0.95 }
+ ListElement{ xPos: -2.35 ; yPos: -1.76 ; zPos: -0.2 }
+ ListElement{ xPos: 0.85 ; yPos: -2.92 ; zPos: 3.4 }
+ ListElement{ xPos: -0.7 ; yPos: 2.52 ; zPos: 1 }
+ ListElement{ xPos: -3.4 ; yPos: 0.6 ; zPos: 0.9 }
+
+ ListElement{ xPos: 8.0; yPos: -2.0; zPos: 4.0 }
+ ListElement{ xPos: 7.8; yPos: -2.2; zPos: 5.0 }
+ ListElement{ xPos: 7.6; yPos: -2.4; zPos: 4.5 }
+ ListElement{ xPos: 7.4; yPos: -2.6; zPos: 3.8 }
+ ListElement{ xPos: 7.2; yPos: -2.8; zPos: 4.8 }
+ ListElement{ xPos: 7.0; yPos: -2.3; zPos: 4.1 }
+ ListElement{ xPos: 6.9; yPos: -3.3; zPos: 4.9 }
+ ListElement{ xPos: 6.7; yPos: -3.5; zPos: 3.5 }
+ ListElement{ xPos: 6.5; yPos: -3.7; zPos: 3.3 }
+ ListElement{ xPos: 6.3; yPos: -3.4; zPos: 3.7 }
+ ListElement{ xPos: 7.9 ; yPos: -3.32 ; zPos: 2.48 }
+ ListElement{ xPos: 6.2 ; yPos: -4.04 ; zPos: 3.4 }
+ ListElement{ xPos: 8.06 ; yPos: -4.6 ; zPos: 4.08 }
+ ListElement{ xPos: 5.98 ; yPos: -2.26 ; zPos: 2.82 }
+ ListElement{ xPos: 5.46 ; yPos: -3.9 ; zPos: 3.2 }
+ ListElement{ xPos: 8.14 ; yPos: -3.34 ; zPos: 3.42 }
+ ListElement{ xPos: 6.84 ; yPos: -5.0 ; zPos: 2.36 }
+ ListElement{ xPos: 7.6 ; yPos: -3.82 ; zPos: 2.78 }
+ ListElement{ xPos: 7.1 ; yPos: -3.94 ; zPos: 2.7 }
+ ListElement{ xPos: 6.02 ; yPos: -4.36 ; zPos: 2.56 }
+ ListElement{ xPos: 8.64 ; yPos: -3.04 ; zPos: 2.62 }
+ ListElement{ xPos: 7.82 ; yPos: -3.68 ; zPos: 2.96 }
+ ListElement{ xPos: 7.1 ; yPos: -3.6 ; zPos: 4.22 }
+ ListElement{ xPos: 7.6 ; yPos: -3.88 ; zPos: 3.9 }
+ ListElement{ xPos: 7.46 ; yPos: -4.2 ; zPos: 3.32 }
+ ListElement{ xPos: 6.98 ; yPos: -3.94 ; zPos: 3.1 }
+ ListElement{ xPos: 7.36 ; yPos: -4.24 ; zPos: 1.72 }
+ ListElement{ xPos: 8.42 ; yPos: -4.52 ; zPos: 2.62 }
+ ListElement{ xPos: 6.04 ; yPos: -4.48 ; zPos: 2.74 }
+ ListElement{ xPos: 8.7 ; yPos: -3.92 ; zPos: 3.82 }
+ ListElement{ xPos: 6.76 ; yPos: -3.5 ; zPos: 2.92 }
+ ListElement{ xPos: 7 ; yPos: -4.42 ; zPos: 2.62 }
+ ListElement{ xPos: 5.32 ; yPos: -3.28 ; zPos: 3.34 }
+ ListElement{ xPos: 6.4 ; yPos: -4.6 ; zPos: 2.4 }
+ ListElement{ xPos: 5.66 ; yPos: -4.98 ; zPos: 3.72 }
+ }
+}
diff --git a/examples/qmlscatter/qml/qmlscatter/main.qml b/examples/qmlscatter/qml/qmlscatter/main.qml
index 6238529d..e5f1de62 100644
--- a/examples/qmlscatter/qml/qmlscatter/main.qml
+++ b/examples/qmlscatter/qml/qmlscatter/main.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,194 +16,146 @@
**
****************************************************************************/
+//! [0]
import QtQuick 2.1
-import QtQuick.Controls 1.0
-import com.digia.QtDataVis3D 1.0
+import com.digia.QtDataVisualization 1.0
+import "."
+//! [0]
+//! [1]
Item {
- id: mainview
- width: 800
- height: 700
+ id: mainView
visible: true
+ //! [1]
+ //! [4]
+ Data {
+ id: graphData
+ }
+ //! [4]
+
+ //! [8]
+ //! [9]
Item {
id: dataView
+ anchors.bottom: parent.bottom
+ //! [9]
width: parent.width
height: parent.height - shadowToggle.height
- anchors.bottom: parent.bottom
-
- ScatterDataMapping {
- id: scatterMapping
- xPosRole: "xPos"
- yPosRole: "yPos"
- zPosRole: "zPos"
- }
-
- ListModel {
- id: dataModel
- ListElement{ xPos: -10.0; yPos: 4.9; zPos: -5.0 }
- ListElement{ xPos: 10.0; yPos: 4.9; zPos: -5.0 }
- ListElement{ xPos: -10.0; yPos: 4.9; zPos: 5.0 }
- ListElement{ xPos: 10.0; yPos: 4.9; zPos: 5.0 }
- ListElement{ xPos: -10.0; yPos: -4.9; zPos: -5.0 }
- ListElement{ xPos: 10.0; yPos: -4.9; zPos: -5.0 }
- ListElement{ xPos: -10.0; yPos: -4.9; zPos: 5.0 }
- ListElement{ xPos: 10.0; yPos: -4.9; zPos: 5.0 }
-
- ListElement{ xPos: -1.0; yPos: 0.3; zPos: -0.5 }
- ListElement{ xPos: 1.0; yPos: 2.105; zPos: 0.5 }
- ListElement{ xPos: 0.5; yPos: -0.65; zPos: -0.5 }
- ListElement{ xPos: -0.5; yPos: 1.225; zPos: 0.5 }
- ListElement{ xPos: 0.0; yPos: 0.0; zPos: 0.0 }
- ListElement{ xPos: 0.0; yPos: 2.0; zPos: 0.0 }
- ListElement{ xPos: 0.0; yPos: -0.5; zPos: 0.0 }
-
- ListElement{ xPos: 6.0; yPos: 0.0; zPos: 4.0 }
- ListElement{ xPos: 5.8; yPos: 0.2; zPos: 5.0 }
- ListElement{ xPos: 5.6; yPos: 0.4; zPos: 4.5 }
- ListElement{ xPos: 5.4; yPos: 0.6; zPos: 3.8 }
- ListElement{ xPos: 5.2; yPos: 0.8; zPos: 4.8 }
- ListElement{ xPos: 5.0; yPos: 0.3; zPos: 4.1 }
- ListElement{ xPos: 4.9; yPos: -0.3; zPos: 4.9 }
- ListElement{ xPos: 4.7; yPos: -0.5; zPos: 3.5 }
- ListElement{ xPos: 4.5; yPos: -0.7; zPos: 3.3 }
- ListElement{ xPos: 4.3; yPos: -0.4; zPos: 3.7 }
- }
+ //! [8]
+ //! [2]
Scatter3D {
- id: testscatter
+ id: scatterGraph
width: dataView.width
height: dataView.height
- fontSize: 30.0
- mapping: scatterMapping
- shadowQuality: Scatter3D.ShadowNone
- selectionMode: Scatter3D.ModeItem
- labelTransparency: Scatter3D.TransparencyNoBackground
-
- Component.onCompleted: {
- console.log("testscatter complete");
- data = dataModel
- }
+ //! [2]
+ //! [3]
+ font.family: "Lucida Handwriting"
+ font.pointSize: 40
+ theme: AbstractGraph3D.ThemeIsabelle
+ shadowQuality: AbstractGraph3D.ShadowQualitySoftLow
+ //! [3]
+ //! [5]
+ dataProxy: graphData.proxy
+ //! [5]
+ //! [6]
+ itemLabelFormat: "X:@xLabel Y:@yLabel Z:@zLabel"
+ axisX.segmentCount: 3
+ axisX.subSegmentCount: 2
+ axisX.labelFormat: "%.2f"
+ axisZ.segmentCount: 2
+ axisZ.subSegmentCount: 2
+ axisZ.labelFormat: "%.2f"
+ axisY.segmentCount: 2
+ axisY.subSegmentCount: 2
+ axisY.labelFormat: "%.2f"
+ //! [6]
}
}
- Rectangle {
+ //! [7]
+ NewButton {
id: shadowToggle
- width: 120
- height: 30
-
- TextArea {
- id: shadowText
- text: "Toggle Shadows On"
- anchors.fill: parent
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (testscatter.shadowQuality === Scatter3D.ShadowNone) {
- testscatter.shadowQuality = Scatter3D.ShadowMedium;
- shadowText.text = "Toggle Shadows Off";
- } else {
- testscatter.shadowQuality = Scatter3D.ShadowNone;
- shadowText.text = "Toggle Shadows On";
- }
+ width: parent.width / 6 // We're adding 6 buttons and want to divide them equally
+ text: "Hide Shadows"
+ onClicked: {
+ if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) {
+ scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualitySoftLow;
+ text = "Hide Shadows";
+ } else {
+ scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
+ text = "Show Shadows";
}
}
}
- Rectangle {
+ //! [7]
+
+ NewButton {
id: smoothToggle
- width: 140
- height: 30
+ width: parent.width / 6
+ text: "Use Smooth Dots"
anchors.left: shadowToggle.right
-
- TextArea {
- id: smoothText
- text: "Toggle Smooth Objects On"
- anchors.fill: parent
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (testscatter.objectSmooth === false) {
- smoothText.text = "Toggle Smooth Objects Off"
- testscatter.objectSmooth = true;
- } else {
- smoothText.text = "Toggle Smooth Objects On"
- testscatter.objectSmooth = false;
- }
+ onClicked: {
+ if (scatterGraph.objectSmoothingEnabled === false) {
+ text = "Use Flat Dots";
+ scatterGraph.objectSmoothingEnabled = true;
+ } else {
+ text = "Use Smooth Dots"
+ scatterGraph.objectSmoothingEnabled = false;
}
}
}
- Rectangle {
+
+ NewButton {
id: cameraToggle
- width: 130
- height: 30
+ width: parent.width / 6
+ text: "Change Camera Placement"
anchors.left: smoothToggle.right
-
- TextArea {
- text: "Toggle Camera Preset"
- anchors.fill: parent
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (testscatter.cameraPreset === Scatter3D.PresetFront) {
- testscatter.cameraPreset = Scatter3D.PresetIsometricRightHigh;
- } else {
- testscatter.cameraPreset = Scatter3D.PresetFront;
- }
+ onClicked: {
+ if (scatterGraph.scene.activeCamera.cameraPreset === AbstractGraph3D.CameraPresetFront) {
+ scatterGraph.scene.activeCamera.cameraPreset = AbstractGraph3D.CameraPresetIsometricRightHigh;
+ } else {
+ scatterGraph.scene.activeCamera.cameraPreset = AbstractGraph3D.CameraPresetFront;
}
}
}
- Rectangle {
+
+ NewButton {
id: themeToggle
- width: 120
- height: 30
+ width: parent.width / 6
+ text: "Change Theme"
anchors.left: cameraToggle.right
-
- TextArea {
- text: "Toggle Theme"
- anchors.fill: parent
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (testscatter.theme === Scatter3D.ThemeBlueCerulean) {
- testscatter.theme = Scatter3D.ThemeSystem;
- } else {
- testscatter.theme = Scatter3D.ThemeBlueCerulean;
- }
+ onClicked: {
+ if (scatterGraph.theme === AbstractGraph3D.ThemeArmyBlue) {
+ scatterGraph.theme = AbstractGraph3D.ThemeIsabelle;
+ } else {
+ scatterGraph.theme = AbstractGraph3D.ThemeArmyBlue;
}
}
}
- Rectangle {
+
+ NewButton {
id: backgroundToggle
- width: 130
- height: 30
+ width: parent.width / 6
+ text: "Hide Background"
anchors.left: themeToggle.right
-
- TextArea {
- id: backgroundText
- text: "Toggle Background Off"
- anchors.fill: parent
- }
-
- MouseArea {
- anchors.fill: parent
- onClicked: {
- if (testscatter.backgroundVisible === true) {
- testscatter.backgroundVisible = false;
- backgroundText.text = "Toggle Background On";
- } else {
- testscatter.backgroundVisible = true;
- backgroundText.text = "Toggle Background Off";
- }
+ onClicked: {
+ if (scatterGraph.backgroundVisible === true) {
+ scatterGraph.backgroundVisible = false;
+ text = "Show Background";
+ } else {
+ scatterGraph.backgroundVisible = true;
+ text = "Hide Background";
}
}
}
+ NewButton {
+ id: exitButton
+ width: parent.width / 6
+ text: "Quit"
+ anchors.left: backgroundToggle.right
+ onClicked: Qt.quit(0);
+ }
}
diff --git a/examples/barchart/doc/src/barchart.qdoc b/examples/qmlscatter/qml/qmlscatter/newbutton.qml
index 6c2c8760..895db183 100644
--- a/examples/barchart/doc/src/barchart.qdoc
+++ b/examples/qmlscatter/qml/qmlscatter/newbutton.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,13 +16,28 @@
**
****************************************************************************/
-/*!
- \example barchart
- \title Barchart Example
+import QtQuick 2.1
+import QtQuick.Controls 1.0
- The barchart example shows how to make a simple 3D bar chart using Q3DBars.
+Item {
+ id: newbutton
- \image barchart-example.png
+ property alias text: buttonText.text
- TODO
-*/
+ signal clicked
+
+ height: 80
+
+ Button {
+ width: parent.width
+ height: parent.height
+ Text {
+ id: buttonText
+ wrapMode: Text.WordWrap
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ anchors.fill: parent
+ }
+ onClicked: newbutton.clicked()
+ }
+}
diff --git a/examples/qmlscatter/qmlscatter.pro b/examples/qmlscatter/qmlscatter.pro
index 6f89fbae..0c66c5ae 100644
--- a/examples/qmlscatter/qmlscatter.pro
+++ b/examples/qmlscatter/qmlscatter.pro
@@ -2,6 +2,8 @@
error( "Couldn't find the examples.pri file!" )
}
+QT += widgets
+
# Add more folders to ship with the application, here
folder_01.source = qml/qmlscatter
folder_01.target = qml
@@ -13,11 +15,11 @@ QML_IMPORT_PATH =
# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp
-# Installation path
-# target.path =
-
# Please do not modify the following two lines. Required for deployment.
include(qtquick2applicationviewer/qtquick2applicationviewer.pri)
qtcAddDeployment()
RESOURCES += qmlscatter.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/*
diff --git a/examples/qmlscatter/qmlscatter.qrc b/examples/qmlscatter/qmlscatter.qrc
index 62f5931b..6b77a4bc 100644
--- a/examples/qmlscatter/qmlscatter.qrc
+++ b/examples/qmlscatter/qmlscatter.qrc
@@ -1,5 +1,7 @@
<RCC>
<qresource prefix="/qml">
<file alias="main.qml">qml/qmlscatter/main.qml</file>
+ <file alias="Data.qml">qml/qmlscatter/data.qml</file>
+ <file alias="NewButton.qml">qml/qmlscatter/newbutton.qml</file>
</qresource>
</RCC>
diff --git a/examples/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri
index e5f7990f..a071e63d 100644
--- a/examples/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri
+++ b/examples/qmlscatter/qtquick2applicationviewer/qtquick2applicationviewer.pri
@@ -61,16 +61,6 @@ android-no-sdk {
export($$itempath)
INSTALLS += $$item
}
-
- x86 {
- target.path = /libs/x86
- } else: armeabi-v7a {
- target.path = /libs/armeabi-v7a
- } else {
- target.path = /libs/armeabi
- }
-
- export(target.path)
INSTALLS += target
} else:win32 {
copyCommand =
diff --git a/examples/qmlsurface/doc/images/qmlsurface-example.png b/examples/qmlsurface/doc/images/qmlsurface-example.png
new file mode 100644
index 00000000..32396b40
--- /dev/null
+++ b/examples/qmlsurface/doc/images/qmlsurface-example.png
Binary files differ
diff --git a/examples/qmlsurface/doc/src/qmlsurface.qdoc b/examples/qmlsurface/doc/src/qmlsurface.qdoc
new file mode 100644
index 00000000..c93ed2d6
--- /dev/null
+++ b/examples/qmlsurface/doc/src/qmlsurface.qdoc
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+/*!
+ \example qmlsurface
+ \title Qt Quick 2 Surface Example
+ \ingroup qtdatavisualization_examples
+ \brief Using Surface3D in a QML application.
+
+ The Qt Quick 2 surface example shows how to make a simple 3D surface plot using Surface3D with
+ Qt Quick 2.
+
+ \image qmlsurface-example.png
+
+ The focus in this example is on generating a surface graph from height data, so in this section
+ we skip explaining application creation. For more detailed QML example documentation,
+ see \l{Qt Quick 2 Scatter Example}.
+
+ \section1 Adding data to the graph
+
+ This example shows two method to set data to surface graph, using the HeightMapSurfaceDataProxy
+ and ItemModelSurfaceDataProxy. First we go through setting the data using height map specific
+ data proxy. It is done with the code snippet below. The \c heightMapFile property specifies the image
+ file containing the height data. The value properties defines the minimum and maximum values for
+ surface area width and depth. This example shows the terrain around Tycho crater at imaginary
+ position from 67 to 97 and from 30 to 60. Note that on the graph the scale on the Y dimension
+ exaggerates the height.
+
+ \snippet ../examples/qmlsurface/qml/qmlsurface/data.qml 0
+
+ The other method to set surface data used in this example is with model mapping. We do that by first
+ defining a ListModel containing the data for the surface:
+
+ \snippet ../examples/qmlsurface/qml/qmlsurface/data.qml 1
+ \dots 4
+
+ Then we set up a SurfaceDataMapping which maps the roles for columns, rows and values. In this
+ example the row holds values for longitude, column for latitude and the value is for height.
+
+ \snippet ../examples/qmlsurface/qml/qmlsurface/data.qml 2
+
+ The ItemModelSurfaceDataProxy is created to tie the model and the mapping together.
+
+ \snippet ../examples/qmlsurface/qml/qmlsurface/data.qml 3
+
+ \section1 Showing data
+
+ In the \c main.qml, we set up the Surface3D element to show the data and various UI elements
+ to illustrate few interesting features. First is the surface gradient, which can be defined
+ as seen in this code snippet. With the \c ColorGradient we set example colors from position 0.0 to
+ 1.0. This element is set for \c gradient property in Surface3D.
+
+ \snippet ../examples/qmlsurface/qml/qmlsurface/main.qml 0
+
+ Other interesting features can be controlled with buttons. The first button is to toggle on and off
+ the surface grid, for which use the following code.
+
+ \snippet ../examples/qmlsurface/qml/qmlsurface/main.qml 1
+
+ Second button is for surface smooth status, which is controlled with this code.
+
+ \snippet ../examples/qmlsurface/qml/qmlsurface/main.qml 2
+
+ Third and fourth buttons are for controlling background features. The last button is for switching
+ between HeightMapSurfaceDataProxy and ItemModelSurfaceDataProxy, for which we use the following
+ code. We also set the maximum value to 500 in model proxy to make the surface flatter and
+ 250 on height map proxy to show exaggerated height. At the same time the color position
+ on the gradient is modified.
+
+ \snippet ../examples/qmlsurface/qml/qmlsurface/main.qml 3
+
+ \section1 Example contents
+*/
diff --git a/examples/qmlsurface/heightmap.png b/examples/qmlsurface/heightmap.png
new file mode 100644
index 00000000..051a0125
--- /dev/null
+++ b/examples/qmlsurface/heightmap.png
Binary files differ
diff --git a/examples/qmlbarchart/main.cpp b/examples/qmlsurface/main.cpp
index b58e66f8..ac9dda35 100644
--- a/examples/qmlbarchart/main.cpp
+++ b/examples/qmlsurface/main.cpp
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -18,26 +18,27 @@
#include <QtGui/QGuiApplication>
#include "qtquick2applicationviewer.h"
+
#ifdef Q_OS_ANDROID
#include <QDir>
#include <QQmlEngine>
#endif
-#include <QDebug>
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer viewer;
+
#ifdef Q_OS_ANDROID
viewer.addImportPath(QString::fromLatin1("assets:/qml"));
viewer.engine()->addPluginPath(QString::fromLatin1("%1/../%2").arg(QDir::homePath(),
QString::fromLatin1("lib")));
-#else
- viewer.addImportPath(QString::fromLatin1("%1/%2").arg(QCoreApplication::applicationDirPath(),
- QString::fromLatin1("qml")));
#endif
+
viewer.setSource(QUrl("qrc:/qml/main.qml"));
+
+ viewer.setTitle(QStringLiteral("Tycho crater on the Moon (height exaggerated)"));
viewer.setResizeMode(QQuickView::SizeRootObjectToView);
viewer.show();
diff --git a/examples/qmlsurface/qml/qmlsurface/data.qml b/examples/qmlsurface/qml/qmlsurface/data.qml
new file mode 100644
index 00000000..80ed471a
--- /dev/null
+++ b/examples/qmlsurface/qml/qmlsurface/data.qml
@@ -0,0 +1,10062 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import com.digia.QtDataVisualization 1.0
+
+Item {
+ property alias mapping: surfaceMapping
+ property alias model: dataModel
+ property alias proxy: modelProxy
+ property alias heightProxy: heightMapProxy
+
+ //! [0]
+ HeightMapSurfaceDataProxy {
+ id: heightMapProxy
+ heightMapFile: ":/heightmaps/image"
+ // We don't want the default data values set by heightmap proxy.
+ minZValue: 30
+ maxZValue: 60
+ minXValue: 67
+ maxXValue: 97
+ }
+ //! [0]
+
+ //! [2]
+ SurfaceDataMapping {
+ id: surfaceMapping
+ rowRole: "longitude"
+ columnRole: "latitude"
+ valueRole: "height"
+ }
+ //! [2]
+
+ //! [3]
+ ItemModelSurfaceDataProxy {
+ id: modelProxy
+ activeMapping: surfaceMapping
+ itemModel: dataModel
+ }
+ //! [3]
+
+ //! [1]
+ ListModel {
+ id: dataModel
+ ListElement{ longitude: "0"; latitude: "0"; height: "124"; }
+ ListElement{ longitude: "0"; latitude: "1"; height: "125"; }
+ ListElement{ longitude: "0"; latitude: "2"; height: "124"; }
+ //! [1]
+ ListElement{ longitude: "0"; latitude: "3"; height: "118"; }
+ ListElement{ longitude: "0"; latitude: "4"; height: "112"; }
+ ListElement{ longitude: "0"; latitude: "5"; height: "111"; }
+ ListElement{ longitude: "0"; latitude: "6"; height: "115"; }
+ ListElement{ longitude: "0"; latitude: "7"; height: "102"; }
+ ListElement{ longitude: "0"; latitude: "8"; height: "115"; }
+ ListElement{ longitude: "0"; latitude: "9"; height: "126"; }
+ ListElement{ longitude: "0"; latitude: "10"; height: "127"; }
+ ListElement{ longitude: "0"; latitude: "11"; height: "127"; }
+ ListElement{ longitude: "0"; latitude: "12"; height: "124"; }
+ ListElement{ longitude: "0"; latitude: "13"; height: "120"; }
+ ListElement{ longitude: "0"; latitude: "14"; height: "117"; }
+ ListElement{ longitude: "0"; latitude: "15"; height: "116"; }
+ ListElement{ longitude: "0"; latitude: "16"; height: "114"; }
+ ListElement{ longitude: "0"; latitude: "17"; height: "112"; }
+ ListElement{ longitude: "0"; latitude: "18"; height: "114"; }
+ ListElement{ longitude: "0"; latitude: "19"; height: "114"; }
+ ListElement{ longitude: "0"; latitude: "20"; height: "112"; }
+ ListElement{ longitude: "0"; latitude: "21"; height: "112"; }
+ ListElement{ longitude: "0"; latitude: "22"; height: "116"; }
+ ListElement{ longitude: "0"; latitude: "23"; height: "117"; }
+ ListElement{ longitude: "0"; latitude: "24"; height: "118"; }
+ ListElement{ longitude: "0"; latitude: "25"; height: "119"; }
+ ListElement{ longitude: "0"; latitude: "26"; height: "117"; }
+ ListElement{ longitude: "0"; latitude: "27"; height: "115"; }
+ ListElement{ longitude: "0"; latitude: "28"; height: "112"; }
+ ListElement{ longitude: "0"; latitude: "29"; height: "109"; }
+ ListElement{ longitude: "0"; latitude: "30"; height: "108"; }
+ ListElement{ longitude: "0"; latitude: "31"; height: "105"; }
+ ListElement{ longitude: "0"; latitude: "32"; height: "105"; }
+ ListElement{ longitude: "0"; latitude: "33"; height: "104"; }
+ ListElement{ longitude: "0"; latitude: "34"; height: "105"; }
+ ListElement{ longitude: "0"; latitude: "35"; height: "107"; }
+ ListElement{ longitude: "0"; latitude: "36"; height: "110"; }
+ ListElement{ longitude: "0"; latitude: "37"; height: "114"; }
+ ListElement{ longitude: "0"; latitude: "38"; height: "117"; }
+ ListElement{ longitude: "0"; latitude: "39"; height: "119"; }
+ ListElement{ longitude: "0"; latitude: "40"; height: "121"; }
+ ListElement{ longitude: "0"; latitude: "41"; height: "123"; }
+ ListElement{ longitude: "0"; latitude: "42"; height: "125"; }
+ ListElement{ longitude: "0"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "0"; latitude: "44"; height: "119"; }
+ ListElement{ longitude: "0"; latitude: "45"; height: "115"; }
+ ListElement{ longitude: "0"; latitude: "46"; height: "114"; }
+ ListElement{ longitude: "0"; latitude: "47"; height: "123"; }
+ ListElement{ longitude: "0"; latitude: "48"; height: "131"; }
+ ListElement{ longitude: "0"; latitude: "49"; height: "130"; }
+ ListElement{ longitude: "0"; latitude: "50"; height: "128"; }
+ ListElement{ longitude: "0"; latitude: "51"; height: "124"; }
+ ListElement{ longitude: "0"; latitude: "52"; height: "121"; }
+ ListElement{ longitude: "0"; latitude: "53"; height: "120"; }
+ ListElement{ longitude: "0"; latitude: "54"; height: "118"; }
+ ListElement{ longitude: "0"; latitude: "55"; height: "116"; }
+ ListElement{ longitude: "0"; latitude: "56"; height: "116"; }
+ ListElement{ longitude: "0"; latitude: "57"; height: "115"; }
+ ListElement{ longitude: "0"; latitude: "58"; height: "112"; }
+ ListElement{ longitude: "0"; latitude: "59"; height: "110"; }
+ ListElement{ longitude: "0"; latitude: "60"; height: "109"; }
+ ListElement{ longitude: "0"; latitude: "61"; height: "107"; }
+ ListElement{ longitude: "0"; latitude: "62"; height: "107"; }
+ ListElement{ longitude: "0"; latitude: "63"; height: "108"; }
+ ListElement{ longitude: "0"; latitude: "64"; height: "110"; }
+ ListElement{ longitude: "0"; latitude: "65"; height: "113"; }
+ ListElement{ longitude: "0"; latitude: "66"; height: "115"; }
+ ListElement{ longitude: "0"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "0"; latitude: "68"; height: "119"; }
+ ListElement{ longitude: "0"; latitude: "69"; height: "121"; }
+ ListElement{ longitude: "0"; latitude: "70"; height: "122"; }
+ ListElement{ longitude: "0"; latitude: "71"; height: "124"; }
+ ListElement{ longitude: "0"; latitude: "72"; height: "125"; }
+ ListElement{ longitude: "0"; latitude: "73"; height: "125"; }
+ ListElement{ longitude: "0"; latitude: "74"; height: "125"; }
+ ListElement{ longitude: "0"; latitude: "75"; height: "123"; }
+ ListElement{ longitude: "0"; latitude: "76"; height: "123"; }
+ ListElement{ longitude: "0"; latitude: "77"; height: "122"; }
+ ListElement{ longitude: "0"; latitude: "78"; height: "125"; }
+ ListElement{ longitude: "0"; latitude: "79"; height: "129"; }
+ ListElement{ longitude: "0"; latitude: "80"; height: "135"; }
+ ListElement{ longitude: "0"; latitude: "81"; height: "138"; }
+ ListElement{ longitude: "0"; latitude: "82"; height: "136"; }
+ ListElement{ longitude: "0"; latitude: "83"; height: "129"; }
+ ListElement{ longitude: "0"; latitude: "84"; height: "121"; }
+ ListElement{ longitude: "0"; latitude: "85"; height: "116"; }
+ ListElement{ longitude: "0"; latitude: "86"; height: "115"; }
+ ListElement{ longitude: "0"; latitude: "87"; height: "118"; }
+ ListElement{ longitude: "0"; latitude: "88"; height: "122"; }
+ ListElement{ longitude: "0"; latitude: "89"; height: "127"; }
+ ListElement{ longitude: "0"; latitude: "90"; height: "129"; }
+ ListElement{ longitude: "0"; latitude: "91"; height: "130"; }
+ ListElement{ longitude: "0"; latitude: "92"; height: "130"; }
+ ListElement{ longitude: "0"; latitude: "93"; height: "128"; }
+ ListElement{ longitude: "0"; latitude: "94"; height: "128"; }
+ ListElement{ longitude: "0"; latitude: "95"; height: "129"; }
+ ListElement{ longitude: "0"; latitude: "96"; height: "133"; }
+ ListElement{ longitude: "0"; latitude: "97"; height: "138"; }
+ ListElement{ longitude: "0"; latitude: "98"; height: "139"; }
+ ListElement{ longitude: "0"; latitude: "99"; height: "128"; }
+ ListElement{ longitude: "1"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "1"; latitude: "1"; height: "120"; }
+ ListElement{ longitude: "1"; latitude: "2"; height: "118"; }
+ ListElement{ longitude: "1"; latitude: "3"; height: "110"; }
+ ListElement{ longitude: "1"; latitude: "4"; height: "105"; }
+ ListElement{ longitude: "1"; latitude: "5"; height: "110"; }
+ ListElement{ longitude: "1"; latitude: "6"; height: "116"; }
+ ListElement{ longitude: "1"; latitude: "7"; height: "117"; }
+ ListElement{ longitude: "1"; latitude: "8"; height: "123"; }
+ ListElement{ longitude: "1"; latitude: "9"; height: "128"; }
+ ListElement{ longitude: "1"; latitude: "10"; height: "131"; }
+ ListElement{ longitude: "1"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "1"; latitude: "12"; height: "128"; }
+ ListElement{ longitude: "1"; latitude: "13"; height: "122"; }
+ ListElement{ longitude: "1"; latitude: "14"; height: "119"; }
+ ListElement{ longitude: "1"; latitude: "15"; height: "116"; }
+ ListElement{ longitude: "1"; latitude: "16"; height: "113"; }
+ ListElement{ longitude: "1"; latitude: "17"; height: "109"; }
+ ListElement{ longitude: "1"; latitude: "18"; height: "109"; }
+ ListElement{ longitude: "1"; latitude: "19"; height: "109"; }
+ ListElement{ longitude: "1"; latitude: "20"; height: "107"; }
+ ListElement{ longitude: "1"; latitude: "21"; height: "109"; }
+ ListElement{ longitude: "1"; latitude: "22"; height: "109"; }
+ ListElement{ longitude: "1"; latitude: "23"; height: "114"; }
+ ListElement{ longitude: "1"; latitude: "24"; height: "117"; }
+ ListElement{ longitude: "1"; latitude: "25"; height: "121"; }
+ ListElement{ longitude: "1"; latitude: "26"; height: "120"; }
+ ListElement{ longitude: "1"; latitude: "27"; height: "118"; }
+ ListElement{ longitude: "1"; latitude: "28"; height: "115"; }
+ ListElement{ longitude: "1"; latitude: "29"; height: "112"; }
+ ListElement{ longitude: "1"; latitude: "30"; height: "110"; }
+ ListElement{ longitude: "1"; latitude: "31"; height: "104"; }
+ ListElement{ longitude: "1"; latitude: "32"; height: "104"; }
+ ListElement{ longitude: "1"; latitude: "33"; height: "103"; }
+ ListElement{ longitude: "1"; latitude: "34"; height: "101"; }
+ ListElement{ longitude: "1"; latitude: "35"; height: "105"; }
+ ListElement{ longitude: "1"; latitude: "36"; height: "108"; }
+ ListElement{ longitude: "1"; latitude: "37"; height: "113"; }
+ ListElement{ longitude: "1"; latitude: "38"; height: "116"; }
+ ListElement{ longitude: "1"; latitude: "39"; height: "117"; }
+ ListElement{ longitude: "1"; latitude: "40"; height: "120"; }
+ ListElement{ longitude: "1"; latitude: "41"; height: "121"; }
+ ListElement{ longitude: "1"; latitude: "42"; height: "121"; }
+ ListElement{ longitude: "1"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "1"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "1"; latitude: "45"; height: "126"; }
+ ListElement{ longitude: "1"; latitude: "46"; height: "130"; }
+ ListElement{ longitude: "1"; latitude: "47"; height: "133"; }
+ ListElement{ longitude: "1"; latitude: "48"; height: "134"; }
+ ListElement{ longitude: "1"; latitude: "49"; height: "133"; }
+ ListElement{ longitude: "1"; latitude: "50"; height: "133"; }
+ ListElement{ longitude: "1"; latitude: "51"; height: "128"; }
+ ListElement{ longitude: "1"; latitude: "52"; height: "125"; }
+ ListElement{ longitude: "1"; latitude: "53"; height: "122"; }
+ ListElement{ longitude: "1"; latitude: "54"; height: "118"; }
+ ListElement{ longitude: "1"; latitude: "55"; height: "116"; }
+ ListElement{ longitude: "1"; latitude: "56"; height: "116"; }
+ ListElement{ longitude: "1"; latitude: "57"; height: "117"; }
+ ListElement{ longitude: "1"; latitude: "58"; height: "114"; }
+ ListElement{ longitude: "1"; latitude: "59"; height: "113"; }
+ ListElement{ longitude: "1"; latitude: "60"; height: "109"; }
+ ListElement{ longitude: "1"; latitude: "61"; height: "106"; }
+ ListElement{ longitude: "1"; latitude: "62"; height: "103"; }
+ ListElement{ longitude: "1"; latitude: "63"; height: "105"; }
+ ListElement{ longitude: "1"; latitude: "64"; height: "105"; }
+ ListElement{ longitude: "1"; latitude: "65"; height: "111"; }
+ ListElement{ longitude: "1"; latitude: "66"; height: "112"; }
+ ListElement{ longitude: "1"; latitude: "67"; height: "114"; }
+ ListElement{ longitude: "1"; latitude: "68"; height: "117"; }
+ ListElement{ longitude: "1"; latitude: "69"; height: "119"; }
+ ListElement{ longitude: "1"; latitude: "70"; height: "120"; }
+ ListElement{ longitude: "1"; latitude: "71"; height: "122"; }
+ ListElement{ longitude: "1"; latitude: "72"; height: "123"; }
+ ListElement{ longitude: "1"; latitude: "73"; height: "125"; }
+ ListElement{ longitude: "1"; latitude: "74"; height: "124"; }
+ ListElement{ longitude: "1"; latitude: "75"; height: "123"; }
+ ListElement{ longitude: "1"; latitude: "76"; height: "120"; }
+ ListElement{ longitude: "1"; latitude: "77"; height: "120"; }
+ ListElement{ longitude: "1"; latitude: "78"; height: "122"; }
+ ListElement{ longitude: "1"; latitude: "79"; height: "128"; }
+ ListElement{ longitude: "1"; latitude: "80"; height: "135"; }
+ ListElement{ longitude: "1"; latitude: "81"; height: "140"; }
+ ListElement{ longitude: "1"; latitude: "82"; height: "137"; }
+ ListElement{ longitude: "1"; latitude: "83"; height: "132"; }
+ ListElement{ longitude: "1"; latitude: "84"; height: "124"; }
+ ListElement{ longitude: "1"; latitude: "85"; height: "116"; }
+ ListElement{ longitude: "1"; latitude: "86"; height: "115"; }
+ ListElement{ longitude: "1"; latitude: "87"; height: "120"; }
+ ListElement{ longitude: "1"; latitude: "88"; height: "125"; }
+ ListElement{ longitude: "1"; latitude: "89"; height: "131"; }
+ ListElement{ longitude: "1"; latitude: "90"; height: "134"; }
+ ListElement{ longitude: "1"; latitude: "91"; height: "136"; }
+ ListElement{ longitude: "1"; latitude: "92"; height: "134"; }
+ ListElement{ longitude: "1"; latitude: "93"; height: "131"; }
+ ListElement{ longitude: "1"; latitude: "94"; height: "130"; }
+ ListElement{ longitude: "1"; latitude: "95"; height: "130"; }
+ ListElement{ longitude: "1"; latitude: "96"; height: "133"; }
+ ListElement{ longitude: "1"; latitude: "97"; height: "139"; }
+ ListElement{ longitude: "1"; latitude: "98"; height: "140"; }
+ ListElement{ longitude: "1"; latitude: "99"; height: "124"; }
+ ListElement{ longitude: "2"; latitude: "0"; height: "116"; }
+ ListElement{ longitude: "2"; latitude: "1"; height: "116"; }
+ ListElement{ longitude: "2"; latitude: "2"; height: "111"; }
+ ListElement{ longitude: "2"; latitude: "3"; height: "105"; }
+ ListElement{ longitude: "2"; latitude: "4"; height: "108"; }
+ ListElement{ longitude: "2"; latitude: "5"; height: "110"; }
+ ListElement{ longitude: "2"; latitude: "6"; height: "114"; }
+ ListElement{ longitude: "2"; latitude: "7"; height: "118"; }
+ ListElement{ longitude: "2"; latitude: "8"; height: "124"; }
+ ListElement{ longitude: "2"; latitude: "9"; height: "130"; }
+ ListElement{ longitude: "2"; latitude: "10"; height: "131"; }
+ ListElement{ longitude: "2"; latitude: "11"; height: "134"; }
+ ListElement{ longitude: "2"; latitude: "12"; height: "133"; }
+ ListElement{ longitude: "2"; latitude: "13"; height: "128"; }
+ ListElement{ longitude: "2"; latitude: "14"; height: "125"; }
+ ListElement{ longitude: "2"; latitude: "15"; height: "119"; }
+ ListElement{ longitude: "2"; latitude: "16"; height: "115"; }
+ ListElement{ longitude: "2"; latitude: "17"; height: "111"; }
+ ListElement{ longitude: "2"; latitude: "18"; height: "105"; }
+ ListElement{ longitude: "2"; latitude: "19"; height: "102"; }
+ ListElement{ longitude: "2"; latitude: "20"; height: "99"; }
+ ListElement{ longitude: "2"; latitude: "21"; height: "102"; }
+ ListElement{ longitude: "2"; latitude: "22"; height: "106"; }
+ ListElement{ longitude: "2"; latitude: "23"; height: "110"; }
+ ListElement{ longitude: "2"; latitude: "24"; height: "115"; }
+ ListElement{ longitude: "2"; latitude: "25"; height: "122"; }
+ ListElement{ longitude: "2"; latitude: "26"; height: "122"; }
+ ListElement{ longitude: "2"; latitude: "27"; height: "121"; }
+ ListElement{ longitude: "2"; latitude: "28"; height: "118"; }
+ ListElement{ longitude: "2"; latitude: "29"; height: "115"; }
+ ListElement{ longitude: "2"; latitude: "30"; height: "111"; }
+ ListElement{ longitude: "2"; latitude: "31"; height: "79"; }
+ ListElement{ longitude: "2"; latitude: "32"; height: "94"; }
+ ListElement{ longitude: "2"; latitude: "33"; height: "103"; }
+ ListElement{ longitude: "2"; latitude: "34"; height: "102"; }
+ ListElement{ longitude: "2"; latitude: "35"; height: "103"; }
+ ListElement{ longitude: "2"; latitude: "36"; height: "107"; }
+ ListElement{ longitude: "2"; latitude: "37"; height: "113"; }
+ ListElement{ longitude: "2"; latitude: "38"; height: "116"; }
+ ListElement{ longitude: "2"; latitude: "39"; height: "118"; }
+ ListElement{ longitude: "2"; latitude: "40"; height: "117"; }
+ ListElement{ longitude: "2"; latitude: "41"; height: "119"; }
+ ListElement{ longitude: "2"; latitude: "42"; height: "119"; }
+ ListElement{ longitude: "2"; latitude: "43"; height: "121"; }
+ ListElement{ longitude: "2"; latitude: "44"; height: "123"; }
+ ListElement{ longitude: "2"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "2"; latitude: "46"; height: "131"; }
+ ListElement{ longitude: "2"; latitude: "47"; height: "132"; }
+ ListElement{ longitude: "2"; latitude: "48"; height: "132"; }
+ ListElement{ longitude: "2"; latitude: "49"; height: "135"; }
+ ListElement{ longitude: "2"; latitude: "50"; height: "134"; }
+ ListElement{ longitude: "2"; latitude: "51"; height: "130"; }
+ ListElement{ longitude: "2"; latitude: "52"; height: "128"; }
+ ListElement{ longitude: "2"; latitude: "53"; height: "123"; }
+ ListElement{ longitude: "2"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "2"; latitude: "55"; height: "118"; }
+ ListElement{ longitude: "2"; latitude: "56"; height: "118"; }
+ ListElement{ longitude: "2"; latitude: "57"; height: "123"; }
+ ListElement{ longitude: "2"; latitude: "58"; height: "121"; }
+ ListElement{ longitude: "2"; latitude: "59"; height: "120"; }
+ ListElement{ longitude: "2"; latitude: "60"; height: "114"; }
+ ListElement{ longitude: "2"; latitude: "61"; height: "107"; }
+ ListElement{ longitude: "2"; latitude: "62"; height: "103"; }
+ ListElement{ longitude: "2"; latitude: "63"; height: "103"; }
+ ListElement{ longitude: "2"; latitude: "64"; height: "106"; }
+ ListElement{ longitude: "2"; latitude: "65"; height: "108"; }
+ ListElement{ longitude: "2"; latitude: "66"; height: "109"; }
+ ListElement{ longitude: "2"; latitude: "67"; height: "114"; }
+ ListElement{ longitude: "2"; latitude: "68"; height: "117"; }
+ ListElement{ longitude: "2"; latitude: "69"; height: "121"; }
+ ListElement{ longitude: "2"; latitude: "70"; height: "121"; }
+ ListElement{ longitude: "2"; latitude: "71"; height: "122"; }
+ ListElement{ longitude: "2"; latitude: "72"; height: "123"; }
+ ListElement{ longitude: "2"; latitude: "73"; height: "123"; }
+ ListElement{ longitude: "2"; latitude: "74"; height: "122"; }
+ ListElement{ longitude: "2"; latitude: "75"; height: "123"; }
+ ListElement{ longitude: "2"; latitude: "76"; height: "120"; }
+ ListElement{ longitude: "2"; latitude: "77"; height: "118"; }
+ ListElement{ longitude: "2"; latitude: "78"; height: "119"; }
+ ListElement{ longitude: "2"; latitude: "79"; height: "125"; }
+ ListElement{ longitude: "2"; latitude: "80"; height: "130"; }
+ ListElement{ longitude: "2"; latitude: "81"; height: "138"; }
+ ListElement{ longitude: "2"; latitude: "82"; height: "138"; }
+ ListElement{ longitude: "2"; latitude: "83"; height: "131"; }
+ ListElement{ longitude: "2"; latitude: "84"; height: "125"; }
+ ListElement{ longitude: "2"; latitude: "85"; height: "122"; }
+ ListElement{ longitude: "2"; latitude: "86"; height: "121"; }
+ ListElement{ longitude: "2"; latitude: "87"; height: "133"; }
+ ListElement{ longitude: "2"; latitude: "88"; height: "132"; }
+ ListElement{ longitude: "2"; latitude: "89"; height: "135"; }
+ ListElement{ longitude: "2"; latitude: "90"; height: "138"; }
+ ListElement{ longitude: "2"; latitude: "91"; height: "137"; }
+ ListElement{ longitude: "2"; latitude: "92"; height: "137"; }
+ ListElement{ longitude: "2"; latitude: "93"; height: "134"; }
+ ListElement{ longitude: "2"; latitude: "94"; height: "133"; }
+ ListElement{ longitude: "2"; latitude: "95"; height: "133"; }
+ ListElement{ longitude: "2"; latitude: "96"; height: "133"; }
+ ListElement{ longitude: "2"; latitude: "97"; height: "140"; }
+ ListElement{ longitude: "2"; latitude: "98"; height: "140"; }
+ ListElement{ longitude: "2"; latitude: "99"; height: "121"; }
+ ListElement{ longitude: "3"; latitude: "0"; height: "115"; }
+ ListElement{ longitude: "3"; latitude: "1"; height: "111"; }
+ ListElement{ longitude: "3"; latitude: "2"; height: "108"; }
+ ListElement{ longitude: "3"; latitude: "3"; height: "107"; }
+ ListElement{ longitude: "3"; latitude: "4"; height: "108"; }
+ ListElement{ longitude: "3"; latitude: "5"; height: "111"; }
+ ListElement{ longitude: "3"; latitude: "6"; height: "117"; }
+ ListElement{ longitude: "3"; latitude: "7"; height: "119"; }
+ ListElement{ longitude: "3"; latitude: "8"; height: "124"; }
+ ListElement{ longitude: "3"; latitude: "9"; height: "130"; }
+ ListElement{ longitude: "3"; latitude: "10"; height: "133"; }
+ ListElement{ longitude: "3"; latitude: "11"; height: "136"; }
+ ListElement{ longitude: "3"; latitude: "12"; height: "136"; }
+ ListElement{ longitude: "3"; latitude: "13"; height: "132"; }
+ ListElement{ longitude: "3"; latitude: "14"; height: "129"; }
+ ListElement{ longitude: "3"; latitude: "15"; height: "125"; }
+ ListElement{ longitude: "3"; latitude: "16"; height: "119"; }
+ ListElement{ longitude: "3"; latitude: "17"; height: "115"; }
+ ListElement{ longitude: "3"; latitude: "18"; height: "106"; }
+ ListElement{ longitude: "3"; latitude: "19"; height: "101"; }
+ ListElement{ longitude: "3"; latitude: "20"; height: "99"; }
+ ListElement{ longitude: "3"; latitude: "21"; height: "98"; }
+ ListElement{ longitude: "3"; latitude: "22"; height: "103"; }
+ ListElement{ longitude: "3"; latitude: "23"; height: "109"; }
+ ListElement{ longitude: "3"; latitude: "24"; height: "115"; }
+ ListElement{ longitude: "3"; latitude: "25"; height: "121"; }
+ ListElement{ longitude: "3"; latitude: "26"; height: "126"; }
+ ListElement{ longitude: "3"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "3"; latitude: "28"; height: "123"; }
+ ListElement{ longitude: "3"; latitude: "29"; height: "117"; }
+ ListElement{ longitude: "3"; latitude: "30"; height: "116"; }
+ ListElement{ longitude: "3"; latitude: "31"; height: "106"; }
+ ListElement{ longitude: "3"; latitude: "32"; height: "105"; }
+ ListElement{ longitude: "3"; latitude: "33"; height: "100"; }
+ ListElement{ longitude: "3"; latitude: "34"; height: "99"; }
+ ListElement{ longitude: "3"; latitude: "35"; height: "103"; }
+ ListElement{ longitude: "3"; latitude: "36"; height: "106"; }
+ ListElement{ longitude: "3"; latitude: "37"; height: "114"; }
+ ListElement{ longitude: "3"; latitude: "38"; height: "115"; }
+ ListElement{ longitude: "3"; latitude: "39"; height: "115"; }
+ ListElement{ longitude: "3"; latitude: "40"; height: "115"; }
+ ListElement{ longitude: "3"; latitude: "41"; height: "116"; }
+ ListElement{ longitude: "3"; latitude: "42"; height: "117"; }
+ ListElement{ longitude: "3"; latitude: "43"; height: "119"; }
+ ListElement{ longitude: "3"; latitude: "44"; height: "124"; }
+ ListElement{ longitude: "3"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "3"; latitude: "46"; height: "129"; }
+ ListElement{ longitude: "3"; latitude: "47"; height: "128"; }
+ ListElement{ longitude: "3"; latitude: "48"; height: "135"; }
+ ListElement{ longitude: "3"; latitude: "49"; height: "139"; }
+ ListElement{ longitude: "3"; latitude: "50"; height: "139"; }
+ ListElement{ longitude: "3"; latitude: "51"; height: "136"; }
+ ListElement{ longitude: "3"; latitude: "52"; height: "130"; }
+ ListElement{ longitude: "3"; latitude: "53"; height: "126"; }
+ ListElement{ longitude: "3"; latitude: "54"; height: "121"; }
+ ListElement{ longitude: "3"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "3"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "3"; latitude: "57"; height: "128"; }
+ ListElement{ longitude: "3"; latitude: "58"; height: "98"; }
+ ListElement{ longitude: "3"; latitude: "59"; height: "78"; }
+ ListElement{ longitude: "3"; latitude: "60"; height: "115"; }
+ ListElement{ longitude: "3"; latitude: "61"; height: "112"; }
+ ListElement{ longitude: "3"; latitude: "62"; height: "108"; }
+ ListElement{ longitude: "3"; latitude: "63"; height: "106"; }
+ ListElement{ longitude: "3"; latitude: "64"; height: "105"; }
+ ListElement{ longitude: "3"; latitude: "65"; height: "108"; }
+ ListElement{ longitude: "3"; latitude: "66"; height: "111"; }
+ ListElement{ longitude: "3"; latitude: "67"; height: "115"; }
+ ListElement{ longitude: "3"; latitude: "68"; height: "120"; }
+ ListElement{ longitude: "3"; latitude: "69"; height: "121"; }
+ ListElement{ longitude: "3"; latitude: "70"; height: "123"; }
+ ListElement{ longitude: "3"; latitude: "71"; height: "124"; }
+ ListElement{ longitude: "3"; latitude: "72"; height: "126"; }
+ ListElement{ longitude: "3"; latitude: "73"; height: "127"; }
+ ListElement{ longitude: "3"; latitude: "74"; height: "126"; }
+ ListElement{ longitude: "3"; latitude: "75"; height: "124"; }
+ ListElement{ longitude: "3"; latitude: "76"; height: "121"; }
+ ListElement{ longitude: "3"; latitude: "77"; height: "117"; }
+ ListElement{ longitude: "3"; latitude: "78"; height: "113"; }
+ ListElement{ longitude: "3"; latitude: "79"; height: "119"; }
+ ListElement{ longitude: "3"; latitude: "80"; height: "124"; }
+ ListElement{ longitude: "3"; latitude: "81"; height: "130"; }
+ ListElement{ longitude: "3"; latitude: "82"; height: "133"; }
+ ListElement{ longitude: "3"; latitude: "83"; height: "131"; }
+ ListElement{ longitude: "3"; latitude: "84"; height: "124"; }
+ ListElement{ longitude: "3"; latitude: "85"; height: "122"; }
+ ListElement{ longitude: "3"; latitude: "86"; height: "66"; }
+ ListElement{ longitude: "3"; latitude: "87"; height: "109"; }
+ ListElement{ longitude: "3"; latitude: "88"; height: "136"; }
+ ListElement{ longitude: "3"; latitude: "89"; height: "142"; }
+ ListElement{ longitude: "3"; latitude: "90"; height: "144"; }
+ ListElement{ longitude: "3"; latitude: "91"; height: "144"; }
+ ListElement{ longitude: "3"; latitude: "92"; height: "141"; }
+ ListElement{ longitude: "3"; latitude: "93"; height: "137"; }
+ ListElement{ longitude: "3"; latitude: "94"; height: "136"; }
+ ListElement{ longitude: "3"; latitude: "95"; height: "136"; }
+ ListElement{ longitude: "3"; latitude: "96"; height: "139"; }
+ ListElement{ longitude: "3"; latitude: "97"; height: "142"; }
+ ListElement{ longitude: "3"; latitude: "98"; height: "142"; }
+ ListElement{ longitude: "3"; latitude: "99"; height: "120"; }
+ ListElement{ longitude: "4"; latitude: "0"; height: "112"; }
+ ListElement{ longitude: "4"; latitude: "1"; height: "107"; }
+ ListElement{ longitude: "4"; latitude: "2"; height: "107"; }
+ ListElement{ longitude: "4"; latitude: "3"; height: "106"; }
+ ListElement{ longitude: "4"; latitude: "4"; height: "110"; }
+ ListElement{ longitude: "4"; latitude: "5"; height: "113"; }
+ ListElement{ longitude: "4"; latitude: "6"; height: "117"; }
+ ListElement{ longitude: "4"; latitude: "7"; height: "122"; }
+ ListElement{ longitude: "4"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "4"; latitude: "9"; height: "131"; }
+ ListElement{ longitude: "4"; latitude: "10"; height: "134"; }
+ ListElement{ longitude: "4"; latitude: "11"; height: "135"; }
+ ListElement{ longitude: "4"; latitude: "12"; height: "135"; }
+ ListElement{ longitude: "4"; latitude: "13"; height: "135"; }
+ ListElement{ longitude: "4"; latitude: "14"; height: "133"; }
+ ListElement{ longitude: "4"; latitude: "15"; height: "131"; }
+ ListElement{ longitude: "4"; latitude: "16"; height: "125"; }
+ ListElement{ longitude: "4"; latitude: "17"; height: "119"; }
+ ListElement{ longitude: "4"; latitude: "18"; height: "111"; }
+ ListElement{ longitude: "4"; latitude: "19"; height: "107"; }
+ ListElement{ longitude: "4"; latitude: "20"; height: "100"; }
+ ListElement{ longitude: "4"; latitude: "21"; height: "102"; }
+ ListElement{ longitude: "4"; latitude: "22"; height: "103"; }
+ ListElement{ longitude: "4"; latitude: "23"; height: "110"; }
+ ListElement{ longitude: "4"; latitude: "24"; height: "115"; }
+ ListElement{ longitude: "4"; latitude: "25"; height: "124"; }
+ ListElement{ longitude: "4"; latitude: "26"; height: "126"; }
+ ListElement{ longitude: "4"; latitude: "27"; height: "131"; }
+ ListElement{ longitude: "4"; latitude: "28"; height: "108"; }
+ ListElement{ longitude: "4"; latitude: "29"; height: "103"; }
+ ListElement{ longitude: "4"; latitude: "30"; height: "117"; }
+ ListElement{ longitude: "4"; latitude: "31"; height: "114"; }
+ ListElement{ longitude: "4"; latitude: "32"; height: "105"; }
+ ListElement{ longitude: "4"; latitude: "33"; height: "101"; }
+ ListElement{ longitude: "4"; latitude: "34"; height: "101"; }
+ ListElement{ longitude: "4"; latitude: "35"; height: "103"; }
+ ListElement{ longitude: "4"; latitude: "36"; height: "108"; }
+ ListElement{ longitude: "4"; latitude: "37"; height: "112"; }
+ ListElement{ longitude: "4"; latitude: "38"; height: "114"; }
+ ListElement{ longitude: "4"; latitude: "39"; height: "116"; }
+ ListElement{ longitude: "4"; latitude: "40"; height: "116"; }
+ ListElement{ longitude: "4"; latitude: "41"; height: "117"; }
+ ListElement{ longitude: "4"; latitude: "42"; height: "117"; }
+ ListElement{ longitude: "4"; latitude: "43"; height: "121"; }
+ ListElement{ longitude: "4"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "4"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "4"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "4"; latitude: "47"; height: "130"; }
+ ListElement{ longitude: "4"; latitude: "48"; height: "137"; }
+ ListElement{ longitude: "4"; latitude: "49"; height: "147"; }
+ ListElement{ longitude: "4"; latitude: "50"; height: "143"; }
+ ListElement{ longitude: "4"; latitude: "51"; height: "143"; }
+ ListElement{ longitude: "4"; latitude: "52"; height: "133"; }
+ ListElement{ longitude: "4"; latitude: "53"; height: "127"; }
+ ListElement{ longitude: "4"; latitude: "54"; height: "123"; }
+ ListElement{ longitude: "4"; latitude: "55"; height: "121"; }
+ ListElement{ longitude: "4"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "4"; latitude: "57"; height: "132"; }
+ ListElement{ longitude: "4"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "4"; latitude: "59"; height: "120"; }
+ ListElement{ longitude: "4"; latitude: "60"; height: "123"; }
+ ListElement{ longitude: "4"; latitude: "61"; height: "116"; }
+ ListElement{ longitude: "4"; latitude: "62"; height: "111"; }
+ ListElement{ longitude: "4"; latitude: "63"; height: "109"; }
+ ListElement{ longitude: "4"; latitude: "64"; height: "107"; }
+ ListElement{ longitude: "4"; latitude: "65"; height: "110"; }
+ ListElement{ longitude: "4"; latitude: "66"; height: "113"; }
+ ListElement{ longitude: "4"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "4"; latitude: "68"; height: "123"; }
+ ListElement{ longitude: "4"; latitude: "69"; height: "126"; }
+ ListElement{ longitude: "4"; latitude: "70"; height: "127"; }
+ ListElement{ longitude: "4"; latitude: "71"; height: "128"; }
+ ListElement{ longitude: "4"; latitude: "72"; height: "128"; }
+ ListElement{ longitude: "4"; latitude: "73"; height: "128"; }
+ ListElement{ longitude: "4"; latitude: "74"; height: "116"; }
+ ListElement{ longitude: "4"; latitude: "75"; height: "116"; }
+ ListElement{ longitude: "4"; latitude: "76"; height: "130"; }
+ ListElement{ longitude: "4"; latitude: "77"; height: "116"; }
+ ListElement{ longitude: "4"; latitude: "78"; height: "112"; }
+ ListElement{ longitude: "4"; latitude: "79"; height: "115"; }
+ ListElement{ longitude: "4"; latitude: "80"; height: "120"; }
+ ListElement{ longitude: "4"; latitude: "81"; height: "126"; }
+ ListElement{ longitude: "4"; latitude: "82"; height: "128"; }
+ ListElement{ longitude: "4"; latitude: "83"; height: "126"; }
+ ListElement{ longitude: "4"; latitude: "84"; height: "124"; }
+ ListElement{ longitude: "4"; latitude: "85"; height: "128"; }
+ ListElement{ longitude: "4"; latitude: "86"; height: "121"; }
+ ListElement{ longitude: "4"; latitude: "87"; height: "132"; }
+ ListElement{ longitude: "4"; latitude: "88"; height: "141"; }
+ ListElement{ longitude: "4"; latitude: "89"; height: "147"; }
+ ListElement{ longitude: "4"; latitude: "90"; height: "148"; }
+ ListElement{ longitude: "4"; latitude: "91"; height: "147"; }
+ ListElement{ longitude: "4"; latitude: "92"; height: "144"; }
+ ListElement{ longitude: "4"; latitude: "93"; height: "141"; }
+ ListElement{ longitude: "4"; latitude: "94"; height: "138"; }
+ ListElement{ longitude: "4"; latitude: "95"; height: "138"; }
+ ListElement{ longitude: "4"; latitude: "96"; height: "141"; }
+ ListElement{ longitude: "4"; latitude: "97"; height: "145"; }
+ ListElement{ longitude: "4"; latitude: "98"; height: "143"; }
+ ListElement{ longitude: "4"; latitude: "99"; height: "121"; }
+ ListElement{ longitude: "5"; latitude: "0"; height: "112"; }
+ ListElement{ longitude: "5"; latitude: "1"; height: "109"; }
+ ListElement{ longitude: "5"; latitude: "2"; height: "108"; }
+ ListElement{ longitude: "5"; latitude: "3"; height: "107"; }
+ ListElement{ longitude: "5"; latitude: "4"; height: "112"; }
+ ListElement{ longitude: "5"; latitude: "5"; height: "116"; }
+ ListElement{ longitude: "5"; latitude: "6"; height: "122"; }
+ ListElement{ longitude: "5"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "5"; latitude: "8"; height: "130"; }
+ ListElement{ longitude: "5"; latitude: "9"; height: "133"; }
+ ListElement{ longitude: "5"; latitude: "10"; height: "135"; }
+ ListElement{ longitude: "5"; latitude: "11"; height: "136"; }
+ ListElement{ longitude: "5"; latitude: "12"; height: "137"; }
+ ListElement{ longitude: "5"; latitude: "13"; height: "129"; }
+ ListElement{ longitude: "5"; latitude: "14"; height: "126"; }
+ ListElement{ longitude: "5"; latitude: "15"; height: "134"; }
+ ListElement{ longitude: "5"; latitude: "16"; height: "129"; }
+ ListElement{ longitude: "5"; latitude: "17"; height: "123"; }
+ ListElement{ longitude: "5"; latitude: "18"; height: "116"; }
+ ListElement{ longitude: "5"; latitude: "19"; height: "108"; }
+ ListElement{ longitude: "5"; latitude: "20"; height: "102"; }
+ ListElement{ longitude: "5"; latitude: "21"; height: "102"; }
+ ListElement{ longitude: "5"; latitude: "22"; height: "105"; }
+ ListElement{ longitude: "5"; latitude: "23"; height: "113"; }
+ ListElement{ longitude: "5"; latitude: "24"; height: "118"; }
+ ListElement{ longitude: "5"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "5"; latitude: "26"; height: "130"; }
+ ListElement{ longitude: "5"; latitude: "27"; height: "133"; }
+ ListElement{ longitude: "5"; latitude: "28"; height: "129"; }
+ ListElement{ longitude: "5"; latitude: "29"; height: "123"; }
+ ListElement{ longitude: "5"; latitude: "30"; height: "66"; }
+ ListElement{ longitude: "5"; latitude: "31"; height: "102"; }
+ ListElement{ longitude: "5"; latitude: "32"; height: "106"; }
+ ListElement{ longitude: "5"; latitude: "33"; height: "100"; }
+ ListElement{ longitude: "5"; latitude: "34"; height: "100"; }
+ ListElement{ longitude: "5"; latitude: "35"; height: "104"; }
+ ListElement{ longitude: "5"; latitude: "36"; height: "107"; }
+ ListElement{ longitude: "5"; latitude: "37"; height: "110"; }
+ ListElement{ longitude: "5"; latitude: "38"; height: "112"; }
+ ListElement{ longitude: "5"; latitude: "39"; height: "113"; }
+ ListElement{ longitude: "5"; latitude: "40"; height: "114"; }
+ ListElement{ longitude: "5"; latitude: "41"; height: "116"; }
+ ListElement{ longitude: "5"; latitude: "42"; height: "118"; }
+ ListElement{ longitude: "5"; latitude: "43"; height: "121"; }
+ ListElement{ longitude: "5"; latitude: "44"; height: "123"; }
+ ListElement{ longitude: "5"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "5"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "5"; latitude: "47"; height: "130"; }
+ ListElement{ longitude: "5"; latitude: "48"; height: "137"; }
+ ListElement{ longitude: "5"; latitude: "49"; height: "139"; }
+ ListElement{ longitude: "5"; latitude: "50"; height: "77"; }
+ ListElement{ longitude: "5"; latitude: "51"; height: "123"; }
+ ListElement{ longitude: "5"; latitude: "52"; height: "131"; }
+ ListElement{ longitude: "5"; latitude: "53"; height: "126"; }
+ ListElement{ longitude: "5"; latitude: "54"; height: "123"; }
+ ListElement{ longitude: "5"; latitude: "55"; height: "123"; }
+ ListElement{ longitude: "5"; latitude: "56"; height: "124"; }
+ ListElement{ longitude: "5"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "5"; latitude: "58"; height: "129"; }
+ ListElement{ longitude: "5"; latitude: "59"; height: "129"; }
+ ListElement{ longitude: "5"; latitude: "60"; height: "123"; }
+ ListElement{ longitude: "5"; latitude: "61"; height: "121"; }
+ ListElement{ longitude: "5"; latitude: "62"; height: "116"; }
+ ListElement{ longitude: "5"; latitude: "63"; height: "113"; }
+ ListElement{ longitude: "5"; latitude: "64"; height: "110"; }
+ ListElement{ longitude: "5"; latitude: "65"; height: "111"; }
+ ListElement{ longitude: "5"; latitude: "66"; height: "116"; }
+ ListElement{ longitude: "5"; latitude: "67"; height: "121"; }
+ ListElement{ longitude: "5"; latitude: "68"; height: "127"; }
+ ListElement{ longitude: "5"; latitude: "69"; height: "130"; }
+ ListElement{ longitude: "5"; latitude: "70"; height: "130"; }
+ ListElement{ longitude: "5"; latitude: "71"; height: "131"; }
+ ListElement{ longitude: "5"; latitude: "72"; height: "133"; }
+ ListElement{ longitude: "5"; latitude: "73"; height: "128"; }
+ ListElement{ longitude: "5"; latitude: "74"; height: "107"; }
+ ListElement{ longitude: "5"; latitude: "75"; height: "74"; }
+ ListElement{ longitude: "5"; latitude: "76"; height: "121"; }
+ ListElement{ longitude: "5"; latitude: "77"; height: "116"; }
+ ListElement{ longitude: "5"; latitude: "78"; height: "109"; }
+ ListElement{ longitude: "5"; latitude: "79"; height: "110"; }
+ ListElement{ longitude: "5"; latitude: "80"; height: "113"; }
+ ListElement{ longitude: "5"; latitude: "81"; height: "118"; }
+ ListElement{ longitude: "5"; latitude: "82"; height: "120"; }
+ ListElement{ longitude: "5"; latitude: "83"; height: "124"; }
+ ListElement{ longitude: "5"; latitude: "84"; height: "123"; }
+ ListElement{ longitude: "5"; latitude: "85"; height: "122"; }
+ ListElement{ longitude: "5"; latitude: "86"; height: "127"; }
+ ListElement{ longitude: "5"; latitude: "87"; height: "135"; }
+ ListElement{ longitude: "5"; latitude: "88"; height: "140"; }
+ ListElement{ longitude: "5"; latitude: "89"; height: "146"; }
+ ListElement{ longitude: "5"; latitude: "90"; height: "150"; }
+ ListElement{ longitude: "5"; latitude: "91"; height: "148"; }
+ ListElement{ longitude: "5"; latitude: "92"; height: "146"; }
+ ListElement{ longitude: "5"; latitude: "93"; height: "142"; }
+ ListElement{ longitude: "5"; latitude: "94"; height: "140"; }
+ ListElement{ longitude: "5"; latitude: "95"; height: "140"; }
+ ListElement{ longitude: "5"; latitude: "96"; height: "142"; }
+ ListElement{ longitude: "5"; latitude: "97"; height: "144"; }
+ ListElement{ longitude: "5"; latitude: "98"; height: "145"; }
+ ListElement{ longitude: "5"; latitude: "99"; height: "123"; }
+ ListElement{ longitude: "6"; latitude: "0"; height: "115"; }
+ ListElement{ longitude: "6"; latitude: "1"; height: "111"; }
+ ListElement{ longitude: "6"; latitude: "2"; height: "110"; }
+ ListElement{ longitude: "6"; latitude: "3"; height: "111"; }
+ ListElement{ longitude: "6"; latitude: "4"; height: "116"; }
+ ListElement{ longitude: "6"; latitude: "5"; height: "119"; }
+ ListElement{ longitude: "6"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "6"; latitude: "7"; height: "129"; }
+ ListElement{ longitude: "6"; latitude: "8"; height: "132"; }
+ ListElement{ longitude: "6"; latitude: "9"; height: "132"; }
+ ListElement{ longitude: "6"; latitude: "10"; height: "135"; }
+ ListElement{ longitude: "6"; latitude: "11"; height: "136"; }
+ ListElement{ longitude: "6"; latitude: "12"; height: "135"; }
+ ListElement{ longitude: "6"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "6"; latitude: "14"; height: "137"; }
+ ListElement{ longitude: "6"; latitude: "15"; height: "136"; }
+ ListElement{ longitude: "6"; latitude: "16"; height: "132"; }
+ ListElement{ longitude: "6"; latitude: "17"; height: "128"; }
+ ListElement{ longitude: "6"; latitude: "18"; height: "118"; }
+ ListElement{ longitude: "6"; latitude: "19"; height: "111"; }
+ ListElement{ longitude: "6"; latitude: "20"; height: "105"; }
+ ListElement{ longitude: "6"; latitude: "21"; height: "106"; }
+ ListElement{ longitude: "6"; latitude: "22"; height: "107"; }
+ ListElement{ longitude: "6"; latitude: "23"; height: "115"; }
+ ListElement{ longitude: "6"; latitude: "24"; height: "121"; }
+ ListElement{ longitude: "6"; latitude: "25"; height: "111"; }
+ ListElement{ longitude: "6"; latitude: "26"; height: "78"; }
+ ListElement{ longitude: "6"; latitude: "27"; height: "131"; }
+ ListElement{ longitude: "6"; latitude: "28"; height: "130"; }
+ ListElement{ longitude: "6"; latitude: "29"; height: "129"; }
+ ListElement{ longitude: "6"; latitude: "30"; height: "103"; }
+ ListElement{ longitude: "6"; latitude: "31"; height: "113"; }
+ ListElement{ longitude: "6"; latitude: "32"; height: "108"; }
+ ListElement{ longitude: "6"; latitude: "33"; height: "103"; }
+ ListElement{ longitude: "6"; latitude: "34"; height: "103"; }
+ ListElement{ longitude: "6"; latitude: "35"; height: "107"; }
+ ListElement{ longitude: "6"; latitude: "36"; height: "109"; }
+ ListElement{ longitude: "6"; latitude: "37"; height: "113"; }
+ ListElement{ longitude: "6"; latitude: "38"; height: "112"; }
+ ListElement{ longitude: "6"; latitude: "39"; height: "115"; }
+ ListElement{ longitude: "6"; latitude: "40"; height: "115"; }
+ ListElement{ longitude: "6"; latitude: "41"; height: "119"; }
+ ListElement{ longitude: "6"; latitude: "42"; height: "122"; }
+ ListElement{ longitude: "6"; latitude: "43"; height: "125"; }
+ ListElement{ longitude: "6"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "6"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "6"; latitude: "46"; height: "129"; }
+ ListElement{ longitude: "6"; latitude: "47"; height: "131"; }
+ ListElement{ longitude: "6"; latitude: "48"; height: "133"; }
+ ListElement{ longitude: "6"; latitude: "49"; height: "141"; }
+ ListElement{ longitude: "6"; latitude: "50"; height: "135"; }
+ ListElement{ longitude: "6"; latitude: "51"; height: "137"; }
+ ListElement{ longitude: "6"; latitude: "52"; height: "132"; }
+ ListElement{ longitude: "6"; latitude: "53"; height: "124"; }
+ ListElement{ longitude: "6"; latitude: "54"; height: "122"; }
+ ListElement{ longitude: "6"; latitude: "55"; height: "125"; }
+ ListElement{ longitude: "6"; latitude: "56"; height: "126"; }
+ ListElement{ longitude: "6"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "6"; latitude: "58"; height: "128"; }
+ ListElement{ longitude: "6"; latitude: "59"; height: "127"; }
+ ListElement{ longitude: "6"; latitude: "60"; height: "126"; }
+ ListElement{ longitude: "6"; latitude: "61"; height: "124"; }
+ ListElement{ longitude: "6"; latitude: "62"; height: "120"; }
+ ListElement{ longitude: "6"; latitude: "63"; height: "118"; }
+ ListElement{ longitude: "6"; latitude: "64"; height: "118"; }
+ ListElement{ longitude: "6"; latitude: "65"; height: "117"; }
+ ListElement{ longitude: "6"; latitude: "66"; height: "119"; }
+ ListElement{ longitude: "6"; latitude: "67"; height: "124"; }
+ ListElement{ longitude: "6"; latitude: "68"; height: "125"; }
+ ListElement{ longitude: "6"; latitude: "69"; height: "130"; }
+ ListElement{ longitude: "6"; latitude: "70"; height: "132"; }
+ ListElement{ longitude: "6"; latitude: "71"; height: "135"; }
+ ListElement{ longitude: "6"; latitude: "72"; height: "136"; }
+ ListElement{ longitude: "6"; latitude: "73"; height: "135"; }
+ ListElement{ longitude: "6"; latitude: "74"; height: "131"; }
+ ListElement{ longitude: "6"; latitude: "75"; height: "135"; }
+ ListElement{ longitude: "6"; latitude: "76"; height: "123"; }
+ ListElement{ longitude: "6"; latitude: "77"; height: "112"; }
+ ListElement{ longitude: "6"; latitude: "78"; height: "106"; }
+ ListElement{ longitude: "6"; latitude: "79"; height: "106"; }
+ ListElement{ longitude: "6"; latitude: "80"; height: "107"; }
+ ListElement{ longitude: "6"; latitude: "81"; height: "110"; }
+ ListElement{ longitude: "6"; latitude: "82"; height: "114"; }
+ ListElement{ longitude: "6"; latitude: "83"; height: "116"; }
+ ListElement{ longitude: "6"; latitude: "84"; height: "92"; }
+ ListElement{ longitude: "6"; latitude: "85"; height: "105"; }
+ ListElement{ longitude: "6"; latitude: "86"; height: "124"; }
+ ListElement{ longitude: "6"; latitude: "87"; height: "130"; }
+ ListElement{ longitude: "6"; latitude: "88"; height: "138"; }
+ ListElement{ longitude: "6"; latitude: "89"; height: "142"; }
+ ListElement{ longitude: "6"; latitude: "90"; height: "147"; }
+ ListElement{ longitude: "6"; latitude: "91"; height: "147"; }
+ ListElement{ longitude: "6"; latitude: "92"; height: "142"; }
+ ListElement{ longitude: "6"; latitude: "93"; height: "139"; }
+ ListElement{ longitude: "6"; latitude: "94"; height: "138"; }
+ ListElement{ longitude: "6"; latitude: "95"; height: "136"; }
+ ListElement{ longitude: "6"; latitude: "96"; height: "141"; }
+ ListElement{ longitude: "6"; latitude: "97"; height: "142"; }
+ ListElement{ longitude: "6"; latitude: "98"; height: "146"; }
+ ListElement{ longitude: "6"; latitude: "99"; height: "126"; }
+ ListElement{ longitude: "7"; latitude: "0"; height: "117"; }
+ ListElement{ longitude: "7"; latitude: "1"; height: "111"; }
+ ListElement{ longitude: "7"; latitude: "2"; height: "108"; }
+ ListElement{ longitude: "7"; latitude: "3"; height: "112"; }
+ ListElement{ longitude: "7"; latitude: "4"; height: "119"; }
+ ListElement{ longitude: "7"; latitude: "5"; height: "124"; }
+ ListElement{ longitude: "7"; latitude: "6"; height: "130"; }
+ ListElement{ longitude: "7"; latitude: "7"; height: "131"; }
+ ListElement{ longitude: "7"; latitude: "8"; height: "133"; }
+ ListElement{ longitude: "7"; latitude: "9"; height: "136"; }
+ ListElement{ longitude: "7"; latitude: "10"; height: "133"; }
+ ListElement{ longitude: "7"; latitude: "11"; height: "134"; }
+ ListElement{ longitude: "7"; latitude: "12"; height: "138"; }
+ ListElement{ longitude: "7"; latitude: "13"; height: "138"; }
+ ListElement{ longitude: "7"; latitude: "14"; height: "138"; }
+ ListElement{ longitude: "7"; latitude: "15"; height: "138"; }
+ ListElement{ longitude: "7"; latitude: "16"; height: "136"; }
+ ListElement{ longitude: "7"; latitude: "17"; height: "129"; }
+ ListElement{ longitude: "7"; latitude: "18"; height: "123"; }
+ ListElement{ longitude: "7"; latitude: "19"; height: "115"; }
+ ListElement{ longitude: "7"; latitude: "20"; height: "109"; }
+ ListElement{ longitude: "7"; latitude: "21"; height: "109"; }
+ ListElement{ longitude: "7"; latitude: "22"; height: "109"; }
+ ListElement{ longitude: "7"; latitude: "23"; height: "117"; }
+ ListElement{ longitude: "7"; latitude: "24"; height: "124"; }
+ ListElement{ longitude: "7"; latitude: "25"; height: "122"; }
+ ListElement{ longitude: "7"; latitude: "26"; height: "105"; }
+ ListElement{ longitude: "7"; latitude: "27"; height: "131"; }
+ ListElement{ longitude: "7"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "7"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "7"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "7"; latitude: "31"; height: "115"; }
+ ListElement{ longitude: "7"; latitude: "32"; height: "110"; }
+ ListElement{ longitude: "7"; latitude: "33"; height: "108"; }
+ ListElement{ longitude: "7"; latitude: "34"; height: "107"; }
+ ListElement{ longitude: "7"; latitude: "35"; height: "113"; }
+ ListElement{ longitude: "7"; latitude: "36"; height: "115"; }
+ ListElement{ longitude: "7"; latitude: "37"; height: "115"; }
+ ListElement{ longitude: "7"; latitude: "38"; height: "114"; }
+ ListElement{ longitude: "7"; latitude: "39"; height: "114"; }
+ ListElement{ longitude: "7"; latitude: "40"; height: "116"; }
+ ListElement{ longitude: "7"; latitude: "41"; height: "119"; }
+ ListElement{ longitude: "7"; latitude: "42"; height: "122"; }
+ ListElement{ longitude: "7"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "7"; latitude: "44"; height: "129"; }
+ ListElement{ longitude: "7"; latitude: "45"; height: "129"; }
+ ListElement{ longitude: "7"; latitude: "46"; height: "132"; }
+ ListElement{ longitude: "7"; latitude: "47"; height: "132"; }
+ ListElement{ longitude: "7"; latitude: "48"; height: "135"; }
+ ListElement{ longitude: "7"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "7"; latitude: "50"; height: "137"; }
+ ListElement{ longitude: "7"; latitude: "51"; height: "133"; }
+ ListElement{ longitude: "7"; latitude: "52"; height: "130"; }
+ ListElement{ longitude: "7"; latitude: "53"; height: "126"; }
+ ListElement{ longitude: "7"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "7"; latitude: "55"; height: "125"; }
+ ListElement{ longitude: "7"; latitude: "56"; height: "124"; }
+ ListElement{ longitude: "7"; latitude: "57"; height: "125"; }
+ ListElement{ longitude: "7"; latitude: "58"; height: "127"; }
+ ListElement{ longitude: "7"; latitude: "59"; height: "127"; }
+ ListElement{ longitude: "7"; latitude: "60"; height: "127"; }
+ ListElement{ longitude: "7"; latitude: "61"; height: "127"; }
+ ListElement{ longitude: "7"; latitude: "62"; height: "126"; }
+ ListElement{ longitude: "7"; latitude: "63"; height: "125"; }
+ ListElement{ longitude: "7"; latitude: "64"; height: "121"; }
+ ListElement{ longitude: "7"; latitude: "65"; height: "122"; }
+ ListElement{ longitude: "7"; latitude: "66"; height: "127"; }
+ ListElement{ longitude: "7"; latitude: "67"; height: "129"; }
+ ListElement{ longitude: "7"; latitude: "68"; height: "130"; }
+ ListElement{ longitude: "7"; latitude: "69"; height: "129"; }
+ ListElement{ longitude: "7"; latitude: "70"; height: "130"; }
+ ListElement{ longitude: "7"; latitude: "71"; height: "136"; }
+ ListElement{ longitude: "7"; latitude: "72"; height: "135"; }
+ ListElement{ longitude: "7"; latitude: "73"; height: "136"; }
+ ListElement{ longitude: "7"; latitude: "74"; height: "132"; }
+ ListElement{ longitude: "7"; latitude: "75"; height: "124"; }
+ ListElement{ longitude: "7"; latitude: "76"; height: "118"; }
+ ListElement{ longitude: "7"; latitude: "77"; height: "110"; }
+ ListElement{ longitude: "7"; latitude: "78"; height: "103"; }
+ ListElement{ longitude: "7"; latitude: "79"; height: "101"; }
+ ListElement{ longitude: "7"; latitude: "80"; height: "103"; }
+ ListElement{ longitude: "7"; latitude: "81"; height: "105"; }
+ ListElement{ longitude: "7"; latitude: "82"; height: "107"; }
+ ListElement{ longitude: "7"; latitude: "83"; height: "112"; }
+ ListElement{ longitude: "7"; latitude: "84"; height: "104"; }
+ ListElement{ longitude: "7"; latitude: "85"; height: "109"; }
+ ListElement{ longitude: "7"; latitude: "86"; height: "119"; }
+ ListElement{ longitude: "7"; latitude: "87"; height: "125"; }
+ ListElement{ longitude: "7"; latitude: "88"; height: "132"; }
+ ListElement{ longitude: "7"; latitude: "89"; height: "139"; }
+ ListElement{ longitude: "7"; latitude: "90"; height: "143"; }
+ ListElement{ longitude: "7"; latitude: "91"; height: "146"; }
+ ListElement{ longitude: "7"; latitude: "92"; height: "143"; }
+ ListElement{ longitude: "7"; latitude: "93"; height: "139"; }
+ ListElement{ longitude: "7"; latitude: "94"; height: "138"; }
+ ListElement{ longitude: "7"; latitude: "95"; height: "138"; }
+ ListElement{ longitude: "7"; latitude: "96"; height: "141"; }
+ ListElement{ longitude: "7"; latitude: "97"; height: "143"; }
+ ListElement{ longitude: "7"; latitude: "98"; height: "147"; }
+ ListElement{ longitude: "7"; latitude: "99"; height: "130"; }
+ ListElement{ longitude: "8"; latitude: "0"; height: "119"; }
+ ListElement{ longitude: "8"; latitude: "1"; height: "113"; }
+ ListElement{ longitude: "8"; latitude: "2"; height: "114"; }
+ ListElement{ longitude: "8"; latitude: "3"; height: "115"; }
+ ListElement{ longitude: "8"; latitude: "4"; height: "121"; }
+ ListElement{ longitude: "8"; latitude: "5"; height: "127"; }
+ ListElement{ longitude: "8"; latitude: "6"; height: "132"; }
+ ListElement{ longitude: "8"; latitude: "7"; height: "132"; }
+ ListElement{ longitude: "8"; latitude: "8"; height: "134"; }
+ ListElement{ longitude: "8"; latitude: "9"; height: "135"; }
+ ListElement{ longitude: "8"; latitude: "10"; height: "133"; }
+ ListElement{ longitude: "8"; latitude: "11"; height: "135"; }
+ ListElement{ longitude: "8"; latitude: "12"; height: "138"; }
+ ListElement{ longitude: "8"; latitude: "13"; height: "137"; }
+ ListElement{ longitude: "8"; latitude: "14"; height: "137"; }
+ ListElement{ longitude: "8"; latitude: "15"; height: "138"; }
+ ListElement{ longitude: "8"; latitude: "16"; height: "138"; }
+ ListElement{ longitude: "8"; latitude: "17"; height: "133"; }
+ ListElement{ longitude: "8"; latitude: "18"; height: "126"; }
+ ListElement{ longitude: "8"; latitude: "19"; height: "118"; }
+ ListElement{ longitude: "8"; latitude: "20"; height: "114"; }
+ ListElement{ longitude: "8"; latitude: "21"; height: "114"; }
+ ListElement{ longitude: "8"; latitude: "22"; height: "115"; }
+ ListElement{ longitude: "8"; latitude: "23"; height: "120"; }
+ ListElement{ longitude: "8"; latitude: "24"; height: "123"; }
+ ListElement{ longitude: "8"; latitude: "25"; height: "124"; }
+ ListElement{ longitude: "8"; latitude: "26"; height: "129"; }
+ ListElement{ longitude: "8"; latitude: "27"; height: "130"; }
+ ListElement{ longitude: "8"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "8"; latitude: "29"; height: "123"; }
+ ListElement{ longitude: "8"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "8"; latitude: "31"; height: "116"; }
+ ListElement{ longitude: "8"; latitude: "32"; height: "115"; }
+ ListElement{ longitude: "8"; latitude: "33"; height: "113"; }
+ ListElement{ longitude: "8"; latitude: "34"; height: "114"; }
+ ListElement{ longitude: "8"; latitude: "35"; height: "119"; }
+ ListElement{ longitude: "8"; latitude: "36"; height: "117"; }
+ ListElement{ longitude: "8"; latitude: "37"; height: "117"; }
+ ListElement{ longitude: "8"; latitude: "38"; height: "118"; }
+ ListElement{ longitude: "8"; latitude: "39"; height: "116"; }
+ ListElement{ longitude: "8"; latitude: "40"; height: "118"; }
+ ListElement{ longitude: "8"; latitude: "41"; height: "121"; }
+ ListElement{ longitude: "8"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "8"; latitude: "43"; height: "131"; }
+ ListElement{ longitude: "8"; latitude: "44"; height: "130"; }
+ ListElement{ longitude: "8"; latitude: "45"; height: "133"; }
+ ListElement{ longitude: "8"; latitude: "46"; height: "132"; }
+ ListElement{ longitude: "8"; latitude: "47"; height: "133"; }
+ ListElement{ longitude: "8"; latitude: "48"; height: "136"; }
+ ListElement{ longitude: "8"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "8"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "8"; latitude: "51"; height: "132"; }
+ ListElement{ longitude: "8"; latitude: "52"; height: "129"; }
+ ListElement{ longitude: "8"; latitude: "53"; height: "126"; }
+ ListElement{ longitude: "8"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "8"; latitude: "55"; height: "125"; }
+ ListElement{ longitude: "8"; latitude: "56"; height: "124"; }
+ ListElement{ longitude: "8"; latitude: "57"; height: "126"; }
+ ListElement{ longitude: "8"; latitude: "58"; height: "127"; }
+ ListElement{ longitude: "8"; latitude: "59"; height: "127"; }
+ ListElement{ longitude: "8"; latitude: "60"; height: "127"; }
+ ListElement{ longitude: "8"; latitude: "61"; height: "127"; }
+ ListElement{ longitude: "8"; latitude: "62"; height: "116"; }
+ ListElement{ longitude: "8"; latitude: "63"; height: "126"; }
+ ListElement{ longitude: "8"; latitude: "64"; height: "128"; }
+ ListElement{ longitude: "8"; latitude: "65"; height: "129"; }
+ ListElement{ longitude: "8"; latitude: "66"; height: "110"; }
+ ListElement{ longitude: "8"; latitude: "67"; height: "107"; }
+ ListElement{ longitude: "8"; latitude: "68"; height: "124"; }
+ ListElement{ longitude: "8"; latitude: "69"; height: "131"; }
+ ListElement{ longitude: "8"; latitude: "70"; height: "130"; }
+ ListElement{ longitude: "8"; latitude: "71"; height: "134"; }
+ ListElement{ longitude: "8"; latitude: "72"; height: "138"; }
+ ListElement{ longitude: "8"; latitude: "73"; height: "136"; }
+ ListElement{ longitude: "8"; latitude: "74"; height: "127"; }
+ ListElement{ longitude: "8"; latitude: "75"; height: "117"; }
+ ListElement{ longitude: "8"; latitude: "76"; height: "115"; }
+ ListElement{ longitude: "8"; latitude: "77"; height: "111"; }
+ ListElement{ longitude: "8"; latitude: "78"; height: "100"; }
+ ListElement{ longitude: "8"; latitude: "79"; height: "99"; }
+ ListElement{ longitude: "8"; latitude: "80"; height: "99"; }
+ ListElement{ longitude: "8"; latitude: "81"; height: "102"; }
+ ListElement{ longitude: "8"; latitude: "82"; height: "101"; }
+ ListElement{ longitude: "8"; latitude: "83"; height: "105"; }
+ ListElement{ longitude: "8"; latitude: "84"; height: "107"; }
+ ListElement{ longitude: "8"; latitude: "85"; height: "103"; }
+ ListElement{ longitude: "8"; latitude: "86"; height: "110"; }
+ ListElement{ longitude: "8"; latitude: "87"; height: "119"; }
+ ListElement{ longitude: "8"; latitude: "88"; height: "126"; }
+ ListElement{ longitude: "8"; latitude: "89"; height: "134"; }
+ ListElement{ longitude: "8"; latitude: "90"; height: "136"; }
+ ListElement{ longitude: "8"; latitude: "91"; height: "138"; }
+ ListElement{ longitude: "8"; latitude: "92"; height: "136"; }
+ ListElement{ longitude: "8"; latitude: "93"; height: "137"; }
+ ListElement{ longitude: "8"; latitude: "94"; height: "136"; }
+ ListElement{ longitude: "8"; latitude: "95"; height: "134"; }
+ ListElement{ longitude: "8"; latitude: "96"; height: "135"; }
+ ListElement{ longitude: "8"; latitude: "97"; height: "137"; }
+ ListElement{ longitude: "8"; latitude: "98"; height: "143"; }
+ ListElement{ longitude: "8"; latitude: "99"; height: "137"; }
+ ListElement{ longitude: "9"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "1"; height: "118"; }
+ ListElement{ longitude: "9"; latitude: "2"; height: "118"; }
+ ListElement{ longitude: "9"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "4"; height: "126"; }
+ ListElement{ longitude: "9"; latitude: "5"; height: "129"; }
+ ListElement{ longitude: "9"; latitude: "6"; height: "133"; }
+ ListElement{ longitude: "9"; latitude: "7"; height: "132"; }
+ ListElement{ longitude: "9"; latitude: "8"; height: "133"; }
+ ListElement{ longitude: "9"; latitude: "9"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "10"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "11"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "12"; height: "131"; }
+ ListElement{ longitude: "9"; latitude: "13"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "14"; height: "136"; }
+ ListElement{ longitude: "9"; latitude: "15"; height: "137"; }
+ ListElement{ longitude: "9"; latitude: "16"; height: "131"; }
+ ListElement{ longitude: "9"; latitude: "17"; height: "119"; }
+ ListElement{ longitude: "9"; latitude: "18"; height: "126"; }
+ ListElement{ longitude: "9"; latitude: "19"; height: "121"; }
+ ListElement{ longitude: "9"; latitude: "20"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "21"; height: "117"; }
+ ListElement{ longitude: "9"; latitude: "22"; height: "116"; }
+ ListElement{ longitude: "9"; latitude: "23"; height: "119"; }
+ ListElement{ longitude: "9"; latitude: "24"; height: "122"; }
+ ListElement{ longitude: "9"; latitude: "25"; height: "122"; }
+ ListElement{ longitude: "9"; latitude: "26"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "27"; height: "121"; }
+ ListElement{ longitude: "9"; latitude: "28"; height: "121"; }
+ ListElement{ longitude: "9"; latitude: "29"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "30"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "31"; height: "117"; }
+ ListElement{ longitude: "9"; latitude: "32"; height: "116"; }
+ ListElement{ longitude: "9"; latitude: "33"; height: "118"; }
+ ListElement{ longitude: "9"; latitude: "34"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "35"; height: "123"; }
+ ListElement{ longitude: "9"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "9"; latitude: "37"; height: "122"; }
+ ListElement{ longitude: "9"; latitude: "38"; height: "121"; }
+ ListElement{ longitude: "9"; latitude: "39"; height: "119"; }
+ ListElement{ longitude: "9"; latitude: "40"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "41"; height: "121"; }
+ ListElement{ longitude: "9"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "9"; latitude: "43"; height: "132"; }
+ ListElement{ longitude: "9"; latitude: "44"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "45"; height: "135"; }
+ ListElement{ longitude: "9"; latitude: "46"; height: "135"; }
+ ListElement{ longitude: "9"; latitude: "47"; height: "133"; }
+ ListElement{ longitude: "9"; latitude: "48"; height: "136"; }
+ ListElement{ longitude: "9"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "9"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "9"; latitude: "51"; height: "132"; }
+ ListElement{ longitude: "9"; latitude: "52"; height: "131"; }
+ ListElement{ longitude: "9"; latitude: "53"; height: "126"; }
+ ListElement{ longitude: "9"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "9"; latitude: "55"; height: "125"; }
+ ListElement{ longitude: "9"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "9"; latitude: "57"; height: "125"; }
+ ListElement{ longitude: "9"; latitude: "58"; height: "126"; }
+ ListElement{ longitude: "9"; latitude: "59"; height: "125"; }
+ ListElement{ longitude: "9"; latitude: "60"; height: "127"; }
+ ListElement{ longitude: "9"; latitude: "61"; height: "129"; }
+ ListElement{ longitude: "9"; latitude: "62"; height: "129"; }
+ ListElement{ longitude: "9"; latitude: "63"; height: "127"; }
+ ListElement{ longitude: "9"; latitude: "64"; height: "131"; }
+ ListElement{ longitude: "9"; latitude: "65"; height: "122"; }
+ ListElement{ longitude: "9"; latitude: "66"; height: "107"; }
+ ListElement{ longitude: "9"; latitude: "67"; height: "103"; }
+ ListElement{ longitude: "9"; latitude: "68"; height: "105"; }
+ ListElement{ longitude: "9"; latitude: "69"; height: "112"; }
+ ListElement{ longitude: "9"; latitude: "70"; height: "130"; }
+ ListElement{ longitude: "9"; latitude: "71"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "72"; height: "140"; }
+ ListElement{ longitude: "9"; latitude: "73"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "74"; height: "129"; }
+ ListElement{ longitude: "9"; latitude: "75"; height: "120"; }
+ ListElement{ longitude: "9"; latitude: "76"; height: "117"; }
+ ListElement{ longitude: "9"; latitude: "77"; height: "113"; }
+ ListElement{ longitude: "9"; latitude: "78"; height: "102"; }
+ ListElement{ longitude: "9"; latitude: "79"; height: "99"; }
+ ListElement{ longitude: "9"; latitude: "80"; height: "101"; }
+ ListElement{ longitude: "9"; latitude: "81"; height: "101"; }
+ ListElement{ longitude: "9"; latitude: "82"; height: "101"; }
+ ListElement{ longitude: "9"; latitude: "83"; height: "101"; }
+ ListElement{ longitude: "9"; latitude: "84"; height: "96"; }
+ ListElement{ longitude: "9"; latitude: "85"; height: "98"; }
+ ListElement{ longitude: "9"; latitude: "86"; height: "106"; }
+ ListElement{ longitude: "9"; latitude: "87"; height: "112"; }
+ ListElement{ longitude: "9"; latitude: "88"; height: "119"; }
+ ListElement{ longitude: "9"; latitude: "89"; height: "126"; }
+ ListElement{ longitude: "9"; latitude: "90"; height: "128"; }
+ ListElement{ longitude: "9"; latitude: "91"; height: "132"; }
+ ListElement{ longitude: "9"; latitude: "92"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "93"; height: "134"; }
+ ListElement{ longitude: "9"; latitude: "94"; height: "131"; }
+ ListElement{ longitude: "9"; latitude: "95"; height: "131"; }
+ ListElement{ longitude: "9"; latitude: "96"; height: "131"; }
+ ListElement{ longitude: "9"; latitude: "97"; height: "137"; }
+ ListElement{ longitude: "9"; latitude: "98"; height: "141"; }
+ ListElement{ longitude: "9"; latitude: "99"; height: "139"; }
+ ListElement{ longitude: "10"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "10"; latitude: "1"; height: "121"; }
+ ListElement{ longitude: "10"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "10"; latitude: "3"; height: "124"; }
+ ListElement{ longitude: "10"; latitude: "4"; height: "129"; }
+ ListElement{ longitude: "10"; latitude: "5"; height: "131"; }
+ ListElement{ longitude: "10"; latitude: "6"; height: "132"; }
+ ListElement{ longitude: "10"; latitude: "7"; height: "130"; }
+ ListElement{ longitude: "10"; latitude: "8"; height: "130"; }
+ ListElement{ longitude: "10"; latitude: "9"; height: "130"; }
+ ListElement{ longitude: "10"; latitude: "10"; height: "133"; }
+ ListElement{ longitude: "10"; latitude: "11"; height: "135"; }
+ ListElement{ longitude: "10"; latitude: "12"; height: "130"; }
+ ListElement{ longitude: "10"; latitude: "13"; height: "134"; }
+ ListElement{ longitude: "10"; latitude: "14"; height: "135"; }
+ ListElement{ longitude: "10"; latitude: "15"; height: "133"; }
+ ListElement{ longitude: "10"; latitude: "16"; height: "129"; }
+ ListElement{ longitude: "10"; latitude: "17"; height: "105"; }
+ ListElement{ longitude: "10"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "10"; latitude: "19"; height: "124"; }
+ ListElement{ longitude: "10"; latitude: "20"; height: "115"; }
+ ListElement{ longitude: "10"; latitude: "21"; height: "101"; }
+ ListElement{ longitude: "10"; latitude: "22"; height: "103"; }
+ ListElement{ longitude: "10"; latitude: "23"; height: "113"; }
+ ListElement{ longitude: "10"; latitude: "24"; height: "120"; }
+ ListElement{ longitude: "10"; latitude: "25"; height: "120"; }
+ ListElement{ longitude: "10"; latitude: "26"; height: "118"; }
+ ListElement{ longitude: "10"; latitude: "27"; height: "118"; }
+ ListElement{ longitude: "10"; latitude: "28"; height: "120"; }
+ ListElement{ longitude: "10"; latitude: "29"; height: "120"; }
+ ListElement{ longitude: "10"; latitude: "30"; height: "120"; }
+ ListElement{ longitude: "10"; latitude: "31"; height: "119"; }
+ ListElement{ longitude: "10"; latitude: "32"; height: "119"; }
+ ListElement{ longitude: "10"; latitude: "33"; height: "119"; }
+ ListElement{ longitude: "10"; latitude: "34"; height: "123"; }
+ ListElement{ longitude: "10"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "10"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "10"; latitude: "37"; height: "125"; }
+ ListElement{ longitude: "10"; latitude: "38"; height: "122"; }
+ ListElement{ longitude: "10"; latitude: "39"; height: "121"; }
+ ListElement{ longitude: "10"; latitude: "40"; height: "122"; }
+ ListElement{ longitude: "10"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "10"; latitude: "42"; height: "130"; }
+ ListElement{ longitude: "10"; latitude: "43"; height: "135"; }
+ ListElement{ longitude: "10"; latitude: "44"; height: "135"; }
+ ListElement{ longitude: "10"; latitude: "45"; height: "138"; }
+ ListElement{ longitude: "10"; latitude: "46"; height: "136"; }
+ ListElement{ longitude: "10"; latitude: "47"; height: "136"; }
+ ListElement{ longitude: "10"; latitude: "48"; height: "136"; }
+ ListElement{ longitude: "10"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "10"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "10"; latitude: "51"; height: "134"; }
+ ListElement{ longitude: "10"; latitude: "52"; height: "131"; }
+ ListElement{ longitude: "10"; latitude: "53"; height: "127"; }
+ ListElement{ longitude: "10"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "10"; latitude: "55"; height: "122"; }
+ ListElement{ longitude: "10"; latitude: "56"; height: "122"; }
+ ListElement{ longitude: "10"; latitude: "57"; height: "124"; }
+ ListElement{ longitude: "10"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "10"; latitude: "59"; height: "126"; }
+ ListElement{ longitude: "10"; latitude: "60"; height: "127"; }
+ ListElement{ longitude: "10"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "10"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "10"; latitude: "63"; height: "115"; }
+ ListElement{ longitude: "10"; latitude: "64"; height: "133"; }
+ ListElement{ longitude: "10"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "10"; latitude: "66"; height: "115"; }
+ ListElement{ longitude: "10"; latitude: "67"; height: "105"; }
+ ListElement{ longitude: "10"; latitude: "68"; height: "98"; }
+ ListElement{ longitude: "10"; latitude: "69"; height: "106"; }
+ ListElement{ longitude: "10"; latitude: "70"; height: "132"; }
+ ListElement{ longitude: "10"; latitude: "71"; height: "134"; }
+ ListElement{ longitude: "10"; latitude: "72"; height: "139"; }
+ ListElement{ longitude: "10"; latitude: "73"; height: "137"; }
+ ListElement{ longitude: "10"; latitude: "74"; height: "130"; }
+ ListElement{ longitude: "10"; latitude: "75"; height: "122"; }
+ ListElement{ longitude: "10"; latitude: "76"; height: "116"; }
+ ListElement{ longitude: "10"; latitude: "77"; height: "107"; }
+ ListElement{ longitude: "10"; latitude: "78"; height: "104"; }
+ ListElement{ longitude: "10"; latitude: "79"; height: "104"; }
+ ListElement{ longitude: "10"; latitude: "80"; height: "104"; }
+ ListElement{ longitude: "10"; latitude: "81"; height: "105"; }
+ ListElement{ longitude: "10"; latitude: "82"; height: "102"; }
+ ListElement{ longitude: "10"; latitude: "83"; height: "100"; }
+ ListElement{ longitude: "10"; latitude: "84"; height: "99"; }
+ ListElement{ longitude: "10"; latitude: "85"; height: "102"; }
+ ListElement{ longitude: "10"; latitude: "86"; height: "101"; }
+ ListElement{ longitude: "10"; latitude: "87"; height: "110"; }
+ ListElement{ longitude: "10"; latitude: "88"; height: "114"; }
+ ListElement{ longitude: "10"; latitude: "89"; height: "121"; }
+ ListElement{ longitude: "10"; latitude: "90"; height: "125"; }
+ ListElement{ longitude: "10"; latitude: "91"; height: "128"; }
+ ListElement{ longitude: "10"; latitude: "92"; height: "128"; }
+ ListElement{ longitude: "10"; latitude: "93"; height: "130"; }
+ ListElement{ longitude: "10"; latitude: "94"; height: "129"; }
+ ListElement{ longitude: "10"; latitude: "95"; height: "131"; }
+ ListElement{ longitude: "10"; latitude: "96"; height: "131"; }
+ ListElement{ longitude: "10"; latitude: "97"; height: "132"; }
+ ListElement{ longitude: "10"; latitude: "98"; height: "139"; }
+ ListElement{ longitude: "10"; latitude: "99"; height: "140"; }
+ ListElement{ longitude: "11"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "11"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "11"; latitude: "2"; height: "127"; }
+ ListElement{ longitude: "11"; latitude: "3"; height: "129"; }
+ ListElement{ longitude: "11"; latitude: "4"; height: "131"; }
+ ListElement{ longitude: "11"; latitude: "5"; height: "132"; }
+ ListElement{ longitude: "11"; latitude: "6"; height: "132"; }
+ ListElement{ longitude: "11"; latitude: "7"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "8"; height: "131"; }
+ ListElement{ longitude: "11"; latitude: "9"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "10"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "11"; height: "133"; }
+ ListElement{ longitude: "11"; latitude: "12"; height: "131"; }
+ ListElement{ longitude: "11"; latitude: "13"; height: "134"; }
+ ListElement{ longitude: "11"; latitude: "14"; height: "135"; }
+ ListElement{ longitude: "11"; latitude: "15"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "16"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "17"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "11"; latitude: "19"; height: "124"; }
+ ListElement{ longitude: "11"; latitude: "20"; height: "100"; }
+ ListElement{ longitude: "11"; latitude: "21"; height: "86"; }
+ ListElement{ longitude: "11"; latitude: "22"; height: "90"; }
+ ListElement{ longitude: "11"; latitude: "23"; height: "104"; }
+ ListElement{ longitude: "11"; latitude: "24"; height: "117"; }
+ ListElement{ longitude: "11"; latitude: "25"; height: "120"; }
+ ListElement{ longitude: "11"; latitude: "26"; height: "115"; }
+ ListElement{ longitude: "11"; latitude: "27"; height: "115"; }
+ ListElement{ longitude: "11"; latitude: "28"; height: "117"; }
+ ListElement{ longitude: "11"; latitude: "29"; height: "118"; }
+ ListElement{ longitude: "11"; latitude: "30"; height: "116"; }
+ ListElement{ longitude: "11"; latitude: "31"; height: "117"; }
+ ListElement{ longitude: "11"; latitude: "32"; height: "118"; }
+ ListElement{ longitude: "11"; latitude: "33"; height: "120"; }
+ ListElement{ longitude: "11"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "11"; latitude: "35"; height: "126"; }
+ ListElement{ longitude: "11"; latitude: "36"; height: "127"; }
+ ListElement{ longitude: "11"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "11"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "11"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "11"; latitude: "40"; height: "126"; }
+ ListElement{ longitude: "11"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "11"; latitude: "42"; height: "131"; }
+ ListElement{ longitude: "11"; latitude: "43"; height: "135"; }
+ ListElement{ longitude: "11"; latitude: "44"; height: "135"; }
+ ListElement{ longitude: "11"; latitude: "45"; height: "138"; }
+ ListElement{ longitude: "11"; latitude: "46"; height: "135"; }
+ ListElement{ longitude: "11"; latitude: "47"; height: "136"; }
+ ListElement{ longitude: "11"; latitude: "48"; height: "136"; }
+ ListElement{ longitude: "11"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "11"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "11"; latitude: "51"; height: "134"; }
+ ListElement{ longitude: "11"; latitude: "52"; height: "132"; }
+ ListElement{ longitude: "11"; latitude: "53"; height: "129"; }
+ ListElement{ longitude: "11"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "11"; latitude: "55"; height: "122"; }
+ ListElement{ longitude: "11"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "11"; latitude: "57"; height: "123"; }
+ ListElement{ longitude: "11"; latitude: "58"; height: "122"; }
+ ListElement{ longitude: "11"; latitude: "59"; height: "125"; }
+ ListElement{ longitude: "11"; latitude: "60"; height: "127"; }
+ ListElement{ longitude: "11"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "11"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "11"; latitude: "63"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "64"; height: "131"; }
+ ListElement{ longitude: "11"; latitude: "65"; height: "127"; }
+ ListElement{ longitude: "11"; latitude: "66"; height: "103"; }
+ ListElement{ longitude: "11"; latitude: "67"; height: "110"; }
+ ListElement{ longitude: "11"; latitude: "68"; height: "102"; }
+ ListElement{ longitude: "11"; latitude: "69"; height: "114"; }
+ ListElement{ longitude: "11"; latitude: "70"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "71"; height: "134"; }
+ ListElement{ longitude: "11"; latitude: "72"; height: "137"; }
+ ListElement{ longitude: "11"; latitude: "73"; height: "133"; }
+ ListElement{ longitude: "11"; latitude: "74"; height: "122"; }
+ ListElement{ longitude: "11"; latitude: "75"; height: "120"; }
+ ListElement{ longitude: "11"; latitude: "76"; height: "114"; }
+ ListElement{ longitude: "11"; latitude: "77"; height: "110"; }
+ ListElement{ longitude: "11"; latitude: "78"; height: "109"; }
+ ListElement{ longitude: "11"; latitude: "79"; height: "111"; }
+ ListElement{ longitude: "11"; latitude: "80"; height: "111"; }
+ ListElement{ longitude: "11"; latitude: "81"; height: "111"; }
+ ListElement{ longitude: "11"; latitude: "82"; height: "103"; }
+ ListElement{ longitude: "11"; latitude: "83"; height: "102"; }
+ ListElement{ longitude: "11"; latitude: "84"; height: "98"; }
+ ListElement{ longitude: "11"; latitude: "85"; height: "100"; }
+ ListElement{ longitude: "11"; latitude: "86"; height: "102"; }
+ ListElement{ longitude: "11"; latitude: "87"; height: "104"; }
+ ListElement{ longitude: "11"; latitude: "88"; height: "110"; }
+ ListElement{ longitude: "11"; latitude: "89"; height: "115"; }
+ ListElement{ longitude: "11"; latitude: "90"; height: "119"; }
+ ListElement{ longitude: "11"; latitude: "91"; height: "122"; }
+ ListElement{ longitude: "11"; latitude: "92"; height: "126"; }
+ ListElement{ longitude: "11"; latitude: "93"; height: "126"; }
+ ListElement{ longitude: "11"; latitude: "94"; height: "127"; }
+ ListElement{ longitude: "11"; latitude: "95"; height: "128"; }
+ ListElement{ longitude: "11"; latitude: "96"; height: "130"; }
+ ListElement{ longitude: "11"; latitude: "97"; height: "133"; }
+ ListElement{ longitude: "11"; latitude: "98"; height: "141"; }
+ ListElement{ longitude: "11"; latitude: "99"; height: "142"; }
+ ListElement{ longitude: "12"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "12"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "12"; latitude: "2"; height: "130"; }
+ ListElement{ longitude: "12"; latitude: "3"; height: "134"; }
+ ListElement{ longitude: "12"; latitude: "4"; height: "136"; }
+ ListElement{ longitude: "12"; latitude: "5"; height: "134"; }
+ ListElement{ longitude: "12"; latitude: "6"; height: "131"; }
+ ListElement{ longitude: "12"; latitude: "7"; height: "131"; }
+ ListElement{ longitude: "12"; latitude: "8"; height: "131"; }
+ ListElement{ longitude: "12"; latitude: "9"; height: "131"; }
+ ListElement{ longitude: "12"; latitude: "10"; height: "129"; }
+ ListElement{ longitude: "12"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "12"; latitude: "12"; height: "133"; }
+ ListElement{ longitude: "12"; latitude: "13"; height: "133"; }
+ ListElement{ longitude: "12"; latitude: "14"; height: "132"; }
+ ListElement{ longitude: "12"; latitude: "15"; height: "129"; }
+ ListElement{ longitude: "12"; latitude: "16"; height: "129"; }
+ ListElement{ longitude: "12"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "12"; latitude: "18"; height: "126"; }
+ ListElement{ longitude: "12"; latitude: "19"; height: "119"; }
+ ListElement{ longitude: "12"; latitude: "20"; height: "98"; }
+ ListElement{ longitude: "12"; latitude: "21"; height: "84"; }
+ ListElement{ longitude: "12"; latitude: "22"; height: "87"; }
+ ListElement{ longitude: "12"; latitude: "23"; height: "103"; }
+ ListElement{ longitude: "12"; latitude: "24"; height: "119"; }
+ ListElement{ longitude: "12"; latitude: "25"; height: "117"; }
+ ListElement{ longitude: "12"; latitude: "26"; height: "113"; }
+ ListElement{ longitude: "12"; latitude: "27"; height: "112"; }
+ ListElement{ longitude: "12"; latitude: "28"; height: "113"; }
+ ListElement{ longitude: "12"; latitude: "29"; height: "114"; }
+ ListElement{ longitude: "12"; latitude: "30"; height: "115"; }
+ ListElement{ longitude: "12"; latitude: "31"; height: "118"; }
+ ListElement{ longitude: "12"; latitude: "32"; height: "118"; }
+ ListElement{ longitude: "12"; latitude: "33"; height: "121"; }
+ ListElement{ longitude: "12"; latitude: "34"; height: "124"; }
+ ListElement{ longitude: "12"; latitude: "35"; height: "126"; }
+ ListElement{ longitude: "12"; latitude: "36"; height: "127"; }
+ ListElement{ longitude: "12"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "12"; latitude: "38"; height: "127"; }
+ ListElement{ longitude: "12"; latitude: "39"; height: "127"; }
+ ListElement{ longitude: "12"; latitude: "40"; height: "126"; }
+ ListElement{ longitude: "12"; latitude: "41"; height: "129"; }
+ ListElement{ longitude: "12"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "12"; latitude: "43"; height: "133"; }
+ ListElement{ longitude: "12"; latitude: "44"; height: "134"; }
+ ListElement{ longitude: "12"; latitude: "45"; height: "137"; }
+ ListElement{ longitude: "12"; latitude: "46"; height: "136"; }
+ ListElement{ longitude: "12"; latitude: "47"; height: "135"; }
+ ListElement{ longitude: "12"; latitude: "48"; height: "135"; }
+ ListElement{ longitude: "12"; latitude: "49"; height: "135"; }
+ ListElement{ longitude: "12"; latitude: "50"; height: "135"; }
+ ListElement{ longitude: "12"; latitude: "51"; height: "135"; }
+ ListElement{ longitude: "12"; latitude: "52"; height: "133"; }
+ ListElement{ longitude: "12"; latitude: "53"; height: "130"; }
+ ListElement{ longitude: "12"; latitude: "54"; height: "127"; }
+ ListElement{ longitude: "12"; latitude: "55"; height: "122"; }
+ ListElement{ longitude: "12"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "12"; latitude: "57"; height: "121"; }
+ ListElement{ longitude: "12"; latitude: "58"; height: "121"; }
+ ListElement{ longitude: "12"; latitude: "59"; height: "123"; }
+ ListElement{ longitude: "12"; latitude: "60"; height: "126"; }
+ ListElement{ longitude: "12"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "12"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "12"; latitude: "63"; height: "129"; }
+ ListElement{ longitude: "12"; latitude: "64"; height: "117"; }
+ ListElement{ longitude: "12"; latitude: "65"; height: "127"; }
+ ListElement{ longitude: "12"; latitude: "66"; height: "119"; }
+ ListElement{ longitude: "12"; latitude: "67"; height: "118"; }
+ ListElement{ longitude: "12"; latitude: "68"; height: "117"; }
+ ListElement{ longitude: "12"; latitude: "69"; height: "123"; }
+ ListElement{ longitude: "12"; latitude: "70"; height: "128"; }
+ ListElement{ longitude: "12"; latitude: "71"; height: "130"; }
+ ListElement{ longitude: "12"; latitude: "72"; height: "132"; }
+ ListElement{ longitude: "12"; latitude: "73"; height: "119"; }
+ ListElement{ longitude: "12"; latitude: "74"; height: "111"; }
+ ListElement{ longitude: "12"; latitude: "75"; height: "117"; }
+ ListElement{ longitude: "12"; latitude: "76"; height: "113"; }
+ ListElement{ longitude: "12"; latitude: "77"; height: "112"; }
+ ListElement{ longitude: "12"; latitude: "78"; height: "114"; }
+ ListElement{ longitude: "12"; latitude: "79"; height: "117"; }
+ ListElement{ longitude: "12"; latitude: "80"; height: "117"; }
+ ListElement{ longitude: "12"; latitude: "81"; height: "115"; }
+ ListElement{ longitude: "12"; latitude: "82"; height: "110"; }
+ ListElement{ longitude: "12"; latitude: "83"; height: "105"; }
+ ListElement{ longitude: "12"; latitude: "84"; height: "102"; }
+ ListElement{ longitude: "12"; latitude: "85"; height: "101"; }
+ ListElement{ longitude: "12"; latitude: "86"; height: "102"; }
+ ListElement{ longitude: "12"; latitude: "87"; height: "105"; }
+ ListElement{ longitude: "12"; latitude: "88"; height: "108"; }
+ ListElement{ longitude: "12"; latitude: "89"; height: "111"; }
+ ListElement{ longitude: "12"; latitude: "90"; height: "116"; }
+ ListElement{ longitude: "12"; latitude: "91"; height: "121"; }
+ ListElement{ longitude: "12"; latitude: "92"; height: "124"; }
+ ListElement{ longitude: "12"; latitude: "93"; height: "126"; }
+ ListElement{ longitude: "12"; latitude: "94"; height: "126"; }
+ ListElement{ longitude: "12"; latitude: "95"; height: "129"; }
+ ListElement{ longitude: "12"; latitude: "96"; height: "131"; }
+ ListElement{ longitude: "12"; latitude: "97"; height: "131"; }
+ ListElement{ longitude: "12"; latitude: "98"; height: "140"; }
+ ListElement{ longitude: "12"; latitude: "99"; height: "142"; }
+ ListElement{ longitude: "13"; latitude: "0"; height: "108"; }
+ ListElement{ longitude: "13"; latitude: "1"; height: "113"; }
+ ListElement{ longitude: "13"; latitude: "2"; height: "131"; }
+ ListElement{ longitude: "13"; latitude: "3"; height: "136"; }
+ ListElement{ longitude: "13"; latitude: "4"; height: "137"; }
+ ListElement{ longitude: "13"; latitude: "5"; height: "136"; }
+ ListElement{ longitude: "13"; latitude: "6"; height: "130"; }
+ ListElement{ longitude: "13"; latitude: "7"; height: "131"; }
+ ListElement{ longitude: "13"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "13"; latitude: "9"; height: "129"; }
+ ListElement{ longitude: "13"; latitude: "10"; height: "128"; }
+ ListElement{ longitude: "13"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "13"; latitude: "12"; height: "132"; }
+ ListElement{ longitude: "13"; latitude: "13"; height: "132"; }
+ ListElement{ longitude: "13"; latitude: "14"; height: "132"; }
+ ListElement{ longitude: "13"; latitude: "15"; height: "129"; }
+ ListElement{ longitude: "13"; latitude: "16"; height: "127"; }
+ ListElement{ longitude: "13"; latitude: "17"; height: "127"; }
+ ListElement{ longitude: "13"; latitude: "18"; height: "124"; }
+ ListElement{ longitude: "13"; latitude: "19"; height: "122"; }
+ ListElement{ longitude: "13"; latitude: "20"; height: "106"; }
+ ListElement{ longitude: "13"; latitude: "21"; height: "95"; }
+ ListElement{ longitude: "13"; latitude: "22"; height: "98"; }
+ ListElement{ longitude: "13"; latitude: "23"; height: "111"; }
+ ListElement{ longitude: "13"; latitude: "24"; height: "120"; }
+ ListElement{ longitude: "13"; latitude: "25"; height: "116"; }
+ ListElement{ longitude: "13"; latitude: "26"; height: "112"; }
+ ListElement{ longitude: "13"; latitude: "27"; height: "111"; }
+ ListElement{ longitude: "13"; latitude: "28"; height: "111"; }
+ ListElement{ longitude: "13"; latitude: "29"; height: "113"; }
+ ListElement{ longitude: "13"; latitude: "30"; height: "116"; }
+ ListElement{ longitude: "13"; latitude: "31"; height: "118"; }
+ ListElement{ longitude: "13"; latitude: "32"; height: "119"; }
+ ListElement{ longitude: "13"; latitude: "33"; height: "118"; }
+ ListElement{ longitude: "13"; latitude: "34"; height: "122"; }
+ ListElement{ longitude: "13"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "13"; latitude: "36"; height: "126"; }
+ ListElement{ longitude: "13"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "13"; latitude: "38"; height: "129"; }
+ ListElement{ longitude: "13"; latitude: "39"; height: "127"; }
+ ListElement{ longitude: "13"; latitude: "40"; height: "126"; }
+ ListElement{ longitude: "13"; latitude: "41"; height: "127"; }
+ ListElement{ longitude: "13"; latitude: "42"; height: "130"; }
+ ListElement{ longitude: "13"; latitude: "43"; height: "131"; }
+ ListElement{ longitude: "13"; latitude: "44"; height: "131"; }
+ ListElement{ longitude: "13"; latitude: "45"; height: "133"; }
+ ListElement{ longitude: "13"; latitude: "46"; height: "134"; }
+ ListElement{ longitude: "13"; latitude: "47"; height: "132"; }
+ ListElement{ longitude: "13"; latitude: "48"; height: "133"; }
+ ListElement{ longitude: "13"; latitude: "49"; height: "133"; }
+ ListElement{ longitude: "13"; latitude: "50"; height: "134"; }
+ ListElement{ longitude: "13"; latitude: "51"; height: "136"; }
+ ListElement{ longitude: "13"; latitude: "52"; height: "135"; }
+ ListElement{ longitude: "13"; latitude: "53"; height: "131"; }
+ ListElement{ longitude: "13"; latitude: "54"; height: "127"; }
+ ListElement{ longitude: "13"; latitude: "55"; height: "124"; }
+ ListElement{ longitude: "13"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "13"; latitude: "57"; height: "120"; }
+ ListElement{ longitude: "13"; latitude: "58"; height: "122"; }
+ ListElement{ longitude: "13"; latitude: "59"; height: "123"; }
+ ListElement{ longitude: "13"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "13"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "13"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "13"; latitude: "63"; height: "126"; }
+ ListElement{ longitude: "13"; latitude: "64"; height: "128"; }
+ ListElement{ longitude: "13"; latitude: "65"; height: "118"; }
+ ListElement{ longitude: "13"; latitude: "66"; height: "121"; }
+ ListElement{ longitude: "13"; latitude: "67"; height: "122"; }
+ ListElement{ longitude: "13"; latitude: "68"; height: "120"; }
+ ListElement{ longitude: "13"; latitude: "69"; height: "121"; }
+ ListElement{ longitude: "13"; latitude: "70"; height: "124"; }
+ ListElement{ longitude: "13"; latitude: "71"; height: "128"; }
+ ListElement{ longitude: "13"; latitude: "72"; height: "130"; }
+ ListElement{ longitude: "13"; latitude: "73"; height: "126"; }
+ ListElement{ longitude: "13"; latitude: "74"; height: "114"; }
+ ListElement{ longitude: "13"; latitude: "75"; height: "116"; }
+ ListElement{ longitude: "13"; latitude: "76"; height: "114"; }
+ ListElement{ longitude: "13"; latitude: "77"; height: "114"; }
+ ListElement{ longitude: "13"; latitude: "78"; height: "117"; }
+ ListElement{ longitude: "13"; latitude: "79"; height: "119"; }
+ ListElement{ longitude: "13"; latitude: "80"; height: "118"; }
+ ListElement{ longitude: "13"; latitude: "81"; height: "119"; }
+ ListElement{ longitude: "13"; latitude: "82"; height: "114"; }
+ ListElement{ longitude: "13"; latitude: "83"; height: "110"; }
+ ListElement{ longitude: "13"; latitude: "84"; height: "103"; }
+ ListElement{ longitude: "13"; latitude: "85"; height: "103"; }
+ ListElement{ longitude: "13"; latitude: "86"; height: "105"; }
+ ListElement{ longitude: "13"; latitude: "87"; height: "104"; }
+ ListElement{ longitude: "13"; latitude: "88"; height: "106"; }
+ ListElement{ longitude: "13"; latitude: "89"; height: "109"; }
+ ListElement{ longitude: "13"; latitude: "90"; height: "116"; }
+ ListElement{ longitude: "13"; latitude: "91"; height: "119"; }
+ ListElement{ longitude: "13"; latitude: "92"; height: "124"; }
+ ListElement{ longitude: "13"; latitude: "93"; height: "127"; }
+ ListElement{ longitude: "13"; latitude: "94"; height: "125"; }
+ ListElement{ longitude: "13"; latitude: "95"; height: "127"; }
+ ListElement{ longitude: "13"; latitude: "96"; height: "129"; }
+ ListElement{ longitude: "13"; latitude: "97"; height: "132"; }
+ ListElement{ longitude: "13"; latitude: "98"; height: "137"; }
+ ListElement{ longitude: "13"; latitude: "99"; height: "140"; }
+ ListElement{ longitude: "14"; latitude: "0"; height: "103"; }
+ ListElement{ longitude: "14"; latitude: "1"; height: "99"; }
+ ListElement{ longitude: "14"; latitude: "2"; height: "120"; }
+ ListElement{ longitude: "14"; latitude: "3"; height: "137"; }
+ ListElement{ longitude: "14"; latitude: "4"; height: "134"; }
+ ListElement{ longitude: "14"; latitude: "5"; height: "131"; }
+ ListElement{ longitude: "14"; latitude: "6"; height: "130"; }
+ ListElement{ longitude: "14"; latitude: "7"; height: "128"; }
+ ListElement{ longitude: "14"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "14"; latitude: "9"; height: "126"; }
+ ListElement{ longitude: "14"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "14"; latitude: "11"; height: "127"; }
+ ListElement{ longitude: "14"; latitude: "12"; height: "129"; }
+ ListElement{ longitude: "14"; latitude: "13"; height: "132"; }
+ ListElement{ longitude: "14"; latitude: "14"; height: "132"; }
+ ListElement{ longitude: "14"; latitude: "15"; height: "129"; }
+ ListElement{ longitude: "14"; latitude: "16"; height: "129"; }
+ ListElement{ longitude: "14"; latitude: "17"; height: "127"; }
+ ListElement{ longitude: "14"; latitude: "18"; height: "123"; }
+ ListElement{ longitude: "14"; latitude: "19"; height: "123"; }
+ ListElement{ longitude: "14"; latitude: "20"; height: "116"; }
+ ListElement{ longitude: "14"; latitude: "21"; height: "115"; }
+ ListElement{ longitude: "14"; latitude: "22"; height: "116"; }
+ ListElement{ longitude: "14"; latitude: "23"; height: "123"; }
+ ListElement{ longitude: "14"; latitude: "24"; height: "118"; }
+ ListElement{ longitude: "14"; latitude: "25"; height: "114"; }
+ ListElement{ longitude: "14"; latitude: "26"; height: "108"; }
+ ListElement{ longitude: "14"; latitude: "27"; height: "111"; }
+ ListElement{ longitude: "14"; latitude: "28"; height: "111"; }
+ ListElement{ longitude: "14"; latitude: "29"; height: "114"; }
+ ListElement{ longitude: "14"; latitude: "30"; height: "114"; }
+ ListElement{ longitude: "14"; latitude: "31"; height: "115"; }
+ ListElement{ longitude: "14"; latitude: "32"; height: "118"; }
+ ListElement{ longitude: "14"; latitude: "33"; height: "117"; }
+ ListElement{ longitude: "14"; latitude: "34"; height: "116"; }
+ ListElement{ longitude: "14"; latitude: "35"; height: "119"; }
+ ListElement{ longitude: "14"; latitude: "36"; height: "123"; }
+ ListElement{ longitude: "14"; latitude: "37"; height: "125"; }
+ ListElement{ longitude: "14"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "14"; latitude: "39"; height: "127"; }
+ ListElement{ longitude: "14"; latitude: "40"; height: "126"; }
+ ListElement{ longitude: "14"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "14"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "14"; latitude: "43"; height: "130"; }
+ ListElement{ longitude: "14"; latitude: "44"; height: "129"; }
+ ListElement{ longitude: "14"; latitude: "45"; height: "129"; }
+ ListElement{ longitude: "14"; latitude: "46"; height: "130"; }
+ ListElement{ longitude: "14"; latitude: "47"; height: "131"; }
+ ListElement{ longitude: "14"; latitude: "48"; height: "129"; }
+ ListElement{ longitude: "14"; latitude: "49"; height: "131"; }
+ ListElement{ longitude: "14"; latitude: "50"; height: "130"; }
+ ListElement{ longitude: "14"; latitude: "51"; height: "131"; }
+ ListElement{ longitude: "14"; latitude: "52"; height: "133"; }
+ ListElement{ longitude: "14"; latitude: "53"; height: "132"; }
+ ListElement{ longitude: "14"; latitude: "54"; height: "130"; }
+ ListElement{ longitude: "14"; latitude: "55"; height: "127"; }
+ ListElement{ longitude: "14"; latitude: "56"; height: "122"; }
+ ListElement{ longitude: "14"; latitude: "57"; height: "120"; }
+ ListElement{ longitude: "14"; latitude: "58"; height: "120"; }
+ ListElement{ longitude: "14"; latitude: "59"; height: "118"; }
+ ListElement{ longitude: "14"; latitude: "60"; height: "121"; }
+ ListElement{ longitude: "14"; latitude: "61"; height: "122"; }
+ ListElement{ longitude: "14"; latitude: "62"; height: "122"; }
+ ListElement{ longitude: "14"; latitude: "63"; height: "122"; }
+ ListElement{ longitude: "14"; latitude: "64"; height: "123"; }
+ ListElement{ longitude: "14"; latitude: "65"; height: "123"; }
+ ListElement{ longitude: "14"; latitude: "66"; height: "122"; }
+ ListElement{ longitude: "14"; latitude: "67"; height: "121"; }
+ ListElement{ longitude: "14"; latitude: "68"; height: "117"; }
+ ListElement{ longitude: "14"; latitude: "69"; height: "117"; }
+ ListElement{ longitude: "14"; latitude: "70"; height: "118"; }
+ ListElement{ longitude: "14"; latitude: "71"; height: "122"; }
+ ListElement{ longitude: "14"; latitude: "72"; height: "122"; }
+ ListElement{ longitude: "14"; latitude: "73"; height: "120"; }
+ ListElement{ longitude: "14"; latitude: "74"; height: "117"; }
+ ListElement{ longitude: "14"; latitude: "75"; height: "112"; }
+ ListElement{ longitude: "14"; latitude: "76"; height: "113"; }
+ ListElement{ longitude: "14"; latitude: "77"; height: "111"; }
+ ListElement{ longitude: "14"; latitude: "78"; height: "113"; }
+ ListElement{ longitude: "14"; latitude: "79"; height: "117"; }
+ ListElement{ longitude: "14"; latitude: "80"; height: "121"; }
+ ListElement{ longitude: "14"; latitude: "81"; height: "121"; }
+ ListElement{ longitude: "14"; latitude: "82"; height: "119"; }
+ ListElement{ longitude: "14"; latitude: "83"; height: "112"; }
+ ListElement{ longitude: "14"; latitude: "84"; height: "108"; }
+ ListElement{ longitude: "14"; latitude: "85"; height: "107"; }
+ ListElement{ longitude: "14"; latitude: "86"; height: "104"; }
+ ListElement{ longitude: "14"; latitude: "87"; height: "103"; }
+ ListElement{ longitude: "14"; latitude: "88"; height: "105"; }
+ ListElement{ longitude: "14"; latitude: "89"; height: "108"; }
+ ListElement{ longitude: "14"; latitude: "90"; height: "114"; }
+ ListElement{ longitude: "14"; latitude: "91"; height: "117"; }
+ ListElement{ longitude: "14"; latitude: "92"; height: "108"; }
+ ListElement{ longitude: "14"; latitude: "93"; height: "125"; }
+ ListElement{ longitude: "14"; latitude: "94"; height: "126"; }
+ ListElement{ longitude: "14"; latitude: "95"; height: "126"; }
+ ListElement{ longitude: "14"; latitude: "96"; height: "128"; }
+ ListElement{ longitude: "14"; latitude: "97"; height: "133"; }
+ ListElement{ longitude: "14"; latitude: "98"; height: "137"; }
+ ListElement{ longitude: "14"; latitude: "99"; height: "136"; }
+ ListElement{ longitude: "15"; latitude: "0"; height: "96"; }
+ ListElement{ longitude: "15"; latitude: "1"; height: "98"; }
+ ListElement{ longitude: "15"; latitude: "2"; height: "120"; }
+ ListElement{ longitude: "15"; latitude: "3"; height: "138"; }
+ ListElement{ longitude: "15"; latitude: "4"; height: "128"; }
+ ListElement{ longitude: "15"; latitude: "5"; height: "131"; }
+ ListElement{ longitude: "15"; latitude: "6"; height: "132"; }
+ ListElement{ longitude: "15"; latitude: "7"; height: "128"; }
+ ListElement{ longitude: "15"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "15"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "15"; latitude: "10"; height: "125"; }
+ ListElement{ longitude: "15"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "15"; latitude: "12"; height: "129"; }
+ ListElement{ longitude: "15"; latitude: "13"; height: "131"; }
+ ListElement{ longitude: "15"; latitude: "14"; height: "133"; }
+ ListElement{ longitude: "15"; latitude: "15"; height: "132"; }
+ ListElement{ longitude: "15"; latitude: "16"; height: "129"; }
+ ListElement{ longitude: "15"; latitude: "17"; height: "127"; }
+ ListElement{ longitude: "15"; latitude: "18"; height: "124"; }
+ ListElement{ longitude: "15"; latitude: "19"; height: "122"; }
+ ListElement{ longitude: "15"; latitude: "20"; height: "120"; }
+ ListElement{ longitude: "15"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "15"; latitude: "22"; height: "119"; }
+ ListElement{ longitude: "15"; latitude: "23"; height: "122"; }
+ ListElement{ longitude: "15"; latitude: "24"; height: "117"; }
+ ListElement{ longitude: "15"; latitude: "25"; height: "116"; }
+ ListElement{ longitude: "15"; latitude: "26"; height: "112"; }
+ ListElement{ longitude: "15"; latitude: "27"; height: "111"; }
+ ListElement{ longitude: "15"; latitude: "28"; height: "112"; }
+ ListElement{ longitude: "15"; latitude: "29"; height: "113"; }
+ ListElement{ longitude: "15"; latitude: "30"; height: "115"; }
+ ListElement{ longitude: "15"; latitude: "31"; height: "118"; }
+ ListElement{ longitude: "15"; latitude: "32"; height: "118"; }
+ ListElement{ longitude: "15"; latitude: "33"; height: "116"; }
+ ListElement{ longitude: "15"; latitude: "34"; height: "116"; }
+ ListElement{ longitude: "15"; latitude: "35"; height: "117"; }
+ ListElement{ longitude: "15"; latitude: "36"; height: "117"; }
+ ListElement{ longitude: "15"; latitude: "37"; height: "123"; }
+ ListElement{ longitude: "15"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "15"; latitude: "39"; height: "128"; }
+ ListElement{ longitude: "15"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "15"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "15"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "15"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "15"; latitude: "44"; height: "130"; }
+ ListElement{ longitude: "15"; latitude: "45"; height: "130"; }
+ ListElement{ longitude: "15"; latitude: "46"; height: "130"; }
+ ListElement{ longitude: "15"; latitude: "47"; height: "128"; }
+ ListElement{ longitude: "15"; latitude: "48"; height: "127"; }
+ ListElement{ longitude: "15"; latitude: "49"; height: "127"; }
+ ListElement{ longitude: "15"; latitude: "50"; height: "129"; }
+ ListElement{ longitude: "15"; latitude: "51"; height: "130"; }
+ ListElement{ longitude: "15"; latitude: "52"; height: "131"; }
+ ListElement{ longitude: "15"; latitude: "53"; height: "132"; }
+ ListElement{ longitude: "15"; latitude: "54"; height: "129"; }
+ ListElement{ longitude: "15"; latitude: "55"; height: "129"; }
+ ListElement{ longitude: "15"; latitude: "56"; height: "124"; }
+ ListElement{ longitude: "15"; latitude: "57"; height: "121"; }
+ ListElement{ longitude: "15"; latitude: "58"; height: "122"; }
+ ListElement{ longitude: "15"; latitude: "59"; height: "119"; }
+ ListElement{ longitude: "15"; latitude: "60"; height: "119"; }
+ ListElement{ longitude: "15"; latitude: "61"; height: "121"; }
+ ListElement{ longitude: "15"; latitude: "62"; height: "120"; }
+ ListElement{ longitude: "15"; latitude: "63"; height: "119"; }
+ ListElement{ longitude: "15"; latitude: "64"; height: "119"; }
+ ListElement{ longitude: "15"; latitude: "65"; height: "119"; }
+ ListElement{ longitude: "15"; latitude: "66"; height: "112"; }
+ ListElement{ longitude: "15"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "15"; latitude: "68"; height: "115"; }
+ ListElement{ longitude: "15"; latitude: "69"; height: "114"; }
+ ListElement{ longitude: "15"; latitude: "70"; height: "116"; }
+ ListElement{ longitude: "15"; latitude: "71"; height: "117"; }
+ ListElement{ longitude: "15"; latitude: "72"; height: "118"; }
+ ListElement{ longitude: "15"; latitude: "73"; height: "115"; }
+ ListElement{ longitude: "15"; latitude: "74"; height: "113"; }
+ ListElement{ longitude: "15"; latitude: "75"; height: "111"; }
+ ListElement{ longitude: "15"; latitude: "76"; height: "110"; }
+ ListElement{ longitude: "15"; latitude: "77"; height: "111"; }
+ ListElement{ longitude: "15"; latitude: "78"; height: "113"; }
+ ListElement{ longitude: "15"; latitude: "79"; height: "113"; }
+ ListElement{ longitude: "15"; latitude: "80"; height: "121"; }
+ ListElement{ longitude: "15"; latitude: "81"; height: "123"; }
+ ListElement{ longitude: "15"; latitude: "82"; height: "120"; }
+ ListElement{ longitude: "15"; latitude: "83"; height: "121"; }
+ ListElement{ longitude: "15"; latitude: "84"; height: "112"; }
+ ListElement{ longitude: "15"; latitude: "85"; height: "107"; }
+ ListElement{ longitude: "15"; latitude: "86"; height: "105"; }
+ ListElement{ longitude: "15"; latitude: "87"; height: "104"; }
+ ListElement{ longitude: "15"; latitude: "88"; height: "101"; }
+ ListElement{ longitude: "15"; latitude: "89"; height: "108"; }
+ ListElement{ longitude: "15"; latitude: "90"; height: "112"; }
+ ListElement{ longitude: "15"; latitude: "91"; height: "119"; }
+ ListElement{ longitude: "15"; latitude: "92"; height: "120"; }
+ ListElement{ longitude: "15"; latitude: "93"; height: "118"; }
+ ListElement{ longitude: "15"; latitude: "94"; height: "123"; }
+ ListElement{ longitude: "15"; latitude: "95"; height: "126"; }
+ ListElement{ longitude: "15"; latitude: "96"; height: "129"; }
+ ListElement{ longitude: "15"; latitude: "97"; height: "132"; }
+ ListElement{ longitude: "15"; latitude: "98"; height: "133"; }
+ ListElement{ longitude: "15"; latitude: "99"; height: "132"; }
+ ListElement{ longitude: "16"; latitude: "0"; height: "99"; }
+ ListElement{ longitude: "16"; latitude: "1"; height: "105"; }
+ ListElement{ longitude: "16"; latitude: "2"; height: "120"; }
+ ListElement{ longitude: "16"; latitude: "3"; height: "135"; }
+ ListElement{ longitude: "16"; latitude: "4"; height: "139"; }
+ ListElement{ longitude: "16"; latitude: "5"; height: "138"; }
+ ListElement{ longitude: "16"; latitude: "6"; height: "133"; }
+ ListElement{ longitude: "16"; latitude: "7"; height: "129"; }
+ ListElement{ longitude: "16"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "16"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "16"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "16"; latitude: "11"; height: "123"; }
+ ListElement{ longitude: "16"; latitude: "12"; height: "126"; }
+ ListElement{ longitude: "16"; latitude: "13"; height: "130"; }
+ ListElement{ longitude: "16"; latitude: "14"; height: "130"; }
+ ListElement{ longitude: "16"; latitude: "15"; height: "129"; }
+ ListElement{ longitude: "16"; latitude: "16"; height: "127"; }
+ ListElement{ longitude: "16"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "16"; latitude: "18"; height: "123"; }
+ ListElement{ longitude: "16"; latitude: "19"; height: "123"; }
+ ListElement{ longitude: "16"; latitude: "20"; height: "120"; }
+ ListElement{ longitude: "16"; latitude: "21"; height: "120"; }
+ ListElement{ longitude: "16"; latitude: "22"; height: "120"; }
+ ListElement{ longitude: "16"; latitude: "23"; height: "120"; }
+ ListElement{ longitude: "16"; latitude: "24"; height: "119"; }
+ ListElement{ longitude: "16"; latitude: "25"; height: "117"; }
+ ListElement{ longitude: "16"; latitude: "26"; height: "112"; }
+ ListElement{ longitude: "16"; latitude: "27"; height: "113"; }
+ ListElement{ longitude: "16"; latitude: "28"; height: "114"; }
+ ListElement{ longitude: "16"; latitude: "29"; height: "116"; }
+ ListElement{ longitude: "16"; latitude: "30"; height: "117"; }
+ ListElement{ longitude: "16"; latitude: "31"; height: "117"; }
+ ListElement{ longitude: "16"; latitude: "32"; height: "117"; }
+ ListElement{ longitude: "16"; latitude: "33"; height: "116"; }
+ ListElement{ longitude: "16"; latitude: "34"; height: "114"; }
+ ListElement{ longitude: "16"; latitude: "35"; height: "116"; }
+ ListElement{ longitude: "16"; latitude: "36"; height: "118"; }
+ ListElement{ longitude: "16"; latitude: "37"; height: "120"; }
+ ListElement{ longitude: "16"; latitude: "38"; height: "120"; }
+ ListElement{ longitude: "16"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "16"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "16"; latitude: "41"; height: "126"; }
+ ListElement{ longitude: "16"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "16"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "16"; latitude: "44"; height: "130"; }
+ ListElement{ longitude: "16"; latitude: "45"; height: "130"; }
+ ListElement{ longitude: "16"; latitude: "46"; height: "129"; }
+ ListElement{ longitude: "16"; latitude: "47"; height: "128"; }
+ ListElement{ longitude: "16"; latitude: "48"; height: "125"; }
+ ListElement{ longitude: "16"; latitude: "49"; height: "124"; }
+ ListElement{ longitude: "16"; latitude: "50"; height: "124"; }
+ ListElement{ longitude: "16"; latitude: "51"; height: "126"; }
+ ListElement{ longitude: "16"; latitude: "52"; height: "130"; }
+ ListElement{ longitude: "16"; latitude: "53"; height: "131"; }
+ ListElement{ longitude: "16"; latitude: "54"; height: "133"; }
+ ListElement{ longitude: "16"; latitude: "55"; height: "130"; }
+ ListElement{ longitude: "16"; latitude: "56"; height: "127"; }
+ ListElement{ longitude: "16"; latitude: "57"; height: "123"; }
+ ListElement{ longitude: "16"; latitude: "58"; height: "121"; }
+ ListElement{ longitude: "16"; latitude: "59"; height: "119"; }
+ ListElement{ longitude: "16"; latitude: "60"; height: "117"; }
+ ListElement{ longitude: "16"; latitude: "61"; height: "120"; }
+ ListElement{ longitude: "16"; latitude: "62"; height: "119"; }
+ ListElement{ longitude: "16"; latitude: "63"; height: "121"; }
+ ListElement{ longitude: "16"; latitude: "64"; height: "119"; }
+ ListElement{ longitude: "16"; latitude: "65"; height: "117"; }
+ ListElement{ longitude: "16"; latitude: "66"; height: "114"; }
+ ListElement{ longitude: "16"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "16"; latitude: "68"; height: "116"; }
+ ListElement{ longitude: "16"; latitude: "69"; height: "111"; }
+ ListElement{ longitude: "16"; latitude: "70"; height: "111"; }
+ ListElement{ longitude: "16"; latitude: "71"; height: "112"; }
+ ListElement{ longitude: "16"; latitude: "72"; height: "114"; }
+ ListElement{ longitude: "16"; latitude: "73"; height: "112"; }
+ ListElement{ longitude: "16"; latitude: "74"; height: "112"; }
+ ListElement{ longitude: "16"; latitude: "75"; height: "109"; }
+ ListElement{ longitude: "16"; latitude: "76"; height: "109"; }
+ ListElement{ longitude: "16"; latitude: "77"; height: "110"; }
+ ListElement{ longitude: "16"; latitude: "78"; height: "98"; }
+ ListElement{ longitude: "16"; latitude: "79"; height: "91"; }
+ ListElement{ longitude: "16"; latitude: "80"; height: "119"; }
+ ListElement{ longitude: "16"; latitude: "81"; height: "122"; }
+ ListElement{ longitude: "16"; latitude: "82"; height: "109"; }
+ ListElement{ longitude: "16"; latitude: "83"; height: "112"; }
+ ListElement{ longitude: "16"; latitude: "84"; height: "118"; }
+ ListElement{ longitude: "16"; latitude: "85"; height: "109"; }
+ ListElement{ longitude: "16"; latitude: "86"; height: "105"; }
+ ListElement{ longitude: "16"; latitude: "87"; height: "105"; }
+ ListElement{ longitude: "16"; latitude: "88"; height: "90"; }
+ ListElement{ longitude: "16"; latitude: "89"; height: "106"; }
+ ListElement{ longitude: "16"; latitude: "90"; height: "110"; }
+ ListElement{ longitude: "16"; latitude: "91"; height: "113"; }
+ ListElement{ longitude: "16"; latitude: "92"; height: "118"; }
+ ListElement{ longitude: "16"; latitude: "93"; height: "116"; }
+ ListElement{ longitude: "16"; latitude: "94"; height: "119"; }
+ ListElement{ longitude: "16"; latitude: "95"; height: "124"; }
+ ListElement{ longitude: "16"; latitude: "96"; height: "127"; }
+ ListElement{ longitude: "16"; latitude: "97"; height: "130"; }
+ ListElement{ longitude: "16"; latitude: "98"; height: "132"; }
+ ListElement{ longitude: "16"; latitude: "99"; height: "128"; }
+ ListElement{ longitude: "17"; latitude: "0"; height: "110"; }
+ ListElement{ longitude: "17"; latitude: "1"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "2"; height: "130"; }
+ ListElement{ longitude: "17"; latitude: "3"; height: "136"; }
+ ListElement{ longitude: "17"; latitude: "4"; height: "138"; }
+ ListElement{ longitude: "17"; latitude: "5"; height: "132"; }
+ ListElement{ longitude: "17"; latitude: "6"; height: "134"; }
+ ListElement{ longitude: "17"; latitude: "7"; height: "129"; }
+ ListElement{ longitude: "17"; latitude: "8"; height: "127"; }
+ ListElement{ longitude: "17"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "17"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "17"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "17"; latitude: "12"; height: "127"; }
+ ListElement{ longitude: "17"; latitude: "13"; height: "129"; }
+ ListElement{ longitude: "17"; latitude: "14"; height: "128"; }
+ ListElement{ longitude: "17"; latitude: "15"; height: "125"; }
+ ListElement{ longitude: "17"; latitude: "16"; height: "124"; }
+ ListElement{ longitude: "17"; latitude: "17"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "18"; height: "118"; }
+ ListElement{ longitude: "17"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "17"; latitude: "20"; height: "116"; }
+ ListElement{ longitude: "17"; latitude: "21"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "22"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "23"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "24"; height: "119"; }
+ ListElement{ longitude: "17"; latitude: "25"; height: "118"; }
+ ListElement{ longitude: "17"; latitude: "26"; height: "115"; }
+ ListElement{ longitude: "17"; latitude: "27"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "28"; height: "119"; }
+ ListElement{ longitude: "17"; latitude: "29"; height: "122"; }
+ ListElement{ longitude: "17"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "17"; latitude: "31"; height: "121"; }
+ ListElement{ longitude: "17"; latitude: "32"; height: "119"; }
+ ListElement{ longitude: "17"; latitude: "33"; height: "118"; }
+ ListElement{ longitude: "17"; latitude: "34"; height: "115"; }
+ ListElement{ longitude: "17"; latitude: "35"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "36"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "37"; height: "122"; }
+ ListElement{ longitude: "17"; latitude: "38"; height: "122"; }
+ ListElement{ longitude: "17"; latitude: "39"; height: "126"; }
+ ListElement{ longitude: "17"; latitude: "40"; height: "128"; }
+ ListElement{ longitude: "17"; latitude: "41"; height: "127"; }
+ ListElement{ longitude: "17"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "17"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "17"; latitude: "44"; height: "130"; }
+ ListElement{ longitude: "17"; latitude: "45"; height: "130"; }
+ ListElement{ longitude: "17"; latitude: "46"; height: "129"; }
+ ListElement{ longitude: "17"; latitude: "47"; height: "125"; }
+ ListElement{ longitude: "17"; latitude: "48"; height: "123"; }
+ ListElement{ longitude: "17"; latitude: "49"; height: "120"; }
+ ListElement{ longitude: "17"; latitude: "50"; height: "122"; }
+ ListElement{ longitude: "17"; latitude: "51"; height: "124"; }
+ ListElement{ longitude: "17"; latitude: "52"; height: "128"; }
+ ListElement{ longitude: "17"; latitude: "53"; height: "130"; }
+ ListElement{ longitude: "17"; latitude: "54"; height: "134"; }
+ ListElement{ longitude: "17"; latitude: "55"; height: "131"; }
+ ListElement{ longitude: "17"; latitude: "56"; height: "129"; }
+ ListElement{ longitude: "17"; latitude: "57"; height: "126"; }
+ ListElement{ longitude: "17"; latitude: "58"; height: "122"; }
+ ListElement{ longitude: "17"; latitude: "59"; height: "122"; }
+ ListElement{ longitude: "17"; latitude: "60"; height: "121"; }
+ ListElement{ longitude: "17"; latitude: "61"; height: "118"; }
+ ListElement{ longitude: "17"; latitude: "62"; height: "107"; }
+ ListElement{ longitude: "17"; latitude: "63"; height: "118"; }
+ ListElement{ longitude: "17"; latitude: "64"; height: "113"; }
+ ListElement{ longitude: "17"; latitude: "65"; height: "117"; }
+ ListElement{ longitude: "17"; latitude: "66"; height: "112"; }
+ ListElement{ longitude: "17"; latitude: "67"; height: "111"; }
+ ListElement{ longitude: "17"; latitude: "68"; height: "110"; }
+ ListElement{ longitude: "17"; latitude: "69"; height: "109"; }
+ ListElement{ longitude: "17"; latitude: "70"; height: "109"; }
+ ListElement{ longitude: "17"; latitude: "71"; height: "110"; }
+ ListElement{ longitude: "17"; latitude: "72"; height: "110"; }
+ ListElement{ longitude: "17"; latitude: "73"; height: "110"; }
+ ListElement{ longitude: "17"; latitude: "74"; height: "109"; }
+ ListElement{ longitude: "17"; latitude: "75"; height: "109"; }
+ ListElement{ longitude: "17"; latitude: "76"; height: "110"; }
+ ListElement{ longitude: "17"; latitude: "77"; height: "111"; }
+ ListElement{ longitude: "17"; latitude: "78"; height: "106"; }
+ ListElement{ longitude: "17"; latitude: "79"; height: "101"; }
+ ListElement{ longitude: "17"; latitude: "80"; height: "115"; }
+ ListElement{ longitude: "17"; latitude: "81"; height: "119"; }
+ ListElement{ longitude: "17"; latitude: "82"; height: "108"; }
+ ListElement{ longitude: "17"; latitude: "83"; height: "116"; }
+ ListElement{ longitude: "17"; latitude: "84"; height: "119"; }
+ ListElement{ longitude: "17"; latitude: "85"; height: "112"; }
+ ListElement{ longitude: "17"; latitude: "86"; height: "108"; }
+ ListElement{ longitude: "17"; latitude: "87"; height: "105"; }
+ ListElement{ longitude: "17"; latitude: "88"; height: "104"; }
+ ListElement{ longitude: "17"; latitude: "89"; height: "105"; }
+ ListElement{ longitude: "17"; latitude: "90"; height: "106"; }
+ ListElement{ longitude: "17"; latitude: "91"; height: "110"; }
+ ListElement{ longitude: "17"; latitude: "92"; height: "111"; }
+ ListElement{ longitude: "17"; latitude: "93"; height: "113"; }
+ ListElement{ longitude: "17"; latitude: "94"; height: "116"; }
+ ListElement{ longitude: "17"; latitude: "95"; height: "121"; }
+ ListElement{ longitude: "17"; latitude: "96"; height: "125"; }
+ ListElement{ longitude: "17"; latitude: "97"; height: "128"; }
+ ListElement{ longitude: "17"; latitude: "98"; height: "131"; }
+ ListElement{ longitude: "17"; latitude: "99"; height: "124"; }
+ ListElement{ longitude: "18"; latitude: "0"; height: "118"; }
+ ListElement{ longitude: "18"; latitude: "1"; height: "124"; }
+ ListElement{ longitude: "18"; latitude: "2"; height: "131"; }
+ ListElement{ longitude: "18"; latitude: "3"; height: "133"; }
+ ListElement{ longitude: "18"; latitude: "4"; height: "135"; }
+ ListElement{ longitude: "18"; latitude: "5"; height: "124"; }
+ ListElement{ longitude: "18"; latitude: "6"; height: "133"; }
+ ListElement{ longitude: "18"; latitude: "7"; height: "130"; }
+ ListElement{ longitude: "18"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "18"; latitude: "9"; height: "127"; }
+ ListElement{ longitude: "18"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "18"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "18"; latitude: "12"; height: "125"; }
+ ListElement{ longitude: "18"; latitude: "13"; height: "122"; }
+ ListElement{ longitude: "18"; latitude: "14"; height: "120"; }
+ ListElement{ longitude: "18"; latitude: "15"; height: "118"; }
+ ListElement{ longitude: "18"; latitude: "16"; height: "112"; }
+ ListElement{ longitude: "18"; latitude: "17"; height: "111"; }
+ ListElement{ longitude: "18"; latitude: "18"; height: "116"; }
+ ListElement{ longitude: "18"; latitude: "19"; height: "119"; }
+ ListElement{ longitude: "18"; latitude: "20"; height: "119"; }
+ ListElement{ longitude: "18"; latitude: "21"; height: "117"; }
+ ListElement{ longitude: "18"; latitude: "22"; height: "118"; }
+ ListElement{ longitude: "18"; latitude: "23"; height: "118"; }
+ ListElement{ longitude: "18"; latitude: "24"; height: "118"; }
+ ListElement{ longitude: "18"; latitude: "25"; height: "116"; }
+ ListElement{ longitude: "18"; latitude: "26"; height: "116"; }
+ ListElement{ longitude: "18"; latitude: "27"; height: "118"; }
+ ListElement{ longitude: "18"; latitude: "28"; height: "120"; }
+ ListElement{ longitude: "18"; latitude: "29"; height: "122"; }
+ ListElement{ longitude: "18"; latitude: "30"; height: "125"; }
+ ListElement{ longitude: "18"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "18"; latitude: "32"; height: "123"; }
+ ListElement{ longitude: "18"; latitude: "33"; height: "123"; }
+ ListElement{ longitude: "18"; latitude: "34"; height: "122"; }
+ ListElement{ longitude: "18"; latitude: "35"; height: "120"; }
+ ListElement{ longitude: "18"; latitude: "36"; height: "121"; }
+ ListElement{ longitude: "18"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "18"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "18"; latitude: "39"; height: "128"; }
+ ListElement{ longitude: "18"; latitude: "40"; height: "129"; }
+ ListElement{ longitude: "18"; latitude: "41"; height: "129"; }
+ ListElement{ longitude: "18"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "18"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "18"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "18"; latitude: "45"; height: "129"; }
+ ListElement{ longitude: "18"; latitude: "46"; height: "128"; }
+ ListElement{ longitude: "18"; latitude: "47"; height: "126"; }
+ ListElement{ longitude: "18"; latitude: "48"; height: "124"; }
+ ListElement{ longitude: "18"; latitude: "49"; height: "121"; }
+ ListElement{ longitude: "18"; latitude: "50"; height: "119"; }
+ ListElement{ longitude: "18"; latitude: "51"; height: "122"; }
+ ListElement{ longitude: "18"; latitude: "52"; height: "126"; }
+ ListElement{ longitude: "18"; latitude: "53"; height: "129"; }
+ ListElement{ longitude: "18"; latitude: "54"; height: "131"; }
+ ListElement{ longitude: "18"; latitude: "55"; height: "131"; }
+ ListElement{ longitude: "18"; latitude: "56"; height: "130"; }
+ ListElement{ longitude: "18"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "18"; latitude: "58"; height: "123"; }
+ ListElement{ longitude: "18"; latitude: "59"; height: "122"; }
+ ListElement{ longitude: "18"; latitude: "60"; height: "122"; }
+ ListElement{ longitude: "18"; latitude: "61"; height: "124"; }
+ ListElement{ longitude: "18"; latitude: "62"; height: "119"; }
+ ListElement{ longitude: "18"; latitude: "63"; height: "119"; }
+ ListElement{ longitude: "18"; latitude: "64"; height: "111"; }
+ ListElement{ longitude: "18"; latitude: "65"; height: "111"; }
+ ListElement{ longitude: "18"; latitude: "66"; height: "114"; }
+ ListElement{ longitude: "18"; latitude: "67"; height: "107"; }
+ ListElement{ longitude: "18"; latitude: "68"; height: "108"; }
+ ListElement{ longitude: "18"; latitude: "69"; height: "109"; }
+ ListElement{ longitude: "18"; latitude: "70"; height: "108"; }
+ ListElement{ longitude: "18"; latitude: "71"; height: "109"; }
+ ListElement{ longitude: "18"; latitude: "72"; height: "111"; }
+ ListElement{ longitude: "18"; latitude: "73"; height: "110"; }
+ ListElement{ longitude: "18"; latitude: "74"; height: "111"; }
+ ListElement{ longitude: "18"; latitude: "75"; height: "109"; }
+ ListElement{ longitude: "18"; latitude: "76"; height: "109"; }
+ ListElement{ longitude: "18"; latitude: "77"; height: "110"; }
+ ListElement{ longitude: "18"; latitude: "78"; height: "110"; }
+ ListElement{ longitude: "18"; latitude: "79"; height: "91"; }
+ ListElement{ longitude: "18"; latitude: "80"; height: "106"; }
+ ListElement{ longitude: "18"; latitude: "81"; height: "115"; }
+ ListElement{ longitude: "18"; latitude: "82"; height: "120"; }
+ ListElement{ longitude: "18"; latitude: "83"; height: "123"; }
+ ListElement{ longitude: "18"; latitude: "84"; height: "117"; }
+ ListElement{ longitude: "18"; latitude: "85"; height: "110"; }
+ ListElement{ longitude: "18"; latitude: "86"; height: "104"; }
+ ListElement{ longitude: "18"; latitude: "87"; height: "101"; }
+ ListElement{ longitude: "18"; latitude: "88"; height: "102"; }
+ ListElement{ longitude: "18"; latitude: "89"; height: "103"; }
+ ListElement{ longitude: "18"; latitude: "90"; height: "104"; }
+ ListElement{ longitude: "18"; latitude: "91"; height: "107"; }
+ ListElement{ longitude: "18"; latitude: "92"; height: "109"; }
+ ListElement{ longitude: "18"; latitude: "93"; height: "109"; }
+ ListElement{ longitude: "18"; latitude: "94"; height: "113"; }
+ ListElement{ longitude: "18"; latitude: "95"; height: "119"; }
+ ListElement{ longitude: "18"; latitude: "96"; height: "122"; }
+ ListElement{ longitude: "18"; latitude: "97"; height: "123"; }
+ ListElement{ longitude: "18"; latitude: "98"; height: "130"; }
+ ListElement{ longitude: "18"; latitude: "99"; height: "118"; }
+ ListElement{ longitude: "19"; latitude: "0"; height: "118"; }
+ ListElement{ longitude: "19"; latitude: "1"; height: "120"; }
+ ListElement{ longitude: "19"; latitude: "2"; height: "125"; }
+ ListElement{ longitude: "19"; latitude: "3"; height: "128"; }
+ ListElement{ longitude: "19"; latitude: "4"; height: "134"; }
+ ListElement{ longitude: "19"; latitude: "5"; height: "134"; }
+ ListElement{ longitude: "19"; latitude: "6"; height: "131"; }
+ ListElement{ longitude: "19"; latitude: "7"; height: "128"; }
+ ListElement{ longitude: "19"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "19"; latitude: "9"; height: "124"; }
+ ListElement{ longitude: "19"; latitude: "10"; height: "123"; }
+ ListElement{ longitude: "19"; latitude: "11"; height: "120"; }
+ ListElement{ longitude: "19"; latitude: "12"; height: "121"; }
+ ListElement{ longitude: "19"; latitude: "13"; height: "118"; }
+ ListElement{ longitude: "19"; latitude: "14"; height: "118"; }
+ ListElement{ longitude: "19"; latitude: "15"; height: "113"; }
+ ListElement{ longitude: "19"; latitude: "16"; height: "111"; }
+ ListElement{ longitude: "19"; latitude: "17"; height: "113"; }
+ ListElement{ longitude: "19"; latitude: "18"; height: "115"; }
+ ListElement{ longitude: "19"; latitude: "19"; height: "119"; }
+ ListElement{ longitude: "19"; latitude: "20"; height: "120"; }
+ ListElement{ longitude: "19"; latitude: "21"; height: "119"; }
+ ListElement{ longitude: "19"; latitude: "22"; height: "117"; }
+ ListElement{ longitude: "19"; latitude: "23"; height: "116"; }
+ ListElement{ longitude: "19"; latitude: "24"; height: "116"; }
+ ListElement{ longitude: "19"; latitude: "25"; height: "116"; }
+ ListElement{ longitude: "19"; latitude: "26"; height: "116"; }
+ ListElement{ longitude: "19"; latitude: "27"; height: "117"; }
+ ListElement{ longitude: "19"; latitude: "28"; height: "118"; }
+ ListElement{ longitude: "19"; latitude: "29"; height: "121"; }
+ ListElement{ longitude: "19"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "19"; latitude: "31"; height: "124"; }
+ ListElement{ longitude: "19"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "19"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "19"; latitude: "34"; height: "124"; }
+ ListElement{ longitude: "19"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "19"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "19"; latitude: "37"; height: "128"; }
+ ListElement{ longitude: "19"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "19"; latitude: "39"; height: "130"; }
+ ListElement{ longitude: "19"; latitude: "40"; height: "129"; }
+ ListElement{ longitude: "19"; latitude: "41"; height: "129"; }
+ ListElement{ longitude: "19"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "19"; latitude: "43"; height: "129"; }
+ ListElement{ longitude: "19"; latitude: "44"; height: "129"; }
+ ListElement{ longitude: "19"; latitude: "45"; height: "128"; }
+ ListElement{ longitude: "19"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "19"; latitude: "47"; height: "124"; }
+ ListElement{ longitude: "19"; latitude: "48"; height: "122"; }
+ ListElement{ longitude: "19"; latitude: "49"; height: "121"; }
+ ListElement{ longitude: "19"; latitude: "50"; height: "120"; }
+ ListElement{ longitude: "19"; latitude: "51"; height: "121"; }
+ ListElement{ longitude: "19"; latitude: "52"; height: "123"; }
+ ListElement{ longitude: "19"; latitude: "53"; height: "127"; }
+ ListElement{ longitude: "19"; latitude: "54"; height: "129"; }
+ ListElement{ longitude: "19"; latitude: "55"; height: "131"; }
+ ListElement{ longitude: "19"; latitude: "56"; height: "128"; }
+ ListElement{ longitude: "19"; latitude: "57"; height: "122"; }
+ ListElement{ longitude: "19"; latitude: "58"; height: "118"; }
+ ListElement{ longitude: "19"; latitude: "59"; height: "121"; }
+ ListElement{ longitude: "19"; latitude: "60"; height: "122"; }
+ ListElement{ longitude: "19"; latitude: "61"; height: "120"; }
+ ListElement{ longitude: "19"; latitude: "62"; height: "113"; }
+ ListElement{ longitude: "19"; latitude: "63"; height: "119"; }
+ ListElement{ longitude: "19"; latitude: "64"; height: "108"; }
+ ListElement{ longitude: "19"; latitude: "65"; height: "105"; }
+ ListElement{ longitude: "19"; latitude: "66"; height: "109"; }
+ ListElement{ longitude: "19"; latitude: "67"; height: "108"; }
+ ListElement{ longitude: "19"; latitude: "68"; height: "105"; }
+ ListElement{ longitude: "19"; latitude: "69"; height: "107"; }
+ ListElement{ longitude: "19"; latitude: "70"; height: "107"; }
+ ListElement{ longitude: "19"; latitude: "71"; height: "110"; }
+ ListElement{ longitude: "19"; latitude: "72"; height: "112"; }
+ ListElement{ longitude: "19"; latitude: "73"; height: "112"; }
+ ListElement{ longitude: "19"; latitude: "74"; height: "110"; }
+ ListElement{ longitude: "19"; latitude: "75"; height: "111"; }
+ ListElement{ longitude: "19"; latitude: "76"; height: "111"; }
+ ListElement{ longitude: "19"; latitude: "77"; height: "111"; }
+ ListElement{ longitude: "19"; latitude: "78"; height: "111"; }
+ ListElement{ longitude: "19"; latitude: "79"; height: "110"; }
+ ListElement{ longitude: "19"; latitude: "80"; height: "109"; }
+ ListElement{ longitude: "19"; latitude: "81"; height: "110"; }
+ ListElement{ longitude: "19"; latitude: "82"; height: "113"; }
+ ListElement{ longitude: "19"; latitude: "83"; height: "116"; }
+ ListElement{ longitude: "19"; latitude: "84"; height: "116"; }
+ ListElement{ longitude: "19"; latitude: "85"; height: "112"; }
+ ListElement{ longitude: "19"; latitude: "86"; height: "105"; }
+ ListElement{ longitude: "19"; latitude: "87"; height: "102"; }
+ ListElement{ longitude: "19"; latitude: "88"; height: "101"; }
+ ListElement{ longitude: "19"; latitude: "89"; height: "102"; }
+ ListElement{ longitude: "19"; latitude: "90"; height: "105"; }
+ ListElement{ longitude: "19"; latitude: "91"; height: "99"; }
+ ListElement{ longitude: "19"; latitude: "92"; height: "103"; }
+ ListElement{ longitude: "19"; latitude: "93"; height: "104"; }
+ ListElement{ longitude: "19"; latitude: "94"; height: "110"; }
+ ListElement{ longitude: "19"; latitude: "95"; height: "114"; }
+ ListElement{ longitude: "19"; latitude: "96"; height: "120"; }
+ ListElement{ longitude: "19"; latitude: "97"; height: "123"; }
+ ListElement{ longitude: "19"; latitude: "98"; height: "127"; }
+ ListElement{ longitude: "19"; latitude: "99"; height: "114"; }
+ ListElement{ longitude: "20"; latitude: "0"; height: "117"; }
+ ListElement{ longitude: "20"; latitude: "1"; height: "120"; }
+ ListElement{ longitude: "20"; latitude: "2"; height: "121"; }
+ ListElement{ longitude: "20"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "20"; latitude: "4"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "5"; height: "127"; }
+ ListElement{ longitude: "20"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "20"; latitude: "7"; height: "123"; }
+ ListElement{ longitude: "20"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "10"; height: "123"; }
+ ListElement{ longitude: "20"; latitude: "11"; height: "122"; }
+ ListElement{ longitude: "20"; latitude: "12"; height: "123"; }
+ ListElement{ longitude: "20"; latitude: "13"; height: "122"; }
+ ListElement{ longitude: "20"; latitude: "14"; height: "120"; }
+ ListElement{ longitude: "20"; latitude: "15"; height: "114"; }
+ ListElement{ longitude: "20"; latitude: "16"; height: "112"; }
+ ListElement{ longitude: "20"; latitude: "17"; height: "113"; }
+ ListElement{ longitude: "20"; latitude: "18"; height: "118"; }
+ ListElement{ longitude: "20"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "20"; latitude: "20"; height: "120"; }
+ ListElement{ longitude: "20"; latitude: "21"; height: "118"; }
+ ListElement{ longitude: "20"; latitude: "22"; height: "119"; }
+ ListElement{ longitude: "20"; latitude: "23"; height: "118"; }
+ ListElement{ longitude: "20"; latitude: "24"; height: "116"; }
+ ListElement{ longitude: "20"; latitude: "25"; height: "117"; }
+ ListElement{ longitude: "20"; latitude: "26"; height: "116"; }
+ ListElement{ longitude: "20"; latitude: "27"; height: "118"; }
+ ListElement{ longitude: "20"; latitude: "28"; height: "118"; }
+ ListElement{ longitude: "20"; latitude: "29"; height: "121"; }
+ ListElement{ longitude: "20"; latitude: "30"; height: "119"; }
+ ListElement{ longitude: "20"; latitude: "31"; height: "121"; }
+ ListElement{ longitude: "20"; latitude: "32"; height: "124"; }
+ ListElement{ longitude: "20"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "20"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "20"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "20"; latitude: "39"; height: "128"; }
+ ListElement{ longitude: "20"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "20"; latitude: "41"; height: "129"; }
+ ListElement{ longitude: "20"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "20"; latitude: "43"; height: "129"; }
+ ListElement{ longitude: "20"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "20"; latitude: "45"; height: "126"; }
+ ListElement{ longitude: "20"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "20"; latitude: "47"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "48"; height: "122"; }
+ ListElement{ longitude: "20"; latitude: "49"; height: "121"; }
+ ListElement{ longitude: "20"; latitude: "50"; height: "120"; }
+ ListElement{ longitude: "20"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "20"; latitude: "52"; height: "121"; }
+ ListElement{ longitude: "20"; latitude: "53"; height: "123"; }
+ ListElement{ longitude: "20"; latitude: "54"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "55"; height: "129"; }
+ ListElement{ longitude: "20"; latitude: "56"; height: "124"; }
+ ListElement{ longitude: "20"; latitude: "57"; height: "111"; }
+ ListElement{ longitude: "20"; latitude: "58"; height: "108"; }
+ ListElement{ longitude: "20"; latitude: "59"; height: "118"; }
+ ListElement{ longitude: "20"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "61"; height: "124"; }
+ ListElement{ longitude: "20"; latitude: "62"; height: "121"; }
+ ListElement{ longitude: "20"; latitude: "63"; height: "125"; }
+ ListElement{ longitude: "20"; latitude: "64"; height: "122"; }
+ ListElement{ longitude: "20"; latitude: "65"; height: "116"; }
+ ListElement{ longitude: "20"; latitude: "66"; height: "110"; }
+ ListElement{ longitude: "20"; latitude: "67"; height: "108"; }
+ ListElement{ longitude: "20"; latitude: "68"; height: "105"; }
+ ListElement{ longitude: "20"; latitude: "69"; height: "107"; }
+ ListElement{ longitude: "20"; latitude: "70"; height: "106"; }
+ ListElement{ longitude: "20"; latitude: "71"; height: "109"; }
+ ListElement{ longitude: "20"; latitude: "72"; height: "112"; }
+ ListElement{ longitude: "20"; latitude: "73"; height: "112"; }
+ ListElement{ longitude: "20"; latitude: "74"; height: "112"; }
+ ListElement{ longitude: "20"; latitude: "75"; height: "110"; }
+ ListElement{ longitude: "20"; latitude: "76"; height: "111"; }
+ ListElement{ longitude: "20"; latitude: "77"; height: "111"; }
+ ListElement{ longitude: "20"; latitude: "78"; height: "110"; }
+ ListElement{ longitude: "20"; latitude: "79"; height: "107"; }
+ ListElement{ longitude: "20"; latitude: "80"; height: "107"; }
+ ListElement{ longitude: "20"; latitude: "81"; height: "109"; }
+ ListElement{ longitude: "20"; latitude: "82"; height: "113"; }
+ ListElement{ longitude: "20"; latitude: "83"; height: "116"; }
+ ListElement{ longitude: "20"; latitude: "84"; height: "109"; }
+ ListElement{ longitude: "20"; latitude: "85"; height: "102"; }
+ ListElement{ longitude: "20"; latitude: "86"; height: "107"; }
+ ListElement{ longitude: "20"; latitude: "87"; height: "103"; }
+ ListElement{ longitude: "20"; latitude: "88"; height: "102"; }
+ ListElement{ longitude: "20"; latitude: "89"; height: "102"; }
+ ListElement{ longitude: "20"; latitude: "90"; height: "104"; }
+ ListElement{ longitude: "20"; latitude: "91"; height: "101"; }
+ ListElement{ longitude: "20"; latitude: "92"; height: "110"; }
+ ListElement{ longitude: "20"; latitude: "93"; height: "110"; }
+ ListElement{ longitude: "20"; latitude: "94"; height: "111"; }
+ ListElement{ longitude: "20"; latitude: "95"; height: "111"; }
+ ListElement{ longitude: "20"; latitude: "96"; height: "117"; }
+ ListElement{ longitude: "20"; latitude: "97"; height: "121"; }
+ ListElement{ longitude: "20"; latitude: "98"; height: "122"; }
+ ListElement{ longitude: "20"; latitude: "99"; height: "112"; }
+ ListElement{ longitude: "21"; latitude: "0"; height: "116"; }
+ ListElement{ longitude: "21"; latitude: "1"; height: "118"; }
+ ListElement{ longitude: "21"; latitude: "2"; height: "119"; }
+ ListElement{ longitude: "21"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "21"; latitude: "4"; height: "121"; }
+ ListElement{ longitude: "21"; latitude: "5"; height: "123"; }
+ ListElement{ longitude: "21"; latitude: "6"; height: "119"; }
+ ListElement{ longitude: "21"; latitude: "7"; height: "119"; }
+ ListElement{ longitude: "21"; latitude: "8"; height: "122"; }
+ ListElement{ longitude: "21"; latitude: "9"; height: "123"; }
+ ListElement{ longitude: "21"; latitude: "10"; height: "125"; }
+ ListElement{ longitude: "21"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "21"; latitude: "12"; height: "124"; }
+ ListElement{ longitude: "21"; latitude: "13"; height: "122"; }
+ ListElement{ longitude: "21"; latitude: "14"; height: "124"; }
+ ListElement{ longitude: "21"; latitude: "15"; height: "120"; }
+ ListElement{ longitude: "21"; latitude: "16"; height: "119"; }
+ ListElement{ longitude: "21"; latitude: "17"; height: "118"; }
+ ListElement{ longitude: "21"; latitude: "18"; height: "119"; }
+ ListElement{ longitude: "21"; latitude: "19"; height: "121"; }
+ ListElement{ longitude: "21"; latitude: "20"; height: "121"; }
+ ListElement{ longitude: "21"; latitude: "21"; height: "119"; }
+ ListElement{ longitude: "21"; latitude: "22"; height: "120"; }
+ ListElement{ longitude: "21"; latitude: "23"; height: "117"; }
+ ListElement{ longitude: "21"; latitude: "24"; height: "116"; }
+ ListElement{ longitude: "21"; latitude: "25"; height: "116"; }
+ ListElement{ longitude: "21"; latitude: "26"; height: "116"; }
+ ListElement{ longitude: "21"; latitude: "27"; height: "115"; }
+ ListElement{ longitude: "21"; latitude: "28"; height: "121"; }
+ ListElement{ longitude: "21"; latitude: "29"; height: "120"; }
+ ListElement{ longitude: "21"; latitude: "30"; height: "119"; }
+ ListElement{ longitude: "21"; latitude: "31"; height: "119"; }
+ ListElement{ longitude: "21"; latitude: "32"; height: "121"; }
+ ListElement{ longitude: "21"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "21"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "21"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "21"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "21"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "21"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "21"; latitude: "39"; height: "128"; }
+ ListElement{ longitude: "21"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "21"; latitude: "41"; height: "127"; }
+ ListElement{ longitude: "21"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "21"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "21"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "21"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "21"; latitude: "46"; height: "126"; }
+ ListElement{ longitude: "21"; latitude: "47"; height: "124"; }
+ ListElement{ longitude: "21"; latitude: "48"; height: "124"; }
+ ListElement{ longitude: "21"; latitude: "49"; height: "121"; }
+ ListElement{ longitude: "21"; latitude: "50"; height: "120"; }
+ ListElement{ longitude: "21"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "21"; latitude: "52"; height: "122"; }
+ ListElement{ longitude: "21"; latitude: "53"; height: "121"; }
+ ListElement{ longitude: "21"; latitude: "54"; height: "122"; }
+ ListElement{ longitude: "21"; latitude: "55"; height: "127"; }
+ ListElement{ longitude: "21"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "21"; latitude: "57"; height: "114"; }
+ ListElement{ longitude: "21"; latitude: "58"; height: "111"; }
+ ListElement{ longitude: "21"; latitude: "59"; height: "120"; }
+ ListElement{ longitude: "21"; latitude: "60"; height: "127"; }
+ ListElement{ longitude: "21"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "21"; latitude: "62"; height: "125"; }
+ ListElement{ longitude: "21"; latitude: "63"; height: "123"; }
+ ListElement{ longitude: "21"; latitude: "64"; height: "118"; }
+ ListElement{ longitude: "21"; latitude: "65"; height: "113"; }
+ ListElement{ longitude: "21"; latitude: "66"; height: "112"; }
+ ListElement{ longitude: "21"; latitude: "67"; height: "109"; }
+ ListElement{ longitude: "21"; latitude: "68"; height: "108"; }
+ ListElement{ longitude: "21"; latitude: "69"; height: "109"; }
+ ListElement{ longitude: "21"; latitude: "70"; height: "110"; }
+ ListElement{ longitude: "21"; latitude: "71"; height: "110"; }
+ ListElement{ longitude: "21"; latitude: "72"; height: "110"; }
+ ListElement{ longitude: "21"; latitude: "73"; height: "110"; }
+ ListElement{ longitude: "21"; latitude: "74"; height: "112"; }
+ ListElement{ longitude: "21"; latitude: "75"; height: "112"; }
+ ListElement{ longitude: "21"; latitude: "76"; height: "111"; }
+ ListElement{ longitude: "21"; latitude: "77"; height: "110"; }
+ ListElement{ longitude: "21"; latitude: "78"; height: "109"; }
+ ListElement{ longitude: "21"; latitude: "79"; height: "106"; }
+ ListElement{ longitude: "21"; latitude: "80"; height: "106"; }
+ ListElement{ longitude: "21"; latitude: "81"; height: "107"; }
+ ListElement{ longitude: "21"; latitude: "82"; height: "110"; }
+ ListElement{ longitude: "21"; latitude: "83"; height: "118"; }
+ ListElement{ longitude: "21"; latitude: "84"; height: "109"; }
+ ListElement{ longitude: "21"; latitude: "85"; height: "107"; }
+ ListElement{ longitude: "21"; latitude: "86"; height: "113"; }
+ ListElement{ longitude: "21"; latitude: "87"; height: "103"; }
+ ListElement{ longitude: "21"; latitude: "88"; height: "103"; }
+ ListElement{ longitude: "21"; latitude: "89"; height: "105"; }
+ ListElement{ longitude: "21"; latitude: "90"; height: "104"; }
+ ListElement{ longitude: "21"; latitude: "91"; height: "102"; }
+ ListElement{ longitude: "21"; latitude: "92"; height: "102"; }
+ ListElement{ longitude: "21"; latitude: "93"; height: "104"; }
+ ListElement{ longitude: "21"; latitude: "94"; height: "105"; }
+ ListElement{ longitude: "21"; latitude: "95"; height: "113"; }
+ ListElement{ longitude: "21"; latitude: "96"; height: "117"; }
+ ListElement{ longitude: "21"; latitude: "97"; height: "122"; }
+ ListElement{ longitude: "21"; latitude: "98"; height: "123"; }
+ ListElement{ longitude: "21"; latitude: "99"; height: "114"; }
+ ListElement{ longitude: "22"; latitude: "0"; height: "119"; }
+ ListElement{ longitude: "22"; latitude: "1"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "2"; height: "119"; }
+ ListElement{ longitude: "22"; latitude: "3"; height: "119"; }
+ ListElement{ longitude: "22"; latitude: "4"; height: "119"; }
+ ListElement{ longitude: "22"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "22"; latitude: "6"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "7"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "8"; height: "121"; }
+ ListElement{ longitude: "22"; latitude: "9"; height: "124"; }
+ ListElement{ longitude: "22"; latitude: "10"; height: "125"; }
+ ListElement{ longitude: "22"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "22"; latitude: "12"; height: "127"; }
+ ListElement{ longitude: "22"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "22"; latitude: "14"; height: "123"; }
+ ListElement{ longitude: "22"; latitude: "15"; height: "124"; }
+ ListElement{ longitude: "22"; latitude: "16"; height: "122"; }
+ ListElement{ longitude: "22"; latitude: "17"; height: "122"; }
+ ListElement{ longitude: "22"; latitude: "18"; height: "124"; }
+ ListElement{ longitude: "22"; latitude: "19"; height: "123"; }
+ ListElement{ longitude: "22"; latitude: "20"; height: "124"; }
+ ListElement{ longitude: "22"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "22"; latitude: "22"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "23"; height: "116"; }
+ ListElement{ longitude: "22"; latitude: "24"; height: "118"; }
+ ListElement{ longitude: "22"; latitude: "25"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "26"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "27"; height: "119"; }
+ ListElement{ longitude: "22"; latitude: "28"; height: "117"; }
+ ListElement{ longitude: "22"; latitude: "29"; height: "117"; }
+ ListElement{ longitude: "22"; latitude: "30"; height: "118"; }
+ ListElement{ longitude: "22"; latitude: "31"; height: "121"; }
+ ListElement{ longitude: "22"; latitude: "32"; height: "122"; }
+ ListElement{ longitude: "22"; latitude: "33"; height: "121"; }
+ ListElement{ longitude: "22"; latitude: "34"; height: "124"; }
+ ListElement{ longitude: "22"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "22"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "22"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "22"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "22"; latitude: "39"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "40"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "22"; latitude: "46"; height: "125"; }
+ ListElement{ longitude: "22"; latitude: "47"; height: "126"; }
+ ListElement{ longitude: "22"; latitude: "48"; height: "125"; }
+ ListElement{ longitude: "22"; latitude: "49"; height: "124"; }
+ ListElement{ longitude: "22"; latitude: "50"; height: "121"; }
+ ListElement{ longitude: "22"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "52"; height: "119"; }
+ ListElement{ longitude: "22"; latitude: "53"; height: "119"; }
+ ListElement{ longitude: "22"; latitude: "54"; height: "122"; }
+ ListElement{ longitude: "22"; latitude: "55"; height: "123"; }
+ ListElement{ longitude: "22"; latitude: "56"; height: "126"; }
+ ListElement{ longitude: "22"; latitude: "57"; height: "123"; }
+ ListElement{ longitude: "22"; latitude: "58"; height: "123"; }
+ ListElement{ longitude: "22"; latitude: "59"; height: "127"; }
+ ListElement{ longitude: "22"; latitude: "60"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "61"; height: "129"; }
+ ListElement{ longitude: "22"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "63"; height: "123"; }
+ ListElement{ longitude: "22"; latitude: "64"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "65"; height: "118"; }
+ ListElement{ longitude: "22"; latitude: "66"; height: "116"; }
+ ListElement{ longitude: "22"; latitude: "67"; height: "115"; }
+ ListElement{ longitude: "22"; latitude: "68"; height: "116"; }
+ ListElement{ longitude: "22"; latitude: "69"; height: "114"; }
+ ListElement{ longitude: "22"; latitude: "70"; height: "113"; }
+ ListElement{ longitude: "22"; latitude: "71"; height: "112"; }
+ ListElement{ longitude: "22"; latitude: "72"; height: "113"; }
+ ListElement{ longitude: "22"; latitude: "73"; height: "113"; }
+ ListElement{ longitude: "22"; latitude: "74"; height: "112"; }
+ ListElement{ longitude: "22"; latitude: "75"; height: "110"; }
+ ListElement{ longitude: "22"; latitude: "76"; height: "110"; }
+ ListElement{ longitude: "22"; latitude: "77"; height: "107"; }
+ ListElement{ longitude: "22"; latitude: "78"; height: "105"; }
+ ListElement{ longitude: "22"; latitude: "79"; height: "102"; }
+ ListElement{ longitude: "22"; latitude: "80"; height: "104"; }
+ ListElement{ longitude: "22"; latitude: "81"; height: "108"; }
+ ListElement{ longitude: "22"; latitude: "82"; height: "110"; }
+ ListElement{ longitude: "22"; latitude: "83"; height: "114"; }
+ ListElement{ longitude: "22"; latitude: "84"; height: "118"; }
+ ListElement{ longitude: "22"; latitude: "85"; height: "117"; }
+ ListElement{ longitude: "22"; latitude: "86"; height: "111"; }
+ ListElement{ longitude: "22"; latitude: "87"; height: "107"; }
+ ListElement{ longitude: "22"; latitude: "88"; height: "107"; }
+ ListElement{ longitude: "22"; latitude: "89"; height: "107"; }
+ ListElement{ longitude: "22"; latitude: "90"; height: "103"; }
+ ListElement{ longitude: "22"; latitude: "91"; height: "102"; }
+ ListElement{ longitude: "22"; latitude: "92"; height: "101"; }
+ ListElement{ longitude: "22"; latitude: "93"; height: "108"; }
+ ListElement{ longitude: "22"; latitude: "94"; height: "115"; }
+ ListElement{ longitude: "22"; latitude: "95"; height: "117"; }
+ ListElement{ longitude: "22"; latitude: "96"; height: "120"; }
+ ListElement{ longitude: "22"; latitude: "97"; height: "125"; }
+ ListElement{ longitude: "22"; latitude: "98"; height: "128"; }
+ ListElement{ longitude: "22"; latitude: "99"; height: "118"; }
+ ListElement{ longitude: "23"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "23"; latitude: "1"; height: "123"; }
+ ListElement{ longitude: "23"; latitude: "2"; height: "120"; }
+ ListElement{ longitude: "23"; latitude: "3"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "4"; height: "119"; }
+ ListElement{ longitude: "23"; latitude: "5"; height: "119"; }
+ ListElement{ longitude: "23"; latitude: "6"; height: "120"; }
+ ListElement{ longitude: "23"; latitude: "7"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "8"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "9"; height: "124"; }
+ ListElement{ longitude: "23"; latitude: "10"; height: "124"; }
+ ListElement{ longitude: "23"; latitude: "11"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "12"; height: "124"; }
+ ListElement{ longitude: "23"; latitude: "13"; height: "124"; }
+ ListElement{ longitude: "23"; latitude: "14"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "15"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "16"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "17"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "18"; height: "123"; }
+ ListElement{ longitude: "23"; latitude: "19"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "20"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "21"; height: "120"; }
+ ListElement{ longitude: "23"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "23"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "24"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "25"; height: "120"; }
+ ListElement{ longitude: "23"; latitude: "26"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "27"; height: "120"; }
+ ListElement{ longitude: "23"; latitude: "28"; height: "116"; }
+ ListElement{ longitude: "23"; latitude: "29"; height: "116"; }
+ ListElement{ longitude: "23"; latitude: "30"; height: "118"; }
+ ListElement{ longitude: "23"; latitude: "31"; height: "119"; }
+ ListElement{ longitude: "23"; latitude: "32"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "33"; height: "119"; }
+ ListElement{ longitude: "23"; latitude: "34"; height: "123"; }
+ ListElement{ longitude: "23"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "23"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "23"; latitude: "37"; height: "128"; }
+ ListElement{ longitude: "23"; latitude: "38"; height: "127"; }
+ ListElement{ longitude: "23"; latitude: "39"; height: "127"; }
+ ListElement{ longitude: "23"; latitude: "40"; height: "126"; }
+ ListElement{ longitude: "23"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "23"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "23"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "23"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "23"; latitude: "45"; height: "128"; }
+ ListElement{ longitude: "23"; latitude: "46"; height: "126"; }
+ ListElement{ longitude: "23"; latitude: "47"; height: "127"; }
+ ListElement{ longitude: "23"; latitude: "48"; height: "124"; }
+ ListElement{ longitude: "23"; latitude: "49"; height: "124"; }
+ ListElement{ longitude: "23"; latitude: "50"; height: "123"; }
+ ListElement{ longitude: "23"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "23"; latitude: "52"; height: "119"; }
+ ListElement{ longitude: "23"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "23"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "23"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "23"; latitude: "56"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "57"; height: "125"; }
+ ListElement{ longitude: "23"; latitude: "58"; height: "127"; }
+ ListElement{ longitude: "23"; latitude: "59"; height: "128"; }
+ ListElement{ longitude: "23"; latitude: "60"; height: "130"; }
+ ListElement{ longitude: "23"; latitude: "61"; height: "133"; }
+ ListElement{ longitude: "23"; latitude: "62"; height: "130"; }
+ ListElement{ longitude: "23"; latitude: "63"; height: "128"; }
+ ListElement{ longitude: "23"; latitude: "64"; height: "123"; }
+ ListElement{ longitude: "23"; latitude: "65"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "66"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "67"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "68"; height: "122"; }
+ ListElement{ longitude: "23"; latitude: "69"; height: "121"; }
+ ListElement{ longitude: "23"; latitude: "70"; height: "119"; }
+ ListElement{ longitude: "23"; latitude: "71"; height: "115"; }
+ ListElement{ longitude: "23"; latitude: "72"; height: "114"; }
+ ListElement{ longitude: "23"; latitude: "73"; height: "112"; }
+ ListElement{ longitude: "23"; latitude: "74"; height: "111"; }
+ ListElement{ longitude: "23"; latitude: "75"; height: "111"; }
+ ListElement{ longitude: "23"; latitude: "76"; height: "108"; }
+ ListElement{ longitude: "23"; latitude: "77"; height: "107"; }
+ ListElement{ longitude: "23"; latitude: "78"; height: "103"; }
+ ListElement{ longitude: "23"; latitude: "79"; height: "102"; }
+ ListElement{ longitude: "23"; latitude: "80"; height: "101"; }
+ ListElement{ longitude: "23"; latitude: "81"; height: "106"; }
+ ListElement{ longitude: "23"; latitude: "82"; height: "113"; }
+ ListElement{ longitude: "23"; latitude: "83"; height: "112"; }
+ ListElement{ longitude: "23"; latitude: "84"; height: "115"; }
+ ListElement{ longitude: "23"; latitude: "85"; height: "111"; }
+ ListElement{ longitude: "23"; latitude: "86"; height: "111"; }
+ ListElement{ longitude: "23"; latitude: "87"; height: "109"; }
+ ListElement{ longitude: "23"; latitude: "88"; height: "108"; }
+ ListElement{ longitude: "23"; latitude: "89"; height: "108"; }
+ ListElement{ longitude: "23"; latitude: "90"; height: "106"; }
+ ListElement{ longitude: "23"; latitude: "91"; height: "103"; }
+ ListElement{ longitude: "23"; latitude: "92"; height: "102"; }
+ ListElement{ longitude: "23"; latitude: "93"; height: "108"; }
+ ListElement{ longitude: "23"; latitude: "94"; height: "115"; }
+ ListElement{ longitude: "23"; latitude: "95"; height: "119"; }
+ ListElement{ longitude: "23"; latitude: "96"; height: "125"; }
+ ListElement{ longitude: "23"; latitude: "97"; height: "128"; }
+ ListElement{ longitude: "23"; latitude: "98"; height: "135"; }
+ ListElement{ longitude: "23"; latitude: "99"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "24"; latitude: "4"; height: "118"; }
+ ListElement{ longitude: "24"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "6"; height: "121"; }
+ ListElement{ longitude: "24"; latitude: "7"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "8"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "9"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "10"; height: "124"; }
+ ListElement{ longitude: "24"; latitude: "11"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "12"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "13"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "14"; height: "123"; }
+ ListElement{ longitude: "24"; latitude: "15"; height: "121"; }
+ ListElement{ longitude: "24"; latitude: "16"; height: "118"; }
+ ListElement{ longitude: "24"; latitude: "17"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "18"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "20"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "21"; height: "119"; }
+ ListElement{ longitude: "24"; latitude: "22"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "23"; height: "121"; }
+ ListElement{ longitude: "24"; latitude: "24"; height: "123"; }
+ ListElement{ longitude: "24"; latitude: "25"; height: "123"; }
+ ListElement{ longitude: "24"; latitude: "26"; height: "121"; }
+ ListElement{ longitude: "24"; latitude: "27"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "28"; height: "121"; }
+ ListElement{ longitude: "24"; latitude: "29"; height: "121"; }
+ ListElement{ longitude: "24"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "24"; latitude: "31"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "32"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "34"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "35"; height: "123"; }
+ ListElement{ longitude: "24"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "24"; latitude: "37"; height: "123"; }
+ ListElement{ longitude: "24"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "24"; latitude: "39"; height: "125"; }
+ ListElement{ longitude: "24"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "24"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "24"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "24"; latitude: "43"; height: "129"; }
+ ListElement{ longitude: "24"; latitude: "44"; height: "129"; }
+ ListElement{ longitude: "24"; latitude: "45"; height: "129"; }
+ ListElement{ longitude: "24"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "24"; latitude: "47"; height: "127"; }
+ ListElement{ longitude: "24"; latitude: "48"; height: "124"; }
+ ListElement{ longitude: "24"; latitude: "49"; height: "124"; }
+ ListElement{ longitude: "24"; latitude: "50"; height: "123"; }
+ ListElement{ longitude: "24"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "52"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "24"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "56"; height: "122"; }
+ ListElement{ longitude: "24"; latitude: "57"; height: "126"; }
+ ListElement{ longitude: "24"; latitude: "58"; height: "126"; }
+ ListElement{ longitude: "24"; latitude: "59"; height: "131"; }
+ ListElement{ longitude: "24"; latitude: "60"; height: "133"; }
+ ListElement{ longitude: "24"; latitude: "61"; height: "134"; }
+ ListElement{ longitude: "24"; latitude: "62"; height: "132"; }
+ ListElement{ longitude: "24"; latitude: "63"; height: "128"; }
+ ListElement{ longitude: "24"; latitude: "64"; height: "126"; }
+ ListElement{ longitude: "24"; latitude: "65"; height: "125"; }
+ ListElement{ longitude: "24"; latitude: "66"; height: "125"; }
+ ListElement{ longitude: "24"; latitude: "67"; height: "127"; }
+ ListElement{ longitude: "24"; latitude: "68"; height: "128"; }
+ ListElement{ longitude: "24"; latitude: "69"; height: "126"; }
+ ListElement{ longitude: "24"; latitude: "70"; height: "124"; }
+ ListElement{ longitude: "24"; latitude: "71"; height: "120"; }
+ ListElement{ longitude: "24"; latitude: "72"; height: "117"; }
+ ListElement{ longitude: "24"; latitude: "73"; height: "113"; }
+ ListElement{ longitude: "24"; latitude: "74"; height: "112"; }
+ ListElement{ longitude: "24"; latitude: "75"; height: "112"; }
+ ListElement{ longitude: "24"; latitude: "76"; height: "106"; }
+ ListElement{ longitude: "24"; latitude: "77"; height: "105"; }
+ ListElement{ longitude: "24"; latitude: "78"; height: "100"; }
+ ListElement{ longitude: "24"; latitude: "79"; height: "99"; }
+ ListElement{ longitude: "24"; latitude: "80"; height: "101"; }
+ ListElement{ longitude: "24"; latitude: "81"; height: "104"; }
+ ListElement{ longitude: "24"; latitude: "82"; height: "111"; }
+ ListElement{ longitude: "24"; latitude: "83"; height: "114"; }
+ ListElement{ longitude: "24"; latitude: "84"; height: "117"; }
+ ListElement{ longitude: "24"; latitude: "85"; height: "114"; }
+ ListElement{ longitude: "24"; latitude: "86"; height: "115"; }
+ ListElement{ longitude: "24"; latitude: "87"; height: "112"; }
+ ListElement{ longitude: "24"; latitude: "88"; height: "110"; }
+ ListElement{ longitude: "24"; latitude: "89"; height: "108"; }
+ ListElement{ longitude: "24"; latitude: "90"; height: "107"; }
+ ListElement{ longitude: "24"; latitude: "91"; height: "104"; }
+ ListElement{ longitude: "24"; latitude: "92"; height: "106"; }
+ ListElement{ longitude: "24"; latitude: "93"; height: "110"; }
+ ListElement{ longitude: "24"; latitude: "94"; height: "115"; }
+ ListElement{ longitude: "24"; latitude: "95"; height: "125"; }
+ ListElement{ longitude: "24"; latitude: "96"; height: "130"; }
+ ListElement{ longitude: "24"; latitude: "97"; height: "133"; }
+ ListElement{ longitude: "24"; latitude: "98"; height: "137"; }
+ ListElement{ longitude: "24"; latitude: "99"; height: "122"; }
+ ListElement{ longitude: "25"; latitude: "0"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "25"; latitude: "2"; height: "116"; }
+ ListElement{ longitude: "25"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "25"; latitude: "4"; height: "115"; }
+ ListElement{ longitude: "25"; latitude: "5"; height: "126"; }
+ ListElement{ longitude: "25"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "7"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "10"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "11"; height: "123"; }
+ ListElement{ longitude: "25"; latitude: "12"; height: "124"; }
+ ListElement{ longitude: "25"; latitude: "13"; height: "124"; }
+ ListElement{ longitude: "25"; latitude: "14"; height: "124"; }
+ ListElement{ longitude: "25"; latitude: "15"; height: "123"; }
+ ListElement{ longitude: "25"; latitude: "16"; height: "119"; }
+ ListElement{ longitude: "25"; latitude: "17"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "18"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "20"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "21"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "25"; latitude: "23"; height: "124"; }
+ ListElement{ longitude: "25"; latitude: "24"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "25"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "26"; height: "124"; }
+ ListElement{ longitude: "25"; latitude: "27"; height: "123"; }
+ ListElement{ longitude: "25"; latitude: "28"; height: "123"; }
+ ListElement{ longitude: "25"; latitude: "29"; height: "123"; }
+ ListElement{ longitude: "25"; latitude: "30"; height: "123"; }
+ ListElement{ longitude: "25"; latitude: "31"; height: "124"; }
+ ListElement{ longitude: "25"; latitude: "32"; height: "122"; }
+ ListElement{ longitude: "25"; latitude: "33"; height: "119"; }
+ ListElement{ longitude: "25"; latitude: "34"; height: "119"; }
+ ListElement{ longitude: "25"; latitude: "35"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "36"; height: "121"; }
+ ListElement{ longitude: "25"; latitude: "37"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "38"; height: "123"; }
+ ListElement{ longitude: "25"; latitude: "39"; height: "126"; }
+ ListElement{ longitude: "25"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "25"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "25"; latitude: "43"; height: "129"; }
+ ListElement{ longitude: "25"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "25"; latitude: "45"; height: "130"; }
+ ListElement{ longitude: "25"; latitude: "46"; height: "131"; }
+ ListElement{ longitude: "25"; latitude: "47"; height: "127"; }
+ ListElement{ longitude: "25"; latitude: "48"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "49"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "50"; height: "122"; }
+ ListElement{ longitude: "25"; latitude: "51"; height: "121"; }
+ ListElement{ longitude: "25"; latitude: "52"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "25"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "25"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "25"; latitude: "56"; height: "122"; }
+ ListElement{ longitude: "25"; latitude: "57"; height: "126"; }
+ ListElement{ longitude: "25"; latitude: "58"; height: "127"; }
+ ListElement{ longitude: "25"; latitude: "59"; height: "127"; }
+ ListElement{ longitude: "25"; latitude: "60"; height: "130"; }
+ ListElement{ longitude: "25"; latitude: "61"; height: "132"; }
+ ListElement{ longitude: "25"; latitude: "62"; height: "132"; }
+ ListElement{ longitude: "25"; latitude: "63"; height: "131"; }
+ ListElement{ longitude: "25"; latitude: "64"; height: "130"; }
+ ListElement{ longitude: "25"; latitude: "65"; height: "131"; }
+ ListElement{ longitude: "25"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "25"; latitude: "67"; height: "133"; }
+ ListElement{ longitude: "25"; latitude: "68"; height: "134"; }
+ ListElement{ longitude: "25"; latitude: "69"; height: "133"; }
+ ListElement{ longitude: "25"; latitude: "70"; height: "129"; }
+ ListElement{ longitude: "25"; latitude: "71"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "72"; height: "122"; }
+ ListElement{ longitude: "25"; latitude: "73"; height: "119"; }
+ ListElement{ longitude: "25"; latitude: "74"; height: "116"; }
+ ListElement{ longitude: "25"; latitude: "75"; height: "114"; }
+ ListElement{ longitude: "25"; latitude: "76"; height: "109"; }
+ ListElement{ longitude: "25"; latitude: "77"; height: "106"; }
+ ListElement{ longitude: "25"; latitude: "78"; height: "102"; }
+ ListElement{ longitude: "25"; latitude: "79"; height: "101"; }
+ ListElement{ longitude: "25"; latitude: "80"; height: "102"; }
+ ListElement{ longitude: "25"; latitude: "81"; height: "107"; }
+ ListElement{ longitude: "25"; latitude: "82"; height: "111"; }
+ ListElement{ longitude: "25"; latitude: "83"; height: "113"; }
+ ListElement{ longitude: "25"; latitude: "84"; height: "115"; }
+ ListElement{ longitude: "25"; latitude: "85"; height: "116"; }
+ ListElement{ longitude: "25"; latitude: "86"; height: "118"; }
+ ListElement{ longitude: "25"; latitude: "87"; height: "121"; }
+ ListElement{ longitude: "25"; latitude: "88"; height: "119"; }
+ ListElement{ longitude: "25"; latitude: "89"; height: "113"; }
+ ListElement{ longitude: "25"; latitude: "90"; height: "103"; }
+ ListElement{ longitude: "25"; latitude: "91"; height: "104"; }
+ ListElement{ longitude: "25"; latitude: "92"; height: "106"; }
+ ListElement{ longitude: "25"; latitude: "93"; height: "117"; }
+ ListElement{ longitude: "25"; latitude: "94"; height: "111"; }
+ ListElement{ longitude: "25"; latitude: "95"; height: "125"; }
+ ListElement{ longitude: "25"; latitude: "96"; height: "134"; }
+ ListElement{ longitude: "25"; latitude: "97"; height: "135"; }
+ ListElement{ longitude: "25"; latitude: "98"; height: "135"; }
+ ListElement{ longitude: "25"; latitude: "99"; height: "120"; }
+ ListElement{ longitude: "26"; latitude: "0"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "1"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "2"; height: "128"; }
+ ListElement{ longitude: "26"; latitude: "3"; height: "128"; }
+ ListElement{ longitude: "26"; latitude: "4"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "5"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "6"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "26"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "9"; height: "123"; }
+ ListElement{ longitude: "26"; latitude: "10"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "12"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "13"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "14"; height: "123"; }
+ ListElement{ longitude: "26"; latitude: "15"; height: "124"; }
+ ListElement{ longitude: "26"; latitude: "16"; height: "124"; }
+ ListElement{ longitude: "26"; latitude: "17"; height: "124"; }
+ ListElement{ longitude: "26"; latitude: "18"; height: "123"; }
+ ListElement{ longitude: "26"; latitude: "19"; height: "121"; }
+ ListElement{ longitude: "26"; latitude: "20"; height: "121"; }
+ ListElement{ longitude: "26"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "22"; height: "122"; }
+ ListElement{ longitude: "26"; latitude: "23"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "24"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "25"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "26"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "27"; height: "124"; }
+ ListElement{ longitude: "26"; latitude: "28"; height: "122"; }
+ ListElement{ longitude: "26"; latitude: "29"; height: "123"; }
+ ListElement{ longitude: "26"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "26"; latitude: "31"; height: "122"; }
+ ListElement{ longitude: "26"; latitude: "32"; height: "120"; }
+ ListElement{ longitude: "26"; latitude: "33"; height: "119"; }
+ ListElement{ longitude: "26"; latitude: "34"; height: "119"; }
+ ListElement{ longitude: "26"; latitude: "35"; height: "120"; }
+ ListElement{ longitude: "26"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "26"; latitude: "37"; height: "121"; }
+ ListElement{ longitude: "26"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "26"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "26"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "26"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "26"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "26"; latitude: "43"; height: "129"; }
+ ListElement{ longitude: "26"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "26"; latitude: "45"; height: "128"; }
+ ListElement{ longitude: "26"; latitude: "46"; height: "129"; }
+ ListElement{ longitude: "26"; latitude: "47"; height: "127"; }
+ ListElement{ longitude: "26"; latitude: "48"; height: "123"; }
+ ListElement{ longitude: "26"; latitude: "49"; height: "121"; }
+ ListElement{ longitude: "26"; latitude: "50"; height: "122"; }
+ ListElement{ longitude: "26"; latitude: "51"; height: "119"; }
+ ListElement{ longitude: "26"; latitude: "52"; height: "120"; }
+ ListElement{ longitude: "26"; latitude: "53"; height: "120"; }
+ ListElement{ longitude: "26"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "26"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "26"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "26"; latitude: "57"; height: "123"; }
+ ListElement{ longitude: "26"; latitude: "58"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "59"; height: "125"; }
+ ListElement{ longitude: "26"; latitude: "60"; height: "128"; }
+ ListElement{ longitude: "26"; latitude: "61"; height: "130"; }
+ ListElement{ longitude: "26"; latitude: "62"; height: "130"; }
+ ListElement{ longitude: "26"; latitude: "63"; height: "130"; }
+ ListElement{ longitude: "26"; latitude: "64"; height: "130"; }
+ ListElement{ longitude: "26"; latitude: "65"; height: "130"; }
+ ListElement{ longitude: "26"; latitude: "66"; height: "131"; }
+ ListElement{ longitude: "26"; latitude: "67"; height: "133"; }
+ ListElement{ longitude: "26"; latitude: "68"; height: "136"; }
+ ListElement{ longitude: "26"; latitude: "69"; height: "134"; }
+ ListElement{ longitude: "26"; latitude: "70"; height: "133"; }
+ ListElement{ longitude: "26"; latitude: "71"; height: "132"; }
+ ListElement{ longitude: "26"; latitude: "72"; height: "128"; }
+ ListElement{ longitude: "26"; latitude: "73"; height: "126"; }
+ ListElement{ longitude: "26"; latitude: "74"; height: "121"; }
+ ListElement{ longitude: "26"; latitude: "75"; height: "116"; }
+ ListElement{ longitude: "26"; latitude: "76"; height: "112"; }
+ ListElement{ longitude: "26"; latitude: "77"; height: "109"; }
+ ListElement{ longitude: "26"; latitude: "78"; height: "105"; }
+ ListElement{ longitude: "26"; latitude: "79"; height: "106"; }
+ ListElement{ longitude: "26"; latitude: "80"; height: "107"; }
+ ListElement{ longitude: "26"; latitude: "81"; height: "114"; }
+ ListElement{ longitude: "26"; latitude: "82"; height: "117"; }
+ ListElement{ longitude: "26"; latitude: "83"; height: "117"; }
+ ListElement{ longitude: "26"; latitude: "84"; height: "118"; }
+ ListElement{ longitude: "26"; latitude: "85"; height: "119"; }
+ ListElement{ longitude: "26"; latitude: "86"; height: "120"; }
+ ListElement{ longitude: "26"; latitude: "87"; height: "119"; }
+ ListElement{ longitude: "26"; latitude: "88"; height: "119"; }
+ ListElement{ longitude: "26"; latitude: "89"; height: "113"; }
+ ListElement{ longitude: "26"; latitude: "90"; height: "100"; }
+ ListElement{ longitude: "26"; latitude: "91"; height: "103"; }
+ ListElement{ longitude: "26"; latitude: "92"; height: "105"; }
+ ListElement{ longitude: "26"; latitude: "93"; height: "119"; }
+ ListElement{ longitude: "26"; latitude: "94"; height: "128"; }
+ ListElement{ longitude: "26"; latitude: "95"; height: "134"; }
+ ListElement{ longitude: "26"; latitude: "96"; height: "137"; }
+ ListElement{ longitude: "26"; latitude: "97"; height: "133"; }
+ ListElement{ longitude: "26"; latitude: "98"; height: "131"; }
+ ListElement{ longitude: "26"; latitude: "99"; height: "116"; }
+ ListElement{ longitude: "27"; latitude: "0"; height: "126"; }
+ ListElement{ longitude: "27"; latitude: "1"; height: "126"; }
+ ListElement{ longitude: "27"; latitude: "2"; height: "130"; }
+ ListElement{ longitude: "27"; latitude: "3"; height: "130"; }
+ ListElement{ longitude: "27"; latitude: "4"; height: "126"; }
+ ListElement{ longitude: "27"; latitude: "5"; height: "127"; }
+ ListElement{ longitude: "27"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "27"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "27"; latitude: "8"; height: "124"; }
+ ListElement{ longitude: "27"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "10"; height: "124"; }
+ ListElement{ longitude: "27"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "27"; latitude: "12"; height: "123"; }
+ ListElement{ longitude: "27"; latitude: "13"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "14"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "15"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "16"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "19"; height: "122"; }
+ ListElement{ longitude: "27"; latitude: "20"; height: "122"; }
+ ListElement{ longitude: "27"; latitude: "21"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "22"; height: "123"; }
+ ListElement{ longitude: "27"; latitude: "23"; height: "123"; }
+ ListElement{ longitude: "27"; latitude: "24"; height: "123"; }
+ ListElement{ longitude: "27"; latitude: "25"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "26"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "27"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "28"; height: "123"; }
+ ListElement{ longitude: "27"; latitude: "29"; height: "122"; }
+ ListElement{ longitude: "27"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "27"; latitude: "31"; height: "122"; }
+ ListElement{ longitude: "27"; latitude: "32"; height: "119"; }
+ ListElement{ longitude: "27"; latitude: "33"; height: "119"; }
+ ListElement{ longitude: "27"; latitude: "34"; height: "121"; }
+ ListElement{ longitude: "27"; latitude: "35"; height: "122"; }
+ ListElement{ longitude: "27"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "27"; latitude: "37"; height: "121"; }
+ ListElement{ longitude: "27"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "27"; latitude: "39"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "27"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "27"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "27"; latitude: "43"; height: "129"; }
+ ListElement{ longitude: "27"; latitude: "44"; height: "129"; }
+ ListElement{ longitude: "27"; latitude: "45"; height: "129"; }
+ ListElement{ longitude: "27"; latitude: "46"; height: "128"; }
+ ListElement{ longitude: "27"; latitude: "47"; height: "126"; }
+ ListElement{ longitude: "27"; latitude: "48"; height: "124"; }
+ ListElement{ longitude: "27"; latitude: "49"; height: "120"; }
+ ListElement{ longitude: "27"; latitude: "50"; height: "121"; }
+ ListElement{ longitude: "27"; latitude: "51"; height: "118"; }
+ ListElement{ longitude: "27"; latitude: "52"; height: "118"; }
+ ListElement{ longitude: "27"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "27"; latitude: "54"; height: "121"; }
+ ListElement{ longitude: "27"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "27"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "27"; latitude: "57"; height: "122"; }
+ ListElement{ longitude: "27"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "27"; latitude: "59"; height: "124"; }
+ ListElement{ longitude: "27"; latitude: "60"; height: "126"; }
+ ListElement{ longitude: "27"; latitude: "61"; height: "126"; }
+ ListElement{ longitude: "27"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "27"; latitude: "63"; height: "127"; }
+ ListElement{ longitude: "27"; latitude: "64"; height: "129"; }
+ ListElement{ longitude: "27"; latitude: "65"; height: "129"; }
+ ListElement{ longitude: "27"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "27"; latitude: "67"; height: "130"; }
+ ListElement{ longitude: "27"; latitude: "68"; height: "134"; }
+ ListElement{ longitude: "27"; latitude: "69"; height: "135"; }
+ ListElement{ longitude: "27"; latitude: "70"; height: "136"; }
+ ListElement{ longitude: "27"; latitude: "71"; height: "137"; }
+ ListElement{ longitude: "27"; latitude: "72"; height: "136"; }
+ ListElement{ longitude: "27"; latitude: "73"; height: "133"; }
+ ListElement{ longitude: "27"; latitude: "74"; height: "128"; }
+ ListElement{ longitude: "27"; latitude: "75"; height: "121"; }
+ ListElement{ longitude: "27"; latitude: "76"; height: "117"; }
+ ListElement{ longitude: "27"; latitude: "77"; height: "113"; }
+ ListElement{ longitude: "27"; latitude: "78"; height: "111"; }
+ ListElement{ longitude: "27"; latitude: "79"; height: "109"; }
+ ListElement{ longitude: "27"; latitude: "80"; height: "110"; }
+ ListElement{ longitude: "27"; latitude: "81"; height: "113"; }
+ ListElement{ longitude: "27"; latitude: "82"; height: "117"; }
+ ListElement{ longitude: "27"; latitude: "83"; height: "115"; }
+ ListElement{ longitude: "27"; latitude: "84"; height: "120"; }
+ ListElement{ longitude: "27"; latitude: "85"; height: "119"; }
+ ListElement{ longitude: "27"; latitude: "86"; height: "121"; }
+ ListElement{ longitude: "27"; latitude: "87"; height: "118"; }
+ ListElement{ longitude: "27"; latitude: "88"; height: "117"; }
+ ListElement{ longitude: "27"; latitude: "89"; height: "114"; }
+ ListElement{ longitude: "27"; latitude: "90"; height: "107"; }
+ ListElement{ longitude: "27"; latitude: "91"; height: "106"; }
+ ListElement{ longitude: "27"; latitude: "92"; height: "109"; }
+ ListElement{ longitude: "27"; latitude: "93"; height: "119"; }
+ ListElement{ longitude: "27"; latitude: "94"; height: "127"; }
+ ListElement{ longitude: "27"; latitude: "95"; height: "136"; }
+ ListElement{ longitude: "27"; latitude: "96"; height: "136"; }
+ ListElement{ longitude: "27"; latitude: "97"; height: "133"; }
+ ListElement{ longitude: "27"; latitude: "98"; height: "128"; }
+ ListElement{ longitude: "27"; latitude: "99"; height: "111"; }
+ ListElement{ longitude: "28"; latitude: "0"; height: "127"; }
+ ListElement{ longitude: "28"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "28"; latitude: "2"; height: "129"; }
+ ListElement{ longitude: "28"; latitude: "3"; height: "129"; }
+ ListElement{ longitude: "28"; latitude: "4"; height: "128"; }
+ ListElement{ longitude: "28"; latitude: "5"; height: "127"; }
+ ListElement{ longitude: "28"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "8"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "9"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "10"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "12"; height: "122"; }
+ ListElement{ longitude: "28"; latitude: "13"; height: "123"; }
+ ListElement{ longitude: "28"; latitude: "14"; height: "123"; }
+ ListElement{ longitude: "28"; latitude: "15"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "16"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "17"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "18"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "19"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "20"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "22"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "23"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "24"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "25"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "26"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "27"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "28"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "29"; height: "125"; }
+ ListElement{ longitude: "28"; latitude: "30"; height: "118"; }
+ ListElement{ longitude: "28"; latitude: "31"; height: "122"; }
+ ListElement{ longitude: "28"; latitude: "32"; height: "115"; }
+ ListElement{ longitude: "28"; latitude: "33"; height: "119"; }
+ ListElement{ longitude: "28"; latitude: "34"; height: "122"; }
+ ListElement{ longitude: "28"; latitude: "35"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "36"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "37"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "38"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "39"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "28"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "28"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "28"; latitude: "43"; height: "130"; }
+ ListElement{ longitude: "28"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "28"; latitude: "45"; height: "128"; }
+ ListElement{ longitude: "28"; latitude: "46"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "47"; height: "123"; }
+ ListElement{ longitude: "28"; latitude: "48"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "49"; height: "119"; }
+ ListElement{ longitude: "28"; latitude: "50"; height: "118"; }
+ ListElement{ longitude: "28"; latitude: "51"; height: "117"; }
+ ListElement{ longitude: "28"; latitude: "52"; height: "119"; }
+ ListElement{ longitude: "28"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "28"; latitude: "54"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "28"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "28"; latitude: "57"; height: "122"; }
+ ListElement{ longitude: "28"; latitude: "58"; height: "122"; }
+ ListElement{ longitude: "28"; latitude: "59"; height: "122"; }
+ ListElement{ longitude: "28"; latitude: "60"; height: "123"; }
+ ListElement{ longitude: "28"; latitude: "61"; height: "124"; }
+ ListElement{ longitude: "28"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "28"; latitude: "63"; height: "125"; }
+ ListElement{ longitude: "28"; latitude: "64"; height: "127"; }
+ ListElement{ longitude: "28"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "66"; height: "127"; }
+ ListElement{ longitude: "28"; latitude: "67"; height: "127"; }
+ ListElement{ longitude: "28"; latitude: "68"; height: "131"; }
+ ListElement{ longitude: "28"; latitude: "69"; height: "136"; }
+ ListElement{ longitude: "28"; latitude: "70"; height: "137"; }
+ ListElement{ longitude: "28"; latitude: "71"; height: "141"; }
+ ListElement{ longitude: "28"; latitude: "72"; height: "143"; }
+ ListElement{ longitude: "28"; latitude: "73"; height: "139"; }
+ ListElement{ longitude: "28"; latitude: "74"; height: "136"; }
+ ListElement{ longitude: "28"; latitude: "75"; height: "129"; }
+ ListElement{ longitude: "28"; latitude: "76"; height: "122"; }
+ ListElement{ longitude: "28"; latitude: "77"; height: "118"; }
+ ListElement{ longitude: "28"; latitude: "78"; height: "117"; }
+ ListElement{ longitude: "28"; latitude: "79"; height: "111"; }
+ ListElement{ longitude: "28"; latitude: "80"; height: "114"; }
+ ListElement{ longitude: "28"; latitude: "81"; height: "117"; }
+ ListElement{ longitude: "28"; latitude: "82"; height: "120"; }
+ ListElement{ longitude: "28"; latitude: "83"; height: "119"; }
+ ListElement{ longitude: "28"; latitude: "84"; height: "122"; }
+ ListElement{ longitude: "28"; latitude: "85"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "86"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "87"; height: "120"; }
+ ListElement{ longitude: "28"; latitude: "88"; height: "116"; }
+ ListElement{ longitude: "28"; latitude: "89"; height: "114"; }
+ ListElement{ longitude: "28"; latitude: "90"; height: "120"; }
+ ListElement{ longitude: "28"; latitude: "91"; height: "111"; }
+ ListElement{ longitude: "28"; latitude: "92"; height: "113"; }
+ ListElement{ longitude: "28"; latitude: "93"; height: "121"; }
+ ListElement{ longitude: "28"; latitude: "94"; height: "125"; }
+ ListElement{ longitude: "28"; latitude: "95"; height: "133"; }
+ ListElement{ longitude: "28"; latitude: "96"; height: "134"; }
+ ListElement{ longitude: "28"; latitude: "97"; height: "132"; }
+ ListElement{ longitude: "28"; latitude: "98"; height: "126"; }
+ ListElement{ longitude: "28"; latitude: "99"; height: "109"; }
+ ListElement{ longitude: "29"; latitude: "0"; height: "128"; }
+ ListElement{ longitude: "29"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "29"; latitude: "2"; height: "128"; }
+ ListElement{ longitude: "29"; latitude: "3"; height: "128"; }
+ ListElement{ longitude: "29"; latitude: "4"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "5"; height: "125"; }
+ ListElement{ longitude: "29"; latitude: "6"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "9"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "12"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "14"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "15"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "17"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "18"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "20"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "21"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "22"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "23"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "28"; height: "125"; }
+ ListElement{ longitude: "29"; latitude: "29"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "30"; height: "125"; }
+ ListElement{ longitude: "29"; latitude: "31"; height: "124"; }
+ ListElement{ longitude: "29"; latitude: "32"; height: "120"; }
+ ListElement{ longitude: "29"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "29"; latitude: "34"; height: "121"; }
+ ListElement{ longitude: "29"; latitude: "35"; height: "123"; }
+ ListElement{ longitude: "29"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "29"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "29"; latitude: "38"; height: "120"; }
+ ListElement{ longitude: "29"; latitude: "39"; height: "121"; }
+ ListElement{ longitude: "29"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "29"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "29"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "29"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "44"; height: "116"; }
+ ListElement{ longitude: "29"; latitude: "45"; height: "120"; }
+ ListElement{ longitude: "29"; latitude: "46"; height: "125"; }
+ ListElement{ longitude: "29"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "29"; latitude: "48"; height: "122"; }
+ ListElement{ longitude: "29"; latitude: "49"; height: "119"; }
+ ListElement{ longitude: "29"; latitude: "50"; height: "120"; }
+ ListElement{ longitude: "29"; latitude: "51"; height: "117"; }
+ ListElement{ longitude: "29"; latitude: "52"; height: "117"; }
+ ListElement{ longitude: "29"; latitude: "53"; height: "117"; }
+ ListElement{ longitude: "29"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "29"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "29"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "29"; latitude: "57"; height: "123"; }
+ ListElement{ longitude: "29"; latitude: "58"; height: "123"; }
+ ListElement{ longitude: "29"; latitude: "59"; height: "122"; }
+ ListElement{ longitude: "29"; latitude: "60"; height: "122"; }
+ ListElement{ longitude: "29"; latitude: "61"; height: "122"; }
+ ListElement{ longitude: "29"; latitude: "62"; height: "122"; }
+ ListElement{ longitude: "29"; latitude: "63"; height: "123"; }
+ ListElement{ longitude: "29"; latitude: "64"; height: "125"; }
+ ListElement{ longitude: "29"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "66"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "67"; height: "128"; }
+ ListElement{ longitude: "29"; latitude: "68"; height: "131"; }
+ ListElement{ longitude: "29"; latitude: "69"; height: "134"; }
+ ListElement{ longitude: "29"; latitude: "70"; height: "140"; }
+ ListElement{ longitude: "29"; latitude: "71"; height: "146"; }
+ ListElement{ longitude: "29"; latitude: "72"; height: "147"; }
+ ListElement{ longitude: "29"; latitude: "73"; height: "144"; }
+ ListElement{ longitude: "29"; latitude: "74"; height: "140"; }
+ ListElement{ longitude: "29"; latitude: "75"; height: "134"; }
+ ListElement{ longitude: "29"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "29"; latitude: "77"; height: "123"; }
+ ListElement{ longitude: "29"; latitude: "78"; height: "120"; }
+ ListElement{ longitude: "29"; latitude: "79"; height: "117"; }
+ ListElement{ longitude: "29"; latitude: "80"; height: "120"; }
+ ListElement{ longitude: "29"; latitude: "81"; height: "119"; }
+ ListElement{ longitude: "29"; latitude: "82"; height: "119"; }
+ ListElement{ longitude: "29"; latitude: "83"; height: "117"; }
+ ListElement{ longitude: "29"; latitude: "84"; height: "116"; }
+ ListElement{ longitude: "29"; latitude: "85"; height: "119"; }
+ ListElement{ longitude: "29"; latitude: "86"; height: "121"; }
+ ListElement{ longitude: "29"; latitude: "87"; height: "121"; }
+ ListElement{ longitude: "29"; latitude: "88"; height: "119"; }
+ ListElement{ longitude: "29"; latitude: "89"; height: "114"; }
+ ListElement{ longitude: "29"; latitude: "90"; height: "117"; }
+ ListElement{ longitude: "29"; latitude: "91"; height: "111"; }
+ ListElement{ longitude: "29"; latitude: "92"; height: "112"; }
+ ListElement{ longitude: "29"; latitude: "93"; height: "122"; }
+ ListElement{ longitude: "29"; latitude: "94"; height: "124"; }
+ ListElement{ longitude: "29"; latitude: "95"; height: "129"; }
+ ListElement{ longitude: "29"; latitude: "96"; height: "132"; }
+ ListElement{ longitude: "29"; latitude: "97"; height: "131"; }
+ ListElement{ longitude: "29"; latitude: "98"; height: "124"; }
+ ListElement{ longitude: "29"; latitude: "99"; height: "109"; }
+ ListElement{ longitude: "30"; latitude: "0"; height: "128"; }
+ ListElement{ longitude: "30"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "30"; latitude: "2"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "3"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "4"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "5"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "30"; latitude: "10"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "30"; latitude: "12"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "14"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "15"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "30"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "20"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "22"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "23"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "24"; height: "125"; }
+ ListElement{ longitude: "30"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "30"; height: "126"; }
+ ListElement{ longitude: "30"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "32"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "33"; height: "120"; }
+ ListElement{ longitude: "30"; latitude: "34"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "35"; height: "123"; }
+ ListElement{ longitude: "30"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "30"; latitude: "37"; height: "125"; }
+ ListElement{ longitude: "30"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "30"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "30"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "30"; latitude: "43"; height: "114"; }
+ ListElement{ longitude: "30"; latitude: "44"; height: "105"; }
+ ListElement{ longitude: "30"; latitude: "45"; height: "114"; }
+ ListElement{ longitude: "30"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "30"; latitude: "47"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "48"; height: "120"; }
+ ListElement{ longitude: "30"; latitude: "49"; height: "120"; }
+ ListElement{ longitude: "30"; latitude: "50"; height: "118"; }
+ ListElement{ longitude: "30"; latitude: "51"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "52"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "53"; height: "116"; }
+ ListElement{ longitude: "30"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "30"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "30"; latitude: "57"; height: "122"; }
+ ListElement{ longitude: "30"; latitude: "58"; height: "122"; }
+ ListElement{ longitude: "30"; latitude: "59"; height: "122"; }
+ ListElement{ longitude: "30"; latitude: "60"; height: "123"; }
+ ListElement{ longitude: "30"; latitude: "61"; height: "121"; }
+ ListElement{ longitude: "30"; latitude: "62"; height: "121"; }
+ ListElement{ longitude: "30"; latitude: "63"; height: "121"; }
+ ListElement{ longitude: "30"; latitude: "64"; height: "122"; }
+ ListElement{ longitude: "30"; latitude: "65"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "66"; height: "125"; }
+ ListElement{ longitude: "30"; latitude: "67"; height: "128"; }
+ ListElement{ longitude: "30"; latitude: "68"; height: "133"; }
+ ListElement{ longitude: "30"; latitude: "69"; height: "135"; }
+ ListElement{ longitude: "30"; latitude: "70"; height: "142"; }
+ ListElement{ longitude: "30"; latitude: "71"; height: "146"; }
+ ListElement{ longitude: "30"; latitude: "72"; height: "150"; }
+ ListElement{ longitude: "30"; latitude: "73"; height: "149"; }
+ ListElement{ longitude: "30"; latitude: "74"; height: "147"; }
+ ListElement{ longitude: "30"; latitude: "75"; height: "137"; }
+ ListElement{ longitude: "30"; latitude: "76"; height: "130"; }
+ ListElement{ longitude: "30"; latitude: "77"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "78"; height: "121"; }
+ ListElement{ longitude: "30"; latitude: "79"; height: "121"; }
+ ListElement{ longitude: "30"; latitude: "80"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "81"; height: "117"; }
+ ListElement{ longitude: "30"; latitude: "82"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "83"; height: "115"; }
+ ListElement{ longitude: "30"; latitude: "84"; height: "121"; }
+ ListElement{ longitude: "30"; latitude: "85"; height: "122"; }
+ ListElement{ longitude: "30"; latitude: "86"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "87"; height: "121"; }
+ ListElement{ longitude: "30"; latitude: "88"; height: "120"; }
+ ListElement{ longitude: "30"; latitude: "89"; height: "117"; }
+ ListElement{ longitude: "30"; latitude: "90"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "91"; height: "118"; }
+ ListElement{ longitude: "30"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "30"; latitude: "93"; height: "128"; }
+ ListElement{ longitude: "30"; latitude: "94"; height: "127"; }
+ ListElement{ longitude: "30"; latitude: "95"; height: "124"; }
+ ListElement{ longitude: "30"; latitude: "96"; height: "123"; }
+ ListElement{ longitude: "30"; latitude: "97"; height: "133"; }
+ ListElement{ longitude: "30"; latitude: "98"; height: "128"; }
+ ListElement{ longitude: "30"; latitude: "99"; height: "111"; }
+ ListElement{ longitude: "31"; latitude: "0"; height: "128"; }
+ ListElement{ longitude: "31"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "31"; latitude: "2"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "3"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "4"; height: "123"; }
+ ListElement{ longitude: "31"; latitude: "5"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "10"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "12"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "14"; height: "123"; }
+ ListElement{ longitude: "31"; latitude: "15"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "19"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "20"; height: "128"; }
+ ListElement{ longitude: "31"; latitude: "21"; height: "129"; }
+ ListElement{ longitude: "31"; latitude: "22"; height: "128"; }
+ ListElement{ longitude: "31"; latitude: "23"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "24"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "25"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "26"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "30"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "31"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "32"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "33"; height: "123"; }
+ ListElement{ longitude: "31"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "35"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "37"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "43"; height: "118"; }
+ ListElement{ longitude: "31"; latitude: "44"; height: "116"; }
+ ListElement{ longitude: "31"; latitude: "45"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "46"; height: "120"; }
+ ListElement{ longitude: "31"; latitude: "47"; height: "116"; }
+ ListElement{ longitude: "31"; latitude: "48"; height: "117"; }
+ ListElement{ longitude: "31"; latitude: "49"; height: "117"; }
+ ListElement{ longitude: "31"; latitude: "50"; height: "119"; }
+ ListElement{ longitude: "31"; latitude: "51"; height: "119"; }
+ ListElement{ longitude: "31"; latitude: "52"; height: "118"; }
+ ListElement{ longitude: "31"; latitude: "53"; height: "120"; }
+ ListElement{ longitude: "31"; latitude: "54"; height: "121"; }
+ ListElement{ longitude: "31"; latitude: "55"; height: "121"; }
+ ListElement{ longitude: "31"; latitude: "56"; height: "122"; }
+ ListElement{ longitude: "31"; latitude: "57"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "59"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "60"; height: "122"; }
+ ListElement{ longitude: "31"; latitude: "61"; height: "121"; }
+ ListElement{ longitude: "31"; latitude: "62"; height: "121"; }
+ ListElement{ longitude: "31"; latitude: "63"; height: "121"; }
+ ListElement{ longitude: "31"; latitude: "64"; height: "122"; }
+ ListElement{ longitude: "31"; latitude: "65"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "66"; height: "126"; }
+ ListElement{ longitude: "31"; latitude: "67"; height: "129"; }
+ ListElement{ longitude: "31"; latitude: "68"; height: "133"; }
+ ListElement{ longitude: "31"; latitude: "69"; height: "137"; }
+ ListElement{ longitude: "31"; latitude: "70"; height: "143"; }
+ ListElement{ longitude: "31"; latitude: "71"; height: "147"; }
+ ListElement{ longitude: "31"; latitude: "72"; height: "149"; }
+ ListElement{ longitude: "31"; latitude: "73"; height: "148"; }
+ ListElement{ longitude: "31"; latitude: "74"; height: "146"; }
+ ListElement{ longitude: "31"; latitude: "75"; height: "138"; }
+ ListElement{ longitude: "31"; latitude: "76"; height: "130"; }
+ ListElement{ longitude: "31"; latitude: "77"; height: "123"; }
+ ListElement{ longitude: "31"; latitude: "78"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "79"; height: "122"; }
+ ListElement{ longitude: "31"; latitude: "80"; height: "116"; }
+ ListElement{ longitude: "31"; latitude: "81"; height: "115"; }
+ ListElement{ longitude: "31"; latitude: "82"; height: "119"; }
+ ListElement{ longitude: "31"; latitude: "83"; height: "117"; }
+ ListElement{ longitude: "31"; latitude: "84"; height: "117"; }
+ ListElement{ longitude: "31"; latitude: "85"; height: "116"; }
+ ListElement{ longitude: "31"; latitude: "86"; height: "119"; }
+ ListElement{ longitude: "31"; latitude: "87"; height: "119"; }
+ ListElement{ longitude: "31"; latitude: "88"; height: "119"; }
+ ListElement{ longitude: "31"; latitude: "89"; height: "120"; }
+ ListElement{ longitude: "31"; latitude: "90"; height: "120"; }
+ ListElement{ longitude: "31"; latitude: "91"; height: "123"; }
+ ListElement{ longitude: "31"; latitude: "92"; height: "124"; }
+ ListElement{ longitude: "31"; latitude: "93"; height: "123"; }
+ ListElement{ longitude: "31"; latitude: "94"; height: "123"; }
+ ListElement{ longitude: "31"; latitude: "95"; height: "122"; }
+ ListElement{ longitude: "31"; latitude: "96"; height: "114"; }
+ ListElement{ longitude: "31"; latitude: "97"; height: "125"; }
+ ListElement{ longitude: "31"; latitude: "98"; height: "127"; }
+ ListElement{ longitude: "31"; latitude: "99"; height: "115"; }
+ ListElement{ longitude: "32"; latitude: "0"; height: "128"; }
+ ListElement{ longitude: "32"; latitude: "1"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "2"; height: "128"; }
+ ListElement{ longitude: "32"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "32"; latitude: "4"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "5"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "32"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "9"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "10"; height: "128"; }
+ ListElement{ longitude: "32"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "12"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "13"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "14"; height: "121"; }
+ ListElement{ longitude: "32"; latitude: "15"; height: "124"; }
+ ListElement{ longitude: "32"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "19"; height: "128"; }
+ ListElement{ longitude: "32"; latitude: "20"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "21"; height: "129"; }
+ ListElement{ longitude: "32"; latitude: "22"; height: "129"; }
+ ListElement{ longitude: "32"; latitude: "23"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "25"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "26"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "30"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "34"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "35"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "32"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "32"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "32"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "32"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "44"; height: "123"; }
+ ListElement{ longitude: "32"; latitude: "45"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "32"; latitude: "47"; height: "118"; }
+ ListElement{ longitude: "32"; latitude: "48"; height: "119"; }
+ ListElement{ longitude: "32"; latitude: "49"; height: "119"; }
+ ListElement{ longitude: "32"; latitude: "50"; height: "119"; }
+ ListElement{ longitude: "32"; latitude: "51"; height: "119"; }
+ ListElement{ longitude: "32"; latitude: "52"; height: "118"; }
+ ListElement{ longitude: "32"; latitude: "53"; height: "119"; }
+ ListElement{ longitude: "32"; latitude: "54"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "55"; height: "121"; }
+ ListElement{ longitude: "32"; latitude: "56"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "57"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "58"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "59"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "60"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "61"; height: "123"; }
+ ListElement{ longitude: "32"; latitude: "62"; height: "123"; }
+ ListElement{ longitude: "32"; latitude: "63"; height: "123"; }
+ ListElement{ longitude: "32"; latitude: "64"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "66"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "67"; height: "131"; }
+ ListElement{ longitude: "32"; latitude: "68"; height: "137"; }
+ ListElement{ longitude: "32"; latitude: "69"; height: "141"; }
+ ListElement{ longitude: "32"; latitude: "70"; height: "145"; }
+ ListElement{ longitude: "32"; latitude: "71"; height: "148"; }
+ ListElement{ longitude: "32"; latitude: "72"; height: "151"; }
+ ListElement{ longitude: "32"; latitude: "73"; height: "148"; }
+ ListElement{ longitude: "32"; latitude: "74"; height: "144"; }
+ ListElement{ longitude: "32"; latitude: "75"; height: "138"; }
+ ListElement{ longitude: "32"; latitude: "76"; height: "130"; }
+ ListElement{ longitude: "32"; latitude: "77"; height: "124"; }
+ ListElement{ longitude: "32"; latitude: "78"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "79"; height: "124"; }
+ ListElement{ longitude: "32"; latitude: "80"; height: "120"; }
+ ListElement{ longitude: "32"; latitude: "81"; height: "119"; }
+ ListElement{ longitude: "32"; latitude: "82"; height: "120"; }
+ ListElement{ longitude: "32"; latitude: "83"; height: "119"; }
+ ListElement{ longitude: "32"; latitude: "84"; height: "117"; }
+ ListElement{ longitude: "32"; latitude: "85"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "86"; height: "123"; }
+ ListElement{ longitude: "32"; latitude: "87"; height: "121"; }
+ ListElement{ longitude: "32"; latitude: "88"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "89"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "90"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "91"; height: "129"; }
+ ListElement{ longitude: "32"; latitude: "92"; height: "127"; }
+ ListElement{ longitude: "32"; latitude: "93"; height: "125"; }
+ ListElement{ longitude: "32"; latitude: "94"; height: "123"; }
+ ListElement{ longitude: "32"; latitude: "95"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "96"; height: "122"; }
+ ListElement{ longitude: "32"; latitude: "97"; height: "119"; }
+ ListElement{ longitude: "32"; latitude: "98"; height: "126"; }
+ ListElement{ longitude: "32"; latitude: "99"; height: "120"; }
+ ListElement{ longitude: "33"; latitude: "0"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "1"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "2"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "3"; height: "116"; }
+ ListElement{ longitude: "33"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "33"; latitude: "5"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "8"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "10"; height: "130"; }
+ ListElement{ longitude: "33"; latitude: "11"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "12"; height: "128"; }
+ ListElement{ longitude: "33"; latitude: "13"; height: "123"; }
+ ListElement{ longitude: "33"; latitude: "14"; height: "126"; }
+ ListElement{ longitude: "33"; latitude: "15"; height: "126"; }
+ ListElement{ longitude: "33"; latitude: "16"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "18"; height: "126"; }
+ ListElement{ longitude: "33"; latitude: "19"; height: "128"; }
+ ListElement{ longitude: "33"; latitude: "20"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "21"; height: "129"; }
+ ListElement{ longitude: "33"; latitude: "22"; height: "129"; }
+ ListElement{ longitude: "33"; latitude: "23"; height: "126"; }
+ ListElement{ longitude: "33"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "25"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "26"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "30"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "32"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "33"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "34"; height: "128"; }
+ ListElement{ longitude: "33"; latitude: "35"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "37"; height: "126"; }
+ ListElement{ longitude: "33"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "42"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "43"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "44"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "45"; height: "123"; }
+ ListElement{ longitude: "33"; latitude: "46"; height: "122"; }
+ ListElement{ longitude: "33"; latitude: "47"; height: "119"; }
+ ListElement{ longitude: "33"; latitude: "48"; height: "118"; }
+ ListElement{ longitude: "33"; latitude: "49"; height: "118"; }
+ ListElement{ longitude: "33"; latitude: "50"; height: "119"; }
+ ListElement{ longitude: "33"; latitude: "51"; height: "119"; }
+ ListElement{ longitude: "33"; latitude: "52"; height: "118"; }
+ ListElement{ longitude: "33"; latitude: "53"; height: "119"; }
+ ListElement{ longitude: "33"; latitude: "54"; height: "122"; }
+ ListElement{ longitude: "33"; latitude: "55"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "56"; height: "126"; }
+ ListElement{ longitude: "33"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "58"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "59"; height: "126"; }
+ ListElement{ longitude: "33"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "61"; height: "122"; }
+ ListElement{ longitude: "33"; latitude: "62"; height: "122"; }
+ ListElement{ longitude: "33"; latitude: "63"; height: "122"; }
+ ListElement{ longitude: "33"; latitude: "64"; height: "123"; }
+ ListElement{ longitude: "33"; latitude: "65"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "33"; latitude: "67"; height: "133"; }
+ ListElement{ longitude: "33"; latitude: "68"; height: "141"; }
+ ListElement{ longitude: "33"; latitude: "69"; height: "144"; }
+ ListElement{ longitude: "33"; latitude: "70"; height: "147"; }
+ ListElement{ longitude: "33"; latitude: "71"; height: "149"; }
+ ListElement{ longitude: "33"; latitude: "72"; height: "149"; }
+ ListElement{ longitude: "33"; latitude: "73"; height: "147"; }
+ ListElement{ longitude: "33"; latitude: "74"; height: "144"; }
+ ListElement{ longitude: "33"; latitude: "75"; height: "137"; }
+ ListElement{ longitude: "33"; latitude: "76"; height: "123"; }
+ ListElement{ longitude: "33"; latitude: "77"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "78"; height: "128"; }
+ ListElement{ longitude: "33"; latitude: "79"; height: "122"; }
+ ListElement{ longitude: "33"; latitude: "80"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "81"; height: "121"; }
+ ListElement{ longitude: "33"; latitude: "82"; height: "123"; }
+ ListElement{ longitude: "33"; latitude: "83"; height: "118"; }
+ ListElement{ longitude: "33"; latitude: "84"; height: "113"; }
+ ListElement{ longitude: "33"; latitude: "85"; height: "117"; }
+ ListElement{ longitude: "33"; latitude: "86"; height: "118"; }
+ ListElement{ longitude: "33"; latitude: "87"; height: "121"; }
+ ListElement{ longitude: "33"; latitude: "88"; height: "120"; }
+ ListElement{ longitude: "33"; latitude: "89"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "90"; height: "122"; }
+ ListElement{ longitude: "33"; latitude: "91"; height: "121"; }
+ ListElement{ longitude: "33"; latitude: "92"; height: "123"; }
+ ListElement{ longitude: "33"; latitude: "93"; height: "123"; }
+ ListElement{ longitude: "33"; latitude: "94"; height: "125"; }
+ ListElement{ longitude: "33"; latitude: "95"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "96"; height: "127"; }
+ ListElement{ longitude: "33"; latitude: "97"; height: "124"; }
+ ListElement{ longitude: "33"; latitude: "98"; height: "132"; }
+ ListElement{ longitude: "33"; latitude: "99"; height: "122"; }
+ ListElement{ longitude: "34"; latitude: "0"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "1"; height: "125"; }
+ ListElement{ longitude: "34"; latitude: "2"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "34"; latitude: "4"; height: "125"; }
+ ListElement{ longitude: "34"; latitude: "5"; height: "125"; }
+ ListElement{ longitude: "34"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "34"; latitude: "9"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "10"; height: "131"; }
+ ListElement{ longitude: "34"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "34"; latitude: "12"; height: "129"; }
+ ListElement{ longitude: "34"; latitude: "13"; height: "130"; }
+ ListElement{ longitude: "34"; latitude: "14"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "15"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "16"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "17"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "18"; height: "128"; }
+ ListElement{ longitude: "34"; latitude: "19"; height: "129"; }
+ ListElement{ longitude: "34"; latitude: "20"; height: "129"; }
+ ListElement{ longitude: "34"; latitude: "21"; height: "129"; }
+ ListElement{ longitude: "34"; latitude: "22"; height: "129"; }
+ ListElement{ longitude: "34"; latitude: "23"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "24"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "30"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "32"; height: "123"; }
+ ListElement{ longitude: "34"; latitude: "33"; height: "128"; }
+ ListElement{ longitude: "34"; latitude: "34"; height: "130"; }
+ ListElement{ longitude: "34"; latitude: "35"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "36"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "37"; height: "123"; }
+ ListElement{ longitude: "34"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "34"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "40"; height: "128"; }
+ ListElement{ longitude: "34"; latitude: "41"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "43"; height: "125"; }
+ ListElement{ longitude: "34"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "34"; latitude: "45"; height: "119"; }
+ ListElement{ longitude: "34"; latitude: "46"; height: "122"; }
+ ListElement{ longitude: "34"; latitude: "47"; height: "122"; }
+ ListElement{ longitude: "34"; latitude: "48"; height: "121"; }
+ ListElement{ longitude: "34"; latitude: "49"; height: "118"; }
+ ListElement{ longitude: "34"; latitude: "50"; height: "117"; }
+ ListElement{ longitude: "34"; latitude: "51"; height: "117"; }
+ ListElement{ longitude: "34"; latitude: "52"; height: "119"; }
+ ListElement{ longitude: "34"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "34"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "34"; latitude: "55"; height: "122"; }
+ ListElement{ longitude: "34"; latitude: "56"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "58"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "59"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "34"; latitude: "61"; height: "122"; }
+ ListElement{ longitude: "34"; latitude: "62"; height: "122"; }
+ ListElement{ longitude: "34"; latitude: "63"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "64"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "66"; height: "129"; }
+ ListElement{ longitude: "34"; latitude: "67"; height: "135"; }
+ ListElement{ longitude: "34"; latitude: "68"; height: "142"; }
+ ListElement{ longitude: "34"; latitude: "69"; height: "145"; }
+ ListElement{ longitude: "34"; latitude: "70"; height: "149"; }
+ ListElement{ longitude: "34"; latitude: "71"; height: "149"; }
+ ListElement{ longitude: "34"; latitude: "72"; height: "150"; }
+ ListElement{ longitude: "34"; latitude: "73"; height: "145"; }
+ ListElement{ longitude: "34"; latitude: "74"; height: "144"; }
+ ListElement{ longitude: "34"; latitude: "75"; height: "144"; }
+ ListElement{ longitude: "34"; latitude: "76"; height: "138"; }
+ ListElement{ longitude: "34"; latitude: "77"; height: "141"; }
+ ListElement{ longitude: "34"; latitude: "78"; height: "140"; }
+ ListElement{ longitude: "34"; latitude: "79"; height: "125"; }
+ ListElement{ longitude: "34"; latitude: "80"; height: "131"; }
+ ListElement{ longitude: "34"; latitude: "81"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "82"; height: "123"; }
+ ListElement{ longitude: "34"; latitude: "83"; height: "123"; }
+ ListElement{ longitude: "34"; latitude: "84"; height: "117"; }
+ ListElement{ longitude: "34"; latitude: "85"; height: "121"; }
+ ListElement{ longitude: "34"; latitude: "86"; height: "119"; }
+ ListElement{ longitude: "34"; latitude: "87"; height: "119"; }
+ ListElement{ longitude: "34"; latitude: "88"; height: "115"; }
+ ListElement{ longitude: "34"; latitude: "89"; height: "118"; }
+ ListElement{ longitude: "34"; latitude: "90"; height: "121"; }
+ ListElement{ longitude: "34"; latitude: "91"; height: "124"; }
+ ListElement{ longitude: "34"; latitude: "92"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "93"; height: "122"; }
+ ListElement{ longitude: "34"; latitude: "94"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "95"; height: "127"; }
+ ListElement{ longitude: "34"; latitude: "96"; height: "120"; }
+ ListElement{ longitude: "34"; latitude: "97"; height: "126"; }
+ ListElement{ longitude: "34"; latitude: "98"; height: "130"; }
+ ListElement{ longitude: "34"; latitude: "99"; height: "123"; }
+ ListElement{ longitude: "35"; latitude: "0"; height: "125"; }
+ ListElement{ longitude: "35"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "35"; latitude: "2"; height: "119"; }
+ ListElement{ longitude: "35"; latitude: "3"; height: "118"; }
+ ListElement{ longitude: "35"; latitude: "4"; height: "121"; }
+ ListElement{ longitude: "35"; latitude: "5"; height: "125"; }
+ ListElement{ longitude: "35"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "35"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "35"; latitude: "9"; height: "131"; }
+ ListElement{ longitude: "35"; latitude: "10"; height: "130"; }
+ ListElement{ longitude: "35"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "35"; latitude: "12"; height: "130"; }
+ ListElement{ longitude: "35"; latitude: "13"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "14"; height: "128"; }
+ ListElement{ longitude: "35"; latitude: "15"; height: "128"; }
+ ListElement{ longitude: "35"; latitude: "16"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "17"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "18"; height: "128"; }
+ ListElement{ longitude: "35"; latitude: "19"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "20"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "21"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "22"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "23"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "24"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "26"; height: "130"; }
+ ListElement{ longitude: "35"; latitude: "27"; height: "128"; }
+ ListElement{ longitude: "35"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "30"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "31"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "35"; latitude: "33"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "35"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "36"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "37"; height: "121"; }
+ ListElement{ longitude: "35"; latitude: "38"; height: "123"; }
+ ListElement{ longitude: "35"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "35"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "35"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "35"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "43"; height: "125"; }
+ ListElement{ longitude: "35"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "35"; latitude: "45"; height: "123"; }
+ ListElement{ longitude: "35"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "35"; latitude: "47"; height: "124"; }
+ ListElement{ longitude: "35"; latitude: "48"; height: "120"; }
+ ListElement{ longitude: "35"; latitude: "49"; height: "120"; }
+ ListElement{ longitude: "35"; latitude: "50"; height: "117"; }
+ ListElement{ longitude: "35"; latitude: "51"; height: "117"; }
+ ListElement{ longitude: "35"; latitude: "52"; height: "117"; }
+ ListElement{ longitude: "35"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "35"; latitude: "54"; height: "121"; }
+ ListElement{ longitude: "35"; latitude: "55"; height: "124"; }
+ ListElement{ longitude: "35"; latitude: "56"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "57"; height: "125"; }
+ ListElement{ longitude: "35"; latitude: "58"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "59"; height: "123"; }
+ ListElement{ longitude: "35"; latitude: "60"; height: "124"; }
+ ListElement{ longitude: "35"; latitude: "61"; height: "120"; }
+ ListElement{ longitude: "35"; latitude: "62"; height: "124"; }
+ ListElement{ longitude: "35"; latitude: "63"; height: "125"; }
+ ListElement{ longitude: "35"; latitude: "64"; height: "124"; }
+ ListElement{ longitude: "35"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "35"; latitude: "67"; height: "135"; }
+ ListElement{ longitude: "35"; latitude: "68"; height: "140"; }
+ ListElement{ longitude: "35"; latitude: "69"; height: "146"; }
+ ListElement{ longitude: "35"; latitude: "70"; height: "147"; }
+ ListElement{ longitude: "35"; latitude: "71"; height: "148"; }
+ ListElement{ longitude: "35"; latitude: "72"; height: "148"; }
+ ListElement{ longitude: "35"; latitude: "73"; height: "144"; }
+ ListElement{ longitude: "35"; latitude: "74"; height: "143"; }
+ ListElement{ longitude: "35"; latitude: "75"; height: "145"; }
+ ListElement{ longitude: "35"; latitude: "76"; height: "146"; }
+ ListElement{ longitude: "35"; latitude: "77"; height: "151"; }
+ ListElement{ longitude: "35"; latitude: "78"; height: "146"; }
+ ListElement{ longitude: "35"; latitude: "79"; height: "136"; }
+ ListElement{ longitude: "35"; latitude: "80"; height: "119"; }
+ ListElement{ longitude: "35"; latitude: "81"; height: "122"; }
+ ListElement{ longitude: "35"; latitude: "82"; height: "121"; }
+ ListElement{ longitude: "35"; latitude: "83"; height: "116"; }
+ ListElement{ longitude: "35"; latitude: "84"; height: "101"; }
+ ListElement{ longitude: "35"; latitude: "85"; height: "111"; }
+ ListElement{ longitude: "35"; latitude: "86"; height: "115"; }
+ ListElement{ longitude: "35"; latitude: "87"; height: "126"; }
+ ListElement{ longitude: "35"; latitude: "88"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "89"; height: "125"; }
+ ListElement{ longitude: "35"; latitude: "90"; height: "128"; }
+ ListElement{ longitude: "35"; latitude: "91"; height: "121"; }
+ ListElement{ longitude: "35"; latitude: "92"; height: "127"; }
+ ListElement{ longitude: "35"; latitude: "93"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "94"; height: "129"; }
+ ListElement{ longitude: "35"; latitude: "95"; height: "119"; }
+ ListElement{ longitude: "35"; latitude: "96"; height: "117"; }
+ ListElement{ longitude: "35"; latitude: "97"; height: "135"; }
+ ListElement{ longitude: "35"; latitude: "98"; height: "135"; }
+ ListElement{ longitude: "35"; latitude: "99"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "0"; height: "123"; }
+ ListElement{ longitude: "36"; latitude: "1"; height: "119"; }
+ ListElement{ longitude: "36"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "36"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "36"; latitude: "4"; height: "121"; }
+ ListElement{ longitude: "36"; latitude: "5"; height: "124"; }
+ ListElement{ longitude: "36"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "36"; latitude: "7"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "8"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "9"; height: "130"; }
+ ListElement{ longitude: "36"; latitude: "10"; height: "129"; }
+ ListElement{ longitude: "36"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "36"; latitude: "12"; height: "130"; }
+ ListElement{ longitude: "36"; latitude: "13"; height: "129"; }
+ ListElement{ longitude: "36"; latitude: "14"; height: "126"; }
+ ListElement{ longitude: "36"; latitude: "15"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "16"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "19"; height: "126"; }
+ ListElement{ longitude: "36"; latitude: "20"; height: "128"; }
+ ListElement{ longitude: "36"; latitude: "21"; height: "124"; }
+ ListElement{ longitude: "36"; latitude: "22"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "23"; height: "129"; }
+ ListElement{ longitude: "36"; latitude: "24"; height: "128"; }
+ ListElement{ longitude: "36"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "26"; height: "122"; }
+ ListElement{ longitude: "36"; latitude: "27"; height: "123"; }
+ ListElement{ longitude: "36"; latitude: "28"; height: "128"; }
+ ListElement{ longitude: "36"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "30"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "32"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "33"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "34"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "35"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "36"; height: "126"; }
+ ListElement{ longitude: "36"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "36"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "36"; latitude: "39"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "41"; height: "129"; }
+ ListElement{ longitude: "36"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "43"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "36"; latitude: "45"; height: "123"; }
+ ListElement{ longitude: "36"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "36"; latitude: "47"; height: "124"; }
+ ListElement{ longitude: "36"; latitude: "48"; height: "120"; }
+ ListElement{ longitude: "36"; latitude: "49"; height: "120"; }
+ ListElement{ longitude: "36"; latitude: "50"; height: "117"; }
+ ListElement{ longitude: "36"; latitude: "51"; height: "117"; }
+ ListElement{ longitude: "36"; latitude: "52"; height: "117"; }
+ ListElement{ longitude: "36"; latitude: "53"; height: "117"; }
+ ListElement{ longitude: "36"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "36"; latitude: "55"; height: "121"; }
+ ListElement{ longitude: "36"; latitude: "56"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "57"; height: "126"; }
+ ListElement{ longitude: "36"; latitude: "58"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "59"; height: "123"; }
+ ListElement{ longitude: "36"; latitude: "60"; height: "124"; }
+ ListElement{ longitude: "36"; latitude: "61"; height: "122"; }
+ ListElement{ longitude: "36"; latitude: "62"; height: "123"; }
+ ListElement{ longitude: "36"; latitude: "63"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "64"; height: "124"; }
+ ListElement{ longitude: "36"; latitude: "65"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "66"; height: "129"; }
+ ListElement{ longitude: "36"; latitude: "67"; height: "129"; }
+ ListElement{ longitude: "36"; latitude: "68"; height: "137"; }
+ ListElement{ longitude: "36"; latitude: "69"; height: "142"; }
+ ListElement{ longitude: "36"; latitude: "70"; height: "146"; }
+ ListElement{ longitude: "36"; latitude: "71"; height: "148"; }
+ ListElement{ longitude: "36"; latitude: "72"; height: "148"; }
+ ListElement{ longitude: "36"; latitude: "73"; height: "145"; }
+ ListElement{ longitude: "36"; latitude: "74"; height: "141"; }
+ ListElement{ longitude: "36"; latitude: "75"; height: "148"; }
+ ListElement{ longitude: "36"; latitude: "76"; height: "152"; }
+ ListElement{ longitude: "36"; latitude: "77"; height: "146"; }
+ ListElement{ longitude: "36"; latitude: "78"; height: "146"; }
+ ListElement{ longitude: "36"; latitude: "79"; height: "154"; }
+ ListElement{ longitude: "36"; latitude: "80"; height: "146"; }
+ ListElement{ longitude: "36"; latitude: "81"; height: "131"; }
+ ListElement{ longitude: "36"; latitude: "82"; height: "103"; }
+ ListElement{ longitude: "36"; latitude: "83"; height: "94"; }
+ ListElement{ longitude: "36"; latitude: "84"; height: "78"; }
+ ListElement{ longitude: "36"; latitude: "85"; height: "73"; }
+ ListElement{ longitude: "36"; latitude: "86"; height: "87"; }
+ ListElement{ longitude: "36"; latitude: "87"; height: "103"; }
+ ListElement{ longitude: "36"; latitude: "88"; height: "98"; }
+ ListElement{ longitude: "36"; latitude: "89"; height: "110"; }
+ ListElement{ longitude: "36"; latitude: "90"; height: "113"; }
+ ListElement{ longitude: "36"; latitude: "91"; height: "125"; }
+ ListElement{ longitude: "36"; latitude: "92"; height: "129"; }
+ ListElement{ longitude: "36"; latitude: "93"; height: "127"; }
+ ListElement{ longitude: "36"; latitude: "94"; height: "129"; }
+ ListElement{ longitude: "36"; latitude: "95"; height: "122"; }
+ ListElement{ longitude: "36"; latitude: "96"; height: "122"; }
+ ListElement{ longitude: "36"; latitude: "97"; height: "128"; }
+ ListElement{ longitude: "36"; latitude: "98"; height: "131"; }
+ ListElement{ longitude: "36"; latitude: "99"; height: "129"; }
+ ListElement{ longitude: "37"; latitude: "0"; height: "123"; }
+ ListElement{ longitude: "37"; latitude: "1"; height: "120"; }
+ ListElement{ longitude: "37"; latitude: "2"; height: "121"; }
+ ListElement{ longitude: "37"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "37"; latitude: "4"; height: "121"; }
+ ListElement{ longitude: "37"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "37"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "37"; latitude: "7"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "8"; height: "129"; }
+ ListElement{ longitude: "37"; latitude: "9"; height: "132"; }
+ ListElement{ longitude: "37"; latitude: "10"; height: "129"; }
+ ListElement{ longitude: "37"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "37"; latitude: "12"; height: "130"; }
+ ListElement{ longitude: "37"; latitude: "13"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "14"; height: "128"; }
+ ListElement{ longitude: "37"; latitude: "15"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "16"; height: "120"; }
+ ListElement{ longitude: "37"; latitude: "17"; height: "128"; }
+ ListElement{ longitude: "37"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "37"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "20"; height: "128"; }
+ ListElement{ longitude: "37"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "37"; latitude: "22"; height: "129"; }
+ ListElement{ longitude: "37"; latitude: "23"; height: "130"; }
+ ListElement{ longitude: "37"; latitude: "24"; height: "128"; }
+ ListElement{ longitude: "37"; latitude: "25"; height: "110"; }
+ ListElement{ longitude: "37"; latitude: "26"; height: "98"; }
+ ListElement{ longitude: "37"; latitude: "27"; height: "97"; }
+ ListElement{ longitude: "37"; latitude: "28"; height: "123"; }
+ ListElement{ longitude: "37"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "30"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "32"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "33"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "34"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "37"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "37"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "37"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "37"; latitude: "39"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "40"; height: "126"; }
+ ListElement{ longitude: "37"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "37"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "43"; height: "124"; }
+ ListElement{ longitude: "37"; latitude: "44"; height: "124"; }
+ ListElement{ longitude: "37"; latitude: "45"; height: "121"; }
+ ListElement{ longitude: "37"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "37"; latitude: "47"; height: "122"; }
+ ListElement{ longitude: "37"; latitude: "48"; height: "119"; }
+ ListElement{ longitude: "37"; latitude: "49"; height: "120"; }
+ ListElement{ longitude: "37"; latitude: "50"; height: "118"; }
+ ListElement{ longitude: "37"; latitude: "51"; height: "119"; }
+ ListElement{ longitude: "37"; latitude: "52"; height: "117"; }
+ ListElement{ longitude: "37"; latitude: "53"; height: "117"; }
+ ListElement{ longitude: "37"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "37"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "37"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "37"; latitude: "57"; height: "123"; }
+ ListElement{ longitude: "37"; latitude: "58"; height: "123"; }
+ ListElement{ longitude: "37"; latitude: "59"; height: "123"; }
+ ListElement{ longitude: "37"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "37"; latitude: "61"; height: "125"; }
+ ListElement{ longitude: "37"; latitude: "62"; height: "125"; }
+ ListElement{ longitude: "37"; latitude: "63"; height: "124"; }
+ ListElement{ longitude: "37"; latitude: "64"; height: "124"; }
+ ListElement{ longitude: "37"; latitude: "65"; height: "123"; }
+ ListElement{ longitude: "37"; latitude: "66"; height: "126"; }
+ ListElement{ longitude: "37"; latitude: "67"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "68"; height: "133"; }
+ ListElement{ longitude: "37"; latitude: "69"; height: "138"; }
+ ListElement{ longitude: "37"; latitude: "70"; height: "145"; }
+ ListElement{ longitude: "37"; latitude: "71"; height: "146"; }
+ ListElement{ longitude: "37"; latitude: "72"; height: "146"; }
+ ListElement{ longitude: "37"; latitude: "73"; height: "149"; }
+ ListElement{ longitude: "37"; latitude: "74"; height: "145"; }
+ ListElement{ longitude: "37"; latitude: "75"; height: "154"; }
+ ListElement{ longitude: "37"; latitude: "76"; height: "153"; }
+ ListElement{ longitude: "37"; latitude: "77"; height: "152"; }
+ ListElement{ longitude: "37"; latitude: "78"; height: "149"; }
+ ListElement{ longitude: "37"; latitude: "79"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "80"; height: "97"; }
+ ListElement{ longitude: "37"; latitude: "81"; height: "70"; }
+ ListElement{ longitude: "37"; latitude: "82"; height: "66"; }
+ ListElement{ longitude: "37"; latitude: "83"; height: "71"; }
+ ListElement{ longitude: "37"; latitude: "84"; height: "59"; }
+ ListElement{ longitude: "37"; latitude: "85"; height: "48"; }
+ ListElement{ longitude: "37"; latitude: "86"; height: "66"; }
+ ListElement{ longitude: "37"; latitude: "87"; height: "74"; }
+ ListElement{ longitude: "37"; latitude: "88"; height: "78"; }
+ ListElement{ longitude: "37"; latitude: "89"; height: "86"; }
+ ListElement{ longitude: "37"; latitude: "90"; height: "94"; }
+ ListElement{ longitude: "37"; latitude: "91"; height: "107"; }
+ ListElement{ longitude: "37"; latitude: "92"; height: "120"; }
+ ListElement{ longitude: "37"; latitude: "93"; height: "131"; }
+ ListElement{ longitude: "37"; latitude: "94"; height: "129"; }
+ ListElement{ longitude: "37"; latitude: "95"; height: "127"; }
+ ListElement{ longitude: "37"; latitude: "96"; height: "133"; }
+ ListElement{ longitude: "37"; latitude: "97"; height: "135"; }
+ ListElement{ longitude: "37"; latitude: "98"; height: "134"; }
+ ListElement{ longitude: "37"; latitude: "99"; height: "130"; }
+ ListElement{ longitude: "38"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "38"; latitude: "1"; height: "118"; }
+ ListElement{ longitude: "38"; latitude: "2"; height: "121"; }
+ ListElement{ longitude: "38"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "38"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "38"; latitude: "5"; height: "124"; }
+ ListElement{ longitude: "38"; latitude: "6"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "8"; height: "129"; }
+ ListElement{ longitude: "38"; latitude: "9"; height: "128"; }
+ ListElement{ longitude: "38"; latitude: "10"; height: "129"; }
+ ListElement{ longitude: "38"; latitude: "11"; height: "131"; }
+ ListElement{ longitude: "38"; latitude: "12"; height: "128"; }
+ ListElement{ longitude: "38"; latitude: "13"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "14"; height: "128"; }
+ ListElement{ longitude: "38"; latitude: "15"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "16"; height: "124"; }
+ ListElement{ longitude: "38"; latitude: "17"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "38"; latitude: "20"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "21"; height: "128"; }
+ ListElement{ longitude: "38"; latitude: "22"; height: "127"; }
+ ListElement{ longitude: "38"; latitude: "23"; height: "128"; }
+ ListElement{ longitude: "38"; latitude: "24"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "25"; height: "103"; }
+ ListElement{ longitude: "38"; latitude: "26"; height: "86"; }
+ ListElement{ longitude: "38"; latitude: "27"; height: "90"; }
+ ListElement{ longitude: "38"; latitude: "28"; height: "116"; }
+ ListElement{ longitude: "38"; latitude: "29"; height: "129"; }
+ ListElement{ longitude: "38"; latitude: "30"; height: "124"; }
+ ListElement{ longitude: "38"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "38"; latitude: "32"; height: "127"; }
+ ListElement{ longitude: "38"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "34"; height: "127"; }
+ ListElement{ longitude: "38"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "36"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "37"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "38"; height: "128"; }
+ ListElement{ longitude: "38"; latitude: "39"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "38"; latitude: "41"; height: "127"; }
+ ListElement{ longitude: "38"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "43"; height: "124"; }
+ ListElement{ longitude: "38"; latitude: "44"; height: "123"; }
+ ListElement{ longitude: "38"; latitude: "45"; height: "122"; }
+ ListElement{ longitude: "38"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "38"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "38"; latitude: "48"; height: "119"; }
+ ListElement{ longitude: "38"; latitude: "49"; height: "122"; }
+ ListElement{ longitude: "38"; latitude: "50"; height: "120"; }
+ ListElement{ longitude: "38"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "38"; latitude: "52"; height: "119"; }
+ ListElement{ longitude: "38"; latitude: "53"; height: "117"; }
+ ListElement{ longitude: "38"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "38"; latitude: "55"; height: "119"; }
+ ListElement{ longitude: "38"; latitude: "56"; height: "122"; }
+ ListElement{ longitude: "38"; latitude: "57"; height: "122"; }
+ ListElement{ longitude: "38"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "59"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "61"; height: "124"; }
+ ListElement{ longitude: "38"; latitude: "62"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "63"; height: "125"; }
+ ListElement{ longitude: "38"; latitude: "64"; height: "127"; }
+ ListElement{ longitude: "38"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "66"; height: "124"; }
+ ListElement{ longitude: "38"; latitude: "67"; height: "126"; }
+ ListElement{ longitude: "38"; latitude: "68"; height: "132"; }
+ ListElement{ longitude: "38"; latitude: "69"; height: "137"; }
+ ListElement{ longitude: "38"; latitude: "70"; height: "145"; }
+ ListElement{ longitude: "38"; latitude: "71"; height: "148"; }
+ ListElement{ longitude: "38"; latitude: "72"; height: "155"; }
+ ListElement{ longitude: "38"; latitude: "73"; height: "161"; }
+ ListElement{ longitude: "38"; latitude: "74"; height: "147"; }
+ ListElement{ longitude: "38"; latitude: "75"; height: "146"; }
+ ListElement{ longitude: "38"; latitude: "76"; height: "139"; }
+ ListElement{ longitude: "38"; latitude: "77"; height: "120"; }
+ ListElement{ longitude: "38"; latitude: "78"; height: "108"; }
+ ListElement{ longitude: "38"; latitude: "79"; height: "93"; }
+ ListElement{ longitude: "38"; latitude: "80"; height: "76"; }
+ ListElement{ longitude: "38"; latitude: "81"; height: "59"; }
+ ListElement{ longitude: "38"; latitude: "82"; height: "54"; }
+ ListElement{ longitude: "38"; latitude: "83"; height: "61"; }
+ ListElement{ longitude: "38"; latitude: "84"; height: "24"; }
+ ListElement{ longitude: "38"; latitude: "85"; height: "13"; }
+ ListElement{ longitude: "38"; latitude: "86"; height: "42"; }
+ ListElement{ longitude: "38"; latitude: "87"; height: "58"; }
+ ListElement{ longitude: "38"; latitude: "88"; height: "73"; }
+ ListElement{ longitude: "38"; latitude: "89"; height: "75"; }
+ ListElement{ longitude: "38"; latitude: "90"; height: "74"; }
+ ListElement{ longitude: "38"; latitude: "91"; height: "77"; }
+ ListElement{ longitude: "38"; latitude: "92"; height: "96"; }
+ ListElement{ longitude: "38"; latitude: "93"; height: "116"; }
+ ListElement{ longitude: "38"; latitude: "94"; height: "133"; }
+ ListElement{ longitude: "38"; latitude: "95"; height: "131"; }
+ ListElement{ longitude: "38"; latitude: "96"; height: "137"; }
+ ListElement{ longitude: "38"; latitude: "97"; height: "137"; }
+ ListElement{ longitude: "38"; latitude: "98"; height: "134"; }
+ ListElement{ longitude: "38"; latitude: "99"; height: "130"; }
+ ListElement{ longitude: "39"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "39"; latitude: "1"; height: "120"; }
+ ListElement{ longitude: "39"; latitude: "2"; height: "121"; }
+ ListElement{ longitude: "39"; latitude: "3"; height: "121"; }
+ ListElement{ longitude: "39"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "39"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "39"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "39"; latitude: "7"; height: "127"; }
+ ListElement{ longitude: "39"; latitude: "8"; height: "129"; }
+ ListElement{ longitude: "39"; latitude: "9"; height: "129"; }
+ ListElement{ longitude: "39"; latitude: "10"; height: "130"; }
+ ListElement{ longitude: "39"; latitude: "11"; height: "132"; }
+ ListElement{ longitude: "39"; latitude: "12"; height: "128"; }
+ ListElement{ longitude: "39"; latitude: "13"; height: "129"; }
+ ListElement{ longitude: "39"; latitude: "14"; height: "128"; }
+ ListElement{ longitude: "39"; latitude: "15"; height: "125"; }
+ ListElement{ longitude: "39"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "17"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "39"; latitude: "19"; height: "125"; }
+ ListElement{ longitude: "39"; latitude: "20"; height: "123"; }
+ ListElement{ longitude: "39"; latitude: "21"; height: "128"; }
+ ListElement{ longitude: "39"; latitude: "22"; height: "128"; }
+ ListElement{ longitude: "39"; latitude: "23"; height: "130"; }
+ ListElement{ longitude: "39"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "39"; latitude: "25"; height: "108"; }
+ ListElement{ longitude: "39"; latitude: "26"; height: "88"; }
+ ListElement{ longitude: "39"; latitude: "27"; height: "80"; }
+ ListElement{ longitude: "39"; latitude: "28"; height: "108"; }
+ ListElement{ longitude: "39"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "39"; latitude: "30"; height: "124"; }
+ ListElement{ longitude: "39"; latitude: "31"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "32"; height: "124"; }
+ ListElement{ longitude: "39"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "39"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "35"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "36"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "37"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "39"; latitude: "39"; height: "122"; }
+ ListElement{ longitude: "39"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "39"; latitude: "41"; height: "121"; }
+ ListElement{ longitude: "39"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "39"; latitude: "44"; height: "125"; }
+ ListElement{ longitude: "39"; latitude: "45"; height: "124"; }
+ ListElement{ longitude: "39"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "39"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "39"; latitude: "48"; height: "118"; }
+ ListElement{ longitude: "39"; latitude: "49"; height: "118"; }
+ ListElement{ longitude: "39"; latitude: "50"; height: "118"; }
+ ListElement{ longitude: "39"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "39"; latitude: "52"; height: "118"; }
+ ListElement{ longitude: "39"; latitude: "53"; height: "116"; }
+ ListElement{ longitude: "39"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "39"; latitude: "55"; height: "117"; }
+ ListElement{ longitude: "39"; latitude: "56"; height: "119"; }
+ ListElement{ longitude: "39"; latitude: "57"; height: "121"; }
+ ListElement{ longitude: "39"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "39"; latitude: "59"; height: "124"; }
+ ListElement{ longitude: "39"; latitude: "60"; height: "124"; }
+ ListElement{ longitude: "39"; latitude: "61"; height: "125"; }
+ ListElement{ longitude: "39"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "39"; latitude: "63"; height: "127"; }
+ ListElement{ longitude: "39"; latitude: "64"; height: "129"; }
+ ListElement{ longitude: "39"; latitude: "65"; height: "129"; }
+ ListElement{ longitude: "39"; latitude: "66"; height: "129"; }
+ ListElement{ longitude: "39"; latitude: "67"; height: "127"; }
+ ListElement{ longitude: "39"; latitude: "68"; height: "132"; }
+ ListElement{ longitude: "39"; latitude: "69"; height: "136"; }
+ ListElement{ longitude: "39"; latitude: "70"; height: "146"; }
+ ListElement{ longitude: "39"; latitude: "71"; height: "153"; }
+ ListElement{ longitude: "39"; latitude: "72"; height: "161"; }
+ ListElement{ longitude: "39"; latitude: "73"; height: "157"; }
+ ListElement{ longitude: "39"; latitude: "74"; height: "152"; }
+ ListElement{ longitude: "39"; latitude: "75"; height: "139"; }
+ ListElement{ longitude: "39"; latitude: "76"; height: "120"; }
+ ListElement{ longitude: "39"; latitude: "77"; height: "116"; }
+ ListElement{ longitude: "39"; latitude: "78"; height: "97"; }
+ ListElement{ longitude: "39"; latitude: "79"; height: "49"; }
+ ListElement{ longitude: "39"; latitude: "80"; height: "16"; }
+ ListElement{ longitude: "39"; latitude: "81"; height: "11"; }
+ ListElement{ longitude: "39"; latitude: "82"; height: "24"; }
+ ListElement{ longitude: "39"; latitude: "83"; height: "58"; }
+ ListElement{ longitude: "39"; latitude: "84"; height: "13"; }
+ ListElement{ longitude: "39"; latitude: "85"; height: "1"; }
+ ListElement{ longitude: "39"; latitude: "86"; height: "31"; }
+ ListElement{ longitude: "39"; latitude: "87"; height: "58"; }
+ ListElement{ longitude: "39"; latitude: "88"; height: "43"; }
+ ListElement{ longitude: "39"; latitude: "89"; height: "48"; }
+ ListElement{ longitude: "39"; latitude: "90"; height: "67"; }
+ ListElement{ longitude: "39"; latitude: "91"; height: "71"; }
+ ListElement{ longitude: "39"; latitude: "92"; height: "81"; }
+ ListElement{ longitude: "39"; latitude: "93"; height: "92"; }
+ ListElement{ longitude: "39"; latitude: "94"; height: "123"; }
+ ListElement{ longitude: "39"; latitude: "95"; height: "143"; }
+ ListElement{ longitude: "39"; latitude: "96"; height: "135"; }
+ ListElement{ longitude: "39"; latitude: "97"; height: "139"; }
+ ListElement{ longitude: "39"; latitude: "98"; height: "136"; }
+ ListElement{ longitude: "39"; latitude: "99"; height: "129"; }
+ ListElement{ longitude: "40"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "40"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "40"; latitude: "2"; height: "120"; }
+ ListElement{ longitude: "40"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "40"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "40"; latitude: "5"; height: "119"; }
+ ListElement{ longitude: "40"; latitude: "6"; height: "123"; }
+ ListElement{ longitude: "40"; latitude: "7"; height: "125"; }
+ ListElement{ longitude: "40"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "40"; latitude: "9"; height: "127"; }
+ ListElement{ longitude: "40"; latitude: "10"; height: "128"; }
+ ListElement{ longitude: "40"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "40"; latitude: "12"; height: "131"; }
+ ListElement{ longitude: "40"; latitude: "13"; height: "129"; }
+ ListElement{ longitude: "40"; latitude: "14"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "15"; height: "127"; }
+ ListElement{ longitude: "40"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "17"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "40"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "40"; latitude: "20"; height: "125"; }
+ ListElement{ longitude: "40"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "22"; height: "128"; }
+ ListElement{ longitude: "40"; latitude: "23"; height: "128"; }
+ ListElement{ longitude: "40"; latitude: "24"; height: "129"; }
+ ListElement{ longitude: "40"; latitude: "25"; height: "119"; }
+ ListElement{ longitude: "40"; latitude: "26"; height: "103"; }
+ ListElement{ longitude: "40"; latitude: "27"; height: "110"; }
+ ListElement{ longitude: "40"; latitude: "28"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "29"; height: "128"; }
+ ListElement{ longitude: "40"; latitude: "30"; height: "124"; }
+ ListElement{ longitude: "40"; latitude: "31"; height: "128"; }
+ ListElement{ longitude: "40"; latitude: "32"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "33"; height: "124"; }
+ ListElement{ longitude: "40"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "40"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "40"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "40"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "39"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "40"; height: "128"; }
+ ListElement{ longitude: "40"; latitude: "41"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "40"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "40"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "40"; latitude: "46"; height: "123"; }
+ ListElement{ longitude: "40"; latitude: "47"; height: "119"; }
+ ListElement{ longitude: "40"; latitude: "48"; height: "117"; }
+ ListElement{ longitude: "40"; latitude: "49"; height: "117"; }
+ ListElement{ longitude: "40"; latitude: "50"; height: "117"; }
+ ListElement{ longitude: "40"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "40"; latitude: "52"; height: "120"; }
+ ListElement{ longitude: "40"; latitude: "53"; height: "120"; }
+ ListElement{ longitude: "40"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "40"; latitude: "55"; height: "119"; }
+ ListElement{ longitude: "40"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "40"; latitude: "57"; height: "121"; }
+ ListElement{ longitude: "40"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "40"; latitude: "59"; height: "124"; }
+ ListElement{ longitude: "40"; latitude: "60"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "61"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "62"; height: "129"; }
+ ListElement{ longitude: "40"; latitude: "63"; height: "129"; }
+ ListElement{ longitude: "40"; latitude: "64"; height: "133"; }
+ ListElement{ longitude: "40"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "40"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "40"; latitude: "67"; height: "131"; }
+ ListElement{ longitude: "40"; latitude: "68"; height: "134"; }
+ ListElement{ longitude: "40"; latitude: "69"; height: "139"; }
+ ListElement{ longitude: "40"; latitude: "70"; height: "146"; }
+ ListElement{ longitude: "40"; latitude: "71"; height: "157"; }
+ ListElement{ longitude: "40"; latitude: "72"; height: "166"; }
+ ListElement{ longitude: "40"; latitude: "73"; height: "159"; }
+ ListElement{ longitude: "40"; latitude: "74"; height: "151"; }
+ ListElement{ longitude: "40"; latitude: "75"; height: "130"; }
+ ListElement{ longitude: "40"; latitude: "76"; height: "117"; }
+ ListElement{ longitude: "40"; latitude: "77"; height: "98"; }
+ ListElement{ longitude: "40"; latitude: "78"; height: "82"; }
+ ListElement{ longitude: "40"; latitude: "79"; height: "73"; }
+ ListElement{ longitude: "40"; latitude: "80"; height: "49"; }
+ ListElement{ longitude: "40"; latitude: "81"; height: "1"; }
+ ListElement{ longitude: "40"; latitude: "82"; height: "1"; }
+ ListElement{ longitude: "40"; latitude: "83"; height: "1"; }
+ ListElement{ longitude: "40"; latitude: "84"; height: "27"; }
+ ListElement{ longitude: "40"; latitude: "85"; height: "10"; }
+ ListElement{ longitude: "40"; latitude: "86"; height: "17"; }
+ ListElement{ longitude: "40"; latitude: "87"; height: "24"; }
+ ListElement{ longitude: "40"; latitude: "88"; height: "16"; }
+ ListElement{ longitude: "40"; latitude: "89"; height: "35"; }
+ ListElement{ longitude: "40"; latitude: "90"; height: "58"; }
+ ListElement{ longitude: "40"; latitude: "91"; height: "66"; }
+ ListElement{ longitude: "40"; latitude: "92"; height: "78"; }
+ ListElement{ longitude: "40"; latitude: "93"; height: "88"; }
+ ListElement{ longitude: "40"; latitude: "94"; height: "107"; }
+ ListElement{ longitude: "40"; latitude: "95"; height: "139"; }
+ ListElement{ longitude: "40"; latitude: "96"; height: "131"; }
+ ListElement{ longitude: "40"; latitude: "97"; height: "133"; }
+ ListElement{ longitude: "40"; latitude: "98"; height: "133"; }
+ ListElement{ longitude: "40"; latitude: "99"; height: "129"; }
+ ListElement{ longitude: "41"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "41"; latitude: "1"; height: "123"; }
+ ListElement{ longitude: "41"; latitude: "2"; height: "123"; }
+ ListElement{ longitude: "41"; latitude: "3"; height: "121"; }
+ ListElement{ longitude: "41"; latitude: "4"; height: "122"; }
+ ListElement{ longitude: "41"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "41"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "41"; latitude: "7"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "41"; latitude: "9"; height: "129"; }
+ ListElement{ longitude: "41"; latitude: "10"; height: "128"; }
+ ListElement{ longitude: "41"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "41"; latitude: "12"; height: "131"; }
+ ListElement{ longitude: "41"; latitude: "13"; height: "120"; }
+ ListElement{ longitude: "41"; latitude: "14"; height: "112"; }
+ ListElement{ longitude: "41"; latitude: "15"; height: "122"; }
+ ListElement{ longitude: "41"; latitude: "16"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "17"; height: "126"; }
+ ListElement{ longitude: "41"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "41"; latitude: "20"; height: "126"; }
+ ListElement{ longitude: "41"; latitude: "21"; height: "128"; }
+ ListElement{ longitude: "41"; latitude: "22"; height: "128"; }
+ ListElement{ longitude: "41"; latitude: "23"; height: "126"; }
+ ListElement{ longitude: "41"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "41"; latitude: "25"; height: "131"; }
+ ListElement{ longitude: "41"; latitude: "26"; height: "131"; }
+ ListElement{ longitude: "41"; latitude: "27"; height: "129"; }
+ ListElement{ longitude: "41"; latitude: "28"; height: "129"; }
+ ListElement{ longitude: "41"; latitude: "29"; height: "126"; }
+ ListElement{ longitude: "41"; latitude: "30"; height: "124"; }
+ ListElement{ longitude: "41"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "41"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "33"; height: "126"; }
+ ListElement{ longitude: "41"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "41"; latitude: "35"; height: "123"; }
+ ListElement{ longitude: "41"; latitude: "36"; height: "118"; }
+ ListElement{ longitude: "41"; latitude: "37"; height: "123"; }
+ ListElement{ longitude: "41"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "39"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "40"; height: "124"; }
+ ListElement{ longitude: "41"; latitude: "41"; height: "124"; }
+ ListElement{ longitude: "41"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "41"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "41"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "41"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "41"; latitude: "47"; height: "119"; }
+ ListElement{ longitude: "41"; latitude: "48"; height: "117"; }
+ ListElement{ longitude: "41"; latitude: "49"; height: "116"; }
+ ListElement{ longitude: "41"; latitude: "50"; height: "117"; }
+ ListElement{ longitude: "41"; latitude: "51"; height: "118"; }
+ ListElement{ longitude: "41"; latitude: "52"; height: "119"; }
+ ListElement{ longitude: "41"; latitude: "53"; height: "120"; }
+ ListElement{ longitude: "41"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "41"; latitude: "55"; height: "118"; }
+ ListElement{ longitude: "41"; latitude: "56"; height: "120"; }
+ ListElement{ longitude: "41"; latitude: "57"; height: "122"; }
+ ListElement{ longitude: "41"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "59"; height: "124"; }
+ ListElement{ longitude: "41"; latitude: "60"; height: "126"; }
+ ListElement{ longitude: "41"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "41"; latitude: "62"; height: "130"; }
+ ListElement{ longitude: "41"; latitude: "63"; height: "130"; }
+ ListElement{ longitude: "41"; latitude: "64"; height: "135"; }
+ ListElement{ longitude: "41"; latitude: "65"; height: "135"; }
+ ListElement{ longitude: "41"; latitude: "66"; height: "137"; }
+ ListElement{ longitude: "41"; latitude: "67"; height: "136"; }
+ ListElement{ longitude: "41"; latitude: "68"; height: "135"; }
+ ListElement{ longitude: "41"; latitude: "69"; height: "141"; }
+ ListElement{ longitude: "41"; latitude: "70"; height: "148"; }
+ ListElement{ longitude: "41"; latitude: "71"; height: "159"; }
+ ListElement{ longitude: "41"; latitude: "72"; height: "160"; }
+ ListElement{ longitude: "41"; latitude: "73"; height: "160"; }
+ ListElement{ longitude: "41"; latitude: "74"; height: "148"; }
+ ListElement{ longitude: "41"; latitude: "75"; height: "122"; }
+ ListElement{ longitude: "41"; latitude: "76"; height: "75"; }
+ ListElement{ longitude: "41"; latitude: "77"; height: "4"; }
+ ListElement{ longitude: "41"; latitude: "78"; height: "50"; }
+ ListElement{ longitude: "41"; latitude: "79"; height: "50"; }
+ ListElement{ longitude: "41"; latitude: "80"; height: "46"; }
+ ListElement{ longitude: "41"; latitude: "81"; height: "3"; }
+ ListElement{ longitude: "41"; latitude: "82"; height: "1"; }
+ ListElement{ longitude: "41"; latitude: "83"; height: "1"; }
+ ListElement{ longitude: "41"; latitude: "84"; height: "19"; }
+ ListElement{ longitude: "41"; latitude: "85"; height: "16"; }
+ ListElement{ longitude: "41"; latitude: "86"; height: "1"; }
+ ListElement{ longitude: "41"; latitude: "87"; height: "4"; }
+ ListElement{ longitude: "41"; latitude: "88"; height: "30"; }
+ ListElement{ longitude: "41"; latitude: "89"; height: "18"; }
+ ListElement{ longitude: "41"; latitude: "90"; height: "19"; }
+ ListElement{ longitude: "41"; latitude: "91"; height: "40"; }
+ ListElement{ longitude: "41"; latitude: "92"; height: "64"; }
+ ListElement{ longitude: "41"; latitude: "93"; height: "80"; }
+ ListElement{ longitude: "41"; latitude: "94"; height: "102"; }
+ ListElement{ longitude: "41"; latitude: "95"; height: "125"; }
+ ListElement{ longitude: "41"; latitude: "96"; height: "143"; }
+ ListElement{ longitude: "41"; latitude: "97"; height: "138"; }
+ ListElement{ longitude: "41"; latitude: "98"; height: "131"; }
+ ListElement{ longitude: "41"; latitude: "99"; height: "130"; }
+ ListElement{ longitude: "42"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "42"; latitude: "1"; height: "124"; }
+ ListElement{ longitude: "42"; latitude: "2"; height: "124"; }
+ ListElement{ longitude: "42"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "4"; height: "121"; }
+ ListElement{ longitude: "42"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "42"; latitude: "6"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "7"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "8"; height: "129"; }
+ ListElement{ longitude: "42"; latitude: "9"; height: "128"; }
+ ListElement{ longitude: "42"; latitude: "10"; height: "128"; }
+ ListElement{ longitude: "42"; latitude: "11"; height: "130"; }
+ ListElement{ longitude: "42"; latitude: "12"; height: "131"; }
+ ListElement{ longitude: "42"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "14"; height: "120"; }
+ ListElement{ longitude: "42"; latitude: "15"; height: "122"; }
+ ListElement{ longitude: "42"; latitude: "16"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "17"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "42"; latitude: "20"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "21"; height: "128"; }
+ ListElement{ longitude: "42"; latitude: "22"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "23"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "42"; latitude: "25"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "42"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "42"; latitude: "28"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "29"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "30"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "42"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "33"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "35"; height: "127"; }
+ ListElement{ longitude: "42"; latitude: "36"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "37"; height: "120"; }
+ ListElement{ longitude: "42"; latitude: "38"; height: "122"; }
+ ListElement{ longitude: "42"; latitude: "39"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "42"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "42"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "42"; latitude: "47"; height: "119"; }
+ ListElement{ longitude: "42"; latitude: "48"; height: "117"; }
+ ListElement{ longitude: "42"; latitude: "49"; height: "116"; }
+ ListElement{ longitude: "42"; latitude: "50"; height: "117"; }
+ ListElement{ longitude: "42"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "42"; latitude: "52"; height: "122"; }
+ ListElement{ longitude: "42"; latitude: "53"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "54"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "55"; height: "121"; }
+ ListElement{ longitude: "42"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "42"; latitude: "57"; height: "124"; }
+ ListElement{ longitude: "42"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "59"; height: "124"; }
+ ListElement{ longitude: "42"; latitude: "60"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "61"; height: "125"; }
+ ListElement{ longitude: "42"; latitude: "62"; height: "129"; }
+ ListElement{ longitude: "42"; latitude: "63"; height: "132"; }
+ ListElement{ longitude: "42"; latitude: "64"; height: "137"; }
+ ListElement{ longitude: "42"; latitude: "65"; height: "137"; }
+ ListElement{ longitude: "42"; latitude: "66"; height: "139"; }
+ ListElement{ longitude: "42"; latitude: "67"; height: "135"; }
+ ListElement{ longitude: "42"; latitude: "68"; height: "133"; }
+ ListElement{ longitude: "42"; latitude: "69"; height: "132"; }
+ ListElement{ longitude: "42"; latitude: "70"; height: "141"; }
+ ListElement{ longitude: "42"; latitude: "71"; height: "160"; }
+ ListElement{ longitude: "42"; latitude: "72"; height: "156"; }
+ ListElement{ longitude: "42"; latitude: "73"; height: "159"; }
+ ListElement{ longitude: "42"; latitude: "74"; height: "143"; }
+ ListElement{ longitude: "42"; latitude: "75"; height: "126"; }
+ ListElement{ longitude: "42"; latitude: "76"; height: "72"; }
+ ListElement{ longitude: "42"; latitude: "77"; height: "1"; }
+ ListElement{ longitude: "42"; latitude: "78"; height: "1"; }
+ ListElement{ longitude: "42"; latitude: "79"; height: "1"; }
+ ListElement{ longitude: "42"; latitude: "80"; height: "17"; }
+ ListElement{ longitude: "42"; latitude: "81"; height: "12"; }
+ ListElement{ longitude: "42"; latitude: "82"; height: "1"; }
+ ListElement{ longitude: "42"; latitude: "83"; height: "2"; }
+ ListElement{ longitude: "42"; latitude: "84"; height: "1"; }
+ ListElement{ longitude: "42"; latitude: "85"; height: "1"; }
+ ListElement{ longitude: "42"; latitude: "86"; height: "20"; }
+ ListElement{ longitude: "42"; latitude: "87"; height: "7"; }
+ ListElement{ longitude: "42"; latitude: "88"; height: "20"; }
+ ListElement{ longitude: "42"; latitude: "89"; height: "1"; }
+ ListElement{ longitude: "42"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "42"; latitude: "91"; height: "34"; }
+ ListElement{ longitude: "42"; latitude: "92"; height: "55"; }
+ ListElement{ longitude: "42"; latitude: "93"; height: "74"; }
+ ListElement{ longitude: "42"; latitude: "94"; height: "91"; }
+ ListElement{ longitude: "42"; latitude: "95"; height: "133"; }
+ ListElement{ longitude: "42"; latitude: "96"; height: "145"; }
+ ListElement{ longitude: "42"; latitude: "97"; height: "139"; }
+ ListElement{ longitude: "42"; latitude: "98"; height: "133"; }
+ ListElement{ longitude: "42"; latitude: "99"; height: "128"; }
+ ListElement{ longitude: "43"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "43"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "43"; latitude: "2"; height: "124"; }
+ ListElement{ longitude: "43"; latitude: "3"; height: "122"; }
+ ListElement{ longitude: "43"; latitude: "4"; height: "123"; }
+ ListElement{ longitude: "43"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "43"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "43"; latitude: "7"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "8"; height: "131"; }
+ ListElement{ longitude: "43"; latitude: "9"; height: "130"; }
+ ListElement{ longitude: "43"; latitude: "10"; height: "128"; }
+ ListElement{ longitude: "43"; latitude: "11"; height: "128"; }
+ ListElement{ longitude: "43"; latitude: "12"; height: "129"; }
+ ListElement{ longitude: "43"; latitude: "13"; height: "128"; }
+ ListElement{ longitude: "43"; latitude: "14"; height: "124"; }
+ ListElement{ longitude: "43"; latitude: "15"; height: "124"; }
+ ListElement{ longitude: "43"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "43"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "43"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "20"; height: "126"; }
+ ListElement{ longitude: "43"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "43"; latitude: "22"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "23"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "30"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "43"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "43"; latitude: "33"; height: "126"; }
+ ListElement{ longitude: "43"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "43"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "43"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "43"; latitude: "37"; height: "120"; }
+ ListElement{ longitude: "43"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "43"; latitude: "39"; height: "122"; }
+ ListElement{ longitude: "43"; latitude: "40"; height: "122"; }
+ ListElement{ longitude: "43"; latitude: "41"; height: "123"; }
+ ListElement{ longitude: "43"; latitude: "42"; height: "124"; }
+ ListElement{ longitude: "43"; latitude: "43"; height: "125"; }
+ ListElement{ longitude: "43"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "43"; latitude: "45"; height: "124"; }
+ ListElement{ longitude: "43"; latitude: "46"; height: "120"; }
+ ListElement{ longitude: "43"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "43"; latitude: "48"; height: "118"; }
+ ListElement{ longitude: "43"; latitude: "49"; height: "117"; }
+ ListElement{ longitude: "43"; latitude: "50"; height: "117"; }
+ ListElement{ longitude: "43"; latitude: "51"; height: "119"; }
+ ListElement{ longitude: "43"; latitude: "52"; height: "123"; }
+ ListElement{ longitude: "43"; latitude: "53"; height: "126"; }
+ ListElement{ longitude: "43"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "43"; latitude: "55"; height: "123"; }
+ ListElement{ longitude: "43"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "43"; latitude: "57"; height: "122"; }
+ ListElement{ longitude: "43"; latitude: "58"; height: "125"; }
+ ListElement{ longitude: "43"; latitude: "59"; height: "125"; }
+ ListElement{ longitude: "43"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "43"; latitude: "61"; height: "124"; }
+ ListElement{ longitude: "43"; latitude: "62"; height: "126"; }
+ ListElement{ longitude: "43"; latitude: "63"; height: "131"; }
+ ListElement{ longitude: "43"; latitude: "64"; height: "135"; }
+ ListElement{ longitude: "43"; latitude: "65"; height: "139"; }
+ ListElement{ longitude: "43"; latitude: "66"; height: "140"; }
+ ListElement{ longitude: "43"; latitude: "67"; height: "137"; }
+ ListElement{ longitude: "43"; latitude: "68"; height: "139"; }
+ ListElement{ longitude: "43"; latitude: "69"; height: "138"; }
+ ListElement{ longitude: "43"; latitude: "70"; height: "145"; }
+ ListElement{ longitude: "43"; latitude: "71"; height: "162"; }
+ ListElement{ longitude: "43"; latitude: "72"; height: "154"; }
+ ListElement{ longitude: "43"; latitude: "73"; height: "153"; }
+ ListElement{ longitude: "43"; latitude: "74"; height: "136"; }
+ ListElement{ longitude: "43"; latitude: "75"; height: "132"; }
+ ListElement{ longitude: "43"; latitude: "76"; height: "101"; }
+ ListElement{ longitude: "43"; latitude: "77"; height: "32"; }
+ ListElement{ longitude: "43"; latitude: "78"; height: "1"; }
+ ListElement{ longitude: "43"; latitude: "79"; height: "1"; }
+ ListElement{ longitude: "43"; latitude: "80"; height: "23"; }
+ ListElement{ longitude: "43"; latitude: "81"; height: "51"; }
+ ListElement{ longitude: "43"; latitude: "82"; height: "50"; }
+ ListElement{ longitude: "43"; latitude: "83"; height: "65"; }
+ ListElement{ longitude: "43"; latitude: "84"; height: "30"; }
+ ListElement{ longitude: "43"; latitude: "85"; height: "16"; }
+ ListElement{ longitude: "43"; latitude: "86"; height: "1"; }
+ ListElement{ longitude: "43"; latitude: "87"; height: "1"; }
+ ListElement{ longitude: "43"; latitude: "88"; height: "8"; }
+ ListElement{ longitude: "43"; latitude: "89"; height: "2"; }
+ ListElement{ longitude: "43"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "43"; latitude: "91"; height: "22"; }
+ ListElement{ longitude: "43"; latitude: "92"; height: "42"; }
+ ListElement{ longitude: "43"; latitude: "93"; height: "71"; }
+ ListElement{ longitude: "43"; latitude: "94"; height: "86"; }
+ ListElement{ longitude: "43"; latitude: "95"; height: "109"; }
+ ListElement{ longitude: "43"; latitude: "96"; height: "139"; }
+ ListElement{ longitude: "43"; latitude: "97"; height: "140"; }
+ ListElement{ longitude: "43"; latitude: "98"; height: "131"; }
+ ListElement{ longitude: "43"; latitude: "99"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "44"; latitude: "1"; height: "123"; }
+ ListElement{ longitude: "44"; latitude: "2"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "3"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "4"; height: "122"; }
+ ListElement{ longitude: "44"; latitude: "5"; height: "123"; }
+ ListElement{ longitude: "44"; latitude: "6"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "8"; height: "129"; }
+ ListElement{ longitude: "44"; latitude: "9"; height: "130"; }
+ ListElement{ longitude: "44"; latitude: "10"; height: "128"; }
+ ListElement{ longitude: "44"; latitude: "11"; height: "129"; }
+ ListElement{ longitude: "44"; latitude: "12"; height: "129"; }
+ ListElement{ longitude: "44"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "14"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "15"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "16"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "17"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "20"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "21"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "22"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "23"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "30"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "44"; latitude: "33"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "38"; height: "127"; }
+ ListElement{ longitude: "44"; latitude: "39"; height: "121"; }
+ ListElement{ longitude: "44"; latitude: "40"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "41"; height: "123"; }
+ ListElement{ longitude: "44"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "44"; latitude: "45"; height: "122"; }
+ ListElement{ longitude: "44"; latitude: "46"; height: "120"; }
+ ListElement{ longitude: "44"; latitude: "47"; height: "122"; }
+ ListElement{ longitude: "44"; latitude: "48"; height: "121"; }
+ ListElement{ longitude: "44"; latitude: "49"; height: "118"; }
+ ListElement{ longitude: "44"; latitude: "50"; height: "118"; }
+ ListElement{ longitude: "44"; latitude: "51"; height: "121"; }
+ ListElement{ longitude: "44"; latitude: "52"; height: "121"; }
+ ListElement{ longitude: "44"; latitude: "53"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "55"; height: "122"; }
+ ListElement{ longitude: "44"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "44"; latitude: "57"; height: "122"; }
+ ListElement{ longitude: "44"; latitude: "58"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "59"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "60"; height: "124"; }
+ ListElement{ longitude: "44"; latitude: "61"; height: "122"; }
+ ListElement{ longitude: "44"; latitude: "62"; height: "125"; }
+ ListElement{ longitude: "44"; latitude: "63"; height: "129"; }
+ ListElement{ longitude: "44"; latitude: "64"; height: "134"; }
+ ListElement{ longitude: "44"; latitude: "65"; height: "139"; }
+ ListElement{ longitude: "44"; latitude: "66"; height: "139"; }
+ ListElement{ longitude: "44"; latitude: "67"; height: "138"; }
+ ListElement{ longitude: "44"; latitude: "68"; height: "131"; }
+ ListElement{ longitude: "44"; latitude: "69"; height: "130"; }
+ ListElement{ longitude: "44"; latitude: "70"; height: "133"; }
+ ListElement{ longitude: "44"; latitude: "71"; height: "157"; }
+ ListElement{ longitude: "44"; latitude: "72"; height: "153"; }
+ ListElement{ longitude: "44"; latitude: "73"; height: "148"; }
+ ListElement{ longitude: "44"; latitude: "74"; height: "123"; }
+ ListElement{ longitude: "44"; latitude: "75"; height: "108"; }
+ ListElement{ longitude: "44"; latitude: "76"; height: "85"; }
+ ListElement{ longitude: "44"; latitude: "77"; height: "19"; }
+ ListElement{ longitude: "44"; latitude: "78"; height: "1"; }
+ ListElement{ longitude: "44"; latitude: "79"; height: "48"; }
+ ListElement{ longitude: "44"; latitude: "80"; height: "102"; }
+ ListElement{ longitude: "44"; latitude: "81"; height: "112"; }
+ ListElement{ longitude: "44"; latitude: "82"; height: "99"; }
+ ListElement{ longitude: "44"; latitude: "83"; height: "90"; }
+ ListElement{ longitude: "44"; latitude: "84"; height: "71"; }
+ ListElement{ longitude: "44"; latitude: "85"; height: "26"; }
+ ListElement{ longitude: "44"; latitude: "86"; height: "14"; }
+ ListElement{ longitude: "44"; latitude: "87"; height: "1"; }
+ ListElement{ longitude: "44"; latitude: "88"; height: "2"; }
+ ListElement{ longitude: "44"; latitude: "89"; height: "5"; }
+ ListElement{ longitude: "44"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "44"; latitude: "91"; height: "8"; }
+ ListElement{ longitude: "44"; latitude: "92"; height: "51"; }
+ ListElement{ longitude: "44"; latitude: "93"; height: "67"; }
+ ListElement{ longitude: "44"; latitude: "94"; height: "90"; }
+ ListElement{ longitude: "44"; latitude: "95"; height: "102"; }
+ ListElement{ longitude: "44"; latitude: "96"; height: "132"; }
+ ListElement{ longitude: "44"; latitude: "97"; height: "149"; }
+ ListElement{ longitude: "44"; latitude: "98"; height: "145"; }
+ ListElement{ longitude: "44"; latitude: "99"; height: "128"; }
+ ListElement{ longitude: "45"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "45"; latitude: "1"; height: "121"; }
+ ListElement{ longitude: "45"; latitude: "2"; height: "124"; }
+ ListElement{ longitude: "45"; latitude: "3"; height: "122"; }
+ ListElement{ longitude: "45"; latitude: "4"; height: "122"; }
+ ListElement{ longitude: "45"; latitude: "5"; height: "123"; }
+ ListElement{ longitude: "45"; latitude: "6"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "7"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "45"; latitude: "9"; height: "129"; }
+ ListElement{ longitude: "45"; latitude: "10"; height: "129"; }
+ ListElement{ longitude: "45"; latitude: "11"; height: "129"; }
+ ListElement{ longitude: "45"; latitude: "12"; height: "130"; }
+ ListElement{ longitude: "45"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "14"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "15"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "16"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "17"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "20"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "22"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "23"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "24"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "30"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "45"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "45"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "35"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "36"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "39"; height: "123"; }
+ ListElement{ longitude: "45"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "45"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "45"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "45"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "45"; latitude: "45"; height: "120"; }
+ ListElement{ longitude: "45"; latitude: "46"; height: "120"; }
+ ListElement{ longitude: "45"; latitude: "47"; height: "122"; }
+ ListElement{ longitude: "45"; latitude: "48"; height: "121"; }
+ ListElement{ longitude: "45"; latitude: "49"; height: "120"; }
+ ListElement{ longitude: "45"; latitude: "50"; height: "118"; }
+ ListElement{ longitude: "45"; latitude: "51"; height: "121"; }
+ ListElement{ longitude: "45"; latitude: "52"; height: "122"; }
+ ListElement{ longitude: "45"; latitude: "53"; height: "123"; }
+ ListElement{ longitude: "45"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "45"; latitude: "55"; height: "123"; }
+ ListElement{ longitude: "45"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "45"; latitude: "57"; height: "123"; }
+ ListElement{ longitude: "45"; latitude: "58"; height: "121"; }
+ ListElement{ longitude: "45"; latitude: "59"; height: "122"; }
+ ListElement{ longitude: "45"; latitude: "60"; height: "120"; }
+ ListElement{ longitude: "45"; latitude: "61"; height: "119"; }
+ ListElement{ longitude: "45"; latitude: "62"; height: "120"; }
+ ListElement{ longitude: "45"; latitude: "63"; height: "123"; }
+ ListElement{ longitude: "45"; latitude: "64"; height: "128"; }
+ ListElement{ longitude: "45"; latitude: "65"; height: "132"; }
+ ListElement{ longitude: "45"; latitude: "66"; height: "133"; }
+ ListElement{ longitude: "45"; latitude: "67"; height: "133"; }
+ ListElement{ longitude: "45"; latitude: "68"; height: "131"; }
+ ListElement{ longitude: "45"; latitude: "69"; height: "128"; }
+ ListElement{ longitude: "45"; latitude: "70"; height: "131"; }
+ ListElement{ longitude: "45"; latitude: "71"; height: "156"; }
+ ListElement{ longitude: "45"; latitude: "72"; height: "148"; }
+ ListElement{ longitude: "45"; latitude: "73"; height: "148"; }
+ ListElement{ longitude: "45"; latitude: "74"; height: "117"; }
+ ListElement{ longitude: "45"; latitude: "75"; height: "86"; }
+ ListElement{ longitude: "45"; latitude: "76"; height: "72"; }
+ ListElement{ longitude: "45"; latitude: "77"; height: "42"; }
+ ListElement{ longitude: "45"; latitude: "78"; height: "42"; }
+ ListElement{ longitude: "45"; latitude: "79"; height: "84"; }
+ ListElement{ longitude: "45"; latitude: "80"; height: "116"; }
+ ListElement{ longitude: "45"; latitude: "81"; height: "95"; }
+ ListElement{ longitude: "45"; latitude: "82"; height: "94"; }
+ ListElement{ longitude: "45"; latitude: "83"; height: "84"; }
+ ListElement{ longitude: "45"; latitude: "84"; height: "63"; }
+ ListElement{ longitude: "45"; latitude: "85"; height: "21"; }
+ ListElement{ longitude: "45"; latitude: "86"; height: "18"; }
+ ListElement{ longitude: "45"; latitude: "87"; height: "1"; }
+ ListElement{ longitude: "45"; latitude: "88"; height: "1"; }
+ ListElement{ longitude: "45"; latitude: "89"; height: "2"; }
+ ListElement{ longitude: "45"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "45"; latitude: "91"; height: "1"; }
+ ListElement{ longitude: "45"; latitude: "92"; height: "39"; }
+ ListElement{ longitude: "45"; latitude: "93"; height: "58"; }
+ ListElement{ longitude: "45"; latitude: "94"; height: "90"; }
+ ListElement{ longitude: "45"; latitude: "95"; height: "103"; }
+ ListElement{ longitude: "45"; latitude: "96"; height: "136"; }
+ ListElement{ longitude: "45"; latitude: "97"; height: "149"; }
+ ListElement{ longitude: "45"; latitude: "98"; height: "140"; }
+ ListElement{ longitude: "45"; latitude: "99"; height: "128"; }
+ ListElement{ longitude: "46"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "46"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "46"; latitude: "2"; height: "123"; }
+ ListElement{ longitude: "46"; latitude: "3"; height: "122"; }
+ ListElement{ longitude: "46"; latitude: "4"; height: "122"; }
+ ListElement{ longitude: "46"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "46"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "46"; latitude: "7"; height: "125"; }
+ ListElement{ longitude: "46"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "9"; height: "129"; }
+ ListElement{ longitude: "46"; latitude: "10"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "12"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "13"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "14"; height: "125"; }
+ ListElement{ longitude: "46"; latitude: "15"; height: "125"; }
+ ListElement{ longitude: "46"; latitude: "16"; height: "125"; }
+ ListElement{ longitude: "46"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "46"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "20"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "21"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "22"; height: "128"; }
+ ListElement{ longitude: "46"; latitude: "23"; height: "128"; }
+ ListElement{ longitude: "46"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "30"; height: "125"; }
+ ListElement{ longitude: "46"; latitude: "31"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "32"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "33"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "35"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "36"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "46"; latitude: "38"; height: "128"; }
+ ListElement{ longitude: "46"; latitude: "39"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "46"; latitude: "41"; height: "124"; }
+ ListElement{ longitude: "46"; latitude: "42"; height: "124"; }
+ ListElement{ longitude: "46"; latitude: "43"; height: "124"; }
+ ListElement{ longitude: "46"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "45"; height: "124"; }
+ ListElement{ longitude: "46"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "46"; latitude: "47"; height: "122"; }
+ ListElement{ longitude: "46"; latitude: "48"; height: "119"; }
+ ListElement{ longitude: "46"; latitude: "49"; height: "117"; }
+ ListElement{ longitude: "46"; latitude: "50"; height: "119"; }
+ ListElement{ longitude: "46"; latitude: "51"; height: "119"; }
+ ListElement{ longitude: "46"; latitude: "52"; height: "122"; }
+ ListElement{ longitude: "46"; latitude: "53"; height: "123"; }
+ ListElement{ longitude: "46"; latitude: "54"; height: "123"; }
+ ListElement{ longitude: "46"; latitude: "55"; height: "122"; }
+ ListElement{ longitude: "46"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "46"; latitude: "57"; height: "121"; }
+ ListElement{ longitude: "46"; latitude: "58"; height: "121"; }
+ ListElement{ longitude: "46"; latitude: "59"; height: "121"; }
+ ListElement{ longitude: "46"; latitude: "60"; height: "118"; }
+ ListElement{ longitude: "46"; latitude: "61"; height: "119"; }
+ ListElement{ longitude: "46"; latitude: "62"; height: "116"; }
+ ListElement{ longitude: "46"; latitude: "63"; height: "118"; }
+ ListElement{ longitude: "46"; latitude: "64"; height: "123"; }
+ ListElement{ longitude: "46"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "46"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "46"; latitude: "67"; height: "129"; }
+ ListElement{ longitude: "46"; latitude: "68"; height: "130"; }
+ ListElement{ longitude: "46"; latitude: "69"; height: "131"; }
+ ListElement{ longitude: "46"; latitude: "70"; height: "137"; }
+ ListElement{ longitude: "46"; latitude: "71"; height: "156"; }
+ ListElement{ longitude: "46"; latitude: "72"; height: "151"; }
+ ListElement{ longitude: "46"; latitude: "73"; height: "152"; }
+ ListElement{ longitude: "46"; latitude: "74"; height: "120"; }
+ ListElement{ longitude: "46"; latitude: "75"; height: "85"; }
+ ListElement{ longitude: "46"; latitude: "76"; height: "46"; }
+ ListElement{ longitude: "46"; latitude: "77"; height: "1"; }
+ ListElement{ longitude: "46"; latitude: "78"; height: "1"; }
+ ListElement{ longitude: "46"; latitude: "79"; height: "67"; }
+ ListElement{ longitude: "46"; latitude: "80"; height: "98"; }
+ ListElement{ longitude: "46"; latitude: "81"; height: "68"; }
+ ListElement{ longitude: "46"; latitude: "82"; height: "62"; }
+ ListElement{ longitude: "46"; latitude: "83"; height: "62"; }
+ ListElement{ longitude: "46"; latitude: "84"; height: "77"; }
+ ListElement{ longitude: "46"; latitude: "85"; height: "33"; }
+ ListElement{ longitude: "46"; latitude: "86"; height: "20"; }
+ ListElement{ longitude: "46"; latitude: "87"; height: "1"; }
+ ListElement{ longitude: "46"; latitude: "88"; height: "1"; }
+ ListElement{ longitude: "46"; latitude: "89"; height: "1"; }
+ ListElement{ longitude: "46"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "46"; latitude: "91"; height: "1"; }
+ ListElement{ longitude: "46"; latitude: "92"; height: "41"; }
+ ListElement{ longitude: "46"; latitude: "93"; height: "70"; }
+ ListElement{ longitude: "46"; latitude: "94"; height: "89"; }
+ ListElement{ longitude: "46"; latitude: "95"; height: "108"; }
+ ListElement{ longitude: "46"; latitude: "96"; height: "129"; }
+ ListElement{ longitude: "46"; latitude: "97"; height: "153"; }
+ ListElement{ longitude: "46"; latitude: "98"; height: "141"; }
+ ListElement{ longitude: "46"; latitude: "99"; height: "129"; }
+ ListElement{ longitude: "47"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "47"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "47"; latitude: "2"; height: "123"; }
+ ListElement{ longitude: "47"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "47"; latitude: "4"; height: "123"; }
+ ListElement{ longitude: "47"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "47"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "47"; latitude: "8"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "9"; height: "128"; }
+ ListElement{ longitude: "47"; latitude: "10"; height: "128"; }
+ ListElement{ longitude: "47"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "47"; latitude: "12"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "13"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "14"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "15"; height: "126"; }
+ ListElement{ longitude: "47"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "47"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "18"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "19"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "20"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "21"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "22"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "23"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "24"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "28"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "47"; latitude: "30"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "31"; height: "126"; }
+ ListElement{ longitude: "47"; latitude: "32"; height: "124"; }
+ ListElement{ longitude: "47"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "47"; latitude: "34"; height: "123"; }
+ ListElement{ longitude: "47"; latitude: "35"; height: "122"; }
+ ListElement{ longitude: "47"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "47"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "47"; latitude: "38"; height: "123"; }
+ ListElement{ longitude: "47"; latitude: "39"; height: "123"; }
+ ListElement{ longitude: "47"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "42"; height: "124"; }
+ ListElement{ longitude: "47"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "47"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "47"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "47"; latitude: "47"; height: "120"; }
+ ListElement{ longitude: "47"; latitude: "48"; height: "119"; }
+ ListElement{ longitude: "47"; latitude: "49"; height: "121"; }
+ ListElement{ longitude: "47"; latitude: "50"; height: "122"; }
+ ListElement{ longitude: "47"; latitude: "51"; height: "122"; }
+ ListElement{ longitude: "47"; latitude: "52"; height: "122"; }
+ ListElement{ longitude: "47"; latitude: "53"; height: "120"; }
+ ListElement{ longitude: "47"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "47"; latitude: "55"; height: "118"; }
+ ListElement{ longitude: "47"; latitude: "56"; height: "117"; }
+ ListElement{ longitude: "47"; latitude: "57"; height: "117"; }
+ ListElement{ longitude: "47"; latitude: "58"; height: "119"; }
+ ListElement{ longitude: "47"; latitude: "59"; height: "119"; }
+ ListElement{ longitude: "47"; latitude: "60"; height: "117"; }
+ ListElement{ longitude: "47"; latitude: "61"; height: "114"; }
+ ListElement{ longitude: "47"; latitude: "62"; height: "111"; }
+ ListElement{ longitude: "47"; latitude: "63"; height: "113"; }
+ ListElement{ longitude: "47"; latitude: "64"; height: "115"; }
+ ListElement{ longitude: "47"; latitude: "65"; height: "118"; }
+ ListElement{ longitude: "47"; latitude: "66"; height: "121"; }
+ ListElement{ longitude: "47"; latitude: "67"; height: "122"; }
+ ListElement{ longitude: "47"; latitude: "68"; height: "125"; }
+ ListElement{ longitude: "47"; latitude: "69"; height: "128"; }
+ ListElement{ longitude: "47"; latitude: "70"; height: "138"; }
+ ListElement{ longitude: "47"; latitude: "71"; height: "161"; }
+ ListElement{ longitude: "47"; latitude: "72"; height: "157"; }
+ ListElement{ longitude: "47"; latitude: "73"; height: "158"; }
+ ListElement{ longitude: "47"; latitude: "74"; height: "120"; }
+ ListElement{ longitude: "47"; latitude: "75"; height: "98"; }
+ ListElement{ longitude: "47"; latitude: "76"; height: "38"; }
+ ListElement{ longitude: "47"; latitude: "77"; height: "4"; }
+ ListElement{ longitude: "47"; latitude: "78"; height: "16"; }
+ ListElement{ longitude: "47"; latitude: "79"; height: "36"; }
+ ListElement{ longitude: "47"; latitude: "80"; height: "103"; }
+ ListElement{ longitude: "47"; latitude: "81"; height: "83"; }
+ ListElement{ longitude: "47"; latitude: "82"; height: "47"; }
+ ListElement{ longitude: "47"; latitude: "83"; height: "72"; }
+ ListElement{ longitude: "47"; latitude: "84"; height: "97"; }
+ ListElement{ longitude: "47"; latitude: "85"; height: "22"; }
+ ListElement{ longitude: "47"; latitude: "86"; height: "18"; }
+ ListElement{ longitude: "47"; latitude: "87"; height: "2"; }
+ ListElement{ longitude: "47"; latitude: "88"; height: "1"; }
+ ListElement{ longitude: "47"; latitude: "89"; height: "1"; }
+ ListElement{ longitude: "47"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "47"; latitude: "91"; height: "1"; }
+ ListElement{ longitude: "47"; latitude: "92"; height: "43"; }
+ ListElement{ longitude: "47"; latitude: "93"; height: "76"; }
+ ListElement{ longitude: "47"; latitude: "94"; height: "91"; }
+ ListElement{ longitude: "47"; latitude: "95"; height: "106"; }
+ ListElement{ longitude: "47"; latitude: "96"; height: "143"; }
+ ListElement{ longitude: "47"; latitude: "97"; height: "155"; }
+ ListElement{ longitude: "47"; latitude: "98"; height: "141"; }
+ ListElement{ longitude: "47"; latitude: "99"; height: "131"; }
+ ListElement{ longitude: "48"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "48"; latitude: "1"; height: "123"; }
+ ListElement{ longitude: "48"; latitude: "2"; height: "123"; }
+ ListElement{ longitude: "48"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "48"; latitude: "4"; height: "119"; }
+ ListElement{ longitude: "48"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "48"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "8"; height: "127"; }
+ ListElement{ longitude: "48"; latitude: "9"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "11"; height: "127"; }
+ ListElement{ longitude: "48"; latitude: "12"; height: "127"; }
+ ListElement{ longitude: "48"; latitude: "13"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "14"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "15"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "16"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "17"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "18"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "19"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "20"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "22"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "23"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "24"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "48"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "48"; latitude: "27"; height: "127"; }
+ ListElement{ longitude: "48"; latitude: "28"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "29"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "30"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "31"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "37"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "38"; height: "120"; }
+ ListElement{ longitude: "48"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "48"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "42"; height: "124"; }
+ ListElement{ longitude: "48"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "48"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "46"; height: "119"; }
+ ListElement{ longitude: "48"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "48"; latitude: "48"; height: "121"; }
+ ListElement{ longitude: "48"; latitude: "49"; height: "122"; }
+ ListElement{ longitude: "48"; latitude: "50"; height: "123"; }
+ ListElement{ longitude: "48"; latitude: "51"; height: "123"; }
+ ListElement{ longitude: "48"; latitude: "52"; height: "122"; }
+ ListElement{ longitude: "48"; latitude: "53"; height: "120"; }
+ ListElement{ longitude: "48"; latitude: "54"; height: "118"; }
+ ListElement{ longitude: "48"; latitude: "55"; height: "115"; }
+ ListElement{ longitude: "48"; latitude: "56"; height: "115"; }
+ ListElement{ longitude: "48"; latitude: "57"; height: "115"; }
+ ListElement{ longitude: "48"; latitude: "58"; height: "116"; }
+ ListElement{ longitude: "48"; latitude: "59"; height: "116"; }
+ ListElement{ longitude: "48"; latitude: "60"; height: "113"; }
+ ListElement{ longitude: "48"; latitude: "61"; height: "113"; }
+ ListElement{ longitude: "48"; latitude: "62"; height: "110"; }
+ ListElement{ longitude: "48"; latitude: "63"; height: "108"; }
+ ListElement{ longitude: "48"; latitude: "64"; height: "109"; }
+ ListElement{ longitude: "48"; latitude: "65"; height: "115"; }
+ ListElement{ longitude: "48"; latitude: "66"; height: "116"; }
+ ListElement{ longitude: "48"; latitude: "67"; height: "118"; }
+ ListElement{ longitude: "48"; latitude: "68"; height: "121"; }
+ ListElement{ longitude: "48"; latitude: "69"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "70"; height: "120"; }
+ ListElement{ longitude: "48"; latitude: "71"; height: "145"; }
+ ListElement{ longitude: "48"; latitude: "72"; height: "154"; }
+ ListElement{ longitude: "48"; latitude: "73"; height: "153"; }
+ ListElement{ longitude: "48"; latitude: "74"; height: "125"; }
+ ListElement{ longitude: "48"; latitude: "75"; height: "106"; }
+ ListElement{ longitude: "48"; latitude: "76"; height: "52"; }
+ ListElement{ longitude: "48"; latitude: "77"; height: "6"; }
+ ListElement{ longitude: "48"; latitude: "78"; height: "6"; }
+ ListElement{ longitude: "48"; latitude: "79"; height: "1"; }
+ ListElement{ longitude: "48"; latitude: "80"; height: "67"; }
+ ListElement{ longitude: "48"; latitude: "81"; height: "81"; }
+ ListElement{ longitude: "48"; latitude: "82"; height: "57"; }
+ ListElement{ longitude: "48"; latitude: "83"; height: "93"; }
+ ListElement{ longitude: "48"; latitude: "84"; height: "58"; }
+ ListElement{ longitude: "48"; latitude: "85"; height: "16"; }
+ ListElement{ longitude: "48"; latitude: "86"; height: "1"; }
+ ListElement{ longitude: "48"; latitude: "87"; height: "1"; }
+ ListElement{ longitude: "48"; latitude: "88"; height: "2"; }
+ ListElement{ longitude: "48"; latitude: "89"; height: "1"; }
+ ListElement{ longitude: "48"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "48"; latitude: "91"; height: "1"; }
+ ListElement{ longitude: "48"; latitude: "92"; height: "45"; }
+ ListElement{ longitude: "48"; latitude: "93"; height: "80"; }
+ ListElement{ longitude: "48"; latitude: "94"; height: "91"; }
+ ListElement{ longitude: "48"; latitude: "95"; height: "97"; }
+ ListElement{ longitude: "48"; latitude: "96"; height: "136"; }
+ ListElement{ longitude: "48"; latitude: "97"; height: "148"; }
+ ListElement{ longitude: "48"; latitude: "98"; height: "140"; }
+ ListElement{ longitude: "48"; latitude: "99"; height: "131"; }
+ ListElement{ longitude: "49"; latitude: "0"; height: "123"; }
+ ListElement{ longitude: "49"; latitude: "1"; height: "123"; }
+ ListElement{ longitude: "49"; latitude: "2"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "49"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "49"; latitude: "5"; height: "119"; }
+ ListElement{ longitude: "49"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "9"; height: "129"; }
+ ListElement{ longitude: "49"; latitude: "10"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "49"; latitude: "12"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "13"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "14"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "15"; height: "126"; }
+ ListElement{ longitude: "49"; latitude: "16"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "17"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "18"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "19"; height: "123"; }
+ ListElement{ longitude: "49"; latitude: "20"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "21"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "22"; height: "123"; }
+ ListElement{ longitude: "49"; latitude: "23"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "24"; height: "126"; }
+ ListElement{ longitude: "49"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "49"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "49"; latitude: "27"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "28"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "29"; height: "121"; }
+ ListElement{ longitude: "49"; latitude: "30"; height: "123"; }
+ ListElement{ longitude: "49"; latitude: "31"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "33"; height: "123"; }
+ ListElement{ longitude: "49"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "49"; latitude: "37"; height: "122"; }
+ ListElement{ longitude: "49"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "49"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "42"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "43"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "49"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "49"; latitude: "47"; height: "118"; }
+ ListElement{ longitude: "49"; latitude: "48"; height: "118"; }
+ ListElement{ longitude: "49"; latitude: "49"; height: "121"; }
+ ListElement{ longitude: "49"; latitude: "50"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "51"; height: "125"; }
+ ListElement{ longitude: "49"; latitude: "52"; height: "120"; }
+ ListElement{ longitude: "49"; latitude: "53"; height: "117"; }
+ ListElement{ longitude: "49"; latitude: "54"; height: "116"; }
+ ListElement{ longitude: "49"; latitude: "55"; height: "111"; }
+ ListElement{ longitude: "49"; latitude: "56"; height: "110"; }
+ ListElement{ longitude: "49"; latitude: "57"; height: "108"; }
+ ListElement{ longitude: "49"; latitude: "58"; height: "112"; }
+ ListElement{ longitude: "49"; latitude: "59"; height: "113"; }
+ ListElement{ longitude: "49"; latitude: "60"; height: "113"; }
+ ListElement{ longitude: "49"; latitude: "61"; height: "110"; }
+ ListElement{ longitude: "49"; latitude: "62"; height: "107"; }
+ ListElement{ longitude: "49"; latitude: "63"; height: "108"; }
+ ListElement{ longitude: "49"; latitude: "64"; height: "107"; }
+ ListElement{ longitude: "49"; latitude: "65"; height: "110"; }
+ ListElement{ longitude: "49"; latitude: "66"; height: "113"; }
+ ListElement{ longitude: "49"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "49"; latitude: "68"; height: "118"; }
+ ListElement{ longitude: "49"; latitude: "69"; height: "124"; }
+ ListElement{ longitude: "49"; latitude: "70"; height: "130"; }
+ ListElement{ longitude: "49"; latitude: "71"; height: "138"; }
+ ListElement{ longitude: "49"; latitude: "72"; height: "153"; }
+ ListElement{ longitude: "49"; latitude: "73"; height: "156"; }
+ ListElement{ longitude: "49"; latitude: "74"; height: "148"; }
+ ListElement{ longitude: "49"; latitude: "75"; height: "112"; }
+ ListElement{ longitude: "49"; latitude: "76"; height: "83"; }
+ ListElement{ longitude: "49"; latitude: "77"; height: "31"; }
+ ListElement{ longitude: "49"; latitude: "78"; height: "1"; }
+ ListElement{ longitude: "49"; latitude: "79"; height: "9"; }
+ ListElement{ longitude: "49"; latitude: "80"; height: "36"; }
+ ListElement{ longitude: "49"; latitude: "81"; height: "12"; }
+ ListElement{ longitude: "49"; latitude: "82"; height: "15"; }
+ ListElement{ longitude: "49"; latitude: "83"; height: "23"; }
+ ListElement{ longitude: "49"; latitude: "84"; height: "22"; }
+ ListElement{ longitude: "49"; latitude: "85"; height: "9"; }
+ ListElement{ longitude: "49"; latitude: "86"; height: "1"; }
+ ListElement{ longitude: "49"; latitude: "87"; height: "1"; }
+ ListElement{ longitude: "49"; latitude: "88"; height: "1"; }
+ ListElement{ longitude: "49"; latitude: "89"; height: "1"; }
+ ListElement{ longitude: "49"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "49"; latitude: "91"; height: "5"; }
+ ListElement{ longitude: "49"; latitude: "92"; height: "22"; }
+ ListElement{ longitude: "49"; latitude: "93"; height: "64"; }
+ ListElement{ longitude: "49"; latitude: "94"; height: "87"; }
+ ListElement{ longitude: "49"; latitude: "95"; height: "89"; }
+ ListElement{ longitude: "49"; latitude: "96"; height: "131"; }
+ ListElement{ longitude: "49"; latitude: "97"; height: "139"; }
+ ListElement{ longitude: "49"; latitude: "98"; height: "136"; }
+ ListElement{ longitude: "49"; latitude: "99"; height: "129"; }
+ ListElement{ longitude: "50"; latitude: "0"; height: "123"; }
+ ListElement{ longitude: "50"; latitude: "1"; height: "123"; }
+ ListElement{ longitude: "50"; latitude: "2"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "3"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "4"; height: "123"; }
+ ListElement{ longitude: "50"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "50"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "50"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "50"; latitude: "9"; height: "127"; }
+ ListElement{ longitude: "50"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "50"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "50"; latitude: "12"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "13"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "14"; height: "120"; }
+ ListElement{ longitude: "50"; latitude: "15"; height: "118"; }
+ ListElement{ longitude: "50"; latitude: "16"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "17"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "18"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "19"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "20"; height: "119"; }
+ ListElement{ longitude: "50"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "23"; height: "123"; }
+ ListElement{ longitude: "50"; latitude: "24"; height: "126"; }
+ ListElement{ longitude: "50"; latitude: "25"; height: "127"; }
+ ListElement{ longitude: "50"; latitude: "26"; height: "127"; }
+ ListElement{ longitude: "50"; latitude: "27"; height: "126"; }
+ ListElement{ longitude: "50"; latitude: "28"; height: "125"; }
+ ListElement{ longitude: "50"; latitude: "29"; height: "120"; }
+ ListElement{ longitude: "50"; latitude: "30"; height: "123"; }
+ ListElement{ longitude: "50"; latitude: "31"; height: "125"; }
+ ListElement{ longitude: "50"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "50"; latitude: "33"; height: "119"; }
+ ListElement{ longitude: "50"; latitude: "34"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "35"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "37"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "38"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "39"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "40"; height: "120"; }
+ ListElement{ longitude: "50"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "50"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "50"; latitude: "43"; height: "124"; }
+ ListElement{ longitude: "50"; latitude: "44"; height: "124"; }
+ ListElement{ longitude: "50"; latitude: "45"; height: "126"; }
+ ListElement{ longitude: "50"; latitude: "46"; height: "124"; }
+ ListElement{ longitude: "50"; latitude: "47"; height: "123"; }
+ ListElement{ longitude: "50"; latitude: "48"; height: "122"; }
+ ListElement{ longitude: "50"; latitude: "49"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "50"; height: "123"; }
+ ListElement{ longitude: "50"; latitude: "51"; height: "123"; }
+ ListElement{ longitude: "50"; latitude: "52"; height: "121"; }
+ ListElement{ longitude: "50"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "50"; latitude: "54"; height: "112"; }
+ ListElement{ longitude: "50"; latitude: "55"; height: "107"; }
+ ListElement{ longitude: "50"; latitude: "56"; height: "108"; }
+ ListElement{ longitude: "50"; latitude: "57"; height: "106"; }
+ ListElement{ longitude: "50"; latitude: "58"; height: "107"; }
+ ListElement{ longitude: "50"; latitude: "59"; height: "111"; }
+ ListElement{ longitude: "50"; latitude: "60"; height: "110"; }
+ ListElement{ longitude: "50"; latitude: "61"; height: "111"; }
+ ListElement{ longitude: "50"; latitude: "62"; height: "108"; }
+ ListElement{ longitude: "50"; latitude: "63"; height: "108"; }
+ ListElement{ longitude: "50"; latitude: "64"; height: "108"; }
+ ListElement{ longitude: "50"; latitude: "65"; height: "111"; }
+ ListElement{ longitude: "50"; latitude: "66"; height: "111"; }
+ ListElement{ longitude: "50"; latitude: "67"; height: "114"; }
+ ListElement{ longitude: "50"; latitude: "68"; height: "117"; }
+ ListElement{ longitude: "50"; latitude: "69"; height: "120"; }
+ ListElement{ longitude: "50"; latitude: "70"; height: "124"; }
+ ListElement{ longitude: "50"; latitude: "71"; height: "124"; }
+ ListElement{ longitude: "50"; latitude: "72"; height: "141"; }
+ ListElement{ longitude: "50"; latitude: "73"; height: "150"; }
+ ListElement{ longitude: "50"; latitude: "74"; height: "153"; }
+ ListElement{ longitude: "50"; latitude: "75"; height: "118"; }
+ ListElement{ longitude: "50"; latitude: "76"; height: "85"; }
+ ListElement{ longitude: "50"; latitude: "77"; height: "65"; }
+ ListElement{ longitude: "50"; latitude: "78"; height: "19"; }
+ ListElement{ longitude: "50"; latitude: "79"; height: "18"; }
+ ListElement{ longitude: "50"; latitude: "80"; height: "28"; }
+ ListElement{ longitude: "50"; latitude: "81"; height: "3"; }
+ ListElement{ longitude: "50"; latitude: "82"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "83"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "84"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "85"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "86"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "87"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "88"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "89"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "90"; height: "1"; }
+ ListElement{ longitude: "50"; latitude: "91"; height: "19"; }
+ ListElement{ longitude: "50"; latitude: "92"; height: "10"; }
+ ListElement{ longitude: "50"; latitude: "93"; height: "59"; }
+ ListElement{ longitude: "50"; latitude: "94"; height: "72"; }
+ ListElement{ longitude: "50"; latitude: "95"; height: "95"; }
+ ListElement{ longitude: "50"; latitude: "96"; height: "127"; }
+ ListElement{ longitude: "50"; latitude: "97"; height: "129"; }
+ ListElement{ longitude: "50"; latitude: "98"; height: "132"; }
+ ListElement{ longitude: "50"; latitude: "99"; height: "126"; }
+ ListElement{ longitude: "51"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "1"; height: "124"; }
+ ListElement{ longitude: "51"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "4"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "51"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "51"; latitude: "11"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "12"; height: "121"; }
+ ListElement{ longitude: "51"; latitude: "13"; height: "120"; }
+ ListElement{ longitude: "51"; latitude: "14"; height: "119"; }
+ ListElement{ longitude: "51"; latitude: "15"; height: "119"; }
+ ListElement{ longitude: "51"; latitude: "16"; height: "120"; }
+ ListElement{ longitude: "51"; latitude: "17"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "18"; height: "121"; }
+ ListElement{ longitude: "51"; latitude: "19"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "20"; height: "118"; }
+ ListElement{ longitude: "51"; latitude: "21"; height: "120"; }
+ ListElement{ longitude: "51"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "51"; latitude: "23"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "24"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "25"; height: "126"; }
+ ListElement{ longitude: "51"; latitude: "26"; height: "126"; }
+ ListElement{ longitude: "51"; latitude: "27"; height: "124"; }
+ ListElement{ longitude: "51"; latitude: "28"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "29"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "30"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "31"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "51"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "37"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "38"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "39"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "40"; height: "124"; }
+ ListElement{ longitude: "51"; latitude: "41"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "42"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "51"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "51"; latitude: "45"; height: "126"; }
+ ListElement{ longitude: "51"; latitude: "46"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "47"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "48"; height: "119"; }
+ ListElement{ longitude: "51"; latitude: "49"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "50"; height: "123"; }
+ ListElement{ longitude: "51"; latitude: "51"; height: "124"; }
+ ListElement{ longitude: "51"; latitude: "52"; height: "120"; }
+ ListElement{ longitude: "51"; latitude: "53"; height: "117"; }
+ ListElement{ longitude: "51"; latitude: "54"; height: "111"; }
+ ListElement{ longitude: "51"; latitude: "55"; height: "105"; }
+ ListElement{ longitude: "51"; latitude: "56"; height: "102"; }
+ ListElement{ longitude: "51"; latitude: "57"; height: "102"; }
+ ListElement{ longitude: "51"; latitude: "58"; height: "105"; }
+ ListElement{ longitude: "51"; latitude: "59"; height: "111"; }
+ ListElement{ longitude: "51"; latitude: "60"; height: "111"; }
+ ListElement{ longitude: "51"; latitude: "61"; height: "113"; }
+ ListElement{ longitude: "51"; latitude: "62"; height: "109"; }
+ ListElement{ longitude: "51"; latitude: "63"; height: "109"; }
+ ListElement{ longitude: "51"; latitude: "64"; height: "109"; }
+ ListElement{ longitude: "51"; latitude: "65"; height: "110"; }
+ ListElement{ longitude: "51"; latitude: "66"; height: "110"; }
+ ListElement{ longitude: "51"; latitude: "67"; height: "115"; }
+ ListElement{ longitude: "51"; latitude: "68"; height: "116"; }
+ ListElement{ longitude: "51"; latitude: "69"; height: "118"; }
+ ListElement{ longitude: "51"; latitude: "70"; height: "122"; }
+ ListElement{ longitude: "51"; latitude: "71"; height: "121"; }
+ ListElement{ longitude: "51"; latitude: "72"; height: "133"; }
+ ListElement{ longitude: "51"; latitude: "73"; height: "151"; }
+ ListElement{ longitude: "51"; latitude: "74"; height: "153"; }
+ ListElement{ longitude: "51"; latitude: "75"; height: "138"; }
+ ListElement{ longitude: "51"; latitude: "76"; height: "98"; }
+ ListElement{ longitude: "51"; latitude: "77"; height: "64"; }
+ ListElement{ longitude: "51"; latitude: "78"; height: "32"; }
+ ListElement{ longitude: "51"; latitude: "79"; height: "1"; }
+ ListElement{ longitude: "51"; latitude: "80"; height: "1"; }
+ ListElement{ longitude: "51"; latitude: "81"; height: "1"; }
+ ListElement{ longitude: "51"; latitude: "82"; height: "1"; }
+ ListElement{ longitude: "51"; latitude: "83"; height: "6"; }
+ ListElement{ longitude: "51"; latitude: "84"; height: "8"; }
+ ListElement{ longitude: "51"; latitude: "85"; height: "1"; }
+ ListElement{ longitude: "51"; latitude: "86"; height: "1"; }
+ ListElement{ longitude: "51"; latitude: "87"; height: "1"; }
+ ListElement{ longitude: "51"; latitude: "88"; height: "1"; }
+ ListElement{ longitude: "51"; latitude: "89"; height: "13"; }
+ ListElement{ longitude: "51"; latitude: "90"; height: "15"; }
+ ListElement{ longitude: "51"; latitude: "91"; height: "22"; }
+ ListElement{ longitude: "51"; latitude: "92"; height: "33"; }
+ ListElement{ longitude: "51"; latitude: "93"; height: "67"; }
+ ListElement{ longitude: "51"; latitude: "94"; height: "69"; }
+ ListElement{ longitude: "51"; latitude: "95"; height: "110"; }
+ ListElement{ longitude: "51"; latitude: "96"; height: "125"; }
+ ListElement{ longitude: "51"; latitude: "97"; height: "127"; }
+ ListElement{ longitude: "51"; latitude: "98"; height: "131"; }
+ ListElement{ longitude: "51"; latitude: "99"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "0"; height: "121"; }
+ ListElement{ longitude: "52"; latitude: "1"; height: "119"; }
+ ListElement{ longitude: "52"; latitude: "2"; height: "117"; }
+ ListElement{ longitude: "52"; latitude: "3"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "4"; height: "123"; }
+ ListElement{ longitude: "52"; latitude: "5"; height: "126"; }
+ ListElement{ longitude: "52"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "52"; latitude: "8"; height: "127"; }
+ ListElement{ longitude: "52"; latitude: "9"; height: "127"; }
+ ListElement{ longitude: "52"; latitude: "10"; height: "127"; }
+ ListElement{ longitude: "52"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "12"; height: "123"; }
+ ListElement{ longitude: "52"; latitude: "13"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "14"; height: "121"; }
+ ListElement{ longitude: "52"; latitude: "15"; height: "121"; }
+ ListElement{ longitude: "52"; latitude: "16"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "17"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "18"; height: "120"; }
+ ListElement{ longitude: "52"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "52"; latitude: "20"; height: "121"; }
+ ListElement{ longitude: "52"; latitude: "21"; height: "120"; }
+ ListElement{ longitude: "52"; latitude: "22"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "23"; height: "121"; }
+ ListElement{ longitude: "52"; latitude: "24"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "25"; height: "126"; }
+ ListElement{ longitude: "52"; latitude: "26"; height: "126"; }
+ ListElement{ longitude: "52"; latitude: "27"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "28"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "29"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "52"; latitude: "31"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "37"; height: "121"; }
+ ListElement{ longitude: "52"; latitude: "38"; height: "123"; }
+ ListElement{ longitude: "52"; latitude: "39"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "40"; height: "122"; }
+ ListElement{ longitude: "52"; latitude: "41"; height: "120"; }
+ ListElement{ longitude: "52"; latitude: "42"; height: "125"; }
+ ListElement{ longitude: "52"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "52"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "52"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "52"; latitude: "46"; height: "126"; }
+ ListElement{ longitude: "52"; latitude: "47"; height: "124"; }
+ ListElement{ longitude: "52"; latitude: "48"; height: "123"; }
+ ListElement{ longitude: "52"; latitude: "49"; height: "124"; }
+ ListElement{ longitude: "52"; latitude: "50"; height: "123"; }
+ ListElement{ longitude: "52"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "52"; latitude: "52"; height: "119"; }
+ ListElement{ longitude: "52"; latitude: "53"; height: "116"; }
+ ListElement{ longitude: "52"; latitude: "54"; height: "110"; }
+ ListElement{ longitude: "52"; latitude: "55"; height: "106"; }
+ ListElement{ longitude: "52"; latitude: "56"; height: "101"; }
+ ListElement{ longitude: "52"; latitude: "57"; height: "101"; }
+ ListElement{ longitude: "52"; latitude: "58"; height: "104"; }
+ ListElement{ longitude: "52"; latitude: "59"; height: "107"; }
+ ListElement{ longitude: "52"; latitude: "60"; height: "109"; }
+ ListElement{ longitude: "52"; latitude: "61"; height: "112"; }
+ ListElement{ longitude: "52"; latitude: "62"; height: "112"; }
+ ListElement{ longitude: "52"; latitude: "63"; height: "110"; }
+ ListElement{ longitude: "52"; latitude: "64"; height: "110"; }
+ ListElement{ longitude: "52"; latitude: "65"; height: "113"; }
+ ListElement{ longitude: "52"; latitude: "66"; height: "114"; }
+ ListElement{ longitude: "52"; latitude: "67"; height: "116"; }
+ ListElement{ longitude: "52"; latitude: "68"; height: "115"; }
+ ListElement{ longitude: "52"; latitude: "69"; height: "116"; }
+ ListElement{ longitude: "52"; latitude: "70"; height: "117"; }
+ ListElement{ longitude: "52"; latitude: "71"; height: "120"; }
+ ListElement{ longitude: "52"; latitude: "72"; height: "126"; }
+ ListElement{ longitude: "52"; latitude: "73"; height: "146"; }
+ ListElement{ longitude: "52"; latitude: "74"; height: "152"; }
+ ListElement{ longitude: "52"; latitude: "75"; height: "148"; }
+ ListElement{ longitude: "52"; latitude: "76"; height: "117"; }
+ ListElement{ longitude: "52"; latitude: "77"; height: "93"; }
+ ListElement{ longitude: "52"; latitude: "78"; height: "72"; }
+ ListElement{ longitude: "52"; latitude: "79"; height: "50"; }
+ ListElement{ longitude: "52"; latitude: "80"; height: "16"; }
+ ListElement{ longitude: "52"; latitude: "81"; height: "1"; }
+ ListElement{ longitude: "52"; latitude: "82"; height: "3"; }
+ ListElement{ longitude: "52"; latitude: "83"; height: "6"; }
+ ListElement{ longitude: "52"; latitude: "84"; height: "24"; }
+ ListElement{ longitude: "52"; latitude: "85"; height: "1"; }
+ ListElement{ longitude: "52"; latitude: "86"; height: "4"; }
+ ListElement{ longitude: "52"; latitude: "87"; height: "4"; }
+ ListElement{ longitude: "52"; latitude: "88"; height: "7"; }
+ ListElement{ longitude: "52"; latitude: "89"; height: "42"; }
+ ListElement{ longitude: "52"; latitude: "90"; height: "52"; }
+ ListElement{ longitude: "52"; latitude: "91"; height: "47"; }
+ ListElement{ longitude: "52"; latitude: "92"; height: "46"; }
+ ListElement{ longitude: "52"; latitude: "93"; height: "61"; }
+ ListElement{ longitude: "52"; latitude: "94"; height: "73"; }
+ ListElement{ longitude: "52"; latitude: "95"; height: "114"; }
+ ListElement{ longitude: "52"; latitude: "96"; height: "121"; }
+ ListElement{ longitude: "52"; latitude: "97"; height: "127"; }
+ ListElement{ longitude: "52"; latitude: "98"; height: "129"; }
+ ListElement{ longitude: "52"; latitude: "99"; height: "119"; }
+ ListElement{ longitude: "53"; latitude: "0"; height: "119"; }
+ ListElement{ longitude: "53"; latitude: "1"; height: "117"; }
+ ListElement{ longitude: "53"; latitude: "2"; height: "116"; }
+ ListElement{ longitude: "53"; latitude: "3"; height: "119"; }
+ ListElement{ longitude: "53"; latitude: "4"; height: "119"; }
+ ListElement{ longitude: "53"; latitude: "5"; height: "126"; }
+ ListElement{ longitude: "53"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "53"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "53"; latitude: "8"; height: "127"; }
+ ListElement{ longitude: "53"; latitude: "9"; height: "127"; }
+ ListElement{ longitude: "53"; latitude: "10"; height: "127"; }
+ ListElement{ longitude: "53"; latitude: "11"; height: "124"; }
+ ListElement{ longitude: "53"; latitude: "12"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "13"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "14"; height: "120"; }
+ ListElement{ longitude: "53"; latitude: "15"; height: "120"; }
+ ListElement{ longitude: "53"; latitude: "16"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "17"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "18"; height: "120"; }
+ ListElement{ longitude: "53"; latitude: "19"; height: "121"; }
+ ListElement{ longitude: "53"; latitude: "20"; height: "121"; }
+ ListElement{ longitude: "53"; latitude: "21"; height: "120"; }
+ ListElement{ longitude: "53"; latitude: "22"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "23"; height: "121"; }
+ ListElement{ longitude: "53"; latitude: "24"; height: "124"; }
+ ListElement{ longitude: "53"; latitude: "25"; height: "124"; }
+ ListElement{ longitude: "53"; latitude: "26"; height: "124"; }
+ ListElement{ longitude: "53"; latitude: "27"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "28"; height: "123"; }
+ ListElement{ longitude: "53"; latitude: "29"; height: "123"; }
+ ListElement{ longitude: "53"; latitude: "30"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "31"; height: "126"; }
+ ListElement{ longitude: "53"; latitude: "32"; height: "125"; }
+ ListElement{ longitude: "53"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "53"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "53"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "53"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "53"; latitude: "37"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "38"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "39"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "53"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "53"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "53"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "53"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "53"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "53"; latitude: "46"; height: "129"; }
+ ListElement{ longitude: "53"; latitude: "47"; height: "127"; }
+ ListElement{ longitude: "53"; latitude: "48"; height: "127"; }
+ ListElement{ longitude: "53"; latitude: "49"; height: "126"; }
+ ListElement{ longitude: "53"; latitude: "50"; height: "122"; }
+ ListElement{ longitude: "53"; latitude: "51"; height: "121"; }
+ ListElement{ longitude: "53"; latitude: "52"; height: "118"; }
+ ListElement{ longitude: "53"; latitude: "53"; height: "114"; }
+ ListElement{ longitude: "53"; latitude: "54"; height: "106"; }
+ ListElement{ longitude: "53"; latitude: "55"; height: "108"; }
+ ListElement{ longitude: "53"; latitude: "56"; height: "105"; }
+ ListElement{ longitude: "53"; latitude: "57"; height: "104"; }
+ ListElement{ longitude: "53"; latitude: "58"; height: "103"; }
+ ListElement{ longitude: "53"; latitude: "59"; height: "107"; }
+ ListElement{ longitude: "53"; latitude: "60"; height: "109"; }
+ ListElement{ longitude: "53"; latitude: "61"; height: "112"; }
+ ListElement{ longitude: "53"; latitude: "62"; height: "111"; }
+ ListElement{ longitude: "53"; latitude: "63"; height: "113"; }
+ ListElement{ longitude: "53"; latitude: "64"; height: "111"; }
+ ListElement{ longitude: "53"; latitude: "65"; height: "113"; }
+ ListElement{ longitude: "53"; latitude: "66"; height: "113"; }
+ ListElement{ longitude: "53"; latitude: "67"; height: "116"; }
+ ListElement{ longitude: "53"; latitude: "68"; height: "116"; }
+ ListElement{ longitude: "53"; latitude: "69"; height: "114"; }
+ ListElement{ longitude: "53"; latitude: "70"; height: "114"; }
+ ListElement{ longitude: "53"; latitude: "71"; height: "112"; }
+ ListElement{ longitude: "53"; latitude: "72"; height: "118"; }
+ ListElement{ longitude: "53"; latitude: "73"; height: "133"; }
+ ListElement{ longitude: "53"; latitude: "74"; height: "150"; }
+ ListElement{ longitude: "53"; latitude: "75"; height: "154"; }
+ ListElement{ longitude: "53"; latitude: "76"; height: "141"; }
+ ListElement{ longitude: "53"; latitude: "77"; height: "103"; }
+ ListElement{ longitude: "53"; latitude: "78"; height: "97"; }
+ ListElement{ longitude: "53"; latitude: "79"; height: "94"; }
+ ListElement{ longitude: "53"; latitude: "80"; height: "54"; }
+ ListElement{ longitude: "53"; latitude: "81"; height: "17"; }
+ ListElement{ longitude: "53"; latitude: "82"; height: "5"; }
+ ListElement{ longitude: "53"; latitude: "83"; height: "4"; }
+ ListElement{ longitude: "53"; latitude: "84"; height: "1"; }
+ ListElement{ longitude: "53"; latitude: "85"; height: "1"; }
+ ListElement{ longitude: "53"; latitude: "86"; height: "19"; }
+ ListElement{ longitude: "53"; latitude: "87"; height: "9"; }
+ ListElement{ longitude: "53"; latitude: "88"; height: "25"; }
+ ListElement{ longitude: "53"; latitude: "89"; height: "40"; }
+ ListElement{ longitude: "53"; latitude: "90"; height: "55"; }
+ ListElement{ longitude: "53"; latitude: "91"; height: "54"; }
+ ListElement{ longitude: "53"; latitude: "92"; height: "53"; }
+ ListElement{ longitude: "53"; latitude: "93"; height: "69"; }
+ ListElement{ longitude: "53"; latitude: "94"; height: "100"; }
+ ListElement{ longitude: "53"; latitude: "95"; height: "112"; }
+ ListElement{ longitude: "53"; latitude: "96"; height: "120"; }
+ ListElement{ longitude: "53"; latitude: "97"; height: "126"; }
+ ListElement{ longitude: "53"; latitude: "98"; height: "125"; }
+ ListElement{ longitude: "53"; latitude: "99"; height: "118"; }
+ ListElement{ longitude: "54"; latitude: "0"; height: "119"; }
+ ListElement{ longitude: "54"; latitude: "1"; height: "118"; }
+ ListElement{ longitude: "54"; latitude: "2"; height: "118"; }
+ ListElement{ longitude: "54"; latitude: "3"; height: "119"; }
+ ListElement{ longitude: "54"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "54"; latitude: "5"; height: "123"; }
+ ListElement{ longitude: "54"; latitude: "6"; height: "125"; }
+ ListElement{ longitude: "54"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "54"; latitude: "8"; height: "127"; }
+ ListElement{ longitude: "54"; latitude: "9"; height: "126"; }
+ ListElement{ longitude: "54"; latitude: "10"; height: "127"; }
+ ListElement{ longitude: "54"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "54"; latitude: "12"; height: "122"; }
+ ListElement{ longitude: "54"; latitude: "13"; height: "122"; }
+ ListElement{ longitude: "54"; latitude: "14"; height: "120"; }
+ ListElement{ longitude: "54"; latitude: "15"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "16"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "17"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "18"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "19"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "20"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "22"; height: "122"; }
+ ListElement{ longitude: "54"; latitude: "23"; height: "122"; }
+ ListElement{ longitude: "54"; latitude: "24"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "25"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "26"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "27"; height: "120"; }
+ ListElement{ longitude: "54"; latitude: "28"; height: "120"; }
+ ListElement{ longitude: "54"; latitude: "29"; height: "120"; }
+ ListElement{ longitude: "54"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "31"; height: "123"; }
+ ListElement{ longitude: "54"; latitude: "32"; height: "121"; }
+ ListElement{ longitude: "54"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "54"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "54"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "54"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "54"; latitude: "37"; height: "125"; }
+ ListElement{ longitude: "54"; latitude: "38"; height: "123"; }
+ ListElement{ longitude: "54"; latitude: "39"; height: "125"; }
+ ListElement{ longitude: "54"; latitude: "40"; height: "124"; }
+ ListElement{ longitude: "54"; latitude: "41"; height: "126"; }
+ ListElement{ longitude: "54"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "54"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "54"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "54"; latitude: "45"; height: "126"; }
+ ListElement{ longitude: "54"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "54"; latitude: "47"; height: "125"; }
+ ListElement{ longitude: "54"; latitude: "48"; height: "129"; }
+ ListElement{ longitude: "54"; latitude: "49"; height: "127"; }
+ ListElement{ longitude: "54"; latitude: "50"; height: "125"; }
+ ListElement{ longitude: "54"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "54"; latitude: "52"; height: "118"; }
+ ListElement{ longitude: "54"; latitude: "53"; height: "112"; }
+ ListElement{ longitude: "54"; latitude: "54"; height: "96"; }
+ ListElement{ longitude: "54"; latitude: "55"; height: "107"; }
+ ListElement{ longitude: "54"; latitude: "56"; height: "108"; }
+ ListElement{ longitude: "54"; latitude: "57"; height: "105"; }
+ ListElement{ longitude: "54"; latitude: "58"; height: "105"; }
+ ListElement{ longitude: "54"; latitude: "59"; height: "108"; }
+ ListElement{ longitude: "54"; latitude: "60"; height: "111"; }
+ ListElement{ longitude: "54"; latitude: "61"; height: "111"; }
+ ListElement{ longitude: "54"; latitude: "62"; height: "115"; }
+ ListElement{ longitude: "54"; latitude: "63"; height: "112"; }
+ ListElement{ longitude: "54"; latitude: "64"; height: "112"; }
+ ListElement{ longitude: "54"; latitude: "65"; height: "112"; }
+ ListElement{ longitude: "54"; latitude: "66"; height: "113"; }
+ ListElement{ longitude: "54"; latitude: "67"; height: "113"; }
+ ListElement{ longitude: "54"; latitude: "68"; height: "115"; }
+ ListElement{ longitude: "54"; latitude: "69"; height: "115"; }
+ ListElement{ longitude: "54"; latitude: "70"; height: "112"; }
+ ListElement{ longitude: "54"; latitude: "71"; height: "110"; }
+ ListElement{ longitude: "54"; latitude: "72"; height: "112"; }
+ ListElement{ longitude: "54"; latitude: "73"; height: "119"; }
+ ListElement{ longitude: "54"; latitude: "74"; height: "140"; }
+ ListElement{ longitude: "54"; latitude: "75"; height: "151"; }
+ ListElement{ longitude: "54"; latitude: "76"; height: "150"; }
+ ListElement{ longitude: "54"; latitude: "77"; height: "140"; }
+ ListElement{ longitude: "54"; latitude: "78"; height: "104"; }
+ ListElement{ longitude: "54"; latitude: "79"; height: "102"; }
+ ListElement{ longitude: "54"; latitude: "80"; height: "90"; }
+ ListElement{ longitude: "54"; latitude: "81"; height: "46"; }
+ ListElement{ longitude: "54"; latitude: "82"; height: "37"; }
+ ListElement{ longitude: "54"; latitude: "83"; height: "30"; }
+ ListElement{ longitude: "54"; latitude: "84"; height: "24"; }
+ ListElement{ longitude: "54"; latitude: "85"; height: "16"; }
+ ListElement{ longitude: "54"; latitude: "86"; height: "18"; }
+ ListElement{ longitude: "54"; latitude: "87"; height: "46"; }
+ ListElement{ longitude: "54"; latitude: "88"; height: "26"; }
+ ListElement{ longitude: "54"; latitude: "89"; height: "28"; }
+ ListElement{ longitude: "54"; latitude: "90"; height: "60"; }
+ ListElement{ longitude: "54"; latitude: "91"; height: "51"; }
+ ListElement{ longitude: "54"; latitude: "92"; height: "54"; }
+ ListElement{ longitude: "54"; latitude: "93"; height: "108"; }
+ ListElement{ longitude: "54"; latitude: "94"; height: "131"; }
+ ListElement{ longitude: "54"; latitude: "95"; height: "116"; }
+ ListElement{ longitude: "54"; latitude: "96"; height: "122"; }
+ ListElement{ longitude: "54"; latitude: "97"; height: "126"; }
+ ListElement{ longitude: "54"; latitude: "98"; height: "125"; }
+ ListElement{ longitude: "54"; latitude: "99"; height: "118"; }
+ ListElement{ longitude: "55"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "55"; latitude: "1"; height: "120"; }
+ ListElement{ longitude: "55"; latitude: "2"; height: "120"; }
+ ListElement{ longitude: "55"; latitude: "3"; height: "121"; }
+ ListElement{ longitude: "55"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "55"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "55"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "55"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "55"; latitude: "8"; height: "129"; }
+ ListElement{ longitude: "55"; latitude: "9"; height: "129"; }
+ ListElement{ longitude: "55"; latitude: "10"; height: "127"; }
+ ListElement{ longitude: "55"; latitude: "11"; height: "125"; }
+ ListElement{ longitude: "55"; latitude: "12"; height: "123"; }
+ ListElement{ longitude: "55"; latitude: "13"; height: "120"; }
+ ListElement{ longitude: "55"; latitude: "14"; height: "121"; }
+ ListElement{ longitude: "55"; latitude: "15"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "16"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "17"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "18"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "19"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "20"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "21"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "55"; latitude: "23"; height: "120"; }
+ ListElement{ longitude: "55"; latitude: "24"; height: "122"; }
+ ListElement{ longitude: "55"; latitude: "25"; height: "122"; }
+ ListElement{ longitude: "55"; latitude: "26"; height: "120"; }
+ ListElement{ longitude: "55"; latitude: "27"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "28"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "29"; height: "119"; }
+ ListElement{ longitude: "55"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "55"; latitude: "31"; height: "124"; }
+ ListElement{ longitude: "55"; latitude: "32"; height: "116"; }
+ ListElement{ longitude: "55"; latitude: "33"; height: "120"; }
+ ListElement{ longitude: "55"; latitude: "34"; height: "127"; }
+ ListElement{ longitude: "55"; latitude: "35"; height: "124"; }
+ ListElement{ longitude: "55"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "55"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "55"; latitude: "38"; height: "123"; }
+ ListElement{ longitude: "55"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "55"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "55"; latitude: "41"; height: "127"; }
+ ListElement{ longitude: "55"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "55"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "55"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "55"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "55"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "55"; latitude: "47"; height: "125"; }
+ ListElement{ longitude: "55"; latitude: "48"; height: "128"; }
+ ListElement{ longitude: "55"; latitude: "49"; height: "126"; }
+ ListElement{ longitude: "55"; latitude: "50"; height: "126"; }
+ ListElement{ longitude: "55"; latitude: "51"; height: "121"; }
+ ListElement{ longitude: "55"; latitude: "52"; height: "117"; }
+ ListElement{ longitude: "55"; latitude: "53"; height: "114"; }
+ ListElement{ longitude: "55"; latitude: "54"; height: "112"; }
+ ListElement{ longitude: "55"; latitude: "55"; height: "115"; }
+ ListElement{ longitude: "55"; latitude: "56"; height: "113"; }
+ ListElement{ longitude: "55"; latitude: "57"; height: "112"; }
+ ListElement{ longitude: "55"; latitude: "58"; height: "110"; }
+ ListElement{ longitude: "55"; latitude: "59"; height: "110"; }
+ ListElement{ longitude: "55"; latitude: "60"; height: "111"; }
+ ListElement{ longitude: "55"; latitude: "61"; height: "111"; }
+ ListElement{ longitude: "55"; latitude: "62"; height: "114"; }
+ ListElement{ longitude: "55"; latitude: "63"; height: "113"; }
+ ListElement{ longitude: "55"; latitude: "64"; height: "113"; }
+ ListElement{ longitude: "55"; latitude: "65"; height: "113"; }
+ ListElement{ longitude: "55"; latitude: "66"; height: "113"; }
+ ListElement{ longitude: "55"; latitude: "67"; height: "115"; }
+ ListElement{ longitude: "55"; latitude: "68"; height: "113"; }
+ ListElement{ longitude: "55"; latitude: "69"; height: "111"; }
+ ListElement{ longitude: "55"; latitude: "70"; height: "110"; }
+ ListElement{ longitude: "55"; latitude: "71"; height: "110"; }
+ ListElement{ longitude: "55"; latitude: "72"; height: "109"; }
+ ListElement{ longitude: "55"; latitude: "73"; height: "113"; }
+ ListElement{ longitude: "55"; latitude: "74"; height: "122"; }
+ ListElement{ longitude: "55"; latitude: "75"; height: "145"; }
+ ListElement{ longitude: "55"; latitude: "76"; height: "156"; }
+ ListElement{ longitude: "55"; latitude: "77"; height: "161"; }
+ ListElement{ longitude: "55"; latitude: "78"; height: "148"; }
+ ListElement{ longitude: "55"; latitude: "79"; height: "109"; }
+ ListElement{ longitude: "55"; latitude: "80"; height: "99"; }
+ ListElement{ longitude: "55"; latitude: "81"; height: "90"; }
+ ListElement{ longitude: "55"; latitude: "82"; height: "59"; }
+ ListElement{ longitude: "55"; latitude: "83"; height: "48"; }
+ ListElement{ longitude: "55"; latitude: "84"; height: "35"; }
+ ListElement{ longitude: "55"; latitude: "85"; height: "9"; }
+ ListElement{ longitude: "55"; latitude: "86"; height: "1"; }
+ ListElement{ longitude: "55"; latitude: "87"; height: "32"; }
+ ListElement{ longitude: "55"; latitude: "88"; height: "55"; }
+ ListElement{ longitude: "55"; latitude: "89"; height: "52"; }
+ ListElement{ longitude: "55"; latitude: "90"; height: "55"; }
+ ListElement{ longitude: "55"; latitude: "91"; height: "70"; }
+ ListElement{ longitude: "55"; latitude: "92"; height: "90"; }
+ ListElement{ longitude: "55"; latitude: "93"; height: "124"; }
+ ListElement{ longitude: "55"; latitude: "94"; height: "128"; }
+ ListElement{ longitude: "55"; latitude: "95"; height: "118"; }
+ ListElement{ longitude: "55"; latitude: "96"; height: "122"; }
+ ListElement{ longitude: "55"; latitude: "97"; height: "126"; }
+ ListElement{ longitude: "55"; latitude: "98"; height: "126"; }
+ ListElement{ longitude: "55"; latitude: "99"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "1"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "2"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "3"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "56"; latitude: "6"; height: "124"; }
+ ListElement{ longitude: "56"; latitude: "7"; height: "125"; }
+ ListElement{ longitude: "56"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "56"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "56"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "56"; latitude: "11"; height: "122"; }
+ ListElement{ longitude: "56"; latitude: "12"; height: "121"; }
+ ListElement{ longitude: "56"; latitude: "13"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "14"; height: "121"; }
+ ListElement{ longitude: "56"; latitude: "15"; height: "118"; }
+ ListElement{ longitude: "56"; latitude: "16"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "17"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "18"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "20"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "21"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "56"; latitude: "23"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "24"; height: "122"; }
+ ListElement{ longitude: "56"; latitude: "25"; height: "124"; }
+ ListElement{ longitude: "56"; latitude: "26"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "27"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "28"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "29"; height: "120"; }
+ ListElement{ longitude: "56"; latitude: "30"; height: "117"; }
+ ListElement{ longitude: "56"; latitude: "31"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "32"; height: "123"; }
+ ListElement{ longitude: "56"; latitude: "33"; height: "126"; }
+ ListElement{ longitude: "56"; latitude: "34"; height: "125"; }
+ ListElement{ longitude: "56"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "56"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "56"; latitude: "37"; height: "123"; }
+ ListElement{ longitude: "56"; latitude: "38"; height: "126"; }
+ ListElement{ longitude: "56"; latitude: "39"; height: "127"; }
+ ListElement{ longitude: "56"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "56"; latitude: "41"; height: "130"; }
+ ListElement{ longitude: "56"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "56"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "56"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "56"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "56"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "56"; latitude: "47"; height: "126"; }
+ ListElement{ longitude: "56"; latitude: "48"; height: "128"; }
+ ListElement{ longitude: "56"; latitude: "49"; height: "129"; }
+ ListElement{ longitude: "56"; latitude: "50"; height: "128"; }
+ ListElement{ longitude: "56"; latitude: "51"; height: "123"; }
+ ListElement{ longitude: "56"; latitude: "52"; height: "123"; }
+ ListElement{ longitude: "56"; latitude: "53"; height: "118"; }
+ ListElement{ longitude: "56"; latitude: "54"; height: "117"; }
+ ListElement{ longitude: "56"; latitude: "55"; height: "117"; }
+ ListElement{ longitude: "56"; latitude: "56"; height: "117"; }
+ ListElement{ longitude: "56"; latitude: "57"; height: "116"; }
+ ListElement{ longitude: "56"; latitude: "58"; height: "113"; }
+ ListElement{ longitude: "56"; latitude: "59"; height: "114"; }
+ ListElement{ longitude: "56"; latitude: "60"; height: "114"; }
+ ListElement{ longitude: "56"; latitude: "61"; height: "113"; }
+ ListElement{ longitude: "56"; latitude: "62"; height: "115"; }
+ ListElement{ longitude: "56"; latitude: "63"; height: "116"; }
+ ListElement{ longitude: "56"; latitude: "64"; height: "116"; }
+ ListElement{ longitude: "56"; latitude: "65"; height: "116"; }
+ ListElement{ longitude: "56"; latitude: "66"; height: "116"; }
+ ListElement{ longitude: "56"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "56"; latitude: "68"; height: "114"; }
+ ListElement{ longitude: "56"; latitude: "69"; height: "111"; }
+ ListElement{ longitude: "56"; latitude: "70"; height: "111"; }
+ ListElement{ longitude: "56"; latitude: "71"; height: "107"; }
+ ListElement{ longitude: "56"; latitude: "72"; height: "106"; }
+ ListElement{ longitude: "56"; latitude: "73"; height: "112"; }
+ ListElement{ longitude: "56"; latitude: "74"; height: "117"; }
+ ListElement{ longitude: "56"; latitude: "75"; height: "129"; }
+ ListElement{ longitude: "56"; latitude: "76"; height: "142"; }
+ ListElement{ longitude: "56"; latitude: "77"; height: "164"; }
+ ListElement{ longitude: "56"; latitude: "78"; height: "167"; }
+ ListElement{ longitude: "56"; latitude: "79"; height: "152"; }
+ ListElement{ longitude: "56"; latitude: "80"; height: "134"; }
+ ListElement{ longitude: "56"; latitude: "81"; height: "118"; }
+ ListElement{ longitude: "56"; latitude: "82"; height: "99"; }
+ ListElement{ longitude: "56"; latitude: "83"; height: "102"; }
+ ListElement{ longitude: "56"; latitude: "84"; height: "102"; }
+ ListElement{ longitude: "56"; latitude: "85"; height: "88"; }
+ ListElement{ longitude: "56"; latitude: "86"; height: "73"; }
+ ListElement{ longitude: "56"; latitude: "87"; height: "66"; }
+ ListElement{ longitude: "56"; latitude: "88"; height: "56"; }
+ ListElement{ longitude: "56"; latitude: "89"; height: "51"; }
+ ListElement{ longitude: "56"; latitude: "90"; height: "73"; }
+ ListElement{ longitude: "56"; latitude: "91"; height: "104"; }
+ ListElement{ longitude: "56"; latitude: "92"; height: "110"; }
+ ListElement{ longitude: "56"; latitude: "93"; height: "114"; }
+ ListElement{ longitude: "56"; latitude: "94"; height: "119"; }
+ ListElement{ longitude: "56"; latitude: "95"; height: "122"; }
+ ListElement{ longitude: "56"; latitude: "96"; height: "126"; }
+ ListElement{ longitude: "56"; latitude: "97"; height: "128"; }
+ ListElement{ longitude: "56"; latitude: "98"; height: "127"; }
+ ListElement{ longitude: "56"; latitude: "99"; height: "123"; }
+ ListElement{ longitude: "57"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "1"; height: "121"; }
+ ListElement{ longitude: "57"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "57"; latitude: "3"; height: "122"; }
+ ListElement{ longitude: "57"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "5"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "6"; height: "122"; }
+ ListElement{ longitude: "57"; latitude: "7"; height: "123"; }
+ ListElement{ longitude: "57"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "9"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "10"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "11"; height: "124"; }
+ ListElement{ longitude: "57"; latitude: "12"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "13"; height: "119"; }
+ ListElement{ longitude: "57"; latitude: "14"; height: "119"; }
+ ListElement{ longitude: "57"; latitude: "15"; height: "119"; }
+ ListElement{ longitude: "57"; latitude: "16"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "17"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "18"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "20"; height: "119"; }
+ ListElement{ longitude: "57"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "57"; latitude: "22"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "23"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "24"; height: "122"; }
+ ListElement{ longitude: "57"; latitude: "25"; height: "122"; }
+ ListElement{ longitude: "57"; latitude: "26"; height: "119"; }
+ ListElement{ longitude: "57"; latitude: "27"; height: "121"; }
+ ListElement{ longitude: "57"; latitude: "28"; height: "121"; }
+ ListElement{ longitude: "57"; latitude: "29"; height: "118"; }
+ ListElement{ longitude: "57"; latitude: "30"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "31"; height: "123"; }
+ ListElement{ longitude: "57"; latitude: "32"; height: "121"; }
+ ListElement{ longitude: "57"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "57"; latitude: "34"; height: "124"; }
+ ListElement{ longitude: "57"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "37"; height: "122"; }
+ ListElement{ longitude: "57"; latitude: "38"; height: "127"; }
+ ListElement{ longitude: "57"; latitude: "39"; height: "126"; }
+ ListElement{ longitude: "57"; latitude: "40"; height: "128"; }
+ ListElement{ longitude: "57"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "57"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "57"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "57"; latitude: "44"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "46"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "47"; height: "126"; }
+ ListElement{ longitude: "57"; latitude: "48"; height: "129"; }
+ ListElement{ longitude: "57"; latitude: "49"; height: "130"; }
+ ListElement{ longitude: "57"; latitude: "50"; height: "128"; }
+ ListElement{ longitude: "57"; latitude: "51"; height: "128"; }
+ ListElement{ longitude: "57"; latitude: "52"; height: "118"; }
+ ListElement{ longitude: "57"; latitude: "53"; height: "111"; }
+ ListElement{ longitude: "57"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "57"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "56"; height: "120"; }
+ ListElement{ longitude: "57"; latitude: "57"; height: "118"; }
+ ListElement{ longitude: "57"; latitude: "58"; height: "117"; }
+ ListElement{ longitude: "57"; latitude: "59"; height: "115"; }
+ ListElement{ longitude: "57"; latitude: "60"; height: "116"; }
+ ListElement{ longitude: "57"; latitude: "61"; height: "114"; }
+ ListElement{ longitude: "57"; latitude: "62"; height: "114"; }
+ ListElement{ longitude: "57"; latitude: "63"; height: "116"; }
+ ListElement{ longitude: "57"; latitude: "64"; height: "116"; }
+ ListElement{ longitude: "57"; latitude: "65"; height: "116"; }
+ ListElement{ longitude: "57"; latitude: "66"; height: "116"; }
+ ListElement{ longitude: "57"; latitude: "67"; height: "114"; }
+ ListElement{ longitude: "57"; latitude: "68"; height: "112"; }
+ ListElement{ longitude: "57"; latitude: "69"; height: "111"; }
+ ListElement{ longitude: "57"; latitude: "70"; height: "111"; }
+ ListElement{ longitude: "57"; latitude: "71"; height: "109"; }
+ ListElement{ longitude: "57"; latitude: "72"; height: "110"; }
+ ListElement{ longitude: "57"; latitude: "73"; height: "113"; }
+ ListElement{ longitude: "57"; latitude: "74"; height: "118"; }
+ ListElement{ longitude: "57"; latitude: "75"; height: "125"; }
+ ListElement{ longitude: "57"; latitude: "76"; height: "133"; }
+ ListElement{ longitude: "57"; latitude: "77"; height: "139"; }
+ ListElement{ longitude: "57"; latitude: "78"; height: "148"; }
+ ListElement{ longitude: "57"; latitude: "79"; height: "161"; }
+ ListElement{ longitude: "57"; latitude: "80"; height: "167"; }
+ ListElement{ longitude: "57"; latitude: "81"; height: "167"; }
+ ListElement{ longitude: "57"; latitude: "82"; height: "164"; }
+ ListElement{ longitude: "57"; latitude: "83"; height: "152"; }
+ ListElement{ longitude: "57"; latitude: "84"; height: "143"; }
+ ListElement{ longitude: "57"; latitude: "85"; height: "138"; }
+ ListElement{ longitude: "57"; latitude: "86"; height: "102"; }
+ ListElement{ longitude: "57"; latitude: "87"; height: "94"; }
+ ListElement{ longitude: "57"; latitude: "88"; height: "81"; }
+ ListElement{ longitude: "57"; latitude: "89"; height: "81"; }
+ ListElement{ longitude: "57"; latitude: "90"; height: "91"; }
+ ListElement{ longitude: "57"; latitude: "91"; height: "99"; }
+ ListElement{ longitude: "57"; latitude: "92"; height: "107"; }
+ ListElement{ longitude: "57"; latitude: "93"; height: "118"; }
+ ListElement{ longitude: "57"; latitude: "94"; height: "126"; }
+ ListElement{ longitude: "57"; latitude: "95"; height: "127"; }
+ ListElement{ longitude: "57"; latitude: "96"; height: "128"; }
+ ListElement{ longitude: "57"; latitude: "97"; height: "130"; }
+ ListElement{ longitude: "57"; latitude: "98"; height: "130"; }
+ ListElement{ longitude: "57"; latitude: "99"; height: "128"; }
+ ListElement{ longitude: "58"; latitude: "0"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "58"; latitude: "4"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "6"; height: "123"; }
+ ListElement{ longitude: "58"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "58"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "58"; latitude: "9"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "10"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "11"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "12"; height: "120"; }
+ ListElement{ longitude: "58"; latitude: "13"; height: "120"; }
+ ListElement{ longitude: "58"; latitude: "14"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "15"; height: "119"; }
+ ListElement{ longitude: "58"; latitude: "16"; height: "119"; }
+ ListElement{ longitude: "58"; latitude: "17"; height: "120"; }
+ ListElement{ longitude: "58"; latitude: "18"; height: "120"; }
+ ListElement{ longitude: "58"; latitude: "19"; height: "118"; }
+ ListElement{ longitude: "58"; latitude: "20"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "22"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "23"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "24"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "25"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "26"; height: "119"; }
+ ListElement{ longitude: "58"; latitude: "27"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "28"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "29"; height: "119"; }
+ ListElement{ longitude: "58"; latitude: "30"; height: "115"; }
+ ListElement{ longitude: "58"; latitude: "31"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "32"; height: "120"; }
+ ListElement{ longitude: "58"; latitude: "33"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "34"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "35"; height: "123"; }
+ ListElement{ longitude: "58"; latitude: "36"; height: "125"; }
+ ListElement{ longitude: "58"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "58"; latitude: "38"; height: "127"; }
+ ListElement{ longitude: "58"; latitude: "39"; height: "128"; }
+ ListElement{ longitude: "58"; latitude: "40"; height: "130"; }
+ ListElement{ longitude: "58"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "58"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "58"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "58"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "58"; latitude: "45"; height: "126"; }
+ ListElement{ longitude: "58"; latitude: "46"; height: "123"; }
+ ListElement{ longitude: "58"; latitude: "47"; height: "125"; }
+ ListElement{ longitude: "58"; latitude: "48"; height: "130"; }
+ ListElement{ longitude: "58"; latitude: "49"; height: "131"; }
+ ListElement{ longitude: "58"; latitude: "50"; height: "134"; }
+ ListElement{ longitude: "58"; latitude: "51"; height: "131"; }
+ ListElement{ longitude: "58"; latitude: "52"; height: "130"; }
+ ListElement{ longitude: "58"; latitude: "53"; height: "128"; }
+ ListElement{ longitude: "58"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "58"; latitude: "55"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "58"; latitude: "57"; height: "120"; }
+ ListElement{ longitude: "58"; latitude: "58"; height: "120"; }
+ ListElement{ longitude: "58"; latitude: "59"; height: "119"; }
+ ListElement{ longitude: "58"; latitude: "60"; height: "118"; }
+ ListElement{ longitude: "58"; latitude: "61"; height: "116"; }
+ ListElement{ longitude: "58"; latitude: "62"; height: "115"; }
+ ListElement{ longitude: "58"; latitude: "63"; height: "115"; }
+ ListElement{ longitude: "58"; latitude: "64"; height: "115"; }
+ ListElement{ longitude: "58"; latitude: "65"; height: "115"; }
+ ListElement{ longitude: "58"; latitude: "66"; height: "117"; }
+ ListElement{ longitude: "58"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "58"; latitude: "68"; height: "114"; }
+ ListElement{ longitude: "58"; latitude: "69"; height: "111"; }
+ ListElement{ longitude: "58"; latitude: "70"; height: "110"; }
+ ListElement{ longitude: "58"; latitude: "71"; height: "109"; }
+ ListElement{ longitude: "58"; latitude: "72"; height: "109"; }
+ ListElement{ longitude: "58"; latitude: "73"; height: "113"; }
+ ListElement{ longitude: "58"; latitude: "74"; height: "117"; }
+ ListElement{ longitude: "58"; latitude: "75"; height: "122"; }
+ ListElement{ longitude: "58"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "58"; latitude: "77"; height: "126"; }
+ ListElement{ longitude: "58"; latitude: "78"; height: "136"; }
+ ListElement{ longitude: "58"; latitude: "79"; height: "139"; }
+ ListElement{ longitude: "58"; latitude: "80"; height: "142"; }
+ ListElement{ longitude: "58"; latitude: "81"; height: "149"; }
+ ListElement{ longitude: "58"; latitude: "82"; height: "153"; }
+ ListElement{ longitude: "58"; latitude: "83"; height: "149"; }
+ ListElement{ longitude: "58"; latitude: "84"; height: "141"; }
+ ListElement{ longitude: "58"; latitude: "85"; height: "134"; }
+ ListElement{ longitude: "58"; latitude: "86"; height: "113"; }
+ ListElement{ longitude: "58"; latitude: "87"; height: "94"; }
+ ListElement{ longitude: "58"; latitude: "88"; height: "83"; }
+ ListElement{ longitude: "58"; latitude: "89"; height: "89"; }
+ ListElement{ longitude: "58"; latitude: "90"; height: "98"; }
+ ListElement{ longitude: "58"; latitude: "91"; height: "109"; }
+ ListElement{ longitude: "58"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "58"; latitude: "93"; height: "126"; }
+ ListElement{ longitude: "58"; latitude: "94"; height: "128"; }
+ ListElement{ longitude: "58"; latitude: "95"; height: "127"; }
+ ListElement{ longitude: "58"; latitude: "96"; height: "129"; }
+ ListElement{ longitude: "58"; latitude: "97"; height: "131"; }
+ ListElement{ longitude: "58"; latitude: "98"; height: "135"; }
+ ListElement{ longitude: "58"; latitude: "99"; height: "131"; }
+ ListElement{ longitude: "59"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "59"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "59"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "59"; latitude: "3"; height: "121"; }
+ ListElement{ longitude: "59"; latitude: "4"; height: "123"; }
+ ListElement{ longitude: "59"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "59"; latitude: "6"; height: "121"; }
+ ListElement{ longitude: "59"; latitude: "7"; height: "123"; }
+ ListElement{ longitude: "59"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "59"; latitude: "9"; height: "124"; }
+ ListElement{ longitude: "59"; latitude: "10"; height: "123"; }
+ ListElement{ longitude: "59"; latitude: "11"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "12"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "13"; height: "124"; }
+ ListElement{ longitude: "59"; latitude: "14"; height: "124"; }
+ ListElement{ longitude: "59"; latitude: "15"; height: "121"; }
+ ListElement{ longitude: "59"; latitude: "16"; height: "119"; }
+ ListElement{ longitude: "59"; latitude: "17"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "18"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "19"; height: "118"; }
+ ListElement{ longitude: "59"; latitude: "20"; height: "121"; }
+ ListElement{ longitude: "59"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "59"; latitude: "22"; height: "119"; }
+ ListElement{ longitude: "59"; latitude: "23"; height: "119"; }
+ ListElement{ longitude: "59"; latitude: "24"; height: "119"; }
+ ListElement{ longitude: "59"; latitude: "25"; height: "119"; }
+ ListElement{ longitude: "59"; latitude: "26"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "27"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "28"; height: "119"; }
+ ListElement{ longitude: "59"; latitude: "29"; height: "113"; }
+ ListElement{ longitude: "59"; latitude: "30"; height: "105"; }
+ ListElement{ longitude: "59"; latitude: "31"; height: "122"; }
+ ListElement{ longitude: "59"; latitude: "32"; height: "123"; }
+ ListElement{ longitude: "59"; latitude: "33"; height: "121"; }
+ ListElement{ longitude: "59"; latitude: "34"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "35"; height: "123"; }
+ ListElement{ longitude: "59"; latitude: "36"; height: "124"; }
+ ListElement{ longitude: "59"; latitude: "37"; height: "127"; }
+ ListElement{ longitude: "59"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "59"; latitude: "39"; height: "130"; }
+ ListElement{ longitude: "59"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "59"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "59"; latitude: "42"; height: "125"; }
+ ListElement{ longitude: "59"; latitude: "43"; height: "125"; }
+ ListElement{ longitude: "59"; latitude: "44"; height: "125"; }
+ ListElement{ longitude: "59"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "59"; latitude: "46"; height: "129"; }
+ ListElement{ longitude: "59"; latitude: "47"; height: "131"; }
+ ListElement{ longitude: "59"; latitude: "48"; height: "133"; }
+ ListElement{ longitude: "59"; latitude: "49"; height: "127"; }
+ ListElement{ longitude: "59"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "59"; latitude: "51"; height: "134"; }
+ ListElement{ longitude: "59"; latitude: "52"; height: "132"; }
+ ListElement{ longitude: "59"; latitude: "53"; height: "129"; }
+ ListElement{ longitude: "59"; latitude: "54"; height: "128"; }
+ ListElement{ longitude: "59"; latitude: "55"; height: "125"; }
+ ListElement{ longitude: "59"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "59"; latitude: "57"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "58"; height: "116"; }
+ ListElement{ longitude: "59"; latitude: "59"; height: "115"; }
+ ListElement{ longitude: "59"; latitude: "60"; height: "114"; }
+ ListElement{ longitude: "59"; latitude: "61"; height: "113"; }
+ ListElement{ longitude: "59"; latitude: "62"; height: "112"; }
+ ListElement{ longitude: "59"; latitude: "63"; height: "111"; }
+ ListElement{ longitude: "59"; latitude: "64"; height: "111"; }
+ ListElement{ longitude: "59"; latitude: "65"; height: "111"; }
+ ListElement{ longitude: "59"; latitude: "66"; height: "112"; }
+ ListElement{ longitude: "59"; latitude: "67"; height: "114"; }
+ ListElement{ longitude: "59"; latitude: "68"; height: "113"; }
+ ListElement{ longitude: "59"; latitude: "69"; height: "111"; }
+ ListElement{ longitude: "59"; latitude: "70"; height: "110"; }
+ ListElement{ longitude: "59"; latitude: "71"; height: "112"; }
+ ListElement{ longitude: "59"; latitude: "72"; height: "111"; }
+ ListElement{ longitude: "59"; latitude: "73"; height: "116"; }
+ ListElement{ longitude: "59"; latitude: "74"; height: "117"; }
+ ListElement{ longitude: "59"; latitude: "75"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "76"; height: "124"; }
+ ListElement{ longitude: "59"; latitude: "77"; height: "118"; }
+ ListElement{ longitude: "59"; latitude: "78"; height: "125"; }
+ ListElement{ longitude: "59"; latitude: "79"; height: "122"; }
+ ListElement{ longitude: "59"; latitude: "80"; height: "132"; }
+ ListElement{ longitude: "59"; latitude: "81"; height: "131"; }
+ ListElement{ longitude: "59"; latitude: "82"; height: "132"; }
+ ListElement{ longitude: "59"; latitude: "83"; height: "139"; }
+ ListElement{ longitude: "59"; latitude: "84"; height: "133"; }
+ ListElement{ longitude: "59"; latitude: "85"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "86"; height: "111"; }
+ ListElement{ longitude: "59"; latitude: "87"; height: "105"; }
+ ListElement{ longitude: "59"; latitude: "88"; height: "92"; }
+ ListElement{ longitude: "59"; latitude: "89"; height: "95"; }
+ ListElement{ longitude: "59"; latitude: "90"; height: "100"; }
+ ListElement{ longitude: "59"; latitude: "91"; height: "111"; }
+ ListElement{ longitude: "59"; latitude: "92"; height: "120"; }
+ ListElement{ longitude: "59"; latitude: "93"; height: "123"; }
+ ListElement{ longitude: "59"; latitude: "94"; height: "125"; }
+ ListElement{ longitude: "59"; latitude: "95"; height: "130"; }
+ ListElement{ longitude: "59"; latitude: "96"; height: "131"; }
+ ListElement{ longitude: "59"; latitude: "97"; height: "137"; }
+ ListElement{ longitude: "59"; latitude: "98"; height: "138"; }
+ ListElement{ longitude: "59"; latitude: "99"; height: "135"; }
+ ListElement{ longitude: "60"; latitude: "0"; height: "121"; }
+ ListElement{ longitude: "60"; latitude: "1"; height: "118"; }
+ ListElement{ longitude: "60"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "60"; latitude: "3"; height: "121"; }
+ ListElement{ longitude: "60"; latitude: "4"; height: "124"; }
+ ListElement{ longitude: "60"; latitude: "5"; height: "126"; }
+ ListElement{ longitude: "60"; latitude: "6"; height: "128"; }
+ ListElement{ longitude: "60"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "60"; latitude: "8"; height: "125"; }
+ ListElement{ longitude: "60"; latitude: "9"; height: "122"; }
+ ListElement{ longitude: "60"; latitude: "10"; height: "121"; }
+ ListElement{ longitude: "60"; latitude: "11"; height: "120"; }
+ ListElement{ longitude: "60"; latitude: "12"; height: "120"; }
+ ListElement{ longitude: "60"; latitude: "13"; height: "119"; }
+ ListElement{ longitude: "60"; latitude: "14"; height: "120"; }
+ ListElement{ longitude: "60"; latitude: "15"; height: "120"; }
+ ListElement{ longitude: "60"; latitude: "16"; height: "121"; }
+ ListElement{ longitude: "60"; latitude: "17"; height: "118"; }
+ ListElement{ longitude: "60"; latitude: "18"; height: "118"; }
+ ListElement{ longitude: "60"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "60"; latitude: "20"; height: "119"; }
+ ListElement{ longitude: "60"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "60"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "60"; latitude: "23"; height: "121"; }
+ ListElement{ longitude: "60"; latitude: "24"; height: "120"; }
+ ListElement{ longitude: "60"; latitude: "25"; height: "118"; }
+ ListElement{ longitude: "60"; latitude: "26"; height: "118"; }
+ ListElement{ longitude: "60"; latitude: "27"; height: "120"; }
+ ListElement{ longitude: "60"; latitude: "28"; height: "119"; }
+ ListElement{ longitude: "60"; latitude: "29"; height: "113"; }
+ ListElement{ longitude: "60"; latitude: "30"; height: "111"; }
+ ListElement{ longitude: "60"; latitude: "31"; height: "122"; }
+ ListElement{ longitude: "60"; latitude: "32"; height: "124"; }
+ ListElement{ longitude: "60"; latitude: "33"; height: "124"; }
+ ListElement{ longitude: "60"; latitude: "34"; height: "123"; }
+ ListElement{ longitude: "60"; latitude: "35"; height: "129"; }
+ ListElement{ longitude: "60"; latitude: "36"; height: "128"; }
+ ListElement{ longitude: "60"; latitude: "37"; height: "128"; }
+ ListElement{ longitude: "60"; latitude: "38"; height: "128"; }
+ ListElement{ longitude: "60"; latitude: "39"; height: "127"; }
+ ListElement{ longitude: "60"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "60"; latitude: "41"; height: "124"; }
+ ListElement{ longitude: "60"; latitude: "42"; height: "122"; }
+ ListElement{ longitude: "60"; latitude: "43"; height: "122"; }
+ ListElement{ longitude: "60"; latitude: "44"; height: "118"; }
+ ListElement{ longitude: "60"; latitude: "45"; height: "120"; }
+ ListElement{ longitude: "60"; latitude: "46"; height: "126"; }
+ ListElement{ longitude: "60"; latitude: "47"; height: "127"; }
+ ListElement{ longitude: "60"; latitude: "48"; height: "130"; }
+ ListElement{ longitude: "60"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "60"; latitude: "50"; height: "139"; }
+ ListElement{ longitude: "60"; latitude: "51"; height: "135"; }
+ ListElement{ longitude: "60"; latitude: "52"; height: "133"; }
+ ListElement{ longitude: "60"; latitude: "53"; height: "130"; }
+ ListElement{ longitude: "60"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "60"; latitude: "55"; height: "117"; }
+ ListElement{ longitude: "60"; latitude: "56"; height: "119"; }
+ ListElement{ longitude: "60"; latitude: "57"; height: "117"; }
+ ListElement{ longitude: "60"; latitude: "58"; height: "116"; }
+ ListElement{ longitude: "60"; latitude: "59"; height: "113"; }
+ ListElement{ longitude: "60"; latitude: "60"; height: "112"; }
+ ListElement{ longitude: "60"; latitude: "61"; height: "113"; }
+ ListElement{ longitude: "60"; latitude: "62"; height: "114"; }
+ ListElement{ longitude: "60"; latitude: "63"; height: "112"; }
+ ListElement{ longitude: "60"; latitude: "64"; height: "111"; }
+ ListElement{ longitude: "60"; latitude: "65"; height: "111"; }
+ ListElement{ longitude: "60"; latitude: "66"; height: "110"; }
+ ListElement{ longitude: "60"; latitude: "67"; height: "112"; }
+ ListElement{ longitude: "60"; latitude: "68"; height: "112"; }
+ ListElement{ longitude: "60"; latitude: "69"; height: "112"; }
+ ListElement{ longitude: "60"; latitude: "70"; height: "112"; }
+ ListElement{ longitude: "60"; latitude: "71"; height: "113"; }
+ ListElement{ longitude: "60"; latitude: "72"; height: "113"; }
+ ListElement{ longitude: "60"; latitude: "73"; height: "113"; }
+ ListElement{ longitude: "60"; latitude: "74"; height: "119"; }
+ ListElement{ longitude: "60"; latitude: "75"; height: "117"; }
+ ListElement{ longitude: "60"; latitude: "76"; height: "123"; }
+ ListElement{ longitude: "60"; latitude: "77"; height: "123"; }
+ ListElement{ longitude: "60"; latitude: "78"; height: "127"; }
+ ListElement{ longitude: "60"; latitude: "79"; height: "125"; }
+ ListElement{ longitude: "60"; latitude: "80"; height: "130"; }
+ ListElement{ longitude: "60"; latitude: "81"; height: "124"; }
+ ListElement{ longitude: "60"; latitude: "82"; height: "132"; }
+ ListElement{ longitude: "60"; latitude: "83"; height: "132"; }
+ ListElement{ longitude: "60"; latitude: "84"; height: "130"; }
+ ListElement{ longitude: "60"; latitude: "85"; height: "122"; }
+ ListElement{ longitude: "60"; latitude: "86"; height: "113"; }
+ ListElement{ longitude: "60"; latitude: "87"; height: "102"; }
+ ListElement{ longitude: "60"; latitude: "88"; height: "98"; }
+ ListElement{ longitude: "60"; latitude: "89"; height: "103"; }
+ ListElement{ longitude: "60"; latitude: "90"; height: "112"; }
+ ListElement{ longitude: "60"; latitude: "91"; height: "114"; }
+ ListElement{ longitude: "60"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "60"; latitude: "93"; height: "122"; }
+ ListElement{ longitude: "60"; latitude: "94"; height: "127"; }
+ ListElement{ longitude: "60"; latitude: "95"; height: "129"; }
+ ListElement{ longitude: "60"; latitude: "96"; height: "137"; }
+ ListElement{ longitude: "60"; latitude: "97"; height: "139"; }
+ ListElement{ longitude: "60"; latitude: "98"; height: "140"; }
+ ListElement{ longitude: "60"; latitude: "99"; height: "138"; }
+ ListElement{ longitude: "61"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "61"; latitude: "1"; height: "120"; }
+ ListElement{ longitude: "61"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "61"; latitude: "3"; height: "122"; }
+ ListElement{ longitude: "61"; latitude: "4"; height: "125"; }
+ ListElement{ longitude: "61"; latitude: "5"; height: "127"; }
+ ListElement{ longitude: "61"; latitude: "6"; height: "129"; }
+ ListElement{ longitude: "61"; latitude: "7"; height: "127"; }
+ ListElement{ longitude: "61"; latitude: "8"; height: "127"; }
+ ListElement{ longitude: "61"; latitude: "9"; height: "123"; }
+ ListElement{ longitude: "61"; latitude: "10"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "11"; height: "123"; }
+ ListElement{ longitude: "61"; latitude: "12"; height: "125"; }
+ ListElement{ longitude: "61"; latitude: "13"; height: "123"; }
+ ListElement{ longitude: "61"; latitude: "14"; height: "123"; }
+ ListElement{ longitude: "61"; latitude: "15"; height: "123"; }
+ ListElement{ longitude: "61"; latitude: "16"; height: "122"; }
+ ListElement{ longitude: "61"; latitude: "17"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "18"; height: "118"; }
+ ListElement{ longitude: "61"; latitude: "19"; height: "120"; }
+ ListElement{ longitude: "61"; latitude: "20"; height: "118"; }
+ ListElement{ longitude: "61"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "23"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "24"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "25"; height: "119"; }
+ ListElement{ longitude: "61"; latitude: "26"; height: "117"; }
+ ListElement{ longitude: "61"; latitude: "27"; height: "120"; }
+ ListElement{ longitude: "61"; latitude: "28"; height: "120"; }
+ ListElement{ longitude: "61"; latitude: "29"; height: "118"; }
+ ListElement{ longitude: "61"; latitude: "30"; height: "117"; }
+ ListElement{ longitude: "61"; latitude: "31"; height: "123"; }
+ ListElement{ longitude: "61"; latitude: "32"; height: "126"; }
+ ListElement{ longitude: "61"; latitude: "33"; height: "125"; }
+ ListElement{ longitude: "61"; latitude: "34"; height: "127"; }
+ ListElement{ longitude: "61"; latitude: "35"; height: "130"; }
+ ListElement{ longitude: "61"; latitude: "36"; height: "129"; }
+ ListElement{ longitude: "61"; latitude: "37"; height: "130"; }
+ ListElement{ longitude: "61"; latitude: "38"; height: "129"; }
+ ListElement{ longitude: "61"; latitude: "39"; height: "128"; }
+ ListElement{ longitude: "61"; latitude: "40"; height: "126"; }
+ ListElement{ longitude: "61"; latitude: "41"; height: "107"; }
+ ListElement{ longitude: "61"; latitude: "42"; height: "98"; }
+ ListElement{ longitude: "61"; latitude: "43"; height: "117"; }
+ ListElement{ longitude: "61"; latitude: "44"; height: "117"; }
+ ListElement{ longitude: "61"; latitude: "45"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "46"; height: "126"; }
+ ListElement{ longitude: "61"; latitude: "47"; height: "125"; }
+ ListElement{ longitude: "61"; latitude: "48"; height: "130"; }
+ ListElement{ longitude: "61"; latitude: "49"; height: "137"; }
+ ListElement{ longitude: "61"; latitude: "50"; height: "138"; }
+ ListElement{ longitude: "61"; latitude: "51"; height: "134"; }
+ ListElement{ longitude: "61"; latitude: "52"; height: "134"; }
+ ListElement{ longitude: "61"; latitude: "53"; height: "131"; }
+ ListElement{ longitude: "61"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "61"; latitude: "55"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "57"; height: "117"; }
+ ListElement{ longitude: "61"; latitude: "58"; height: "113"; }
+ ListElement{ longitude: "61"; latitude: "59"; height: "111"; }
+ ListElement{ longitude: "61"; latitude: "60"; height: "110"; }
+ ListElement{ longitude: "61"; latitude: "61"; height: "109"; }
+ ListElement{ longitude: "61"; latitude: "62"; height: "109"; }
+ ListElement{ longitude: "61"; latitude: "63"; height: "110"; }
+ ListElement{ longitude: "61"; latitude: "64"; height: "108"; }
+ ListElement{ longitude: "61"; latitude: "65"; height: "108"; }
+ ListElement{ longitude: "61"; latitude: "66"; height: "108"; }
+ ListElement{ longitude: "61"; latitude: "67"; height: "108"; }
+ ListElement{ longitude: "61"; latitude: "68"; height: "110"; }
+ ListElement{ longitude: "61"; latitude: "69"; height: "109"; }
+ ListElement{ longitude: "61"; latitude: "70"; height: "110"; }
+ ListElement{ longitude: "61"; latitude: "71"; height: "112"; }
+ ListElement{ longitude: "61"; latitude: "72"; height: "116"; }
+ ListElement{ longitude: "61"; latitude: "73"; height: "116"; }
+ ListElement{ longitude: "61"; latitude: "74"; height: "119"; }
+ ListElement{ longitude: "61"; latitude: "75"; height: "120"; }
+ ListElement{ longitude: "61"; latitude: "76"; height: "123"; }
+ ListElement{ longitude: "61"; latitude: "77"; height: "121"; }
+ ListElement{ longitude: "61"; latitude: "78"; height: "125"; }
+ ListElement{ longitude: "61"; latitude: "79"; height: "122"; }
+ ListElement{ longitude: "61"; latitude: "80"; height: "124"; }
+ ListElement{ longitude: "61"; latitude: "81"; height: "125"; }
+ ListElement{ longitude: "61"; latitude: "82"; height: "128"; }
+ ListElement{ longitude: "61"; latitude: "83"; height: "128"; }
+ ListElement{ longitude: "61"; latitude: "84"; height: "124"; }
+ ListElement{ longitude: "61"; latitude: "85"; height: "119"; }
+ ListElement{ longitude: "61"; latitude: "86"; height: "116"; }
+ ListElement{ longitude: "61"; latitude: "87"; height: "112"; }
+ ListElement{ longitude: "61"; latitude: "88"; height: "110"; }
+ ListElement{ longitude: "61"; latitude: "89"; height: "109"; }
+ ListElement{ longitude: "61"; latitude: "90"; height: "113"; }
+ ListElement{ longitude: "61"; latitude: "91"; height: "119"; }
+ ListElement{ longitude: "61"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "61"; latitude: "93"; height: "118"; }
+ ListElement{ longitude: "61"; latitude: "94"; height: "120"; }
+ ListElement{ longitude: "61"; latitude: "95"; height: "124"; }
+ ListElement{ longitude: "61"; latitude: "96"; height: "131"; }
+ ListElement{ longitude: "61"; latitude: "97"; height: "144"; }
+ ListElement{ longitude: "61"; latitude: "98"; height: "143"; }
+ ListElement{ longitude: "61"; latitude: "99"; height: "137"; }
+ ListElement{ longitude: "62"; latitude: "0"; height: "122"; }
+ ListElement{ longitude: "62"; latitude: "1"; height: "121"; }
+ ListElement{ longitude: "62"; latitude: "2"; height: "121"; }
+ ListElement{ longitude: "62"; latitude: "3"; height: "124"; }
+ ListElement{ longitude: "62"; latitude: "4"; height: "127"; }
+ ListElement{ longitude: "62"; latitude: "5"; height: "128"; }
+ ListElement{ longitude: "62"; latitude: "6"; height: "128"; }
+ ListElement{ longitude: "62"; latitude: "7"; height: "125"; }
+ ListElement{ longitude: "62"; latitude: "8"; height: "122"; }
+ ListElement{ longitude: "62"; latitude: "9"; height: "122"; }
+ ListElement{ longitude: "62"; latitude: "10"; height: "120"; }
+ ListElement{ longitude: "62"; latitude: "11"; height: "122"; }
+ ListElement{ longitude: "62"; latitude: "12"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "13"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "14"; height: "127"; }
+ ListElement{ longitude: "62"; latitude: "15"; height: "125"; }
+ ListElement{ longitude: "62"; latitude: "16"; height: "124"; }
+ ListElement{ longitude: "62"; latitude: "17"; height: "121"; }
+ ListElement{ longitude: "62"; latitude: "18"; height: "120"; }
+ ListElement{ longitude: "62"; latitude: "19"; height: "117"; }
+ ListElement{ longitude: "62"; latitude: "20"; height: "116"; }
+ ListElement{ longitude: "62"; latitude: "21"; height: "119"; }
+ ListElement{ longitude: "62"; latitude: "22"; height: "110"; }
+ ListElement{ longitude: "62"; latitude: "23"; height: "110"; }
+ ListElement{ longitude: "62"; latitude: "24"; height: "119"; }
+ ListElement{ longitude: "62"; latitude: "25"; height: "119"; }
+ ListElement{ longitude: "62"; latitude: "26"; height: "116"; }
+ ListElement{ longitude: "62"; latitude: "27"; height: "114"; }
+ ListElement{ longitude: "62"; latitude: "28"; height: "114"; }
+ ListElement{ longitude: "62"; latitude: "29"; height: "117"; }
+ ListElement{ longitude: "62"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "62"; latitude: "31"; height: "121"; }
+ ListElement{ longitude: "62"; latitude: "32"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "62"; latitude: "34"; height: "124"; }
+ ListElement{ longitude: "62"; latitude: "35"; height: "130"; }
+ ListElement{ longitude: "62"; latitude: "36"; height: "128"; }
+ ListElement{ longitude: "62"; latitude: "37"; height: "125"; }
+ ListElement{ longitude: "62"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "62"; latitude: "39"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "62"; latitude: "41"; height: "106"; }
+ ListElement{ longitude: "62"; latitude: "42"; height: "94"; }
+ ListElement{ longitude: "62"; latitude: "43"; height: "120"; }
+ ListElement{ longitude: "62"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "62"; latitude: "45"; height: "120"; }
+ ListElement{ longitude: "62"; latitude: "46"; height: "126"; }
+ ListElement{ longitude: "62"; latitude: "47"; height: "125"; }
+ ListElement{ longitude: "62"; latitude: "48"; height: "132"; }
+ ListElement{ longitude: "62"; latitude: "49"; height: "137"; }
+ ListElement{ longitude: "62"; latitude: "50"; height: "137"; }
+ ListElement{ longitude: "62"; latitude: "51"; height: "127"; }
+ ListElement{ longitude: "62"; latitude: "52"; height: "131"; }
+ ListElement{ longitude: "62"; latitude: "53"; height: "128"; }
+ ListElement{ longitude: "62"; latitude: "54"; height: "125"; }
+ ListElement{ longitude: "62"; latitude: "55"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "56"; height: "110"; }
+ ListElement{ longitude: "62"; latitude: "57"; height: "116"; }
+ ListElement{ longitude: "62"; latitude: "58"; height: "112"; }
+ ListElement{ longitude: "62"; latitude: "59"; height: "109"; }
+ ListElement{ longitude: "62"; latitude: "60"; height: "108"; }
+ ListElement{ longitude: "62"; latitude: "61"; height: "107"; }
+ ListElement{ longitude: "62"; latitude: "62"; height: "107"; }
+ ListElement{ longitude: "62"; latitude: "63"; height: "107"; }
+ ListElement{ longitude: "62"; latitude: "64"; height: "108"; }
+ ListElement{ longitude: "62"; latitude: "65"; height: "108"; }
+ ListElement{ longitude: "62"; latitude: "66"; height: "108"; }
+ ListElement{ longitude: "62"; latitude: "67"; height: "106"; }
+ ListElement{ longitude: "62"; latitude: "68"; height: "107"; }
+ ListElement{ longitude: "62"; latitude: "69"; height: "107"; }
+ ListElement{ longitude: "62"; latitude: "70"; height: "109"; }
+ ListElement{ longitude: "62"; latitude: "71"; height: "114"; }
+ ListElement{ longitude: "62"; latitude: "72"; height: "116"; }
+ ListElement{ longitude: "62"; latitude: "73"; height: "118"; }
+ ListElement{ longitude: "62"; latitude: "74"; height: "119"; }
+ ListElement{ longitude: "62"; latitude: "75"; height: "121"; }
+ ListElement{ longitude: "62"; latitude: "76"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "77"; height: "126"; }
+ ListElement{ longitude: "62"; latitude: "78"; height: "126"; }
+ ListElement{ longitude: "62"; latitude: "79"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "80"; height: "121"; }
+ ListElement{ longitude: "62"; latitude: "81"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "82"; height: "123"; }
+ ListElement{ longitude: "62"; latitude: "83"; height: "127"; }
+ ListElement{ longitude: "62"; latitude: "84"; height: "124"; }
+ ListElement{ longitude: "62"; latitude: "85"; height: "119"; }
+ ListElement{ longitude: "62"; latitude: "86"; height: "118"; }
+ ListElement{ longitude: "62"; latitude: "87"; height: "116"; }
+ ListElement{ longitude: "62"; latitude: "88"; height: "117"; }
+ ListElement{ longitude: "62"; latitude: "89"; height: "113"; }
+ ListElement{ longitude: "62"; latitude: "90"; height: "114"; }
+ ListElement{ longitude: "62"; latitude: "91"; height: "116"; }
+ ListElement{ longitude: "62"; latitude: "92"; height: "120"; }
+ ListElement{ longitude: "62"; latitude: "93"; height: "116"; }
+ ListElement{ longitude: "62"; latitude: "94"; height: "116"; }
+ ListElement{ longitude: "62"; latitude: "95"; height: "118"; }
+ ListElement{ longitude: "62"; latitude: "96"; height: "126"; }
+ ListElement{ longitude: "62"; latitude: "97"; height: "126"; }
+ ListElement{ longitude: "62"; latitude: "98"; height: "122"; }
+ ListElement{ longitude: "62"; latitude: "99"; height: "124"; }
+ ListElement{ longitude: "63"; latitude: "0"; height: "125"; }
+ ListElement{ longitude: "63"; latitude: "1"; height: "125"; }
+ ListElement{ longitude: "63"; latitude: "2"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "63"; latitude: "4"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "5"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "6"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "7"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "8"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "9"; height: "118"; }
+ ListElement{ longitude: "63"; latitude: "10"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "11"; height: "119"; }
+ ListElement{ longitude: "63"; latitude: "12"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "13"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "14"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "15"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "16"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "17"; height: "120"; }
+ ListElement{ longitude: "63"; latitude: "18"; height: "119"; }
+ ListElement{ longitude: "63"; latitude: "19"; height: "116"; }
+ ListElement{ longitude: "63"; latitude: "20"; height: "115"; }
+ ListElement{ longitude: "63"; latitude: "21"; height: "116"; }
+ ListElement{ longitude: "63"; latitude: "22"; height: "109"; }
+ ListElement{ longitude: "63"; latitude: "23"; height: "109"; }
+ ListElement{ longitude: "63"; latitude: "24"; height: "117"; }
+ ListElement{ longitude: "63"; latitude: "25"; height: "113"; }
+ ListElement{ longitude: "63"; latitude: "26"; height: "112"; }
+ ListElement{ longitude: "63"; latitude: "27"; height: "111"; }
+ ListElement{ longitude: "63"; latitude: "28"; height: "111"; }
+ ListElement{ longitude: "63"; latitude: "29"; height: "113"; }
+ ListElement{ longitude: "63"; latitude: "30"; height: "115"; }
+ ListElement{ longitude: "63"; latitude: "31"; height: "119"; }
+ ListElement{ longitude: "63"; latitude: "32"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "33"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "34"; height: "124"; }
+ ListElement{ longitude: "63"; latitude: "35"; height: "127"; }
+ ListElement{ longitude: "63"; latitude: "36"; height: "127"; }
+ ListElement{ longitude: "63"; latitude: "37"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "38"; height: "125"; }
+ ListElement{ longitude: "63"; latitude: "39"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "63"; latitude: "41"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "42"; height: "118"; }
+ ListElement{ longitude: "63"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "63"; latitude: "44"; height: "125"; }
+ ListElement{ longitude: "63"; latitude: "45"; height: "124"; }
+ ListElement{ longitude: "63"; latitude: "46"; height: "125"; }
+ ListElement{ longitude: "63"; latitude: "47"; height: "128"; }
+ ListElement{ longitude: "63"; latitude: "48"; height: "133"; }
+ ListElement{ longitude: "63"; latitude: "49"; height: "135"; }
+ ListElement{ longitude: "63"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "63"; latitude: "51"; height: "132"; }
+ ListElement{ longitude: "63"; latitude: "52"; height: "128"; }
+ ListElement{ longitude: "63"; latitude: "53"; height: "124"; }
+ ListElement{ longitude: "63"; latitude: "54"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "55"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "56"; height: "110"; }
+ ListElement{ longitude: "63"; latitude: "57"; height: "113"; }
+ ListElement{ longitude: "63"; latitude: "58"; height: "113"; }
+ ListElement{ longitude: "63"; latitude: "59"; height: "109"; }
+ ListElement{ longitude: "63"; latitude: "60"; height: "107"; }
+ ListElement{ longitude: "63"; latitude: "61"; height: "106"; }
+ ListElement{ longitude: "63"; latitude: "62"; height: "106"; }
+ ListElement{ longitude: "63"; latitude: "63"; height: "106"; }
+ ListElement{ longitude: "63"; latitude: "64"; height: "104"; }
+ ListElement{ longitude: "63"; latitude: "65"; height: "104"; }
+ ListElement{ longitude: "63"; latitude: "66"; height: "104"; }
+ ListElement{ longitude: "63"; latitude: "67"; height: "106"; }
+ ListElement{ longitude: "63"; latitude: "68"; height: "106"; }
+ ListElement{ longitude: "63"; latitude: "69"; height: "107"; }
+ ListElement{ longitude: "63"; latitude: "70"; height: "109"; }
+ ListElement{ longitude: "63"; latitude: "71"; height: "114"; }
+ ListElement{ longitude: "63"; latitude: "72"; height: "115"; }
+ ListElement{ longitude: "63"; latitude: "73"; height: "117"; }
+ ListElement{ longitude: "63"; latitude: "74"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "75"; height: "123"; }
+ ListElement{ longitude: "63"; latitude: "76"; height: "127"; }
+ ListElement{ longitude: "63"; latitude: "77"; height: "128"; }
+ ListElement{ longitude: "63"; latitude: "78"; height: "127"; }
+ ListElement{ longitude: "63"; latitude: "79"; height: "124"; }
+ ListElement{ longitude: "63"; latitude: "80"; height: "125"; }
+ ListElement{ longitude: "63"; latitude: "81"; height: "122"; }
+ ListElement{ longitude: "63"; latitude: "82"; height: "123"; }
+ ListElement{ longitude: "63"; latitude: "83"; height: "123"; }
+ ListElement{ longitude: "63"; latitude: "84"; height: "123"; }
+ ListElement{ longitude: "63"; latitude: "85"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "86"; height: "115"; }
+ ListElement{ longitude: "63"; latitude: "87"; height: "115"; }
+ ListElement{ longitude: "63"; latitude: "88"; height: "117"; }
+ ListElement{ longitude: "63"; latitude: "89"; height: "117"; }
+ ListElement{ longitude: "63"; latitude: "90"; height: "118"; }
+ ListElement{ longitude: "63"; latitude: "91"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "63"; latitude: "93"; height: "109"; }
+ ListElement{ longitude: "63"; latitude: "94"; height: "111"; }
+ ListElement{ longitude: "63"; latitude: "95"; height: "116"; }
+ ListElement{ longitude: "63"; latitude: "96"; height: "121"; }
+ ListElement{ longitude: "63"; latitude: "97"; height: "119"; }
+ ListElement{ longitude: "63"; latitude: "98"; height: "124"; }
+ ListElement{ longitude: "63"; latitude: "99"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "0"; height: "127"; }
+ ListElement{ longitude: "64"; latitude: "1"; height: "127"; }
+ ListElement{ longitude: "64"; latitude: "2"; height: "127"; }
+ ListElement{ longitude: "64"; latitude: "3"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "5"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "6"; height: "119"; }
+ ListElement{ longitude: "64"; latitude: "7"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "8"; height: "119"; }
+ ListElement{ longitude: "64"; latitude: "9"; height: "114"; }
+ ListElement{ longitude: "64"; latitude: "10"; height: "114"; }
+ ListElement{ longitude: "64"; latitude: "11"; height: "114"; }
+ ListElement{ longitude: "64"; latitude: "12"; height: "114"; }
+ ListElement{ longitude: "64"; latitude: "13"; height: "115"; }
+ ListElement{ longitude: "64"; latitude: "14"; height: "116"; }
+ ListElement{ longitude: "64"; latitude: "15"; height: "117"; }
+ ListElement{ longitude: "64"; latitude: "16"; height: "119"; }
+ ListElement{ longitude: "64"; latitude: "17"; height: "119"; }
+ ListElement{ longitude: "64"; latitude: "18"; height: "116"; }
+ ListElement{ longitude: "64"; latitude: "19"; height: "115"; }
+ ListElement{ longitude: "64"; latitude: "20"; height: "114"; }
+ ListElement{ longitude: "64"; latitude: "21"; height: "116"; }
+ ListElement{ longitude: "64"; latitude: "22"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "23"; height: "116"; }
+ ListElement{ longitude: "64"; latitude: "24"; height: "113"; }
+ ListElement{ longitude: "64"; latitude: "25"; height: "111"; }
+ ListElement{ longitude: "64"; latitude: "26"; height: "109"; }
+ ListElement{ longitude: "64"; latitude: "27"; height: "108"; }
+ ListElement{ longitude: "64"; latitude: "28"; height: "110"; }
+ ListElement{ longitude: "64"; latitude: "29"; height: "110"; }
+ ListElement{ longitude: "64"; latitude: "30"; height: "114"; }
+ ListElement{ longitude: "64"; latitude: "31"; height: "114"; }
+ ListElement{ longitude: "64"; latitude: "32"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "33"; height: "119"; }
+ ListElement{ longitude: "64"; latitude: "34"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "35"; height: "121"; }
+ ListElement{ longitude: "64"; latitude: "36"; height: "121"; }
+ ListElement{ longitude: "64"; latitude: "37"; height: "121"; }
+ ListElement{ longitude: "64"; latitude: "38"; height: "122"; }
+ ListElement{ longitude: "64"; latitude: "39"; height: "116"; }
+ ListElement{ longitude: "64"; latitude: "40"; height: "119"; }
+ ListElement{ longitude: "64"; latitude: "41"; height: "123"; }
+ ListElement{ longitude: "64"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "64"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "64"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "64"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "64"; latitude: "46"; height: "128"; }
+ ListElement{ longitude: "64"; latitude: "47"; height: "130"; }
+ ListElement{ longitude: "64"; latitude: "48"; height: "134"; }
+ ListElement{ longitude: "64"; latitude: "49"; height: "137"; }
+ ListElement{ longitude: "64"; latitude: "50"; height: "135"; }
+ ListElement{ longitude: "64"; latitude: "51"; height: "126"; }
+ ListElement{ longitude: "64"; latitude: "52"; height: "125"; }
+ ListElement{ longitude: "64"; latitude: "53"; height: "122"; }
+ ListElement{ longitude: "64"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "64"; latitude: "57"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "58"; height: "112"; }
+ ListElement{ longitude: "64"; latitude: "59"; height: "109"; }
+ ListElement{ longitude: "64"; latitude: "60"; height: "107"; }
+ ListElement{ longitude: "64"; latitude: "61"; height: "106"; }
+ ListElement{ longitude: "64"; latitude: "62"; height: "106"; }
+ ListElement{ longitude: "64"; latitude: "63"; height: "106"; }
+ ListElement{ longitude: "64"; latitude: "64"; height: "108"; }
+ ListElement{ longitude: "64"; latitude: "65"; height: "108"; }
+ ListElement{ longitude: "64"; latitude: "66"; height: "108"; }
+ ListElement{ longitude: "64"; latitude: "67"; height: "110"; }
+ ListElement{ longitude: "64"; latitude: "68"; height: "107"; }
+ ListElement{ longitude: "64"; latitude: "69"; height: "110"; }
+ ListElement{ longitude: "64"; latitude: "70"; height: "110"; }
+ ListElement{ longitude: "64"; latitude: "71"; height: "113"; }
+ ListElement{ longitude: "64"; latitude: "72"; height: "115"; }
+ ListElement{ longitude: "64"; latitude: "73"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "74"; height: "123"; }
+ ListElement{ longitude: "64"; latitude: "75"; height: "127"; }
+ ListElement{ longitude: "64"; latitude: "76"; height: "129"; }
+ ListElement{ longitude: "64"; latitude: "77"; height: "130"; }
+ ListElement{ longitude: "64"; latitude: "78"; height: "131"; }
+ ListElement{ longitude: "64"; latitude: "79"; height: "127"; }
+ ListElement{ longitude: "64"; latitude: "80"; height: "123"; }
+ ListElement{ longitude: "64"; latitude: "81"; height: "121"; }
+ ListElement{ longitude: "64"; latitude: "82"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "83"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "84"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "85"; height: "121"; }
+ ListElement{ longitude: "64"; latitude: "86"; height: "117"; }
+ ListElement{ longitude: "64"; latitude: "87"; height: "116"; }
+ ListElement{ longitude: "64"; latitude: "88"; height: "116"; }
+ ListElement{ longitude: "64"; latitude: "89"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "90"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "91"; height: "122"; }
+ ListElement{ longitude: "64"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "64"; latitude: "93"; height: "106"; }
+ ListElement{ longitude: "64"; latitude: "94"; height: "111"; }
+ ListElement{ longitude: "64"; latitude: "95"; height: "116"; }
+ ListElement{ longitude: "64"; latitude: "96"; height: "120"; }
+ ListElement{ longitude: "64"; latitude: "97"; height: "118"; }
+ ListElement{ longitude: "64"; latitude: "98"; height: "119"; }
+ ListElement{ longitude: "64"; latitude: "99"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "0"; height: "128"; }
+ ListElement{ longitude: "65"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "65"; latitude: "2"; height: "127"; }
+ ListElement{ longitude: "65"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "65"; latitude: "4"; height: "122"; }
+ ListElement{ longitude: "65"; latitude: "5"; height: "119"; }
+ ListElement{ longitude: "65"; latitude: "6"; height: "120"; }
+ ListElement{ longitude: "65"; latitude: "7"; height: "117"; }
+ ListElement{ longitude: "65"; latitude: "8"; height: "117"; }
+ ListElement{ longitude: "65"; latitude: "9"; height: "114"; }
+ ListElement{ longitude: "65"; latitude: "10"; height: "112"; }
+ ListElement{ longitude: "65"; latitude: "11"; height: "110"; }
+ ListElement{ longitude: "65"; latitude: "12"; height: "110"; }
+ ListElement{ longitude: "65"; latitude: "13"; height: "111"; }
+ ListElement{ longitude: "65"; latitude: "14"; height: "113"; }
+ ListElement{ longitude: "65"; latitude: "15"; height: "118"; }
+ ListElement{ longitude: "65"; latitude: "16"; height: "117"; }
+ ListElement{ longitude: "65"; latitude: "17"; height: "114"; }
+ ListElement{ longitude: "65"; latitude: "18"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "19"; height: "114"; }
+ ListElement{ longitude: "65"; latitude: "20"; height: "114"; }
+ ListElement{ longitude: "65"; latitude: "21"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "22"; height: "117"; }
+ ListElement{ longitude: "65"; latitude: "23"; height: "117"; }
+ ListElement{ longitude: "65"; latitude: "24"; height: "113"; }
+ ListElement{ longitude: "65"; latitude: "25"; height: "112"; }
+ ListElement{ longitude: "65"; latitude: "26"; height: "107"; }
+ ListElement{ longitude: "65"; latitude: "27"; height: "104"; }
+ ListElement{ longitude: "65"; latitude: "28"; height: "104"; }
+ ListElement{ longitude: "65"; latitude: "29"; height: "108"; }
+ ListElement{ longitude: "65"; latitude: "30"; height: "110"; }
+ ListElement{ longitude: "65"; latitude: "31"; height: "112"; }
+ ListElement{ longitude: "65"; latitude: "32"; height: "115"; }
+ ListElement{ longitude: "65"; latitude: "33"; height: "115"; }
+ ListElement{ longitude: "65"; latitude: "34"; height: "115"; }
+ ListElement{ longitude: "65"; latitude: "35"; height: "113"; }
+ ListElement{ longitude: "65"; latitude: "36"; height: "117"; }
+ ListElement{ longitude: "65"; latitude: "37"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "38"; height: "114"; }
+ ListElement{ longitude: "65"; latitude: "39"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "40"; height: "118"; }
+ ListElement{ longitude: "65"; latitude: "41"; height: "122"; }
+ ListElement{ longitude: "65"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "65"; latitude: "43"; height: "130"; }
+ ListElement{ longitude: "65"; latitude: "44"; height: "131"; }
+ ListElement{ longitude: "65"; latitude: "45"; height: "132"; }
+ ListElement{ longitude: "65"; latitude: "46"; height: "133"; }
+ ListElement{ longitude: "65"; latitude: "47"; height: "134"; }
+ ListElement{ longitude: "65"; latitude: "48"; height: "130"; }
+ ListElement{ longitude: "65"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "65"; latitude: "50"; height: "133"; }
+ ListElement{ longitude: "65"; latitude: "51"; height: "120"; }
+ ListElement{ longitude: "65"; latitude: "52"; height: "125"; }
+ ListElement{ longitude: "65"; latitude: "53"; height: "124"; }
+ ListElement{ longitude: "65"; latitude: "54"; height: "120"; }
+ ListElement{ longitude: "65"; latitude: "55"; height: "119"; }
+ ListElement{ longitude: "65"; latitude: "56"; height: "119"; }
+ ListElement{ longitude: "65"; latitude: "57"; height: "117"; }
+ ListElement{ longitude: "65"; latitude: "58"; height: "113"; }
+ ListElement{ longitude: "65"; latitude: "59"; height: "110"; }
+ ListElement{ longitude: "65"; latitude: "60"; height: "110"; }
+ ListElement{ longitude: "65"; latitude: "61"; height: "108"; }
+ ListElement{ longitude: "65"; latitude: "62"; height: "109"; }
+ ListElement{ longitude: "65"; latitude: "63"; height: "109"; }
+ ListElement{ longitude: "65"; latitude: "64"; height: "107"; }
+ ListElement{ longitude: "65"; latitude: "65"; height: "107"; }
+ ListElement{ longitude: "65"; latitude: "66"; height: "107"; }
+ ListElement{ longitude: "65"; latitude: "67"; height: "109"; }
+ ListElement{ longitude: "65"; latitude: "68"; height: "104"; }
+ ListElement{ longitude: "65"; latitude: "69"; height: "112"; }
+ ListElement{ longitude: "65"; latitude: "70"; height: "112"; }
+ ListElement{ longitude: "65"; latitude: "71"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "72"; height: "118"; }
+ ListElement{ longitude: "65"; latitude: "73"; height: "119"; }
+ ListElement{ longitude: "65"; latitude: "74"; height: "126"; }
+ ListElement{ longitude: "65"; latitude: "75"; height: "128"; }
+ ListElement{ longitude: "65"; latitude: "76"; height: "132"; }
+ ListElement{ longitude: "65"; latitude: "77"; height: "129"; }
+ ListElement{ longitude: "65"; latitude: "78"; height: "131"; }
+ ListElement{ longitude: "65"; latitude: "79"; height: "129"; }
+ ListElement{ longitude: "65"; latitude: "80"; height: "124"; }
+ ListElement{ longitude: "65"; latitude: "81"; height: "119"; }
+ ListElement{ longitude: "65"; latitude: "82"; height: "120"; }
+ ListElement{ longitude: "65"; latitude: "83"; height: "121"; }
+ ListElement{ longitude: "65"; latitude: "84"; height: "121"; }
+ ListElement{ longitude: "65"; latitude: "85"; height: "120"; }
+ ListElement{ longitude: "65"; latitude: "86"; height: "119"; }
+ ListElement{ longitude: "65"; latitude: "87"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "88"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "89"; height: "118"; }
+ ListElement{ longitude: "65"; latitude: "90"; height: "120"; }
+ ListElement{ longitude: "65"; latitude: "91"; height: "122"; }
+ ListElement{ longitude: "65"; latitude: "92"; height: "120"; }
+ ListElement{ longitude: "65"; latitude: "93"; height: "111"; }
+ ListElement{ longitude: "65"; latitude: "94"; height: "110"; }
+ ListElement{ longitude: "65"; latitude: "95"; height: "110"; }
+ ListElement{ longitude: "65"; latitude: "96"; height: "117"; }
+ ListElement{ longitude: "65"; latitude: "97"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "98"; height: "116"; }
+ ListElement{ longitude: "65"; latitude: "99"; height: "116"; }
+ ListElement{ longitude: "66"; latitude: "0"; height: "128"; }
+ ListElement{ longitude: "66"; latitude: "1"; height: "130"; }
+ ListElement{ longitude: "66"; latitude: "2"; height: "127"; }
+ ListElement{ longitude: "66"; latitude: "3"; height: "125"; }
+ ListElement{ longitude: "66"; latitude: "4"; height: "123"; }
+ ListElement{ longitude: "66"; latitude: "5"; height: "120"; }
+ ListElement{ longitude: "66"; latitude: "6"; height: "121"; }
+ ListElement{ longitude: "66"; latitude: "7"; height: "119"; }
+ ListElement{ longitude: "66"; latitude: "8"; height: "115"; }
+ ListElement{ longitude: "66"; latitude: "9"; height: "113"; }
+ ListElement{ longitude: "66"; latitude: "10"; height: "110"; }
+ ListElement{ longitude: "66"; latitude: "11"; height: "107"; }
+ ListElement{ longitude: "66"; latitude: "12"; height: "108"; }
+ ListElement{ longitude: "66"; latitude: "13"; height: "111"; }
+ ListElement{ longitude: "66"; latitude: "14"; height: "111"; }
+ ListElement{ longitude: "66"; latitude: "15"; height: "116"; }
+ ListElement{ longitude: "66"; latitude: "16"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "17"; height: "112"; }
+ ListElement{ longitude: "66"; latitude: "18"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "19"; height: "115"; }
+ ListElement{ longitude: "66"; latitude: "20"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "21"; height: "119"; }
+ ListElement{ longitude: "66"; latitude: "22"; height: "117"; }
+ ListElement{ longitude: "66"; latitude: "23"; height: "117"; }
+ ListElement{ longitude: "66"; latitude: "24"; height: "115"; }
+ ListElement{ longitude: "66"; latitude: "25"; height: "112"; }
+ ListElement{ longitude: "66"; latitude: "26"; height: "107"; }
+ ListElement{ longitude: "66"; latitude: "27"; height: "102"; }
+ ListElement{ longitude: "66"; latitude: "28"; height: "102"; }
+ ListElement{ longitude: "66"; latitude: "29"; height: "107"; }
+ ListElement{ longitude: "66"; latitude: "30"; height: "110"; }
+ ListElement{ longitude: "66"; latitude: "31"; height: "110"; }
+ ListElement{ longitude: "66"; latitude: "32"; height: "113"; }
+ ListElement{ longitude: "66"; latitude: "33"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "34"; height: "113"; }
+ ListElement{ longitude: "66"; latitude: "35"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "36"; height: "112"; }
+ ListElement{ longitude: "66"; latitude: "37"; height: "111"; }
+ ListElement{ longitude: "66"; latitude: "38"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "39"; height: "116"; }
+ ListElement{ longitude: "66"; latitude: "40"; height: "119"; }
+ ListElement{ longitude: "66"; latitude: "41"; height: "124"; }
+ ListElement{ longitude: "66"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "66"; latitude: "43"; height: "131"; }
+ ListElement{ longitude: "66"; latitude: "44"; height: "133"; }
+ ListElement{ longitude: "66"; latitude: "45"; height: "136"; }
+ ListElement{ longitude: "66"; latitude: "46"; height: "137"; }
+ ListElement{ longitude: "66"; latitude: "47"; height: "134"; }
+ ListElement{ longitude: "66"; latitude: "48"; height: "136"; }
+ ListElement{ longitude: "66"; latitude: "49"; height: "128"; }
+ ListElement{ longitude: "66"; latitude: "50"; height: "130"; }
+ ListElement{ longitude: "66"; latitude: "51"; height: "121"; }
+ ListElement{ longitude: "66"; latitude: "52"; height: "124"; }
+ ListElement{ longitude: "66"; latitude: "53"; height: "125"; }
+ ListElement{ longitude: "66"; latitude: "54"; height: "121"; }
+ ListElement{ longitude: "66"; latitude: "55"; height: "120"; }
+ ListElement{ longitude: "66"; latitude: "56"; height: "118"; }
+ ListElement{ longitude: "66"; latitude: "57"; height: "118"; }
+ ListElement{ longitude: "66"; latitude: "58"; height: "117"; }
+ ListElement{ longitude: "66"; latitude: "59"; height: "109"; }
+ ListElement{ longitude: "66"; latitude: "60"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "61"; height: "109"; }
+ ListElement{ longitude: "66"; latitude: "62"; height: "110"; }
+ ListElement{ longitude: "66"; latitude: "63"; height: "111"; }
+ ListElement{ longitude: "66"; latitude: "64"; height: "110"; }
+ ListElement{ longitude: "66"; latitude: "65"; height: "108"; }
+ ListElement{ longitude: "66"; latitude: "66"; height: "108"; }
+ ListElement{ longitude: "66"; latitude: "67"; height: "109"; }
+ ListElement{ longitude: "66"; latitude: "68"; height: "112"; }
+ ListElement{ longitude: "66"; latitude: "69"; height: "112"; }
+ ListElement{ longitude: "66"; latitude: "70"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "71"; height: "117"; }
+ ListElement{ longitude: "66"; latitude: "72"; height: "119"; }
+ ListElement{ longitude: "66"; latitude: "73"; height: "120"; }
+ ListElement{ longitude: "66"; latitude: "74"; height: "123"; }
+ ListElement{ longitude: "66"; latitude: "75"; height: "128"; }
+ ListElement{ longitude: "66"; latitude: "76"; height: "131"; }
+ ListElement{ longitude: "66"; latitude: "77"; height: "134"; }
+ ListElement{ longitude: "66"; latitude: "78"; height: "136"; }
+ ListElement{ longitude: "66"; latitude: "79"; height: "130"; }
+ ListElement{ longitude: "66"; latitude: "80"; height: "126"; }
+ ListElement{ longitude: "66"; latitude: "81"; height: "120"; }
+ ListElement{ longitude: "66"; latitude: "82"; height: "120"; }
+ ListElement{ longitude: "66"; latitude: "83"; height: "119"; }
+ ListElement{ longitude: "66"; latitude: "84"; height: "119"; }
+ ListElement{ longitude: "66"; latitude: "85"; height: "119"; }
+ ListElement{ longitude: "66"; latitude: "86"; height: "120"; }
+ ListElement{ longitude: "66"; latitude: "87"; height: "117"; }
+ ListElement{ longitude: "66"; latitude: "88"; height: "116"; }
+ ListElement{ longitude: "66"; latitude: "89"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "90"; height: "117"; }
+ ListElement{ longitude: "66"; latitude: "91"; height: "120"; }
+ ListElement{ longitude: "66"; latitude: "92"; height: "121"; }
+ ListElement{ longitude: "66"; latitude: "93"; height: "114"; }
+ ListElement{ longitude: "66"; latitude: "94"; height: "115"; }
+ ListElement{ longitude: "66"; latitude: "95"; height: "112"; }
+ ListElement{ longitude: "66"; latitude: "96"; height: "119"; }
+ ListElement{ longitude: "66"; latitude: "97"; height: "116"; }
+ ListElement{ longitude: "66"; latitude: "98"; height: "116"; }
+ ListElement{ longitude: "66"; latitude: "99"; height: "119"; }
+ ListElement{ longitude: "67"; latitude: "0"; height: "126"; }
+ ListElement{ longitude: "67"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "67"; latitude: "2"; height: "127"; }
+ ListElement{ longitude: "67"; latitude: "3"; height: "126"; }
+ ListElement{ longitude: "67"; latitude: "4"; height: "124"; }
+ ListElement{ longitude: "67"; latitude: "5"; height: "120"; }
+ ListElement{ longitude: "67"; latitude: "6"; height: "121"; }
+ ListElement{ longitude: "67"; latitude: "7"; height: "119"; }
+ ListElement{ longitude: "67"; latitude: "8"; height: "116"; }
+ ListElement{ longitude: "67"; latitude: "9"; height: "114"; }
+ ListElement{ longitude: "67"; latitude: "10"; height: "111"; }
+ ListElement{ longitude: "67"; latitude: "11"; height: "108"; }
+ ListElement{ longitude: "67"; latitude: "12"; height: "108"; }
+ ListElement{ longitude: "67"; latitude: "13"; height: "108"; }
+ ListElement{ longitude: "67"; latitude: "14"; height: "109"; }
+ ListElement{ longitude: "67"; latitude: "15"; height: "109"; }
+ ListElement{ longitude: "67"; latitude: "16"; height: "109"; }
+ ListElement{ longitude: "67"; latitude: "17"; height: "112"; }
+ ListElement{ longitude: "67"; latitude: "18"; height: "112"; }
+ ListElement{ longitude: "67"; latitude: "19"; height: "110"; }
+ ListElement{ longitude: "67"; latitude: "20"; height: "97"; }
+ ListElement{ longitude: "67"; latitude: "21"; height: "113"; }
+ ListElement{ longitude: "67"; latitude: "22"; height: "118"; }
+ ListElement{ longitude: "67"; latitude: "23"; height: "118"; }
+ ListElement{ longitude: "67"; latitude: "24"; height: "114"; }
+ ListElement{ longitude: "67"; latitude: "25"; height: "112"; }
+ ListElement{ longitude: "67"; latitude: "26"; height: "109"; }
+ ListElement{ longitude: "67"; latitude: "27"; height: "105"; }
+ ListElement{ longitude: "67"; latitude: "28"; height: "104"; }
+ ListElement{ longitude: "67"; latitude: "29"; height: "102"; }
+ ListElement{ longitude: "67"; latitude: "30"; height: "107"; }
+ ListElement{ longitude: "67"; latitude: "31"; height: "111"; }
+ ListElement{ longitude: "67"; latitude: "32"; height: "111"; }
+ ListElement{ longitude: "67"; latitude: "33"; height: "114"; }
+ ListElement{ longitude: "67"; latitude: "34"; height: "113"; }
+ ListElement{ longitude: "67"; latitude: "35"; height: "112"; }
+ ListElement{ longitude: "67"; latitude: "36"; height: "110"; }
+ ListElement{ longitude: "67"; latitude: "37"; height: "109"; }
+ ListElement{ longitude: "67"; latitude: "38"; height: "114"; }
+ ListElement{ longitude: "67"; latitude: "39"; height: "117"; }
+ ListElement{ longitude: "67"; latitude: "40"; height: "122"; }
+ ListElement{ longitude: "67"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "67"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "67"; latitude: "43"; height: "131"; }
+ ListElement{ longitude: "67"; latitude: "44"; height: "134"; }
+ ListElement{ longitude: "67"; latitude: "45"; height: "136"; }
+ ListElement{ longitude: "67"; latitude: "46"; height: "134"; }
+ ListElement{ longitude: "67"; latitude: "47"; height: "133"; }
+ ListElement{ longitude: "67"; latitude: "48"; height: "136"; }
+ ListElement{ longitude: "67"; latitude: "49"; height: "133"; }
+ ListElement{ longitude: "67"; latitude: "50"; height: "129"; }
+ ListElement{ longitude: "67"; latitude: "51"; height: "128"; }
+ ListElement{ longitude: "67"; latitude: "52"; height: "128"; }
+ ListElement{ longitude: "67"; latitude: "53"; height: "128"; }
+ ListElement{ longitude: "67"; latitude: "54"; height: "123"; }
+ ListElement{ longitude: "67"; latitude: "55"; height: "123"; }
+ ListElement{ longitude: "67"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "67"; latitude: "57"; height: "118"; }
+ ListElement{ longitude: "67"; latitude: "58"; height: "117"; }
+ ListElement{ longitude: "67"; latitude: "59"; height: "104"; }
+ ListElement{ longitude: "67"; latitude: "60"; height: "114"; }
+ ListElement{ longitude: "67"; latitude: "61"; height: "117"; }
+ ListElement{ longitude: "67"; latitude: "62"; height: "116"; }
+ ListElement{ longitude: "67"; latitude: "63"; height: "114"; }
+ ListElement{ longitude: "67"; latitude: "64"; height: "110"; }
+ ListElement{ longitude: "67"; latitude: "65"; height: "109"; }
+ ListElement{ longitude: "67"; latitude: "66"; height: "111"; }
+ ListElement{ longitude: "67"; latitude: "67"; height: "112"; }
+ ListElement{ longitude: "67"; latitude: "68"; height: "112"; }
+ ListElement{ longitude: "67"; latitude: "69"; height: "116"; }
+ ListElement{ longitude: "67"; latitude: "70"; height: "117"; }
+ ListElement{ longitude: "67"; latitude: "71"; height: "119"; }
+ ListElement{ longitude: "67"; latitude: "72"; height: "118"; }
+ ListElement{ longitude: "67"; latitude: "73"; height: "121"; }
+ ListElement{ longitude: "67"; latitude: "74"; height: "124"; }
+ ListElement{ longitude: "67"; latitude: "75"; height: "127"; }
+ ListElement{ longitude: "67"; latitude: "76"; height: "132"; }
+ ListElement{ longitude: "67"; latitude: "77"; height: "132"; }
+ ListElement{ longitude: "67"; latitude: "78"; height: "132"; }
+ ListElement{ longitude: "67"; latitude: "79"; height: "124"; }
+ ListElement{ longitude: "67"; latitude: "80"; height: "127"; }
+ ListElement{ longitude: "67"; latitude: "81"; height: "123"; }
+ ListElement{ longitude: "67"; latitude: "82"; height: "121"; }
+ ListElement{ longitude: "67"; latitude: "83"; height: "122"; }
+ ListElement{ longitude: "67"; latitude: "84"; height: "122"; }
+ ListElement{ longitude: "67"; latitude: "85"; height: "122"; }
+ ListElement{ longitude: "67"; latitude: "86"; height: "122"; }
+ ListElement{ longitude: "67"; latitude: "87"; height: "120"; }
+ ListElement{ longitude: "67"; latitude: "88"; height: "116"; }
+ ListElement{ longitude: "67"; latitude: "89"; height: "115"; }
+ ListElement{ longitude: "67"; latitude: "90"; height: "115"; }
+ ListElement{ longitude: "67"; latitude: "91"; height: "117"; }
+ ListElement{ longitude: "67"; latitude: "92"; height: "120"; }
+ ListElement{ longitude: "67"; latitude: "93"; height: "122"; }
+ ListElement{ longitude: "67"; latitude: "94"; height: "121"; }
+ ListElement{ longitude: "67"; latitude: "95"; height: "120"; }
+ ListElement{ longitude: "67"; latitude: "96"; height: "124"; }
+ ListElement{ longitude: "67"; latitude: "97"; height: "128"; }
+ ListElement{ longitude: "67"; latitude: "98"; height: "122"; }
+ ListElement{ longitude: "67"; latitude: "99"; height: "123"; }
+ ListElement{ longitude: "68"; latitude: "0"; height: "125"; }
+ ListElement{ longitude: "68"; latitude: "1"; height: "126"; }
+ ListElement{ longitude: "68"; latitude: "2"; height: "128"; }
+ ListElement{ longitude: "68"; latitude: "3"; height: "125"; }
+ ListElement{ longitude: "68"; latitude: "4"; height: "121"; }
+ ListElement{ longitude: "68"; latitude: "5"; height: "121"; }
+ ListElement{ longitude: "68"; latitude: "6"; height: "120"; }
+ ListElement{ longitude: "68"; latitude: "7"; height: "118"; }
+ ListElement{ longitude: "68"; latitude: "8"; height: "115"; }
+ ListElement{ longitude: "68"; latitude: "9"; height: "110"; }
+ ListElement{ longitude: "68"; latitude: "10"; height: "109"; }
+ ListElement{ longitude: "68"; latitude: "11"; height: "108"; }
+ ListElement{ longitude: "68"; latitude: "12"; height: "109"; }
+ ListElement{ longitude: "68"; latitude: "13"; height: "109"; }
+ ListElement{ longitude: "68"; latitude: "14"; height: "108"; }
+ ListElement{ longitude: "68"; latitude: "15"; height: "108"; }
+ ListElement{ longitude: "68"; latitude: "16"; height: "104"; }
+ ListElement{ longitude: "68"; latitude: "17"; height: "108"; }
+ ListElement{ longitude: "68"; latitude: "18"; height: "111"; }
+ ListElement{ longitude: "68"; latitude: "19"; height: "113"; }
+ ListElement{ longitude: "68"; latitude: "20"; height: "105"; }
+ ListElement{ longitude: "68"; latitude: "21"; height: "114"; }
+ ListElement{ longitude: "68"; latitude: "22"; height: "114"; }
+ ListElement{ longitude: "68"; latitude: "23"; height: "114"; }
+ ListElement{ longitude: "68"; latitude: "24"; height: "113"; }
+ ListElement{ longitude: "68"; latitude: "25"; height: "111"; }
+ ListElement{ longitude: "68"; latitude: "26"; height: "109"; }
+ ListElement{ longitude: "68"; latitude: "27"; height: "107"; }
+ ListElement{ longitude: "68"; latitude: "28"; height: "105"; }
+ ListElement{ longitude: "68"; latitude: "29"; height: "104"; }
+ ListElement{ longitude: "68"; latitude: "30"; height: "100"; }
+ ListElement{ longitude: "68"; latitude: "31"; height: "105"; }
+ ListElement{ longitude: "68"; latitude: "32"; height: "107"; }
+ ListElement{ longitude: "68"; latitude: "33"; height: "109"; }
+ ListElement{ longitude: "68"; latitude: "34"; height: "111"; }
+ ListElement{ longitude: "68"; latitude: "35"; height: "108"; }
+ ListElement{ longitude: "68"; latitude: "36"; height: "109"; }
+ ListElement{ longitude: "68"; latitude: "37"; height: "111"; }
+ ListElement{ longitude: "68"; latitude: "38"; height: "116"; }
+ ListElement{ longitude: "68"; latitude: "39"; height: "118"; }
+ ListElement{ longitude: "68"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "68"; latitude: "41"; height: "122"; }
+ ListElement{ longitude: "68"; latitude: "42"; height: "131"; }
+ ListElement{ longitude: "68"; latitude: "43"; height: "124"; }
+ ListElement{ longitude: "68"; latitude: "44"; height: "131"; }
+ ListElement{ longitude: "68"; latitude: "45"; height: "130"; }
+ ListElement{ longitude: "68"; latitude: "46"; height: "131"; }
+ ListElement{ longitude: "68"; latitude: "47"; height: "129"; }
+ ListElement{ longitude: "68"; latitude: "48"; height: "130"; }
+ ListElement{ longitude: "68"; latitude: "49"; height: "126"; }
+ ListElement{ longitude: "68"; latitude: "50"; height: "128"; }
+ ListElement{ longitude: "68"; latitude: "51"; height: "130"; }
+ ListElement{ longitude: "68"; latitude: "52"; height: "129"; }
+ ListElement{ longitude: "68"; latitude: "53"; height: "127"; }
+ ListElement{ longitude: "68"; latitude: "54"; height: "126"; }
+ ListElement{ longitude: "68"; latitude: "55"; height: "124"; }
+ ListElement{ longitude: "68"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "68"; latitude: "57"; height: "119"; }
+ ListElement{ longitude: "68"; latitude: "58"; height: "120"; }
+ ListElement{ longitude: "68"; latitude: "59"; height: "120"; }
+ ListElement{ longitude: "68"; latitude: "60"; height: "120"; }
+ ListElement{ longitude: "68"; latitude: "61"; height: "122"; }
+ ListElement{ longitude: "68"; latitude: "62"; height: "121"; }
+ ListElement{ longitude: "68"; latitude: "63"; height: "115"; }
+ ListElement{ longitude: "68"; latitude: "64"; height: "115"; }
+ ListElement{ longitude: "68"; latitude: "65"; height: "111"; }
+ ListElement{ longitude: "68"; latitude: "66"; height: "111"; }
+ ListElement{ longitude: "68"; latitude: "67"; height: "112"; }
+ ListElement{ longitude: "68"; latitude: "68"; height: "116"; }
+ ListElement{ longitude: "68"; latitude: "69"; height: "116"; }
+ ListElement{ longitude: "68"; latitude: "70"; height: "119"; }
+ ListElement{ longitude: "68"; latitude: "71"; height: "119"; }
+ ListElement{ longitude: "68"; latitude: "72"; height: "119"; }
+ ListElement{ longitude: "68"; latitude: "73"; height: "119"; }
+ ListElement{ longitude: "68"; latitude: "74"; height: "121"; }
+ ListElement{ longitude: "68"; latitude: "75"; height: "126"; }
+ ListElement{ longitude: "68"; latitude: "76"; height: "127"; }
+ ListElement{ longitude: "68"; latitude: "77"; height: "129"; }
+ ListElement{ longitude: "68"; latitude: "78"; height: "133"; }
+ ListElement{ longitude: "68"; latitude: "79"; height: "130"; }
+ ListElement{ longitude: "68"; latitude: "80"; height: "128"; }
+ ListElement{ longitude: "68"; latitude: "81"; height: "125"; }
+ ListElement{ longitude: "68"; latitude: "82"; height: "123"; }
+ ListElement{ longitude: "68"; latitude: "83"; height: "122"; }
+ ListElement{ longitude: "68"; latitude: "84"; height: "122"; }
+ ListElement{ longitude: "68"; latitude: "85"; height: "123"; }
+ ListElement{ longitude: "68"; latitude: "86"; height: "124"; }
+ ListElement{ longitude: "68"; latitude: "87"; height: "122"; }
+ ListElement{ longitude: "68"; latitude: "88"; height: "117"; }
+ ListElement{ longitude: "68"; latitude: "89"; height: "115"; }
+ ListElement{ longitude: "68"; latitude: "90"; height: "115"; }
+ ListElement{ longitude: "68"; latitude: "91"; height: "116"; }
+ ListElement{ longitude: "68"; latitude: "92"; height: "118"; }
+ ListElement{ longitude: "68"; latitude: "93"; height: "122"; }
+ ListElement{ longitude: "68"; latitude: "94"; height: "122"; }
+ ListElement{ longitude: "68"; latitude: "95"; height: "124"; }
+ ListElement{ longitude: "68"; latitude: "96"; height: "128"; }
+ ListElement{ longitude: "68"; latitude: "97"; height: "133"; }
+ ListElement{ longitude: "68"; latitude: "98"; height: "125"; }
+ ListElement{ longitude: "68"; latitude: "99"; height: "124"; }
+ ListElement{ longitude: "69"; latitude: "0"; height: "126"; }
+ ListElement{ longitude: "69"; latitude: "1"; height: "122"; }
+ ListElement{ longitude: "69"; latitude: "2"; height: "125"; }
+ ListElement{ longitude: "69"; latitude: "3"; height: "124"; }
+ ListElement{ longitude: "69"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "69"; latitude: "5"; height: "118"; }
+ ListElement{ longitude: "69"; latitude: "6"; height: "118"; }
+ ListElement{ longitude: "69"; latitude: "7"; height: "116"; }
+ ListElement{ longitude: "69"; latitude: "8"; height: "113"; }
+ ListElement{ longitude: "69"; latitude: "9"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "10"; height: "107"; }
+ ListElement{ longitude: "69"; latitude: "11"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "12"; height: "108"; }
+ ListElement{ longitude: "69"; latitude: "13"; height: "108"; }
+ ListElement{ longitude: "69"; latitude: "14"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "15"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "16"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "17"; height: "108"; }
+ ListElement{ longitude: "69"; latitude: "18"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "19"; height: "112"; }
+ ListElement{ longitude: "69"; latitude: "20"; height: "114"; }
+ ListElement{ longitude: "69"; latitude: "21"; height: "114"; }
+ ListElement{ longitude: "69"; latitude: "22"; height: "111"; }
+ ListElement{ longitude: "69"; latitude: "23"; height: "110"; }
+ ListElement{ longitude: "69"; latitude: "24"; height: "112"; }
+ ListElement{ longitude: "69"; latitude: "25"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "26"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "27"; height: "107"; }
+ ListElement{ longitude: "69"; latitude: "28"; height: "105"; }
+ ListElement{ longitude: "69"; latitude: "29"; height: "101"; }
+ ListElement{ longitude: "69"; latitude: "30"; height: "100"; }
+ ListElement{ longitude: "69"; latitude: "31"; height: "98"; }
+ ListElement{ longitude: "69"; latitude: "32"; height: "99"; }
+ ListElement{ longitude: "69"; latitude: "33"; height: "101"; }
+ ListElement{ longitude: "69"; latitude: "34"; height: "104"; }
+ ListElement{ longitude: "69"; latitude: "35"; height: "105"; }
+ ListElement{ longitude: "69"; latitude: "36"; height: "109"; }
+ ListElement{ longitude: "69"; latitude: "37"; height: "112"; }
+ ListElement{ longitude: "69"; latitude: "38"; height: "116"; }
+ ListElement{ longitude: "69"; latitude: "39"; height: "121"; }
+ ListElement{ longitude: "69"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "69"; latitude: "41"; height: "130"; }
+ ListElement{ longitude: "69"; latitude: "42"; height: "131"; }
+ ListElement{ longitude: "69"; latitude: "43"; height: "130"; }
+ ListElement{ longitude: "69"; latitude: "44"; height: "131"; }
+ ListElement{ longitude: "69"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "69"; latitude: "46"; height: "128"; }
+ ListElement{ longitude: "69"; latitude: "47"; height: "126"; }
+ ListElement{ longitude: "69"; latitude: "48"; height: "126"; }
+ ListElement{ longitude: "69"; latitude: "49"; height: "129"; }
+ ListElement{ longitude: "69"; latitude: "50"; height: "130"; }
+ ListElement{ longitude: "69"; latitude: "51"; height: "131"; }
+ ListElement{ longitude: "69"; latitude: "52"; height: "130"; }
+ ListElement{ longitude: "69"; latitude: "53"; height: "126"; }
+ ListElement{ longitude: "69"; latitude: "54"; height: "119"; }
+ ListElement{ longitude: "69"; latitude: "55"; height: "126"; }
+ ListElement{ longitude: "69"; latitude: "56"; height: "123"; }
+ ListElement{ longitude: "69"; latitude: "57"; height: "124"; }
+ ListElement{ longitude: "69"; latitude: "58"; height: "122"; }
+ ListElement{ longitude: "69"; latitude: "59"; height: "122"; }
+ ListElement{ longitude: "69"; latitude: "60"; height: "123"; }
+ ListElement{ longitude: "69"; latitude: "61"; height: "121"; }
+ ListElement{ longitude: "69"; latitude: "62"; height: "119"; }
+ ListElement{ longitude: "69"; latitude: "63"; height: "120"; }
+ ListElement{ longitude: "69"; latitude: "64"; height: "118"; }
+ ListElement{ longitude: "69"; latitude: "65"; height: "113"; }
+ ListElement{ longitude: "69"; latitude: "66"; height: "112"; }
+ ListElement{ longitude: "69"; latitude: "67"; height: "116"; }
+ ListElement{ longitude: "69"; latitude: "68"; height: "121"; }
+ ListElement{ longitude: "69"; latitude: "69"; height: "121"; }
+ ListElement{ longitude: "69"; latitude: "70"; height: "123"; }
+ ListElement{ longitude: "69"; latitude: "71"; height: "120"; }
+ ListElement{ longitude: "69"; latitude: "72"; height: "121"; }
+ ListElement{ longitude: "69"; latitude: "73"; height: "118"; }
+ ListElement{ longitude: "69"; latitude: "74"; height: "119"; }
+ ListElement{ longitude: "69"; latitude: "75"; height: "124"; }
+ ListElement{ longitude: "69"; latitude: "76"; height: "127"; }
+ ListElement{ longitude: "69"; latitude: "77"; height: "129"; }
+ ListElement{ longitude: "69"; latitude: "78"; height: "131"; }
+ ListElement{ longitude: "69"; latitude: "79"; height: "133"; }
+ ListElement{ longitude: "69"; latitude: "80"; height: "127"; }
+ ListElement{ longitude: "69"; latitude: "81"; height: "127"; }
+ ListElement{ longitude: "69"; latitude: "82"; height: "126"; }
+ ListElement{ longitude: "69"; latitude: "83"; height: "125"; }
+ ListElement{ longitude: "69"; latitude: "84"; height: "125"; }
+ ListElement{ longitude: "69"; latitude: "85"; height: "127"; }
+ ListElement{ longitude: "69"; latitude: "86"; height: "127"; }
+ ListElement{ longitude: "69"; latitude: "87"; height: "125"; }
+ ListElement{ longitude: "69"; latitude: "88"; height: "120"; }
+ ListElement{ longitude: "69"; latitude: "89"; height: "115"; }
+ ListElement{ longitude: "69"; latitude: "90"; height: "115"; }
+ ListElement{ longitude: "69"; latitude: "91"; height: "114"; }
+ ListElement{ longitude: "69"; latitude: "92"; height: "118"; }
+ ListElement{ longitude: "69"; latitude: "93"; height: "122"; }
+ ListElement{ longitude: "69"; latitude: "94"; height: "125"; }
+ ListElement{ longitude: "69"; latitude: "95"; height: "130"; }
+ ListElement{ longitude: "69"; latitude: "96"; height: "133"; }
+ ListElement{ longitude: "69"; latitude: "97"; height: "136"; }
+ ListElement{ longitude: "69"; latitude: "98"; height: "128"; }
+ ListElement{ longitude: "69"; latitude: "99"; height: "125"; }
+ ListElement{ longitude: "70"; latitude: "0"; height: "125"; }
+ ListElement{ longitude: "70"; latitude: "1"; height: "124"; }
+ ListElement{ longitude: "70"; latitude: "2"; height: "125"; }
+ ListElement{ longitude: "70"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "70"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "70"; latitude: "5"; height: "116"; }
+ ListElement{ longitude: "70"; latitude: "6"; height: "115"; }
+ ListElement{ longitude: "70"; latitude: "7"; height: "110"; }
+ ListElement{ longitude: "70"; latitude: "8"; height: "112"; }
+ ListElement{ longitude: "70"; latitude: "9"; height: "108"; }
+ ListElement{ longitude: "70"; latitude: "10"; height: "106"; }
+ ListElement{ longitude: "70"; latitude: "11"; height: "105"; }
+ ListElement{ longitude: "70"; latitude: "12"; height: "105"; }
+ ListElement{ longitude: "70"; latitude: "13"; height: "105"; }
+ ListElement{ longitude: "70"; latitude: "14"; height: "108"; }
+ ListElement{ longitude: "70"; latitude: "15"; height: "108"; }
+ ListElement{ longitude: "70"; latitude: "16"; height: "107"; }
+ ListElement{ longitude: "70"; latitude: "17"; height: "110"; }
+ ListElement{ longitude: "70"; latitude: "18"; height: "109"; }
+ ListElement{ longitude: "70"; latitude: "19"; height: "110"; }
+ ListElement{ longitude: "70"; latitude: "20"; height: "112"; }
+ ListElement{ longitude: "70"; latitude: "21"; height: "110"; }
+ ListElement{ longitude: "70"; latitude: "22"; height: "110"; }
+ ListElement{ longitude: "70"; latitude: "23"; height: "109"; }
+ ListElement{ longitude: "70"; latitude: "24"; height: "109"; }
+ ListElement{ longitude: "70"; latitude: "25"; height: "109"; }
+ ListElement{ longitude: "70"; latitude: "26"; height: "107"; }
+ ListElement{ longitude: "70"; latitude: "27"; height: "106"; }
+ ListElement{ longitude: "70"; latitude: "28"; height: "104"; }
+ ListElement{ longitude: "70"; latitude: "29"; height: "101"; }
+ ListElement{ longitude: "70"; latitude: "30"; height: "100"; }
+ ListElement{ longitude: "70"; latitude: "31"; height: "97"; }
+ ListElement{ longitude: "70"; latitude: "32"; height: "98"; }
+ ListElement{ longitude: "70"; latitude: "33"; height: "99"; }
+ ListElement{ longitude: "70"; latitude: "34"; height: "101"; }
+ ListElement{ longitude: "70"; latitude: "35"; height: "104"; }
+ ListElement{ longitude: "70"; latitude: "36"; height: "106"; }
+ ListElement{ longitude: "70"; latitude: "37"; height: "108"; }
+ ListElement{ longitude: "70"; latitude: "38"; height: "116"; }
+ ListElement{ longitude: "70"; latitude: "39"; height: "119"; }
+ ListElement{ longitude: "70"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "70"; latitude: "41"; height: "131"; }
+ ListElement{ longitude: "70"; latitude: "42"; height: "130"; }
+ ListElement{ longitude: "70"; latitude: "43"; height: "129"; }
+ ListElement{ longitude: "70"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "70"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "70"; latitude: "46"; height: "124"; }
+ ListElement{ longitude: "70"; latitude: "47"; height: "124"; }
+ ListElement{ longitude: "70"; latitude: "48"; height: "123"; }
+ ListElement{ longitude: "70"; latitude: "49"; height: "127"; }
+ ListElement{ longitude: "70"; latitude: "50"; height: "129"; }
+ ListElement{ longitude: "70"; latitude: "51"; height: "132"; }
+ ListElement{ longitude: "70"; latitude: "52"; height: "133"; }
+ ListElement{ longitude: "70"; latitude: "53"; height: "130"; }
+ ListElement{ longitude: "70"; latitude: "54"; height: "129"; }
+ ListElement{ longitude: "70"; latitude: "55"; height: "128"; }
+ ListElement{ longitude: "70"; latitude: "56"; height: "126"; }
+ ListElement{ longitude: "70"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "70"; latitude: "58"; height: "127"; }
+ ListElement{ longitude: "70"; latitude: "59"; height: "128"; }
+ ListElement{ longitude: "70"; latitude: "60"; height: "126"; }
+ ListElement{ longitude: "70"; latitude: "61"; height: "125"; }
+ ListElement{ longitude: "70"; latitude: "62"; height: "123"; }
+ ListElement{ longitude: "70"; latitude: "63"; height: "122"; }
+ ListElement{ longitude: "70"; latitude: "64"; height: "122"; }
+ ListElement{ longitude: "70"; latitude: "65"; height: "115"; }
+ ListElement{ longitude: "70"; latitude: "66"; height: "110"; }
+ ListElement{ longitude: "70"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "70"; latitude: "68"; height: "126"; }
+ ListElement{ longitude: "70"; latitude: "69"; height: "108"; }
+ ListElement{ longitude: "70"; latitude: "70"; height: "102"; }
+ ListElement{ longitude: "70"; latitude: "71"; height: "98"; }
+ ListElement{ longitude: "70"; latitude: "72"; height: "98"; }
+ ListElement{ longitude: "70"; latitude: "73"; height: "115"; }
+ ListElement{ longitude: "70"; latitude: "74"; height: "120"; }
+ ListElement{ longitude: "70"; latitude: "75"; height: "121"; }
+ ListElement{ longitude: "70"; latitude: "76"; height: "124"; }
+ ListElement{ longitude: "70"; latitude: "77"; height: "127"; }
+ ListElement{ longitude: "70"; latitude: "78"; height: "121"; }
+ ListElement{ longitude: "70"; latitude: "79"; height: "135"; }
+ ListElement{ longitude: "70"; latitude: "80"; height: "131"; }
+ ListElement{ longitude: "70"; latitude: "81"; height: "134"; }
+ ListElement{ longitude: "70"; latitude: "82"; height: "129"; }
+ ListElement{ longitude: "70"; latitude: "83"; height: "128"; }
+ ListElement{ longitude: "70"; latitude: "84"; height: "129"; }
+ ListElement{ longitude: "70"; latitude: "85"; height: "129"; }
+ ListElement{ longitude: "70"; latitude: "86"; height: "129"; }
+ ListElement{ longitude: "70"; latitude: "87"; height: "127"; }
+ ListElement{ longitude: "70"; latitude: "88"; height: "124"; }
+ ListElement{ longitude: "70"; latitude: "89"; height: "119"; }
+ ListElement{ longitude: "70"; latitude: "90"; height: "117"; }
+ ListElement{ longitude: "70"; latitude: "91"; height: "117"; }
+ ListElement{ longitude: "70"; latitude: "92"; height: "118"; }
+ ListElement{ longitude: "70"; latitude: "93"; height: "121"; }
+ ListElement{ longitude: "70"; latitude: "94"; height: "124"; }
+ ListElement{ longitude: "70"; latitude: "95"; height: "129"; }
+ ListElement{ longitude: "70"; latitude: "96"; height: "132"; }
+ ListElement{ longitude: "70"; latitude: "97"; height: "138"; }
+ ListElement{ longitude: "70"; latitude: "98"; height: "134"; }
+ ListElement{ longitude: "70"; latitude: "99"; height: "126"; }
+ ListElement{ longitude: "71"; latitude: "0"; height: "126"; }
+ ListElement{ longitude: "71"; latitude: "1"; height: "126"; }
+ ListElement{ longitude: "71"; latitude: "2"; height: "127"; }
+ ListElement{ longitude: "71"; latitude: "3"; height: "123"; }
+ ListElement{ longitude: "71"; latitude: "4"; height: "116"; }
+ ListElement{ longitude: "71"; latitude: "5"; height: "114"; }
+ ListElement{ longitude: "71"; latitude: "6"; height: "110"; }
+ ListElement{ longitude: "71"; latitude: "7"; height: "110"; }
+ ListElement{ longitude: "71"; latitude: "8"; height: "111"; }
+ ListElement{ longitude: "71"; latitude: "9"; height: "108"; }
+ ListElement{ longitude: "71"; latitude: "10"; height: "106"; }
+ ListElement{ longitude: "71"; latitude: "11"; height: "104"; }
+ ListElement{ longitude: "71"; latitude: "12"; height: "104"; }
+ ListElement{ longitude: "71"; latitude: "13"; height: "104"; }
+ ListElement{ longitude: "71"; latitude: "14"; height: "104"; }
+ ListElement{ longitude: "71"; latitude: "15"; height: "104"; }
+ ListElement{ longitude: "71"; latitude: "16"; height: "107"; }
+ ListElement{ longitude: "71"; latitude: "17"; height: "108"; }
+ ListElement{ longitude: "71"; latitude: "18"; height: "110"; }
+ ListElement{ longitude: "71"; latitude: "19"; height: "111"; }
+ ListElement{ longitude: "71"; latitude: "20"; height: "111"; }
+ ListElement{ longitude: "71"; latitude: "21"; height: "110"; }
+ ListElement{ longitude: "71"; latitude: "22"; height: "111"; }
+ ListElement{ longitude: "71"; latitude: "23"; height: "111"; }
+ ListElement{ longitude: "71"; latitude: "24"; height: "111"; }
+ ListElement{ longitude: "71"; latitude: "25"; height: "111"; }
+ ListElement{ longitude: "71"; latitude: "26"; height: "112"; }
+ ListElement{ longitude: "71"; latitude: "27"; height: "109"; }
+ ListElement{ longitude: "71"; latitude: "28"; height: "105"; }
+ ListElement{ longitude: "71"; latitude: "29"; height: "101"; }
+ ListElement{ longitude: "71"; latitude: "30"; height: "102"; }
+ ListElement{ longitude: "71"; latitude: "31"; height: "102"; }
+ ListElement{ longitude: "71"; latitude: "32"; height: "102"; }
+ ListElement{ longitude: "71"; latitude: "33"; height: "103"; }
+ ListElement{ longitude: "71"; latitude: "34"; height: "106"; }
+ ListElement{ longitude: "71"; latitude: "35"; height: "105"; }
+ ListElement{ longitude: "71"; latitude: "36"; height: "108"; }
+ ListElement{ longitude: "71"; latitude: "37"; height: "109"; }
+ ListElement{ longitude: "71"; latitude: "38"; height: "114"; }
+ ListElement{ longitude: "71"; latitude: "39"; height: "119"; }
+ ListElement{ longitude: "71"; latitude: "40"; height: "124"; }
+ ListElement{ longitude: "71"; latitude: "41"; height: "130"; }
+ ListElement{ longitude: "71"; latitude: "42"; height: "130"; }
+ ListElement{ longitude: "71"; latitude: "43"; height: "127"; }
+ ListElement{ longitude: "71"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "71"; latitude: "45"; height: "126"; }
+ ListElement{ longitude: "71"; latitude: "46"; height: "123"; }
+ ListElement{ longitude: "71"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "71"; latitude: "48"; height: "124"; }
+ ListElement{ longitude: "71"; latitude: "49"; height: "127"; }
+ ListElement{ longitude: "71"; latitude: "50"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "51"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "52"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "53"; height: "130"; }
+ ListElement{ longitude: "71"; latitude: "54"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "55"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "56"; height: "130"; }
+ ListElement{ longitude: "71"; latitude: "57"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "58"; height: "128"; }
+ ListElement{ longitude: "71"; latitude: "59"; height: "129"; }
+ ListElement{ longitude: "71"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "71"; latitude: "61"; height: "127"; }
+ ListElement{ longitude: "71"; latitude: "62"; height: "125"; }
+ ListElement{ longitude: "71"; latitude: "63"; height: "121"; }
+ ListElement{ longitude: "71"; latitude: "64"; height: "123"; }
+ ListElement{ longitude: "71"; latitude: "65"; height: "119"; }
+ ListElement{ longitude: "71"; latitude: "66"; height: "118"; }
+ ListElement{ longitude: "71"; latitude: "67"; height: "121"; }
+ ListElement{ longitude: "71"; latitude: "68"; height: "118"; }
+ ListElement{ longitude: "71"; latitude: "69"; height: "93"; }
+ ListElement{ longitude: "71"; latitude: "70"; height: "94"; }
+ ListElement{ longitude: "71"; latitude: "71"; height: "95"; }
+ ListElement{ longitude: "71"; latitude: "72"; height: "92"; }
+ ListElement{ longitude: "71"; latitude: "73"; height: "100"; }
+ ListElement{ longitude: "71"; latitude: "74"; height: "120"; }
+ ListElement{ longitude: "71"; latitude: "75"; height: "120"; }
+ ListElement{ longitude: "71"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "71"; latitude: "77"; height: "130"; }
+ ListElement{ longitude: "71"; latitude: "78"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "79"; height: "135"; }
+ ListElement{ longitude: "71"; latitude: "80"; height: "138"; }
+ ListElement{ longitude: "71"; latitude: "81"; height: "134"; }
+ ListElement{ longitude: "71"; latitude: "82"; height: "135"; }
+ ListElement{ longitude: "71"; latitude: "83"; height: "133"; }
+ ListElement{ longitude: "71"; latitude: "84"; height: "130"; }
+ ListElement{ longitude: "71"; latitude: "85"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "86"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "87"; height: "131"; }
+ ListElement{ longitude: "71"; latitude: "88"; height: "127"; }
+ ListElement{ longitude: "71"; latitude: "89"; height: "124"; }
+ ListElement{ longitude: "71"; latitude: "90"; height: "120"; }
+ ListElement{ longitude: "71"; latitude: "91"; height: "119"; }
+ ListElement{ longitude: "71"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "71"; latitude: "93"; height: "122"; }
+ ListElement{ longitude: "71"; latitude: "94"; height: "125"; }
+ ListElement{ longitude: "71"; latitude: "95"; height: "126"; }
+ ListElement{ longitude: "71"; latitude: "96"; height: "132"; }
+ ListElement{ longitude: "71"; latitude: "97"; height: "138"; }
+ ListElement{ longitude: "71"; latitude: "98"; height: "136"; }
+ ListElement{ longitude: "71"; latitude: "99"; height: "126"; }
+ ListElement{ longitude: "72"; latitude: "0"; height: "127"; }
+ ListElement{ longitude: "72"; latitude: "1"; height: "127"; }
+ ListElement{ longitude: "72"; latitude: "2"; height: "124"; }
+ ListElement{ longitude: "72"; latitude: "3"; height: "124"; }
+ ListElement{ longitude: "72"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "72"; latitude: "5"; height: "116"; }
+ ListElement{ longitude: "72"; latitude: "6"; height: "111"; }
+ ListElement{ longitude: "72"; latitude: "7"; height: "108"; }
+ ListElement{ longitude: "72"; latitude: "8"; height: "111"; }
+ ListElement{ longitude: "72"; latitude: "9"; height: "108"; }
+ ListElement{ longitude: "72"; latitude: "10"; height: "108"; }
+ ListElement{ longitude: "72"; latitude: "11"; height: "104"; }
+ ListElement{ longitude: "72"; latitude: "12"; height: "103"; }
+ ListElement{ longitude: "72"; latitude: "13"; height: "105"; }
+ ListElement{ longitude: "72"; latitude: "14"; height: "105"; }
+ ListElement{ longitude: "72"; latitude: "15"; height: "105"; }
+ ListElement{ longitude: "72"; latitude: "16"; height: "102"; }
+ ListElement{ longitude: "72"; latitude: "17"; height: "105"; }
+ ListElement{ longitude: "72"; latitude: "18"; height: "107"; }
+ ListElement{ longitude: "72"; latitude: "19"; height: "108"; }
+ ListElement{ longitude: "72"; latitude: "20"; height: "111"; }
+ ListElement{ longitude: "72"; latitude: "21"; height: "111"; }
+ ListElement{ longitude: "72"; latitude: "22"; height: "111"; }
+ ListElement{ longitude: "72"; latitude: "23"; height: "110"; }
+ ListElement{ longitude: "72"; latitude: "24"; height: "110"; }
+ ListElement{ longitude: "72"; latitude: "25"; height: "110"; }
+ ListElement{ longitude: "72"; latitude: "26"; height: "111"; }
+ ListElement{ longitude: "72"; latitude: "27"; height: "110"; }
+ ListElement{ longitude: "72"; latitude: "28"; height: "109"; }
+ ListElement{ longitude: "72"; latitude: "29"; height: "110"; }
+ ListElement{ longitude: "72"; latitude: "30"; height: "107"; }
+ ListElement{ longitude: "72"; latitude: "31"; height: "105"; }
+ ListElement{ longitude: "72"; latitude: "32"; height: "107"; }
+ ListElement{ longitude: "72"; latitude: "33"; height: "108"; }
+ ListElement{ longitude: "72"; latitude: "34"; height: "110"; }
+ ListElement{ longitude: "72"; latitude: "35"; height: "110"; }
+ ListElement{ longitude: "72"; latitude: "36"; height: "108"; }
+ ListElement{ longitude: "72"; latitude: "37"; height: "107"; }
+ ListElement{ longitude: "72"; latitude: "38"; height: "110"; }
+ ListElement{ longitude: "72"; latitude: "39"; height: "115"; }
+ ListElement{ longitude: "72"; latitude: "40"; height: "122"; }
+ ListElement{ longitude: "72"; latitude: "41"; height: "127"; }
+ ListElement{ longitude: "72"; latitude: "42"; height: "131"; }
+ ListElement{ longitude: "72"; latitude: "43"; height: "132"; }
+ ListElement{ longitude: "72"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "72"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "72"; latitude: "46"; height: "122"; }
+ ListElement{ longitude: "72"; latitude: "47"; height: "123"; }
+ ListElement{ longitude: "72"; latitude: "48"; height: "125"; }
+ ListElement{ longitude: "72"; latitude: "49"; height: "128"; }
+ ListElement{ longitude: "72"; latitude: "50"; height: "132"; }
+ ListElement{ longitude: "72"; latitude: "51"; height: "134"; }
+ ListElement{ longitude: "72"; latitude: "52"; height: "134"; }
+ ListElement{ longitude: "72"; latitude: "53"; height: "133"; }
+ ListElement{ longitude: "72"; latitude: "54"; height: "133"; }
+ ListElement{ longitude: "72"; latitude: "55"; height: "133"; }
+ ListElement{ longitude: "72"; latitude: "56"; height: "136"; }
+ ListElement{ longitude: "72"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "72"; latitude: "58"; height: "115"; }
+ ListElement{ longitude: "72"; latitude: "59"; height: "129"; }
+ ListElement{ longitude: "72"; latitude: "60"; height: "128"; }
+ ListElement{ longitude: "72"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "72"; latitude: "62"; height: "126"; }
+ ListElement{ longitude: "72"; latitude: "63"; height: "122"; }
+ ListElement{ longitude: "72"; latitude: "64"; height: "121"; }
+ ListElement{ longitude: "72"; latitude: "65"; height: "116"; }
+ ListElement{ longitude: "72"; latitude: "66"; height: "117"; }
+ ListElement{ longitude: "72"; latitude: "67"; height: "121"; }
+ ListElement{ longitude: "72"; latitude: "68"; height: "109"; }
+ ListElement{ longitude: "72"; latitude: "69"; height: "101"; }
+ ListElement{ longitude: "72"; latitude: "70"; height: "106"; }
+ ListElement{ longitude: "72"; latitude: "71"; height: "100"; }
+ ListElement{ longitude: "72"; latitude: "72"; height: "91"; }
+ ListElement{ longitude: "72"; latitude: "73"; height: "101"; }
+ ListElement{ longitude: "72"; latitude: "74"; height: "119"; }
+ ListElement{ longitude: "72"; latitude: "75"; height: "121"; }
+ ListElement{ longitude: "72"; latitude: "76"; height: "129"; }
+ ListElement{ longitude: "72"; latitude: "77"; height: "131"; }
+ ListElement{ longitude: "72"; latitude: "78"; height: "135"; }
+ ListElement{ longitude: "72"; latitude: "79"; height: "138"; }
+ ListElement{ longitude: "72"; latitude: "80"; height: "141"; }
+ ListElement{ longitude: "72"; latitude: "81"; height: "139"; }
+ ListElement{ longitude: "72"; latitude: "82"; height: "138"; }
+ ListElement{ longitude: "72"; latitude: "83"; height: "136"; }
+ ListElement{ longitude: "72"; latitude: "84"; height: "134"; }
+ ListElement{ longitude: "72"; latitude: "85"; height: "133"; }
+ ListElement{ longitude: "72"; latitude: "86"; height: "132"; }
+ ListElement{ longitude: "72"; latitude: "87"; height: "131"; }
+ ListElement{ longitude: "72"; latitude: "88"; height: "129"; }
+ ListElement{ longitude: "72"; latitude: "89"; height: "127"; }
+ ListElement{ longitude: "72"; latitude: "90"; height: "122"; }
+ ListElement{ longitude: "72"; latitude: "91"; height: "122"; }
+ ListElement{ longitude: "72"; latitude: "92"; height: "121"; }
+ ListElement{ longitude: "72"; latitude: "93"; height: "120"; }
+ ListElement{ longitude: "72"; latitude: "94"; height: "123"; }
+ ListElement{ longitude: "72"; latitude: "95"; height: "126"; }
+ ListElement{ longitude: "72"; latitude: "96"; height: "130"; }
+ ListElement{ longitude: "72"; latitude: "97"; height: "137"; }
+ ListElement{ longitude: "72"; latitude: "98"; height: "138"; }
+ ListElement{ longitude: "72"; latitude: "99"; height: "125"; }
+ ListElement{ longitude: "73"; latitude: "0"; height: "129"; }
+ ListElement{ longitude: "73"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "73"; latitude: "2"; height: "127"; }
+ ListElement{ longitude: "73"; latitude: "3"; height: "127"; }
+ ListElement{ longitude: "73"; latitude: "4"; height: "120"; }
+ ListElement{ longitude: "73"; latitude: "5"; height: "116"; }
+ ListElement{ longitude: "73"; latitude: "6"; height: "110"; }
+ ListElement{ longitude: "73"; latitude: "7"; height: "110"; }
+ ListElement{ longitude: "73"; latitude: "8"; height: "111"; }
+ ListElement{ longitude: "73"; latitude: "9"; height: "108"; }
+ ListElement{ longitude: "73"; latitude: "10"; height: "108"; }
+ ListElement{ longitude: "73"; latitude: "11"; height: "106"; }
+ ListElement{ longitude: "73"; latitude: "12"; height: "105"; }
+ ListElement{ longitude: "73"; latitude: "13"; height: "105"; }
+ ListElement{ longitude: "73"; latitude: "14"; height: "103"; }
+ ListElement{ longitude: "73"; latitude: "15"; height: "103"; }
+ ListElement{ longitude: "73"; latitude: "16"; height: "101"; }
+ ListElement{ longitude: "73"; latitude: "17"; height: "104"; }
+ ListElement{ longitude: "73"; latitude: "18"; height: "106"; }
+ ListElement{ longitude: "73"; latitude: "19"; height: "109"; }
+ ListElement{ longitude: "73"; latitude: "20"; height: "111"; }
+ ListElement{ longitude: "73"; latitude: "21"; height: "111"; }
+ ListElement{ longitude: "73"; latitude: "22"; height: "110"; }
+ ListElement{ longitude: "73"; latitude: "23"; height: "110"; }
+ ListElement{ longitude: "73"; latitude: "24"; height: "112"; }
+ ListElement{ longitude: "73"; latitude: "25"; height: "112"; }
+ ListElement{ longitude: "73"; latitude: "26"; height: "112"; }
+ ListElement{ longitude: "73"; latitude: "27"; height: "108"; }
+ ListElement{ longitude: "73"; latitude: "28"; height: "113"; }
+ ListElement{ longitude: "73"; latitude: "29"; height: "111"; }
+ ListElement{ longitude: "73"; latitude: "30"; height: "110"; }
+ ListElement{ longitude: "73"; latitude: "31"; height: "107"; }
+ ListElement{ longitude: "73"; latitude: "32"; height: "108"; }
+ ListElement{ longitude: "73"; latitude: "33"; height: "109"; }
+ ListElement{ longitude: "73"; latitude: "34"; height: "110"; }
+ ListElement{ longitude: "73"; latitude: "35"; height: "106"; }
+ ListElement{ longitude: "73"; latitude: "36"; height: "107"; }
+ ListElement{ longitude: "73"; latitude: "37"; height: "106"; }
+ ListElement{ longitude: "73"; latitude: "38"; height: "107"; }
+ ListElement{ longitude: "73"; latitude: "39"; height: "112"; }
+ ListElement{ longitude: "73"; latitude: "40"; height: "119"; }
+ ListElement{ longitude: "73"; latitude: "41"; height: "126"; }
+ ListElement{ longitude: "73"; latitude: "42"; height: "131"; }
+ ListElement{ longitude: "73"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "73"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "73"; latitude: "45"; height: "122"; }
+ ListElement{ longitude: "73"; latitude: "46"; height: "122"; }
+ ListElement{ longitude: "73"; latitude: "47"; height: "123"; }
+ ListElement{ longitude: "73"; latitude: "48"; height: "127"; }
+ ListElement{ longitude: "73"; latitude: "49"; height: "132"; }
+ ListElement{ longitude: "73"; latitude: "50"; height: "135"; }
+ ListElement{ longitude: "73"; latitude: "51"; height: "135"; }
+ ListElement{ longitude: "73"; latitude: "52"; height: "135"; }
+ ListElement{ longitude: "73"; latitude: "53"; height: "133"; }
+ ListElement{ longitude: "73"; latitude: "54"; height: "133"; }
+ ListElement{ longitude: "73"; latitude: "55"; height: "135"; }
+ ListElement{ longitude: "73"; latitude: "56"; height: "138"; }
+ ListElement{ longitude: "73"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "73"; latitude: "58"; height: "119"; }
+ ListElement{ longitude: "73"; latitude: "59"; height: "129"; }
+ ListElement{ longitude: "73"; latitude: "60"; height: "129"; }
+ ListElement{ longitude: "73"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "73"; latitude: "62"; height: "126"; }
+ ListElement{ longitude: "73"; latitude: "63"; height: "122"; }
+ ListElement{ longitude: "73"; latitude: "64"; height: "121"; }
+ ListElement{ longitude: "73"; latitude: "65"; height: "117"; }
+ ListElement{ longitude: "73"; latitude: "66"; height: "118"; }
+ ListElement{ longitude: "73"; latitude: "67"; height: "119"; }
+ ListElement{ longitude: "73"; latitude: "68"; height: "108"; }
+ ListElement{ longitude: "73"; latitude: "69"; height: "97"; }
+ ListElement{ longitude: "73"; latitude: "70"; height: "104"; }
+ ListElement{ longitude: "73"; latitude: "71"; height: "102"; }
+ ListElement{ longitude: "73"; latitude: "72"; height: "92"; }
+ ListElement{ longitude: "73"; latitude: "73"; height: "109"; }
+ ListElement{ longitude: "73"; latitude: "74"; height: "123"; }
+ ListElement{ longitude: "73"; latitude: "75"; height: "125"; }
+ ListElement{ longitude: "73"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "73"; latitude: "77"; height: "132"; }
+ ListElement{ longitude: "73"; latitude: "78"; height: "137"; }
+ ListElement{ longitude: "73"; latitude: "79"; height: "140"; }
+ ListElement{ longitude: "73"; latitude: "80"; height: "143"; }
+ ListElement{ longitude: "73"; latitude: "81"; height: "141"; }
+ ListElement{ longitude: "73"; latitude: "82"; height: "140"; }
+ ListElement{ longitude: "73"; latitude: "83"; height: "136"; }
+ ListElement{ longitude: "73"; latitude: "84"; height: "134"; }
+ ListElement{ longitude: "73"; latitude: "85"; height: "134"; }
+ ListElement{ longitude: "73"; latitude: "86"; height: "133"; }
+ ListElement{ longitude: "73"; latitude: "87"; height: "130"; }
+ ListElement{ longitude: "73"; latitude: "88"; height: "130"; }
+ ListElement{ longitude: "73"; latitude: "89"; height: "128"; }
+ ListElement{ longitude: "73"; latitude: "90"; height: "125"; }
+ ListElement{ longitude: "73"; latitude: "91"; height: "122"; }
+ ListElement{ longitude: "73"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "73"; latitude: "93"; height: "120"; }
+ ListElement{ longitude: "73"; latitude: "94"; height: "119"; }
+ ListElement{ longitude: "73"; latitude: "95"; height: "120"; }
+ ListElement{ longitude: "73"; latitude: "96"; height: "122"; }
+ ListElement{ longitude: "73"; latitude: "97"; height: "131"; }
+ ListElement{ longitude: "73"; latitude: "98"; height: "137"; }
+ ListElement{ longitude: "73"; latitude: "99"; height: "123"; }
+ ListElement{ longitude: "74"; latitude: "0"; height: "128"; }
+ ListElement{ longitude: "74"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "74"; latitude: "2"; height: "128"; }
+ ListElement{ longitude: "74"; latitude: "3"; height: "127"; }
+ ListElement{ longitude: "74"; latitude: "4"; height: "124"; }
+ ListElement{ longitude: "74"; latitude: "5"; height: "117"; }
+ ListElement{ longitude: "74"; latitude: "6"; height: "113"; }
+ ListElement{ longitude: "74"; latitude: "7"; height: "111"; }
+ ListElement{ longitude: "74"; latitude: "8"; height: "111"; }
+ ListElement{ longitude: "74"; latitude: "9"; height: "108"; }
+ ListElement{ longitude: "74"; latitude: "10"; height: "106"; }
+ ListElement{ longitude: "74"; latitude: "11"; height: "106"; }
+ ListElement{ longitude: "74"; latitude: "12"; height: "105"; }
+ ListElement{ longitude: "74"; latitude: "13"; height: "104"; }
+ ListElement{ longitude: "74"; latitude: "14"; height: "104"; }
+ ListElement{ longitude: "74"; latitude: "15"; height: "104"; }
+ ListElement{ longitude: "74"; latitude: "16"; height: "106"; }
+ ListElement{ longitude: "74"; latitude: "17"; height: "105"; }
+ ListElement{ longitude: "74"; latitude: "18"; height: "107"; }
+ ListElement{ longitude: "74"; latitude: "19"; height: "107"; }
+ ListElement{ longitude: "74"; latitude: "20"; height: "110"; }
+ ListElement{ longitude: "74"; latitude: "21"; height: "111"; }
+ ListElement{ longitude: "74"; latitude: "22"; height: "112"; }
+ ListElement{ longitude: "74"; latitude: "23"; height: "113"; }
+ ListElement{ longitude: "74"; latitude: "24"; height: "113"; }
+ ListElement{ longitude: "74"; latitude: "25"; height: "113"; }
+ ListElement{ longitude: "74"; latitude: "26"; height: "113"; }
+ ListElement{ longitude: "74"; latitude: "27"; height: "113"; }
+ ListElement{ longitude: "74"; latitude: "28"; height: "114"; }
+ ListElement{ longitude: "74"; latitude: "29"; height: "110"; }
+ ListElement{ longitude: "74"; latitude: "30"; height: "112"; }
+ ListElement{ longitude: "74"; latitude: "31"; height: "111"; }
+ ListElement{ longitude: "74"; latitude: "32"; height: "108"; }
+ ListElement{ longitude: "74"; latitude: "33"; height: "109"; }
+ ListElement{ longitude: "74"; latitude: "34"; height: "106"; }
+ ListElement{ longitude: "74"; latitude: "35"; height: "102"; }
+ ListElement{ longitude: "74"; latitude: "36"; height: "104"; }
+ ListElement{ longitude: "74"; latitude: "37"; height: "105"; }
+ ListElement{ longitude: "74"; latitude: "38"; height: "109"; }
+ ListElement{ longitude: "74"; latitude: "39"; height: "114"; }
+ ListElement{ longitude: "74"; latitude: "40"; height: "121"; }
+ ListElement{ longitude: "74"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "74"; latitude: "42"; height: "123"; }
+ ListElement{ longitude: "74"; latitude: "43"; height: "117"; }
+ ListElement{ longitude: "74"; latitude: "44"; height: "119"; }
+ ListElement{ longitude: "74"; latitude: "45"; height: "121"; }
+ ListElement{ longitude: "74"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "74"; latitude: "47"; height: "122"; }
+ ListElement{ longitude: "74"; latitude: "48"; height: "125"; }
+ ListElement{ longitude: "74"; latitude: "49"; height: "129"; }
+ ListElement{ longitude: "74"; latitude: "50"; height: "134"; }
+ ListElement{ longitude: "74"; latitude: "51"; height: "136"; }
+ ListElement{ longitude: "74"; latitude: "52"; height: "136"; }
+ ListElement{ longitude: "74"; latitude: "53"; height: "134"; }
+ ListElement{ longitude: "74"; latitude: "54"; height: "134"; }
+ ListElement{ longitude: "74"; latitude: "55"; height: "137"; }
+ ListElement{ longitude: "74"; latitude: "56"; height: "138"; }
+ ListElement{ longitude: "74"; latitude: "57"; height: "136"; }
+ ListElement{ longitude: "74"; latitude: "58"; height: "135"; }
+ ListElement{ longitude: "74"; latitude: "59"; height: "134"; }
+ ListElement{ longitude: "74"; latitude: "60"; height: "130"; }
+ ListElement{ longitude: "74"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "74"; latitude: "62"; height: "126"; }
+ ListElement{ longitude: "74"; latitude: "63"; height: "123"; }
+ ListElement{ longitude: "74"; latitude: "64"; height: "120"; }
+ ListElement{ longitude: "74"; latitude: "65"; height: "116"; }
+ ListElement{ longitude: "74"; latitude: "66"; height: "117"; }
+ ListElement{ longitude: "74"; latitude: "67"; height: "119"; }
+ ListElement{ longitude: "74"; latitude: "68"; height: "120"; }
+ ListElement{ longitude: "74"; latitude: "69"; height: "103"; }
+ ListElement{ longitude: "74"; latitude: "70"; height: "100"; }
+ ListElement{ longitude: "74"; latitude: "71"; height: "97"; }
+ ListElement{ longitude: "74"; latitude: "72"; height: "96"; }
+ ListElement{ longitude: "74"; latitude: "73"; height: "121"; }
+ ListElement{ longitude: "74"; latitude: "74"; height: "123"; }
+ ListElement{ longitude: "74"; latitude: "75"; height: "128"; }
+ ListElement{ longitude: "74"; latitude: "76"; height: "121"; }
+ ListElement{ longitude: "74"; latitude: "77"; height: "133"; }
+ ListElement{ longitude: "74"; latitude: "78"; height: "138"; }
+ ListElement{ longitude: "74"; latitude: "79"; height: "142"; }
+ ListElement{ longitude: "74"; latitude: "80"; height: "143"; }
+ ListElement{ longitude: "74"; latitude: "81"; height: "143"; }
+ ListElement{ longitude: "74"; latitude: "82"; height: "141"; }
+ ListElement{ longitude: "74"; latitude: "83"; height: "137"; }
+ ListElement{ longitude: "74"; latitude: "84"; height: "135"; }
+ ListElement{ longitude: "74"; latitude: "85"; height: "135"; }
+ ListElement{ longitude: "74"; latitude: "86"; height: "134"; }
+ ListElement{ longitude: "74"; latitude: "87"; height: "132"; }
+ ListElement{ longitude: "74"; latitude: "88"; height: "130"; }
+ ListElement{ longitude: "74"; latitude: "89"; height: "128"; }
+ ListElement{ longitude: "74"; latitude: "90"; height: "123"; }
+ ListElement{ longitude: "74"; latitude: "91"; height: "120"; }
+ ListElement{ longitude: "74"; latitude: "92"; height: "118"; }
+ ListElement{ longitude: "74"; latitude: "93"; height: "117"; }
+ ListElement{ longitude: "74"; latitude: "94"; height: "116"; }
+ ListElement{ longitude: "74"; latitude: "95"; height: "116"; }
+ ListElement{ longitude: "74"; latitude: "96"; height: "119"; }
+ ListElement{ longitude: "74"; latitude: "97"; height: "125"; }
+ ListElement{ longitude: "74"; latitude: "98"; height: "131"; }
+ ListElement{ longitude: "74"; latitude: "99"; height: "119"; }
+ ListElement{ longitude: "75"; latitude: "0"; height: "128"; }
+ ListElement{ longitude: "75"; latitude: "1"; height: "128"; }
+ ListElement{ longitude: "75"; latitude: "2"; height: "128"; }
+ ListElement{ longitude: "75"; latitude: "3"; height: "128"; }
+ ListElement{ longitude: "75"; latitude: "4"; height: "126"; }
+ ListElement{ longitude: "75"; latitude: "5"; height: "120"; }
+ ListElement{ longitude: "75"; latitude: "6"; height: "116"; }
+ ListElement{ longitude: "75"; latitude: "7"; height: "113"; }
+ ListElement{ longitude: "75"; latitude: "8"; height: "110"; }
+ ListElement{ longitude: "75"; latitude: "9"; height: "108"; }
+ ListElement{ longitude: "75"; latitude: "10"; height: "107"; }
+ ListElement{ longitude: "75"; latitude: "11"; height: "105"; }
+ ListElement{ longitude: "75"; latitude: "12"; height: "102"; }
+ ListElement{ longitude: "75"; latitude: "13"; height: "101"; }
+ ListElement{ longitude: "75"; latitude: "14"; height: "101"; }
+ ListElement{ longitude: "75"; latitude: "15"; height: "101"; }
+ ListElement{ longitude: "75"; latitude: "16"; height: "103"; }
+ ListElement{ longitude: "75"; latitude: "17"; height: "102"; }
+ ListElement{ longitude: "75"; latitude: "18"; height: "106"; }
+ ListElement{ longitude: "75"; latitude: "19"; height: "108"; }
+ ListElement{ longitude: "75"; latitude: "20"; height: "110"; }
+ ListElement{ longitude: "75"; latitude: "21"; height: "111"; }
+ ListElement{ longitude: "75"; latitude: "22"; height: "112"; }
+ ListElement{ longitude: "75"; latitude: "23"; height: "113"; }
+ ListElement{ longitude: "75"; latitude: "24"; height: "113"; }
+ ListElement{ longitude: "75"; latitude: "25"; height: "113"; }
+ ListElement{ longitude: "75"; latitude: "26"; height: "113"; }
+ ListElement{ longitude: "75"; latitude: "27"; height: "113"; }
+ ListElement{ longitude: "75"; latitude: "28"; height: "114"; }
+ ListElement{ longitude: "75"; latitude: "29"; height: "111"; }
+ ListElement{ longitude: "75"; latitude: "30"; height: "108"; }
+ ListElement{ longitude: "75"; latitude: "31"; height: "108"; }
+ ListElement{ longitude: "75"; latitude: "32"; height: "105"; }
+ ListElement{ longitude: "75"; latitude: "33"; height: "104"; }
+ ListElement{ longitude: "75"; latitude: "34"; height: "101"; }
+ ListElement{ longitude: "75"; latitude: "35"; height: "102"; }
+ ListElement{ longitude: "75"; latitude: "36"; height: "102"; }
+ ListElement{ longitude: "75"; latitude: "37"; height: "104"; }
+ ListElement{ longitude: "75"; latitude: "38"; height: "110"; }
+ ListElement{ longitude: "75"; latitude: "39"; height: "115"; }
+ ListElement{ longitude: "75"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "75"; latitude: "41"; height: "126"; }
+ ListElement{ longitude: "75"; latitude: "42"; height: "118"; }
+ ListElement{ longitude: "75"; latitude: "43"; height: "119"; }
+ ListElement{ longitude: "75"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "75"; latitude: "45"; height: "124"; }
+ ListElement{ longitude: "75"; latitude: "46"; height: "122"; }
+ ListElement{ longitude: "75"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "75"; latitude: "48"; height: "126"; }
+ ListElement{ longitude: "75"; latitude: "49"; height: "130"; }
+ ListElement{ longitude: "75"; latitude: "50"; height: "134"; }
+ ListElement{ longitude: "75"; latitude: "51"; height: "138"; }
+ ListElement{ longitude: "75"; latitude: "52"; height: "139"; }
+ ListElement{ longitude: "75"; latitude: "53"; height: "137"; }
+ ListElement{ longitude: "75"; latitude: "54"; height: "137"; }
+ ListElement{ longitude: "75"; latitude: "55"; height: "137"; }
+ ListElement{ longitude: "75"; latitude: "56"; height: "137"; }
+ ListElement{ longitude: "75"; latitude: "57"; height: "136"; }
+ ListElement{ longitude: "75"; latitude: "58"; height: "137"; }
+ ListElement{ longitude: "75"; latitude: "59"; height: "133"; }
+ ListElement{ longitude: "75"; latitude: "60"; height: "130"; }
+ ListElement{ longitude: "75"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "75"; latitude: "62"; height: "125"; }
+ ListElement{ longitude: "75"; latitude: "63"; height: "120"; }
+ ListElement{ longitude: "75"; latitude: "64"; height: "117"; }
+ ListElement{ longitude: "75"; latitude: "65"; height: "114"; }
+ ListElement{ longitude: "75"; latitude: "66"; height: "113"; }
+ ListElement{ longitude: "75"; latitude: "67"; height: "115"; }
+ ListElement{ longitude: "75"; latitude: "68"; height: "119"; }
+ ListElement{ longitude: "75"; latitude: "69"; height: "121"; }
+ ListElement{ longitude: "75"; latitude: "70"; height: "119"; }
+ ListElement{ longitude: "75"; latitude: "71"; height: "110"; }
+ ListElement{ longitude: "75"; latitude: "72"; height: "122"; }
+ ListElement{ longitude: "75"; latitude: "73"; height: "126"; }
+ ListElement{ longitude: "75"; latitude: "74"; height: "127"; }
+ ListElement{ longitude: "75"; latitude: "75"; height: "128"; }
+ ListElement{ longitude: "75"; latitude: "76"; height: "127"; }
+ ListElement{ longitude: "75"; latitude: "77"; height: "135"; }
+ ListElement{ longitude: "75"; latitude: "78"; height: "140"; }
+ ListElement{ longitude: "75"; latitude: "79"; height: "144"; }
+ ListElement{ longitude: "75"; latitude: "80"; height: "146"; }
+ ListElement{ longitude: "75"; latitude: "81"; height: "147"; }
+ ListElement{ longitude: "75"; latitude: "82"; height: "140"; }
+ ListElement{ longitude: "75"; latitude: "83"; height: "141"; }
+ ListElement{ longitude: "75"; latitude: "84"; height: "137"; }
+ ListElement{ longitude: "75"; latitude: "85"; height: "134"; }
+ ListElement{ longitude: "75"; latitude: "86"; height: "134"; }
+ ListElement{ longitude: "75"; latitude: "87"; height: "132"; }
+ ListElement{ longitude: "75"; latitude: "88"; height: "130"; }
+ ListElement{ longitude: "75"; latitude: "89"; height: "128"; }
+ ListElement{ longitude: "75"; latitude: "90"; height: "123"; }
+ ListElement{ longitude: "75"; latitude: "91"; height: "120"; }
+ ListElement{ longitude: "75"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "75"; latitude: "93"; height: "117"; }
+ ListElement{ longitude: "75"; latitude: "94"; height: "112"; }
+ ListElement{ longitude: "75"; latitude: "95"; height: "112"; }
+ ListElement{ longitude: "75"; latitude: "96"; height: "114"; }
+ ListElement{ longitude: "75"; latitude: "97"; height: "120"; }
+ ListElement{ longitude: "75"; latitude: "98"; height: "127"; }
+ ListElement{ longitude: "75"; latitude: "99"; height: "114"; }
+ ListElement{ longitude: "76"; latitude: "0"; height: "127"; }
+ ListElement{ longitude: "76"; latitude: "1"; height: "127"; }
+ ListElement{ longitude: "76"; latitude: "2"; height: "128"; }
+ ListElement{ longitude: "76"; latitude: "3"; height: "128"; }
+ ListElement{ longitude: "76"; latitude: "4"; height: "130"; }
+ ListElement{ longitude: "76"; latitude: "5"; height: "125"; }
+ ListElement{ longitude: "76"; latitude: "6"; height: "121"; }
+ ListElement{ longitude: "76"; latitude: "7"; height: "115"; }
+ ListElement{ longitude: "76"; latitude: "8"; height: "113"; }
+ ListElement{ longitude: "76"; latitude: "9"; height: "108"; }
+ ListElement{ longitude: "76"; latitude: "10"; height: "105"; }
+ ListElement{ longitude: "76"; latitude: "11"; height: "102"; }
+ ListElement{ longitude: "76"; latitude: "12"; height: "99"; }
+ ListElement{ longitude: "76"; latitude: "13"; height: "100"; }
+ ListElement{ longitude: "76"; latitude: "14"; height: "100"; }
+ ListElement{ longitude: "76"; latitude: "15"; height: "100"; }
+ ListElement{ longitude: "76"; latitude: "16"; height: "100"; }
+ ListElement{ longitude: "76"; latitude: "17"; height: "102"; }
+ ListElement{ longitude: "76"; latitude: "18"; height: "103"; }
+ ListElement{ longitude: "76"; latitude: "19"; height: "107"; }
+ ListElement{ longitude: "76"; latitude: "20"; height: "109"; }
+ ListElement{ longitude: "76"; latitude: "21"; height: "110"; }
+ ListElement{ longitude: "76"; latitude: "22"; height: "111"; }
+ ListElement{ longitude: "76"; latitude: "23"; height: "114"; }
+ ListElement{ longitude: "76"; latitude: "24"; height: "113"; }
+ ListElement{ longitude: "76"; latitude: "25"; height: "113"; }
+ ListElement{ longitude: "76"; latitude: "26"; height: "113"; }
+ ListElement{ longitude: "76"; latitude: "27"; height: "111"; }
+ ListElement{ longitude: "76"; latitude: "28"; height: "110"; }
+ ListElement{ longitude: "76"; latitude: "29"; height: "110"; }
+ ListElement{ longitude: "76"; latitude: "30"; height: "106"; }
+ ListElement{ longitude: "76"; latitude: "31"; height: "104"; }
+ ListElement{ longitude: "76"; latitude: "32"; height: "103"; }
+ ListElement{ longitude: "76"; latitude: "33"; height: "102"; }
+ ListElement{ longitude: "76"; latitude: "34"; height: "102"; }
+ ListElement{ longitude: "76"; latitude: "35"; height: "102"; }
+ ListElement{ longitude: "76"; latitude: "36"; height: "102"; }
+ ListElement{ longitude: "76"; latitude: "37"; height: "104"; }
+ ListElement{ longitude: "76"; latitude: "38"; height: "107"; }
+ ListElement{ longitude: "76"; latitude: "39"; height: "114"; }
+ ListElement{ longitude: "76"; latitude: "40"; height: "120"; }
+ ListElement{ longitude: "76"; latitude: "41"; height: "129"; }
+ ListElement{ longitude: "76"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "76"; latitude: "43"; height: "123"; }
+ ListElement{ longitude: "76"; latitude: "44"; height: "123"; }
+ ListElement{ longitude: "76"; latitude: "45"; height: "120"; }
+ ListElement{ longitude: "76"; latitude: "46"; height: "119"; }
+ ListElement{ longitude: "76"; latitude: "47"; height: "118"; }
+ ListElement{ longitude: "76"; latitude: "48"; height: "123"; }
+ ListElement{ longitude: "76"; latitude: "49"; height: "129"; }
+ ListElement{ longitude: "76"; latitude: "50"; height: "133"; }
+ ListElement{ longitude: "76"; latitude: "51"; height: "136"; }
+ ListElement{ longitude: "76"; latitude: "52"; height: "137"; }
+ ListElement{ longitude: "76"; latitude: "53"; height: "137"; }
+ ListElement{ longitude: "76"; latitude: "54"; height: "137"; }
+ ListElement{ longitude: "76"; latitude: "55"; height: "137"; }
+ ListElement{ longitude: "76"; latitude: "56"; height: "136"; }
+ ListElement{ longitude: "76"; latitude: "57"; height: "136"; }
+ ListElement{ longitude: "76"; latitude: "58"; height: "134"; }
+ ListElement{ longitude: "76"; latitude: "59"; height: "132"; }
+ ListElement{ longitude: "76"; latitude: "60"; height: "127"; }
+ ListElement{ longitude: "76"; latitude: "61"; height: "126"; }
+ ListElement{ longitude: "76"; latitude: "62"; height: "123"; }
+ ListElement{ longitude: "76"; latitude: "63"; height: "120"; }
+ ListElement{ longitude: "76"; latitude: "64"; height: "117"; }
+ ListElement{ longitude: "76"; latitude: "65"; height: "112"; }
+ ListElement{ longitude: "76"; latitude: "66"; height: "110"; }
+ ListElement{ longitude: "76"; latitude: "67"; height: "110"; }
+ ListElement{ longitude: "76"; latitude: "68"; height: "111"; }
+ ListElement{ longitude: "76"; latitude: "69"; height: "115"; }
+ ListElement{ longitude: "76"; latitude: "70"; height: "121"; }
+ ListElement{ longitude: "76"; latitude: "71"; height: "122"; }
+ ListElement{ longitude: "76"; latitude: "72"; height: "125"; }
+ ListElement{ longitude: "76"; latitude: "73"; height: "127"; }
+ ListElement{ longitude: "76"; latitude: "74"; height: "127"; }
+ ListElement{ longitude: "76"; latitude: "75"; height: "131"; }
+ ListElement{ longitude: "76"; latitude: "76"; height: "134"; }
+ ListElement{ longitude: "76"; latitude: "77"; height: "137"; }
+ ListElement{ longitude: "76"; latitude: "78"; height: "140"; }
+ ListElement{ longitude: "76"; latitude: "79"; height: "143"; }
+ ListElement{ longitude: "76"; latitude: "80"; height: "143"; }
+ ListElement{ longitude: "76"; latitude: "81"; height: "144"; }
+ ListElement{ longitude: "76"; latitude: "82"; height: "141"; }
+ ListElement{ longitude: "76"; latitude: "83"; height: "137"; }
+ ListElement{ longitude: "76"; latitude: "84"; height: "136"; }
+ ListElement{ longitude: "76"; latitude: "85"; height: "136"; }
+ ListElement{ longitude: "76"; latitude: "86"; height: "133"; }
+ ListElement{ longitude: "76"; latitude: "87"; height: "131"; }
+ ListElement{ longitude: "76"; latitude: "88"; height: "129"; }
+ ListElement{ longitude: "76"; latitude: "89"; height: "128"; }
+ ListElement{ longitude: "76"; latitude: "90"; height: "123"; }
+ ListElement{ longitude: "76"; latitude: "91"; height: "120"; }
+ ListElement{ longitude: "76"; latitude: "92"; height: "117"; }
+ ListElement{ longitude: "76"; latitude: "93"; height: "115"; }
+ ListElement{ longitude: "76"; latitude: "94"; height: "112"; }
+ ListElement{ longitude: "76"; latitude: "95"; height: "112"; }
+ ListElement{ longitude: "76"; latitude: "96"; height: "116"; }
+ ListElement{ longitude: "76"; latitude: "97"; height: "116"; }
+ ListElement{ longitude: "76"; latitude: "98"; height: "122"; }
+ ListElement{ longitude: "76"; latitude: "99"; height: "114"; }
+ ListElement{ longitude: "77"; latitude: "0"; height: "124"; }
+ ListElement{ longitude: "77"; latitude: "1"; height: "124"; }
+ ListElement{ longitude: "77"; latitude: "2"; height: "125"; }
+ ListElement{ longitude: "77"; latitude: "3"; height: "127"; }
+ ListElement{ longitude: "77"; latitude: "4"; height: "130"; }
+ ListElement{ longitude: "77"; latitude: "5"; height: "131"; }
+ ListElement{ longitude: "77"; latitude: "6"; height: "123"; }
+ ListElement{ longitude: "77"; latitude: "7"; height: "119"; }
+ ListElement{ longitude: "77"; latitude: "8"; height: "115"; }
+ ListElement{ longitude: "77"; latitude: "9"; height: "110"; }
+ ListElement{ longitude: "77"; latitude: "10"; height: "106"; }
+ ListElement{ longitude: "77"; latitude: "11"; height: "103"; }
+ ListElement{ longitude: "77"; latitude: "12"; height: "99"; }
+ ListElement{ longitude: "77"; latitude: "13"; height: "98"; }
+ ListElement{ longitude: "77"; latitude: "14"; height: "98"; }
+ ListElement{ longitude: "77"; latitude: "15"; height: "100"; }
+ ListElement{ longitude: "77"; latitude: "16"; height: "99"; }
+ ListElement{ longitude: "77"; latitude: "17"; height: "102"; }
+ ListElement{ longitude: "77"; latitude: "18"; height: "104"; }
+ ListElement{ longitude: "77"; latitude: "19"; height: "106"; }
+ ListElement{ longitude: "77"; latitude: "20"; height: "108"; }
+ ListElement{ longitude: "77"; latitude: "21"; height: "104"; }
+ ListElement{ longitude: "77"; latitude: "22"; height: "107"; }
+ ListElement{ longitude: "77"; latitude: "23"; height: "112"; }
+ ListElement{ longitude: "77"; latitude: "24"; height: "111"; }
+ ListElement{ longitude: "77"; latitude: "25"; height: "113"; }
+ ListElement{ longitude: "77"; latitude: "26"; height: "113"; }
+ ListElement{ longitude: "77"; latitude: "27"; height: "112"; }
+ ListElement{ longitude: "77"; latitude: "28"; height: "111"; }
+ ListElement{ longitude: "77"; latitude: "29"; height: "108"; }
+ ListElement{ longitude: "77"; latitude: "30"; height: "104"; }
+ ListElement{ longitude: "77"; latitude: "31"; height: "102"; }
+ ListElement{ longitude: "77"; latitude: "32"; height: "101"; }
+ ListElement{ longitude: "77"; latitude: "33"; height: "101"; }
+ ListElement{ longitude: "77"; latitude: "34"; height: "104"; }
+ ListElement{ longitude: "77"; latitude: "35"; height: "102"; }
+ ListElement{ longitude: "77"; latitude: "36"; height: "102"; }
+ ListElement{ longitude: "77"; latitude: "37"; height: "105"; }
+ ListElement{ longitude: "77"; latitude: "38"; height: "106"; }
+ ListElement{ longitude: "77"; latitude: "39"; height: "112"; }
+ ListElement{ longitude: "77"; latitude: "40"; height: "117"; }
+ ListElement{ longitude: "77"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "77"; latitude: "42"; height: "125"; }
+ ListElement{ longitude: "77"; latitude: "43"; height: "125"; }
+ ListElement{ longitude: "77"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "77"; latitude: "45"; height: "119"; }
+ ListElement{ longitude: "77"; latitude: "46"; height: "118"; }
+ ListElement{ longitude: "77"; latitude: "47"; height: "118"; }
+ ListElement{ longitude: "77"; latitude: "48"; height: "123"; }
+ ListElement{ longitude: "77"; latitude: "49"; height: "127"; }
+ ListElement{ longitude: "77"; latitude: "50"; height: "131"; }
+ ListElement{ longitude: "77"; latitude: "51"; height: "136"; }
+ ListElement{ longitude: "77"; latitude: "52"; height: "136"; }
+ ListElement{ longitude: "77"; latitude: "53"; height: "137"; }
+ ListElement{ longitude: "77"; latitude: "54"; height: "135"; }
+ ListElement{ longitude: "77"; latitude: "55"; height: "136"; }
+ ListElement{ longitude: "77"; latitude: "56"; height: "134"; }
+ ListElement{ longitude: "77"; latitude: "57"; height: "134"; }
+ ListElement{ longitude: "77"; latitude: "58"; height: "133"; }
+ ListElement{ longitude: "77"; latitude: "59"; height: "130"; }
+ ListElement{ longitude: "77"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "77"; latitude: "61"; height: "124"; }
+ ListElement{ longitude: "77"; latitude: "62"; height: "120"; }
+ ListElement{ longitude: "77"; latitude: "63"; height: "117"; }
+ ListElement{ longitude: "77"; latitude: "64"; height: "114"; }
+ ListElement{ longitude: "77"; latitude: "65"; height: "111"; }
+ ListElement{ longitude: "77"; latitude: "66"; height: "109"; }
+ ListElement{ longitude: "77"; latitude: "67"; height: "107"; }
+ ListElement{ longitude: "77"; latitude: "68"; height: "106"; }
+ ListElement{ longitude: "77"; latitude: "69"; height: "110"; }
+ ListElement{ longitude: "77"; latitude: "70"; height: "116"; }
+ ListElement{ longitude: "77"; latitude: "71"; height: "119"; }
+ ListElement{ longitude: "77"; latitude: "72"; height: "125"; }
+ ListElement{ longitude: "77"; latitude: "73"; height: "129"; }
+ ListElement{ longitude: "77"; latitude: "74"; height: "132"; }
+ ListElement{ longitude: "77"; latitude: "75"; height: "133"; }
+ ListElement{ longitude: "77"; latitude: "76"; height: "135"; }
+ ListElement{ longitude: "77"; latitude: "77"; height: "137"; }
+ ListElement{ longitude: "77"; latitude: "78"; height: "142"; }
+ ListElement{ longitude: "77"; latitude: "79"; height: "143"; }
+ ListElement{ longitude: "77"; latitude: "80"; height: "141"; }
+ ListElement{ longitude: "77"; latitude: "81"; height: "140"; }
+ ListElement{ longitude: "77"; latitude: "82"; height: "138"; }
+ ListElement{ longitude: "77"; latitude: "83"; height: "138"; }
+ ListElement{ longitude: "77"; latitude: "84"; height: "137"; }
+ ListElement{ longitude: "77"; latitude: "85"; height: "136"; }
+ ListElement{ longitude: "77"; latitude: "86"; height: "135"; }
+ ListElement{ longitude: "77"; latitude: "87"; height: "133"; }
+ ListElement{ longitude: "77"; latitude: "88"; height: "129"; }
+ ListElement{ longitude: "77"; latitude: "89"; height: "128"; }
+ ListElement{ longitude: "77"; latitude: "90"; height: "123"; }
+ ListElement{ longitude: "77"; latitude: "91"; height: "120"; }
+ ListElement{ longitude: "77"; latitude: "92"; height: "118"; }
+ ListElement{ longitude: "77"; latitude: "93"; height: "116"; }
+ ListElement{ longitude: "77"; latitude: "94"; height: "115"; }
+ ListElement{ longitude: "77"; latitude: "95"; height: "116"; }
+ ListElement{ longitude: "77"; latitude: "96"; height: "117"; }
+ ListElement{ longitude: "77"; latitude: "97"; height: "120"; }
+ ListElement{ longitude: "77"; latitude: "98"; height: "125"; }
+ ListElement{ longitude: "77"; latitude: "99"; height: "117"; }
+ ListElement{ longitude: "78"; latitude: "0"; height: "120"; }
+ ListElement{ longitude: "78"; latitude: "1"; height: "118"; }
+ ListElement{ longitude: "78"; latitude: "2"; height: "120"; }
+ ListElement{ longitude: "78"; latitude: "3"; height: "125"; }
+ ListElement{ longitude: "78"; latitude: "4"; height: "129"; }
+ ListElement{ longitude: "78"; latitude: "5"; height: "129"; }
+ ListElement{ longitude: "78"; latitude: "6"; height: "126"; }
+ ListElement{ longitude: "78"; latitude: "7"; height: "119"; }
+ ListElement{ longitude: "78"; latitude: "8"; height: "115"; }
+ ListElement{ longitude: "78"; latitude: "9"; height: "112"; }
+ ListElement{ longitude: "78"; latitude: "10"; height: "110"; }
+ ListElement{ longitude: "78"; latitude: "11"; height: "105"; }
+ ListElement{ longitude: "78"; latitude: "12"; height: "100"; }
+ ListElement{ longitude: "78"; latitude: "13"; height: "101"; }
+ ListElement{ longitude: "78"; latitude: "14"; height: "102"; }
+ ListElement{ longitude: "78"; latitude: "15"; height: "104"; }
+ ListElement{ longitude: "78"; latitude: "16"; height: "105"; }
+ ListElement{ longitude: "78"; latitude: "17"; height: "106"; }
+ ListElement{ longitude: "78"; latitude: "18"; height: "106"; }
+ ListElement{ longitude: "78"; latitude: "19"; height: "106"; }
+ ListElement{ longitude: "78"; latitude: "20"; height: "99"; }
+ ListElement{ longitude: "78"; latitude: "21"; height: "92"; }
+ ListElement{ longitude: "78"; latitude: "22"; height: "96"; }
+ ListElement{ longitude: "78"; latitude: "23"; height: "110"; }
+ ListElement{ longitude: "78"; latitude: "24"; height: "112"; }
+ ListElement{ longitude: "78"; latitude: "25"; height: "113"; }
+ ListElement{ longitude: "78"; latitude: "26"; height: "114"; }
+ ListElement{ longitude: "78"; latitude: "27"; height: "112"; }
+ ListElement{ longitude: "78"; latitude: "28"; height: "110"; }
+ ListElement{ longitude: "78"; latitude: "29"; height: "105"; }
+ ListElement{ longitude: "78"; latitude: "30"; height: "100"; }
+ ListElement{ longitude: "78"; latitude: "31"; height: "98"; }
+ ListElement{ longitude: "78"; latitude: "32"; height: "99"; }
+ ListElement{ longitude: "78"; latitude: "33"; height: "102"; }
+ ListElement{ longitude: "78"; latitude: "34"; height: "105"; }
+ ListElement{ longitude: "78"; latitude: "35"; height: "106"; }
+ ListElement{ longitude: "78"; latitude: "36"; height: "106"; }
+ ListElement{ longitude: "78"; latitude: "37"; height: "103"; }
+ ListElement{ longitude: "78"; latitude: "38"; height: "104"; }
+ ListElement{ longitude: "78"; latitude: "39"; height: "108"; }
+ ListElement{ longitude: "78"; latitude: "40"; height: "114"; }
+ ListElement{ longitude: "78"; latitude: "41"; height: "118"; }
+ ListElement{ longitude: "78"; latitude: "42"; height: "119"; }
+ ListElement{ longitude: "78"; latitude: "43"; height: "121"; }
+ ListElement{ longitude: "78"; latitude: "44"; height: "121"; }
+ ListElement{ longitude: "78"; latitude: "45"; height: "116"; }
+ ListElement{ longitude: "78"; latitude: "46"; height: "115"; }
+ ListElement{ longitude: "78"; latitude: "47"; height: "116"; }
+ ListElement{ longitude: "78"; latitude: "48"; height: "120"; }
+ ListElement{ longitude: "78"; latitude: "49"; height: "124"; }
+ ListElement{ longitude: "78"; latitude: "50"; height: "127"; }
+ ListElement{ longitude: "78"; latitude: "51"; height: "132"; }
+ ListElement{ longitude: "78"; latitude: "52"; height: "134"; }
+ ListElement{ longitude: "78"; latitude: "53"; height: "135"; }
+ ListElement{ longitude: "78"; latitude: "54"; height: "137"; }
+ ListElement{ longitude: "78"; latitude: "55"; height: "135"; }
+ ListElement{ longitude: "78"; latitude: "56"; height: "133"; }
+ ListElement{ longitude: "78"; latitude: "57"; height: "133"; }
+ ListElement{ longitude: "78"; latitude: "58"; height: "130"; }
+ ListElement{ longitude: "78"; latitude: "59"; height: "127"; }
+ ListElement{ longitude: "78"; latitude: "60"; height: "124"; }
+ ListElement{ longitude: "78"; latitude: "61"; height: "121"; }
+ ListElement{ longitude: "78"; latitude: "62"; height: "119"; }
+ ListElement{ longitude: "78"; latitude: "63"; height: "117"; }
+ ListElement{ longitude: "78"; latitude: "64"; height: "114"; }
+ ListElement{ longitude: "78"; latitude: "65"; height: "110"; }
+ ListElement{ longitude: "78"; latitude: "66"; height: "109"; }
+ ListElement{ longitude: "78"; latitude: "67"; height: "103"; }
+ ListElement{ longitude: "78"; latitude: "68"; height: "104"; }
+ ListElement{ longitude: "78"; latitude: "69"; height: "106"; }
+ ListElement{ longitude: "78"; latitude: "70"; height: "111"; }
+ ListElement{ longitude: "78"; latitude: "71"; height: "120"; }
+ ListElement{ longitude: "78"; latitude: "72"; height: "124"; }
+ ListElement{ longitude: "78"; latitude: "73"; height: "131"; }
+ ListElement{ longitude: "78"; latitude: "74"; height: "135"; }
+ ListElement{ longitude: "78"; latitude: "75"; height: "139"; }
+ ListElement{ longitude: "78"; latitude: "76"; height: "141"; }
+ ListElement{ longitude: "78"; latitude: "77"; height: "140"; }
+ ListElement{ longitude: "78"; latitude: "78"; height: "139"; }
+ ListElement{ longitude: "78"; latitude: "79"; height: "138"; }
+ ListElement{ longitude: "78"; latitude: "80"; height: "137"; }
+ ListElement{ longitude: "78"; latitude: "81"; height: "133"; }
+ ListElement{ longitude: "78"; latitude: "82"; height: "133"; }
+ ListElement{ longitude: "78"; latitude: "83"; height: "135"; }
+ ListElement{ longitude: "78"; latitude: "84"; height: "136"; }
+ ListElement{ longitude: "78"; latitude: "85"; height: "136"; }
+ ListElement{ longitude: "78"; latitude: "86"; height: "136"; }
+ ListElement{ longitude: "78"; latitude: "87"; height: "136"; }
+ ListElement{ longitude: "78"; latitude: "88"; height: "132"; }
+ ListElement{ longitude: "78"; latitude: "89"; height: "129"; }
+ ListElement{ longitude: "78"; latitude: "90"; height: "126"; }
+ ListElement{ longitude: "78"; latitude: "91"; height: "122"; }
+ ListElement{ longitude: "78"; latitude: "92"; height: "121"; }
+ ListElement{ longitude: "78"; latitude: "93"; height: "119"; }
+ ListElement{ longitude: "78"; latitude: "94"; height: "115"; }
+ ListElement{ longitude: "78"; latitude: "95"; height: "120"; }
+ ListElement{ longitude: "78"; latitude: "96"; height: "124"; }
+ ListElement{ longitude: "78"; latitude: "97"; height: "125"; }
+ ListElement{ longitude: "78"; latitude: "98"; height: "130"; }
+ ListElement{ longitude: "78"; latitude: "99"; height: "121"; }
+ ListElement{ longitude: "79"; latitude: "0"; height: "115"; }
+ ListElement{ longitude: "79"; latitude: "1"; height: "114"; }
+ ListElement{ longitude: "79"; latitude: "2"; height: "116"; }
+ ListElement{ longitude: "79"; latitude: "3"; height: "119"; }
+ ListElement{ longitude: "79"; latitude: "4"; height: "125"; }
+ ListElement{ longitude: "79"; latitude: "5"; height: "126"; }
+ ListElement{ longitude: "79"; latitude: "6"; height: "123"; }
+ ListElement{ longitude: "79"; latitude: "7"; height: "121"; }
+ ListElement{ longitude: "79"; latitude: "8"; height: "119"; }
+ ListElement{ longitude: "79"; latitude: "9"; height: "115"; }
+ ListElement{ longitude: "79"; latitude: "10"; height: "113"; }
+ ListElement{ longitude: "79"; latitude: "11"; height: "108"; }
+ ListElement{ longitude: "79"; latitude: "12"; height: "105"; }
+ ListElement{ longitude: "79"; latitude: "13"; height: "104"; }
+ ListElement{ longitude: "79"; latitude: "14"; height: "106"; }
+ ListElement{ longitude: "79"; latitude: "15"; height: "109"; }
+ ListElement{ longitude: "79"; latitude: "16"; height: "107"; }
+ ListElement{ longitude: "79"; latitude: "17"; height: "107"; }
+ ListElement{ longitude: "79"; latitude: "18"; height: "107"; }
+ ListElement{ longitude: "79"; latitude: "19"; height: "107"; }
+ ListElement{ longitude: "79"; latitude: "20"; height: "100"; }
+ ListElement{ longitude: "79"; latitude: "21"; height: "94"; }
+ ListElement{ longitude: "79"; latitude: "22"; height: "96"; }
+ ListElement{ longitude: "79"; latitude: "23"; height: "107"; }
+ ListElement{ longitude: "79"; latitude: "24"; height: "111"; }
+ ListElement{ longitude: "79"; latitude: "25"; height: "113"; }
+ ListElement{ longitude: "79"; latitude: "26"; height: "114"; }
+ ListElement{ longitude: "79"; latitude: "27"; height: "113"; }
+ ListElement{ longitude: "79"; latitude: "28"; height: "109"; }
+ ListElement{ longitude: "79"; latitude: "29"; height: "104"; }
+ ListElement{ longitude: "79"; latitude: "30"; height: "102"; }
+ ListElement{ longitude: "79"; latitude: "31"; height: "98"; }
+ ListElement{ longitude: "79"; latitude: "32"; height: "98"; }
+ ListElement{ longitude: "79"; latitude: "33"; height: "99"; }
+ ListElement{ longitude: "79"; latitude: "34"; height: "102"; }
+ ListElement{ longitude: "79"; latitude: "35"; height: "103"; }
+ ListElement{ longitude: "79"; latitude: "36"; height: "102"; }
+ ListElement{ longitude: "79"; latitude: "37"; height: "102"; }
+ ListElement{ longitude: "79"; latitude: "38"; height: "103"; }
+ ListElement{ longitude: "79"; latitude: "39"; height: "104"; }
+ ListElement{ longitude: "79"; latitude: "40"; height: "110"; }
+ ListElement{ longitude: "79"; latitude: "41"; height: "115"; }
+ ListElement{ longitude: "79"; latitude: "42"; height: "118"; }
+ ListElement{ longitude: "79"; latitude: "43"; height: "118"; }
+ ListElement{ longitude: "79"; latitude: "44"; height: "120"; }
+ ListElement{ longitude: "79"; latitude: "45"; height: "117"; }
+ ListElement{ longitude: "79"; latitude: "46"; height: "118"; }
+ ListElement{ longitude: "79"; latitude: "47"; height: "117"; }
+ ListElement{ longitude: "79"; latitude: "48"; height: "119"; }
+ ListElement{ longitude: "79"; latitude: "49"; height: "124"; }
+ ListElement{ longitude: "79"; latitude: "50"; height: "127"; }
+ ListElement{ longitude: "79"; latitude: "51"; height: "128"; }
+ ListElement{ longitude: "79"; latitude: "52"; height: "131"; }
+ ListElement{ longitude: "79"; latitude: "53"; height: "131"; }
+ ListElement{ longitude: "79"; latitude: "54"; height: "133"; }
+ ListElement{ longitude: "79"; latitude: "55"; height: "134"; }
+ ListElement{ longitude: "79"; latitude: "56"; height: "134"; }
+ ListElement{ longitude: "79"; latitude: "57"; height: "133"; }
+ ListElement{ longitude: "79"; latitude: "58"; height: "129"; }
+ ListElement{ longitude: "79"; latitude: "59"; height: "127"; }
+ ListElement{ longitude: "79"; latitude: "60"; height: "124"; }
+ ListElement{ longitude: "79"; latitude: "61"; height: "121"; }
+ ListElement{ longitude: "79"; latitude: "62"; height: "120"; }
+ ListElement{ longitude: "79"; latitude: "63"; height: "120"; }
+ ListElement{ longitude: "79"; latitude: "64"; height: "118"; }
+ ListElement{ longitude: "79"; latitude: "65"; height: "114"; }
+ ListElement{ longitude: "79"; latitude: "66"; height: "111"; }
+ ListElement{ longitude: "79"; latitude: "67"; height: "106"; }
+ ListElement{ longitude: "79"; latitude: "68"; height: "107"; }
+ ListElement{ longitude: "79"; latitude: "69"; height: "106"; }
+ ListElement{ longitude: "79"; latitude: "70"; height: "112"; }
+ ListElement{ longitude: "79"; latitude: "71"; height: "119"; }
+ ListElement{ longitude: "79"; latitude: "72"; height: "124"; }
+ ListElement{ longitude: "79"; latitude: "73"; height: "132"; }
+ ListElement{ longitude: "79"; latitude: "74"; height: "137"; }
+ ListElement{ longitude: "79"; latitude: "75"; height: "138"; }
+ ListElement{ longitude: "79"; latitude: "76"; height: "141"; }
+ ListElement{ longitude: "79"; latitude: "77"; height: "140"; }
+ ListElement{ longitude: "79"; latitude: "78"; height: "137"; }
+ ListElement{ longitude: "79"; latitude: "79"; height: "132"; }
+ ListElement{ longitude: "79"; latitude: "80"; height: "130"; }
+ ListElement{ longitude: "79"; latitude: "81"; height: "125"; }
+ ListElement{ longitude: "79"; latitude: "82"; height: "125"; }
+ ListElement{ longitude: "79"; latitude: "83"; height: "132"; }
+ ListElement{ longitude: "79"; latitude: "84"; height: "136"; }
+ ListElement{ longitude: "79"; latitude: "85"; height: "136"; }
+ ListElement{ longitude: "79"; latitude: "86"; height: "136"; }
+ ListElement{ longitude: "79"; latitude: "87"; height: "134"; }
+ ListElement{ longitude: "79"; latitude: "88"; height: "132"; }
+ ListElement{ longitude: "79"; latitude: "89"; height: "129"; }
+ ListElement{ longitude: "79"; latitude: "90"; height: "127"; }
+ ListElement{ longitude: "79"; latitude: "91"; height: "125"; }
+ ListElement{ longitude: "79"; latitude: "92"; height: "122"; }
+ ListElement{ longitude: "79"; latitude: "93"; height: "119"; }
+ ListElement{ longitude: "79"; latitude: "94"; height: "120"; }
+ ListElement{ longitude: "79"; latitude: "95"; height: "123"; }
+ ListElement{ longitude: "79"; latitude: "96"; height: "123"; }
+ ListElement{ longitude: "79"; latitude: "97"; height: "122"; }
+ ListElement{ longitude: "79"; latitude: "98"; height: "124"; }
+ ListElement{ longitude: "79"; latitude: "99"; height: "118"; }
+ ListElement{ longitude: "80"; latitude: "0"; height: "111"; }
+ ListElement{ longitude: "80"; latitude: "1"; height: "108"; }
+ ListElement{ longitude: "80"; latitude: "2"; height: "111"; }
+ ListElement{ longitude: "80"; latitude: "3"; height: "114"; }
+ ListElement{ longitude: "80"; latitude: "4"; height: "119"; }
+ ListElement{ longitude: "80"; latitude: "5"; height: "123"; }
+ ListElement{ longitude: "80"; latitude: "6"; height: "120"; }
+ ListElement{ longitude: "80"; latitude: "7"; height: "120"; }
+ ListElement{ longitude: "80"; latitude: "8"; height: "122"; }
+ ListElement{ longitude: "80"; latitude: "9"; height: "118"; }
+ ListElement{ longitude: "80"; latitude: "10"; height: "117"; }
+ ListElement{ longitude: "80"; latitude: "11"; height: "113"; }
+ ListElement{ longitude: "80"; latitude: "12"; height: "108"; }
+ ListElement{ longitude: "80"; latitude: "13"; height: "106"; }
+ ListElement{ longitude: "80"; latitude: "14"; height: "106"; }
+ ListElement{ longitude: "80"; latitude: "15"; height: "108"; }
+ ListElement{ longitude: "80"; latitude: "16"; height: "108"; }
+ ListElement{ longitude: "80"; latitude: "17"; height: "108"; }
+ ListElement{ longitude: "80"; latitude: "18"; height: "107"; }
+ ListElement{ longitude: "80"; latitude: "19"; height: "105"; }
+ ListElement{ longitude: "80"; latitude: "20"; height: "103"; }
+ ListElement{ longitude: "80"; latitude: "21"; height: "100"; }
+ ListElement{ longitude: "80"; latitude: "22"; height: "101"; }
+ ListElement{ longitude: "80"; latitude: "23"; height: "106"; }
+ ListElement{ longitude: "80"; latitude: "24"; height: "110"; }
+ ListElement{ longitude: "80"; latitude: "25"; height: "113"; }
+ ListElement{ longitude: "80"; latitude: "26"; height: "116"; }
+ ListElement{ longitude: "80"; latitude: "27"; height: "111"; }
+ ListElement{ longitude: "80"; latitude: "28"; height: "109"; }
+ ListElement{ longitude: "80"; latitude: "29"; height: "102"; }
+ ListElement{ longitude: "80"; latitude: "30"; height: "100"; }
+ ListElement{ longitude: "80"; latitude: "31"; height: "98"; }
+ ListElement{ longitude: "80"; latitude: "32"; height: "95"; }
+ ListElement{ longitude: "80"; latitude: "33"; height: "97"; }
+ ListElement{ longitude: "80"; latitude: "34"; height: "100"; }
+ ListElement{ longitude: "80"; latitude: "35"; height: "101"; }
+ ListElement{ longitude: "80"; latitude: "36"; height: "103"; }
+ ListElement{ longitude: "80"; latitude: "37"; height: "101"; }
+ ListElement{ longitude: "80"; latitude: "38"; height: "103"; }
+ ListElement{ longitude: "80"; latitude: "39"; height: "106"; }
+ ListElement{ longitude: "80"; latitude: "40"; height: "109"; }
+ ListElement{ longitude: "80"; latitude: "41"; height: "112"; }
+ ListElement{ longitude: "80"; latitude: "42"; height: "115"; }
+ ListElement{ longitude: "80"; latitude: "43"; height: "117"; }
+ ListElement{ longitude: "80"; latitude: "44"; height: "119"; }
+ ListElement{ longitude: "80"; latitude: "45"; height: "119"; }
+ ListElement{ longitude: "80"; latitude: "46"; height: "117"; }
+ ListElement{ longitude: "80"; latitude: "47"; height: "116"; }
+ ListElement{ longitude: "80"; latitude: "48"; height: "119"; }
+ ListElement{ longitude: "80"; latitude: "49"; height: "122"; }
+ ListElement{ longitude: "80"; latitude: "50"; height: "126"; }
+ ListElement{ longitude: "80"; latitude: "51"; height: "126"; }
+ ListElement{ longitude: "80"; latitude: "52"; height: "127"; }
+ ListElement{ longitude: "80"; latitude: "53"; height: "128"; }
+ ListElement{ longitude: "80"; latitude: "54"; height: "131"; }
+ ListElement{ longitude: "80"; latitude: "55"; height: "131"; }
+ ListElement{ longitude: "80"; latitude: "56"; height: "134"; }
+ ListElement{ longitude: "80"; latitude: "57"; height: "133"; }
+ ListElement{ longitude: "80"; latitude: "58"; height: "130"; }
+ ListElement{ longitude: "80"; latitude: "59"; height: "129"; }
+ ListElement{ longitude: "80"; latitude: "60"; height: "125"; }
+ ListElement{ longitude: "80"; latitude: "61"; height: "123"; }
+ ListElement{ longitude: "80"; latitude: "62"; height: "121"; }
+ ListElement{ longitude: "80"; latitude: "63"; height: "122"; }
+ ListElement{ longitude: "80"; latitude: "64"; height: "121"; }
+ ListElement{ longitude: "80"; latitude: "65"; height: "119"; }
+ ListElement{ longitude: "80"; latitude: "66"; height: "116"; }
+ ListElement{ longitude: "80"; latitude: "67"; height: "111"; }
+ ListElement{ longitude: "80"; latitude: "68"; height: "108"; }
+ ListElement{ longitude: "80"; latitude: "69"; height: "110"; }
+ ListElement{ longitude: "80"; latitude: "70"; height: "112"; }
+ ListElement{ longitude: "80"; latitude: "71"; height: "117"; }
+ ListElement{ longitude: "80"; latitude: "72"; height: "125"; }
+ ListElement{ longitude: "80"; latitude: "73"; height: "132"; }
+ ListElement{ longitude: "80"; latitude: "74"; height: "139"; }
+ ListElement{ longitude: "80"; latitude: "75"; height: "144"; }
+ ListElement{ longitude: "80"; latitude: "76"; height: "144"; }
+ ListElement{ longitude: "80"; latitude: "77"; height: "141"; }
+ ListElement{ longitude: "80"; latitude: "78"; height: "136"; }
+ ListElement{ longitude: "80"; latitude: "79"; height: "127"; }
+ ListElement{ longitude: "80"; latitude: "80"; height: "128"; }
+ ListElement{ longitude: "80"; latitude: "81"; height: "125"; }
+ ListElement{ longitude: "80"; latitude: "82"; height: "129"; }
+ ListElement{ longitude: "80"; latitude: "83"; height: "131"; }
+ ListElement{ longitude: "80"; latitude: "84"; height: "135"; }
+ ListElement{ longitude: "80"; latitude: "85"; height: "136"; }
+ ListElement{ longitude: "80"; latitude: "86"; height: "135"; }
+ ListElement{ longitude: "80"; latitude: "87"; height: "131"; }
+ ListElement{ longitude: "80"; latitude: "88"; height: "129"; }
+ ListElement{ longitude: "80"; latitude: "89"; height: "129"; }
+ ListElement{ longitude: "80"; latitude: "90"; height: "127"; }
+ ListElement{ longitude: "80"; latitude: "91"; height: "125"; }
+ ListElement{ longitude: "80"; latitude: "92"; height: "121"; }
+ ListElement{ longitude: "80"; latitude: "93"; height: "120"; }
+ ListElement{ longitude: "80"; latitude: "94"; height: "120"; }
+ ListElement{ longitude: "80"; latitude: "95"; height: "119"; }
+ ListElement{ longitude: "80"; latitude: "96"; height: "120"; }
+ ListElement{ longitude: "80"; latitude: "97"; height: "117"; }
+ ListElement{ longitude: "80"; latitude: "98"; height: "116"; }
+ ListElement{ longitude: "80"; latitude: "99"; height: "112"; }
+ ListElement{ longitude: "81"; latitude: "0"; height: "107"; }
+ ListElement{ longitude: "81"; latitude: "1"; height: "105"; }
+ ListElement{ longitude: "81"; latitude: "2"; height: "106"; }
+ ListElement{ longitude: "81"; latitude: "3"; height: "109"; }
+ ListElement{ longitude: "81"; latitude: "4"; height: "114"; }
+ ListElement{ longitude: "81"; latitude: "5"; height: "117"; }
+ ListElement{ longitude: "81"; latitude: "6"; height: "121"; }
+ ListElement{ longitude: "81"; latitude: "7"; height: "123"; }
+ ListElement{ longitude: "81"; latitude: "8"; height: "126"; }
+ ListElement{ longitude: "81"; latitude: "9"; height: "129"; }
+ ListElement{ longitude: "81"; latitude: "10"; height: "120"; }
+ ListElement{ longitude: "81"; latitude: "11"; height: "120"; }
+ ListElement{ longitude: "81"; latitude: "12"; height: "113"; }
+ ListElement{ longitude: "81"; latitude: "13"; height: "108"; }
+ ListElement{ longitude: "81"; latitude: "14"; height: "107"; }
+ ListElement{ longitude: "81"; latitude: "15"; height: "108"; }
+ ListElement{ longitude: "81"; latitude: "16"; height: "108"; }
+ ListElement{ longitude: "81"; latitude: "17"; height: "109"; }
+ ListElement{ longitude: "81"; latitude: "18"; height: "106"; }
+ ListElement{ longitude: "81"; latitude: "19"; height: "104"; }
+ ListElement{ longitude: "81"; latitude: "20"; height: "101"; }
+ ListElement{ longitude: "81"; latitude: "21"; height: "102"; }
+ ListElement{ longitude: "81"; latitude: "22"; height: "103"; }
+ ListElement{ longitude: "81"; latitude: "23"; height: "106"; }
+ ListElement{ longitude: "81"; latitude: "24"; height: "110"; }
+ ListElement{ longitude: "81"; latitude: "25"; height: "114"; }
+ ListElement{ longitude: "81"; latitude: "26"; height: "117"; }
+ ListElement{ longitude: "81"; latitude: "27"; height: "112"; }
+ ListElement{ longitude: "81"; latitude: "28"; height: "110"; }
+ ListElement{ longitude: "81"; latitude: "29"; height: "103"; }
+ ListElement{ longitude: "81"; latitude: "30"; height: "103"; }
+ ListElement{ longitude: "81"; latitude: "31"; height: "99"; }
+ ListElement{ longitude: "81"; latitude: "32"; height: "97"; }
+ ListElement{ longitude: "81"; latitude: "33"; height: "93"; }
+ ListElement{ longitude: "81"; latitude: "34"; height: "95"; }
+ ListElement{ longitude: "81"; latitude: "35"; height: "94"; }
+ ListElement{ longitude: "81"; latitude: "36"; height: "95"; }
+ ListElement{ longitude: "81"; latitude: "37"; height: "99"; }
+ ListElement{ longitude: "81"; latitude: "38"; height: "103"; }
+ ListElement{ longitude: "81"; latitude: "39"; height: "108"; }
+ ListElement{ longitude: "81"; latitude: "40"; height: "112"; }
+ ListElement{ longitude: "81"; latitude: "41"; height: "112"; }
+ ListElement{ longitude: "81"; latitude: "42"; height: "116"; }
+ ListElement{ longitude: "81"; latitude: "43"; height: "118"; }
+ ListElement{ longitude: "81"; latitude: "44"; height: "119"; }
+ ListElement{ longitude: "81"; latitude: "45"; height: "118"; }
+ ListElement{ longitude: "81"; latitude: "46"; height: "120"; }
+ ListElement{ longitude: "81"; latitude: "47"; height: "119"; }
+ ListElement{ longitude: "81"; latitude: "48"; height: "122"; }
+ ListElement{ longitude: "81"; latitude: "49"; height: "122"; }
+ ListElement{ longitude: "81"; latitude: "50"; height: "124"; }
+ ListElement{ longitude: "81"; latitude: "51"; height: "125"; }
+ ListElement{ longitude: "81"; latitude: "52"; height: "125"; }
+ ListElement{ longitude: "81"; latitude: "53"; height: "125"; }
+ ListElement{ longitude: "81"; latitude: "54"; height: "128"; }
+ ListElement{ longitude: "81"; latitude: "55"; height: "132"; }
+ ListElement{ longitude: "81"; latitude: "56"; height: "134"; }
+ ListElement{ longitude: "81"; latitude: "57"; height: "134"; }
+ ListElement{ longitude: "81"; latitude: "58"; height: "133"; }
+ ListElement{ longitude: "81"; latitude: "59"; height: "131"; }
+ ListElement{ longitude: "81"; latitude: "60"; height: "126"; }
+ ListElement{ longitude: "81"; latitude: "61"; height: "126"; }
+ ListElement{ longitude: "81"; latitude: "62"; height: "123"; }
+ ListElement{ longitude: "81"; latitude: "63"; height: "124"; }
+ ListElement{ longitude: "81"; latitude: "64"; height: "125"; }
+ ListElement{ longitude: "81"; latitude: "65"; height: "124"; }
+ ListElement{ longitude: "81"; latitude: "66"; height: "116"; }
+ ListElement{ longitude: "81"; latitude: "67"; height: "120"; }
+ ListElement{ longitude: "81"; latitude: "68"; height: "113"; }
+ ListElement{ longitude: "81"; latitude: "69"; height: "110"; }
+ ListElement{ longitude: "81"; latitude: "70"; height: "113"; }
+ ListElement{ longitude: "81"; latitude: "71"; height: "117"; }
+ ListElement{ longitude: "81"; latitude: "72"; height: "123"; }
+ ListElement{ longitude: "81"; latitude: "73"; height: "130"; }
+ ListElement{ longitude: "81"; latitude: "74"; height: "141"; }
+ ListElement{ longitude: "81"; latitude: "75"; height: "140"; }
+ ListElement{ longitude: "81"; latitude: "76"; height: "141"; }
+ ListElement{ longitude: "81"; latitude: "77"; height: "138"; }
+ ListElement{ longitude: "81"; latitude: "78"; height: "115"; }
+ ListElement{ longitude: "81"; latitude: "79"; height: "118"; }
+ ListElement{ longitude: "81"; latitude: "80"; height: "127"; }
+ ListElement{ longitude: "81"; latitude: "81"; height: "127"; }
+ ListElement{ longitude: "81"; latitude: "82"; height: "131"; }
+ ListElement{ longitude: "81"; latitude: "83"; height: "133"; }
+ ListElement{ longitude: "81"; latitude: "84"; height: "136"; }
+ ListElement{ longitude: "81"; latitude: "85"; height: "136"; }
+ ListElement{ longitude: "81"; latitude: "86"; height: "134"; }
+ ListElement{ longitude: "81"; latitude: "87"; height: "129"; }
+ ListElement{ longitude: "81"; latitude: "88"; height: "127"; }
+ ListElement{ longitude: "81"; latitude: "89"; height: "127"; }
+ ListElement{ longitude: "81"; latitude: "90"; height: "124"; }
+ ListElement{ longitude: "81"; latitude: "91"; height: "125"; }
+ ListElement{ longitude: "81"; latitude: "92"; height: "124"; }
+ ListElement{ longitude: "81"; latitude: "93"; height: "122"; }
+ ListElement{ longitude: "81"; latitude: "94"; height: "120"; }
+ ListElement{ longitude: "81"; latitude: "95"; height: "115"; }
+ ListElement{ longitude: "81"; latitude: "96"; height: "112"; }
+ ListElement{ longitude: "81"; latitude: "97"; height: "108"; }
+ ListElement{ longitude: "81"; latitude: "98"; height: "110"; }
+ ListElement{ longitude: "81"; latitude: "99"; height: "108"; }
+ ListElement{ longitude: "82"; latitude: "0"; height: "107"; }
+ ListElement{ longitude: "82"; latitude: "1"; height: "105"; }
+ ListElement{ longitude: "82"; latitude: "2"; height: "108"; }
+ ListElement{ longitude: "82"; latitude: "3"; height: "109"; }
+ ListElement{ longitude: "82"; latitude: "4"; height: "112"; }
+ ListElement{ longitude: "82"; latitude: "5"; height: "115"; }
+ ListElement{ longitude: "82"; latitude: "6"; height: "119"; }
+ ListElement{ longitude: "82"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "82"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "82"; latitude: "9"; height: "127"; }
+ ListElement{ longitude: "82"; latitude: "10"; height: "88"; }
+ ListElement{ longitude: "82"; latitude: "11"; height: "118"; }
+ ListElement{ longitude: "82"; latitude: "12"; height: "115"; }
+ ListElement{ longitude: "82"; latitude: "13"; height: "111"; }
+ ListElement{ longitude: "82"; latitude: "14"; height: "108"; }
+ ListElement{ longitude: "82"; latitude: "15"; height: "107"; }
+ ListElement{ longitude: "82"; latitude: "16"; height: "106"; }
+ ListElement{ longitude: "82"; latitude: "17"; height: "105"; }
+ ListElement{ longitude: "82"; latitude: "18"; height: "104"; }
+ ListElement{ longitude: "82"; latitude: "19"; height: "102"; }
+ ListElement{ longitude: "82"; latitude: "20"; height: "99"; }
+ ListElement{ longitude: "82"; latitude: "21"; height: "99"; }
+ ListElement{ longitude: "82"; latitude: "22"; height: "99"; }
+ ListElement{ longitude: "82"; latitude: "23"; height: "104"; }
+ ListElement{ longitude: "82"; latitude: "24"; height: "107"; }
+ ListElement{ longitude: "82"; latitude: "25"; height: "114"; }
+ ListElement{ longitude: "82"; latitude: "26"; height: "118"; }
+ ListElement{ longitude: "82"; latitude: "27"; height: "115"; }
+ ListElement{ longitude: "82"; latitude: "28"; height: "112"; }
+ ListElement{ longitude: "82"; latitude: "29"; height: "107"; }
+ ListElement{ longitude: "82"; latitude: "30"; height: "105"; }
+ ListElement{ longitude: "82"; latitude: "31"; height: "102"; }
+ ListElement{ longitude: "82"; latitude: "32"; height: "97"; }
+ ListElement{ longitude: "82"; latitude: "33"; height: "95"; }
+ ListElement{ longitude: "82"; latitude: "34"; height: "92"; }
+ ListElement{ longitude: "82"; latitude: "35"; height: "94"; }
+ ListElement{ longitude: "82"; latitude: "36"; height: "96"; }
+ ListElement{ longitude: "82"; latitude: "37"; height: "99"; }
+ ListElement{ longitude: "82"; latitude: "38"; height: "103"; }
+ ListElement{ longitude: "82"; latitude: "39"; height: "108"; }
+ ListElement{ longitude: "82"; latitude: "40"; height: "113"; }
+ ListElement{ longitude: "82"; latitude: "41"; height: "116"; }
+ ListElement{ longitude: "82"; latitude: "42"; height: "117"; }
+ ListElement{ longitude: "82"; latitude: "43"; height: "116"; }
+ ListElement{ longitude: "82"; latitude: "44"; height: "117"; }
+ ListElement{ longitude: "82"; latitude: "45"; height: "120"; }
+ ListElement{ longitude: "82"; latitude: "46"; height: "119"; }
+ ListElement{ longitude: "82"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "82"; latitude: "48"; height: "122"; }
+ ListElement{ longitude: "82"; latitude: "49"; height: "125"; }
+ ListElement{ longitude: "82"; latitude: "50"; height: "126"; }
+ ListElement{ longitude: "82"; latitude: "51"; height: "125"; }
+ ListElement{ longitude: "82"; latitude: "52"; height: "126"; }
+ ListElement{ longitude: "82"; latitude: "53"; height: "127"; }
+ ListElement{ longitude: "82"; latitude: "54"; height: "130"; }
+ ListElement{ longitude: "82"; latitude: "55"; height: "130"; }
+ ListElement{ longitude: "82"; latitude: "56"; height: "132"; }
+ ListElement{ longitude: "82"; latitude: "57"; height: "134"; }
+ ListElement{ longitude: "82"; latitude: "58"; height: "132"; }
+ ListElement{ longitude: "82"; latitude: "59"; height: "132"; }
+ ListElement{ longitude: "82"; latitude: "60"; height: "128"; }
+ ListElement{ longitude: "82"; latitude: "61"; height: "128"; }
+ ListElement{ longitude: "82"; latitude: "62"; height: "125"; }
+ ListElement{ longitude: "82"; latitude: "63"; height: "127"; }
+ ListElement{ longitude: "82"; latitude: "64"; height: "123"; }
+ ListElement{ longitude: "82"; latitude: "65"; height: "119"; }
+ ListElement{ longitude: "82"; latitude: "66"; height: "112"; }
+ ListElement{ longitude: "82"; latitude: "67"; height: "117"; }
+ ListElement{ longitude: "82"; latitude: "68"; height: "119"; }
+ ListElement{ longitude: "82"; latitude: "69"; height: "117"; }
+ ListElement{ longitude: "82"; latitude: "70"; height: "113"; }
+ ListElement{ longitude: "82"; latitude: "71"; height: "115"; }
+ ListElement{ longitude: "82"; latitude: "72"; height: "122"; }
+ ListElement{ longitude: "82"; latitude: "73"; height: "131"; }
+ ListElement{ longitude: "82"; latitude: "74"; height: "132"; }
+ ListElement{ longitude: "82"; latitude: "75"; height: "108"; }
+ ListElement{ longitude: "82"; latitude: "76"; height: "114"; }
+ ListElement{ longitude: "82"; latitude: "77"; height: "126"; }
+ ListElement{ longitude: "82"; latitude: "78"; height: "100"; }
+ ListElement{ longitude: "82"; latitude: "79"; height: "109"; }
+ ListElement{ longitude: "82"; latitude: "80"; height: "133"; }
+ ListElement{ longitude: "82"; latitude: "81"; height: "132"; }
+ ListElement{ longitude: "82"; latitude: "82"; height: "135"; }
+ ListElement{ longitude: "82"; latitude: "83"; height: "139"; }
+ ListElement{ longitude: "82"; latitude: "84"; height: "139"; }
+ ListElement{ longitude: "82"; latitude: "85"; height: "135"; }
+ ListElement{ longitude: "82"; latitude: "86"; height: "131"; }
+ ListElement{ longitude: "82"; latitude: "87"; height: "128"; }
+ ListElement{ longitude: "82"; latitude: "88"; height: "123"; }
+ ListElement{ longitude: "82"; latitude: "89"; height: "121"; }
+ ListElement{ longitude: "82"; latitude: "90"; height: "122"; }
+ ListElement{ longitude: "82"; latitude: "91"; height: "122"; }
+ ListElement{ longitude: "82"; latitude: "92"; height: "122"; }
+ ListElement{ longitude: "82"; latitude: "93"; height: "123"; }
+ ListElement{ longitude: "82"; latitude: "94"; height: "120"; }
+ ListElement{ longitude: "82"; latitude: "95"; height: "114"; }
+ ListElement{ longitude: "82"; latitude: "96"; height: "106"; }
+ ListElement{ longitude: "82"; latitude: "97"; height: "102"; }
+ ListElement{ longitude: "82"; latitude: "98"; height: "105"; }
+ ListElement{ longitude: "82"; latitude: "99"; height: "106"; }
+ ListElement{ longitude: "83"; latitude: "0"; height: "110"; }
+ ListElement{ longitude: "83"; latitude: "1"; height: "108"; }
+ ListElement{ longitude: "83"; latitude: "2"; height: "110"; }
+ ListElement{ longitude: "83"; latitude: "3"; height: "111"; }
+ ListElement{ longitude: "83"; latitude: "4"; height: "111"; }
+ ListElement{ longitude: "83"; latitude: "5"; height: "116"; }
+ ListElement{ longitude: "83"; latitude: "6"; height: "120"; }
+ ListElement{ longitude: "83"; latitude: "7"; height: "126"; }
+ ListElement{ longitude: "83"; latitude: "8"; height: "131"; }
+ ListElement{ longitude: "83"; latitude: "9"; height: "131"; }
+ ListElement{ longitude: "83"; latitude: "10"; height: "121"; }
+ ListElement{ longitude: "83"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "83"; latitude: "12"; height: "114"; }
+ ListElement{ longitude: "83"; latitude: "13"; height: "109"; }
+ ListElement{ longitude: "83"; latitude: "14"; height: "105"; }
+ ListElement{ longitude: "83"; latitude: "15"; height: "102"; }
+ ListElement{ longitude: "83"; latitude: "16"; height: "101"; }
+ ListElement{ longitude: "83"; latitude: "17"; height: "102"; }
+ ListElement{ longitude: "83"; latitude: "18"; height: "100"; }
+ ListElement{ longitude: "83"; latitude: "19"; height: "97"; }
+ ListElement{ longitude: "83"; latitude: "20"; height: "98"; }
+ ListElement{ longitude: "83"; latitude: "21"; height: "97"; }
+ ListElement{ longitude: "83"; latitude: "22"; height: "99"; }
+ ListElement{ longitude: "83"; latitude: "23"; height: "105"; }
+ ListElement{ longitude: "83"; latitude: "24"; height: "112"; }
+ ListElement{ longitude: "83"; latitude: "25"; height: "116"; }
+ ListElement{ longitude: "83"; latitude: "26"; height: "118"; }
+ ListElement{ longitude: "83"; latitude: "27"; height: "117"; }
+ ListElement{ longitude: "83"; latitude: "28"; height: "114"; }
+ ListElement{ longitude: "83"; latitude: "29"; height: "109"; }
+ ListElement{ longitude: "83"; latitude: "30"; height: "107"; }
+ ListElement{ longitude: "83"; latitude: "31"; height: "102"; }
+ ListElement{ longitude: "83"; latitude: "32"; height: "98"; }
+ ListElement{ longitude: "83"; latitude: "33"; height: "96"; }
+ ListElement{ longitude: "83"; latitude: "34"; height: "93"; }
+ ListElement{ longitude: "83"; latitude: "35"; height: "93"; }
+ ListElement{ longitude: "83"; latitude: "36"; height: "95"; }
+ ListElement{ longitude: "83"; latitude: "37"; height: "100"; }
+ ListElement{ longitude: "83"; latitude: "38"; height: "105"; }
+ ListElement{ longitude: "83"; latitude: "39"; height: "111"; }
+ ListElement{ longitude: "83"; latitude: "40"; height: "115"; }
+ ListElement{ longitude: "83"; latitude: "41"; height: "118"; }
+ ListElement{ longitude: "83"; latitude: "42"; height: "117"; }
+ ListElement{ longitude: "83"; latitude: "43"; height: "117"; }
+ ListElement{ longitude: "83"; latitude: "44"; height: "118"; }
+ ListElement{ longitude: "83"; latitude: "45"; height: "121"; }
+ ListElement{ longitude: "83"; latitude: "46"; height: "121"; }
+ ListElement{ longitude: "83"; latitude: "47"; height: "123"; }
+ ListElement{ longitude: "83"; latitude: "48"; height: "126"; }
+ ListElement{ longitude: "83"; latitude: "49"; height: "127"; }
+ ListElement{ longitude: "83"; latitude: "50"; height: "126"; }
+ ListElement{ longitude: "83"; latitude: "51"; height: "126"; }
+ ListElement{ longitude: "83"; latitude: "52"; height: "127"; }
+ ListElement{ longitude: "83"; latitude: "53"; height: "128"; }
+ ListElement{ longitude: "83"; latitude: "54"; height: "131"; }
+ ListElement{ longitude: "83"; latitude: "55"; height: "131"; }
+ ListElement{ longitude: "83"; latitude: "56"; height: "134"; }
+ ListElement{ longitude: "83"; latitude: "57"; height: "133"; }
+ ListElement{ longitude: "83"; latitude: "58"; height: "136"; }
+ ListElement{ longitude: "83"; latitude: "59"; height: "133"; }
+ ListElement{ longitude: "83"; latitude: "60"; height: "129"; }
+ ListElement{ longitude: "83"; latitude: "61"; height: "129"; }
+ ListElement{ longitude: "83"; latitude: "62"; height: "126"; }
+ ListElement{ longitude: "83"; latitude: "63"; height: "128"; }
+ ListElement{ longitude: "83"; latitude: "64"; height: "116"; }
+ ListElement{ longitude: "83"; latitude: "65"; height: "118"; }
+ ListElement{ longitude: "83"; latitude: "66"; height: "120"; }
+ ListElement{ longitude: "83"; latitude: "67"; height: "124"; }
+ ListElement{ longitude: "83"; latitude: "68"; height: "120"; }
+ ListElement{ longitude: "83"; latitude: "69"; height: "120"; }
+ ListElement{ longitude: "83"; latitude: "70"; height: "117"; }
+ ListElement{ longitude: "83"; latitude: "71"; height: "118"; }
+ ListElement{ longitude: "83"; latitude: "72"; height: "120"; }
+ ListElement{ longitude: "83"; latitude: "73"; height: "129"; }
+ ListElement{ longitude: "83"; latitude: "74"; height: "130"; }
+ ListElement{ longitude: "83"; latitude: "75"; height: "94"; }
+ ListElement{ longitude: "83"; latitude: "76"; height: "111"; }
+ ListElement{ longitude: "83"; latitude: "77"; height: "131"; }
+ ListElement{ longitude: "83"; latitude: "78"; height: "120"; }
+ ListElement{ longitude: "83"; latitude: "79"; height: "128"; }
+ ListElement{ longitude: "83"; latitude: "80"; height: "135"; }
+ ListElement{ longitude: "83"; latitude: "81"; height: "140"; }
+ ListElement{ longitude: "83"; latitude: "82"; height: "142"; }
+ ListElement{ longitude: "83"; latitude: "83"; height: "143"; }
+ ListElement{ longitude: "83"; latitude: "84"; height: "140"; }
+ ListElement{ longitude: "83"; latitude: "85"; height: "137"; }
+ ListElement{ longitude: "83"; latitude: "86"; height: "133"; }
+ ListElement{ longitude: "83"; latitude: "87"; height: "127"; }
+ ListElement{ longitude: "83"; latitude: "88"; height: "125"; }
+ ListElement{ longitude: "83"; latitude: "89"; height: "121"; }
+ ListElement{ longitude: "83"; latitude: "90"; height: "121"; }
+ ListElement{ longitude: "83"; latitude: "91"; height: "121"; }
+ ListElement{ longitude: "83"; latitude: "92"; height: "123"; }
+ ListElement{ longitude: "83"; latitude: "93"; height: "124"; }
+ ListElement{ longitude: "83"; latitude: "94"; height: "122"; }
+ ListElement{ longitude: "83"; latitude: "95"; height: "117"; }
+ ListElement{ longitude: "83"; latitude: "96"; height: "104"; }
+ ListElement{ longitude: "83"; latitude: "97"; height: "97"; }
+ ListElement{ longitude: "83"; latitude: "98"; height: "103"; }
+ ListElement{ longitude: "83"; latitude: "99"; height: "104"; }
+ ListElement{ longitude: "84"; latitude: "0"; height: "111"; }
+ ListElement{ longitude: "84"; latitude: "1"; height: "108"; }
+ ListElement{ longitude: "84"; latitude: "2"; height: "110"; }
+ ListElement{ longitude: "84"; latitude: "3"; height: "111"; }
+ ListElement{ longitude: "84"; latitude: "4"; height: "111"; }
+ ListElement{ longitude: "84"; latitude: "5"; height: "116"; }
+ ListElement{ longitude: "84"; latitude: "6"; height: "118"; }
+ ListElement{ longitude: "84"; latitude: "7"; height: "124"; }
+ ListElement{ longitude: "84"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "84"; latitude: "9"; height: "99"; }
+ ListElement{ longitude: "84"; latitude: "10"; height: "115"; }
+ ListElement{ longitude: "84"; latitude: "11"; height: "126"; }
+ ListElement{ longitude: "84"; latitude: "12"; height: "116"; }
+ ListElement{ longitude: "84"; latitude: "13"; height: "109"; }
+ ListElement{ longitude: "84"; latitude: "14"; height: "104"; }
+ ListElement{ longitude: "84"; latitude: "15"; height: "100"; }
+ ListElement{ longitude: "84"; latitude: "16"; height: "97"; }
+ ListElement{ longitude: "84"; latitude: "17"; height: "98"; }
+ ListElement{ longitude: "84"; latitude: "18"; height: "99"; }
+ ListElement{ longitude: "84"; latitude: "19"; height: "97"; }
+ ListElement{ longitude: "84"; latitude: "20"; height: "98"; }
+ ListElement{ longitude: "84"; latitude: "21"; height: "100"; }
+ ListElement{ longitude: "84"; latitude: "22"; height: "103"; }
+ ListElement{ longitude: "84"; latitude: "23"; height: "109"; }
+ ListElement{ longitude: "84"; latitude: "24"; height: "114"; }
+ ListElement{ longitude: "84"; latitude: "25"; height: "119"; }
+ ListElement{ longitude: "84"; latitude: "26"; height: "120"; }
+ ListElement{ longitude: "84"; latitude: "27"; height: "119"; }
+ ListElement{ longitude: "84"; latitude: "28"; height: "116"; }
+ ListElement{ longitude: "84"; latitude: "29"; height: "111"; }
+ ListElement{ longitude: "84"; latitude: "30"; height: "109"; }
+ ListElement{ longitude: "84"; latitude: "31"; height: "104"; }
+ ListElement{ longitude: "84"; latitude: "32"; height: "100"; }
+ ListElement{ longitude: "84"; latitude: "33"; height: "100"; }
+ ListElement{ longitude: "84"; latitude: "34"; height: "97"; }
+ ListElement{ longitude: "84"; latitude: "35"; height: "97"; }
+ ListElement{ longitude: "84"; latitude: "36"; height: "99"; }
+ ListElement{ longitude: "84"; latitude: "37"; height: "103"; }
+ ListElement{ longitude: "84"; latitude: "38"; height: "109"; }
+ ListElement{ longitude: "84"; latitude: "39"; height: "114"; }
+ ListElement{ longitude: "84"; latitude: "40"; height: "118"; }
+ ListElement{ longitude: "84"; latitude: "41"; height: "120"; }
+ ListElement{ longitude: "84"; latitude: "42"; height: "121"; }
+ ListElement{ longitude: "84"; latitude: "43"; height: "121"; }
+ ListElement{ longitude: "84"; latitude: "44"; height: "120"; }
+ ListElement{ longitude: "84"; latitude: "45"; height: "122"; }
+ ListElement{ longitude: "84"; latitude: "46"; height: "124"; }
+ ListElement{ longitude: "84"; latitude: "47"; height: "127"; }
+ ListElement{ longitude: "84"; latitude: "48"; height: "129"; }
+ ListElement{ longitude: "84"; latitude: "49"; height: "129"; }
+ ListElement{ longitude: "84"; latitude: "50"; height: "129"; }
+ ListElement{ longitude: "84"; latitude: "51"; height: "129"; }
+ ListElement{ longitude: "84"; latitude: "52"; height: "130"; }
+ ListElement{ longitude: "84"; latitude: "53"; height: "131"; }
+ ListElement{ longitude: "84"; latitude: "54"; height: "131"; }
+ ListElement{ longitude: "84"; latitude: "55"; height: "132"; }
+ ListElement{ longitude: "84"; latitude: "56"; height: "135"; }
+ ListElement{ longitude: "84"; latitude: "57"; height: "136"; }
+ ListElement{ longitude: "84"; latitude: "58"; height: "135"; }
+ ListElement{ longitude: "84"; latitude: "59"; height: "132"; }
+ ListElement{ longitude: "84"; latitude: "60"; height: "132"; }
+ ListElement{ longitude: "84"; latitude: "61"; height: "129"; }
+ ListElement{ longitude: "84"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "84"; latitude: "63"; height: "128"; }
+ ListElement{ longitude: "84"; latitude: "64"; height: "123"; }
+ ListElement{ longitude: "84"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "84"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "84"; latitude: "67"; height: "126"; }
+ ListElement{ longitude: "84"; latitude: "68"; height: "123"; }
+ ListElement{ longitude: "84"; latitude: "69"; height: "123"; }
+ ListElement{ longitude: "84"; latitude: "70"; height: "120"; }
+ ListElement{ longitude: "84"; latitude: "71"; height: "120"; }
+ ListElement{ longitude: "84"; latitude: "72"; height: "122"; }
+ ListElement{ longitude: "84"; latitude: "73"; height: "126"; }
+ ListElement{ longitude: "84"; latitude: "74"; height: "128"; }
+ ListElement{ longitude: "84"; latitude: "75"; height: "114"; }
+ ListElement{ longitude: "84"; latitude: "76"; height: "109"; }
+ ListElement{ longitude: "84"; latitude: "77"; height: "111"; }
+ ListElement{ longitude: "84"; latitude: "78"; height: "119"; }
+ ListElement{ longitude: "84"; latitude: "79"; height: "129"; }
+ ListElement{ longitude: "84"; latitude: "80"; height: "136"; }
+ ListElement{ longitude: "84"; latitude: "81"; height: "142"; }
+ ListElement{ longitude: "84"; latitude: "82"; height: "148"; }
+ ListElement{ longitude: "84"; latitude: "83"; height: "149"; }
+ ListElement{ longitude: "84"; latitude: "84"; height: "145"; }
+ ListElement{ longitude: "84"; latitude: "85"; height: "142"; }
+ ListElement{ longitude: "84"; latitude: "86"; height: "138"; }
+ ListElement{ longitude: "84"; latitude: "87"; height: "132"; }
+ ListElement{ longitude: "84"; latitude: "88"; height: "128"; }
+ ListElement{ longitude: "84"; latitude: "89"; height: "123"; }
+ ListElement{ longitude: "84"; latitude: "90"; height: "122"; }
+ ListElement{ longitude: "84"; latitude: "91"; height: "121"; }
+ ListElement{ longitude: "84"; latitude: "92"; height: "120"; }
+ ListElement{ longitude: "84"; latitude: "93"; height: "121"; }
+ ListElement{ longitude: "84"; latitude: "94"; height: "119"; }
+ ListElement{ longitude: "84"; latitude: "95"; height: "115"; }
+ ListElement{ longitude: "84"; latitude: "96"; height: "110"; }
+ ListElement{ longitude: "84"; latitude: "97"; height: "107"; }
+ ListElement{ longitude: "84"; latitude: "98"; height: "113"; }
+ ListElement{ longitude: "84"; latitude: "99"; height: "111"; }
+ ListElement{ longitude: "85"; latitude: "0"; height: "112"; }
+ ListElement{ longitude: "85"; latitude: "1"; height: "110"; }
+ ListElement{ longitude: "85"; latitude: "2"; height: "108"; }
+ ListElement{ longitude: "85"; latitude: "3"; height: "110"; }
+ ListElement{ longitude: "85"; latitude: "4"; height: "112"; }
+ ListElement{ longitude: "85"; latitude: "5"; height: "115"; }
+ ListElement{ longitude: "85"; latitude: "6"; height: "119"; }
+ ListElement{ longitude: "85"; latitude: "7"; height: "122"; }
+ ListElement{ longitude: "85"; latitude: "8"; height: "128"; }
+ ListElement{ longitude: "85"; latitude: "9"; height: "117"; }
+ ListElement{ longitude: "85"; latitude: "10"; height: "126"; }
+ ListElement{ longitude: "85"; latitude: "11"; height: "124"; }
+ ListElement{ longitude: "85"; latitude: "12"; height: "116"; }
+ ListElement{ longitude: "85"; latitude: "13"; height: "108"; }
+ ListElement{ longitude: "85"; latitude: "14"; height: "103"; }
+ ListElement{ longitude: "85"; latitude: "15"; height: "98"; }
+ ListElement{ longitude: "85"; latitude: "16"; height: "98"; }
+ ListElement{ longitude: "85"; latitude: "17"; height: "98"; }
+ ListElement{ longitude: "85"; latitude: "18"; height: "99"; }
+ ListElement{ longitude: "85"; latitude: "19"; height: "101"; }
+ ListElement{ longitude: "85"; latitude: "20"; height: "101"; }
+ ListElement{ longitude: "85"; latitude: "21"; height: "107"; }
+ ListElement{ longitude: "85"; latitude: "22"; height: "111"; }
+ ListElement{ longitude: "85"; latitude: "23"; height: "117"; }
+ ListElement{ longitude: "85"; latitude: "24"; height: "120"; }
+ ListElement{ longitude: "85"; latitude: "25"; height: "122"; }
+ ListElement{ longitude: "85"; latitude: "26"; height: "122"; }
+ ListElement{ longitude: "85"; latitude: "27"; height: "121"; }
+ ListElement{ longitude: "85"; latitude: "28"; height: "118"; }
+ ListElement{ longitude: "85"; latitude: "29"; height: "113"; }
+ ListElement{ longitude: "85"; latitude: "30"; height: "110"; }
+ ListElement{ longitude: "85"; latitude: "31"; height: "106"; }
+ ListElement{ longitude: "85"; latitude: "32"; height: "103"; }
+ ListElement{ longitude: "85"; latitude: "33"; height: "101"; }
+ ListElement{ longitude: "85"; latitude: "34"; height: "98"; }
+ ListElement{ longitude: "85"; latitude: "35"; height: "100"; }
+ ListElement{ longitude: "85"; latitude: "36"; height: "102"; }
+ ListElement{ longitude: "85"; latitude: "37"; height: "106"; }
+ ListElement{ longitude: "85"; latitude: "38"; height: "110"; }
+ ListElement{ longitude: "85"; latitude: "39"; height: "115"; }
+ ListElement{ longitude: "85"; latitude: "40"; height: "121"; }
+ ListElement{ longitude: "85"; latitude: "41"; height: "121"; }
+ ListElement{ longitude: "85"; latitude: "42"; height: "122"; }
+ ListElement{ longitude: "85"; latitude: "43"; height: "122"; }
+ ListElement{ longitude: "85"; latitude: "44"; height: "123"; }
+ ListElement{ longitude: "85"; latitude: "45"; height: "127"; }
+ ListElement{ longitude: "85"; latitude: "46"; height: "127"; }
+ ListElement{ longitude: "85"; latitude: "47"; height: "130"; }
+ ListElement{ longitude: "85"; latitude: "48"; height: "129"; }
+ ListElement{ longitude: "85"; latitude: "49"; height: "131"; }
+ ListElement{ longitude: "85"; latitude: "50"; height: "129"; }
+ ListElement{ longitude: "85"; latitude: "51"; height: "129"; }
+ ListElement{ longitude: "85"; latitude: "52"; height: "130"; }
+ ListElement{ longitude: "85"; latitude: "53"; height: "131"; }
+ ListElement{ longitude: "85"; latitude: "54"; height: "134"; }
+ ListElement{ longitude: "85"; latitude: "55"; height: "134"; }
+ ListElement{ longitude: "85"; latitude: "56"; height: "137"; }
+ ListElement{ longitude: "85"; latitude: "57"; height: "137"; }
+ ListElement{ longitude: "85"; latitude: "58"; height: "134"; }
+ ListElement{ longitude: "85"; latitude: "59"; height: "133"; }
+ ListElement{ longitude: "85"; latitude: "60"; height: "133"; }
+ ListElement{ longitude: "85"; latitude: "61"; height: "130"; }
+ ListElement{ longitude: "85"; latitude: "62"; height: "130"; }
+ ListElement{ longitude: "85"; latitude: "63"; height: "129"; }
+ ListElement{ longitude: "85"; latitude: "64"; height: "130"; }
+ ListElement{ longitude: "85"; latitude: "65"; height: "131"; }
+ ListElement{ longitude: "85"; latitude: "66"; height: "129"; }
+ ListElement{ longitude: "85"; latitude: "67"; height: "127"; }
+ ListElement{ longitude: "85"; latitude: "68"; height: "128"; }
+ ListElement{ longitude: "85"; latitude: "69"; height: "125"; }
+ ListElement{ longitude: "85"; latitude: "70"; height: "124"; }
+ ListElement{ longitude: "85"; latitude: "71"; height: "123"; }
+ ListElement{ longitude: "85"; latitude: "72"; height: "124"; }
+ ListElement{ longitude: "85"; latitude: "73"; height: "127"; }
+ ListElement{ longitude: "85"; latitude: "74"; height: "132"; }
+ ListElement{ longitude: "85"; latitude: "75"; height: "126"; }
+ ListElement{ longitude: "85"; latitude: "76"; height: "115"; }
+ ListElement{ longitude: "85"; latitude: "77"; height: "113"; }
+ ListElement{ longitude: "85"; latitude: "78"; height: "122"; }
+ ListElement{ longitude: "85"; latitude: "79"; height: "130"; }
+ ListElement{ longitude: "85"; latitude: "80"; height: "137"; }
+ ListElement{ longitude: "85"; latitude: "81"; height: "146"; }
+ ListElement{ longitude: "85"; latitude: "82"; height: "152"; }
+ ListElement{ longitude: "85"; latitude: "83"; height: "154"; }
+ ListElement{ longitude: "85"; latitude: "84"; height: "149"; }
+ ListElement{ longitude: "85"; latitude: "85"; height: "148"; }
+ ListElement{ longitude: "85"; latitude: "86"; height: "141"; }
+ ListElement{ longitude: "85"; latitude: "87"; height: "137"; }
+ ListElement{ longitude: "85"; latitude: "88"; height: "133"; }
+ ListElement{ longitude: "85"; latitude: "89"; height: "131"; }
+ ListElement{ longitude: "85"; latitude: "90"; height: "124"; }
+ ListElement{ longitude: "85"; latitude: "91"; height: "122"; }
+ ListElement{ longitude: "85"; latitude: "92"; height: "120"; }
+ ListElement{ longitude: "85"; latitude: "93"; height: "120"; }
+ ListElement{ longitude: "85"; latitude: "94"; height: "116"; }
+ ListElement{ longitude: "85"; latitude: "95"; height: "112"; }
+ ListElement{ longitude: "85"; latitude: "96"; height: "115"; }
+ ListElement{ longitude: "85"; latitude: "97"; height: "116"; }
+ ListElement{ longitude: "85"; latitude: "98"; height: "123"; }
+ ListElement{ longitude: "85"; latitude: "99"; height: "119"; }
+ ListElement{ longitude: "86"; latitude: "0"; height: "112"; }
+ ListElement{ longitude: "86"; latitude: "1"; height: "110"; }
+ ListElement{ longitude: "86"; latitude: "2"; height: "106"; }
+ ListElement{ longitude: "86"; latitude: "3"; height: "108"; }
+ ListElement{ longitude: "86"; latitude: "4"; height: "110"; }
+ ListElement{ longitude: "86"; latitude: "5"; height: "113"; }
+ ListElement{ longitude: "86"; latitude: "6"; height: "116"; }
+ ListElement{ longitude: "86"; latitude: "7"; height: "119"; }
+ ListElement{ longitude: "86"; latitude: "8"; height: "122"; }
+ ListElement{ longitude: "86"; latitude: "9"; height: "124"; }
+ ListElement{ longitude: "86"; latitude: "10"; height: "123"; }
+ ListElement{ longitude: "86"; latitude: "11"; height: "119"; }
+ ListElement{ longitude: "86"; latitude: "12"; height: "113"; }
+ ListElement{ longitude: "86"; latitude: "13"; height: "107"; }
+ ListElement{ longitude: "86"; latitude: "14"; height: "103"; }
+ ListElement{ longitude: "86"; latitude: "15"; height: "100"; }
+ ListElement{ longitude: "86"; latitude: "16"; height: "98"; }
+ ListElement{ longitude: "86"; latitude: "17"; height: "99"; }
+ ListElement{ longitude: "86"; latitude: "18"; height: "101"; }
+ ListElement{ longitude: "86"; latitude: "19"; height: "103"; }
+ ListElement{ longitude: "86"; latitude: "20"; height: "108"; }
+ ListElement{ longitude: "86"; latitude: "21"; height: "113"; }
+ ListElement{ longitude: "86"; latitude: "22"; height: "120"; }
+ ListElement{ longitude: "86"; latitude: "23"; height: "124"; }
+ ListElement{ longitude: "86"; latitude: "24"; height: "126"; }
+ ListElement{ longitude: "86"; latitude: "25"; height: "126"; }
+ ListElement{ longitude: "86"; latitude: "26"; height: "125"; }
+ ListElement{ longitude: "86"; latitude: "27"; height: "122"; }
+ ListElement{ longitude: "86"; latitude: "28"; height: "121"; }
+ ListElement{ longitude: "86"; latitude: "29"; height: "116"; }
+ ListElement{ longitude: "86"; latitude: "30"; height: "113"; }
+ ListElement{ longitude: "86"; latitude: "31"; height: "110"; }
+ ListElement{ longitude: "86"; latitude: "32"; height: "107"; }
+ ListElement{ longitude: "86"; latitude: "33"; height: "104"; }
+ ListElement{ longitude: "86"; latitude: "34"; height: "101"; }
+ ListElement{ longitude: "86"; latitude: "35"; height: "103"; }
+ ListElement{ longitude: "86"; latitude: "36"; height: "105"; }
+ ListElement{ longitude: "86"; latitude: "37"; height: "111"; }
+ ListElement{ longitude: "86"; latitude: "38"; height: "115"; }
+ ListElement{ longitude: "86"; latitude: "39"; height: "120"; }
+ ListElement{ longitude: "86"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "86"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "86"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "86"; latitude: "43"; height: "129"; }
+ ListElement{ longitude: "86"; latitude: "44"; height: "127"; }
+ ListElement{ longitude: "86"; latitude: "45"; height: "130"; }
+ ListElement{ longitude: "86"; latitude: "46"; height: "130"; }
+ ListElement{ longitude: "86"; latitude: "47"; height: "133"; }
+ ListElement{ longitude: "86"; latitude: "48"; height: "133"; }
+ ListElement{ longitude: "86"; latitude: "49"; height: "131"; }
+ ListElement{ longitude: "86"; latitude: "50"; height: "130"; }
+ ListElement{ longitude: "86"; latitude: "51"; height: "130"; }
+ ListElement{ longitude: "86"; latitude: "52"; height: "133"; }
+ ListElement{ longitude: "86"; latitude: "53"; height: "135"; }
+ ListElement{ longitude: "86"; latitude: "54"; height: "138"; }
+ ListElement{ longitude: "86"; latitude: "55"; height: "135"; }
+ ListElement{ longitude: "86"; latitude: "56"; height: "138"; }
+ ListElement{ longitude: "86"; latitude: "57"; height: "136"; }
+ ListElement{ longitude: "86"; latitude: "58"; height: "137"; }
+ ListElement{ longitude: "86"; latitude: "59"; height: "134"; }
+ ListElement{ longitude: "86"; latitude: "60"; height: "135"; }
+ ListElement{ longitude: "86"; latitude: "61"; height: "134"; }
+ ListElement{ longitude: "86"; latitude: "62"; height: "135"; }
+ ListElement{ longitude: "86"; latitude: "63"; height: "134"; }
+ ListElement{ longitude: "86"; latitude: "64"; height: "131"; }
+ ListElement{ longitude: "86"; latitude: "65"; height: "131"; }
+ ListElement{ longitude: "86"; latitude: "66"; height: "129"; }
+ ListElement{ longitude: "86"; latitude: "67"; height: "129"; }
+ ListElement{ longitude: "86"; latitude: "68"; height: "129"; }
+ ListElement{ longitude: "86"; latitude: "69"; height: "130"; }
+ ListElement{ longitude: "86"; latitude: "70"; height: "129"; }
+ ListElement{ longitude: "86"; latitude: "71"; height: "127"; }
+ ListElement{ longitude: "86"; latitude: "72"; height: "128"; }
+ ListElement{ longitude: "86"; latitude: "73"; height: "126"; }
+ ListElement{ longitude: "86"; latitude: "74"; height: "127"; }
+ ListElement{ longitude: "86"; latitude: "75"; height: "128"; }
+ ListElement{ longitude: "86"; latitude: "76"; height: "127"; }
+ ListElement{ longitude: "86"; latitude: "77"; height: "126"; }
+ ListElement{ longitude: "86"; latitude: "78"; height: "126"; }
+ ListElement{ longitude: "86"; latitude: "79"; height: "128"; }
+ ListElement{ longitude: "86"; latitude: "80"; height: "137"; }
+ ListElement{ longitude: "86"; latitude: "81"; height: "143"; }
+ ListElement{ longitude: "86"; latitude: "82"; height: "150"; }
+ ListElement{ longitude: "86"; latitude: "83"; height: "151"; }
+ ListElement{ longitude: "86"; latitude: "84"; height: "153"; }
+ ListElement{ longitude: "86"; latitude: "85"; height: "151"; }
+ ListElement{ longitude: "86"; latitude: "86"; height: "147"; }
+ ListElement{ longitude: "86"; latitude: "87"; height: "144"; }
+ ListElement{ longitude: "86"; latitude: "88"; height: "141"; }
+ ListElement{ longitude: "86"; latitude: "89"; height: "137"; }
+ ListElement{ longitude: "86"; latitude: "90"; height: "132"; }
+ ListElement{ longitude: "86"; latitude: "91"; height: "125"; }
+ ListElement{ longitude: "86"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "86"; latitude: "93"; height: "117"; }
+ ListElement{ longitude: "86"; latitude: "94"; height: "115"; }
+ ListElement{ longitude: "86"; latitude: "95"; height: "112"; }
+ ListElement{ longitude: "86"; latitude: "96"; height: "117"; }
+ ListElement{ longitude: "86"; latitude: "97"; height: "117"; }
+ ListElement{ longitude: "86"; latitude: "98"; height: "126"; }
+ ListElement{ longitude: "86"; latitude: "99"; height: "120"; }
+ ListElement{ longitude: "87"; latitude: "0"; height: "110"; }
+ ListElement{ longitude: "87"; latitude: "1"; height: "108"; }
+ ListElement{ longitude: "87"; latitude: "2"; height: "102"; }
+ ListElement{ longitude: "87"; latitude: "3"; height: "102"; }
+ ListElement{ longitude: "87"; latitude: "4"; height: "107"; }
+ ListElement{ longitude: "87"; latitude: "5"; height: "106"; }
+ ListElement{ longitude: "87"; latitude: "6"; height: "110"; }
+ ListElement{ longitude: "87"; latitude: "7"; height: "116"; }
+ ListElement{ longitude: "87"; latitude: "8"; height: "114"; }
+ ListElement{ longitude: "87"; latitude: "9"; height: "116"; }
+ ListElement{ longitude: "87"; latitude: "10"; height: "115"; }
+ ListElement{ longitude: "87"; latitude: "11"; height: "111"; }
+ ListElement{ longitude: "87"; latitude: "12"; height: "109"; }
+ ListElement{ longitude: "87"; latitude: "13"; height: "106"; }
+ ListElement{ longitude: "87"; latitude: "14"; height: "103"; }
+ ListElement{ longitude: "87"; latitude: "15"; height: "100"; }
+ ListElement{ longitude: "87"; latitude: "16"; height: "98"; }
+ ListElement{ longitude: "87"; latitude: "17"; height: "101"; }
+ ListElement{ longitude: "87"; latitude: "18"; height: "103"; }
+ ListElement{ longitude: "87"; latitude: "19"; height: "107"; }
+ ListElement{ longitude: "87"; latitude: "20"; height: "114"; }
+ ListElement{ longitude: "87"; latitude: "21"; height: "121"; }
+ ListElement{ longitude: "87"; latitude: "22"; height: "129"; }
+ ListElement{ longitude: "87"; latitude: "23"; height: "134"; }
+ ListElement{ longitude: "87"; latitude: "24"; height: "131"; }
+ ListElement{ longitude: "87"; latitude: "25"; height: "130"; }
+ ListElement{ longitude: "87"; latitude: "26"; height: "128"; }
+ ListElement{ longitude: "87"; latitude: "27"; height: "126"; }
+ ListElement{ longitude: "87"; latitude: "28"; height: "125"; }
+ ListElement{ longitude: "87"; latitude: "29"; height: "121"; }
+ ListElement{ longitude: "87"; latitude: "30"; height: "120"; }
+ ListElement{ longitude: "87"; latitude: "31"; height: "117"; }
+ ListElement{ longitude: "87"; latitude: "32"; height: "112"; }
+ ListElement{ longitude: "87"; latitude: "33"; height: "109"; }
+ ListElement{ longitude: "87"; latitude: "34"; height: "106"; }
+ ListElement{ longitude: "87"; latitude: "35"; height: "108"; }
+ ListElement{ longitude: "87"; latitude: "36"; height: "109"; }
+ ListElement{ longitude: "87"; latitude: "37"; height: "114"; }
+ ListElement{ longitude: "87"; latitude: "38"; height: "118"; }
+ ListElement{ longitude: "87"; latitude: "39"; height: "122"; }
+ ListElement{ longitude: "87"; latitude: "40"; height: "127"; }
+ ListElement{ longitude: "87"; latitude: "41"; height: "127"; }
+ ListElement{ longitude: "87"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "87"; latitude: "43"; height: "130"; }
+ ListElement{ longitude: "87"; latitude: "44"; height: "131"; }
+ ListElement{ longitude: "87"; latitude: "45"; height: "133"; }
+ ListElement{ longitude: "87"; latitude: "46"; height: "135"; }
+ ListElement{ longitude: "87"; latitude: "47"; height: "137"; }
+ ListElement{ longitude: "87"; latitude: "48"; height: "135"; }
+ ListElement{ longitude: "87"; latitude: "49"; height: "132"; }
+ ListElement{ longitude: "87"; latitude: "50"; height: "134"; }
+ ListElement{ longitude: "87"; latitude: "51"; height: "134"; }
+ ListElement{ longitude: "87"; latitude: "52"; height: "133"; }
+ ListElement{ longitude: "87"; latitude: "53"; height: "135"; }
+ ListElement{ longitude: "87"; latitude: "54"; height: "138"; }
+ ListElement{ longitude: "87"; latitude: "55"; height: "137"; }
+ ListElement{ longitude: "87"; latitude: "56"; height: "139"; }
+ ListElement{ longitude: "87"; latitude: "57"; height: "137"; }
+ ListElement{ longitude: "87"; latitude: "58"; height: "138"; }
+ ListElement{ longitude: "87"; latitude: "59"; height: "135"; }
+ ListElement{ longitude: "87"; latitude: "60"; height: "134"; }
+ ListElement{ longitude: "87"; latitude: "61"; height: "135"; }
+ ListElement{ longitude: "87"; latitude: "62"; height: "135"; }
+ ListElement{ longitude: "87"; latitude: "63"; height: "133"; }
+ ListElement{ longitude: "87"; latitude: "64"; height: "127"; }
+ ListElement{ longitude: "87"; latitude: "65"; height: "131"; }
+ ListElement{ longitude: "87"; latitude: "66"; height: "134"; }
+ ListElement{ longitude: "87"; latitude: "67"; height: "133"; }
+ ListElement{ longitude: "87"; latitude: "68"; height: "133"; }
+ ListElement{ longitude: "87"; latitude: "69"; height: "133"; }
+ ListElement{ longitude: "87"; latitude: "70"; height: "133"; }
+ ListElement{ longitude: "87"; latitude: "71"; height: "132"; }
+ ListElement{ longitude: "87"; latitude: "72"; height: "130"; }
+ ListElement{ longitude: "87"; latitude: "73"; height: "127"; }
+ ListElement{ longitude: "87"; latitude: "74"; height: "126"; }
+ ListElement{ longitude: "87"; latitude: "75"; height: "125"; }
+ ListElement{ longitude: "87"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "87"; latitude: "77"; height: "126"; }
+ ListElement{ longitude: "87"; latitude: "78"; height: "125"; }
+ ListElement{ longitude: "87"; latitude: "79"; height: "128"; }
+ ListElement{ longitude: "87"; latitude: "80"; height: "133"; }
+ ListElement{ longitude: "87"; latitude: "81"; height: "140"; }
+ ListElement{ longitude: "87"; latitude: "82"; height: "147"; }
+ ListElement{ longitude: "87"; latitude: "83"; height: "151"; }
+ ListElement{ longitude: "87"; latitude: "84"; height: "153"; }
+ ListElement{ longitude: "87"; latitude: "85"; height: "152"; }
+ ListElement{ longitude: "87"; latitude: "86"; height: "151"; }
+ ListElement{ longitude: "87"; latitude: "87"; height: "149"; }
+ ListElement{ longitude: "87"; latitude: "88"; height: "147"; }
+ ListElement{ longitude: "87"; latitude: "89"; height: "143"; }
+ ListElement{ longitude: "87"; latitude: "90"; height: "136"; }
+ ListElement{ longitude: "87"; latitude: "91"; height: "128"; }
+ ListElement{ longitude: "87"; latitude: "92"; height: "124"; }
+ ListElement{ longitude: "87"; latitude: "93"; height: "118"; }
+ ListElement{ longitude: "87"; latitude: "94"; height: "113"; }
+ ListElement{ longitude: "87"; latitude: "95"; height: "113"; }
+ ListElement{ longitude: "87"; latitude: "96"; height: "116"; }
+ ListElement{ longitude: "87"; latitude: "97"; height: "118"; }
+ ListElement{ longitude: "87"; latitude: "98"; height: "122"; }
+ ListElement{ longitude: "87"; latitude: "99"; height: "117"; }
+ ListElement{ longitude: "88"; latitude: "0"; height: "108"; }
+ ListElement{ longitude: "88"; latitude: "1"; height: "105"; }
+ ListElement{ longitude: "88"; latitude: "2"; height: "101"; }
+ ListElement{ longitude: "88"; latitude: "3"; height: "101"; }
+ ListElement{ longitude: "88"; latitude: "4"; height: "103"; }
+ ListElement{ longitude: "88"; latitude: "5"; height: "107"; }
+ ListElement{ longitude: "88"; latitude: "6"; height: "107"; }
+ ListElement{ longitude: "88"; latitude: "7"; height: "112"; }
+ ListElement{ longitude: "88"; latitude: "8"; height: "105"; }
+ ListElement{ longitude: "88"; latitude: "9"; height: "113"; }
+ ListElement{ longitude: "88"; latitude: "10"; height: "109"; }
+ ListElement{ longitude: "88"; latitude: "11"; height: "106"; }
+ ListElement{ longitude: "88"; latitude: "12"; height: "110"; }
+ ListElement{ longitude: "88"; latitude: "13"; height: "105"; }
+ ListElement{ longitude: "88"; latitude: "14"; height: "103"; }
+ ListElement{ longitude: "88"; latitude: "15"; height: "102"; }
+ ListElement{ longitude: "88"; latitude: "16"; height: "101"; }
+ ListElement{ longitude: "88"; latitude: "17"; height: "102"; }
+ ListElement{ longitude: "88"; latitude: "18"; height: "106"; }
+ ListElement{ longitude: "88"; latitude: "19"; height: "112"; }
+ ListElement{ longitude: "88"; latitude: "20"; height: "117"; }
+ ListElement{ longitude: "88"; latitude: "21"; height: "126"; }
+ ListElement{ longitude: "88"; latitude: "22"; height: "134"; }
+ ListElement{ longitude: "88"; latitude: "23"; height: "139"; }
+ ListElement{ longitude: "88"; latitude: "24"; height: "137"; }
+ ListElement{ longitude: "88"; latitude: "25"; height: "133"; }
+ ListElement{ longitude: "88"; latitude: "26"; height: "129"; }
+ ListElement{ longitude: "88"; latitude: "27"; height: "128"; }
+ ListElement{ longitude: "88"; latitude: "28"; height: "119"; }
+ ListElement{ longitude: "88"; latitude: "29"; height: "123"; }
+ ListElement{ longitude: "88"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "88"; latitude: "31"; height: "116"; }
+ ListElement{ longitude: "88"; latitude: "32"; height: "114"; }
+ ListElement{ longitude: "88"; latitude: "33"; height: "110"; }
+ ListElement{ longitude: "88"; latitude: "34"; height: "108"; }
+ ListElement{ longitude: "88"; latitude: "35"; height: "109"; }
+ ListElement{ longitude: "88"; latitude: "36"; height: "111"; }
+ ListElement{ longitude: "88"; latitude: "37"; height: "116"; }
+ ListElement{ longitude: "88"; latitude: "38"; height: "120"; }
+ ListElement{ longitude: "88"; latitude: "39"; height: "123"; }
+ ListElement{ longitude: "88"; latitude: "40"; height: "126"; }
+ ListElement{ longitude: "88"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "88"; latitude: "42"; height: "130"; }
+ ListElement{ longitude: "88"; latitude: "43"; height: "131"; }
+ ListElement{ longitude: "88"; latitude: "44"; height: "133"; }
+ ListElement{ longitude: "88"; latitude: "45"; height: "135"; }
+ ListElement{ longitude: "88"; latitude: "46"; height: "137"; }
+ ListElement{ longitude: "88"; latitude: "47"; height: "137"; }
+ ListElement{ longitude: "88"; latitude: "48"; height: "134"; }
+ ListElement{ longitude: "88"; latitude: "49"; height: "133"; }
+ ListElement{ longitude: "88"; latitude: "50"; height: "133"; }
+ ListElement{ longitude: "88"; latitude: "51"; height: "133"; }
+ ListElement{ longitude: "88"; latitude: "52"; height: "136"; }
+ ListElement{ longitude: "88"; latitude: "53"; height: "137"; }
+ ListElement{ longitude: "88"; latitude: "54"; height: "140"; }
+ ListElement{ longitude: "88"; latitude: "55"; height: "139"; }
+ ListElement{ longitude: "88"; latitude: "56"; height: "139"; }
+ ListElement{ longitude: "88"; latitude: "57"; height: "139"; }
+ ListElement{ longitude: "88"; latitude: "58"; height: "138"; }
+ ListElement{ longitude: "88"; latitude: "59"; height: "135"; }
+ ListElement{ longitude: "88"; latitude: "60"; height: "134"; }
+ ListElement{ longitude: "88"; latitude: "61"; height: "137"; }
+ ListElement{ longitude: "88"; latitude: "62"; height: "138"; }
+ ListElement{ longitude: "88"; latitude: "63"; height: "130"; }
+ ListElement{ longitude: "88"; latitude: "64"; height: "122"; }
+ ListElement{ longitude: "88"; latitude: "65"; height: "126"; }
+ ListElement{ longitude: "88"; latitude: "66"; height: "136"; }
+ ListElement{ longitude: "88"; latitude: "67"; height: "132"; }
+ ListElement{ longitude: "88"; latitude: "68"; height: "136"; }
+ ListElement{ longitude: "88"; latitude: "69"; height: "135"; }
+ ListElement{ longitude: "88"; latitude: "70"; height: "136"; }
+ ListElement{ longitude: "88"; latitude: "71"; height: "133"; }
+ ListElement{ longitude: "88"; latitude: "72"; height: "130"; }
+ ListElement{ longitude: "88"; latitude: "73"; height: "128"; }
+ ListElement{ longitude: "88"; latitude: "74"; height: "128"; }
+ ListElement{ longitude: "88"; latitude: "75"; height: "125"; }
+ ListElement{ longitude: "88"; latitude: "76"; height: "125"; }
+ ListElement{ longitude: "88"; latitude: "77"; height: "125"; }
+ ListElement{ longitude: "88"; latitude: "78"; height: "126"; }
+ ListElement{ longitude: "88"; latitude: "79"; height: "128"; }
+ ListElement{ longitude: "88"; latitude: "80"; height: "131"; }
+ ListElement{ longitude: "88"; latitude: "81"; height: "136"; }
+ ListElement{ longitude: "88"; latitude: "82"; height: "142"; }
+ ListElement{ longitude: "88"; latitude: "83"; height: "146"; }
+ ListElement{ longitude: "88"; latitude: "84"; height: "150"; }
+ ListElement{ longitude: "88"; latitude: "85"; height: "149"; }
+ ListElement{ longitude: "88"; latitude: "86"; height: "149"; }
+ ListElement{ longitude: "88"; latitude: "87"; height: "150"; }
+ ListElement{ longitude: "88"; latitude: "88"; height: "148"; }
+ ListElement{ longitude: "88"; latitude: "89"; height: "147"; }
+ ListElement{ longitude: "88"; latitude: "90"; height: "140"; }
+ ListElement{ longitude: "88"; latitude: "91"; height: "130"; }
+ ListElement{ longitude: "88"; latitude: "92"; height: "124"; }
+ ListElement{ longitude: "88"; latitude: "93"; height: "118"; }
+ ListElement{ longitude: "88"; latitude: "94"; height: "116"; }
+ ListElement{ longitude: "88"; latitude: "95"; height: "117"; }
+ ListElement{ longitude: "88"; latitude: "96"; height: "119"; }
+ ListElement{ longitude: "88"; latitude: "97"; height: "119"; }
+ ListElement{ longitude: "88"; latitude: "98"; height: "125"; }
+ ListElement{ longitude: "88"; latitude: "99"; height: "113"; }
+ ListElement{ longitude: "89"; latitude: "0"; height: "106"; }
+ ListElement{ longitude: "89"; latitude: "1"; height: "101"; }
+ ListElement{ longitude: "89"; latitude: "2"; height: "97"; }
+ ListElement{ longitude: "89"; latitude: "3"; height: "99"; }
+ ListElement{ longitude: "89"; latitude: "4"; height: "101"; }
+ ListElement{ longitude: "89"; latitude: "5"; height: "104"; }
+ ListElement{ longitude: "89"; latitude: "6"; height: "104"; }
+ ListElement{ longitude: "89"; latitude: "7"; height: "108"; }
+ ListElement{ longitude: "89"; latitude: "8"; height: "101"; }
+ ListElement{ longitude: "89"; latitude: "9"; height: "108"; }
+ ListElement{ longitude: "89"; latitude: "10"; height: "108"; }
+ ListElement{ longitude: "89"; latitude: "11"; height: "107"; }
+ ListElement{ longitude: "89"; latitude: "12"; height: "105"; }
+ ListElement{ longitude: "89"; latitude: "13"; height: "106"; }
+ ListElement{ longitude: "89"; latitude: "14"; height: "106"; }
+ ListElement{ longitude: "89"; latitude: "15"; height: "103"; }
+ ListElement{ longitude: "89"; latitude: "16"; height: "103"; }
+ ListElement{ longitude: "89"; latitude: "17"; height: "105"; }
+ ListElement{ longitude: "89"; latitude: "18"; height: "108"; }
+ ListElement{ longitude: "89"; latitude: "19"; height: "113"; }
+ ListElement{ longitude: "89"; latitude: "20"; height: "123"; }
+ ListElement{ longitude: "89"; latitude: "21"; height: "130"; }
+ ListElement{ longitude: "89"; latitude: "22"; height: "137"; }
+ ListElement{ longitude: "89"; latitude: "23"; height: "140"; }
+ ListElement{ longitude: "89"; latitude: "24"; height: "139"; }
+ ListElement{ longitude: "89"; latitude: "25"; height: "137"; }
+ ListElement{ longitude: "89"; latitude: "26"; height: "131"; }
+ ListElement{ longitude: "89"; latitude: "27"; height: "130"; }
+ ListElement{ longitude: "89"; latitude: "28"; height: "123"; }
+ ListElement{ longitude: "89"; latitude: "29"; height: "125"; }
+ ListElement{ longitude: "89"; latitude: "30"; height: "125"; }
+ ListElement{ longitude: "89"; latitude: "31"; height: "119"; }
+ ListElement{ longitude: "89"; latitude: "32"; height: "115"; }
+ ListElement{ longitude: "89"; latitude: "33"; height: "112"; }
+ ListElement{ longitude: "89"; latitude: "34"; height: "111"; }
+ ListElement{ longitude: "89"; latitude: "35"; height: "112"; }
+ ListElement{ longitude: "89"; latitude: "36"; height: "114"; }
+ ListElement{ longitude: "89"; latitude: "37"; height: "117"; }
+ ListElement{ longitude: "89"; latitude: "38"; height: "119"; }
+ ListElement{ longitude: "89"; latitude: "39"; height: "122"; }
+ ListElement{ longitude: "89"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "89"; latitude: "41"; height: "128"; }
+ ListElement{ longitude: "89"; latitude: "42"; height: "130"; }
+ ListElement{ longitude: "89"; latitude: "43"; height: "130"; }
+ ListElement{ longitude: "89"; latitude: "44"; height: "134"; }
+ ListElement{ longitude: "89"; latitude: "45"; height: "136"; }
+ ListElement{ longitude: "89"; latitude: "46"; height: "137"; }
+ ListElement{ longitude: "89"; latitude: "47"; height: "138"; }
+ ListElement{ longitude: "89"; latitude: "48"; height: "137"; }
+ ListElement{ longitude: "89"; latitude: "49"; height: "135"; }
+ ListElement{ longitude: "89"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "89"; latitude: "51"; height: "136"; }
+ ListElement{ longitude: "89"; latitude: "52"; height: "135"; }
+ ListElement{ longitude: "89"; latitude: "53"; height: "136"; }
+ ListElement{ longitude: "89"; latitude: "54"; height: "138"; }
+ ListElement{ longitude: "89"; latitude: "55"; height: "139"; }
+ ListElement{ longitude: "89"; latitude: "56"; height: "139"; }
+ ListElement{ longitude: "89"; latitude: "57"; height: "139"; }
+ ListElement{ longitude: "89"; latitude: "58"; height: "138"; }
+ ListElement{ longitude: "89"; latitude: "59"; height: "136"; }
+ ListElement{ longitude: "89"; latitude: "60"; height: "134"; }
+ ListElement{ longitude: "89"; latitude: "61"; height: "133"; }
+ ListElement{ longitude: "89"; latitude: "62"; height: "134"; }
+ ListElement{ longitude: "89"; latitude: "63"; height: "131"; }
+ ListElement{ longitude: "89"; latitude: "64"; height: "127"; }
+ ListElement{ longitude: "89"; latitude: "65"; height: "130"; }
+ ListElement{ longitude: "89"; latitude: "66"; height: "133"; }
+ ListElement{ longitude: "89"; latitude: "67"; height: "132"; }
+ ListElement{ longitude: "89"; latitude: "68"; height: "135"; }
+ ListElement{ longitude: "89"; latitude: "69"; height: "134"; }
+ ListElement{ longitude: "89"; latitude: "70"; height: "136"; }
+ ListElement{ longitude: "89"; latitude: "71"; height: "136"; }
+ ListElement{ longitude: "89"; latitude: "72"; height: "133"; }
+ ListElement{ longitude: "89"; latitude: "73"; height: "131"; }
+ ListElement{ longitude: "89"; latitude: "74"; height: "130"; }
+ ListElement{ longitude: "89"; latitude: "75"; height: "126"; }
+ ListElement{ longitude: "89"; latitude: "76"; height: "125"; }
+ ListElement{ longitude: "89"; latitude: "77"; height: "125"; }
+ ListElement{ longitude: "89"; latitude: "78"; height: "126"; }
+ ListElement{ longitude: "89"; latitude: "79"; height: "128"; }
+ ListElement{ longitude: "89"; latitude: "80"; height: "130"; }
+ ListElement{ longitude: "89"; latitude: "81"; height: "133"; }
+ ListElement{ longitude: "89"; latitude: "82"; height: "137"; }
+ ListElement{ longitude: "89"; latitude: "83"; height: "140"; }
+ ListElement{ longitude: "89"; latitude: "84"; height: "143"; }
+ ListElement{ longitude: "89"; latitude: "85"; height: "146"; }
+ ListElement{ longitude: "89"; latitude: "86"; height: "146"; }
+ ListElement{ longitude: "89"; latitude: "87"; height: "146"; }
+ ListElement{ longitude: "89"; latitude: "88"; height: "147"; }
+ ListElement{ longitude: "89"; latitude: "89"; height: "145"; }
+ ListElement{ longitude: "89"; latitude: "90"; height: "140"; }
+ ListElement{ longitude: "89"; latitude: "91"; height: "133"; }
+ ListElement{ longitude: "89"; latitude: "92"; height: "128"; }
+ ListElement{ longitude: "89"; latitude: "93"; height: "123"; }
+ ListElement{ longitude: "89"; latitude: "94"; height: "123"; }
+ ListElement{ longitude: "89"; latitude: "95"; height: "114"; }
+ ListElement{ longitude: "89"; latitude: "96"; height: "120"; }
+ ListElement{ longitude: "89"; latitude: "97"; height: "117"; }
+ ListElement{ longitude: "89"; latitude: "98"; height: "119"; }
+ ListElement{ longitude: "89"; latitude: "99"; height: "107"; }
+ ListElement{ longitude: "90"; latitude: "0"; height: "102"; }
+ ListElement{ longitude: "90"; latitude: "1"; height: "99"; }
+ ListElement{ longitude: "90"; latitude: "2"; height: "98"; }
+ ListElement{ longitude: "90"; latitude: "3"; height: "99"; }
+ ListElement{ longitude: "90"; latitude: "4"; height: "102"; }
+ ListElement{ longitude: "90"; latitude: "5"; height: "101"; }
+ ListElement{ longitude: "90"; latitude: "6"; height: "101"; }
+ ListElement{ longitude: "90"; latitude: "7"; height: "103"; }
+ ListElement{ longitude: "90"; latitude: "8"; height: "106"; }
+ ListElement{ longitude: "90"; latitude: "9"; height: "105"; }
+ ListElement{ longitude: "90"; latitude: "10"; height: "103"; }
+ ListElement{ longitude: "90"; latitude: "11"; height: "103"; }
+ ListElement{ longitude: "90"; latitude: "12"; height: "103"; }
+ ListElement{ longitude: "90"; latitude: "13"; height: "104"; }
+ ListElement{ longitude: "90"; latitude: "14"; height: "108"; }
+ ListElement{ longitude: "90"; latitude: "15"; height: "107"; }
+ ListElement{ longitude: "90"; latitude: "16"; height: "108"; }
+ ListElement{ longitude: "90"; latitude: "17"; height: "109"; }
+ ListElement{ longitude: "90"; latitude: "18"; height: "112"; }
+ ListElement{ longitude: "90"; latitude: "19"; height: "119"; }
+ ListElement{ longitude: "90"; latitude: "20"; height: "122"; }
+ ListElement{ longitude: "90"; latitude: "21"; height: "127"; }
+ ListElement{ longitude: "90"; latitude: "22"; height: "133"; }
+ ListElement{ longitude: "90"; latitude: "23"; height: "136"; }
+ ListElement{ longitude: "90"; latitude: "24"; height: "136"; }
+ ListElement{ longitude: "90"; latitude: "25"; height: "137"; }
+ ListElement{ longitude: "90"; latitude: "26"; height: "134"; }
+ ListElement{ longitude: "90"; latitude: "27"; height: "130"; }
+ ListElement{ longitude: "90"; latitude: "28"; height: "131"; }
+ ListElement{ longitude: "90"; latitude: "29"; height: "127"; }
+ ListElement{ longitude: "90"; latitude: "30"; height: "123"; }
+ ListElement{ longitude: "90"; latitude: "31"; height: "117"; }
+ ListElement{ longitude: "90"; latitude: "32"; height: "113"; }
+ ListElement{ longitude: "90"; latitude: "33"; height: "110"; }
+ ListElement{ longitude: "90"; latitude: "34"; height: "110"; }
+ ListElement{ longitude: "90"; latitude: "35"; height: "111"; }
+ ListElement{ longitude: "90"; latitude: "36"; height: "113"; }
+ ListElement{ longitude: "90"; latitude: "37"; height: "116"; }
+ ListElement{ longitude: "90"; latitude: "38"; height: "117"; }
+ ListElement{ longitude: "90"; latitude: "39"; height: "119"; }
+ ListElement{ longitude: "90"; latitude: "40"; height: "122"; }
+ ListElement{ longitude: "90"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "90"; latitude: "42"; height: "129"; }
+ ListElement{ longitude: "90"; latitude: "43"; height: "131"; }
+ ListElement{ longitude: "90"; latitude: "44"; height: "133"; }
+ ListElement{ longitude: "90"; latitude: "45"; height: "136"; }
+ ListElement{ longitude: "90"; latitude: "46"; height: "137"; }
+ ListElement{ longitude: "90"; latitude: "47"; height: "139"; }
+ ListElement{ longitude: "90"; latitude: "48"; height: "139"; }
+ ListElement{ longitude: "90"; latitude: "49"; height: "138"; }
+ ListElement{ longitude: "90"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "90"; latitude: "51"; height: "137"; }
+ ListElement{ longitude: "90"; latitude: "52"; height: "137"; }
+ ListElement{ longitude: "90"; latitude: "53"; height: "137"; }
+ ListElement{ longitude: "90"; latitude: "54"; height: "136"; }
+ ListElement{ longitude: "90"; latitude: "55"; height: "138"; }
+ ListElement{ longitude: "90"; latitude: "56"; height: "139"; }
+ ListElement{ longitude: "90"; latitude: "57"; height: "139"; }
+ ListElement{ longitude: "90"; latitude: "58"; height: "138"; }
+ ListElement{ longitude: "90"; latitude: "59"; height: "134"; }
+ ListElement{ longitude: "90"; latitude: "60"; height: "130"; }
+ ListElement{ longitude: "90"; latitude: "61"; height: "129"; }
+ ListElement{ longitude: "90"; latitude: "62"; height: "128"; }
+ ListElement{ longitude: "90"; latitude: "63"; height: "128"; }
+ ListElement{ longitude: "90"; latitude: "64"; height: "128"; }
+ ListElement{ longitude: "90"; latitude: "65"; height: "128"; }
+ ListElement{ longitude: "90"; latitude: "66"; height: "129"; }
+ ListElement{ longitude: "90"; latitude: "67"; height: "129"; }
+ ListElement{ longitude: "90"; latitude: "68"; height: "130"; }
+ ListElement{ longitude: "90"; latitude: "69"; height: "131"; }
+ ListElement{ longitude: "90"; latitude: "70"; height: "133"; }
+ ListElement{ longitude: "90"; latitude: "71"; height: "135"; }
+ ListElement{ longitude: "90"; latitude: "72"; height: "135"; }
+ ListElement{ longitude: "90"; latitude: "73"; height: "132"; }
+ ListElement{ longitude: "90"; latitude: "74"; height: "130"; }
+ ListElement{ longitude: "90"; latitude: "75"; height: "128"; }
+ ListElement{ longitude: "90"; latitude: "76"; height: "125"; }
+ ListElement{ longitude: "90"; latitude: "77"; height: "127"; }
+ ListElement{ longitude: "90"; latitude: "78"; height: "126"; }
+ ListElement{ longitude: "90"; latitude: "79"; height: "128"; }
+ ListElement{ longitude: "90"; latitude: "80"; height: "130"; }
+ ListElement{ longitude: "90"; latitude: "81"; height: "132"; }
+ ListElement{ longitude: "90"; latitude: "82"; height: "135"; }
+ ListElement{ longitude: "90"; latitude: "83"; height: "138"; }
+ ListElement{ longitude: "90"; latitude: "84"; height: "140"; }
+ ListElement{ longitude: "90"; latitude: "85"; height: "141"; }
+ ListElement{ longitude: "90"; latitude: "86"; height: "143"; }
+ ListElement{ longitude: "90"; latitude: "87"; height: "143"; }
+ ListElement{ longitude: "90"; latitude: "88"; height: "142"; }
+ ListElement{ longitude: "90"; latitude: "89"; height: "140"; }
+ ListElement{ longitude: "90"; latitude: "90"; height: "137"; }
+ ListElement{ longitude: "90"; latitude: "91"; height: "131"; }
+ ListElement{ longitude: "90"; latitude: "92"; height: "127"; }
+ ListElement{ longitude: "90"; latitude: "93"; height: "129"; }
+ ListElement{ longitude: "90"; latitude: "94"; height: "112"; }
+ ListElement{ longitude: "90"; latitude: "95"; height: "86"; }
+ ListElement{ longitude: "90"; latitude: "96"; height: "103"; }
+ ListElement{ longitude: "90"; latitude: "97"; height: "110"; }
+ ListElement{ longitude: "90"; latitude: "98"; height: "108"; }
+ ListElement{ longitude: "90"; latitude: "99"; height: "99"; }
+ ListElement{ longitude: "91"; latitude: "0"; height: "97"; }
+ ListElement{ longitude: "91"; latitude: "1"; height: "97"; }
+ ListElement{ longitude: "91"; latitude: "2"; height: "100"; }
+ ListElement{ longitude: "91"; latitude: "3"; height: "101"; }
+ ListElement{ longitude: "91"; latitude: "4"; height: "102"; }
+ ListElement{ longitude: "91"; latitude: "5"; height: "101"; }
+ ListElement{ longitude: "91"; latitude: "6"; height: "99"; }
+ ListElement{ longitude: "91"; latitude: "7"; height: "99"; }
+ ListElement{ longitude: "91"; latitude: "8"; height: "99"; }
+ ListElement{ longitude: "91"; latitude: "9"; height: "101"; }
+ ListElement{ longitude: "91"; latitude: "10"; height: "100"; }
+ ListElement{ longitude: "91"; latitude: "11"; height: "102"; }
+ ListElement{ longitude: "91"; latitude: "12"; height: "101"; }
+ ListElement{ longitude: "91"; latitude: "13"; height: "104"; }
+ ListElement{ longitude: "91"; latitude: "14"; height: "106"; }
+ ListElement{ longitude: "91"; latitude: "15"; height: "109"; }
+ ListElement{ longitude: "91"; latitude: "16"; height: "109"; }
+ ListElement{ longitude: "91"; latitude: "17"; height: "112"; }
+ ListElement{ longitude: "91"; latitude: "18"; height: "111"; }
+ ListElement{ longitude: "91"; latitude: "19"; height: "116"; }
+ ListElement{ longitude: "91"; latitude: "20"; height: "120"; }
+ ListElement{ longitude: "91"; latitude: "21"; height: "122"; }
+ ListElement{ longitude: "91"; latitude: "22"; height: "127"; }
+ ListElement{ longitude: "91"; latitude: "23"; height: "130"; }
+ ListElement{ longitude: "91"; latitude: "24"; height: "133"; }
+ ListElement{ longitude: "91"; latitude: "25"; height: "132"; }
+ ListElement{ longitude: "91"; latitude: "26"; height: "134"; }
+ ListElement{ longitude: "91"; latitude: "27"; height: "133"; }
+ ListElement{ longitude: "91"; latitude: "28"; height: "132"; }
+ ListElement{ longitude: "91"; latitude: "29"; height: "129"; }
+ ListElement{ longitude: "91"; latitude: "30"; height: "122"; }
+ ListElement{ longitude: "91"; latitude: "31"; height: "116"; }
+ ListElement{ longitude: "91"; latitude: "32"; height: "112"; }
+ ListElement{ longitude: "91"; latitude: "33"; height: "110"; }
+ ListElement{ longitude: "91"; latitude: "34"; height: "109"; }
+ ListElement{ longitude: "91"; latitude: "35"; height: "112"; }
+ ListElement{ longitude: "91"; latitude: "36"; height: "113"; }
+ ListElement{ longitude: "91"; latitude: "37"; height: "114"; }
+ ListElement{ longitude: "91"; latitude: "38"; height: "116"; }
+ ListElement{ longitude: "91"; latitude: "39"; height: "118"; }
+ ListElement{ longitude: "91"; latitude: "40"; height: "121"; }
+ ListElement{ longitude: "91"; latitude: "41"; height: "126"; }
+ ListElement{ longitude: "91"; latitude: "42"; height: "128"; }
+ ListElement{ longitude: "91"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "91"; latitude: "44"; height: "130"; }
+ ListElement{ longitude: "91"; latitude: "45"; height: "134"; }
+ ListElement{ longitude: "91"; latitude: "46"; height: "138"; }
+ ListElement{ longitude: "91"; latitude: "47"; height: "140"; }
+ ListElement{ longitude: "91"; latitude: "48"; height: "141"; }
+ ListElement{ longitude: "91"; latitude: "49"; height: "141"; }
+ ListElement{ longitude: "91"; latitude: "50"; height: "137"; }
+ ListElement{ longitude: "91"; latitude: "51"; height: "138"; }
+ ListElement{ longitude: "91"; latitude: "52"; height: "136"; }
+ ListElement{ longitude: "91"; latitude: "53"; height: "137"; }
+ ListElement{ longitude: "91"; latitude: "54"; height: "137"; }
+ ListElement{ longitude: "91"; latitude: "55"; height: "137"; }
+ ListElement{ longitude: "91"; latitude: "56"; height: "133"; }
+ ListElement{ longitude: "91"; latitude: "57"; height: "125"; }
+ ListElement{ longitude: "91"; latitude: "58"; height: "132"; }
+ ListElement{ longitude: "91"; latitude: "59"; height: "132"; }
+ ListElement{ longitude: "91"; latitude: "60"; height: "129"; }
+ ListElement{ longitude: "91"; latitude: "61"; height: "129"; }
+ ListElement{ longitude: "91"; latitude: "62"; height: "127"; }
+ ListElement{ longitude: "91"; latitude: "63"; height: "125"; }
+ ListElement{ longitude: "91"; latitude: "64"; height: "122"; }
+ ListElement{ longitude: "91"; latitude: "65"; height: "122"; }
+ ListElement{ longitude: "91"; latitude: "66"; height: "123"; }
+ ListElement{ longitude: "91"; latitude: "67"; height: "124"; }
+ ListElement{ longitude: "91"; latitude: "68"; height: "125"; }
+ ListElement{ longitude: "91"; latitude: "69"; height: "126"; }
+ ListElement{ longitude: "91"; latitude: "70"; height: "129"; }
+ ListElement{ longitude: "91"; latitude: "71"; height: "129"; }
+ ListElement{ longitude: "91"; latitude: "72"; height: "131"; }
+ ListElement{ longitude: "91"; latitude: "73"; height: "131"; }
+ ListElement{ longitude: "91"; latitude: "74"; height: "130"; }
+ ListElement{ longitude: "91"; latitude: "75"; height: "128"; }
+ ListElement{ longitude: "91"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "91"; latitude: "77"; height: "128"; }
+ ListElement{ longitude: "91"; latitude: "78"; height: "127"; }
+ ListElement{ longitude: "91"; latitude: "79"; height: "128"; }
+ ListElement{ longitude: "91"; latitude: "80"; height: "130"; }
+ ListElement{ longitude: "91"; latitude: "81"; height: "132"; }
+ ListElement{ longitude: "91"; latitude: "82"; height: "136"; }
+ ListElement{ longitude: "91"; latitude: "83"; height: "138"; }
+ ListElement{ longitude: "91"; latitude: "84"; height: "139"; }
+ ListElement{ longitude: "91"; latitude: "85"; height: "140"; }
+ ListElement{ longitude: "91"; latitude: "86"; height: "141"; }
+ ListElement{ longitude: "91"; latitude: "87"; height: "138"; }
+ ListElement{ longitude: "91"; latitude: "88"; height: "137"; }
+ ListElement{ longitude: "91"; latitude: "89"; height: "137"; }
+ ListElement{ longitude: "91"; latitude: "90"; height: "134"; }
+ ListElement{ longitude: "91"; latitude: "91"; height: "132"; }
+ ListElement{ longitude: "91"; latitude: "92"; height: "130"; }
+ ListElement{ longitude: "91"; latitude: "93"; height: "131"; }
+ ListElement{ longitude: "91"; latitude: "94"; height: "120"; }
+ ListElement{ longitude: "91"; latitude: "95"; height: "95"; }
+ ListElement{ longitude: "91"; latitude: "96"; height: "105"; }
+ ListElement{ longitude: "91"; latitude: "97"; height: "106"; }
+ ListElement{ longitude: "91"; latitude: "98"; height: "97"; }
+ ListElement{ longitude: "91"; latitude: "99"; height: "91"; }
+ ListElement{ longitude: "92"; latitude: "0"; height: "96"; }
+ ListElement{ longitude: "92"; latitude: "1"; height: "97"; }
+ ListElement{ longitude: "92"; latitude: "2"; height: "101"; }
+ ListElement{ longitude: "92"; latitude: "3"; height: "102"; }
+ ListElement{ longitude: "92"; latitude: "4"; height: "102"; }
+ ListElement{ longitude: "92"; latitude: "5"; height: "99"; }
+ ListElement{ longitude: "92"; latitude: "6"; height: "95"; }
+ ListElement{ longitude: "92"; latitude: "7"; height: "98"; }
+ ListElement{ longitude: "92"; latitude: "8"; height: "96"; }
+ ListElement{ longitude: "92"; latitude: "9"; height: "98"; }
+ ListElement{ longitude: "92"; latitude: "10"; height: "97"; }
+ ListElement{ longitude: "92"; latitude: "11"; height: "99"; }
+ ListElement{ longitude: "92"; latitude: "12"; height: "99"; }
+ ListElement{ longitude: "92"; latitude: "13"; height: "102"; }
+ ListElement{ longitude: "92"; latitude: "14"; height: "102"; }
+ ListElement{ longitude: "92"; latitude: "15"; height: "105"; }
+ ListElement{ longitude: "92"; latitude: "16"; height: "107"; }
+ ListElement{ longitude: "92"; latitude: "17"; height: "108"; }
+ ListElement{ longitude: "92"; latitude: "18"; height: "109"; }
+ ListElement{ longitude: "92"; latitude: "19"; height: "112"; }
+ ListElement{ longitude: "92"; latitude: "20"; height: "115"; }
+ ListElement{ longitude: "92"; latitude: "21"; height: "118"; }
+ ListElement{ longitude: "92"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "92"; latitude: "23"; height: "126"; }
+ ListElement{ longitude: "92"; latitude: "24"; height: "129"; }
+ ListElement{ longitude: "92"; latitude: "25"; height: "131"; }
+ ListElement{ longitude: "92"; latitude: "26"; height: "133"; }
+ ListElement{ longitude: "92"; latitude: "27"; height: "134"; }
+ ListElement{ longitude: "92"; latitude: "28"; height: "130"; }
+ ListElement{ longitude: "92"; latitude: "29"; height: "126"; }
+ ListElement{ longitude: "92"; latitude: "30"; height: "121"; }
+ ListElement{ longitude: "92"; latitude: "31"; height: "113"; }
+ ListElement{ longitude: "92"; latitude: "32"; height: "110"; }
+ ListElement{ longitude: "92"; latitude: "33"; height: "113"; }
+ ListElement{ longitude: "92"; latitude: "34"; height: "112"; }
+ ListElement{ longitude: "92"; latitude: "35"; height: "115"; }
+ ListElement{ longitude: "92"; latitude: "36"; height: "116"; }
+ ListElement{ longitude: "92"; latitude: "37"; height: "115"; }
+ ListElement{ longitude: "92"; latitude: "38"; height: "116"; }
+ ListElement{ longitude: "92"; latitude: "39"; height: "118"; }
+ ListElement{ longitude: "92"; latitude: "40"; height: "121"; }
+ ListElement{ longitude: "92"; latitude: "41"; height: "126"; }
+ ListElement{ longitude: "92"; latitude: "42"; height: "127"; }
+ ListElement{ longitude: "92"; latitude: "43"; height: "128"; }
+ ListElement{ longitude: "92"; latitude: "44"; height: "128"; }
+ ListElement{ longitude: "92"; latitude: "45"; height: "131"; }
+ ListElement{ longitude: "92"; latitude: "46"; height: "135"; }
+ ListElement{ longitude: "92"; latitude: "47"; height: "130"; }
+ ListElement{ longitude: "92"; latitude: "48"; height: "129"; }
+ ListElement{ longitude: "92"; latitude: "49"; height: "141"; }
+ ListElement{ longitude: "92"; latitude: "50"; height: "140"; }
+ ListElement{ longitude: "92"; latitude: "51"; height: "139"; }
+ ListElement{ longitude: "92"; latitude: "52"; height: "136"; }
+ ListElement{ longitude: "92"; latitude: "53"; height: "136"; }
+ ListElement{ longitude: "92"; latitude: "54"; height: "136"; }
+ ListElement{ longitude: "92"; latitude: "55"; height: "136"; }
+ ListElement{ longitude: "92"; latitude: "56"; height: "129"; }
+ ListElement{ longitude: "92"; latitude: "57"; height: "121"; }
+ ListElement{ longitude: "92"; latitude: "58"; height: "128"; }
+ ListElement{ longitude: "92"; latitude: "59"; height: "131"; }
+ ListElement{ longitude: "92"; latitude: "60"; height: "129"; }
+ ListElement{ longitude: "92"; latitude: "61"; height: "127"; }
+ ListElement{ longitude: "92"; latitude: "62"; height: "123"; }
+ ListElement{ longitude: "92"; latitude: "63"; height: "119"; }
+ ListElement{ longitude: "92"; latitude: "64"; height: "117"; }
+ ListElement{ longitude: "92"; latitude: "65"; height: "117"; }
+ ListElement{ longitude: "92"; latitude: "66"; height: "118"; }
+ ListElement{ longitude: "92"; latitude: "67"; height: "121"; }
+ ListElement{ longitude: "92"; latitude: "68"; height: "122"; }
+ ListElement{ longitude: "92"; latitude: "69"; height: "121"; }
+ ListElement{ longitude: "92"; latitude: "70"; height: "124"; }
+ ListElement{ longitude: "92"; latitude: "71"; height: "125"; }
+ ListElement{ longitude: "92"; latitude: "72"; height: "130"; }
+ ListElement{ longitude: "92"; latitude: "73"; height: "129"; }
+ ListElement{ longitude: "92"; latitude: "74"; height: "128"; }
+ ListElement{ longitude: "92"; latitude: "75"; height: "125"; }
+ ListElement{ longitude: "92"; latitude: "76"; height: "125"; }
+ ListElement{ longitude: "92"; latitude: "77"; height: "128"; }
+ ListElement{ longitude: "92"; latitude: "78"; height: "128"; }
+ ListElement{ longitude: "92"; latitude: "79"; height: "131"; }
+ ListElement{ longitude: "92"; latitude: "80"; height: "130"; }
+ ListElement{ longitude: "92"; latitude: "81"; height: "132"; }
+ ListElement{ longitude: "92"; latitude: "82"; height: "136"; }
+ ListElement{ longitude: "92"; latitude: "83"; height: "134"; }
+ ListElement{ longitude: "92"; latitude: "84"; height: "131"; }
+ ListElement{ longitude: "92"; latitude: "85"; height: "137"; }
+ ListElement{ longitude: "92"; latitude: "86"; height: "142"; }
+ ListElement{ longitude: "92"; latitude: "87"; height: "137"; }
+ ListElement{ longitude: "92"; latitude: "88"; height: "136"; }
+ ListElement{ longitude: "92"; latitude: "89"; height: "133"; }
+ ListElement{ longitude: "92"; latitude: "90"; height: "129"; }
+ ListElement{ longitude: "92"; latitude: "91"; height: "130"; }
+ ListElement{ longitude: "92"; latitude: "92"; height: "132"; }
+ ListElement{ longitude: "92"; latitude: "93"; height: "124"; }
+ ListElement{ longitude: "92"; latitude: "94"; height: "119"; }
+ ListElement{ longitude: "92"; latitude: "95"; height: "114"; }
+ ListElement{ longitude: "92"; latitude: "96"; height: "109"; }
+ ListElement{ longitude: "92"; latitude: "97"; height: "109"; }
+ ListElement{ longitude: "92"; latitude: "98"; height: "96"; }
+ ListElement{ longitude: "92"; latitude: "99"; height: "87"; }
+ ListElement{ longitude: "93"; latitude: "0"; height: "96"; }
+ ListElement{ longitude: "93"; latitude: "1"; height: "100"; }
+ ListElement{ longitude: "93"; latitude: "2"; height: "103"; }
+ ListElement{ longitude: "93"; latitude: "3"; height: "105"; }
+ ListElement{ longitude: "93"; latitude: "4"; height: "105"; }
+ ListElement{ longitude: "93"; latitude: "5"; height: "96"; }
+ ListElement{ longitude: "93"; latitude: "6"; height: "97"; }
+ ListElement{ longitude: "93"; latitude: "7"; height: "97"; }
+ ListElement{ longitude: "93"; latitude: "8"; height: "93"; }
+ ListElement{ longitude: "93"; latitude: "9"; height: "94"; }
+ ListElement{ longitude: "93"; latitude: "10"; height: "94"; }
+ ListElement{ longitude: "93"; latitude: "11"; height: "95"; }
+ ListElement{ longitude: "93"; latitude: "12"; height: "98"; }
+ ListElement{ longitude: "93"; latitude: "13"; height: "99"; }
+ ListElement{ longitude: "93"; latitude: "14"; height: "99"; }
+ ListElement{ longitude: "93"; latitude: "15"; height: "102"; }
+ ListElement{ longitude: "93"; latitude: "16"; height: "100"; }
+ ListElement{ longitude: "93"; latitude: "17"; height: "104"; }
+ ListElement{ longitude: "93"; latitude: "18"; height: "107"; }
+ ListElement{ longitude: "93"; latitude: "19"; height: "110"; }
+ ListElement{ longitude: "93"; latitude: "20"; height: "113"; }
+ ListElement{ longitude: "93"; latitude: "21"; height: "118"; }
+ ListElement{ longitude: "93"; latitude: "22"; height: "119"; }
+ ListElement{ longitude: "93"; latitude: "23"; height: "121"; }
+ ListElement{ longitude: "93"; latitude: "24"; height: "124"; }
+ ListElement{ longitude: "93"; latitude: "25"; height: "129"; }
+ ListElement{ longitude: "93"; latitude: "26"; height: "132"; }
+ ListElement{ longitude: "93"; latitude: "27"; height: "132"; }
+ ListElement{ longitude: "93"; latitude: "28"; height: "128"; }
+ ListElement{ longitude: "93"; latitude: "29"; height: "125"; }
+ ListElement{ longitude: "93"; latitude: "30"; height: "120"; }
+ ListElement{ longitude: "93"; latitude: "31"; height: "113"; }
+ ListElement{ longitude: "93"; latitude: "32"; height: "111"; }
+ ListElement{ longitude: "93"; latitude: "33"; height: "114"; }
+ ListElement{ longitude: "93"; latitude: "34"; height: "117"; }
+ ListElement{ longitude: "93"; latitude: "35"; height: "117"; }
+ ListElement{ longitude: "93"; latitude: "36"; height: "118"; }
+ ListElement{ longitude: "93"; latitude: "37"; height: "117"; }
+ ListElement{ longitude: "93"; latitude: "38"; height: "117"; }
+ ListElement{ longitude: "93"; latitude: "39"; height: "119"; }
+ ListElement{ longitude: "93"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "93"; latitude: "41"; height: "125"; }
+ ListElement{ longitude: "93"; latitude: "42"; height: "126"; }
+ ListElement{ longitude: "93"; latitude: "43"; height: "126"; }
+ ListElement{ longitude: "93"; latitude: "44"; height: "126"; }
+ ListElement{ longitude: "93"; latitude: "45"; height: "129"; }
+ ListElement{ longitude: "93"; latitude: "46"; height: "134"; }
+ ListElement{ longitude: "93"; latitude: "47"; height: "129"; }
+ ListElement{ longitude: "93"; latitude: "48"; height: "132"; }
+ ListElement{ longitude: "93"; latitude: "49"; height: "142"; }
+ ListElement{ longitude: "93"; latitude: "50"; height: "140"; }
+ ListElement{ longitude: "93"; latitude: "51"; height: "137"; }
+ ListElement{ longitude: "93"; latitude: "52"; height: "138"; }
+ ListElement{ longitude: "93"; latitude: "53"; height: "137"; }
+ ListElement{ longitude: "93"; latitude: "54"; height: "138"; }
+ ListElement{ longitude: "93"; latitude: "55"; height: "138"; }
+ ListElement{ longitude: "93"; latitude: "56"; height: "137"; }
+ ListElement{ longitude: "93"; latitude: "57"; height: "131"; }
+ ListElement{ longitude: "93"; latitude: "58"; height: "132"; }
+ ListElement{ longitude: "93"; latitude: "59"; height: "129"; }
+ ListElement{ longitude: "93"; latitude: "60"; height: "128"; }
+ ListElement{ longitude: "93"; latitude: "61"; height: "125"; }
+ ListElement{ longitude: "93"; latitude: "62"; height: "121"; }
+ ListElement{ longitude: "93"; latitude: "63"; height: "119"; }
+ ListElement{ longitude: "93"; latitude: "64"; height: "117"; }
+ ListElement{ longitude: "93"; latitude: "65"; height: "117"; }
+ ListElement{ longitude: "93"; latitude: "66"; height: "120"; }
+ ListElement{ longitude: "93"; latitude: "67"; height: "123"; }
+ ListElement{ longitude: "93"; latitude: "68"; height: "122"; }
+ ListElement{ longitude: "93"; latitude: "69"; height: "122"; }
+ ListElement{ longitude: "93"; latitude: "70"; height: "122"; }
+ ListElement{ longitude: "93"; latitude: "71"; height: "123"; }
+ ListElement{ longitude: "93"; latitude: "72"; height: "124"; }
+ ListElement{ longitude: "93"; latitude: "73"; height: "124"; }
+ ListElement{ longitude: "93"; latitude: "74"; height: "126"; }
+ ListElement{ longitude: "93"; latitude: "75"; height: "124"; }
+ ListElement{ longitude: "93"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "93"; latitude: "77"; height: "128"; }
+ ListElement{ longitude: "93"; latitude: "78"; height: "130"; }
+ ListElement{ longitude: "93"; latitude: "79"; height: "132"; }
+ ListElement{ longitude: "93"; latitude: "80"; height: "133"; }
+ ListElement{ longitude: "93"; latitude: "81"; height: "133"; }
+ ListElement{ longitude: "93"; latitude: "82"; height: "138"; }
+ ListElement{ longitude: "93"; latitude: "83"; height: "135"; }
+ ListElement{ longitude: "93"; latitude: "84"; height: "130"; }
+ ListElement{ longitude: "93"; latitude: "85"; height: "136"; }
+ ListElement{ longitude: "93"; latitude: "86"; height: "144"; }
+ ListElement{ longitude: "93"; latitude: "87"; height: "139"; }
+ ListElement{ longitude: "93"; latitude: "88"; height: "132"; }
+ ListElement{ longitude: "93"; latitude: "89"; height: "126"; }
+ ListElement{ longitude: "93"; latitude: "90"; height: "126"; }
+ ListElement{ longitude: "93"; latitude: "91"; height: "128"; }
+ ListElement{ longitude: "93"; latitude: "92"; height: "128"; }
+ ListElement{ longitude: "93"; latitude: "93"; height: "118"; }
+ ListElement{ longitude: "93"; latitude: "94"; height: "112"; }
+ ListElement{ longitude: "93"; latitude: "95"; height: "111"; }
+ ListElement{ longitude: "93"; latitude: "96"; height: "110"; }
+ ListElement{ longitude: "93"; latitude: "97"; height: "109"; }
+ ListElement{ longitude: "93"; latitude: "98"; height: "98"; }
+ ListElement{ longitude: "93"; latitude: "99"; height: "85"; }
+ ListElement{ longitude: "94"; latitude: "0"; height: "91"; }
+ ListElement{ longitude: "94"; latitude: "1"; height: "93"; }
+ ListElement{ longitude: "94"; latitude: "2"; height: "98"; }
+ ListElement{ longitude: "94"; latitude: "3"; height: "101"; }
+ ListElement{ longitude: "94"; latitude: "4"; height: "106"; }
+ ListElement{ longitude: "94"; latitude: "5"; height: "106"; }
+ ListElement{ longitude: "94"; latitude: "6"; height: "89"; }
+ ListElement{ longitude: "94"; latitude: "7"; height: "98"; }
+ ListElement{ longitude: "94"; latitude: "8"; height: "95"; }
+ ListElement{ longitude: "94"; latitude: "9"; height: "91"; }
+ ListElement{ longitude: "94"; latitude: "10"; height: "90"; }
+ ListElement{ longitude: "94"; latitude: "11"; height: "92"; }
+ ListElement{ longitude: "94"; latitude: "12"; height: "94"; }
+ ListElement{ longitude: "94"; latitude: "13"; height: "95"; }
+ ListElement{ longitude: "94"; latitude: "14"; height: "98"; }
+ ListElement{ longitude: "94"; latitude: "15"; height: "99"; }
+ ListElement{ longitude: "94"; latitude: "16"; height: "97"; }
+ ListElement{ longitude: "94"; latitude: "17"; height: "101"; }
+ ListElement{ longitude: "94"; latitude: "18"; height: "105"; }
+ ListElement{ longitude: "94"; latitude: "19"; height: "109"; }
+ ListElement{ longitude: "94"; latitude: "20"; height: "113"; }
+ ListElement{ longitude: "94"; latitude: "21"; height: "118"; }
+ ListElement{ longitude: "94"; latitude: "22"; height: "120"; }
+ ListElement{ longitude: "94"; latitude: "23"; height: "120"; }
+ ListElement{ longitude: "94"; latitude: "24"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "25"; height: "124"; }
+ ListElement{ longitude: "94"; latitude: "26"; height: "128"; }
+ ListElement{ longitude: "94"; latitude: "27"; height: "128"; }
+ ListElement{ longitude: "94"; latitude: "28"; height: "128"; }
+ ListElement{ longitude: "94"; latitude: "29"; height: "121"; }
+ ListElement{ longitude: "94"; latitude: "30"; height: "119"; }
+ ListElement{ longitude: "94"; latitude: "31"; height: "116"; }
+ ListElement{ longitude: "94"; latitude: "32"; height: "114"; }
+ ListElement{ longitude: "94"; latitude: "33"; height: "118"; }
+ ListElement{ longitude: "94"; latitude: "34"; height: "110"; }
+ ListElement{ longitude: "94"; latitude: "35"; height: "113"; }
+ ListElement{ longitude: "94"; latitude: "36"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "37"; height: "121"; }
+ ListElement{ longitude: "94"; latitude: "38"; height: "121"; }
+ ListElement{ longitude: "94"; latitude: "39"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "94"; latitude: "41"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "42"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "43"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "44"; height: "124"; }
+ ListElement{ longitude: "94"; latitude: "45"; height: "130"; }
+ ListElement{ longitude: "94"; latitude: "46"; height: "136"; }
+ ListElement{ longitude: "94"; latitude: "47"; height: "141"; }
+ ListElement{ longitude: "94"; latitude: "48"; height: "145"; }
+ ListElement{ longitude: "94"; latitude: "49"; height: "145"; }
+ ListElement{ longitude: "94"; latitude: "50"; height: "136"; }
+ ListElement{ longitude: "94"; latitude: "51"; height: "129"; }
+ ListElement{ longitude: "94"; latitude: "52"; height: "138"; }
+ ListElement{ longitude: "94"; latitude: "53"; height: "140"; }
+ ListElement{ longitude: "94"; latitude: "54"; height: "138"; }
+ ListElement{ longitude: "94"; latitude: "55"; height: "139"; }
+ ListElement{ longitude: "94"; latitude: "56"; height: "131"; }
+ ListElement{ longitude: "94"; latitude: "57"; height: "124"; }
+ ListElement{ longitude: "94"; latitude: "58"; height: "129"; }
+ ListElement{ longitude: "94"; latitude: "59"; height: "125"; }
+ ListElement{ longitude: "94"; latitude: "60"; height: "124"; }
+ ListElement{ longitude: "94"; latitude: "61"; height: "125"; }
+ ListElement{ longitude: "94"; latitude: "62"; height: "126"; }
+ ListElement{ longitude: "94"; latitude: "63"; height: "123"; }
+ ListElement{ longitude: "94"; latitude: "64"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "65"; height: "121"; }
+ ListElement{ longitude: "94"; latitude: "66"; height: "123"; }
+ ListElement{ longitude: "94"; latitude: "67"; height: "124"; }
+ ListElement{ longitude: "94"; latitude: "68"; height: "125"; }
+ ListElement{ longitude: "94"; latitude: "69"; height: "123"; }
+ ListElement{ longitude: "94"; latitude: "70"; height: "123"; }
+ ListElement{ longitude: "94"; latitude: "71"; height: "121"; }
+ ListElement{ longitude: "94"; latitude: "72"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "73"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "74"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "75"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "76"; height: "120"; }
+ ListElement{ longitude: "94"; latitude: "77"; height: "128"; }
+ ListElement{ longitude: "94"; latitude: "78"; height: "129"; }
+ ListElement{ longitude: "94"; latitude: "79"; height: "133"; }
+ ListElement{ longitude: "94"; latitude: "80"; height: "134"; }
+ ListElement{ longitude: "94"; latitude: "81"; height: "133"; }
+ ListElement{ longitude: "94"; latitude: "82"; height: "137"; }
+ ListElement{ longitude: "94"; latitude: "83"; height: "137"; }
+ ListElement{ longitude: "94"; latitude: "84"; height: "142"; }
+ ListElement{ longitude: "94"; latitude: "85"; height: "148"; }
+ ListElement{ longitude: "94"; latitude: "86"; height: "146"; }
+ ListElement{ longitude: "94"; latitude: "87"; height: "137"; }
+ ListElement{ longitude: "94"; latitude: "88"; height: "124"; }
+ ListElement{ longitude: "94"; latitude: "89"; height: "117"; }
+ ListElement{ longitude: "94"; latitude: "90"; height: "120"; }
+ ListElement{ longitude: "94"; latitude: "91"; height: "121"; }
+ ListElement{ longitude: "94"; latitude: "92"; height: "122"; }
+ ListElement{ longitude: "94"; latitude: "93"; height: "115"; }
+ ListElement{ longitude: "94"; latitude: "94"; height: "112"; }
+ ListElement{ longitude: "94"; latitude: "95"; height: "115"; }
+ ListElement{ longitude: "94"; latitude: "96"; height: "111"; }
+ ListElement{ longitude: "94"; latitude: "97"; height: "106"; }
+ ListElement{ longitude: "94"; latitude: "98"; height: "94"; }
+ ListElement{ longitude: "94"; latitude: "99"; height: "84"; }
+ ListElement{ longitude: "95"; latitude: "0"; height: "87"; }
+ ListElement{ longitude: "95"; latitude: "1"; height: "89"; }
+ ListElement{ longitude: "95"; latitude: "2"; height: "92"; }
+ ListElement{ longitude: "95"; latitude: "3"; height: "96"; }
+ ListElement{ longitude: "95"; latitude: "4"; height: "100"; }
+ ListElement{ longitude: "95"; latitude: "5"; height: "107"; }
+ ListElement{ longitude: "95"; latitude: "6"; height: "101"; }
+ ListElement{ longitude: "95"; latitude: "7"; height: "102"; }
+ ListElement{ longitude: "95"; latitude: "8"; height: "96"; }
+ ListElement{ longitude: "95"; latitude: "9"; height: "93"; }
+ ListElement{ longitude: "95"; latitude: "10"; height: "91"; }
+ ListElement{ longitude: "95"; latitude: "11"; height: "91"; }
+ ListElement{ longitude: "95"; latitude: "12"; height: "92"; }
+ ListElement{ longitude: "95"; latitude: "13"; height: "93"; }
+ ListElement{ longitude: "95"; latitude: "14"; height: "94"; }
+ ListElement{ longitude: "95"; latitude: "15"; height: "95"; }
+ ListElement{ longitude: "95"; latitude: "16"; height: "99"; }
+ ListElement{ longitude: "95"; latitude: "17"; height: "99"; }
+ ListElement{ longitude: "95"; latitude: "18"; height: "103"; }
+ ListElement{ longitude: "95"; latitude: "19"; height: "111"; }
+ ListElement{ longitude: "95"; latitude: "20"; height: "115"; }
+ ListElement{ longitude: "95"; latitude: "21"; height: "118"; }
+ ListElement{ longitude: "95"; latitude: "22"; height: "122"; }
+ ListElement{ longitude: "95"; latitude: "23"; height: "121"; }
+ ListElement{ longitude: "95"; latitude: "24"; height: "120"; }
+ ListElement{ longitude: "95"; latitude: "25"; height: "121"; }
+ ListElement{ longitude: "95"; latitude: "26"; height: "125"; }
+ ListElement{ longitude: "95"; latitude: "27"; height: "126"; }
+ ListElement{ longitude: "95"; latitude: "28"; height: "126"; }
+ ListElement{ longitude: "95"; latitude: "29"; height: "119"; }
+ ListElement{ longitude: "95"; latitude: "30"; height: "116"; }
+ ListElement{ longitude: "95"; latitude: "31"; height: "111"; }
+ ListElement{ longitude: "95"; latitude: "32"; height: "113"; }
+ ListElement{ longitude: "95"; latitude: "33"; height: "118"; }
+ ListElement{ longitude: "95"; latitude: "34"; height: "110"; }
+ ListElement{ longitude: "95"; latitude: "35"; height: "112"; }
+ ListElement{ longitude: "95"; latitude: "36"; height: "126"; }
+ ListElement{ longitude: "95"; latitude: "37"; height: "125"; }
+ ListElement{ longitude: "95"; latitude: "38"; height: "123"; }
+ ListElement{ longitude: "95"; latitude: "39"; height: "121"; }
+ ListElement{ longitude: "95"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "95"; latitude: "41"; height: "119"; }
+ ListElement{ longitude: "95"; latitude: "42"; height: "120"; }
+ ListElement{ longitude: "95"; latitude: "43"; height: "120"; }
+ ListElement{ longitude: "95"; latitude: "44"; height: "122"; }
+ ListElement{ longitude: "95"; latitude: "45"; height: "128"; }
+ ListElement{ longitude: "95"; latitude: "46"; height: "132"; }
+ ListElement{ longitude: "95"; latitude: "47"; height: "141"; }
+ ListElement{ longitude: "95"; latitude: "48"; height: "139"; }
+ ListElement{ longitude: "95"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "95"; latitude: "50"; height: "143"; }
+ ListElement{ longitude: "95"; latitude: "51"; height: "138"; }
+ ListElement{ longitude: "95"; latitude: "52"; height: "145"; }
+ ListElement{ longitude: "95"; latitude: "53"; height: "143"; }
+ ListElement{ longitude: "95"; latitude: "54"; height: "140"; }
+ ListElement{ longitude: "95"; latitude: "55"; height: "140"; }
+ ListElement{ longitude: "95"; latitude: "56"; height: "125"; }
+ ListElement{ longitude: "95"; latitude: "57"; height: "120"; }
+ ListElement{ longitude: "95"; latitude: "58"; height: "128"; }
+ ListElement{ longitude: "95"; latitude: "59"; height: "128"; }
+ ListElement{ longitude: "95"; latitude: "60"; height: "128"; }
+ ListElement{ longitude: "95"; latitude: "61"; height: "126"; }
+ ListElement{ longitude: "95"; latitude: "62"; height: "129"; }
+ ListElement{ longitude: "95"; latitude: "63"; height: "129"; }
+ ListElement{ longitude: "95"; latitude: "64"; height: "129"; }
+ ListElement{ longitude: "95"; latitude: "65"; height: "130"; }
+ ListElement{ longitude: "95"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "95"; latitude: "67"; height: "127"; }
+ ListElement{ longitude: "95"; latitude: "68"; height: "126"; }
+ ListElement{ longitude: "95"; latitude: "69"; height: "126"; }
+ ListElement{ longitude: "95"; latitude: "70"; height: "129"; }
+ ListElement{ longitude: "95"; latitude: "71"; height: "126"; }
+ ListElement{ longitude: "95"; latitude: "72"; height: "121"; }
+ ListElement{ longitude: "95"; latitude: "73"; height: "122"; }
+ ListElement{ longitude: "95"; latitude: "74"; height: "120"; }
+ ListElement{ longitude: "95"; latitude: "75"; height: "122"; }
+ ListElement{ longitude: "95"; latitude: "76"; height: "124"; }
+ ListElement{ longitude: "95"; latitude: "77"; height: "128"; }
+ ListElement{ longitude: "95"; latitude: "78"; height: "129"; }
+ ListElement{ longitude: "95"; latitude: "79"; height: "133"; }
+ ListElement{ longitude: "95"; latitude: "80"; height: "134"; }
+ ListElement{ longitude: "95"; latitude: "81"; height: "133"; }
+ ListElement{ longitude: "95"; latitude: "82"; height: "137"; }
+ ListElement{ longitude: "95"; latitude: "83"; height: "139"; }
+ ListElement{ longitude: "95"; latitude: "84"; height: "146"; }
+ ListElement{ longitude: "95"; latitude: "85"; height: "146"; }
+ ListElement{ longitude: "95"; latitude: "86"; height: "139"; }
+ ListElement{ longitude: "95"; latitude: "87"; height: "124"; }
+ ListElement{ longitude: "95"; latitude: "88"; height: "112"; }
+ ListElement{ longitude: "95"; latitude: "89"; height: "105"; }
+ ListElement{ longitude: "95"; latitude: "90"; height: "110"; }
+ ListElement{ longitude: "95"; latitude: "91"; height: "116"; }
+ ListElement{ longitude: "95"; latitude: "92"; height: "116"; }
+ ListElement{ longitude: "95"; latitude: "93"; height: "114"; }
+ ListElement{ longitude: "95"; latitude: "94"; height: "112"; }
+ ListElement{ longitude: "95"; latitude: "95"; height: "107"; }
+ ListElement{ longitude: "95"; latitude: "96"; height: "103"; }
+ ListElement{ longitude: "95"; latitude: "97"; height: "101"; }
+ ListElement{ longitude: "95"; latitude: "98"; height: "91"; }
+ ListElement{ longitude: "95"; latitude: "99"; height: "83"; }
+ ListElement{ longitude: "96"; latitude: "0"; height: "87"; }
+ ListElement{ longitude: "96"; latitude: "1"; height: "84"; }
+ ListElement{ longitude: "96"; latitude: "2"; height: "87"; }
+ ListElement{ longitude: "96"; latitude: "3"; height: "91"; }
+ ListElement{ longitude: "96"; latitude: "4"; height: "91"; }
+ ListElement{ longitude: "96"; latitude: "5"; height: "102"; }
+ ListElement{ longitude: "96"; latitude: "6"; height: "107"; }
+ ListElement{ longitude: "96"; latitude: "7"; height: "107"; }
+ ListElement{ longitude: "96"; latitude: "8"; height: "101"; }
+ ListElement{ longitude: "96"; latitude: "9"; height: "95"; }
+ ListElement{ longitude: "96"; latitude: "10"; height: "91"; }
+ ListElement{ longitude: "96"; latitude: "11"; height: "91"; }
+ ListElement{ longitude: "96"; latitude: "12"; height: "92"; }
+ ListElement{ longitude: "96"; latitude: "13"; height: "92"; }
+ ListElement{ longitude: "96"; latitude: "14"; height: "93"; }
+ ListElement{ longitude: "96"; latitude: "15"; height: "96"; }
+ ListElement{ longitude: "96"; latitude: "16"; height: "97"; }
+ ListElement{ longitude: "96"; latitude: "17"; height: "97"; }
+ ListElement{ longitude: "96"; latitude: "18"; height: "93"; }
+ ListElement{ longitude: "96"; latitude: "19"; height: "109"; }
+ ListElement{ longitude: "96"; latitude: "20"; height: "114"; }
+ ListElement{ longitude: "96"; latitude: "21"; height: "119"; }
+ ListElement{ longitude: "96"; latitude: "22"; height: "121"; }
+ ListElement{ longitude: "96"; latitude: "23"; height: "120"; }
+ ListElement{ longitude: "96"; latitude: "24"; height: "120"; }
+ ListElement{ longitude: "96"; latitude: "25"; height: "121"; }
+ ListElement{ longitude: "96"; latitude: "26"; height: "124"; }
+ ListElement{ longitude: "96"; latitude: "27"; height: "125"; }
+ ListElement{ longitude: "96"; latitude: "28"; height: "124"; }
+ ListElement{ longitude: "96"; latitude: "29"; height: "119"; }
+ ListElement{ longitude: "96"; latitude: "30"; height: "117"; }
+ ListElement{ longitude: "96"; latitude: "31"; height: "115"; }
+ ListElement{ longitude: "96"; latitude: "32"; height: "119"; }
+ ListElement{ longitude: "96"; latitude: "33"; height: "123"; }
+ ListElement{ longitude: "96"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "96"; latitude: "35"; height: "128"; }
+ ListElement{ longitude: "96"; latitude: "36"; height: "128"; }
+ ListElement{ longitude: "96"; latitude: "37"; height: "124"; }
+ ListElement{ longitude: "96"; latitude: "38"; height: "124"; }
+ ListElement{ longitude: "96"; latitude: "39"; height: "124"; }
+ ListElement{ longitude: "96"; latitude: "40"; height: "125"; }
+ ListElement{ longitude: "96"; latitude: "41"; height: "123"; }
+ ListElement{ longitude: "96"; latitude: "42"; height: "122"; }
+ ListElement{ longitude: "96"; latitude: "43"; height: "122"; }
+ ListElement{ longitude: "96"; latitude: "44"; height: "120"; }
+ ListElement{ longitude: "96"; latitude: "45"; height: "125"; }
+ ListElement{ longitude: "96"; latitude: "46"; height: "133"; }
+ ListElement{ longitude: "96"; latitude: "47"; height: "139"; }
+ ListElement{ longitude: "96"; latitude: "48"; height: "134"; }
+ ListElement{ longitude: "96"; latitude: "49"; height: "136"; }
+ ListElement{ longitude: "96"; latitude: "50"; height: "147"; }
+ ListElement{ longitude: "96"; latitude: "51"; height: "149"; }
+ ListElement{ longitude: "96"; latitude: "52"; height: "148"; }
+ ListElement{ longitude: "96"; latitude: "53"; height: "149"; }
+ ListElement{ longitude: "96"; latitude: "54"; height: "146"; }
+ ListElement{ longitude: "96"; latitude: "55"; height: "144"; }
+ ListElement{ longitude: "96"; latitude: "56"; height: "137"; }
+ ListElement{ longitude: "96"; latitude: "57"; height: "133"; }
+ ListElement{ longitude: "96"; latitude: "58"; height: "133"; }
+ ListElement{ longitude: "96"; latitude: "59"; height: "128"; }
+ ListElement{ longitude: "96"; latitude: "60"; height: "128"; }
+ ListElement{ longitude: "96"; latitude: "61"; height: "130"; }
+ ListElement{ longitude: "96"; latitude: "62"; height: "132"; }
+ ListElement{ longitude: "96"; latitude: "63"; height: "132"; }
+ ListElement{ longitude: "96"; latitude: "64"; height: "133"; }
+ ListElement{ longitude: "96"; latitude: "65"; height: "134"; }
+ ListElement{ longitude: "96"; latitude: "66"; height: "136"; }
+ ListElement{ longitude: "96"; latitude: "67"; height: "131"; }
+ ListElement{ longitude: "96"; latitude: "68"; height: "129"; }
+ ListElement{ longitude: "96"; latitude: "69"; height: "130"; }
+ ListElement{ longitude: "96"; latitude: "70"; height: "130"; }
+ ListElement{ longitude: "96"; latitude: "71"; height: "130"; }
+ ListElement{ longitude: "96"; latitude: "72"; height: "123"; }
+ ListElement{ longitude: "96"; latitude: "73"; height: "127"; }
+ ListElement{ longitude: "96"; latitude: "74"; height: "122"; }
+ ListElement{ longitude: "96"; latitude: "75"; height: "124"; }
+ ListElement{ longitude: "96"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "96"; latitude: "77"; height: "130"; }
+ ListElement{ longitude: "96"; latitude: "78"; height: "132"; }
+ ListElement{ longitude: "96"; latitude: "79"; height: "135"; }
+ ListElement{ longitude: "96"; latitude: "80"; height: "135"; }
+ ListElement{ longitude: "96"; latitude: "81"; height: "132"; }
+ ListElement{ longitude: "96"; latitude: "82"; height: "136"; }
+ ListElement{ longitude: "96"; latitude: "83"; height: "138"; }
+ ListElement{ longitude: "96"; latitude: "84"; height: "144"; }
+ ListElement{ longitude: "96"; latitude: "85"; height: "143"; }
+ ListElement{ longitude: "96"; latitude: "86"; height: "135"; }
+ ListElement{ longitude: "96"; latitude: "87"; height: "122"; }
+ ListElement{ longitude: "96"; latitude: "88"; height: "113"; }
+ ListElement{ longitude: "96"; latitude: "89"; height: "107"; }
+ ListElement{ longitude: "96"; latitude: "90"; height: "106"; }
+ ListElement{ longitude: "96"; latitude: "91"; height: "112"; }
+ ListElement{ longitude: "96"; latitude: "92"; height: "119"; }
+ ListElement{ longitude: "96"; latitude: "93"; height: "117"; }
+ ListElement{ longitude: "96"; latitude: "94"; height: "106"; }
+ ListElement{ longitude: "96"; latitude: "95"; height: "95"; }
+ ListElement{ longitude: "96"; latitude: "96"; height: "87"; }
+ ListElement{ longitude: "96"; latitude: "97"; height: "85"; }
+ ListElement{ longitude: "96"; latitude: "98"; height: "81"; }
+ ListElement{ longitude: "96"; latitude: "99"; height: "75"; }
+ ListElement{ longitude: "97"; latitude: "0"; height: "92"; }
+ ListElement{ longitude: "97"; latitude: "1"; height: "92"; }
+ ListElement{ longitude: "97"; latitude: "2"; height: "90"; }
+ ListElement{ longitude: "97"; latitude: "3"; height: "86"; }
+ ListElement{ longitude: "97"; latitude: "4"; height: "78"; }
+ ListElement{ longitude: "97"; latitude: "5"; height: "86"; }
+ ListElement{ longitude: "97"; latitude: "6"; height: "94"; }
+ ListElement{ longitude: "97"; latitude: "7"; height: "93"; }
+ ListElement{ longitude: "97"; latitude: "8"; height: "92"; }
+ ListElement{ longitude: "97"; latitude: "9"; height: "90"; }
+ ListElement{ longitude: "97"; latitude: "10"; height: "86"; }
+ ListElement{ longitude: "97"; latitude: "11"; height: "86"; }
+ ListElement{ longitude: "97"; latitude: "12"; height: "90"; }
+ ListElement{ longitude: "97"; latitude: "13"; height: "94"; }
+ ListElement{ longitude: "97"; latitude: "14"; height: "95"; }
+ ListElement{ longitude: "97"; latitude: "15"; height: "94"; }
+ ListElement{ longitude: "97"; latitude: "16"; height: "95"; }
+ ListElement{ longitude: "97"; latitude: "17"; height: "99"; }
+ ListElement{ longitude: "97"; latitude: "18"; height: "104"; }
+ ListElement{ longitude: "97"; latitude: "19"; height: "108"; }
+ ListElement{ longitude: "97"; latitude: "20"; height: "115"; }
+ ListElement{ longitude: "97"; latitude: "21"; height: "118"; }
+ ListElement{ longitude: "97"; latitude: "22"; height: "118"; }
+ ListElement{ longitude: "97"; latitude: "23"; height: "118"; }
+ ListElement{ longitude: "97"; latitude: "24"; height: "118"; }
+ ListElement{ longitude: "97"; latitude: "25"; height: "117"; }
+ ListElement{ longitude: "97"; latitude: "26"; height: "117"; }
+ ListElement{ longitude: "97"; latitude: "27"; height: "118"; }
+ ListElement{ longitude: "97"; latitude: "28"; height: "117"; }
+ ListElement{ longitude: "97"; latitude: "29"; height: "116"; }
+ ListElement{ longitude: "97"; latitude: "30"; height: "116"; }
+ ListElement{ longitude: "97"; latitude: "31"; height: "118"; }
+ ListElement{ longitude: "97"; latitude: "32"; height: "122"; }
+ ListElement{ longitude: "97"; latitude: "33"; height: "124"; }
+ ListElement{ longitude: "97"; latitude: "34"; height: "126"; }
+ ListElement{ longitude: "97"; latitude: "35"; height: "125"; }
+ ListElement{ longitude: "97"; latitude: "36"; height: "119"; }
+ ListElement{ longitude: "97"; latitude: "37"; height: "115"; }
+ ListElement{ longitude: "97"; latitude: "38"; height: "117"; }
+ ListElement{ longitude: "97"; latitude: "39"; height: "116"; }
+ ListElement{ longitude: "97"; latitude: "40"; height: "116"; }
+ ListElement{ longitude: "97"; latitude: "41"; height: "114"; }
+ ListElement{ longitude: "97"; latitude: "42"; height: "114"; }
+ ListElement{ longitude: "97"; latitude: "43"; height: "114"; }
+ ListElement{ longitude: "97"; latitude: "44"; height: "114"; }
+ ListElement{ longitude: "97"; latitude: "45"; height: "119"; }
+ ListElement{ longitude: "97"; latitude: "46"; height: "126"; }
+ ListElement{ longitude: "97"; latitude: "47"; height: "132"; }
+ ListElement{ longitude: "97"; latitude: "48"; height: "134"; }
+ ListElement{ longitude: "97"; latitude: "49"; height: "137"; }
+ ListElement{ longitude: "97"; latitude: "50"; height: "141"; }
+ ListElement{ longitude: "97"; latitude: "51"; height: "143"; }
+ ListElement{ longitude: "97"; latitude: "52"; height: "143"; }
+ ListElement{ longitude: "97"; latitude: "53"; height: "143"; }
+ ListElement{ longitude: "97"; latitude: "54"; height: "139"; }
+ ListElement{ longitude: "97"; latitude: "55"; height: "136"; }
+ ListElement{ longitude: "97"; latitude: "56"; height: "132"; }
+ ListElement{ longitude: "97"; latitude: "57"; height: "127"; }
+ ListElement{ longitude: "97"; latitude: "58"; height: "122"; }
+ ListElement{ longitude: "97"; latitude: "59"; height: "117"; }
+ ListElement{ longitude: "97"; latitude: "60"; height: "117"; }
+ ListElement{ longitude: "97"; latitude: "61"; height: "124"; }
+ ListElement{ longitude: "97"; latitude: "62"; height: "130"; }
+ ListElement{ longitude: "97"; latitude: "63"; height: "134"; }
+ ListElement{ longitude: "97"; latitude: "64"; height: "137"; }
+ ListElement{ longitude: "97"; latitude: "65"; height: "139"; }
+ ListElement{ longitude: "97"; latitude: "66"; height: "139"; }
+ ListElement{ longitude: "97"; latitude: "67"; height: "137"; }
+ ListElement{ longitude: "97"; latitude: "68"; height: "133"; }
+ ListElement{ longitude: "97"; latitude: "69"; height: "136"; }
+ ListElement{ longitude: "97"; latitude: "70"; height: "131"; }
+ ListElement{ longitude: "97"; latitude: "71"; height: "130"; }
+ ListElement{ longitude: "97"; latitude: "72"; height: "129"; }
+ ListElement{ longitude: "97"; latitude: "73"; height: "129"; }
+ ListElement{ longitude: "97"; latitude: "74"; height: "126"; }
+ ListElement{ longitude: "97"; latitude: "75"; height: "123"; }
+ ListElement{ longitude: "97"; latitude: "76"; height: "126"; }
+ ListElement{ longitude: "97"; latitude: "77"; height: "127"; }
+ ListElement{ longitude: "97"; latitude: "78"; height: "128"; }
+ ListElement{ longitude: "97"; latitude: "79"; height: "123"; }
+ ListElement{ longitude: "97"; latitude: "80"; height: "123"; }
+ ListElement{ longitude: "97"; latitude: "81"; height: "126"; }
+ ListElement{ longitude: "97"; latitude: "82"; height: "129"; }
+ ListElement{ longitude: "97"; latitude: "83"; height: "137"; }
+ ListElement{ longitude: "97"; latitude: "84"; height: "140"; }
+ ListElement{ longitude: "97"; latitude: "85"; height: "138"; }
+ ListElement{ longitude: "97"; latitude: "86"; height: "132"; }
+ ListElement{ longitude: "97"; latitude: "87"; height: "124"; }
+ ListElement{ longitude: "97"; latitude: "88"; height: "111"; }
+ ListElement{ longitude: "97"; latitude: "89"; height: "102"; }
+ ListElement{ longitude: "97"; latitude: "90"; height: "99"; }
+ ListElement{ longitude: "97"; latitude: "91"; height: "109"; }
+ ListElement{ longitude: "97"; latitude: "92"; height: "110"; }
+ ListElement{ longitude: "97"; latitude: "93"; height: "96"; }
+ ListElement{ longitude: "97"; latitude: "94"; height: "76"; }
+ ListElement{ longitude: "97"; latitude: "95"; height: "68"; }
+ ListElement{ longitude: "97"; latitude: "96"; height: "68"; }
+ ListElement{ longitude: "97"; latitude: "97"; height: "72"; }
+ ListElement{ longitude: "97"; latitude: "98"; height: "70"; }
+ ListElement{ longitude: "97"; latitude: "99"; height: "65"; }
+ ListElement{ longitude: "98"; latitude: "0"; height: "93"; }
+ ListElement{ longitude: "98"; latitude: "1"; height: "90"; }
+ ListElement{ longitude: "98"; latitude: "2"; height: "85"; }
+ ListElement{ longitude: "98"; latitude: "3"; height: "78"; }
+ ListElement{ longitude: "98"; latitude: "4"; height: "74"; }
+ ListElement{ longitude: "98"; latitude: "5"; height: "71"; }
+ ListElement{ longitude: "98"; latitude: "6"; height: "80"; }
+ ListElement{ longitude: "98"; latitude: "7"; height: "78"; }
+ ListElement{ longitude: "98"; latitude: "8"; height: "83"; }
+ ListElement{ longitude: "98"; latitude: "9"; height: "85"; }
+ ListElement{ longitude: "98"; latitude: "10"; height: "81"; }
+ ListElement{ longitude: "98"; latitude: "11"; height: "82"; }
+ ListElement{ longitude: "98"; latitude: "12"; height: "87"; }
+ ListElement{ longitude: "98"; latitude: "13"; height: "90"; }
+ ListElement{ longitude: "98"; latitude: "14"; height: "91"; }
+ ListElement{ longitude: "98"; latitude: "15"; height: "86"; }
+ ListElement{ longitude: "98"; latitude: "16"; height: "88"; }
+ ListElement{ longitude: "98"; latitude: "17"; height: "91"; }
+ ListElement{ longitude: "98"; latitude: "18"; height: "94"; }
+ ListElement{ longitude: "98"; latitude: "19"; height: "97"; }
+ ListElement{ longitude: "98"; latitude: "20"; height: "108"; }
+ ListElement{ longitude: "98"; latitude: "21"; height: "111"; }
+ ListElement{ longitude: "98"; latitude: "22"; height: "108"; }
+ ListElement{ longitude: "98"; latitude: "23"; height: "108"; }
+ ListElement{ longitude: "98"; latitude: "24"; height: "107"; }
+ ListElement{ longitude: "98"; latitude: "25"; height: "104"; }
+ ListElement{ longitude: "98"; latitude: "26"; height: "110"; }
+ ListElement{ longitude: "98"; latitude: "27"; height: "111"; }
+ ListElement{ longitude: "98"; latitude: "28"; height: "109"; }
+ ListElement{ longitude: "98"; latitude: "29"; height: "106"; }
+ ListElement{ longitude: "98"; latitude: "30"; height: "110"; }
+ ListElement{ longitude: "98"; latitude: "31"; height: "115"; }
+ ListElement{ longitude: "98"; latitude: "32"; height: "119"; }
+ ListElement{ longitude: "98"; latitude: "33"; height: "116"; }
+ ListElement{ longitude: "98"; latitude: "34"; height: "117"; }
+ ListElement{ longitude: "98"; latitude: "35"; height: "114"; }
+ ListElement{ longitude: "98"; latitude: "36"; height: "109"; }
+ ListElement{ longitude: "98"; latitude: "37"; height: "105"; }
+ ListElement{ longitude: "98"; latitude: "38"; height: "106"; }
+ ListElement{ longitude: "98"; latitude: "39"; height: "111"; }
+ ListElement{ longitude: "98"; latitude: "40"; height: "112"; }
+ ListElement{ longitude: "98"; latitude: "41"; height: "110"; }
+ ListElement{ longitude: "98"; latitude: "42"; height: "114"; }
+ ListElement{ longitude: "98"; latitude: "43"; height: "114"; }
+ ListElement{ longitude: "98"; latitude: "44"; height: "111"; }
+ ListElement{ longitude: "98"; latitude: "45"; height: "112"; }
+ ListElement{ longitude: "98"; latitude: "46"; height: "116"; }
+ ListElement{ longitude: "98"; latitude: "47"; height: "121"; }
+ ListElement{ longitude: "98"; latitude: "48"; height: "124"; }
+ ListElement{ longitude: "98"; latitude: "49"; height: "125"; }
+ ListElement{ longitude: "98"; latitude: "50"; height: "125"; }
+ ListElement{ longitude: "98"; latitude: "51"; height: "127"; }
+ ListElement{ longitude: "98"; latitude: "52"; height: "126"; }
+ ListElement{ longitude: "98"; latitude: "53"; height: "127"; }
+ ListElement{ longitude: "98"; latitude: "54"; height: "126"; }
+ ListElement{ longitude: "98"; latitude: "55"; height: "122"; }
+ ListElement{ longitude: "98"; latitude: "56"; height: "121"; }
+ ListElement{ longitude: "98"; latitude: "57"; height: "119"; }
+ ListElement{ longitude: "98"; latitude: "58"; height: "114"; }
+ ListElement{ longitude: "98"; latitude: "59"; height: "111"; }
+ ListElement{ longitude: "98"; latitude: "60"; height: "110"; }
+ ListElement{ longitude: "98"; latitude: "61"; height: "115"; }
+ ListElement{ longitude: "98"; latitude: "62"; height: "123"; }
+ ListElement{ longitude: "98"; latitude: "63"; height: "131"; }
+ ListElement{ longitude: "98"; latitude: "64"; height: "138"; }
+ ListElement{ longitude: "98"; latitude: "65"; height: "140"; }
+ ListElement{ longitude: "98"; latitude: "66"; height: "139"; }
+ ListElement{ longitude: "98"; latitude: "67"; height: "136"; }
+ ListElement{ longitude: "98"; latitude: "68"; height: "134"; }
+ ListElement{ longitude: "98"; latitude: "69"; height: "133"; }
+ ListElement{ longitude: "98"; latitude: "70"; height: "129"; }
+ ListElement{ longitude: "98"; latitude: "71"; height: "127"; }
+ ListElement{ longitude: "98"; latitude: "72"; height: "122"; }
+ ListElement{ longitude: "98"; latitude: "73"; height: "119"; }
+ ListElement{ longitude: "98"; latitude: "74"; height: "116"; }
+ ListElement{ longitude: "98"; latitude: "75"; height: "115"; }
+ ListElement{ longitude: "98"; latitude: "76"; height: "116"; }
+ ListElement{ longitude: "98"; latitude: "77"; height: "116"; }
+ ListElement{ longitude: "98"; latitude: "78"; height: "117"; }
+ ListElement{ longitude: "98"; latitude: "79"; height: "114"; }
+ ListElement{ longitude: "98"; latitude: "80"; height: "113"; }
+ ListElement{ longitude: "98"; latitude: "81"; height: "115"; }
+ ListElement{ longitude: "98"; latitude: "82"; height: "119"; }
+ ListElement{ longitude: "98"; latitude: "83"; height: "127"; }
+ ListElement{ longitude: "98"; latitude: "84"; height: "130"; }
+ ListElement{ longitude: "98"; latitude: "85"; height: "125"; }
+ ListElement{ longitude: "98"; latitude: "86"; height: "116"; }
+ ListElement{ longitude: "98"; latitude: "87"; height: "103"; }
+ ListElement{ longitude: "98"; latitude: "88"; height: "89"; }
+ ListElement{ longitude: "98"; latitude: "89"; height: "81"; }
+ ListElement{ longitude: "98"; latitude: "90"; height: "79"; }
+ ListElement{ longitude: "98"; latitude: "91"; height: "84"; }
+ ListElement{ longitude: "98"; latitude: "92"; height: "86"; }
+ ListElement{ longitude: "98"; latitude: "93"; height: "79"; }
+ ListElement{ longitude: "98"; latitude: "94"; height: "69"; }
+ ListElement{ longitude: "98"; latitude: "95"; height: "66"; }
+ ListElement{ longitude: "98"; latitude: "96"; height: "73"; }
+ ListElement{ longitude: "98"; latitude: "97"; height: "80"; }
+ ListElement{ longitude: "98"; latitude: "98"; height: "71"; }
+ ListElement{ longitude: "98"; latitude: "99"; height: "64"; }
+ ListElement{ longitude: "99"; latitude: "0"; height: "93"; }
+ ListElement{ longitude: "99"; latitude: "1"; height: "90"; }
+ ListElement{ longitude: "99"; latitude: "2"; height: "86"; }
+ ListElement{ longitude: "99"; latitude: "3"; height: "80"; }
+ ListElement{ longitude: "99"; latitude: "4"; height: "74"; }
+ ListElement{ longitude: "99"; latitude: "5"; height: "74"; }
+ ListElement{ longitude: "99"; latitude: "6"; height: "80"; }
+ ListElement{ longitude: "99"; latitude: "7"; height: "85"; }
+ ListElement{ longitude: "99"; latitude: "8"; height: "85"; }
+ ListElement{ longitude: "99"; latitude: "9"; height: "84"; }
+ ListElement{ longitude: "99"; latitude: "10"; height: "83"; }
+ ListElement{ longitude: "99"; latitude: "11"; height: "79"; }
+ ListElement{ longitude: "99"; latitude: "12"; height: "77"; }
+ ListElement{ longitude: "99"; latitude: "13"; height: "80"; }
+ ListElement{ longitude: "99"; latitude: "14"; height: "86"; }
+ ListElement{ longitude: "99"; latitude: "15"; height: "86"; }
+ ListElement{ longitude: "99"; latitude: "16"; height: "84"; }
+ ListElement{ longitude: "99"; latitude: "17"; height: "85"; }
+ ListElement{ longitude: "99"; latitude: "18"; height: "90"; }
+ ListElement{ longitude: "99"; latitude: "19"; height: "95"; }
+ ListElement{ longitude: "99"; latitude: "20"; height: "99"; }
+ ListElement{ longitude: "99"; latitude: "21"; height: "101"; }
+ ListElement{ longitude: "99"; latitude: "22"; height: "102"; }
+ ListElement{ longitude: "99"; latitude: "23"; height: "103"; }
+ ListElement{ longitude: "99"; latitude: "24"; height: "106"; }
+ ListElement{ longitude: "99"; latitude: "25"; height: "110"; }
+ ListElement{ longitude: "99"; latitude: "26"; height: "113"; }
+ ListElement{ longitude: "99"; latitude: "27"; height: "115"; }
+ ListElement{ longitude: "99"; latitude: "28"; height: "115"; }
+ ListElement{ longitude: "99"; latitude: "29"; height: "113"; }
+ ListElement{ longitude: "99"; latitude: "30"; height: "112"; }
+ ListElement{ longitude: "99"; latitude: "31"; height: "115"; }
+ ListElement{ longitude: "99"; latitude: "32"; height: "117"; }
+ ListElement{ longitude: "99"; latitude: "33"; height: "118"; }
+ ListElement{ longitude: "99"; latitude: "34"; height: "117"; }
+ ListElement{ longitude: "99"; latitude: "35"; height: "115"; }
+ ListElement{ longitude: "99"; latitude: "36"; height: "112"; }
+ ListElement{ longitude: "99"; latitude: "37"; height: "110"; }
+ ListElement{ longitude: "99"; latitude: "38"; height: "114"; }
+ ListElement{ longitude: "99"; latitude: "39"; height: "120"; }
+ ListElement{ longitude: "99"; latitude: "40"; height: "123"; }
+ ListElement{ longitude: "99"; latitude: "41"; height: "124"; }
+ ListElement{ longitude: "99"; latitude: "42"; height: "122"; }
+ ListElement{ longitude: "99"; latitude: "43"; height: "121"; }
+ ListElement{ longitude: "99"; latitude: "44"; height: "118"; }
+ ListElement{ longitude: "99"; latitude: "45"; height: "117"; }
+ ListElement{ longitude: "99"; latitude: "46"; height: "119"; }
+ ListElement{ longitude: "99"; latitude: "47"; height: "123"; }
+ ListElement{ longitude: "99"; latitude: "48"; height: "125"; }
+ ListElement{ longitude: "99"; latitude: "49"; height: "125"; }
+ ListElement{ longitude: "99"; latitude: "50"; height: "124"; }
+ ListElement{ longitude: "99"; latitude: "51"; height: "124"; }
+ ListElement{ longitude: "99"; latitude: "52"; height: "124"; }
+ ListElement{ longitude: "99"; latitude: "53"; height: "124"; }
+ ListElement{ longitude: "99"; latitude: "54"; height: "124"; }
+ ListElement{ longitude: "99"; latitude: "55"; height: "122"; }
+ ListElement{ longitude: "99"; latitude: "56"; height: "122"; }
+ ListElement{ longitude: "99"; latitude: "57"; height: "121"; }
+ ListElement{ longitude: "99"; latitude: "58"; height: "120"; }
+ ListElement{ longitude: "99"; latitude: "59"; height: "116"; }
+ ListElement{ longitude: "99"; latitude: "60"; height: "112"; }
+ ListElement{ longitude: "99"; latitude: "61"; height: "113"; }
+ ListElement{ longitude: "99"; latitude: "62"; height: "121"; }
+ ListElement{ longitude: "99"; latitude: "63"; height: "128"; }
+ ListElement{ longitude: "99"; latitude: "64"; height: "132"; }
+ ListElement{ longitude: "99"; latitude: "65"; height: "130"; }
+ ListElement{ longitude: "99"; latitude: "66"; height: "130"; }
+ ListElement{ longitude: "99"; latitude: "67"; height: "128"; }
+ ListElement{ longitude: "99"; latitude: "68"; height: "126"; }
+ ListElement{ longitude: "99"; latitude: "69"; height: "127"; }
+ ListElement{ longitude: "99"; latitude: "70"; height: "126"; }
+ ListElement{ longitude: "99"; latitude: "71"; height: "122"; }
+ ListElement{ longitude: "99"; latitude: "72"; height: "120"; }
+ ListElement{ longitude: "99"; latitude: "73"; height: "120"; }
+ ListElement{ longitude: "99"; latitude: "74"; height: "121"; }
+ ListElement{ longitude: "99"; latitude: "75"; height: "121"; }
+ ListElement{ longitude: "99"; latitude: "76"; height: "121"; }
+ ListElement{ longitude: "99"; latitude: "77"; height: "120"; }
+ ListElement{ longitude: "99"; latitude: "78"; height: "120"; }
+ ListElement{ longitude: "99"; latitude: "79"; height: "119"; }
+ ListElement{ longitude: "99"; latitude: "80"; height: "116"; }
+ ListElement{ longitude: "99"; latitude: "81"; height: "113"; }
+ ListElement{ longitude: "99"; latitude: "82"; height: "111"; }
+ ListElement{ longitude: "99"; latitude: "83"; height: "107"; }
+ ListElement{ longitude: "99"; latitude: "84"; height: "109"; }
+ ListElement{ longitude: "99"; latitude: "85"; height: "107"; }
+ ListElement{ longitude: "99"; latitude: "86"; height: "98"; }
+ ListElement{ longitude: "99"; latitude: "87"; height: "87"; }
+ ListElement{ longitude: "99"; latitude: "88"; height: "75"; }
+ ListElement{ longitude: "99"; latitude: "89"; height: "68"; }
+ ListElement{ longitude: "99"; latitude: "90"; height: "70"; }
+ ListElement{ longitude: "99"; latitude: "91"; height: "81"; }
+ ListElement{ longitude: "99"; latitude: "92"; height: "88"; }
+ ListElement{ longitude: "99"; latitude: "93"; height: "89"; }
+ ListElement{ longitude: "99"; latitude: "94"; height: "87"; }
+ ListElement{ longitude: "99"; latitude: "95"; height: "87"; }
+ ListElement{ longitude: "99"; latitude: "96"; height: "88"; }
+ ListElement{ longitude: "99"; latitude: "97"; height: "84"; }
+ ListElement{ longitude: "99"; latitude: "98"; height: "75"; }
+ ListElement{ longitude: "99"; latitude: "99"; height: "67"; }
+ }
+}
diff --git a/examples/qmlsurface/qml/qmlsurface/main.qml b/examples/qmlsurface/qml/qmlsurface/main.qml
new file mode 100644
index 00000000..160fa9b6
--- /dev/null
+++ b/examples/qmlsurface/qml/qmlsurface/main.qml
@@ -0,0 +1,166 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+import QtQuick 2.1
+import com.digia.QtDataVisualization 1.0
+import "."
+
+Item {
+ id: mainview
+ width: 1280
+ height: 720
+ visible: true
+
+ Data {
+ id: surfaceData
+ }
+
+ Item {
+ id: surfaceView
+ width: mainview.width - surfaceGridToggle.width
+ height: mainview.height
+ anchors.right: mainview.right;
+
+ //! [0]
+ ColorGradient {
+ id: surfaceGradient
+ ColorGradientStop { position: 0.0; color: "darkslategray" }
+ ColorGradientStop { id: middleGradient; position: 0.55; color: "peru" }
+ ColorGradientStop { position: 1.0; color: "red" }
+ }
+ //! [0]
+
+ Surface3D {
+ id: surfaceplot
+ width: surfaceView.width
+ height: surfaceView.height
+ theme: AbstractGraph3D.ThemeStoneMoss
+ shadowQuality: AbstractGraph3D.ShadowQualityMedium
+ selectionMode: AbstractGraph3D.SelectionModeSliceRow
+ smoothSurfaceEnabled: true
+ surfaceGridEnabled: false
+ font.family: "STCaiyun"
+ font.pointSize: 35
+ scene.activeCamera.cameraPreset: AbstractGraph3D.CameraPresetIsometricLeft
+ dataProxy: surfaceData.heightProxy
+ axisY.min: 0.0
+ axisY.max: 250.0
+ axisX.segmentCount: 10
+ axisX.subSegmentCount: 2
+ axisX.labelFormat: "%i"
+ axisZ.segmentCount: 10
+ axisZ.subSegmentCount: 2
+ axisZ.labelFormat: "%i"
+ axisY.segmentCount: 5
+ axisY.subSegmentCount: 2
+ axisY.labelFormat: "%i"
+ gradient: surfaceGradient
+ }
+ }
+
+ NewButton {
+ id: surfaceGridToggle
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: 200
+ text: "Show Surface Grid"
+ //! [1]
+ onClicked: {
+ if (surfaceplot.surfaceGridEnabled == false) {
+ surfaceplot.surfaceGridEnabled = true;
+ text = "Hide Surface Grid"
+ } else {
+ surfaceplot.surfaceGridEnabled = false;
+ text = "Show Surface Grid"
+ }
+ }
+ //! [1]
+ }
+
+ NewButton {
+ id: smoothSurfaceToggle
+ anchors.top: surfaceGridToggle.bottom
+ width: surfaceGridToggle.width
+ text: "Show Flat"
+ //! [2]
+ onClicked: {
+ if (surfaceplot.smoothSurfaceEnabled == true) {
+ surfaceplot.smoothSurfaceEnabled = false;
+ text = "Show Smooth"
+ } else {
+ surfaceplot.smoothSurfaceEnabled = true;
+ text = "Show Flat"
+ }
+ }
+ //! [2]
+ }
+
+ NewButton {
+ id: backgroundToggle
+ anchors.top: smoothSurfaceToggle.bottom
+ width: smoothSurfaceToggle.width
+ text: "Hide Background"
+ onClicked: {
+ if (surfaceplot.backgroundVisible == true) {
+ surfaceplot.backgroundVisible = false;
+ text = "Show Background"
+ } else {
+ surfaceplot.backgroundVisible = true;
+ text = "Hide Background"
+ }
+ }
+ }
+
+ NewButton {
+ id: gridToggle
+ anchors.top: backgroundToggle.bottom
+ width: backgroundToggle.width
+ text: "Hide Grid"
+ onClicked: {
+ if (surfaceplot.gridVisible == true) {
+ surfaceplot.gridVisible = false;
+ text = "Show Grid"
+ } else {
+ surfaceplot.gridVisible = true;
+ text = "Hide Grid"
+ }
+ }
+ }
+
+ NewButton {
+ id: proxyToggle
+ anchors.top: gridToggle.bottom
+ width: gridToggle.width
+ text: "Switch to Item Model Proxy"
+ //! [3]
+ onClicked: {
+ if (surfaceplot.dataProxy === surfaceData.heightProxy) {
+ surfaceplot.axisY.max = 500.0
+ surfaceplot.dataProxy = surfaceData.proxy
+ middleGradient.position = 0.25
+ text = "Switch to Height Map Proxy"
+ } else {
+ surfaceplot.axisY.max = 250.0
+ surfaceplot.dataProxy = surfaceData.heightProxy
+ middleGradient.position = 0.55
+ text = "Switch to Item Model Proxy"
+ }
+ }
+ //! [3]
+ }
+}
diff --git a/examples/qmlbarchart/doc/src/qmlbarchart.qdoc b/examples/qmlsurface/qml/qmlsurface/newbutton.qml
index becc5d8b..895db183 100644
--- a/examples/qmlbarchart/doc/src/qmlbarchart.qdoc
+++ b/examples/qmlsurface/qml/qmlsurface/newbutton.qml
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -16,14 +16,28 @@
**
****************************************************************************/
-/*!
- \example qmlbarchart
- \title Qt Quick 2 Barchart Example
+import QtQuick 2.1
+import QtQuick.Controls 1.0
- The Qt Quick 2 barchart example shows how to make a simple 3D bar chart using Q3DBars using Qt
- Quick 2.
+Item {
+ id: newbutton
- \image qmlbarchart-example.png
+ property alias text: buttonText.text
- TODO
-*/
+ signal clicked
+
+ height: 80
+
+ Button {
+ width: parent.width
+ height: parent.height
+ Text {
+ id: buttonText
+ wrapMode: Text.WordWrap
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ anchors.fill: parent
+ }
+ onClicked: newbutton.clicked()
+ }
+}
diff --git a/examples/qmlbarchart/qmlbarchart.desktop b/examples/qmlsurface/qmlsurface.desktop
index c01705df..66dd0a72 100644
--- a/examples/qmlbarchart/qmlbarchart.desktop
+++ b/examples/qmlsurface/qmlsurface.desktop
@@ -3,9 +3,9 @@ Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
-Name=qmlbarchart
-Exec=/opt/qmlbarchart/bin/qmlbarchart
-Icon=qmlbarchart64
+Name=qmlsurface
+Exec=/opt/qmlsurface/bin/qmlsurface
+Icon=qmlsurface64
X-Window-Icon=
X-HildonDesk-ShowInToolbar=true
X-Osso-Type=application/x-executable
diff --git a/examples/qmlbarchart/qmlbarchart.pro b/examples/qmlsurface/qmlsurface.pro
index ef609ef6..64c72cf7 100644
--- a/examples/qmlbarchart/qmlbarchart.pro
+++ b/examples/qmlsurface/qmlsurface.pro
@@ -2,28 +2,24 @@
error( "Couldn't find the examples.pri file!" )
}
+QT += widgets
+
# Add more folders to ship with the application, here
-folder_01.source = qml/qmlbarchart
+folder_01.source = qml/qmlsurface
folder_01.target = qml
DEPLOYMENTFOLDERS = folder_01
# Additional import path used to resolve QML modules in Creator's code model
QML_IMPORT_PATH =
-# If your application uses the Qt Mobility libraries, uncomment the following
-# lines and add the respective components to the MOBILITY variable.
-# CONFIG += mobility
-# MOBILITY +=
-
# The .cpp file which was generated for your project. Feel free to hack it.
SOURCES += main.cpp
-# Installation path
-# target.path =
-
# Please do not modify the following two lines. Required for deployment.
include(qtquick2applicationviewer/qtquick2applicationviewer.pri)
qtcAddDeployment()
-RESOURCES += \
- qmlbarchart.qrc
+RESOURCES += qmlsurface.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/*
diff --git a/examples/qmlsurface/qmlsurface.qrc b/examples/qmlsurface/qmlsurface.qrc
new file mode 100644
index 00000000..d0745b94
--- /dev/null
+++ b/examples/qmlsurface/qmlsurface.qrc
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/qml">
+ <file alias="main.qml">qml/qmlsurface/main.qml</file>
+ <file alias="Data.qml">qml/qmlsurface/data.qml</file>
+ <file alias="NewButton.qml">qml/qmlsurface/newbutton.qml</file>
+ </qresource>
+ <qresource prefix="/heightmaps">
+ <file alias="image">heightmap.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/qmlmaps/qmlmaps64.png b/examples/qmlsurface/qmlsurface64.png
index 707d5c4e..707d5c4e 100644
--- a/examples/qmlmaps/qmlmaps64.png
+++ b/examples/qmlsurface/qmlsurface64.png
Binary files differ
diff --git a/examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.cpp b/examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.cpp
index 10709d7a..10709d7a 100644
--- a/examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.cpp
+++ b/examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.cpp
diff --git a/examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.h b/examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.h
index cf66f140..cf66f140 100644
--- a/examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.h
+++ b/examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.h
diff --git a/examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.pri b/examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.pri
index e5f7990f..a071e63d 100644
--- a/examples/qmlmaps/qtquick2applicationviewer/qtquick2applicationviewer.pri
+++ b/examples/qmlsurface/qtquick2applicationviewer/qtquick2applicationviewer.pri
@@ -61,16 +61,6 @@ android-no-sdk {
export($$itempath)
INSTALLS += $$item
}
-
- x86 {
- target.path = /libs/x86
- } else: armeabi-v7a {
- target.path = /libs/armeabi-v7a
- } else {
- target.path = /libs/armeabi
- }
-
- export(target.path)
INSTALLS += target
} else:win32 {
copyCommand =
diff --git a/examples/rainfall/data/raindata.txt b/examples/rainfall/data/raindata.txt
deleted file mode 100644
index 7f581bff..00000000
--- a/examples/rainfall/data/raindata.txt
+++ /dev/null
@@ -1,1358 +0,0 @@
-# Fictitious rainfall per month from 1900 to 2012 in three cities
-# Format: year, month, city 1 rainfall, city 2 rainfall, city 3 rainfall
-1900, 1, 58, 60, 40
-1900, 2, 48, 101, 47
-1900, 3, 58, 90, 25
-1900, 4, 59, 81, 33
-1900, 5, 51, 90, 24
-1900, 6, 91, 92, 55
-1900, 7, 92, 124, 34
-1900, 8, 89, 124, 30
-1900, 9, 50, 89, 16
-1900, 10, 69, 100, 55
-1900, 11, 78, 86, 15
-1900, 12, 63, 62, 30
-1901, 1, 34, 56, 50
-1901, 2, 31, 93, 54
-1901, 3, 72, 98, 34
-1901, 4, 88, 104, 18
-1901, 5, 66, 107, 20
-1901, 6, 121, 123, 34
-1901, 7, 100, 133, 46
-1901, 8, 129, 90, 64
-1901, 9, 98, 75, 56
-1901, 10, 77, 84, 56
-1901, 11, 42, 62, 38
-1901, 12, 62, 94, 22
-1902, 1, 58, 80, 37
-1902, 2, 43, 56, 16
-1902, 3, 53, 92, 9
-1902, 4, 81, 87, 33
-1902, 5, 85, 86, 60
-1902, 6, 98, 98, 32
-1902, 7, 100, 100, 54
-1902, 8, 107, 116, 69
-1902, 9, 86, 101, 43
-1902, 10, 71, 112, 34
-1902, 11, 43, 61, 7
-1902, 12, 30, 77, 21
-1903, 1, 38, 89, 12
-1903, 2, 43, 95, 29
-1903, 3, 67, 81, 49
-1903, 4, 59, 104, 32
-1903, 5, 79, 80, 64
-1903, 6, 117, 123, 53
-1903, 7, 104, 101, 49
-1903, 8, 111, 137, 56
-1903, 9, 68, 72, 23
-1903, 10, 81, 100, 62
-1903, 11, 68, 67, 50
-1903, 12, 34, 76, 42
-1904, 1, 65, 66, 33
-1904, 2, 41, 95, 18
-1904, 3, 46, 101, 31
-1904, 4, 53, 72, 32
-1904, 5, 82, 104, 52
-1904, 6, 123, 102, 32
-1904, 7, 109, 127, 30
-1904, 8, 100, 114, 67
-1904, 9, 91, 99, 45
-1904, 10, 79, 84, 62
-1904, 11, 38, 86, 30
-1904, 12, 71, 56, 14
-1905, 1, 59, 64, 39
-1905, 2, 75, 73, 32
-1905, 3, 30, 102, 36
-1905, 4, 86, 83, 39
-1905, 5, 93, 66, 31
-1905, 6, 118, 137, 36
-1905, 7, 129, 95, 31
-1905, 8, 104, 128, 56
-1905, 9, 59, 87, 61
-1905, 10, 54, 86, 56
-1905, 11, 46, 78, 51
-1905, 12, 57, 94, 47
-1906, 1, 75, 79, 17
-1906, 2, 72, 91, 44
-1906, 3, 52, 77, 32
-1906, 4, 63, 94, 41
-1906, 5, 83, 92, 48
-1906, 6, 121, 98, 65
-1906, 7, 93, 129, 60
-1906, 8, 104, 100, 48
-1906, 9, 90, 102, 59
-1906, 10, 58, 74, 42
-1906, 11, 52, 57, 9
-1906, 12, 53, 87, 28
-1907, 1, 74, 82, 50
-1907, 2, 45, 76, 10
-1907, 3, 38, 62, 37
-1907, 4, 58, 93, 59
-1907, 5, 66, 69, 21
-1907, 6, 102, 112, 42
-1907, 7, 125, 129, 30
-1907, 8, 108, 128, 51
-1907, 9, 81, 98, 23
-1907, 10, 58, 84, 45
-1907, 11, 68, 70, 51
-1907, 12, 70, 76, 29
-1908, 1, 49, 75, 11
-1908, 2, 56, 73, 45
-1908, 3, 79, 93, 29
-1908, 4, 93, 82, 39
-1908, 5, 70, 87, 52
-1908, 6, 113, 107, 34
-1908, 7, 120, 97, 40
-1908, 8, 92, 95, 74
-1908, 9, 88, 83, 16
-1908, 10, 57, 67, 33
-1908, 11, 30, 55, 12
-1908, 12, 37, 85, 54
-1909, 1, 67, 79, 47
-1909, 2, 68, 101, 7
-1909, 3, 59, 94, 14
-1909, 4, 58, 93, 49
-1909, 5, 79, 71, 32
-1909, 6, 129, 126, 68
-1909, 7, 82, 138, 52
-1909, 8, 96, 124, 73
-1909, 9, 85, 72, 27
-1909, 10, 92, 107, 61
-1909, 11, 42, 97, 51
-1909, 12, 31, 96, 33
-1910, 1, 71, 104, 27
-1910, 2, 76, 103, 6
-1910, 3, 53, 70, 13
-1910, 4, 71, 102, 37
-1910, 5, 63, 96, 34
-1910, 6, 112, 106, 59
-1910, 7, 81, 94, 28
-1910, 8, 98, 107, 26
-1910, 9, 63, 77, 21
-1910, 10, 60, 72, 39
-1910, 11, 36, 66, 12
-1910, 12, 62, 99, 36
-1911, 1, 78, 101, 48
-1911, 2, 35, 61, 38
-1911, 3, 48, 86, 24
-1911, 4, 78, 93, 31
-1911, 5, 90, 92, 49
-1911, 6, 89, 115, 64
-1911, 7, 129, 90, 46
-1911, 8, 88, 116, 35
-1911, 9, 91, 109, 64
-1911, 10, 95, 78, 45
-1911, 11, 55, 103, 8
-1911, 12, 36, 79, 10
-1912, 1, 30, 90, 15
-1912, 2, 49, 76, 37
-1912, 3, 79, 68, 45
-1912, 4, 74, 90, 52
-1912, 5, 61, 99, 30
-1912, 6, 112, 93, 39
-1912, 7, 88, 110, 48
-1912, 8, 99, 138, 47
-1912, 9, 92, 93, 56
-1912, 10, 86, 98, 46
-1912, 11, 31, 104, 14
-1912, 12, 60, 101, 19
-1913, 1, 71, 103, 37
-1913, 2, 42, 104, 26
-1913, 3, 68, 66, 31
-1913, 4, 81, 108, 57
-1913, 5, 77, 88, 64
-1913, 6, 98, 94, 46
-1913, 7, 127, 111, 36
-1913, 8, 91, 95, 48
-1913, 9, 51, 110, 23
-1913, 10, 77, 73, 46
-1913, 11, 36, 103, 11
-1913, 12, 45, 66, 40
-1914, 1, 55, 78, 21
-1914, 2, 40, 80, 6
-1914, 3, 71, 84, 12
-1914, 4, 56, 111, 23
-1914, 5, 79, 84, 17
-1914, 6, 124, 105, 62
-1914, 7, 121, 95, 68
-1914, 8, 81, 121, 37
-1914, 9, 64, 65, 52
-1914, 10, 56, 106, 27
-1914, 11, 53, 97, 52
-1914, 12, 75, 104, 39
-1915, 1, 37, 86, 6
-1915, 2, 74, 85, 30
-1915, 3, 75, 77, 49
-1915, 4, 72, 104, 37
-1915, 5, 88, 95, 41
-1915, 6, 111, 122, 53
-1915, 7, 112, 108, 43
-1915, 8, 119, 107, 51
-1915, 9, 85, 95, 43
-1915, 10, 76, 69, 48
-1915, 11, 42, 88, 48
-1915, 12, 42, 68, 13
-1916, 1, 70, 100, 30
-1916, 2, 64, 77, 10
-1916, 3, 45, 104, 26
-1916, 4, 74, 98, 53
-1916, 5, 52, 86, 26
-1916, 6, 105, 139, 56
-1916, 7, 123, 90, 36
-1916, 8, 87, 99, 32
-1916, 9, 73, 107, 30
-1916, 10, 79, 109, 51
-1916, 11, 45, 69, 43
-1916, 12, 62, 85, 11
-1917, 1, 73, 87, 5
-1917, 2, 61, 102, 18
-1917, 3, 48, 71, 50
-1917, 4, 83, 95, 33
-1917, 5, 97, 102, 38
-1917, 6, 117, 114, 66
-1917, 7, 127, 107, 66
-1917, 8, 120, 101, 36
-1917, 9, 79, 102, 44
-1917, 10, 56, 114, 38
-1917, 11, 66, 69, 36
-1917, 12, 33, 71, 52
-1918, 1, 67, 76, 42
-1918, 2, 71, 95, 33
-1918, 3, 51, 56, 28
-1918, 4, 95, 66, 50
-1918, 5, 77, 92, 51
-1918, 6, 91, 92, 64
-1918, 7, 103, 97, 51
-1918, 8, 90, 116, 55
-1918, 9, 72, 108, 34
-1918, 10, 60, 76, 55
-1918, 11, 63, 100, 44
-1918, 12, 30, 65, 12
-1919, 1, 58, 89, 48
-1919, 2, 45, 102, 29
-1919, 3, 48, 101, 47
-1919, 4, 68, 105, 64
-1919, 5, 71, 112, 18
-1919, 6, 129, 90, 73
-1919, 7, 120, 95, 73
-1919, 8, 96, 109, 35
-1919, 9, 70, 92, 20
-1919, 10, 61, 90, 41
-1919, 11, 37, 103, 6
-1919, 12, 70, 95, 25
-1920, 1, 43, 86, 52
-1920, 2, 69, 87, 51
-1920, 3, 61, 79, 27
-1920, 4, 65, 103, 51
-1920, 5, 60, 66, 21
-1920, 6, 80, 129, 50
-1920, 7, 106, 127, 56
-1920, 8, 110, 120, 39
-1920, 9, 71, 110, 64
-1920, 10, 79, 78, 58
-1920, 11, 51, 69, 41
-1920, 12, 56, 83, 8
-1921, 1, 65, 94, 10
-1921, 2, 32, 61, 44
-1921, 3, 76, 75, 24
-1921, 4, 52, 76, 55
-1921, 5, 50, 81, 46
-1921, 6, 128, 123, 48
-1921, 7, 92, 122, 38
-1921, 8, 102, 107, 50
-1921, 9, 93, 88, 44
-1921, 10, 96, 92, 24
-1921, 11, 64, 90, 38
-1921, 12, 34, 58, 38
-1922, 1, 75, 68, 50
-1922, 2, 40, 89, 29
-1922, 3, 31, 72, 46
-1922, 4, 80, 101, 22
-1922, 5, 94, 89, 61
-1922, 6, 85, 100, 65
-1922, 7, 111, 132, 32
-1922, 8, 83, 110, 45
-1922, 9, 81, 90, 32
-1922, 10, 60, 88, 22
-1922, 11, 45, 59, 37
-1922, 12, 34, 73, 36
-1923, 1, 46, 92, 47
-1923, 2, 75, 73, 5
-1923, 3, 58, 65, 21
-1923, 4, 83, 99, 47
-1923, 5, 64, 71, 37
-1923, 6, 124, 120, 57
-1923, 7, 114, 132, 32
-1923, 8, 113, 136, 56
-1923, 9, 54, 91, 43
-1923, 10, 57, 107, 26
-1923, 11, 75, 85, 43
-1923, 12, 38, 71, 29
-1924, 1, 66, 95, 49
-1924, 2, 72, 92, 48
-1924, 3, 34, 86, 17
-1924, 4, 58, 69, 23
-1924, 5, 77, 71, 25
-1924, 6, 117, 125, 27
-1924, 7, 105, 105, 33
-1924, 8, 83, 124, 25
-1924, 9, 99, 107, 57
-1924, 10, 55, 75, 59
-1924, 11, 47, 93, 5
-1924, 12, 71, 73, 46
-1925, 1, 30, 78, 41
-1925, 2, 33, 59, 48
-1925, 3, 39, 59, 8
-1925, 4, 82, 82, 35
-1925, 5, 65, 76, 21
-1925, 6, 99, 97, 62
-1925, 7, 82, 104, 63
-1925, 8, 116, 111, 67
-1925, 9, 97, 82, 25
-1925, 10, 63, 78, 55
-1925, 11, 32, 86, 50
-1925, 12, 52, 63, 13
-1926, 1, 76, 94, 52
-1926, 2, 50, 62, 34
-1926, 3, 41, 95, 52
-1926, 4, 84, 68, 17
-1926, 5, 52, 76, 33
-1926, 6, 97, 125, 49
-1926, 7, 92, 137, 37
-1926, 8, 90, 127, 30
-1926, 9, 60, 98, 42
-1926, 10, 54, 113, 33
-1926, 11, 62, 91, 52
-1926, 12, 62, 87, 48
-1927, 1, 54, 64, 30
-1927, 2, 60, 99, 30
-1927, 3, 45, 81, 36
-1927, 4, 61, 82, 58
-1927, 5, 57, 65, 57
-1927, 6, 125, 90, 56
-1927, 7, 104, 132, 68
-1927, 8, 127, 96, 66
-1927, 9, 77, 96, 15
-1927, 10, 68, 95, 55
-1927, 11, 55, 76, 38
-1927, 12, 78, 82, 36
-1928, 1, 67, 56, 45
-1928, 2, 51, 96, 51
-1928, 3, 63, 72, 15
-1928, 4, 85, 85, 30
-1928, 5, 54, 72, 46
-1928, 6, 90, 100, 26
-1928, 7, 103, 133, 29
-1928, 8, 94, 110, 29
-1928, 9, 71, 103, 63
-1928, 10, 79, 69, 62
-1928, 11, 49, 55, 24
-1928, 12, 33, 63, 12
-1929, 1, 48, 62, 20
-1929, 2, 77, 62, 51
-1929, 3, 70, 75, 8
-1929, 4, 83, 81, 23
-1929, 5, 64, 92, 56
-1929, 6, 126, 106, 35
-1929, 7, 96, 118, 45
-1929, 8, 80, 120, 46
-1929, 9, 94, 88, 62
-1929, 10, 50, 102, 33
-1929, 11, 62, 76, 47
-1929, 12, 70, 68, 33
-1930, 1, 51, 100, 30
-1930, 2, 60, 57, 46
-1930, 3, 65, 78, 38
-1930, 4, 70, 67, 37
-1930, 5, 83, 106, 62
-1930, 6, 127, 126, 51
-1930, 7, 108, 137, 61
-1930, 8, 81, 117, 69
-1930, 9, 51, 93, 37
-1930, 10, 56, 78, 63
-1930, 11, 38, 65, 18
-1930, 12, 32, 72, 19
-1931, 1, 76, 57, 15
-1931, 2, 62, 71, 53
-1931, 3, 32, 70, 25
-1931, 4, 76, 96, 51
-1931, 5, 85, 76, 61
-1931, 6, 112, 111, 57
-1931, 7, 85, 108, 42
-1931, 8, 125, 114, 29
-1931, 9, 89, 92, 27
-1931, 10, 95, 83, 19
-1931, 11, 34, 103, 25
-1931, 12, 33, 102, 50
-1932, 1, 38, 87, 6
-1932, 2, 66, 101, 15
-1932, 3, 40, 63, 27
-1932, 4, 60, 107, 15
-1932, 5, 98, 83, 27
-1932, 6, 122, 104, 48
-1932, 7, 92, 137, 46
-1932, 8, 104, 129, 29
-1932, 9, 63, 95, 39
-1932, 10, 76, 83, 35
-1932, 11, 62, 65, 43
-1932, 12, 75, 78, 7
-1933, 1, 71, 90, 7
-1933, 2, 72, 67, 32
-1933, 3, 32, 102, 25
-1933, 4, 67, 107, 39
-1933, 5, 78, 95, 43
-1933, 6, 115, 104, 33
-1933, 7, 127, 135, 74
-1933, 8, 99, 137, 52
-1933, 9, 57, 94, 51
-1933, 10, 76, 96, 28
-1933, 11, 40, 70, 12
-1933, 12, 30, 64, 12
-1934, 1, 70, 62, 35
-1934, 2, 34, 71, 7
-1934, 3, 66, 96, 7
-1934, 4, 60, 75, 36
-1934, 5, 67, 110, 15
-1934, 6, 93, 124, 31
-1934, 7, 123, 109, 69
-1934, 8, 80, 97, 57
-1934, 9, 69, 82, 51
-1934, 10, 95, 67, 53
-1934, 11, 61, 65, 24
-1934, 12, 71, 82, 14
-1935, 1, 53, 59, 46
-1935, 2, 36, 76, 7
-1935, 3, 66, 102, 7
-1935, 4, 80, 85, 55
-1935, 5, 65, 104, 30
-1935, 6, 86, 134, 68
-1935, 7, 128, 109, 44
-1935, 8, 117, 111, 45
-1935, 9, 60, 72, 53
-1935, 10, 56, 83, 62
-1935, 11, 74, 69, 42
-1935, 12, 49, 100, 11
-1936, 1, 38, 64, 28
-1936, 2, 67, 101, 39
-1936, 3, 33, 65, 54
-1936, 4, 74, 110, 25
-1936, 5, 62, 69, 39
-1936, 6, 107, 101, 73
-1936, 7, 102, 90, 47
-1936, 8, 88, 135, 47
-1936, 9, 62, 88, 32
-1936, 10, 96, 102, 19
-1936, 11, 72, 59, 51
-1936, 12, 56, 66, 45
-1937, 1, 50, 80, 23
-1937, 2, 56, 86, 39
-1937, 3, 30, 79, 16
-1937, 4, 69, 100, 19
-1937, 5, 99, 114, 22
-1937, 6, 128, 92, 33
-1937, 7, 128, 98, 44
-1937, 8, 92, 133, 56
-1937, 9, 67, 89, 17
-1937, 10, 79, 89, 40
-1937, 11, 48, 58, 36
-1937, 12, 79, 96, 51
-1938, 1, 78, 85, 34
-1938, 2, 41, 67, 5
-1938, 3, 41, 57, 45
-1938, 4, 88, 113, 16
-1938, 5, 73, 78, 28
-1938, 6, 92, 100, 42
-1938, 7, 118, 124, 68
-1938, 8, 89, 105, 65
-1938, 9, 73, 110, 45
-1938, 10, 98, 81, 60
-1938, 11, 54, 85, 16
-1938, 12, 70, 65, 42
-1939, 1, 39, 64, 18
-1939, 2, 33, 92, 27
-1939, 3, 39, 100, 34
-1939, 4, 97, 101, 21
-1939, 5, 70, 84, 29
-1939, 6, 103, 126, 57
-1939, 7, 114, 102, 70
-1939, 8, 110, 105, 36
-1939, 9, 99, 79, 54
-1939, 10, 57, 88, 16
-1939, 11, 73, 59, 6
-1939, 12, 46, 78, 22
-1940, 1, 57, 77, 49
-1940, 2, 68, 80, 46
-1940, 3, 73, 100, 5
-1940, 4, 77, 66, 17
-1940, 5, 79, 111, 43
-1940, 6, 112, 125, 65
-1940, 7, 85, 111, 52
-1940, 8, 85, 96, 53
-1940, 9, 58, 75, 53
-1940, 10, 67, 82, 36
-1940, 11, 78, 89, 16
-1940, 12, 62, 104, 10
-1941, 1, 51, 61, 35
-1941, 2, 36, 88, 18
-1941, 3, 73, 65, 11
-1941, 4, 97, 68, 49
-1941, 5, 80, 110, 47
-1941, 6, 100, 112, 64
-1941, 7, 123, 104, 40
-1941, 8, 93, 99, 45
-1941, 9, 86, 99, 33
-1941, 10, 98, 76, 64
-1941, 11, 72, 101, 24
-1941, 12, 77, 78, 40
-1942, 1, 48, 98, 8
-1942, 2, 55, 69, 46
-1942, 3, 36, 77, 24
-1942, 4, 76, 111, 23
-1942, 5, 99, 85, 49
-1942, 6, 83, 125, 72
-1942, 7, 125, 97, 41
-1942, 8, 106, 98, 68
-1942, 9, 87, 105, 35
-1942, 10, 93, 73, 28
-1942, 11, 44, 71, 23
-1942, 12, 58, 92, 47
-1943, 1, 65, 72, 28
-1943, 2, 53, 74, 46
-1943, 3, 56, 76, 33
-1943, 4, 62, 94, 34
-1943, 5, 97, 109, 23
-1943, 6, 105, 95, 41
-1943, 7, 104, 128, 37
-1943, 8, 83, 117, 56
-1943, 9, 56, 97, 58
-1943, 10, 67, 99, 22
-1943, 11, 70, 68, 53
-1943, 12, 52, 89, 20
-1944, 1, 69, 83, 53
-1944, 2, 74, 57, 13
-1944, 3, 57, 67, 13
-1944, 4, 85, 103, 25
-1944, 5, 57, 113, 21
-1944, 6, 116, 102, 60
-1944, 7, 105, 92, 59
-1944, 8, 90, 125, 68
-1944, 9, 73, 93, 32
-1944, 10, 90, 84, 30
-1944, 11, 51, 83, 13
-1944, 12, 36, 82, 41
-1945, 1, 70, 82, 45
-1945, 2, 56, 82, 44
-1945, 3, 55, 103, 21
-1945, 4, 95, 93, 27
-1945, 5, 88, 86, 59
-1945, 6, 127, 98, 25
-1945, 7, 90, 112, 60
-1945, 8, 104, 132, 53
-1945, 9, 87, 96, 29
-1945, 10, 97, 81, 29
-1945, 11, 36, 82, 7
-1945, 12, 47, 72, 6
-1946, 1, 39, 65, 46
-1946, 2, 62, 74, 47
-1946, 3, 75, 83, 20
-1946, 4, 77, 107, 61
-1946, 5, 63, 110, 54
-1946, 6, 92, 131, 55
-1946, 7, 101, 111, 42
-1946, 8, 118, 118, 69
-1946, 9, 74, 109, 58
-1946, 10, 61, 67, 38
-1946, 11, 49, 94, 34
-1946, 12, 73, 81, 27
-1947, 1, 56, 72, 48
-1947, 2, 78, 97, 36
-1947, 3, 57, 102, 51
-1947, 4, 71, 92, 45
-1947, 5, 58, 81, 39
-1947, 6, 93, 136, 53
-1947, 7, 117, 132, 41
-1947, 8, 91, 104, 33
-1947, 9, 65, 95, 40
-1947, 10, 64, 87, 26
-1947, 11, 46, 87, 7
-1947, 12, 43, 78, 10
-1948, 1, 40, 79, 12
-1948, 2, 67, 63, 52
-1948, 3, 73, 66, 24
-1948, 4, 97, 86, 52
-1948, 5, 73, 105, 35
-1948, 6, 99, 129, 69
-1948, 7, 122, 109, 64
-1948, 8, 104, 134, 33
-1948, 9, 62, 79, 62
-1948, 10, 61, 71, 45
-1948, 11, 36, 91, 54
-1948, 12, 51, 95, 25
-1949, 1, 38, 73, 41
-1949, 2, 39, 76, 49
-1949, 3, 77, 84, 53
-1949, 4, 89, 69, 20
-1949, 5, 75, 114, 47
-1949, 6, 100, 117, 73
-1949, 7, 116, 105, 55
-1949, 8, 116, 95, 71
-1949, 9, 69, 98, 55
-1949, 10, 66, 111, 51
-1949, 11, 60, 77, 18
-1949, 12, 56, 97, 53
-1950, 1, 79, 82, 42
-1950, 2, 55, 71, 10
-1950, 3, 59, 104, 23
-1950, 4, 77, 107, 34
-1950, 5, 58, 72, 39
-1950, 6, 101, 139, 42
-1950, 7, 102, 135, 55
-1950, 8, 111, 133, 30
-1950, 9, 61, 89, 15
-1950, 10, 86, 113, 56
-1950, 11, 72, 63, 35
-1950, 12, 59, 80, 23
-1951, 1, 55, 80, 24
-1951, 2, 53, 83, 29
-1951, 3, 71, 68, 24
-1951, 4, 67, 98, 29
-1951, 5, 80, 91, 64
-1951, 6, 96, 108, 51
-1951, 7, 125, 103, 43
-1951, 8, 102, 124, 36
-1951, 9, 61, 77, 17
-1951, 10, 67, 77, 36
-1951, 11, 40, 90, 26
-1951, 12, 64, 69, 38
-1952, 1, 62, 86, 36
-1952, 2, 31, 74, 32
-1952, 3, 65, 70, 35
-1952, 4, 59, 99, 21
-1952, 5, 88, 82, 43
-1952, 6, 124, 94, 66
-1952, 7, 99, 90, 30
-1952, 8, 127, 107, 32
-1952, 9, 54, 74, 53
-1952, 10, 92, 80, 43
-1952, 11, 50, 59, 29
-1952, 12, 79, 87, 8
-1953, 1, 55, 94, 42
-1953, 2, 33, 77, 33
-1953, 3, 55, 70, 5
-1953, 4, 97, 87, 29
-1953, 5, 56, 88, 57
-1953, 6, 83, 116, 41
-1953, 7, 99, 126, 60
-1953, 8, 105, 99, 62
-1953, 9, 66, 79, 39
-1953, 10, 65, 91, 25
-1953, 11, 58, 62, 17
-1953, 12, 40, 78, 31
-1954, 1, 59, 59, 39
-1954, 2, 73, 92, 25
-1954, 3, 67, 86, 18
-1954, 4, 54, 99, 45
-1954, 5, 64, 68, 50
-1954, 6, 122, 102, 35
-1954, 7, 113, 134, 45
-1954, 8, 123, 102, 58
-1954, 9, 84, 102, 32
-1954, 10, 90, 110, 62
-1954, 11, 45, 103, 46
-1954, 12, 62, 96, 53
-1955, 1, 55, 74, 9
-1955, 2, 67, 97, 52
-1955, 3, 42, 62, 15
-1955, 4, 85, 75, 16
-1955, 5, 80, 102, 21
-1955, 6, 81, 103, 52
-1955, 7, 97, 99, 36
-1955, 8, 82, 91, 39
-1955, 9, 98, 95, 44
-1955, 10, 56, 70, 57
-1955, 11, 53, 74, 21
-1955, 12, 32, 100, 47
-1956, 1, 43, 102, 11
-1956, 2, 62, 104, 37
-1956, 3, 64, 64, 13
-1956, 4, 89, 72, 50
-1956, 5, 74, 75, 60
-1956, 6, 114, 95, 61
-1956, 7, 123, 99, 39
-1956, 8, 104, 110, 49
-1956, 9, 81, 87, 22
-1956, 10, 88, 78, 43
-1956, 11, 36, 69, 43
-1956, 12, 53, 88, 43
-1957, 1, 69, 66, 7
-1957, 2, 79, 80, 13
-1957, 3, 38, 98, 10
-1957, 4, 93, 108, 30
-1957, 5, 80, 95, 36
-1957, 6, 125, 124, 52
-1957, 7, 96, 100, 74
-1957, 8, 85, 91, 58
-1957, 9, 81, 93, 24
-1957, 10, 70, 71, 54
-1957, 11, 32, 66, 33
-1957, 12, 49, 75, 45
-1958, 1, 43, 89, 25
-1958, 2, 55, 86, 12
-1958, 3, 73, 84, 31
-1958, 4, 57, 99, 24
-1958, 5, 81, 81, 33
-1958, 6, 108, 118, 27
-1958, 7, 112, 114, 51
-1958, 8, 96, 136, 40
-1958, 9, 77, 105, 44
-1958, 10, 73, 90, 58
-1958, 11, 59, 93, 20
-1958, 12, 47, 73, 54
-1959, 1, 64, 68, 16
-1959, 2, 55, 95, 18
-1959, 3, 71, 64, 49
-1959, 4, 94, 71, 22
-1959, 5, 83, 67, 35
-1959, 6, 95, 130, 38
-1959, 7, 101, 130, 43
-1959, 8, 93, 95, 61
-1959, 9, 58, 100, 48
-1959, 10, 69, 94, 18
-1959, 11, 36, 77, 13
-1959, 12, 60, 81, 26
-1960, 1, 58, 83, 25
-1960, 2, 69, 85, 49
-1960, 3, 43, 57, 36
-1960, 4, 90, 72, 62
-1960, 5, 94, 102, 37
-1960, 6, 121, 128, 65
-1960, 7, 88, 133, 57
-1960, 8, 87, 127, 35
-1960, 9, 62, 79, 39
-1960, 10, 54, 113, 21
-1960, 11, 64, 60, 24
-1960, 12, 54, 68, 18
-1961, 1, 70, 93, 18
-1961, 2, 63, 72, 15
-1961, 3, 43, 102, 19
-1961, 4, 53, 87, 45
-1961, 5, 52, 66, 27
-1961, 6, 110, 100, 58
-1961, 7, 92, 133, 35
-1961, 8, 116, 98, 66
-1961, 9, 93, 82, 29
-1961, 10, 85, 96, 48
-1961, 11, 74, 88, 17
-1961, 12, 32, 77, 31
-1962, 1, 69, 59, 31
-1962, 2, 42, 90, 53
-1962, 3, 33, 79, 22
-1962, 4, 67, 75, 26
-1962, 5, 91, 114, 40
-1962, 6, 118, 134, 72
-1962, 7, 128, 118, 30
-1962, 8, 84, 115, 27
-1962, 9, 75, 82, 38
-1962, 10, 52, 76, 48
-1962, 11, 45, 96, 29
-1962, 12, 71, 103, 15
-1963, 1, 75, 84, 7
-1963, 2, 42, 70, 10
-1963, 3, 36, 66, 41
-1963, 4, 51, 110, 45
-1963, 5, 59, 88, 42
-1963, 6, 118, 126, 41
-1963, 7, 123, 114, 61
-1963, 8, 96, 111, 66
-1963, 9, 91, 109, 30
-1963, 10, 93, 66, 15
-1963, 11, 62, 64, 49
-1963, 12, 68, 91, 22
-1964, 1, 43, 101, 12
-1964, 2, 33, 83, 20
-1964, 3, 36, 100, 12
-1964, 4, 81, 93, 55
-1964, 5, 81, 110, 42
-1964, 6, 93, 127, 37
-1964, 7, 122, 103, 74
-1964, 8, 118, 90, 58
-1964, 9, 76, 71, 57
-1964, 10, 84, 103, 36
-1964, 11, 51, 88, 14
-1964, 12, 56, 88, 22
-1965, 1, 38, 80, 28
-1965, 2, 73, 102, 25
-1965, 3, 67, 81, 13
-1965, 4, 84, 67, 40
-1965, 5, 93, 104, 54
-1965, 6, 92, 127, 58
-1965, 7, 123, 90, 40
-1965, 8, 91, 121, 70
-1965, 9, 55, 111, 54
-1965, 10, 54, 104, 16
-1965, 11, 71, 56, 13
-1965, 12, 45, 100, 44
-1966, 1, 41, 86, 42
-1966, 2, 70, 95, 35
-1966, 3, 37, 89, 16
-1966, 4, 50, 101, 55
-1966, 5, 81, 91, 31
-1966, 6, 111, 91, 72
-1966, 7, 110, 92, 59
-1966, 8, 91, 92, 57
-1966, 9, 60, 80, 60
-1966, 10, 70, 80, 41
-1966, 11, 48, 72, 13
-1966, 12, 48, 95, 37
-1967, 1, 74, 68, 16
-1967, 2, 61, 77, 21
-1967, 3, 62, 103, 20
-1967, 4, 72, 72, 22
-1967, 5, 81, 89, 32
-1967, 6, 88, 122, 67
-1967, 7, 90, 125, 50
-1967, 8, 88, 125, 57
-1967, 9, 59, 94, 20
-1967, 10, 94, 83, 27
-1967, 11, 74, 71, 46
-1967, 12, 72, 93, 50
-1968, 1, 58, 104, 50
-1968, 2, 37, 103, 10
-1968, 3, 68, 94, 10
-1968, 4, 94, 75, 44
-1968, 5, 55, 77, 37
-1968, 6, 85, 111, 61
-1968, 7, 87, 99, 53
-1968, 8, 87, 126, 39
-1968, 9, 64, 104, 44
-1968, 10, 64, 93, 49
-1968, 11, 37, 64, 11
-1968, 12, 40, 63, 19
-1969, 1, 56, 78, 48
-1969, 2, 56, 70, 12
-1969, 3, 32, 75, 11
-1969, 4, 52, 65, 29
-1969, 5, 67, 76, 44
-1969, 6, 107, 119, 61
-1969, 7, 115, 91, 50
-1969, 8, 85, 129, 59
-1969, 9, 60, 100, 19
-1969, 10, 93, 108, 31
-1969, 11, 67, 64, 12
-1969, 12, 47, 81, 44
-1970, 1, 42, 96, 23
-1970, 2, 73, 94, 10
-1970, 3, 34, 79, 54
-1970, 4, 59, 81, 16
-1970, 5, 99, 103, 48
-1970, 6, 82, 108, 51
-1970, 7, 99, 108, 39
-1970, 8, 99, 117, 26
-1970, 9, 96, 98, 44
-1970, 10, 92, 86, 19
-1970, 11, 33, 55, 5
-1970, 12, 78, 95, 29
-1971, 1, 56, 66, 15
-1971, 2, 67, 86, 5
-1971, 3, 77, 85, 17
-1971, 4, 64, 99, 48
-1971, 5, 74, 76, 26
-1971, 6, 94, 134, 32
-1971, 7, 110, 114, 43
-1971, 8, 84, 120, 58
-1971, 9, 85, 100, 21
-1971, 10, 87, 77, 61
-1971, 11, 69, 83, 36
-1971, 12, 51, 61, 9
-1972, 1, 62, 104, 9
-1972, 2, 32, 73, 28
-1972, 3, 77, 84, 46
-1972, 4, 82, 71, 36
-1972, 5, 55, 79, 40
-1972, 6, 124, 118, 74
-1972, 7, 85, 124, 39
-1972, 8, 112, 128, 68
-1972, 9, 51, 95, 24
-1972, 10, 73, 87, 26
-1972, 11, 66, 65, 51
-1972, 12, 65, 85, 10
-1973, 1, 68, 62, 51
-1973, 2, 78, 101, 46
-1973, 3, 43, 97, 5
-1973, 4, 81, 95, 52
-1973, 5, 77, 84, 45
-1973, 6, 103, 131, 42
-1973, 7, 105, 92, 55
-1973, 8, 121, 130, 56
-1973, 9, 82, 104, 35
-1973, 10, 98, 107, 58
-1973, 11, 67, 104, 43
-1973, 12, 63, 91, 51
-1974, 1, 65, 104, 25
-1974, 2, 62, 73, 15
-1974, 3, 69, 97, 42
-1974, 4, 89, 113, 39
-1974, 5, 75, 71, 63
-1974, 6, 112, 108, 51
-1974, 7, 116, 99, 52
-1974, 8, 87, 120, 55
-1974, 9, 77, 72, 16
-1974, 10, 97, 86, 27
-1974, 11, 33, 57, 5
-1974, 12, 43, 88, 40
-1975, 1, 54, 59, 53
-1975, 2, 75, 88, 52
-1975, 3, 50, 59, 21
-1975, 4, 55, 87, 53
-1975, 5, 91, 82, 52
-1975, 6, 96, 125, 51
-1975, 7, 116, 110, 25
-1975, 8, 117, 120, 71
-1975, 9, 98, 85, 36
-1975, 10, 82, 101, 32
-1975, 11, 70, 100, 28
-1975, 12, 32, 92, 24
-1976, 1, 33, 85, 42
-1976, 2, 40, 91, 11
-1976, 3, 69, 99, 5
-1976, 4, 68, 76, 33
-1976, 5, 56, 87, 40
-1976, 6, 113, 110, 67
-1976, 7, 80, 108, 63
-1976, 8, 88, 94, 29
-1976, 9, 84, 73, 26
-1976, 10, 95, 75, 45
-1976, 11, 79, 65, 31
-1976, 12, 75, 59, 37
-1977, 1, 30, 96, 48
-1977, 2, 60, 56, 23
-1977, 3, 60, 104, 50
-1977, 4, 77, 112, 57
-1977, 5, 81, 84, 31
-1977, 6, 129, 108, 64
-1977, 7, 88, 96, 59
-1977, 8, 123, 121, 45
-1977, 9, 89, 82, 41
-1977, 10, 62, 81, 17
-1977, 11, 77, 65, 19
-1977, 12, 48, 82, 14
-1978, 1, 57, 67, 49
-1978, 2, 41, 60, 47
-1978, 3, 33, 77, 43
-1978, 4, 83, 99, 30
-1978, 5, 69, 70, 45
-1978, 6, 107, 130, 49
-1978, 7, 98, 117, 44
-1978, 8, 105, 116, 53
-1978, 9, 66, 99, 18
-1978, 10, 69, 86, 28
-1978, 11, 44, 103, 23
-1978, 12, 70, 95, 15
-1979, 1, 33, 63, 15
-1979, 2, 59, 92, 9
-1979, 3, 39, 64, 7
-1979, 4, 59, 103, 61
-1979, 5, 61, 80, 36
-1979, 6, 99, 124, 70
-1979, 7, 121, 134, 50
-1979, 8, 82, 132, 30
-1979, 9, 76, 106, 61
-1979, 10, 69, 82, 56
-1979, 11, 42, 78, 27
-1979, 12, 39, 71, 32
-1980, 1, 60, 91, 33
-1980, 2, 79, 84, 21
-1980, 3, 41, 66, 35
-1980, 4, 93, 89, 60
-1980, 5, 93, 109, 58
-1980, 6, 96, 139, 41
-1980, 7, 114, 94, 45
-1980, 8, 127, 136, 71
-1980, 9, 99, 75, 62
-1980, 10, 97, 97, 45
-1980, 11, 47, 89, 31
-1980, 12, 73, 80, 22
-1981, 1, 69, 89, 52
-1981, 2, 34, 96, 14
-1981, 3, 38, 91, 33
-1981, 4, 82, 85, 34
-1981, 5, 83, 91, 46
-1981, 6, 95, 128, 31
-1981, 7, 98, 95, 63
-1981, 8, 90, 96, 71
-1981, 9, 57, 93, 27
-1981, 10, 52, 91, 28
-1981, 11, 50, 89, 16
-1981, 12, 65, 66, 35
-1982, 1, 49, 69, 24
-1982, 2, 53, 99, 7
-1982, 3, 74, 55, 18
-1982, 4, 81, 82, 27
-1982, 5, 55, 101, 29
-1982, 6, 107, 109, 48
-1982, 7, 117, 114, 61
-1982, 8, 105, 117, 46
-1982, 9, 51, 83, 44
-1982, 10, 74, 97, 17
-1982, 11, 75, 100, 11
-1982, 12, 45, 76, 16
-1983, 1, 52, 91, 5
-1983, 2, 74, 75, 27
-1983, 3, 56, 92, 23
-1983, 4, 97, 89, 59
-1983, 5, 68, 66, 17
-1983, 6, 83, 99, 28
-1983, 7, 119, 105, 29
-1983, 8, 120, 108, 39
-1983, 9, 97, 91, 26
-1983, 10, 75, 97, 15
-1983, 11, 55, 63, 21
-1983, 12, 65, 63, 54
-1984, 1, 68, 73, 11
-1984, 2, 65, 56, 23
-1984, 3, 44, 81, 7
-1984, 4, 55, 111, 55
-1984, 5, 75, 106, 59
-1984, 6, 92, 95, 74
-1984, 7, 115, 92, 62
-1984, 8, 112, 92, 26
-1984, 9, 99, 102, 40
-1984, 10, 58, 86, 51
-1984, 11, 66, 76, 13
-1984, 12, 63, 92, 27
-1985, 1, 63, 69, 39
-1985, 2, 60, 64, 43
-1985, 3, 73, 71, 28
-1985, 4, 76, 98, 45
-1985, 5, 80, 86, 61
-1985, 6, 116, 103, 60
-1985, 7, 122, 127, 41
-1985, 8, 115, 118, 48
-1985, 9, 53, 110, 47
-1985, 10, 70, 114, 44
-1985, 11, 66, 104, 6
-1985, 12, 32, 92, 37
-1986, 1, 68, 72, 25
-1986, 2, 73, 91, 48
-1986, 3, 76, 59, 9
-1986, 4, 69, 93, 36
-1986, 5, 90, 94, 39
-1986, 6, 101, 91, 42
-1986, 7, 110, 126, 32
-1986, 8, 87, 136, 33
-1986, 9, 65, 107, 60
-1986, 10, 88, 65, 54
-1986, 11, 65, 96, 49
-1986, 12, 34, 58, 46
-1987, 1, 63, 90, 30
-1987, 2, 33, 74, 25
-1987, 3, 75, 84, 46
-1987, 4, 86, 67, 21
-1987, 5, 63, 98, 17
-1987, 6, 81, 105, 58
-1987, 7, 106, 120, 64
-1987, 8, 85, 99, 36
-1987, 9, 97, 94, 24
-1987, 10, 61, 67, 53
-1987, 11, 77, 85, 15
-1987, 12, 72, 79, 41
-1988, 1, 72, 66, 44
-1988, 2, 65, 85, 16
-1988, 3, 31, 90, 41
-1988, 4, 78, 99, 37
-1988, 5, 68, 106, 51
-1988, 6, 88, 113, 35
-1988, 7, 121, 105, 42
-1988, 8, 84, 132, 65
-1988, 9, 69, 100, 41
-1988, 10, 83, 101, 15
-1988, 11, 30, 86, 37
-1988, 12, 72, 75, 26
-1989, 1, 74, 100, 10
-1989, 2, 69, 94, 48
-1989, 3, 46, 65, 34
-1989, 4, 50, 85, 59
-1989, 5, 82, 112, 62
-1989, 6, 126, 119, 50
-1989, 7, 124, 125, 43
-1989, 8, 108, 100, 73
-1989, 9, 87, 103, 52
-1989, 10, 86, 69, 40
-1989, 11, 78, 56, 33
-1989, 12, 78, 77, 53
-1990, 1, 67, 65, 7
-1990, 2, 40, 60, 38
-1990, 3, 55, 83, 7
-1990, 4, 50, 70, 54
-1990, 5, 71, 108, 24
-1990, 6, 84, 126, 27
-1990, 7, 117, 109, 71
-1990, 8, 109, 96, 25
-1990, 9, 83, 96, 44
-1990, 10, 92, 114, 38
-1990, 11, 62, 65, 24
-1990, 12, 76, 65, 25
-1991, 1, 37, 69, 48
-1991, 2, 35, 63, 17
-1991, 3, 66, 69, 13
-1991, 4, 78, 80, 39
-1991, 5, 95, 78, 25
-1991, 6, 127, 113, 68
-1991, 7, 88, 102, 40
-1991, 8, 125, 95, 61
-1991, 9, 54, 96, 40
-1991, 10, 85, 109, 53
-1991, 11, 75, 65, 10
-1991, 12, 72, 90, 44
-1992, 1, 33, 64, 52
-1992, 2, 39, 81, 43
-1992, 3, 68, 82, 15
-1992, 4, 72, 94, 32
-1992, 5, 97, 76, 58
-1992, 6, 125, 111, 55
-1992, 7, 127, 129, 29
-1992, 8, 128, 122, 52
-1992, 9, 81, 105, 38
-1992, 10, 99, 107, 42
-1992, 11, 54, 101, 47
-1992, 12, 35, 81, 42
-1993, 1, 53, 69, 40
-1993, 2, 77, 75, 44
-1993, 3, 59, 94, 46
-1993, 4, 90, 110, 40
-1993, 5, 95, 105, 24
-1993, 6, 126, 102, 68
-1993, 7, 98, 139, 66
-1993, 8, 113, 117, 74
-1993, 9, 87, 109, 33
-1993, 10, 96, 73, 63
-1993, 11, 42, 97, 21
-1993, 12, 36, 85, 10
-1994, 1, 36, 88, 31
-1994, 2, 67, 74, 21
-1994, 3, 40, 87, 13
-1994, 4, 95, 109, 37
-1994, 5, 56, 79, 64
-1994, 6, 127, 96, 32
-1994, 7, 87, 108, 70
-1994, 8, 106, 131, 70
-1994, 9, 58, 78, 20
-1994, 10, 58, 67, 23
-1994, 11, 75, 96, 42
-1994, 12, 31, 92, 30
-1995, 1, 62, 95, 27
-1995, 2, 30, 89, 48
-1995, 3, 71, 91, 46
-1995, 4, 56, 105, 20
-1995, 5, 83, 66, 25
-1995, 6, 84, 90, 42
-1995, 7, 128, 128, 30
-1995, 8, 97, 117, 29
-1995, 9, 93, 93, 50
-1995, 10, 83, 89, 50
-1995, 11, 70, 72, 47
-1995, 12, 33, 96, 34
-1996, 1, 38, 93, 19
-1996, 2, 69, 103, 41
-1996, 3, 31, 82, 25
-1996, 4, 96, 67, 41
-1996, 5, 76, 91, 21
-1996, 6, 98, 109, 66
-1996, 7, 90, 110, 42
-1996, 8, 97, 128, 67
-1996, 9, 70, 73, 32
-1996, 10, 65, 65, 58
-1996, 11, 45, 84, 26
-1996, 12, 48, 72, 29
-1997, 1, 42, 77, 17
-1997, 2, 48, 62, 23
-1997, 3, 57, 74, 40
-1997, 4, 69, 106, 51
-1997, 5, 77, 108, 19
-1997, 6, 126, 95, 63
-1997, 7, 121, 110, 56
-1997, 8, 129, 119, 70
-1997, 9, 66, 74, 52
-1997, 10, 72, 68, 64
-1997, 11, 77, 89, 17
-1997, 12, 37, 88, 10
-1998, 1, 49, 93, 35
-1998, 2, 55, 84, 18
-1998, 3, 64, 81, 21
-1998, 4, 75, 106, 44
-1998, 5, 97, 80, 60
-1998, 6, 83, 132, 29
-1998, 7, 99, 119, 62
-1998, 8, 92, 139, 63
-1998, 9, 77, 68, 16
-1998, 10, 66, 78, 29
-1998, 11, 38, 75, 36
-1998, 12, 70, 94, 9
-1999, 1, 69, 66, 42
-1999, 2, 76, 98, 43
-1999, 3, 34, 88, 43
-1999, 4, 69, 97, 29
-1999, 5, 57, 93, 48
-1999, 6, 127, 112, 49
-1999, 7, 125, 133, 46
-1999, 8, 116, 137, 62
-1999, 9, 74, 88, 27
-1999, 10, 93, 82, 64
-1999, 11, 75, 75, 38
-1999, 12, 51, 55, 6
-2000, 1, 55, 94, 42
-2000, 2, 41, 85, 16
-2000, 3, 51, 81, 49
-2000, 4, 86, 93, 26
-2000, 5, 98, 92, 46
-2000, 6, 86, 130, 38
-2000, 7, 108, 107, 37
-2000, 8, 112, 123, 53
-2000, 9, 93, 105, 39
-2000, 10, 54, 67, 51
-2000, 11, 69, 60, 40
-2000, 12, 64, 92, 38
-2001, 1, 35, 58, 15
-2001, 2, 69, 57, 11
-2001, 3, 60, 81, 45
-2001, 4, 68, 98, 27
-2001, 5, 78, 110, 21
-2001, 6, 124, 124, 72
-2001, 7, 94, 102, 45
-2001, 8, 124, 93, 69
-2001, 9, 62, 84, 33
-2001, 10, 56, 71, 35
-2001, 11, 63, 96, 34
-2001, 12, 76, 101, 38
-2002, 1, 46, 83, 34
-2002, 2, 57, 97, 25
-2002, 3, 33, 59, 23
-2002, 4, 67, 76, 61
-2002, 5, 52, 66, 43
-2002, 6, 103, 120, 66
-2002, 7, 96, 118, 48
-2002, 8, 84, 107, 28
-2002, 9, 74, 91, 30
-2002, 10, 62, 109, 21
-2002, 11, 73, 99, 39
-2002, 12, 49, 84, 11
-2003, 1, 51, 55, 54
-2003, 2, 74, 58, 18
-2003, 3, 45, 55, 24
-2003, 4, 56, 108, 52
-2003, 5, 94, 84, 38
-2003, 6, 113, 136, 50
-2003, 7, 112, 94, 43
-2003, 8, 120, 121, 69
-2003, 9, 99, 75, 28
-2003, 10, 60, 65, 25
-2003, 11, 50, 96, 10
-2003, 12, 35, 79, 33
-2004, 1, 44, 84, 53
-2004, 2, 38, 87, 7
-2004, 3, 77, 58, 16
-2004, 4, 84, 91, 17
-2004, 5, 72, 107, 59
-2004, 6, 108, 98, 70
-2004, 7, 97, 92, 26
-2004, 8, 109, 106, 30
-2004, 9, 99, 71, 53
-2004, 10, 95, 108, 22
-2004, 11, 42, 80, 47
-2004, 12, 32, 69, 23
-2005, 1, 72, 98, 13
-2005, 2, 54, 55, 31
-2005, 3, 43, 76, 34
-2005, 4, 92, 90, 40
-2005, 5, 55, 67, 32
-2005, 6, 124, 105, 70
-2005, 7, 126, 115, 30
-2005, 8, 106, 109, 59
-2005, 9, 79, 75, 31
-2005, 10, 86, 100, 16
-2005, 11, 69, 93, 49
-2005, 12, 56, 101, 41
-2006, 1, 70, 78, 6
-2006, 2, 52, 90, 14
-2006, 3, 50, 58, 14
-2006, 4, 85, 101, 21
-2006, 5, 79, 84, 28
-2006, 6, 112, 121, 41
-2006, 7, 97, 104, 33
-2006, 8, 109, 109, 47
-2006, 9, 62, 70, 24
-2006, 10, 60, 99, 58
-2006, 11, 74, 86, 53
-2006, 12, 74, 81, 49
-2007, 1, 49, 74, 9
-2007, 2, 45, 64, 50
-2007, 3, 59, 72, 9
-2007, 4, 74, 90, 63
-2007, 5, 86, 99, 62
-2007, 6, 84, 127, 44
-2007, 7, 101, 97, 26
-2007, 8, 82, 105, 70
-2007, 9, 88, 91, 30
-2007, 10, 53, 84, 51
-2007, 11, 67, 102, 20
-2007, 12, 61, 56, 20
-2008, 1, 38, 66, 5
-2008, 2, 35, 100, 49
-2008, 3, 69, 62, 18
-2008, 4, 69, 90, 17
-2008, 5, 78, 101, 53
-2008, 6, 99, 129, 53
-2008, 7, 89, 112, 64
-2008, 8, 91, 117, 41
-2008, 9, 69, 71, 15
-2008, 10, 73, 95, 41
-2008, 11, 31, 96, 13
-2008, 12, 37, 91, 43
-2009, 1, 55, 78, 48
-2009, 2, 64, 56, 21
-2009, 3, 46, 89, 7
-2009, 4, 61, 81, 27
-2009, 5, 70, 112, 58
-2009, 6, 124, 97, 30
-2009, 7, 91, 92, 46
-2009, 8, 122, 104, 47
-2009, 9, 79, 83, 40
-2009, 10, 68, 73, 16
-2009, 11, 51, 89, 52
-2009, 12, 32, 82, 9
-2010, 1, 39, 56, 8
-2010, 2, 63, 56, 41
-2010, 3, 65, 57, 46
-2010, 4, 98, 84, 32
-2010, 5, 71, 96, 58
-2010, 6, 113, 130, 51
-2010, 7, 105, 115, 28
-2010, 8, 93, 100, 36
-2010, 9, 76, 107, 54
-2010, 10, 64, 84, 31
-2010, 11, 73, 88, 29
-2010, 12, 43, 86, 8
-2011, 1, 76, 55, 29
-2011, 2, 77, 100, 23
-2011, 3, 33, 66, 5
-2011, 4, 52, 102, 48
-2011, 5, 97, 82, 44
-2011, 6, 117, 105, 71
-2011, 7, 92, 127, 50
-2011, 8, 83, 132, 48
-2011, 9, 54, 109, 60
-2011, 10, 53, 68, 48
-2011, 11, 75, 102, 32
-2011, 12, 30, 98, 26
-2012, 1, 44, 79, 34
-2012, 2, 69, 62, 33
-2012, 3, 67, 65, 10
-2012, 4, 70, 70, 49
-2012, 5, 50, 98, 61
-2012, 6, 92, 97, 64
-2012, 7, 91, 95, 51
-2012, 8, 107, 107, 26
-2012, 9, 64, 102, 22
-2012, 10, 75, 76, 31
-2012, 11, 66, 75, 6
-2012, 12, 33, 100, 36
diff --git a/examples/rainfall/doc/images/rainfall-example.png b/examples/rainfall/doc/images/rainfall-example.png
deleted file mode 100644
index f4087927..00000000
--- a/examples/rainfall/doc/images/rainfall-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/rainfall/doc/src/rainfall.qdoc b/examples/rainfall/doc/src/rainfall.qdoc
deleted file mode 100644
index bfe7fc36..00000000
--- a/examples/rainfall/doc/src/rainfall.qdoc
+++ /dev/null
@@ -1,28 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-/*!
- \example rainfall
- \title Rainfall Example
-
- The barchart example shows how to make a simple 3D bar chart using Q3DBars.
-
- \image rainfall-example.png
-
- TODO
-*/
diff --git a/examples/scatter/doc/images/scatter-example.png b/examples/scatter/doc/images/scatter-example.png
new file mode 100644
index 00000000..d5331e4d
--- /dev/null
+++ b/examples/scatter/doc/images/scatter-example.png
Binary files differ
diff --git a/examples/scatter/doc/src/scatter.qdoc b/examples/scatter/doc/src/scatter.qdoc
new file mode 100644
index 00000000..90410bc6
--- /dev/null
+++ b/examples/scatter/doc/src/scatter.qdoc
@@ -0,0 +1,154 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+/*!
+ \example scatter
+ \title Scatter Example
+ \ingroup qtdatavisualization_examples
+ \brief Using Q3DScatter in a widget application.
+
+ The scatter example shows how to make a simple 3D scatter graph using Q3DScatter and
+ combining the use of widgets for adjusting several adjustable qualities. The example shows
+ how to:
+
+ \list
+ \li Create an application with Q3DScatter and some widgets
+ \li Use QScatterDataProxy to set data to the graph
+ \li Adjust some graph properties using widget controls
+ \endlist
+
+ \image scatter-example.png
+
+ \section1 Creating the application
+
+ First, in main.cpp, we create a QApplication, instantiate Q3DScatter and a window container
+ for it:
+
+ \snippet ../examples/scatter/main.cpp 0
+
+ The call to QWidget::createWindowContainer is required, as all data visualization types
+ (Q3DBars, Q3DScatter, Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
+ as a widget any other way.
+
+ Then we'll create horizontal and vertical layouts. We'll add the graph and the vertical
+ layout into the horizontal one:
+
+ \snippet ../examples/scatter/main.cpp 1
+
+ We're not using the vertical layout for anything yet, but we'll get back to it in
+ \l {Using widgets to control the graph}
+
+ Next, let's create another class to handle the data addition and other interaction with the
+ graph. Let's call it ScatterDataModifier (See \l {Setting up the graph} and
+ \l {Adding data to the graph} for details):
+
+ \snippet ../examples/scatter/main.cpp 2
+
+ The application main is done and we can show the graph and start the event loop:
+
+ \snippet ../examples/scatter/main.cpp 3
+
+ \section1 Setting up the graph
+
+ Let's set up some visual qualities for the graph in the constructor of the ScatterDataModifier
+ class we instantiated in the application main:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 0
+
+ None of these are required, but are used to override graph defaults. You can try how it looks
+ with the preset defaults by commenting the block above out.
+
+ Then we'll set axes for the graph:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 1
+
+ And finally we create a QScatterDataProxy, set a label format for it and set it as the active
+ proxy for the graph:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 2
+
+ That concludes setting up the graph.
+
+ \section1 Adding data to the graph
+
+ In application main, we called \c {modifier->start()} after constructing all the necessary
+ objects. This is how it looks like:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 3
+
+ There is nothing in it except a call to another method. There is actually no need for a
+ separate \c start() method, but we keep it here in case we want to add some more functionality
+ in it that can be done only after all construction in application main is done.
+
+ The actual data addition is done in \c addData() method. First we configure the axes we created
+ in constructor:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 4
+
+ This could have been done in the ScatterDataModifier's constructor, but we added it here
+ to keep the constructor simpler and the axes configuration near the data.
+
+ Next we create a data array:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 5
+
+ And populate it:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 6
+
+ Finally we tell the proxy to start using the data we gave it:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 7
+
+ Now our graph has the data and is ready to be used. There isn't much interaction yet, though,
+ so let's continue by adding some widgets to play with.
+
+ \section1 Using widgets to control the graph
+
+ First, back in the application main, we'll create some widgets:
+
+ \snippet ../examples/scatter/main.cpp 4
+
+ And add them to the vertical layout we created earlier:
+
+ \snippet ../examples/scatter/main.cpp 5
+
+ Now, let's connect them to methods in ScatterDataModifier:
+
+ \snippet ../examples/scatter/main.cpp 6
+
+ Here are the methods in ScatterDataModifier the signals were connected to:
+
+ \snippet ../examples/scatter/scatterdatamodifier.cpp 8
+
+ And so we have an application in which we can control:
+
+ \list
+ \li Label style
+ \li Camera preset
+ \li Background visibility
+ \li Grid visibility
+ \li Dot shading smoothness
+ \li Dot style
+ \li Theme
+ \li Shadow quality
+ \li Font
+ \endlist
+
+ \section1 Example contents
+*/
diff --git a/examples/scatter/main.cpp b/examples/scatter/main.cpp
new file mode 100644
index 00000000..ed0adc57
--- /dev/null
+++ b/examples/scatter/main.cpp
@@ -0,0 +1,162 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "scatterdatamodifier.h"
+
+#include <QApplication>
+#include <QWidget>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QCheckBox>
+#include <QComboBox>
+#include <QFontComboBox>
+#include <QLabel>
+#include <QScreen>
+#include <QFontDatabase>
+
+int main(int argc, char **argv)
+{
+ //! [0]
+ QApplication app(argc, argv);
+ Q3DScatter *graph = new Q3DScatter();
+ QWidget *container = QWidget::createWindowContainer(graph);
+ //! [0]
+
+ QSize screenSize = graph->screen()->size();
+ container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.5));
+ container->setMaximumSize(screenSize);
+ container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ container->setFocusPolicy(Qt::StrongFocus);
+
+ //! [1]
+ QWidget *widget = new QWidget;
+ QHBoxLayout *hLayout = new QHBoxLayout(widget);
+ QVBoxLayout *vLayout = new QVBoxLayout();
+ hLayout->addWidget(container, 1);
+ hLayout->addLayout(vLayout);
+ //! [1]
+
+ widget->setWindowTitle(QStringLiteral("A Cosine Wave"));
+
+ //! [4]
+ QComboBox *themeList = new QComboBox(widget);
+ themeList->addItem(QStringLiteral("Qt"));
+ themeList->addItem(QStringLiteral("Primary Colors"));
+ themeList->addItem(QStringLiteral("Digia"));
+ themeList->addItem(QStringLiteral("Stone Moss"));
+ themeList->addItem(QStringLiteral("Army Blue"));
+ themeList->addItem(QStringLiteral("Retro"));
+ themeList->addItem(QStringLiteral("Ebony"));
+ themeList->addItem(QStringLiteral("Isabelle"));
+ themeList->setCurrentIndex(6);
+
+ QPushButton *labelButton = new QPushButton(widget);
+ labelButton->setText(QStringLiteral("Change label style"));
+
+ QCheckBox *smoothCheckBox = new QCheckBox(widget);
+ smoothCheckBox->setText(QStringLiteral("Smooth dots"));
+ smoothCheckBox->setChecked(true);
+
+ QComboBox *barStyleList = new QComboBox(widget);
+ barStyleList->addItem(QStringLiteral("Sphere"));
+ barStyleList->addItem(QStringLiteral("Tetrahedron"));
+ barStyleList->setCurrentIndex(0);
+
+ QPushButton *cameraButton = new QPushButton(widget);
+ cameraButton->setText(QStringLiteral("Change camera preset"));
+
+ QCheckBox *backgroundCheckBox = new QCheckBox(widget);
+ backgroundCheckBox->setText(QStringLiteral("Show background"));
+ backgroundCheckBox->setChecked(true);
+
+ QCheckBox *gridCheckBox = new QCheckBox(widget);
+ gridCheckBox->setText(QStringLiteral("Show grid"));
+ gridCheckBox->setChecked(true);
+
+ QComboBox *shadowQuality = new QComboBox(widget);
+ shadowQuality->addItem(QStringLiteral("None"));
+ shadowQuality->addItem(QStringLiteral("Low"));
+ shadowQuality->addItem(QStringLiteral("Medium"));
+ shadowQuality->addItem(QStringLiteral("High"));
+ shadowQuality->addItem(QStringLiteral("Low Soft"));
+ shadowQuality->addItem(QStringLiteral("Medium Soft"));
+ shadowQuality->addItem(QStringLiteral("High Soft"));
+ shadowQuality->setCurrentIndex(3);
+
+ QFontComboBox *fontList = new QFontComboBox(widget);
+ fontList->setCurrentFont(QFont("Arial"));
+ //! [4]
+
+ //! [5]
+ vLayout->addWidget(labelButton, 0, Qt::AlignTop);
+ vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
+ vLayout->addWidget(backgroundCheckBox);
+ vLayout->addWidget(gridCheckBox);
+ vLayout->addWidget(smoothCheckBox, 0, Qt::AlignTop);
+ vLayout->addWidget(new QLabel(QStringLiteral("Change dot style")));
+ vLayout->addWidget(barStyleList);
+ vLayout->addWidget(new QLabel(QStringLiteral("Change theme")));
+ vLayout->addWidget(themeList);
+ vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
+ vLayout->addWidget(shadowQuality);
+ vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
+ vLayout->addWidget(fontList, 1, Qt::AlignTop);
+ //! [5]
+
+ //! [2]
+ ScatterDataModifier *modifier = new ScatterDataModifier(graph);
+ //! [2]
+
+ //! [6]
+ QObject::connect(cameraButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::changePresetCamera);
+ QObject::connect(labelButton, &QPushButton::clicked, modifier,
+ &ScatterDataModifier::changeLabelStyle);
+
+ QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setBackgroundEnabled);
+ QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setGridEnabled);
+ QObject::connect(smoothCheckBox, &QCheckBox::stateChanged, modifier,
+ &ScatterDataModifier::setSmoothDots);
+
+ QObject::connect(barStyleList, SIGNAL(currentIndexChanged(int)), modifier,
+ SLOT(changeStyle(int)));
+
+ QObject::connect(themeList, SIGNAL(currentIndexChanged(int)), modifier,
+ SLOT(changeTheme(int)));
+
+ QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
+ SLOT(changeShadowQuality(int)));
+
+ QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
+ &QComboBox::setCurrentIndex);
+ QObject::connect(graph, &Q3DScatter::shadowQualityChanged, modifier,
+ &ScatterDataModifier::shadowQualityUpdatedByVisual);
+
+ QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
+ &ScatterDataModifier::changeFont);
+ //! [6]
+
+ //! [3]
+ widget->show();
+ modifier->start();
+ return app.exec();
+ //! [3]
+}
diff --git a/examples/scatter/scatter.pro b/examples/scatter/scatter.pro
new file mode 100644
index 00000000..beff2164
--- /dev/null
+++ b/examples/scatter/scatter.pro
@@ -0,0 +1,13 @@
+!include( ../examples.pri ) {
+ error( "Couldn't find the examples.pri file!" )
+}
+
+SOURCES += main.cpp scatterdatamodifier.cpp
+HEADERS += scatterdatamodifier.h
+
+QT += widgets
+
+INSTALLS += target
+
+OTHER_FILES += doc/src/* \
+ doc/images/*
diff --git a/examples/scatter/scatterdatamodifier.cpp b/examples/scatter/scatterdatamodifier.cpp
new file mode 100644
index 00000000..1fb08c93
--- /dev/null
+++ b/examples/scatter/scatterdatamodifier.cpp
@@ -0,0 +1,188 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "scatterdatamodifier.h"
+#include <QtDataVisualization/qscatterdataproxy.h>
+#include <QtDataVisualization/q3dvalueaxis.h>
+#include <QtDataVisualization/q3dscene.h>
+#include <QtDataVisualization/q3dcamera.h>
+#include <qmath.h>
+using namespace QtDataVisualization;
+
+//#define RANDOM_SCATTER // Uncomment this to switch to random scatter
+
+const int numberOfItems = 10000;
+
+ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
+ : m_graph(scatter),
+ m_fontSize(40.0f),
+ m_style(QDataVis::MeshStyleSpheres),
+ m_smooth(true)
+{
+ //! [0]
+ QFont font = m_graph->font();
+ font.setPointSize(m_fontSize);
+ m_graph->setFont(font);
+ m_graph->setObjectType(QDataVis::MeshStyleSpheres, true);
+ m_graph->setTheme(QDataVis::ThemeEbony);
+ m_graph->setShadowQuality(QDataVis::ShadowQualityHigh);
+ m_graph->scene()->activeCamera()->setCameraPreset(QDataVis::CameraPresetFront);
+ //! [0]
+
+ //! [1]
+ m_graph->setAxisX(new Q3DValueAxis);
+ m_graph->setAxisY(new Q3DValueAxis);
+ m_graph->setAxisZ(new Q3DValueAxis);
+ //! [1]
+
+ //! [2]
+ QScatterDataProxy *proxy = new QScatterDataProxy;
+ proxy->setItemLabelFormat("@xTitle: @xLabel @yTitle: @yLabel @zTitle: @zLabel");
+ m_graph->setActiveDataProxy(proxy);
+ //! [2]
+
+ changeLabelStyle();
+}
+
+ScatterDataModifier::~ScatterDataModifier()
+{
+ delete m_graph;
+}
+
+//! [3]
+void ScatterDataModifier::start()
+{
+ addData();
+}
+//! [3]
+
+void ScatterDataModifier::addData()
+{
+ //! [4]
+ // Add labels
+ m_graph->axisX()->setTitle("X");
+ m_graph->axisY()->setTitle("Y");
+ m_graph->axisZ()->setTitle("Z");
+ m_graph->axisX()->setRange(-50.0, 50.0);
+ m_graph->axisY()->setRange(-1.0, 1.0);
+ m_graph->axisZ()->setRange(-50.0, 50.0);
+ //! [4]
+
+ //! [5]
+ QScatterDataArray *dataArray = new QScatterDataArray;
+ dataArray->resize(numberOfItems);
+ QScatterDataItem *ptrToDataArray = &dataArray->first();
+ //! [5]
+
+#ifdef RANDOM_SCATTER
+ for (int i = 0; i < numberOfItems; i++) {
+ ptrToDataArray->setPosition(randVector());
+ ptrToDataArray++;
+ }
+#else
+ //! [6]
+ float limit = qSqrt(numberOfItems) / 2.0f;
+ for (float i = -limit; i < limit; i++) {
+ for (float j = -limit; j < limit; j++) {
+ ptrToDataArray->setPosition(QVector3D(i, qCos(qDegreesToRadians((i * j) / 7.5)), j));
+ ptrToDataArray++;
+ }
+ }
+ //! [6]
+#endif
+
+ //! [7]
+ m_graph->activeDataProxy()->resetArray(dataArray);
+ //! [7]
+}
+
+//! [8]
+void ScatterDataModifier::changeStyle(int style)
+{
+ m_style = QDataVis::MeshStyle(style + 5); // skip unsupported mesh types
+ m_graph->setObjectType(m_style, m_smooth);
+}
+
+void ScatterDataModifier::setSmoothDots(int smooth)
+{
+ m_smooth = bool(smooth);
+ m_graph->setObjectType(m_style, m_smooth);
+}
+
+void ScatterDataModifier::changeTheme(int theme)
+{
+ m_graph->setTheme((QDataVis::Theme)theme);
+}
+
+void ScatterDataModifier::changePresetCamera()
+{
+ static int preset = QDataVis::CameraPresetFrontLow;
+
+ m_graph->scene()->activeCamera()->setCameraPreset((QDataVis::CameraPreset)preset);
+
+ if (++preset > QDataVis::CameraPresetDirectlyBelow)
+ preset = QDataVis::CameraPresetFrontLow;
+}
+
+void ScatterDataModifier::changeLabelStyle()
+{
+ static int style = QDataVis::LabelStyleFromTheme;
+
+ m_graph->setLabelStyle((QDataVis::LabelStyle)style);
+
+ if (++style > QDataVis::LabelStyleTransparent)
+ style = QDataVis::LabelStyleOpaque;
+}
+
+void ScatterDataModifier::changeFont(const QFont &font)
+{
+ QFont newFont = font;
+ newFont.setPointSizeF(m_fontSize);
+ m_graph->setFont(newFont);
+}
+
+void ScatterDataModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality sq)
+{
+ int quality = int(sq);
+ emit shadowQualityChanged(quality); // connected to a checkbox in main.cpp
+}
+
+void ScatterDataModifier::changeShadowQuality(int quality)
+{
+ QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality);
+ m_graph->setShadowQuality(sq);
+}
+
+void ScatterDataModifier::setBackgroundEnabled(int enabled)
+{
+ m_graph->setBackgroundVisible((bool)enabled);
+}
+
+void ScatterDataModifier::setGridEnabled(int enabled)
+{
+ m_graph->setGridVisible((bool)enabled);
+}
+//! [8]
+
+QVector3D ScatterDataModifier::randVector()
+{
+ return QVector3D(
+ (float)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f,
+ (float)(rand() % 100) / 100.0f - (float)(rand() % 100) / 100.0f,
+ (float)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f);
+}
diff --git a/examples/scatterchart/scatterchart.h b/examples/scatter/scatterdatamodifier.h
index 8500ef29..5cc9348b 100644
--- a/examples/scatterchart/scatterchart.h
+++ b/examples/scatter/scatterdatamodifier.h
@@ -4,7 +4,7 @@
** All rights reserved.
** For any questions to Digia, please use contact form at http://qt.digia.com
**
-** This file is part of the QtDataVis3D module.
+** This file is part of the QtDataVisualization module.
**
** Licensees holding valid Qt Enterprise licenses may use this file in
** accordance with the Qt Enterprise License Agreement provided with the
@@ -19,13 +19,10 @@
#ifndef SCATTERDATAMODIFIER_H
#define SCATTERDATAMODIFIER_H
-#include <QtDataVis3D/q3dscatter.h>
+#include <QtDataVisualization/q3dscatter.h>
+#include <QtGui/QFont>
-#include <QFont>
-#include <QDebug>
-#include <QTimer>
-
-using namespace QtDataVis3D;
+using namespace QtDataVisualization;
class ScatterDataModifier : public QObject
{
@@ -37,38 +34,29 @@ public:
void addData();
void changeStyle();
void changePresetCamera();
- void changeTheme();
- void changeTransparency();
+ void changeLabelStyle();
void changeFont(const QFont &font);
void changeFontSize(int fontsize);
void setBackgroundEnabled(int enabled);
void setGridEnabled(int enabled);
+ void setSmoothDots(int smooth);
void start();
public slots:
+ void changeStyle(int style);
+ void changeTheme(int theme);
void changeShadowQuality(int quality);
void shadowQualityUpdatedByVisual(QDataVis::ShadowQuality shadowQuality);
- void clear();
- void addOne();
- void addBunch();
- void insertOne();
- void insertBunch();
- void changeOne();
- void changeBunch();
- void removeOne();
- void removeBunch();
- void timeout();
- void startStopTimer();
signals:
void shadowQualityChanged(int quality);
private:
QVector3D randVector();
- Q3DScatter *m_chart;
+ Q3DScatter *m_graph;
int m_fontSize;
- QTimer m_timer;
- int m_loopCounter;
+ QDataVis::MeshStyle m_style;
+ bool m_smooth;
};
#endif
diff --git a/examples/scatterchart/doc/src/scatterchart.qdoc b/examples/scatterchart/doc/src/scatterchart.qdoc
deleted file mode 100644
index 6e8dcd03..00000000
--- a/examples/scatterchart/doc/src/scatterchart.qdoc
+++ /dev/null
@@ -1,29 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-/*!
- \example scatterchart
- \title Scatter Chart Example
-
- The scatterchart example shows how to make a simple 3D scatter chart using Q3DScatter and
- combining the use of widgets for adjusting several adjustable qualities.
-
- \image scatterchart-example.png
-
- TODO
-*/
diff --git a/examples/scatterchart/main.cpp b/examples/scatterchart/main.cpp
deleted file mode 100644
index ab6eb313..00000000
--- a/examples/scatterchart/main.cpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "scatterchart.h"
-
-#include <QApplication>
-#include <QWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QCheckBox>
-#include <QSlider>
-#include <QComboBox>
-#include <QFontComboBox>
-#include <QLabel>
-#include <QScreen>
-#include <QFontDatabase>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
-
- Q3DScatter *chart = new Q3DScatter();
- QSize screenSize = chart->screen()->size();
-
- QWidget *container = QWidget::createWindowContainer(chart);
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- widget->setWindowTitle(QStringLiteral("values of some things in something"));
-
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
-
- QPushButton *themeButton = new QPushButton(widget);
- themeButton->setText(QStringLiteral("Change theme"));
-
- QPushButton *labelButton = new QPushButton(widget);
- labelButton->setText(QStringLiteral("Change label style"));
-
- QPushButton *styleButton = new QPushButton(widget);
- styleButton->setText(QStringLiteral("Change item style"));
-
- QPushButton *cameraButton = new QPushButton(widget);
- cameraButton->setText(QStringLiteral("Change camera preset"));
-
- QPushButton *clearButton = new QPushButton(widget);
- clearButton->setText(QStringLiteral("Clear chart"));
-
- QPushButton *addOneButton = new QPushButton(widget);
- addOneButton->setText(QStringLiteral("Add item"));
-
- QPushButton *addBunchButton = new QPushButton(widget);
- addBunchButton->setText(QStringLiteral("Add bunch of items"));
-
- QPushButton *insertOneButton = new QPushButton(widget);
- insertOneButton->setText(QStringLiteral("Insert item"));
-
- QPushButton *insertBunchButton = new QPushButton(widget);
- insertBunchButton->setText(QStringLiteral("Insert bunch of items"));
-
- QPushButton *changeOneButton = new QPushButton(widget);
- changeOneButton->setText(QStringLiteral("Change item"));
-
- QPushButton *changeBunchButton = new QPushButton(widget);
- changeBunchButton->setText(QStringLiteral("Change bunch of items"));
-
- QPushButton *removeOneButton = new QPushButton(widget);
- removeOneButton->setText(QStringLiteral("Remove item"));
-
- QPushButton *removeBunchButton = new QPushButton(widget);
- removeBunchButton->setText(QStringLiteral("Remove bunch of items"));
-
- QPushButton *startTimerButton = new QPushButton(widget);
- startTimerButton->setText(QStringLiteral("Start/stop timer"));
-
- QCheckBox *backgroundCheckBox = new QCheckBox(widget);
- backgroundCheckBox->setText(QStringLiteral("Show background"));
- backgroundCheckBox->setChecked(true);
-
- QCheckBox *gridCheckBox = new QCheckBox(widget);
- gridCheckBox->setText(QStringLiteral("Show grid"));
- gridCheckBox->setChecked(true);
-
- QComboBox *shadowQuality = new QComboBox(widget);
- shadowQuality->addItem(QStringLiteral("None"));
- shadowQuality->addItem(QStringLiteral("Low"));
- shadowQuality->addItem(QStringLiteral("Medium"));
- shadowQuality->addItem(QStringLiteral("High"));
- shadowQuality->setCurrentIndex(1);
-
- QFontComboBox *fontList = new QFontComboBox(widget);
-
- QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget);
- fontSizeSlider->setTickInterval(1);
- fontSizeSlider->setMinimum(1);
- fontSizeSlider->setValue(30);
- fontSizeSlider->setMaximum(200);
-
- vLayout->addWidget(themeButton, 0, Qt::AlignTop);
- vLayout->addWidget(labelButton, 0, Qt::AlignTop);
- vLayout->addWidget(styleButton, 0, Qt::AlignTop);
- vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
- vLayout->addWidget(clearButton, 0, Qt::AlignTop);
- vLayout->addWidget(addOneButton, 0, Qt::AlignTop);
- vLayout->addWidget(addBunchButton, 0, Qt::AlignTop);
- vLayout->addWidget(insertOneButton, 0, Qt::AlignTop);
- vLayout->addWidget(insertBunchButton, 0, Qt::AlignTop);
- vLayout->addWidget(changeOneButton, 0, Qt::AlignTop);
- vLayout->addWidget(changeBunchButton, 0, Qt::AlignTop);
- vLayout->addWidget(removeOneButton, 0, Qt::AlignTop);
- vLayout->addWidget(removeBunchButton, 0, Qt::AlignTop);
- vLayout->addWidget(startTimerButton, 0, Qt::AlignTop);
- vLayout->addWidget(backgroundCheckBox);
- vLayout->addWidget(gridCheckBox);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
- vLayout->addWidget(shadowQuality);
- vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
- vLayout->addWidget(fontList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust font size")));
- vLayout->addWidget(fontSizeSlider, 1, Qt::AlignTop);
-
- widget->show();
-
- ScatterDataModifier *modifier = new ScatterDataModifier(chart);
-
- QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
- &ScatterDataModifier::changeFontSize);
-
- QObject::connect(styleButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changeStyle);
- QObject::connect(cameraButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changePresetCamera);
- QObject::connect(clearButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::clear);
- QObject::connect(addOneButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::addOne);
- QObject::connect(addBunchButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::addBunch);
- QObject::connect(insertOneButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::insertOne);
- QObject::connect(insertBunchButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::insertBunch);
- QObject::connect(changeOneButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changeOne);
- QObject::connect(changeBunchButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changeBunch);
- QObject::connect(removeOneButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::removeOne);
- QObject::connect(removeBunchButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::removeBunch);
- QObject::connect(startTimerButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::startStopTimer);
- QObject::connect(themeButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changeTheme);
- QObject::connect(labelButton, &QPushButton::clicked, modifier,
- &ScatterDataModifier::changeTransparency);
-
- QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeShadowQuality(int)));
- QObject::connect(modifier, &ScatterDataModifier::shadowQualityChanged, shadowQuality,
- &QComboBox::setCurrentIndex);
- QObject::connect(chart, &Q3DScatter::shadowQualityChanged, modifier,
- &ScatterDataModifier::shadowQualityUpdatedByVisual);
-
- QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
- &ScatterDataModifier::changeFont);
-
- QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
- &ScatterDataModifier::setBackgroundEnabled);
- QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
- &ScatterDataModifier::setGridEnabled);
-
- modifier->start();
-
- return app.exec();
-}
diff --git a/examples/scatterchart/scatterchart.cpp b/examples/scatterchart/scatterchart.cpp
deleted file mode 100644
index ac8676b5..00000000
--- a/examples/scatterchart/scatterchart.cpp
+++ /dev/null
@@ -1,325 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "scatterchart.h"
-#include <QtDataVis3D/qscatterdataproxy.h>
-#include <QtDataVis3D/qvalueaxis.h>
-#include <qmath.h>
-using namespace QtDataVis3D;
-
-//#define RANDOM_SCATTER
-
-const int numberOfItems = 10000;
-
-ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter)
- : m_chart(scatter),
- m_fontSize(30.0f)
-{
- m_chart->setFontSize(m_fontSize);
- m_chart->setObjectType(QDataVis::Spheres, true);
- m_chart->setTheme(QDataVis::ThemeBrownSand);
- m_chart->setShadowQuality(QDataVis::ShadowHigh);
-
- QScatterDataProxy *proxy = new QScatterDataProxy;
- m_chart->setDataProxy(proxy);
-
- connect(&m_timer, &QTimer::timeout, this, &ScatterDataModifier::timeout);
-}
-
-ScatterDataModifier::~ScatterDataModifier()
-{
- delete m_chart;
-}
-
-void ScatterDataModifier::start()
-{
- addData();
-}
-
-void ScatterDataModifier::addData()
-{
- // Add labels
- m_chart->valueAxisX()->setTitle("Somethings");
- m_chart->valueAxisY()->setTitle("Values");
- m_chart->valueAxisZ()->setTitle("Others");
- m_chart->valueAxisX()->setRange(-50.0, 50.0);
- m_chart->valueAxisY()->setRange(-1.0, 1.0);
- m_chart->valueAxisZ()->setRange(-50.0, 50.0);
-
- QScatterDataArray *dataArray = new QScatterDataArray;
- dataArray->resize(numberOfItems);
- QScatterDataItem *ptrToDataArray = &dataArray->first();
-
-#if RANDOM_SCATTER
- for (int i = 0; i < numberOfItems; i++) {
- ptrToDataArray->setPosition(randVector());
- ptrToDataArray++;
- }
-#else
- float limit = qSqrt(numberOfItems) / 2.0f;
- for (float i = -limit; i < limit; i++) {
- for (float j = -limit; j < limit; j++) {
- ptrToDataArray->setPosition(QVector3D(i, qCos(qDegreesToRadians((i * j) / 7.5)), j));
- ptrToDataArray++;
- }
- }
-#endif
-
- static_cast<QScatterDataProxy *>(m_chart->dataProxy())->resetArray(dataArray);
-}
-
-void ScatterDataModifier::changeStyle()
-{
- static int model = 0;
- switch (model) {
- case 0:
- m_chart->setObjectType(QDataVis::Dots, false);
- break;
- case 1:
- m_chart->setObjectType(QDataVis::Dots, true);
- break;
- case 2:
- m_chart->setObjectType(QDataVis::Spheres, false);
- break;
- case 3:
- m_chart->setObjectType(QDataVis::Spheres, true);
- break;
- }
- model++;
- if (model > 3)
- model = 0;
-}
-
-void ScatterDataModifier::changePresetCamera()
-{
- static int preset = QDataVis::PresetFrontLow;
-
- m_chart->setCameraPreset((QDataVis::CameraPreset)preset);
-
- if (++preset > QDataVis::PresetDirectlyAboveCCW45)
- preset = QDataVis::PresetFrontLow;
-}
-
-void ScatterDataModifier::changeTheme()
-{
- static int theme = QDataVis::ThemeSystem;
-
- m_chart->setTheme((QDataVis::ColorTheme)theme);
-
- if (++theme > QDataVis::ThemeLight)
- theme = QDataVis::ThemeSystem;
-}
-
-void ScatterDataModifier::changeTransparency()
-{
- static int transparency = QDataVis::TransparencyNone;
-
- m_chart->setLabelTransparency((QDataVis::LabelTransparency)transparency);
-
- if (++transparency > QDataVis::TransparencyNoBackground)
- transparency = QDataVis::TransparencyNone;
-}
-
-void ScatterDataModifier::changeFont(const QFont &font)
-{
- QFont newFont = font;
- newFont.setPointSizeF(m_fontSize);
- m_chart->setFont(newFont);
-}
-
-void ScatterDataModifier::changeFontSize(int fontsize)
-{
- m_fontSize = fontsize;
- m_chart->setFontSize((GLfloat)m_fontSize);
-}
-
-void ScatterDataModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality sq)
-{
- int quality = 0;
- switch (sq) {
- case QDataVis::ShadowLow:
- quality = 1;
- break;
- case QDataVis::ShadowMedium:
- quality = 2;
- break;
- case QDataVis::ShadowHigh:
- quality = 3;
- break;
- }
-
- // Updates the UI component to show correct shadow quality
- emit shadowQualityChanged(quality);
-}
-
-void ScatterDataModifier::clear()
-{
- m_chart->dataProxy()->resetArray(0);
- qDebug() << m_loopCounter << "Cleared array";
-}
-
-void ScatterDataModifier::addOne()
-{
- QScatterDataItem item(randVector());
- int addIndex = m_chart->dataProxy()->addItem(item);
- qDebug() << m_loopCounter << "added one to index:" << addIndex << "array size:" << m_chart->dataProxy()->array()->size();
-}
-
-void ScatterDataModifier::addBunch()
-{
- QScatterDataArray items(100);
- for (int i = 0; i < items.size(); i++)
- items[i].setPosition(randVector());
- int addIndex = m_chart->dataProxy()->addItems(items);
- qDebug() << m_loopCounter << "added bunch to index:" << addIndex << "array size:" << m_chart->dataProxy()->array()->size();
-}
-
-void ScatterDataModifier::insertOne()
-{
- QScatterDataItem item(randVector());
- m_chart->dataProxy()->insertItem(0, item);
- qDebug() << m_loopCounter << "Inserted one, array size:" << m_chart->dataProxy()->array()->size();
-}
-
-void ScatterDataModifier::insertBunch()
-{
- QScatterDataArray items(100);
- for (int i = 0; i < items.size(); i++)
- items[i].setPosition(randVector());
- m_chart->dataProxy()->insertItems(0, items);
- qDebug() << m_loopCounter << "Inserted bunch, array size:" << m_chart->dataProxy()->array()->size();
-}
-
-void ScatterDataModifier::changeOne()
-{
- if (m_chart->dataProxy()->array()->size()) {
- QScatterDataItem item(randVector());
- m_chart->dataProxy()->setItem(0, item);
- qDebug() << m_loopCounter << "Changed one, array size:" << m_chart->dataProxy()->array()->size();
- }
-}
-
-void ScatterDataModifier::changeBunch()
-{
- if (m_chart->dataProxy()->array()->size()) {
- int amount = qMin(m_chart->dataProxy()->array()->size(), 100);
- QScatterDataArray items(amount);
- for (int i = 0; i < items.size(); i++)
- items[i].setPosition(randVector());
- m_chart->dataProxy()->setItems(0, items);
- qDebug() << m_loopCounter << "Changed bunch, array size:" << m_chart->dataProxy()->array()->size();
- }
-}
-
-void ScatterDataModifier::removeOne()
-{
- m_chart->dataProxy()->removeItems(0, 1);
- qDebug() << m_loopCounter << "Removed one, array size:" << m_chart->dataProxy()->array()->size();
-}
-
-void ScatterDataModifier::removeBunch()
-{
- m_chart->dataProxy()->removeItems(0, 100);
- qDebug() << m_loopCounter << "Removed bunch, array size:" << m_chart->dataProxy()->array()->size();
-}
-
-void ScatterDataModifier::timeout()
-{
- int doWhat = rand() % 8;
- if (!(rand() % 100))
- doWhat = -1;
-
- switch (doWhat) {
- case 0:
- addOne();
- break;
- case 1:
- addBunch();
- break;
- case 2:
- insertOne();
- break;
- case 3:
- insertBunch();
- break;
- case 4:
- changeOne();
- break;
- case 5:
- changeBunch();
- break;
- case 6:
- removeOne();
- break;
- case 7:
- removeBunch();
- break;
- default:
- clear();
- break;
- }
-
- m_loopCounter++;
-}
-
-void ScatterDataModifier::startStopTimer()
-{
- if (m_timer.isActive()) {
- m_timer.stop();
- } else {
- clear();
- m_loopCounter = 0;
- m_timer.start(0);
- }
-}
-
-void ScatterDataModifier::changeShadowQuality(int quality)
-{
- QDataVis::ShadowQuality sq = QDataVis::ShadowNone;
- switch (quality) {
- case 1:
- sq = QDataVis::ShadowLow;
- break;
- case 2:
- sq = QDataVis::ShadowMedium;
- break;
- case 3:
- sq = QDataVis::ShadowHigh;
- break;
- }
- m_chart->setShadowQuality(sq);
- emit shadowQualityChanged(quality);
-}
-
-void ScatterDataModifier::setBackgroundEnabled(int enabled)
-{
- m_chart->setBackgroundVisible((bool)enabled);
-}
-
-void ScatterDataModifier::setGridEnabled(int enabled)
-{
- m_chart->setGridVisible((bool)enabled);
-}
-
-QVector3D ScatterDataModifier::randVector()
-{
- return QVector3D(
- (float)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f,
- (float)(rand() % 100) / 100.0f - (float)(rand() % 100) / 100.0f,
- (float)(rand() % 100) / 2.0f - (float)(rand() % 100) / 2.0f);
-}
diff --git a/examples/scatterchart/scatterchart.pro b/examples/scatterchart/scatterchart.pro
deleted file mode 100644
index 5dee59fd..00000000
--- a/examples/scatterchart/scatterchart.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp scatterchart.cpp
-HEADERS += scatterchart.h
-
-QT += widgets
-
-INSTALLS += target
diff --git a/examples/spectrum/3rdparty/fftreal/Array.h b/examples/spectrum/3rdparty/fftreal/Array.h
deleted file mode 100644
index a08e3cf2..00000000
--- a/examples/spectrum/3rdparty/fftreal/Array.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*****************************************************************************
-
- Array.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (Array_HEADER_INCLUDED)
-#define Array_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T, long LEN>
-class Array
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef T DataType;
-
- Array ();
-
- inline const DataType &
- operator [] (long pos) const;
- inline DataType &
- operator [] (long pos);
-
- static inline long
- size ();
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- DataType _data_arr [LEN];
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- Array (const Array &other);
- Array & operator = (const Array &other);
- bool operator == (const Array &other);
- bool operator != (const Array &other);
-
-}; // class Array
-
-
-
-#include "Array.hpp"
-
-
-
-#endif // Array_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/Array.hpp b/examples/spectrum/3rdparty/fftreal/Array.hpp
deleted file mode 100644
index 8300077e..00000000
--- a/examples/spectrum/3rdparty/fftreal/Array.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/*****************************************************************************
-
- Array.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (Array_CURRENT_CODEHEADER)
- #error Recursive inclusion of Array code header.
-#endif
-#define Array_CURRENT_CODEHEADER
-
-#if ! defined (Array_CODEHEADER_INCLUDED)
-#define Array_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include <cassert>
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T, long LEN>
-Array <T, LEN>::Array ()
-{
- // Nothing
-}
-
-
-
-template <class T, long LEN>
-const typename Array <T, LEN>::DataType & Array <T, LEN>::operator [] (long pos) const
-{
- assert (pos >= 0);
- assert (pos < LEN);
-
- return (_data_arr [pos]);
-}
-
-
-
-template <class T, long LEN>
-typename Array <T, LEN>::DataType & Array <T, LEN>::operator [] (long pos)
-{
- assert (pos >= 0);
- assert (pos < LEN);
-
- return (_data_arr [pos]);
-}
-
-
-
-template <class T, long LEN>
-long Array <T, LEN>::size ()
-{
- return (LEN);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // Array_CODEHEADER_INCLUDED
-
-#undef Array_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/DynArray.h b/examples/spectrum/3rdparty/fftreal/DynArray.h
deleted file mode 100644
index 8041a0c1..00000000
--- a/examples/spectrum/3rdparty/fftreal/DynArray.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*****************************************************************************
-
- DynArray.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (DynArray_HEADER_INCLUDED)
-#define DynArray_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-class DynArray
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef T DataType;
-
- DynArray ();
- explicit DynArray (long size);
- ~DynArray ();
-
- inline long size () const;
- inline void resize (long size);
-
- inline const DataType &
- operator [] (long pos) const;
- inline DataType &
- operator [] (long pos);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- DataType * _data_ptr;
- long _len;
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- DynArray (const DynArray &other);
- DynArray & operator = (const DynArray &other);
- bool operator == (const DynArray &other);
- bool operator != (const DynArray &other);
-
-}; // class DynArray
-
-
-
-#include "DynArray.hpp"
-
-
-
-#endif // DynArray_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/DynArray.hpp b/examples/spectrum/3rdparty/fftreal/DynArray.hpp
deleted file mode 100644
index e62b10f8..00000000
--- a/examples/spectrum/3rdparty/fftreal/DynArray.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/*****************************************************************************
-
- DynArray.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (DynArray_CURRENT_CODEHEADER)
- #error Recursive inclusion of DynArray code header.
-#endif
-#define DynArray_CURRENT_CODEHEADER
-
-#if ! defined (DynArray_CODEHEADER_INCLUDED)
-#define DynArray_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include <cassert>
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-DynArray <T>::DynArray ()
-: _data_ptr (0)
-, _len (0)
-{
- // Nothing
-}
-
-
-
-template <class T>
-DynArray <T>::DynArray (long size)
-: _data_ptr (0)
-, _len (0)
-{
- assert (size >= 0);
- if (size > 0)
- {
- _data_ptr = new DataType [size];
- _len = size;
- }
-}
-
-
-
-template <class T>
-DynArray <T>::~DynArray ()
-{
- delete [] _data_ptr;
- _data_ptr = 0;
- _len = 0;
-}
-
-
-
-template <class T>
-long DynArray <T>::size () const
-{
- return (_len);
-}
-
-
-
-template <class T>
-void DynArray <T>::resize (long size)
-{
- assert (size >= 0);
- if (size > 0)
- {
- DataType * old_data_ptr = _data_ptr;
- DataType * tmp_data_ptr = new DataType [size];
-
- _data_ptr = tmp_data_ptr;
- _len = size;
-
- delete [] old_data_ptr;
- }
-}
-
-
-
-template <class T>
-const typename DynArray <T>::DataType & DynArray <T>::operator [] (long pos) const
-{
- assert (pos >= 0);
- assert (pos < _len);
-
- return (_data_ptr [pos]);
-}
-
-
-
-template <class T>
-typename DynArray <T>::DataType & DynArray <T>::operator [] (long pos)
-{
- assert (pos >= 0);
- assert (pos < _len);
-
- return (_data_ptr [pos]);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // DynArray_CODEHEADER_INCLUDED
-
-#undef DynArray_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTReal.dsp b/examples/spectrum/3rdparty/fftreal/FFTReal.dsp
deleted file mode 100644
index fe970db0..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTReal.dsp
+++ /dev/null
@@ -1,273 +0,0 @@
-# Microsoft Developer Studio Project File - Name="FFTReal" - Package Owner=<4>
-# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
-
-# TARGTYPE "Win32 (x86) Console Application" 0x0103
-
-CFG=FFTReal - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
-!MESSAGE
-!MESSAGE NMAKE /f "FFTReal.mak".
-!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
-!MESSAGE
-!MESSAGE NMAKE /f "FFTReal.mak" CFG="FFTReal - Win32 Debug"
-!MESSAGE
-!MESSAGE Possible choices for configuration are:
-!MESSAGE
-!MESSAGE "FFTReal - Win32 Release" (based on "Win32 (x86) Console Application")
-!MESSAGE "FFTReal - Win32 Debug" (based on "Win32 (x86) Console Application")
-!MESSAGE
-
-# Begin Project
-# PROP AllowPerConfigDependencies 0
-# PROP Scc_ProjName ""
-# PROP Scc_LocalPath ""
-CPP=cl.exe
-RSC=rc.exe
-
-!IF "$(CFG)" == "FFTReal - Win32 Release"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 0
-# PROP BASE Output_Dir "Release"
-# PROP BASE Intermediate_Dir "Release"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 0
-# PROP Output_Dir "Release"
-# PROP Intermediate_Dir "Release"
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /W3 /GR /GX /O2 /Ob2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD BASE RSC /l 0x40c /d "NDEBUG"
-# ADD RSC /l 0x40c /d "NDEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-
-!ELSEIF "$(CFG)" == "FFTReal - Win32 Debug"
-
-# PROP BASE Use_MFC 0
-# PROP BASE Use_Debug_Libraries 1
-# PROP BASE Output_Dir "Debug"
-# PROP BASE Intermediate_Dir "Debug"
-# PROP BASE Target_Dir ""
-# PROP Use_MFC 0
-# PROP Use_Debug_Libraries 1
-# PROP Output_Dir "Debug"
-# PROP Intermediate_Dir "Debug"
-# PROP Ignore_Export_Lib 0
-# PROP Target_Dir ""
-# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
-# ADD CPP /nologo /G6 /MTd /W3 /Gm /GR /GX /Zi /Od /Gf /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c
-# ADD BASE RSC /l 0x40c /d "_DEBUG"
-# ADD RSC /l 0x40c /d "_DEBUG"
-BSC32=bscmake.exe
-# ADD BASE BSC32 /nologo
-# ADD BSC32 /nologo
-LINK32=link.exe
-# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
-
-!ENDIF
-
-# Begin Target
-
-# Name "FFTReal - Win32 Release"
-# Name "FFTReal - Win32 Debug"
-# Begin Group "Library"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\Array.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\Array.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\def.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\DynArray.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\DynArray.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTReal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTReal.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealFixLen.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealFixLen.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealFixLenParam.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealPassDirect.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealPassDirect.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealPassInverse.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealPassInverse.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealSelect.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealSelect.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealUseTrigo.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\FFTRealUseTrigo.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\OscSinCos.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\OscSinCos.hpp
-# End Source File
-# End Group
-# Begin Group "Test"
-
-# PROP Default_Filter ""
-# Begin Group "stopwatch"
-
-# PROP Default_Filter ""
-# Begin Source File
-
-SOURCE=.\stopwatch\ClockCycleCounter.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\ClockCycleCounter.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\ClockCycleCounter.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\def.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\fnc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\fnc.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\Int64.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\StopWatch.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\StopWatch.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\stopwatch\StopWatch.hpp
-# End Source File
-# End Group
-# Begin Source File
-
-SOURCE=.\test.cpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\test_fnc.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\test_fnc.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\test_settings.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestAccuracy.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestAccuracy.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestHelperFixLen.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestHelperFixLen.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestHelperNormal.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestHelperNormal.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestSpeed.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestSpeed.hpp
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestWhiteNoiseGen.h
-# End Source File
-# Begin Source File
-
-SOURCE=.\TestWhiteNoiseGen.hpp
-# End Source File
-# End Group
-# End Target
-# End Project
diff --git a/examples/spectrum/3rdparty/fftreal/FFTReal.dsw b/examples/spectrum/3rdparty/fftreal/FFTReal.dsw
deleted file mode 100644
index 076b0aeb..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTReal.dsw
+++ /dev/null
@@ -1,29 +0,0 @@
-Microsoft Developer Studio Workspace File, Format Version 6.00
-# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
-
-###############################################################################
-
-Project: "FFTReal"=.\FFTReal.dsp - Package Owner=<4>
-
-Package=<5>
-{{{
-}}}
-
-Package=<4>
-{{{
-}}}
-
-###############################################################################
-
-Global:
-
-Package=<5>
-{{{
-}}}
-
-Package=<3>
-{{{
-}}}
-
-###############################################################################
-
diff --git a/examples/spectrum/3rdparty/fftreal/FFTReal.h b/examples/spectrum/3rdparty/fftreal/FFTReal.h
deleted file mode 100644
index 9fb27250..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTReal.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*****************************************************************************
-
- FFTReal.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTReal_HEADER_INCLUDED)
-#define FFTReal_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "DynArray.h"
-#include "OscSinCos.h"
-
-
-
-template <class DT>
-class FFTReal
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- enum { MAX_BIT_DEPTH = 30 }; // So length can be represented as long int
-
- typedef DT DataType;
-
- explicit FFTReal (long length);
- virtual ~FFTReal () {}
-
- long get_length () const;
- void do_fft (DataType f [], const DataType x []) const;
- void do_ifft (const DataType f [], DataType x []) const;
- void rescale (DataType x []) const;
- DataType * use_buffer () const;
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- // Over this bit depth, we use direct calculation for sin/cos
- enum { TRIGO_BD_LIMIT = 12 };
-
- typedef OscSinCos <DataType> OscType;
-
- void init_br_lut ();
- void init_trigo_lut ();
- void init_trigo_osc ();
-
- FORCEINLINE const long *
- get_br_ptr () const;
- FORCEINLINE const DataType *
- get_trigo_ptr (int level) const;
- FORCEINLINE long
- get_trigo_level_index (int level) const;
-
- inline void compute_fft_general (DataType f [], const DataType x []) const;
- inline void compute_direct_pass_1_2 (DataType df [], const DataType x []) const;
- inline void compute_direct_pass_3 (DataType df [], const DataType sf []) const;
- inline void compute_direct_pass_n (DataType df [], const DataType sf [], int pass) const;
- inline void compute_direct_pass_n_lut (DataType df [], const DataType sf [], int pass) const;
- inline void compute_direct_pass_n_osc (DataType df [], const DataType sf [], int pass) const;
-
- inline void compute_ifft_general (const DataType f [], DataType x []) const;
- inline void compute_inverse_pass_n (DataType df [], const DataType sf [], int pass) const;
- inline void compute_inverse_pass_n_osc (DataType df [], const DataType sf [], int pass) const;
- inline void compute_inverse_pass_n_lut (DataType df [], const DataType sf [], int pass) const;
- inline void compute_inverse_pass_3 (DataType df [], const DataType sf []) const;
- inline void compute_inverse_pass_1_2 (DataType x [], const DataType sf []) const;
-
- const long _length;
- const int _nbr_bits;
- DynArray <long>
- _br_lut;
- DynArray <DataType>
- _trigo_lut;
- mutable DynArray <DataType>
- _buffer;
- mutable DynArray <OscType>
- _trigo_osc;
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTReal ();
- FFTReal (const FFTReal &other);
- FFTReal & operator = (const FFTReal &other);
- bool operator == (const FFTReal &other);
- bool operator != (const FFTReal &other);
-
-}; // class FFTReal
-
-
-
-#include "FFTReal.hpp"
-
-
-
-#endif // FFTReal_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTReal.hpp b/examples/spectrum/3rdparty/fftreal/FFTReal.hpp
deleted file mode 100644
index 335d771d..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTReal.hpp
+++ /dev/null
@@ -1,916 +0,0 @@
-/*****************************************************************************
-
- FFTReal.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTReal_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTReal code header.
-#endif
-#define FFTReal_CURRENT_CODEHEADER
-
-#if ! defined (FFTReal_CODEHEADER_INCLUDED)
-#define FFTReal_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include <cassert>
-#include <cmath>
-
-
-
-static inline bool FFTReal_is_pow2 (long x)
-{
- assert (x > 0);
-
- return ((x & -x) == x);
-}
-
-
-
-static inline int FFTReal_get_next_pow2 (long x)
-{
- --x;
-
- int p = 0;
- while ((x & ~0xFFFFL) != 0)
- {
- p += 16;
- x >>= 16;
- }
- while ((x & ~0xFL) != 0)
- {
- p += 4;
- x >>= 4;
- }
- while (x > 0)
- {
- ++p;
- x >>= 1;
- }
-
- return (p);
-}
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*
-==============================================================================
-Name: ctor
-Input parameters:
- - length: length of the array on which we want to do a FFT. Range: power of
- 2 only, > 0.
-Throws: std::bad_alloc
-==============================================================================
-*/
-
-template <class DT>
-FFTReal <DT>::FFTReal (long length)
-: _length (length)
-, _nbr_bits (FFTReal_get_next_pow2 (length))
-, _br_lut ()
-, _trigo_lut ()
-, _buffer (length)
-, _trigo_osc ()
-{
- assert (FFTReal_is_pow2 (length));
- assert (_nbr_bits <= MAX_BIT_DEPTH);
-
- init_br_lut ();
- init_trigo_lut ();
- init_trigo_osc ();
-}
-
-
-
-/*
-==============================================================================
-Name: get_length
-Description:
- Returns the number of points processed by this FFT object.
-Returns: The number of points, power of 2, > 0.
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-long FFTReal <DT>::get_length () const
-{
- return (_length);
-}
-
-
-
-/*
-==============================================================================
-Name: do_fft
-Description:
- Compute the FFT of the array.
-Input parameters:
- - x: pointer on the source array (time).
-Output parameters:
- - f: pointer on the destination array (frequencies).
- f [0...length(x)/2] = real values,
- f [length(x)/2+1...length(x)-1] = negative imaginary values of
- coefficents 1...length(x)/2-1.
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-void FFTReal <DT>::do_fft (DataType f [], const DataType x []) const
-{
- assert (f != 0);
- assert (f != use_buffer ());
- assert (x != 0);
- assert (x != use_buffer ());
- assert (x != f);
-
- // General case
- if (_nbr_bits > 2)
- {
- compute_fft_general (f, x);
- }
-
- // 4-point FFT
- else if (_nbr_bits == 2)
- {
- f [1] = x [0] - x [2];
- f [3] = x [1] - x [3];
-
- const DataType b_0 = x [0] + x [2];
- const DataType b_2 = x [1] + x [3];
-
- f [0] = b_0 + b_2;
- f [2] = b_0 - b_2;
- }
-
- // 2-point FFT
- else if (_nbr_bits == 1)
- {
- f [0] = x [0] + x [1];
- f [1] = x [0] - x [1];
- }
-
- // 1-point FFT
- else
- {
- f [0] = x [0];
- }
-}
-
-
-
-/*
-==============================================================================
-Name: do_ifft
-Description:
- Compute the inverse FFT of the array. Note that data must be post-scaled:
- IFFT (FFT (x)) = x * length (x).
-Input parameters:
- - f: pointer on the source array (frequencies).
- f [0...length(x)/2] = real values
- f [length(x)/2+1...length(x)-1] = negative imaginary values of
- coefficents 1...length(x)/2-1.
-Output parameters:
- - x: pointer on the destination array (time).
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-void FFTReal <DT>::do_ifft (const DataType f [], DataType x []) const
-{
- assert (f != 0);
- assert (f != use_buffer ());
- assert (x != 0);
- assert (x != use_buffer ());
- assert (x != f);
-
- // General case
- if (_nbr_bits > 2)
- {
- compute_ifft_general (f, x);
- }
-
- // 4-point IFFT
- else if (_nbr_bits == 2)
- {
- const DataType b_0 = f [0] + f [2];
- const DataType b_2 = f [0] - f [2];
-
- x [0] = b_0 + f [1] * 2;
- x [2] = b_0 - f [1] * 2;
- x [1] = b_2 + f [3] * 2;
- x [3] = b_2 - f [3] * 2;
- }
-
- // 2-point IFFT
- else if (_nbr_bits == 1)
- {
- x [0] = f [0] + f [1];
- x [1] = f [0] - f [1];
- }
-
- // 1-point IFFT
- else
- {
- x [0] = f [0];
- }
-}
-
-
-
-/*
-==============================================================================
-Name: rescale
-Description:
- Scale an array by divide each element by its length. This function should
- be called after FFT + IFFT.
-Input parameters:
- - x: pointer on array to rescale (time or frequency).
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-void FFTReal <DT>::rescale (DataType x []) const
-{
- const DataType mul = DataType (1.0 / _length);
-
- if (_length < 4)
- {
- long i = _length - 1;
- do
- {
- x [i] *= mul;
- --i;
- }
- while (i >= 0);
- }
-
- else
- {
- assert ((_length & 3) == 0);
-
- // Could be optimized with SIMD instruction sets (needs alignment check)
- long i = _length - 4;
- do
- {
- x [i + 0] *= mul;
- x [i + 1] *= mul;
- x [i + 2] *= mul;
- x [i + 3] *= mul;
- i -= 4;
- }
- while (i >= 0);
- }
-}
-
-
-
-/*
-==============================================================================
-Name: use_buffer
-Description:
- Access the internal buffer, whose length is the FFT one.
- Buffer content will be erased at each do_fft() / do_ifft() call!
- This buffer cannot be used as:
- - source for FFT or IFFT done with this object
- - destination for FFT or IFFT done with this object
-Returns:
- Buffer start address
-Throws: Nothing
-==============================================================================
-*/
-
-template <class DT>
-typename FFTReal <DT>::DataType * FFTReal <DT>::use_buffer () const
-{
- return (&_buffer [0]);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class DT>
-void FFTReal <DT>::init_br_lut ()
-{
- const long length = 1L << _nbr_bits;
- _br_lut.resize (length);
-
- _br_lut [0] = 0;
- long br_index = 0;
- for (long cnt = 1; cnt < length; ++cnt)
- {
- // ++br_index (bit reversed)
- long bit = length >> 1;
- while (((br_index ^= bit) & bit) == 0)
- {
- bit >>= 1;
- }
-
- _br_lut [cnt] = br_index;
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::init_trigo_lut ()
-{
- using namespace std;
-
- if (_nbr_bits > 3)
- {
- const long total_len = (1L << (_nbr_bits - 1)) - 4;
- _trigo_lut.resize (total_len);
-
- for (int level = 3; level < _nbr_bits; ++level)
- {
- const long level_len = 1L << (level - 1);
- DataType * const level_ptr =
- &_trigo_lut [get_trigo_level_index (level)];
- const double mul = PI / (level_len << 1);
-
- for (long i = 0; i < level_len; ++ i)
- {
- level_ptr [i] = static_cast <DataType> (cos (i * mul));
- }
- }
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::init_trigo_osc ()
-{
- const int nbr_osc = _nbr_bits - TRIGO_BD_LIMIT;
- if (nbr_osc > 0)
- {
- _trigo_osc.resize (nbr_osc);
-
- for (int osc_cnt = 0; osc_cnt < nbr_osc; ++osc_cnt)
- {
- OscType & osc = _trigo_osc [osc_cnt];
-
- const long len = 1L << (TRIGO_BD_LIMIT + osc_cnt);
- const double mul = (0.5 * PI) / len;
- osc.set_step (mul);
- }
- }
-}
-
-
-
-template <class DT>
-const long * FFTReal <DT>::get_br_ptr () const
-{
- return (&_br_lut [0]);
-}
-
-
-
-template <class DT>
-const typename FFTReal <DT>::DataType * FFTReal <DT>::get_trigo_ptr (int level) const
-{
- assert (level >= 3);
-
- return (&_trigo_lut [get_trigo_level_index (level)]);
-}
-
-
-
-template <class DT>
-long FFTReal <DT>::get_trigo_level_index (int level) const
-{
- assert (level >= 3);
-
- return ((1L << (level - 1)) - 4);
-}
-
-
-
-// Transform in several passes
-template <class DT>
-void FFTReal <DT>::compute_fft_general (DataType f [], const DataType x []) const
-{
- assert (f != 0);
- assert (f != use_buffer ());
- assert (x != 0);
- assert (x != use_buffer ());
- assert (x != f);
-
- DataType * sf;
- DataType * df;
-
- if ((_nbr_bits & 1) != 0)
- {
- df = use_buffer ();
- sf = f;
- }
- else
- {
- df = f;
- sf = use_buffer ();
- }
-
- compute_direct_pass_1_2 (df, x);
- compute_direct_pass_3 (sf, df);
-
- for (int pass = 3; pass < _nbr_bits; ++ pass)
- {
- compute_direct_pass_n (df, sf, pass);
-
- DataType * const temp_ptr = df;
- df = sf;
- sf = temp_ptr;
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_1_2 (DataType df [], const DataType x []) const
-{
- assert (df != 0);
- assert (x != 0);
- assert (df != x);
-
- const long * const bit_rev_lut_ptr = get_br_ptr ();
- long coef_index = 0;
- do
- {
- const long rev_index_0 = bit_rev_lut_ptr [coef_index];
- const long rev_index_1 = bit_rev_lut_ptr [coef_index + 1];
- const long rev_index_2 = bit_rev_lut_ptr [coef_index + 2];
- const long rev_index_3 = bit_rev_lut_ptr [coef_index + 3];
-
- DataType * const df2 = df + coef_index;
- df2 [1] = x [rev_index_0] - x [rev_index_1];
- df2 [3] = x [rev_index_2] - x [rev_index_3];
-
- const DataType sf_0 = x [rev_index_0] + x [rev_index_1];
- const DataType sf_2 = x [rev_index_2] + x [rev_index_3];
-
- df2 [0] = sf_0 + sf_2;
- df2 [2] = sf_0 - sf_2;
-
- coef_index += 4;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_3 (DataType df [], const DataType sf []) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
-
- const DataType sqrt2_2 = DataType (SQRT2 * 0.5);
- long coef_index = 0;
- do
- {
- DataType v;
-
- df [coef_index] = sf [coef_index] + sf [coef_index + 4];
- df [coef_index + 4] = sf [coef_index] - sf [coef_index + 4];
- df [coef_index + 2] = sf [coef_index + 2];
- df [coef_index + 6] = sf [coef_index + 6];
-
- v = (sf [coef_index + 5] - sf [coef_index + 7]) * sqrt2_2;
- df [coef_index + 1] = sf [coef_index + 1] + v;
- df [coef_index + 3] = sf [coef_index + 1] - v;
-
- v = (sf [coef_index + 5] + sf [coef_index + 7]) * sqrt2_2;
- df [coef_index + 5] = v + sf [coef_index + 3];
- df [coef_index + 7] = v - sf [coef_index + 3];
-
- coef_index += 8;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_n (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass >= 3);
- assert (pass < _nbr_bits);
-
- if (pass <= TRIGO_BD_LIMIT)
- {
- compute_direct_pass_n_lut (df, sf, pass);
- }
- else
- {
- compute_direct_pass_n_osc (df, sf, pass);
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_n_lut (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass >= 3);
- assert (pass < _nbr_bits);
-
- const long nbr_coef = 1 << pass;
- const long h_nbr_coef = nbr_coef >> 1;
- const long d_nbr_coef = nbr_coef << 1;
- long coef_index = 0;
- const DataType * const cos_ptr = get_trigo_ptr (pass);
- do
- {
- const DataType * const sf1r = sf + coef_index;
- const DataType * const sf2r = sf1r + nbr_coef;
- DataType * const dfr = df + coef_index;
- DataType * const dfi = dfr + nbr_coef;
-
- // Extreme coefficients are always real
- dfr [0] = sf1r [0] + sf2r [0];
- dfi [0] = sf1r [0] - sf2r [0]; // dfr [nbr_coef] =
- dfr [h_nbr_coef] = sf1r [h_nbr_coef];
- dfi [h_nbr_coef] = sf2r [h_nbr_coef];
-
- // Others are conjugate complex numbers
- const DataType * const sf1i = sf1r + h_nbr_coef;
- const DataType * const sf2i = sf1i + nbr_coef;
- for (long i = 1; i < h_nbr_coef; ++ i)
- {
- const DataType c = cos_ptr [i]; // cos (i*PI/nbr_coef);
- const DataType s = cos_ptr [h_nbr_coef - i]; // sin (i*PI/nbr_coef);
- DataType v;
-
- v = sf2r [i] * c - sf2i [i] * s;
- dfr [i] = sf1r [i] + v;
- dfi [-i] = sf1r [i] - v; // dfr [nbr_coef - i] =
-
- v = sf2r [i] * s + sf2i [i] * c;
- dfi [i] = v + sf1i [i];
- dfi [nbr_coef - i] = v - sf1i [i];
- }
-
- coef_index += d_nbr_coef;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_direct_pass_n_osc (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass > TRIGO_BD_LIMIT);
- assert (pass < _nbr_bits);
-
- const long nbr_coef = 1 << pass;
- const long h_nbr_coef = nbr_coef >> 1;
- const long d_nbr_coef = nbr_coef << 1;
- long coef_index = 0;
- OscType & osc = _trigo_osc [pass - (TRIGO_BD_LIMIT + 1)];
- do
- {
- const DataType * const sf1r = sf + coef_index;
- const DataType * const sf2r = sf1r + nbr_coef;
- DataType * const dfr = df + coef_index;
- DataType * const dfi = dfr + nbr_coef;
-
- osc.clear_buffers ();
-
- // Extreme coefficients are always real
- dfr [0] = sf1r [0] + sf2r [0];
- dfi [0] = sf1r [0] - sf2r [0]; // dfr [nbr_coef] =
- dfr [h_nbr_coef] = sf1r [h_nbr_coef];
- dfi [h_nbr_coef] = sf2r [h_nbr_coef];
-
- // Others are conjugate complex numbers
- const DataType * const sf1i = sf1r + h_nbr_coef;
- const DataType * const sf2i = sf1i + nbr_coef;
- for (long i = 1; i < h_nbr_coef; ++ i)
- {
- osc.step ();
- const DataType c = osc.get_cos ();
- const DataType s = osc.get_sin ();
- DataType v;
-
- v = sf2r [i] * c - sf2i [i] * s;
- dfr [i] = sf1r [i] + v;
- dfi [-i] = sf1r [i] - v; // dfr [nbr_coef - i] =
-
- v = sf2r [i] * s + sf2i [i] * c;
- dfi [i] = v + sf1i [i];
- dfi [nbr_coef - i] = v - sf1i [i];
- }
-
- coef_index += d_nbr_coef;
- }
- while (coef_index < _length);
-}
-
-
-
-// Transform in several pass
-template <class DT>
-void FFTReal <DT>::compute_ifft_general (const DataType f [], DataType x []) const
-{
- assert (f != 0);
- assert (f != use_buffer ());
- assert (x != 0);
- assert (x != use_buffer ());
- assert (x != f);
-
- DataType * sf = const_cast <DataType *> (f);
- DataType * df;
- DataType * df_temp;
-
- if (_nbr_bits & 1)
- {
- df = use_buffer ();
- df_temp = x;
- }
- else
- {
- df = x;
- df_temp = use_buffer ();
- }
-
- for (int pass = _nbr_bits - 1; pass >= 3; -- pass)
- {
- compute_inverse_pass_n (df, sf, pass);
-
- if (pass < _nbr_bits - 1)
- {
- DataType * const temp_ptr = df;
- df = sf;
- sf = temp_ptr;
- }
- else
- {
- sf = df;
- df = df_temp;
- }
- }
-
- compute_inverse_pass_3 (df, sf);
- compute_inverse_pass_1_2 (x, df);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_n (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass >= 3);
- assert (pass < _nbr_bits);
-
- if (pass <= TRIGO_BD_LIMIT)
- {
- compute_inverse_pass_n_lut (df, sf, pass);
- }
- else
- {
- compute_inverse_pass_n_osc (df, sf, pass);
- }
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_n_lut (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass >= 3);
- assert (pass < _nbr_bits);
-
- const long nbr_coef = 1 << pass;
- const long h_nbr_coef = nbr_coef >> 1;
- const long d_nbr_coef = nbr_coef << 1;
- long coef_index = 0;
- const DataType * const cos_ptr = get_trigo_ptr (pass);
- do
- {
- const DataType * const sfr = sf + coef_index;
- const DataType * const sfi = sfr + nbr_coef;
- DataType * const df1r = df + coef_index;
- DataType * const df2r = df1r + nbr_coef;
-
- // Extreme coefficients are always real
- df1r [0] = sfr [0] + sfi [0]; // + sfr [nbr_coef]
- df2r [0] = sfr [0] - sfi [0]; // - sfr [nbr_coef]
- df1r [h_nbr_coef] = sfr [h_nbr_coef] * 2;
- df2r [h_nbr_coef] = sfi [h_nbr_coef] * 2;
-
- // Others are conjugate complex numbers
- DataType * const df1i = df1r + h_nbr_coef;
- DataType * const df2i = df1i + nbr_coef;
- for (long i = 1; i < h_nbr_coef; ++ i)
- {
- df1r [i] = sfr [i] + sfi [-i]; // + sfr [nbr_coef - i]
- df1i [i] = sfi [i] - sfi [nbr_coef - i];
-
- const DataType c = cos_ptr [i]; // cos (i*PI/nbr_coef);
- const DataType s = cos_ptr [h_nbr_coef - i]; // sin (i*PI/nbr_coef);
- const DataType vr = sfr [i] - sfi [-i]; // - sfr [nbr_coef - i]
- const DataType vi = sfi [i] + sfi [nbr_coef - i];
-
- df2r [i] = vr * c + vi * s;
- df2i [i] = vi * c - vr * s;
- }
-
- coef_index += d_nbr_coef;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_n_osc (DataType df [], const DataType sf [], int pass) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
- assert (pass > TRIGO_BD_LIMIT);
- assert (pass < _nbr_bits);
-
- const long nbr_coef = 1 << pass;
- const long h_nbr_coef = nbr_coef >> 1;
- const long d_nbr_coef = nbr_coef << 1;
- long coef_index = 0;
- OscType & osc = _trigo_osc [pass - (TRIGO_BD_LIMIT + 1)];
- do
- {
- const DataType * const sfr = sf + coef_index;
- const DataType * const sfi = sfr + nbr_coef;
- DataType * const df1r = df + coef_index;
- DataType * const df2r = df1r + nbr_coef;
-
- osc.clear_buffers ();
-
- // Extreme coefficients are always real
- df1r [0] = sfr [0] + sfi [0]; // + sfr [nbr_coef]
- df2r [0] = sfr [0] - sfi [0]; // - sfr [nbr_coef]
- df1r [h_nbr_coef] = sfr [h_nbr_coef] * 2;
- df2r [h_nbr_coef] = sfi [h_nbr_coef] * 2;
-
- // Others are conjugate complex numbers
- DataType * const df1i = df1r + h_nbr_coef;
- DataType * const df2i = df1i + nbr_coef;
- for (long i = 1; i < h_nbr_coef; ++ i)
- {
- df1r [i] = sfr [i] + sfi [-i]; // + sfr [nbr_coef - i]
- df1i [i] = sfi [i] - sfi [nbr_coef - i];
-
- osc.step ();
- const DataType c = osc.get_cos ();
- const DataType s = osc.get_sin ();
- const DataType vr = sfr [i] - sfi [-i]; // - sfr [nbr_coef - i]
- const DataType vi = sfi [i] + sfi [nbr_coef - i];
-
- df2r [i] = vr * c + vi * s;
- df2i [i] = vi * c - vr * s;
- }
-
- coef_index += d_nbr_coef;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_3 (DataType df [], const DataType sf []) const
-{
- assert (df != 0);
- assert (sf != 0);
- assert (df != sf);
-
- const DataType sqrt2_2 = DataType (SQRT2 * 0.5);
- long coef_index = 0;
- do
- {
- df [coef_index] = sf [coef_index] + sf [coef_index + 4];
- df [coef_index + 4] = sf [coef_index] - sf [coef_index + 4];
- df [coef_index + 2] = sf [coef_index + 2] * 2;
- df [coef_index + 6] = sf [coef_index + 6] * 2;
-
- df [coef_index + 1] = sf [coef_index + 1] + sf [coef_index + 3];
- df [coef_index + 3] = sf [coef_index + 5] - sf [coef_index + 7];
-
- const DataType vr = sf [coef_index + 1] - sf [coef_index + 3];
- const DataType vi = sf [coef_index + 5] + sf [coef_index + 7];
-
- df [coef_index + 5] = (vr + vi) * sqrt2_2;
- df [coef_index + 7] = (vi - vr) * sqrt2_2;
-
- coef_index += 8;
- }
- while (coef_index < _length);
-}
-
-
-
-template <class DT>
-void FFTReal <DT>::compute_inverse_pass_1_2 (DataType x [], const DataType sf []) const
-{
- assert (x != 0);
- assert (sf != 0);
- assert (x != sf);
-
- const long * bit_rev_lut_ptr = get_br_ptr ();
- const DataType * sf2 = sf;
- long coef_index = 0;
- do
- {
- {
- const DataType b_0 = sf2 [0] + sf2 [2];
- const DataType b_2 = sf2 [0] - sf2 [2];
- const DataType b_1 = sf2 [1] * 2;
- const DataType b_3 = sf2 [3] * 2;
-
- x [bit_rev_lut_ptr [0]] = b_0 + b_1;
- x [bit_rev_lut_ptr [1]] = b_0 - b_1;
- x [bit_rev_lut_ptr [2]] = b_2 + b_3;
- x [bit_rev_lut_ptr [3]] = b_2 - b_3;
- }
- {
- const DataType b_0 = sf2 [4] + sf2 [6];
- const DataType b_2 = sf2 [4] - sf2 [6];
- const DataType b_1 = sf2 [5] * 2;
- const DataType b_3 = sf2 [7] * 2;
-
- x [bit_rev_lut_ptr [4]] = b_0 + b_1;
- x [bit_rev_lut_ptr [5]] = b_0 - b_1;
- x [bit_rev_lut_ptr [6]] = b_2 + b_3;
- x [bit_rev_lut_ptr [7]] = b_2 - b_3;
- }
-
- sf2 += 8;
- coef_index += 8;
- bit_rev_lut_ptr += 8;
- }
- while (coef_index < _length);
-}
-
-
-
-#endif // FFTReal_CODEHEADER_INCLUDED
-
-#undef FFTReal_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealFixLen.h b/examples/spectrum/3rdparty/fftreal/FFTRealFixLen.h
deleted file mode 100644
index 0b802668..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealFixLen.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*****************************************************************************
-
- FFTRealFixLen.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealFixLen_HEADER_INCLUDED)
-#define FFTRealFixLen_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "Array.h"
-#include "DynArray.h"
-#include "FFTRealFixLenParam.h"
-#include "OscSinCos.h"
-
-
-
-template <int LL2>
-class FFTRealFixLen
-{
- typedef int CompileTimeCheck1 [(LL2 >= 0) ? 1 : -1];
- typedef int CompileTimeCheck2 [(LL2 <= 30) ? 1 : -1];
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLenParam::DataType DataType;
- typedef OscSinCos <DataType> OscType;
-
- enum { FFT_LEN_L2 = LL2 };
- enum { FFT_LEN = 1 << FFT_LEN_L2 };
-
- FFTRealFixLen ();
-
- inline long get_length () const;
- void do_fft (DataType f [], const DataType x []);
- void do_ifft (const DataType f [], DataType x []);
- void rescale (DataType x []) const;
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- enum { TRIGO_BD_LIMIT = FFTRealFixLenParam::TRIGO_BD_LIMIT };
-
- enum { BR_ARR_SIZE_L2 = ((FFT_LEN_L2 - 3) < 0) ? 0 : (FFT_LEN_L2 - 2) };
- enum { BR_ARR_SIZE = 1 << BR_ARR_SIZE_L2 };
-
- enum { TRIGO_BD = ((FFT_LEN_L2 - TRIGO_BD_LIMIT) < 0)
- ? (int)FFT_LEN_L2
- : (int)TRIGO_BD_LIMIT };
- enum { TRIGO_TABLE_ARR_SIZE_L2 = (LL2 < 4) ? 0 : (TRIGO_BD - 2) };
- enum { TRIGO_TABLE_ARR_SIZE = 1 << TRIGO_TABLE_ARR_SIZE_L2 };
-
- enum { NBR_TRIGO_OSC = FFT_LEN_L2 - TRIGO_BD };
- enum { TRIGO_OSC_ARR_SIZE = (NBR_TRIGO_OSC > 0) ? NBR_TRIGO_OSC : 1 };
-
- void build_br_lut ();
- void build_trigo_lut ();
- void build_trigo_osc ();
-
- DynArray <DataType>
- _buffer;
- DynArray <long>
- _br_data;
- DynArray <DataType>
- _trigo_data;
- Array <OscType, TRIGO_OSC_ARR_SIZE>
- _trigo_osc;
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealFixLen (const FFTRealFixLen &other);
- FFTRealFixLen& operator = (const FFTRealFixLen &other);
- bool operator == (const FFTRealFixLen &other);
- bool operator != (const FFTRealFixLen &other);
-
-}; // class FFTRealFixLen
-
-
-
-#include "FFTRealFixLen.hpp"
-
-
-
-#endif // FFTRealFixLen_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp b/examples/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp
deleted file mode 100644
index 6defb009..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealFixLen.hpp
+++ /dev/null
@@ -1,322 +0,0 @@
-/*****************************************************************************
-
- FFTRealFixLen.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealFixLen_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealFixLen code header.
-#endif
-#define FFTRealFixLen_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealFixLen_CODEHEADER_INCLUDED)
-#define FFTRealFixLen_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "FFTRealPassDirect.h"
-#include "FFTRealPassInverse.h"
-#include "FFTRealSelect.h"
-
-#include <cassert>
-#include <cmath>
-
-namespace std { }
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int LL2>
-FFTRealFixLen <LL2>::FFTRealFixLen ()
-: _buffer (FFT_LEN)
-, _br_data (BR_ARR_SIZE)
-, _trigo_data (TRIGO_TABLE_ARR_SIZE)
-, _trigo_osc ()
-{
- build_br_lut ();
- build_trigo_lut ();
- build_trigo_osc ();
-}
-
-
-
-template <int LL2>
-long FFTRealFixLen <LL2>::get_length () const
-{
- return (FFT_LEN);
-}
-
-
-
-// General case
-template <int LL2>
-void FFTRealFixLen <LL2>::do_fft (DataType f [], const DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
- assert (FFT_LEN_L2 >= 3);
-
- // Do the transform in several passes
- const DataType * cos_ptr = &_trigo_data [0];
- const long * br_ptr = &_br_data [0];
-
- FFTRealPassDirect <FFT_LEN_L2 - 1>::process (
- FFT_LEN,
- f,
- &_buffer [0],
- x,
- cos_ptr,
- TRIGO_TABLE_ARR_SIZE,
- br_ptr,
- &_trigo_osc [0]
- );
-}
-
-// 4-point FFT
-template <>
-void FFTRealFixLen <2>::do_fft (DataType f [], const DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- f [1] = x [0] - x [2];
- f [3] = x [1] - x [3];
-
- const DataType b_0 = x [0] + x [2];
- const DataType b_2 = x [1] + x [3];
-
- f [0] = b_0 + b_2;
- f [2] = b_0 - b_2;
-}
-
-// 2-point FFT
-template <>
-void FFTRealFixLen <1>::do_fft (DataType f [], const DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- f [0] = x [0] + x [1];
- f [1] = x [0] - x [1];
-}
-
-// 1-point FFT
-template <>
-void FFTRealFixLen <0>::do_fft (DataType f [], const DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
-
- f [0] = x [0];
-}
-
-
-
-// General case
-template <int LL2>
-void FFTRealFixLen <LL2>::do_ifft (const DataType f [], DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
- assert (FFT_LEN_L2 >= 3);
-
- // Do the transform in several passes
- DataType * s_ptr =
- FFTRealSelect <FFT_LEN_L2 & 1>::sel_bin (&_buffer [0], x);
- DataType * d_ptr =
- FFTRealSelect <FFT_LEN_L2 & 1>::sel_bin (x, &_buffer [0]);
- const DataType * cos_ptr = &_trigo_data [0];
- const long * br_ptr = &_br_data [0];
-
- FFTRealPassInverse <FFT_LEN_L2 - 1>::process (
- FFT_LEN,
- d_ptr,
- s_ptr,
- f,
- cos_ptr,
- TRIGO_TABLE_ARR_SIZE,
- br_ptr,
- &_trigo_osc [0]
- );
-}
-
-// 4-point IFFT
-template <>
-void FFTRealFixLen <2>::do_ifft (const DataType f [], DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- const DataType b_0 = f [0] + f [2];
- const DataType b_2 = f [0] - f [2];
-
- x [0] = b_0 + f [1] * 2;
- x [2] = b_0 - f [1] * 2;
- x [1] = b_2 + f [3] * 2;
- x [3] = b_2 - f [3] * 2;
-}
-
-// 2-point IFFT
-template <>
-void FFTRealFixLen <1>::do_ifft (const DataType f [], DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- x [0] = f [0] + f [1];
- x [1] = f [0] - f [1];
-}
-
-// 1-point IFFT
-template <>
-void FFTRealFixLen <0>::do_ifft (const DataType f [], DataType x [])
-{
- assert (f != 0);
- assert (x != 0);
- assert (x != f);
-
- x [0] = f [0];
-}
-
-
-
-
-template <int LL2>
-void FFTRealFixLen <LL2>::rescale (DataType x []) const
-{
- assert (x != 0);
-
- const DataType mul = DataType (1.0 / FFT_LEN);
-
- if (FFT_LEN < 4)
- {
- long i = FFT_LEN - 1;
- do
- {
- x [i] *= mul;
- --i;
- }
- while (i >= 0);
- }
-
- else
- {
- assert ((FFT_LEN & 3) == 0);
-
- // Could be optimized with SIMD instruction sets (needs alignment check)
- long i = FFT_LEN - 4;
- do
- {
- x [i + 0] *= mul;
- x [i + 1] *= mul;
- x [i + 2] *= mul;
- x [i + 3] *= mul;
- i -= 4;
- }
- while (i >= 0);
- }
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int LL2>
-void FFTRealFixLen <LL2>::build_br_lut ()
-{
- _br_data [0] = 0;
- for (long cnt = 1; cnt < BR_ARR_SIZE; ++cnt)
- {
- long index = cnt << 2;
- long br_index = 0;
-
- int bit_cnt = FFT_LEN_L2;
- do
- {
- br_index <<= 1;
- br_index += (index & 1);
- index >>= 1;
-
- -- bit_cnt;
- }
- while (bit_cnt > 0);
-
- _br_data [cnt] = br_index;
- }
-}
-
-
-
-template <int LL2>
-void FFTRealFixLen <LL2>::build_trigo_lut ()
-{
- const double mul = (0.5 * PI) / TRIGO_TABLE_ARR_SIZE;
- for (long i = 0; i < TRIGO_TABLE_ARR_SIZE; ++ i)
- {
- using namespace std;
-
- _trigo_data [i] = DataType (cos (i * mul));
- }
-}
-
-
-
-template <int LL2>
-void FFTRealFixLen <LL2>::build_trigo_osc ()
-{
- for (int i = 0; i < NBR_TRIGO_OSC; ++i)
- {
- OscType & osc = _trigo_osc [i];
-
- const long len = static_cast <long> (TRIGO_TABLE_ARR_SIZE) << (i + 1);
- const double mul = (0.5 * PI) / len;
- osc.set_step (mul);
- }
-}
-
-
-
-#endif // FFTRealFixLen_CODEHEADER_INCLUDED
-
-#undef FFTRealFixLen_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h b/examples/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h
deleted file mode 100644
index 163c0832..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealFixLenParam.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************
-
- FFTRealFixLenParam.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealFixLenParam_HEADER_INCLUDED)
-#define FFTRealFixLenParam_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-class FFTRealFixLenParam
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- // Over this bit depth, we use direct calculation for sin/cos
- enum { TRIGO_BD_LIMIT = 12 };
-
- typedef float DataType;
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-#if 0 // To avoid GCC warning:
- // All member functions in class 'FFTRealFixLenParam' are private
- FFTRealFixLenParam ();
- ~FFTRealFixLenParam ();
- FFTRealFixLenParam (const FFTRealFixLenParam &other);
- FFTRealFixLenParam &
- operator = (const FFTRealFixLenParam &other);
- bool operator == (const FFTRealFixLenParam &other);
- bool operator != (const FFTRealFixLenParam &other);
-#endif
-
-}; // class FFTRealFixLenParam
-
-
-
-//#include "FFTRealFixLenParam.hpp"
-
-
-
-#endif // FFTRealFixLenParam_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealPassDirect.h b/examples/spectrum/3rdparty/fftreal/FFTRealPassDirect.h
deleted file mode 100644
index 7d19c02e..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealPassDirect.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*****************************************************************************
-
- FFTRealPassDirect.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealPassDirect_HEADER_INCLUDED)
-#define FFTRealPassDirect_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "FFTRealFixLenParam.h"
-#include "OscSinCos.h"
-
-
-
-template <int PASS>
-class FFTRealPassDirect
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLenParam::DataType DataType;
- typedef OscSinCos <DataType> OscType;
-
- FORCEINLINE static void
- process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealPassDirect ();
- ~FFTRealPassDirect ();
- FFTRealPassDirect (const FFTRealPassDirect &other);
- FFTRealPassDirect &
- operator = (const FFTRealPassDirect &other);
- bool operator == (const FFTRealPassDirect &other);
- bool operator != (const FFTRealPassDirect &other);
-
-}; // class FFTRealPassDirect
-
-
-
-#include "FFTRealPassDirect.hpp"
-
-
-
-#endif // FFTRealPassDirect_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp b/examples/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp
deleted file mode 100644
index db9d568e..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealPassDirect.hpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/*****************************************************************************
-
- FFTRealPassDirect.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealPassDirect_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealPassDirect code header.
-#endif
-#define FFTRealPassDirect_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealPassDirect_CODEHEADER_INCLUDED)
-#define FFTRealPassDirect_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "FFTRealUseTrigo.h"
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <>
-void FFTRealPassDirect <1>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // First and second pass at once
- const long qlen = len >> 2;
-
- long coef_index = 0;
- do
- {
- // To do: unroll the loop (2x).
- const long ri_0 = br_ptr [coef_index >> 2];
- const long ri_1 = ri_0 + 2 * qlen; // bit_rev_lut_ptr [coef_index + 1];
- const long ri_2 = ri_0 + 1 * qlen; // bit_rev_lut_ptr [coef_index + 2];
- const long ri_3 = ri_0 + 3 * qlen; // bit_rev_lut_ptr [coef_index + 3];
-
- DataType * const df2 = dest_ptr + coef_index;
- df2 [1] = x_ptr [ri_0] - x_ptr [ri_1];
- df2 [3] = x_ptr [ri_2] - x_ptr [ri_3];
-
- const DataType sf_0 = x_ptr [ri_0] + x_ptr [ri_1];
- const DataType sf_2 = x_ptr [ri_2] + x_ptr [ri_3];
-
- df2 [0] = sf_0 + sf_2;
- df2 [2] = sf_0 - sf_2;
-
- coef_index += 4;
- }
- while (coef_index < len);
-}
-
-template <>
-void FFTRealPassDirect <2>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Executes "previous" passes first. Inverts source and destination buffers
- FFTRealPassDirect <1>::process (
- len,
- src_ptr,
- dest_ptr,
- x_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
-
- // Third pass
- const DataType sqrt2_2 = DataType (SQRT2 * 0.5);
-
- long coef_index = 0;
- do
- {
- dest_ptr [coef_index ] = src_ptr [coef_index] + src_ptr [coef_index + 4];
- dest_ptr [coef_index + 4] = src_ptr [coef_index] - src_ptr [coef_index + 4];
- dest_ptr [coef_index + 2] = src_ptr [coef_index + 2];
- dest_ptr [coef_index + 6] = src_ptr [coef_index + 6];
-
- DataType v;
-
- v = (src_ptr [coef_index + 5] - src_ptr [coef_index + 7]) * sqrt2_2;
- dest_ptr [coef_index + 1] = src_ptr [coef_index + 1] + v;
- dest_ptr [coef_index + 3] = src_ptr [coef_index + 1] - v;
-
- v = (src_ptr [coef_index + 5] + src_ptr [coef_index + 7]) * sqrt2_2;
- dest_ptr [coef_index + 5] = v + src_ptr [coef_index + 3];
- dest_ptr [coef_index + 7] = v - src_ptr [coef_index + 3];
-
- coef_index += 8;
- }
- while (coef_index < len);
-}
-
-template <int PASS>
-void FFTRealPassDirect <PASS>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType x_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Executes "previous" passes first. Inverts source and destination buffers
- FFTRealPassDirect <PASS - 1>::process (
- len,
- src_ptr,
- dest_ptr,
- x_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
-
- const long dist = 1L << (PASS - 1);
- const long c1_r = 0;
- const long c1_i = dist;
- const long c2_r = dist * 2;
- const long c2_i = dist * 3;
- const long cend = dist * 4;
- const long table_step = cos_len >> (PASS - 1);
-
- enum { TRIGO_OSC = PASS - FFTRealFixLenParam::TRIGO_BD_LIMIT };
- enum { TRIGO_DIRECT = (TRIGO_OSC >= 0) ? 1 : 0 };
-
- long coef_index = 0;
- do
- {
- const DataType * const sf = src_ptr + coef_index;
- DataType * const df = dest_ptr + coef_index;
-
- // Extreme coefficients are always real
- df [c1_r] = sf [c1_r] + sf [c2_r];
- df [c2_r] = sf [c1_r] - sf [c2_r];
- df [c1_i] = sf [c1_i];
- df [c2_i] = sf [c2_i];
-
- FFTRealUseTrigo <TRIGO_DIRECT>::prepare (osc_list [TRIGO_OSC]);
-
- // Others are conjugate complex numbers
- for (long i = 1; i < dist; ++ i)
- {
- DataType c;
- DataType s;
- FFTRealUseTrigo <TRIGO_DIRECT>::iterate (
- osc_list [TRIGO_OSC],
- c,
- s,
- cos_ptr,
- i * table_step,
- (dist - i) * table_step
- );
-
- const DataType sf_r_i = sf [c1_r + i];
- const DataType sf_i_i = sf [c1_i + i];
-
- const DataType v1 = sf [c2_r + i] * c - sf [c2_i + i] * s;
- df [c1_r + i] = sf_r_i + v1;
- df [c2_r - i] = sf_r_i - v1;
-
- const DataType v2 = sf [c2_r + i] * s + sf [c2_i + i] * c;
- df [c2_r + i] = v2 + sf_i_i;
- df [cend - i] = v2 - sf_i_i;
- }
-
- coef_index += cend;
- }
- while (coef_index < len);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // FFTRealPassDirect_CODEHEADER_INCLUDED
-
-#undef FFTRealPassDirect_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealPassInverse.h b/examples/spectrum/3rdparty/fftreal/FFTRealPassInverse.h
deleted file mode 100644
index 2de89527..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealPassInverse.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*****************************************************************************
-
- FFTRealPassInverse.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealPassInverse_HEADER_INCLUDED)
-#define FFTRealPassInverse_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "FFTRealFixLenParam.h"
-#include "OscSinCos.h"
-
-
-
-
-template <int PASS>
-class FFTRealPassInverse
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLenParam::DataType DataType;
- typedef OscSinCos <DataType> OscType;
-
- FORCEINLINE static void
- process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType f_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
- FORCEINLINE static void
- process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
- FORCEINLINE static void
- process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list []);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealPassInverse ();
- ~FFTRealPassInverse ();
- FFTRealPassInverse (const FFTRealPassInverse &other);
- FFTRealPassInverse &
- operator = (const FFTRealPassInverse &other);
- bool operator == (const FFTRealPassInverse &other);
- bool operator != (const FFTRealPassInverse &other);
-
-}; // class FFTRealPassInverse
-
-
-
-#include "FFTRealPassInverse.hpp"
-
-
-
-#endif // FFTRealPassInverse_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp b/examples/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp
deleted file mode 100644
index 57375469..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealPassInverse.hpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/*****************************************************************************
-
- FFTRealPassInverse.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealPassInverse_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealPassInverse code header.
-#endif
-#define FFTRealPassInverse_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealPassInverse_CODEHEADER_INCLUDED)
-#define FFTRealPassInverse_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "FFTRealUseTrigo.h"
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int PASS>
-void FFTRealPassInverse <PASS>::process (long len, DataType dest_ptr [], DataType src_ptr [], const DataType f_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- process_internal (
- len,
- dest_ptr,
- f_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
- FFTRealPassInverse <PASS - 1>::process_rec (
- len,
- src_ptr,
- dest_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
-}
-
-
-
-template <int PASS>
-void FFTRealPassInverse <PASS>::process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- process_internal (
- len,
- dest_ptr,
- src_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
- FFTRealPassInverse <PASS - 1>::process_rec (
- len,
- src_ptr,
- dest_ptr,
- cos_ptr,
- cos_len,
- br_ptr,
- osc_list
- );
-}
-
-template <>
-void FFTRealPassInverse <0>::process_rec (long len, DataType dest_ptr [], DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Stops recursion
-}
-
-
-
-template <int PASS>
-void FFTRealPassInverse <PASS>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- const long dist = 1L << (PASS - 1);
- const long c1_r = 0;
- const long c1_i = dist;
- const long c2_r = dist * 2;
- const long c2_i = dist * 3;
- const long cend = dist * 4;
- const long table_step = cos_len >> (PASS - 1);
-
- enum { TRIGO_OSC = PASS - FFTRealFixLenParam::TRIGO_BD_LIMIT };
- enum { TRIGO_DIRECT = (TRIGO_OSC >= 0) ? 1 : 0 };
-
- long coef_index = 0;
- do
- {
- const DataType * const sf = src_ptr + coef_index;
- DataType * const df = dest_ptr + coef_index;
-
- // Extreme coefficients are always real
- df [c1_r] = sf [c1_r] + sf [c2_r];
- df [c2_r] = sf [c1_r] - sf [c2_r];
- df [c1_i] = sf [c1_i] * 2;
- df [c2_i] = sf [c2_i] * 2;
-
- FFTRealUseTrigo <TRIGO_DIRECT>::prepare (osc_list [TRIGO_OSC]);
-
- // Others are conjugate complex numbers
- for (long i = 1; i < dist; ++ i)
- {
- df [c1_r + i] = sf [c1_r + i] + sf [c2_r - i];
- df [c1_i + i] = sf [c2_r + i] - sf [cend - i];
-
- DataType c;
- DataType s;
- FFTRealUseTrigo <TRIGO_DIRECT>::iterate (
- osc_list [TRIGO_OSC],
- c,
- s,
- cos_ptr,
- i * table_step,
- (dist - i) * table_step
- );
-
- const DataType vr = sf [c1_r + i] - sf [c2_r - i];
- const DataType vi = sf [c2_r + i] + sf [cend - i];
-
- df [c2_r + i] = vr * c + vi * s;
- df [c2_i + i] = vi * c - vr * s;
- }
-
- coef_index += cend;
- }
- while (coef_index < len);
-}
-
-template <>
-void FFTRealPassInverse <2>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Antepenultimate pass
- const DataType sqrt2_2 = DataType (SQRT2 * 0.5);
-
- long coef_index = 0;
- do
- {
- dest_ptr [coef_index ] = src_ptr [coef_index] + src_ptr [coef_index + 4];
- dest_ptr [coef_index + 4] = src_ptr [coef_index] - src_ptr [coef_index + 4];
- dest_ptr [coef_index + 2] = src_ptr [coef_index + 2] * 2;
- dest_ptr [coef_index + 6] = src_ptr [coef_index + 6] * 2;
-
- dest_ptr [coef_index + 1] = src_ptr [coef_index + 1] + src_ptr [coef_index + 3];
- dest_ptr [coef_index + 3] = src_ptr [coef_index + 5] - src_ptr [coef_index + 7];
-
- const DataType vr = src_ptr [coef_index + 1] - src_ptr [coef_index + 3];
- const DataType vi = src_ptr [coef_index + 5] + src_ptr [coef_index + 7];
-
- dest_ptr [coef_index + 5] = (vr + vi) * sqrt2_2;
- dest_ptr [coef_index + 7] = (vi - vr) * sqrt2_2;
-
- coef_index += 8;
- }
- while (coef_index < len);
-}
-
-template <>
-void FFTRealPassInverse <1>::process_internal (long len, DataType dest_ptr [], const DataType src_ptr [], const DataType cos_ptr [], long cos_len, const long br_ptr [], OscType osc_list [])
-{
- // Penultimate and last pass at once
- const long qlen = len >> 2;
-
- long coef_index = 0;
- do
- {
- const long ri_0 = br_ptr [coef_index >> 2];
-
- const DataType b_0 = src_ptr [coef_index ] + src_ptr [coef_index + 2];
- const DataType b_2 = src_ptr [coef_index ] - src_ptr [coef_index + 2];
- const DataType b_1 = src_ptr [coef_index + 1] * 2;
- const DataType b_3 = src_ptr [coef_index + 3] * 2;
-
- dest_ptr [ri_0 ] = b_0 + b_1;
- dest_ptr [ri_0 + 2 * qlen] = b_0 - b_1;
- dest_ptr [ri_0 + 1 * qlen] = b_2 + b_3;
- dest_ptr [ri_0 + 3 * qlen] = b_2 - b_3;
-
- coef_index += 4;
- }
- while (coef_index < len);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // FFTRealPassInverse_CODEHEADER_INCLUDED
-
-#undef FFTRealPassInverse_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealSelect.h b/examples/spectrum/3rdparty/fftreal/FFTRealSelect.h
deleted file mode 100644
index bd722d4d..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealSelect.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*****************************************************************************
-
- FFTRealSelect.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealSelect_HEADER_INCLUDED)
-#define FFTRealSelect_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-
-
-
-template <int P>
-class FFTRealSelect
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- FORCEINLINE static float *
- sel_bin (float *e_ptr, float *o_ptr);
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealSelect ();
- ~FFTRealSelect ();
- FFTRealSelect (const FFTRealSelect &other);
- FFTRealSelect& operator = (const FFTRealSelect &other);
- bool operator == (const FFTRealSelect &other);
- bool operator != (const FFTRealSelect &other);
-
-}; // class FFTRealSelect
-
-
-
-#include "FFTRealSelect.hpp"
-
-
-
-#endif // FFTRealSelect_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealSelect.hpp b/examples/spectrum/3rdparty/fftreal/FFTRealSelect.hpp
deleted file mode 100644
index 9ddf5864..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealSelect.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*****************************************************************************
-
- FFTRealSelect.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealSelect_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealSelect code header.
-#endif
-#define FFTRealSelect_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealSelect_CODEHEADER_INCLUDED)
-#define FFTRealSelect_CODEHEADER_INCLUDED
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int P>
-float * FFTRealSelect <P>::sel_bin (float *e_ptr, float *o_ptr)
-{
- return (o_ptr);
-}
-
-
-
-template <>
-float * FFTRealSelect <0>::sel_bin (float *e_ptr, float *o_ptr)
-{
- return (e_ptr);
-}
-
-
-
-#endif // FFTRealSelect_CODEHEADER_INCLUDED
-
-#undef FFTRealSelect_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h b/examples/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h
deleted file mode 100644
index c4368ee0..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealUseTrigo.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*****************************************************************************
-
- FFTRealUseTrigo.h
- Copyright (c) 2005 Laurent de Soras
-
-Template parameters:
- - ALGO: algorithm choice. 0 = table, other = oscillator
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (FFTRealUseTrigo_HEADER_INCLUDED)
-#define FFTRealUseTrigo_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "FFTRealFixLenParam.h"
-#include "OscSinCos.h"
-
-
-
-template <int ALGO>
-class FFTRealUseTrigo
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLenParam::DataType DataType;
- typedef OscSinCos <DataType> OscType;
-
- FORCEINLINE static void
- prepare (OscType &osc);
- FORCEINLINE static void
- iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- FFTRealUseTrigo ();
- ~FFTRealUseTrigo ();
- FFTRealUseTrigo (const FFTRealUseTrigo &other);
- FFTRealUseTrigo &
- operator = (const FFTRealUseTrigo &other);
- bool operator == (const FFTRealUseTrigo &other);
- bool operator != (const FFTRealUseTrigo &other);
-
-}; // class FFTRealUseTrigo
-
-
-
-#include "FFTRealUseTrigo.hpp"
-
-
-
-#endif // FFTRealUseTrigo_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp b/examples/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp
deleted file mode 100644
index aa968b81..00000000
--- a/examples/spectrum/3rdparty/fftreal/FFTRealUseTrigo.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************
-
- FFTRealUseTrigo.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (FFTRealUseTrigo_CURRENT_CODEHEADER)
- #error Recursive inclusion of FFTRealUseTrigo code header.
-#endif
-#define FFTRealUseTrigo_CURRENT_CODEHEADER
-
-#if ! defined (FFTRealUseTrigo_CODEHEADER_INCLUDED)
-#define FFTRealUseTrigo_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "OscSinCos.h"
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int ALGO>
-void FFTRealUseTrigo <ALGO>::prepare (OscType &osc)
-{
- osc.clear_buffers ();
-}
-
-template <>
-void FFTRealUseTrigo <0>::prepare (OscType &osc)
-{
- // Nothing
-}
-
-
-
-template <int ALGO>
-void FFTRealUseTrigo <ALGO>::iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s)
-{
- osc.step ();
- c = osc.get_cos ();
- s = osc.get_sin ();
-}
-
-template <>
-void FFTRealUseTrigo <0>::iterate (OscType &osc, DataType &c, DataType &s, const DataType cos_ptr [], long index_c, long index_s)
-{
- c = cos_ptr [index_c];
- s = cos_ptr [index_s];
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // FFTRealUseTrigo_CODEHEADER_INCLUDED
-
-#undef FFTRealUseTrigo_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/OscSinCos.h b/examples/spectrum/3rdparty/fftreal/OscSinCos.h
deleted file mode 100644
index 775fc14f..00000000
--- a/examples/spectrum/3rdparty/fftreal/OscSinCos.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*****************************************************************************
-
- OscSinCos.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (OscSinCos_HEADER_INCLUDED)
-#define OscSinCos_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-
-
-
-template <class T>
-class OscSinCos
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef T DataType;
-
- OscSinCos ();
-
- FORCEINLINE void
- set_step (double angle_rad);
-
- FORCEINLINE DataType
- get_cos () const;
- FORCEINLINE DataType
- get_sin () const;
- FORCEINLINE void
- step ();
- FORCEINLINE void
- clear_buffers ();
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- DataType _pos_cos; // Current phase expressed with sin and cos. [-1 ; 1]
- DataType _pos_sin; // -
- DataType _step_cos; // Phase increment per step, [-1 ; 1]
- DataType _step_sin; // -
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- OscSinCos (const OscSinCos &other);
- OscSinCos & operator = (const OscSinCos &other);
- bool operator == (const OscSinCos &other);
- bool operator != (const OscSinCos &other);
-
-}; // class OscSinCos
-
-
-
-#include "OscSinCos.hpp"
-
-
-
-#endif // OscSinCos_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/OscSinCos.hpp b/examples/spectrum/3rdparty/fftreal/OscSinCos.hpp
deleted file mode 100644
index 749aef04..00000000
--- a/examples/spectrum/3rdparty/fftreal/OscSinCos.hpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/*****************************************************************************
-
- OscSinCos.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (OscSinCos_CURRENT_CODEHEADER)
- #error Recursive inclusion of OscSinCos code header.
-#endif
-#define OscSinCos_CURRENT_CODEHEADER
-
-#if ! defined (OscSinCos_CODEHEADER_INCLUDED)
-#define OscSinCos_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include <cmath>
-
-namespace std { }
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-OscSinCos <T>::OscSinCos ()
-: _pos_cos (1)
-, _pos_sin (0)
-, _step_cos (1)
-, _step_sin (0)
-{
- // Nothing
-}
-
-
-
-template <class T>
-void OscSinCos <T>::set_step (double angle_rad)
-{
- using namespace std;
-
- _step_cos = static_cast <DataType> (cos (angle_rad));
- _step_sin = static_cast <DataType> (sin (angle_rad));
-}
-
-
-
-template <class T>
-typename OscSinCos <T>::DataType OscSinCos <T>::get_cos () const
-{
- return (_pos_cos);
-}
-
-
-
-template <class T>
-typename OscSinCos <T>::DataType OscSinCos <T>::get_sin () const
-{
- return (_pos_sin);
-}
-
-
-
-template <class T>
-void OscSinCos <T>::step ()
-{
- const DataType old_cos = _pos_cos;
- const DataType old_sin = _pos_sin;
-
- _pos_cos = old_cos * _step_cos - old_sin * _step_sin;
- _pos_sin = old_cos * _step_sin + old_sin * _step_cos;
-}
-
-
-
-template <class T>
-void OscSinCos <T>::clear_buffers ()
-{
- _pos_cos = static_cast <DataType> (1);
- _pos_sin = static_cast <DataType> (0);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // OscSinCos_CODEHEADER_INCLUDED
-
-#undef OscSinCos_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestAccuracy.h b/examples/spectrum/3rdparty/fftreal/TestAccuracy.h
deleted file mode 100644
index 4b07a6b6..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestAccuracy.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*****************************************************************************
-
- TestAccuracy.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestAccuracy_HEADER_INCLUDED)
-#define TestAccuracy_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class FO>
-class TestAccuracy
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef typename FO::DataType DataType;
- typedef long double BigFloat; // To get maximum accuracy during intermediate calculations
-
- static int perform_test_single_object (FO &fft);
- static int perform_test_d (FO &fft, const char *class_name_0);
- static int perform_test_i (FO &fft, const char *class_name_0);
- static int perform_test_di (FO &fft, const char *class_name_0);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- enum { NBR_ACC_TESTS = 10 * 1000 * 1000 };
- enum { MAX_NBR_TESTS = 10000 };
-
- static void compute_tf (DataType s [], const DataType x [], long length);
- static void compute_itf (DataType x [], const DataType s [], long length);
- static int compare_vect_display (const DataType x_ptr [], const DataType y_ptr [], long len, BigFloat &max_err_rel);
- static BigFloat
- compute_power (const DataType x_ptr [], long len);
- static BigFloat
- compute_power (const DataType x_ptr [], const DataType y_ptr [], long len);
- static void compare_vect (const DataType x_ptr [], const DataType y_ptr [], BigFloat &power, long &max_err_pos, long len);
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestAccuracy ();
- ~TestAccuracy ();
- TestAccuracy (const TestAccuracy &other);
- TestAccuracy & operator = (const TestAccuracy &other);
- bool operator == (const TestAccuracy &other);
- bool operator != (const TestAccuracy &other);
-
-}; // class TestAccuracy
-
-
-
-#include "TestAccuracy.hpp"
-
-
-
-#endif // TestAccuracy_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestAccuracy.hpp b/examples/spectrum/3rdparty/fftreal/TestAccuracy.hpp
deleted file mode 100644
index 5c794f74..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestAccuracy.hpp
+++ /dev/null
@@ -1,472 +0,0 @@
-/*****************************************************************************
-
- TestAccuracy.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestAccuracy_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestAccuracy code header.
-#endif
-#define TestAccuracy_CURRENT_CODEHEADER
-
-#if ! defined (TestAccuracy_CODEHEADER_INCLUDED)
-#define TestAccuracy_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "def.h"
-#include "test_fnc.h"
-#include "TestWhiteNoiseGen.h"
-
-#include <typeinfo>
-#include <vector>
-
-#include <cmath>
-#include <cstdio>
-
-
-
-static const double TestAccuracy_LN10 = 2.3025850929940456840179914546844;
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class FO>
-int TestAccuracy <FO>::perform_test_single_object (FO &fft)
-{
- assert (&fft != 0);
-
- using namespace std;
-
- int ret_val = 0;
-
- const std::type_info & ti = typeid (fft);
- const char * class_name_0 = ti.name ();
-
- if (ret_val == 0)
- {
- ret_val = perform_test_d (fft, class_name_0);
- }
- if (ret_val == 0)
- {
- ret_val = perform_test_i (fft, class_name_0);
- }
- if (ret_val == 0)
- {
- ret_val = perform_test_di (fft, class_name_0);
- }
-
- if (ret_val == 0)
- {
- printf ("\n");
- }
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-int TestAccuracy <FO>::perform_test_d (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- using namespace std;
-
- int ret_val = 0;
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- NBR_ACC_TESTS / len / len,
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- printf ("Testing %s::do_fft () [%ld samples]... ", class_name_0, len);
- fflush (stdout);
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len);
- std::vector <DataType> s1 (len);
- std::vector <DataType> s2 (len);
- BigFloat err_avg = 0;
-
- for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
- {
- noise.generate (&x [0], len);
- fft.do_fft (&s1 [0], &x [0]);
- compute_tf (&s2 [0], &x [0], len);
-
- BigFloat max_err;
- compare_vect_display (&s1 [0], &s2 [0], len, max_err);
- err_avg += max_err;
- }
- err_avg /= NBR_ACC_TESTS;
-
- printf ("done.\n");
- printf (
- "Average maximum error: %.6f %% (%f dB)\n",
- static_cast <double> (err_avg * 100),
- static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
- );
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-int TestAccuracy <FO>::perform_test_i (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- using namespace std;
-
- int ret_val = 0;
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- NBR_ACC_TESTS / len / len,
- 10L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- printf ("Testing %s::do_ifft () [%ld samples]... ", class_name_0, len);
- fflush (stdout);
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> s (len);
- std::vector <DataType> x1 (len);
- std::vector <DataType> x2 (len);
- BigFloat err_avg = 0;
-
- for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
- {
- noise.generate (&s [0], len);
- fft.do_ifft (&s [0], &x1 [0]);
- compute_itf (&x2 [0], &s [0], len);
-
- BigFloat max_err;
- compare_vect_display (&x1 [0], &x2 [0], len, max_err);
- err_avg += max_err;
- }
- err_avg /= NBR_ACC_TESTS;
-
- printf ("done.\n");
- printf (
- "Average maximum error: %.6f %% (%f dB)\n",
- static_cast <double> (err_avg * 100),
- static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
- );
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-int TestAccuracy <FO>::perform_test_di (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- using namespace std;
-
- int ret_val = 0;
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- NBR_ACC_TESTS / len / len,
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- printf (
- "Testing %s::do_fft () / do_ifft () / rescale () [%ld samples]... ",
- class_name_0,
- len
- );
- fflush (stdout);
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len);
- std::vector <DataType> s (len);
- std::vector <DataType> y (len);
- BigFloat err_avg = 0;
-
- for (long test = 0; test < nbr_tests && ret_val == 0; ++ test)
- {
- noise.generate (&x [0], len);
- fft.do_fft (&s [0], &x [0]);
- fft.do_ifft (&s [0], &y [0]);
- fft.rescale (&y [0]);
-
- BigFloat max_err;
- compare_vect_display (&x [0], &y [0], len, max_err);
- err_avg += max_err;
- }
- err_avg /= NBR_ACC_TESTS;
-
- printf ("done.\n");
- printf (
- "Average maximum error: %.6f %% (%f dB)\n",
- static_cast <double> (err_avg * 100),
- static_cast <double> ((20 / TestAccuracy_LN10) * log (err_avg))
- );
-
- return (ret_val);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-// Positive transform
-template <class FO>
-void TestAccuracy <FO>::compute_tf (DataType s [], const DataType x [], long length)
-{
- assert (s != 0);
- assert (x != 0);
- assert (length >= 2);
- assert ((length & 1) == 0);
-
- const long nbr_bins = length >> 1;
-
- // DC and Nyquist
- BigFloat dc = 0;
- BigFloat ny = 0;
- for (long pos = 0; pos < length; pos += 2)
- {
- const BigFloat even = x [pos ];
- const BigFloat odd = x [pos + 1];
- dc += even + odd;
- ny += even - odd;
- }
- s [0 ] = static_cast <DataType> (dc);
- s [nbr_bins] = static_cast <DataType> (ny);
-
- // Regular bins
- for (long bin = 1; bin < nbr_bins; ++ bin)
- {
- BigFloat sum_r = 0;
- BigFloat sum_i = 0;
-
- const BigFloat m = bin * static_cast <BigFloat> (2 * PI) / length;
-
- for (long pos = 0; pos < length; ++pos)
- {
- using namespace std;
-
- const BigFloat phase = pos * m;
- const BigFloat e_r = cos (phase);
- const BigFloat e_i = sin (phase);
-
- sum_r += x [pos] * e_r;
- sum_i += x [pos] * e_i;
- }
-
- s [ bin] = static_cast <DataType> (sum_r);
- s [nbr_bins + bin] = static_cast <DataType> (sum_i);
- }
-}
-
-
-
-// Negative transform
-template <class FO>
-void TestAccuracy <FO>::compute_itf (DataType x [], const DataType s [], long length)
-{
- assert (s != 0);
- assert (x != 0);
- assert (length >= 2);
- assert ((length & 1) == 0);
-
- const long nbr_bins = length >> 1;
-
- // DC and Nyquist
- BigFloat dc = s [0 ];
- BigFloat ny = s [nbr_bins];
-
- // Regular bins
- for (long pos = 0; pos < length; ++pos)
- {
- BigFloat sum = dc + ny * (1 - 2 * (pos & 1));
-
- const BigFloat m = pos * static_cast <BigFloat> (-2 * PI) / length;
-
- for (long bin = 1; bin < nbr_bins; ++ bin)
- {
- using namespace std;
-
- const BigFloat phase = bin * m;
- const BigFloat e_r = cos (phase);
- const BigFloat e_i = sin (phase);
-
- sum += 2 * ( e_r * s [bin ]
- - e_i * s [bin + nbr_bins]);
- }
-
- x [pos] = static_cast <DataType> (sum);
- }
-}
-
-
-
-template <class FO>
-int TestAccuracy <FO>::compare_vect_display (const DataType x_ptr [], const DataType y_ptr [], long len, BigFloat &max_err_rel)
-{
- assert (x_ptr != 0);
- assert (y_ptr != 0);
- assert (len > 0);
- assert (&max_err_rel != 0);
-
- using namespace std;
-
- int ret_val = 0;
-
- BigFloat power = compute_power (&x_ptr [0], &y_ptr [0], len);
- BigFloat power_dif;
- long max_err_pos;
- compare_vect (&x_ptr [0], &y_ptr [0], power_dif, max_err_pos, len);
-
- if (power == 0)
- {
- power = power_dif;
- }
- const BigFloat power_err_rel = power_dif / power;
-
- BigFloat max_err = 0;
- max_err_rel = 0;
- if (max_err_pos >= 0)
- {
- max_err = y_ptr [max_err_pos] - x_ptr [max_err_pos];
- max_err_rel = 2 * fabs (max_err) / ( fabs (y_ptr [max_err_pos])
- + fabs (x_ptr [max_err_pos]));
- }
-
- if (power_err_rel > 0.001)
- {
- printf ("Power error : %f (%.6f %%)\n",
- static_cast <double> (power_err_rel),
- static_cast <double> (power_err_rel * 100)
- );
- if (max_err_pos >= 0)
- {
- printf (
- "Maximum error: %f - %f = %f (%f)\n",
- static_cast <double> (y_ptr [max_err_pos]),
- static_cast <double> (x_ptr [max_err_pos]),
- static_cast <double> (max_err),
- static_cast <double> (max_err_pos)
- );
- }
- }
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-typename TestAccuracy <FO>::BigFloat TestAccuracy <FO>::compute_power (const DataType x_ptr [], long len)
-{
- assert (x_ptr != 0);
- assert (len > 0);
-
- BigFloat power = 0;
- for (long pos = 0; pos < len; ++pos)
- {
- const BigFloat val = x_ptr [pos];
-
- power += val * val;
- }
-
- using namespace std;
-
- power = sqrt (power) / len;
-
- return (power);
-}
-
-
-
-template <class FO>
-typename TestAccuracy <FO>::BigFloat TestAccuracy <FO>::compute_power (const DataType x_ptr [], const DataType y_ptr [], long len)
-{
- assert (x_ptr != 0);
- assert (y_ptr != 0);
- assert (len > 0);
-
- return ((compute_power (x_ptr, len) + compute_power (y_ptr, len)) * 0.5);
-}
-
-
-
-template <class FO>
-void TestAccuracy <FO>::compare_vect (const DataType x_ptr [], const DataType y_ptr [], BigFloat &power, long &max_err_pos, long len)
-{
- assert (x_ptr != 0);
- assert (y_ptr != 0);
- assert (len > 0);
- assert (&power != 0);
- assert (&max_err_pos != 0);
-
- power = 0;
- BigFloat max_dif2 = 0;
- max_err_pos = -1;
-
- for (long pos = 0; pos < len; ++pos)
- {
- const BigFloat x = x_ptr [pos];
- const BigFloat y = y_ptr [pos];
- const BigFloat dif = y - x;
- const BigFloat dif2 = dif * dif;
-
- power += dif2;
- if (dif2 > max_dif2)
- {
- max_err_pos = pos;
- max_dif2 = dif2;
- }
- }
-
- using namespace std;
-
- power = sqrt (power) / len;
-}
-
-
-
-#endif // TestAccuracy_CODEHEADER_INCLUDED
-
-#undef TestAccuracy_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestHelperFixLen.h b/examples/spectrum/3rdparty/fftreal/TestHelperFixLen.h
deleted file mode 100644
index ecff96d3..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestHelperFixLen.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************
-
- TestHelperFixLen.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestHelperFixLen_HEADER_INCLUDED)
-#define TestHelperFixLen_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "FFTRealFixLen.h"
-
-
-
-template <int L>
-class TestHelperFixLen
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef FFTRealFixLen <L> FftType;
-
- static void perform_test_accuracy (int &ret_val);
- static void perform_test_speed (int &ret_val);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestHelperFixLen ();
- ~TestHelperFixLen ();
- TestHelperFixLen (const TestHelperFixLen &other);
- TestHelperFixLen &
- operator = (const TestHelperFixLen &other);
- bool operator == (const TestHelperFixLen &other);
- bool operator != (const TestHelperFixLen &other);
-
-}; // class TestHelperFixLen
-
-
-
-#include "TestHelperFixLen.hpp"
-
-
-
-#endif // TestHelperFixLen_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp b/examples/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp
deleted file mode 100644
index 25048b91..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestHelperFixLen.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*****************************************************************************
-
- TestHelperFixLen.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestHelperFixLen_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestHelperFixLen code header.
-#endif
-#define TestHelperFixLen_CURRENT_CODEHEADER
-
-#if ! defined (TestHelperFixLen_CODEHEADER_INCLUDED)
-#define TestHelperFixLen_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "test_settings.h"
-
-#include "TestAccuracy.h"
-#if defined (test_settings_SPEED_TEST_ENABLED)
- #include "TestSpeed.h"
-#endif
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <int L>
-void TestHelperFixLen <L>::perform_test_accuracy (int &ret_val)
-{
- if (ret_val == 0)
- {
- FftType fft;
- ret_val = TestAccuracy <FftType>::perform_test_single_object (fft);
- }
-}
-
-
-
-template <int L>
-void TestHelperFixLen <L>::perform_test_speed (int &ret_val)
-{
-#if defined (test_settings_SPEED_TEST_ENABLED)
-
- if (ret_val == 0)
- {
- FftType fft;
- ret_val = TestSpeed <FftType>::perform_test_single_object (fft);
- }
-
-#endif
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // TestHelperFixLen_CODEHEADER_INCLUDED
-
-#undef TestHelperFixLen_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestHelperNormal.h b/examples/spectrum/3rdparty/fftreal/TestHelperNormal.h
deleted file mode 100644
index a7bff5c2..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestHelperNormal.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*****************************************************************************
-
- TestHelperNormal.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestHelperNormal_HEADER_INCLUDED)
-#define TestHelperNormal_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "FFTReal.h"
-
-
-
-template <class DT>
-class TestHelperNormal
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef DT DataType;
- typedef FFTReal <DataType> FftType;
-
- static void perform_test_accuracy (int &ret_val);
- static void perform_test_speed (int &ret_val);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestHelperNormal ();
- ~TestHelperNormal ();
- TestHelperNormal (const TestHelperNormal &other);
- TestHelperNormal &
- operator = (const TestHelperNormal &other);
- bool operator == (const TestHelperNormal &other);
- bool operator != (const TestHelperNormal &other);
-
-}; // class TestHelperNormal
-
-
-
-#include "TestHelperNormal.hpp"
-
-
-
-#endif // TestHelperNormal_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestHelperNormal.hpp b/examples/spectrum/3rdparty/fftreal/TestHelperNormal.hpp
deleted file mode 100644
index e037696a..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestHelperNormal.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*****************************************************************************
-
- TestHelperNormal.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestHelperNormal_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestHelperNormal code header.
-#endif
-#define TestHelperNormal_CURRENT_CODEHEADER
-
-#if ! defined (TestHelperNormal_CODEHEADER_INCLUDED)
-#define TestHelperNormal_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "test_settings.h"
-
-#include "TestAccuracy.h"
-#if defined (test_settings_SPEED_TEST_ENABLED)
- #include "TestSpeed.h"
-#endif
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class DT>
-void TestHelperNormal <DT>::perform_test_accuracy (int &ret_val)
-{
- const int len_arr [] = { 1, 2, 3, 4, 7, 8, 10, 12 };
- const int nbr_len = sizeof (len_arr) / sizeof (len_arr [0]);
- for (int k = 0; k < nbr_len && ret_val == 0; ++k)
- {
- const long len = 1L << (len_arr [k]);
- FftType fft (len);
- ret_val = TestAccuracy <FftType>::perform_test_single_object (fft);
- }
-}
-
-
-
-template <class DT>
-void TestHelperNormal <DT>::perform_test_speed (int &ret_val)
-{
-#if defined (test_settings_SPEED_TEST_ENABLED)
-
- const int len_arr [] = { 1, 2, 3, 4, 7, 8, 10, 12, 14, 16, 18, 20, 22 };
- const int nbr_len = sizeof (len_arr) / sizeof (len_arr [0]);
- for (int k = 0; k < nbr_len && ret_val == 0; ++k)
- {
- const long len = 1L << (len_arr [k]);
- FftType fft (len);
- ret_val = TestSpeed <FftType>::perform_test_single_object (fft);
- }
-
-#endif
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // TestHelperNormal_CODEHEADER_INCLUDED
-
-#undef TestHelperNormal_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestSpeed.h b/examples/spectrum/3rdparty/fftreal/TestSpeed.h
deleted file mode 100644
index 22957818..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestSpeed.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*****************************************************************************
-
- TestSpeed.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestSpeed_HEADER_INCLUDED)
-#define TestSpeed_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class FO>
-class TestSpeed
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef typename FO::DataType DataType;
-
- static int perform_test_single_object (FO &fft);
- static int perform_test_d (FO &fft, const char *class_name_0);
- static int perform_test_i (FO &fft, const char *class_name_0);
- static int perform_test_di (FO &fft, const char *class_name_0);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- enum { NBR_SPD_TESTS = 10 * 1000 * 1000 };
- enum { MAX_NBR_TESTS = 10000 };
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestSpeed ();
- ~TestSpeed ();
- TestSpeed (const TestSpeed &other);
- TestSpeed & operator = (const TestSpeed &other);
- bool operator == (const TestSpeed &other);
- bool operator != (const TestSpeed &other);
-
-}; // class TestSpeed
-
-
-
-#include "TestSpeed.hpp"
-
-
-
-#endif // TestSpeed_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestSpeed.hpp b/examples/spectrum/3rdparty/fftreal/TestSpeed.hpp
deleted file mode 100644
index e716b2a7..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestSpeed.hpp
+++ /dev/null
@@ -1,223 +0,0 @@
-/*****************************************************************************
-
- TestSpeed.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestSpeed_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestSpeed code header.
-#endif
-#define TestSpeed_CURRENT_CODEHEADER
-
-#if ! defined (TestSpeed_CODEHEADER_INCLUDED)
-#define TestSpeed_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "test_fnc.h"
-#include "stopwatch/StopWatch.h"
-#include "TestWhiteNoiseGen.h"
-
-#include <typeinfo>
-
-#include <cstdio>
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class FO>
-int TestSpeed <FO>::perform_test_single_object (FO &fft)
-{
- assert (&fft != 0);
-
- int ret_val = 0;
-
- const std::type_info & ti = typeid (fft);
- const char * class_name_0 = ti.name ();
-
- if (ret_val == 0)
- {
- perform_test_d (fft, class_name_0);
- }
- if (ret_val == 0)
- {
- perform_test_i (fft, class_name_0);
- }
- if (ret_val == 0)
- {
- perform_test_di (fft, class_name_0);
- }
-
- if (ret_val == 0)
- {
- printf ("\n");
- }
-
- return (ret_val);
-}
-
-
-
-template <class FO>
-int TestSpeed <FO>::perform_test_d (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- static_cast <long> (NBR_SPD_TESTS / len / len),
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len, 0);
- std::vector <DataType> s (len);
- noise.generate (&x [0], len);
-
- printf (
- "%s::do_fft () speed test [%ld samples]... ",
- class_name_0,
- len
- );
- fflush (stdout);
-
- stopwatch::StopWatch chrono;
- chrono.start ();
- for (long test = 0; test < nbr_tests; ++ test)
- {
- fft.do_fft (&s [0], &x [0]);
- chrono.stop_lap ();
- }
-
- printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
-
- return (0);
-}
-
-
-
-template <class FO>
-int TestSpeed <FO>::perform_test_i (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- static_cast <long> (NBR_SPD_TESTS / len / len),
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len);
- std::vector <DataType> s (len, 0);
- noise.generate (&s [0], len);
-
- printf (
- "%s::do_ifft () speed test [%ld samples]... ",
- class_name_0,
- len
- );
- fflush (stdout);
-
- stopwatch::StopWatch chrono;
- chrono.start ();
- for (long test = 0; test < nbr_tests; ++ test)
- {
- fft.do_ifft (&s [0], &x [0]);
- chrono.stop_lap ();
- }
-
- printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
-
- return (0);
-}
-
-
-
-template <class FO>
-int TestSpeed <FO>::perform_test_di (FO &fft, const char *class_name_0)
-{
- assert (&fft != 0);
- assert (class_name_0 != 0);
-
- const long len = fft.get_length ();
- const long nbr_tests = limit (
- static_cast <long> (NBR_SPD_TESTS / len / len),
- 1L,
- static_cast <long> (MAX_NBR_TESTS)
- );
-
- TestWhiteNoiseGen <DataType> noise;
- std::vector <DataType> x (len, 0);
- std::vector <DataType> s (len);
- std::vector <DataType> y (len);
- noise.generate (&x [0], len);
-
- printf (
- "%s::do_fft () / do_ifft () / rescale () speed test [%ld samples]... ",
- class_name_0,
- len
- );
- fflush (stdout);
-
- stopwatch::StopWatch chrono;
-
- chrono.start ();
- for (long test = 0; test < nbr_tests; ++ test)
- {
- fft.do_fft (&s [0], &x [0]);
- fft.do_ifft (&s [0], &y [0]);
- fft.rescale (&y [0]);
- chrono.stop_lap ();
- }
-
- printf ("%.1f clocks/sample\n", chrono.get_time_best_lap (len));
-
- return (0);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // TestSpeed_CODEHEADER_INCLUDED
-
-#undef TestSpeed_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h b/examples/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h
deleted file mode 100644
index d815f8e3..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*****************************************************************************
-
- TestWhiteNoiseGen.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (TestWhiteNoiseGen_HEADER_INCLUDED)
-#define TestWhiteNoiseGen_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class DT>
-class TestWhiteNoiseGen
-{
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-public:
-
- typedef DT DataType;
-
- TestWhiteNoiseGen ();
- virtual ~TestWhiteNoiseGen () {}
-
- void generate (DataType data_ptr [], long len);
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-protected:
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- typedef unsigned long StateType;
-
- StateType _rand_state;
-
-
-
-/*\\\ FORBIDDEN MEMBER FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-private:
-
- TestWhiteNoiseGen (const TestWhiteNoiseGen &other);
- TestWhiteNoiseGen &
- operator = (const TestWhiteNoiseGen &other);
- bool operator == (const TestWhiteNoiseGen &other);
- bool operator != (const TestWhiteNoiseGen &other);
-
-}; // class TestWhiteNoiseGen
-
-
-
-#include "TestWhiteNoiseGen.hpp"
-
-
-
-#endif // TestWhiteNoiseGen_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp b/examples/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp
deleted file mode 100644
index 13b7eb3e..00000000
--- a/examples/spectrum/3rdparty/fftreal/TestWhiteNoiseGen.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*****************************************************************************
-
- TestWhiteNoiseGen.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (TestWhiteNoiseGen_CURRENT_CODEHEADER)
- #error Recursive inclusion of TestWhiteNoiseGen code header.
-#endif
-#define TestWhiteNoiseGen_CURRENT_CODEHEADER
-
-#if ! defined (TestWhiteNoiseGen_CODEHEADER_INCLUDED)
-#define TestWhiteNoiseGen_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class DT>
-TestWhiteNoiseGen <DT>::TestWhiteNoiseGen ()
-: _rand_state (0)
-{
- _rand_state = reinterpret_cast <StateType> (this);
-}
-
-
-
-template <class DT>
-void TestWhiteNoiseGen <DT>::generate (DataType data_ptr [], long len)
-{
- assert (data_ptr != 0);
- assert (len > 0);
-
- const DataType one = static_cast <DataType> (1);
- const DataType mul = one / static_cast <DataType> (0x80000000UL);
-
- long pos = 0;
- do
- {
- const DataType x = static_cast <DataType> (_rand_state & 0xFFFFFFFFUL);
- data_ptr [pos] = x * mul - one;
-
- _rand_state = _rand_state * 1234567UL + 890123UL;
-
- ++ pos;
- }
- while (pos < len);
-}
-
-
-
-/*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-/*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-#endif // TestWhiteNoiseGen_CODEHEADER_INCLUDED
-
-#undef TestWhiteNoiseGen_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/def.h b/examples/spectrum/3rdparty/fftreal/def.h
deleted file mode 100644
index 99c545f5..00000000
--- a/examples/spectrum/3rdparty/fftreal/def.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*****************************************************************************
-
- def.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (def_HEADER_INCLUDED)
-#define def_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-
-const double PI = 3.1415926535897932384626433832795;
-const double SQRT2 = 1.41421356237309514547462185873883;
-
-#if defined (_MSC_VER)
-
- #define FORCEINLINE __forceinline
-
-#else
-
- #define FORCEINLINE inline
-
-#endif
-
-
-
-#endif // def_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/fftreal.pas b/examples/spectrum/3rdparty/fftreal/fftreal.pas
deleted file mode 100644
index ea637545..00000000
--- a/examples/spectrum/3rdparty/fftreal/fftreal.pas
+++ /dev/null
@@ -1,661 +0,0 @@
-(*****************************************************************************
-
- DIGITAL SIGNAL PROCESSING TOOLS
- Version 1.03, 2001/06/15
- (c) 1999 - Laurent de Soras
-
- FFTReal.h
- Fourier transformation of real number arrays.
- Portable ISO C++
-
-------------------------------------------------------------------------------
-
- LEGAL
-
- Source code may be freely used for any purpose, including commercial
- applications. Programs must display in their "About" dialog-box (or
- documentation) a text telling they use these routines by Laurent de Soras.
- Modified source code can be distributed, but modifications must be clearly
- indicated.
-
- CONTACT
-
- Laurent de Soras
- 92 avenue Albert 1er
- 92500 Rueil-Malmaison
- France
-
- ldesoras@club-internet.fr
-
-------------------------------------------------------------------------------
-
- Translation to ObjectPascal by :
- Frederic Vanmol
- frederic@axiworld.be
-
-*****************************************************************************)
-
-
-unit
- FFTReal;
-
-interface
-
-uses
- Windows;
-
-(* Change this typedef to use a different floating point type in your FFTs
- (i.e. float, double or long double). *)
-type
- pflt_t = ^flt_t;
- flt_t = single;
-
- pflt_array = ^flt_array;
- flt_array = array[0..0] of flt_t;
-
- plongarray = ^longarray;
- longarray = array[0..0] of longint;
-
-const
- sizeof_flt : longint = SizeOf(flt_t);
-
-
-
-type
- // Bit reversed look-up table nested class
- TBitReversedLUT = class
- private
- _ptr : plongint;
- public
- constructor Create(const nbr_bits: integer);
- destructor Destroy; override;
- function get_ptr: plongint;
- end;
-
- // Trigonometric look-up table nested class
- TTrigoLUT = class
- private
- _ptr : pflt_t;
- public
- constructor Create(const nbr_bits: integer);
- destructor Destroy; override;
- function get_ptr(const level: integer): pflt_t;
- end;
-
- TFFTReal = class
- private
- _bit_rev_lut : TBitReversedLUT;
- _trigo_lut : TTrigoLUT;
- _sqrt2_2 : flt_t;
- _length : longint;
- _nbr_bits : integer;
- _buffer_ptr : pflt_t;
- public
- constructor Create(const length: longint);
- destructor Destroy; override;
-
- procedure do_fft(f: pflt_array; const x: pflt_array);
- procedure do_ifft(const f: pflt_array; x: pflt_array);
- procedure rescale(x: pflt_array);
- end;
-
-
-
-
-
-
-
-implementation
-
-uses
- Math;
-
-{ TBitReversedLUT }
-
-constructor TBitReversedLUT.Create(const nbr_bits: integer);
-var
- length : longint;
- cnt : longint;
- br_index : longint;
- bit : longint;
-begin
- inherited Create;
-
- length := 1 shl nbr_bits;
- GetMem(_ptr, length*SizeOf(longint));
-
- br_index := 0;
- plongarray(_ptr)^[0] := 0;
- for cnt := 1 to length-1 do
- begin
- // ++br_index (bit reversed)
- bit := length shr 1;
- br_index := br_index xor bit;
- while br_index and bit = 0 do
- begin
- bit := bit shr 1;
- br_index := br_index xor bit;
- end;
-
- plongarray(_ptr)^[cnt] := br_index;
- end;
-end;
-
-destructor TBitReversedLUT.Destroy;
-begin
- FreeMem(_ptr);
- _ptr := nil;
- inherited;
-end;
-
-function TBitReversedLUT.get_ptr: plongint;
-begin
- Result := _ptr;
-end;
-
-{ TTrigLUT }
-
-constructor TTrigoLUT.Create(const nbr_bits: integer);
-var
- total_len : longint;
- PI : double;
- level : integer;
- level_len : longint;
- level_ptr : pflt_array;
- mul : double;
- i : longint;
-begin
- inherited Create;
-
- _ptr := nil;
-
- if (nbr_bits > 3) then
- begin
- total_len := (1 shl (nbr_bits - 1)) - 4;
- GetMem(_ptr, total_len * sizeof_flt);
-
- PI := ArcTan(1) * 4;
- for level := 3 to nbr_bits-1 do
- begin
- level_len := 1 shl (level - 1);
- level_ptr := pointer(get_ptr(level));
- mul := PI / (level_len shl 1);
-
- for i := 0 to level_len-1 do
- level_ptr^[i] := cos(i * mul);
- end;
- end;
-end;
-
-destructor TTrigoLUT.Destroy;
-begin
- FreeMem(_ptr);
- _ptr := nil;
- inherited;
-end;
-
-function TTrigoLUT.get_ptr(const level: integer): pflt_t;
-var
- tempp : pflt_t;
-begin
- tempp := _ptr;
- inc(tempp, (1 shl (level-1)) - 4);
- Result := tempp;
-end;
-
-{ TFFTReal }
-
-constructor TFFTReal.Create(const length: longint);
-begin
- inherited Create;
-
- _length := length;
- _nbr_bits := Floor(Ln(length) / Ln(2) + 0.5);
- _bit_rev_lut := TBitReversedLUT.Create(Floor(Ln(length) / Ln(2) + 0.5));
- _trigo_lut := TTrigoLUT.Create(Floor(Ln(length) / Ln(2) + 0.05));
- _sqrt2_2 := Sqrt(2) * 0.5;
-
- _buffer_ptr := nil;
- if _nbr_bits > 2 then
- GetMem(_buffer_ptr, _length * sizeof_flt);
-end;
-
-destructor TFFTReal.Destroy;
-begin
- if _buffer_ptr <> nil then
- begin
- FreeMem(_buffer_ptr);
- _buffer_ptr := nil;
- end;
-
- _bit_rev_lut.Free;
- _bit_rev_lut := nil;
- _trigo_lut.Free;
- _trigo_lut := nil;
-
- inherited;
-end;
-
-(*==========================================================================*/
-/* Name: do_fft */
-/* Description: Compute the FFT of the array. */
-/* Input parameters: */
-/* - x: pointer on the source array (time). */
-/* Output parameters: */
-/* - f: pointer on the destination array (frequencies). */
-/* f [0...length(x)/2] = real values, */
-/* f [length(x)/2+1...length(x)-1] = imaginary values of */
-/* coefficents 1...length(x)/2-1. */
-/*==========================================================================*)
-procedure TFFTReal.do_fft(f: pflt_array; const x: pflt_array);
-var
- sf, df : pflt_array;
- pass : integer;
- nbr_coef : longint;
- h_nbr_coef : longint;
- d_nbr_coef : longint;
- coef_index : longint;
- bit_rev_lut_ptr : plongarray;
- rev_index_0 : longint;
- rev_index_1 : longint;
- rev_index_2 : longint;
- rev_index_3 : longint;
- df2 : pflt_array;
- n1, n2, n3 : integer;
- sf_0, sf_2 : flt_t;
- sqrt2_2 : flt_t;
- v : flt_t;
- cos_ptr : pflt_array;
- i : longint;
- sf1r, sf2r : pflt_array;
- dfr, dfi : pflt_array;
- sf1i, sf2i : pflt_array;
- c, s : flt_t;
- temp_ptr : pflt_array;
- b_0, b_2 : flt_t;
-begin
- n1 := 1;
- n2 := 2;
- n3 := 3;
-
- (*______________________________________________
- *
- * General case
- *______________________________________________
- *)
-
- if _nbr_bits > 2 then
- begin
- if _nbr_bits and 1 <> 0 then
- begin
- df := pointer(_buffer_ptr);
- sf := f;
- end
- else
- begin
- df := f;
- sf := pointer(_buffer_ptr);
- end;
-
- //
- // Do the transformation in several passes
- //
-
- // First and second pass at once
- bit_rev_lut_ptr := pointer(_bit_rev_lut.get_ptr);
- coef_index := 0;
-
- repeat
- rev_index_0 := bit_rev_lut_ptr^[coef_index];
- rev_index_1 := bit_rev_lut_ptr^[coef_index + 1];
- rev_index_2 := bit_rev_lut_ptr^[coef_index + 2];
- rev_index_3 := bit_rev_lut_ptr^[coef_index + 3];
-
- df2 := pointer(longint(df) + (coef_index*sizeof_flt));
- df2^[n1] := x^[rev_index_0] - x^[rev_index_1];
- df2^[n3] := x^[rev_index_2] - x^[rev_index_3];
-
- sf_0 := x^[rev_index_0] + x^[rev_index_1];
- sf_2 := x^[rev_index_2] + x^[rev_index_3];
-
- df2^[0] := sf_0 + sf_2;
- df2^[n2] := sf_0 - sf_2;
-
- inc(coef_index, 4);
- until (coef_index >= _length);
-
-
- // Third pass
- coef_index := 0;
- sqrt2_2 := _sqrt2_2;
-
- repeat
- sf^[coef_index] := df^[coef_index] + df^[coef_index + 4];
- sf^[coef_index + 4] := df^[coef_index] - df^[coef_index + 4];
- sf^[coef_index + 2] := df^[coef_index + 2];
- sf^[coef_index + 6] := df^[coef_index + 6];
-
- v := (df [coef_index + 5] - df^[coef_index + 7]) * sqrt2_2;
- sf^[coef_index + 1] := df^[coef_index + 1] + v;
- sf^[coef_index + 3] := df^[coef_index + 1] - v;
-
- v := (df^[coef_index + 5] + df^[coef_index + 7]) * sqrt2_2;
- sf [coef_index + 5] := v + df^[coef_index + 3];
- sf [coef_index + 7] := v - df^[coef_index + 3];
-
- inc(coef_index, 8);
- until (coef_index >= _length);
-
-
- // Next pass
- for pass := 3 to _nbr_bits-1 do
- begin
- coef_index := 0;
- nbr_coef := 1 shl pass;
- h_nbr_coef := nbr_coef shr 1;
- d_nbr_coef := nbr_coef shl 1;
-
- cos_ptr := pointer(_trigo_lut.get_ptr(pass));
- repeat
- sf1r := pointer(longint(sf) + (coef_index * sizeof_flt));
- sf2r := pointer(longint(sf1r) + (nbr_coef * sizeof_flt));
- dfr := pointer(longint(df) + (coef_index * sizeof_flt));
- dfi := pointer(longint(dfr) + (nbr_coef * sizeof_flt));
-
- // Extreme coefficients are always real
- dfr^[0] := sf1r^[0] + sf2r^[0];
- dfi^[0] := sf1r^[0] - sf2r^[0]; // dfr [nbr_coef] =
- dfr^[h_nbr_coef] := sf1r^[h_nbr_coef];
- dfi^[h_nbr_coef] := sf2r^[h_nbr_coef];
-
- // Others are conjugate complex numbers
- sf1i := pointer(longint(sf1r) + (h_nbr_coef * sizeof_flt));
- sf2i := pointer(longint(sf1i) + (nbr_coef * sizeof_flt));
-
- for i := 1 to h_nbr_coef-1 do
- begin
- c := cos_ptr^[i]; // cos (i*PI/nbr_coef);
- s := cos_ptr^[h_nbr_coef - i]; // sin (i*PI/nbr_coef);
-
- v := sf2r^[i] * c - sf2i^[i] * s;
- dfr^[i] := sf1r^[i] + v;
- dfi^[-i] := sf1r^[i] - v; // dfr [nbr_coef - i] =
-
- v := sf2r^[i] * s + sf2i^[i] * c;
- dfi^[i] := v + sf1i^[i];
- dfi^[nbr_coef - i] := v - sf1i^[i];
- end;
-
- inc(coef_index, d_nbr_coef);
- until (coef_index >= _length);
-
- // Prepare to the next pass
- temp_ptr := df;
- df := sf;
- sf := temp_ptr;
- end;
- end
-
- (*______________________________________________
- *
- * Special cases
- *______________________________________________
- *)
-
- // 4-point FFT
- else if _nbr_bits = 2 then
- begin
- f^[n1] := x^[0] - x^[n2];
- f^[n3] := x^[n1] - x^[n3];
-
- b_0 := x^[0] + x^[n2];
- b_2 := x^[n1] + x^[n3];
-
- f^[0] := b_0 + b_2;
- f^[n2] := b_0 - b_2;
- end
-
- // 2-point FFT
- else if _nbr_bits = 1 then
- begin
- f^[0] := x^[0] + x^[n1];
- f^[n1] := x^[0] - x^[n1];
- end
-
- // 1-point FFT
- else
- f^[0] := x^[0];
-end;
-
-
-(*==========================================================================*/
-/* Name: do_ifft */
-/* Description: Compute the inverse FFT of the array. Notice that */
-/* IFFT (FFT (x)) = x * length (x). Data must be */
-/* post-scaled. */
-/* Input parameters: */
-/* - f: pointer on the source array (frequencies). */
-/* f [0...length(x)/2] = real values, */
-/* f [length(x)/2+1...length(x)-1] = imaginary values of */
-/* coefficents 1...length(x)/2-1. */
-/* Output parameters: */
-/* - x: pointer on the destination array (time). */
-/*==========================================================================*)
-procedure TFFTReal.do_ifft(const f: pflt_array; x: pflt_array);
-var
- n1, n2, n3 : integer;
- n4, n5, n6, n7 : integer;
- sf, df, df_temp : pflt_array;
- pass : integer;
- nbr_coef : longint;
- h_nbr_coef : longint;
- d_nbr_coef : longint;
- coef_index : longint;
- cos_ptr : pflt_array;
- i : longint;
- sfr, sfi : pflt_array;
- df1r, df2r : pflt_array;
- df1i, df2i : pflt_array;
- c, s, vr, vi : flt_t;
- temp_ptr : pflt_array;
- sqrt2_2 : flt_t;
- bit_rev_lut_ptr : plongarray;
- sf2 : pflt_array;
- b_0, b_1, b_2, b_3 : flt_t;
-begin
- n1 := 1;
- n2 := 2;
- n3 := 3;
- n4 := 4;
- n5 := 5;
- n6 := 6;
- n7 := 7;
-
- (*______________________________________________
- *
- * General case
- *______________________________________________
- *)
-
- if _nbr_bits > 2 then
- begin
- sf := f;
-
- if _nbr_bits and 1 <> 0 then
- begin
- df := pointer(_buffer_ptr);
- df_temp := x;
- end
- else
- begin
- df := x;
- df_temp := pointer(_buffer_ptr);
- end;
-
- // Do the transformation in several pass
-
- // First pass
- for pass := _nbr_bits-1 downto 3 do
- begin
- coef_index := 0;
- nbr_coef := 1 shl pass;
- h_nbr_coef := nbr_coef shr 1;
- d_nbr_coef := nbr_coef shl 1;
-
- cos_ptr := pointer(_trigo_lut.get_ptr(pass));
-
- repeat
- sfr := pointer(longint(sf) + (coef_index*sizeof_flt));
- sfi := pointer(longint(sfr) + (nbr_coef*sizeof_flt));
- df1r := pointer(longint(df) + (coef_index*sizeof_flt));
- df2r := pointer(longint(df1r) + (nbr_coef*sizeof_flt));
-
- // Extreme coefficients are always real
- df1r^[0] := sfr^[0] + sfi^[0]; // + sfr [nbr_coef]
- df2r^[0] := sfr^[0] - sfi^[0]; // - sfr [nbr_coef]
- df1r^[h_nbr_coef] := sfr^[h_nbr_coef] * 2;
- df2r^[h_nbr_coef] := sfi^[h_nbr_coef] * 2;
-
- // Others are conjugate complex numbers
- df1i := pointer(longint(df1r) + (h_nbr_coef*sizeof_flt));
- df2i := pointer(longint(df1i) + (nbr_coef*sizeof_flt));
-
- for i := 1 to h_nbr_coef-1 do
- begin
- df1r^[i] := sfr^[i] + sfi^[-i]; // + sfr [nbr_coef - i]
- df1i^[i] := sfi^[i] - sfi^[nbr_coef - i];
-
- c := cos_ptr^[i]; // cos (i*PI/nbr_coef);
- s := cos_ptr^[h_nbr_coef - i]; // sin (i*PI/nbr_coef);
- vr := sfr^[i] - sfi^[-i]; // - sfr [nbr_coef - i]
- vi := sfi^[i] + sfi^[nbr_coef - i];
-
- df2r^[i] := vr * c + vi * s;
- df2i^[i] := vi * c - vr * s;
- end;
-
- inc(coef_index, d_nbr_coef);
- until (coef_index >= _length);
-
-
- // Prepare to the next pass
- if (pass < _nbr_bits - 1) then
- begin
- temp_ptr := df;
- df := sf;
- sf := temp_ptr;
- end
- else
- begin
- sf := df;
- df := df_temp;
- end
- end;
-
- // Antepenultimate pass
- sqrt2_2 := _sqrt2_2;
- coef_index := 0;
-
- repeat
- df^[coef_index] := sf^[coef_index] + sf^[coef_index + 4];
- df^[coef_index + 4] := sf^[coef_index] - sf^[coef_index + 4];
- df^[coef_index + 2] := sf^[coef_index + 2] * 2;
- df^[coef_index + 6] := sf^[coef_index + 6] * 2;
-
- df^[coef_index + 1] := sf^[coef_index + 1] + sf^[coef_index + 3];
- df^[coef_index + 3] := sf^[coef_index + 5] - sf^[coef_index + 7];
-
- vr := sf^[coef_index + 1] - sf^[coef_index + 3];
- vi := sf^[coef_index + 5] + sf^[coef_index + 7];
-
- df^[coef_index + 5] := (vr + vi) * sqrt2_2;
- df^[coef_index + 7] := (vi - vr) * sqrt2_2;
-
- inc(coef_index, 8);
- until (coef_index >= _length);
-
-
- // Penultimate and last pass at once
- coef_index := 0;
- bit_rev_lut_ptr := pointer(_bit_rev_lut.get_ptr);
- sf2 := df;
-
- repeat
- b_0 := sf2^[0] + sf2^[n2];
- b_2 := sf2^[0] - sf2^[n2];
- b_1 := sf2^[n1] * 2;
- b_3 := sf2^[n3] * 2;
-
- x^[bit_rev_lut_ptr^[0]] := b_0 + b_1;
- x^[bit_rev_lut_ptr^[n1]] := b_0 - b_1;
- x^[bit_rev_lut_ptr^[n2]] := b_2 + b_3;
- x^[bit_rev_lut_ptr^[n3]] := b_2 - b_3;
-
- b_0 := sf2^[n4] + sf2^[n6];
- b_2 := sf2^[n4] - sf2^[n6];
- b_1 := sf2^[n5] * 2;
- b_3 := sf2^[n7] * 2;
-
- x^[bit_rev_lut_ptr^[n4]] := b_0 + b_1;
- x^[bit_rev_lut_ptr^[n5]] := b_0 - b_1;
- x^[bit_rev_lut_ptr^[n6]] := b_2 + b_3;
- x^[bit_rev_lut_ptr^[n7]] := b_2 - b_3;
-
- inc(sf2, 8);
- inc(coef_index, 8);
- inc(bit_rev_lut_ptr, 8);
- until (coef_index >= _length);
- end
-
- (*______________________________________________
- *
- * Special cases
- *______________________________________________
- *)
-
- // 4-point IFFT
- else if _nbr_bits = 2 then
- begin
- b_0 := f^[0] + f [n2];
- b_2 := f^[0] - f [n2];
-
- x^[0] := b_0 + f [n1] * 2;
- x^[n2] := b_0 - f [n1] * 2;
- x^[n1] := b_2 + f [n3] * 2;
- x^[n3] := b_2 - f [n3] * 2;
- end
-
- // 2-point IFFT
- else if _nbr_bits = 1 then
- begin
- x^[0] := f^[0] + f^[n1];
- x^[n1] := f^[0] - f^[n1];
- end
-
- // 1-point IFFT
- else
- x^[0] := f^[0];
-end;
-
-(*==========================================================================*/
-/* Name: rescale */
-/* Description: Scale an array by divide each element by its length. */
-/* This function should be called after FFT + IFFT. */
-/* Input/Output parameters: */
-/* - x: pointer on array to rescale (time or frequency). */
-/*==========================================================================*)
-procedure TFFTReal.rescale(x: pflt_array);
-var
- mul : flt_t;
- i : longint;
-begin
- mul := 1.0 / _length;
- i := _length - 1;
-
- repeat
- x^[i] := x^[i] * mul;
- dec(i);
- until (i < 0);
-end;
-
-end.
diff --git a/examples/spectrum/3rdparty/fftreal/fftreal.pro b/examples/spectrum/3rdparty/fftreal/fftreal.pro
deleted file mode 100644
index f6abeeb1..00000000
--- a/examples/spectrum/3rdparty/fftreal/fftreal.pro
+++ /dev/null
@@ -1,44 +0,0 @@
-include(../../spectrum.pri)
-
-static: error(This library cannot be built for static linkage)
-
-TEMPLATE = lib
-TARGET = fftreal
-
-# FFTReal
-HEADERS += Array.h \
- Array.hpp \
- DynArray.h \
- DynArray.hpp \
- FFTRealFixLen.h \
- FFTRealFixLen.hpp \
- FFTRealFixLenParam.h \
- FFTRealPassDirect.h \
- FFTRealPassDirect.hpp \
- FFTRealPassInverse.h \
- FFTRealPassInverse.hpp \
- FFTRealSelect.h \
- FFTRealSelect.hpp \
- FFTRealUseTrigo.h \
- FFTRealUseTrigo.hpp \
- OscSinCos.h \
- OscSinCos.hpp \
- def.h
-
-# Wrapper used to export the required instantiation of the FFTRealFixLen template
-HEADERS += fftreal_wrapper.h
-SOURCES += fftreal_wrapper.cpp
-
-DEFINES += FFTREAL_LIBRARY
-
-macx {
- CONFIG += lib_bundle
-} else {
- DESTDIR = ../..$${spectrum_build_dir}
-}
-
-EXAMPLE_FILES = bwins/fftreal.def eabi/fftreal.def readme.txt license.txt
-
-target.path = $$[QT_INSTALL_EXAMPLES]/multimedia/spectrum
-INSTALLS += target
-
diff --git a/examples/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp b/examples/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp
deleted file mode 100644
index 45aee653..00000000
--- a/examples/spectrum/3rdparty/fftreal/fftreal_wrapper.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of QtDataVis3D.
-**
-** This program is free software: you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as
-** published by the Free Software Foundation, either version 2.1. This
-** program is distributed in the hope that it will be useful, but WITHOUT
-** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-** for more details. You should have received a copy of the GNU General
-** Public License along with this program. If not, see
-** <http://www.gnu.org/licenses/>.
-**
-***************************************************************************/
-
-#include "fftreal_wrapper.h"
-
-// FFTReal code generates quite a lot of 'unused parameter' compiler warnings,
-// which we suppress here in order to get a clean build output.
-#if defined Q_CC_MSVC
-# pragma warning(disable:4100)
-#elif defined Q_CC_GNU
-# pragma GCC diagnostic ignored "-Wunused-parameter"
-#elif defined Q_CC_MWERKS
-# pragma warning off (10182)
-#endif
-
-#include "FFTRealFixLen.h"
-
-class FFTRealWrapperPrivate {
-public:
- FFTRealFixLen<FFTLengthPowerOfTwo> m_fft;
-};
-
-
-FFTRealWrapper::FFTRealWrapper()
- : m_private(new FFTRealWrapperPrivate)
-{
-
-}
-
-FFTRealWrapper::~FFTRealWrapper()
-{
- delete m_private;
-}
-
-void FFTRealWrapper::calculateFFT(DataType in[], const DataType out[])
-{
- m_private->m_fft.do_fft(in, out);
-}
diff --git a/examples/spectrum/3rdparty/fftreal/fftreal_wrapper.h b/examples/spectrum/3rdparty/fftreal/fftreal_wrapper.h
deleted file mode 100644
index 2fb602de..00000000
--- a/examples/spectrum/3rdparty/fftreal/fftreal_wrapper.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************
-**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the examples of QtDataVis3D.
-**
-** This program is free software: you can redistribute it and/or modify
-** it under the terms of the GNU Lesser General Public License as
-** published by the Free Software Foundation, either version 2.1. This
-** program is distributed in the hope that it will be useful, but WITHOUT
-** ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-** FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-** for more details. You should have received a copy of the GNU General
-** Public License along with this program. If not, see
-** <http://www.gnu.org/licenses/>.
-**
-***************************************************************************/
-
-#ifndef FFTREAL_WRAPPER_H
-#define FFTREAL_WRAPPER_H
-
-#include <QtCore/QtGlobal>
-
-#if defined(FFTREAL_LIBRARY)
-# define FFTREAL_EXPORT Q_DECL_EXPORT
-#else
-# define FFTREAL_EXPORT Q_DECL_IMPORT
-#endif
-
-class FFTRealWrapperPrivate;
-
-// Each pass of the FFT processes 2^X samples, where X is the
-// number below.
-static const int FFTLengthPowerOfTwo = 12;
-
-/**
- * Wrapper around the FFTRealFixLen template provided by the FFTReal
- * library
- *
- * This class instantiates a single instance of FFTRealFixLen, using
- * FFTLengthPowerOfTwo as the template parameter. It then exposes
- * FFTRealFixLen<FFTLengthPowerOfTwo>::do_fft via the calculateFFT
- * function, thereby allowing an application to dynamically link
- * against the FFTReal implementation.
- *
- * See http://ldesoras.free.fr/prod.html
- */
-class FFTREAL_EXPORT FFTRealWrapper
-{
-public:
- FFTRealWrapper();
- ~FFTRealWrapper();
-
- typedef float DataType;
- void calculateFFT(DataType in[], const DataType out[]);
-
-private:
- FFTRealWrapperPrivate* m_private;
-};
-
-#endif // FFTREAL_WRAPPER_H
-
diff --git a/examples/spectrum/3rdparty/fftreal/license.txt b/examples/spectrum/3rdparty/fftreal/license.txt
deleted file mode 100644
index 918fe68e..00000000
--- a/examples/spectrum/3rdparty/fftreal/license.txt
+++ /dev/null
@@ -1,459 +0,0 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
diff --git a/examples/spectrum/3rdparty/fftreal/readme.txt b/examples/spectrum/3rdparty/fftreal/readme.txt
deleted file mode 100644
index 0c5ce162..00000000
--- a/examples/spectrum/3rdparty/fftreal/readme.txt
+++ /dev/null
@@ -1,242 +0,0 @@
-==============================================================================
-
- FFTReal
- Version 2.00, 2005/10/18
-
- Fourier transformation (FFT, IFFT) library specialised for real data
- Portable ISO C++
-
- (c) Laurent de Soras <laurent.de.soras@club-internet.fr>
- Object Pascal port (c) Frederic Vanmol <frederic@fruityloops.com>
-
-==============================================================================
-
-
-
-1. Legal
---------
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-Check the file license.txt to get full information about the license.
-
-
-
-2. Content
-----------
-
-FFTReal is a library to compute Discrete Fourier Transforms (DFT) with the
-FFT algorithm (Fast Fourier Transform) on arrays of real numbers. It can
-also compute the inverse transform.
-
-You should find in this package a lot of files ; some of them are of interest:
-- readme.txt: you are reading it
-- FFTReal.h: FFT, length fixed at run-time
-- FFTRealFixLen.h: FFT, length fixed at compile-time
-- FFTReal.pas: Pascal implementation (working but not up-to-date)
-- stopwatch directory
-
-
-
-3. Using FFTReal
-----------------
-
-Important - if you were using older versions of FFTReal (up to 1.03), some
-things have changed. FFTReal is now a template. Therefore use FFTReal<float>
-or FFTReal<double> in your code depending on the application datatype. The
-flt_t typedef has been removed.
-
-You have two ways to use FFTReal. In the first way, the FFT has its length
-fixed at run-time, when the object is instanciated. It means that you have
-not to know the length when you write the code. This is the usual way of
-proceeding.
-
-
-3.1 FFTReal - Length fixed at run-time
---------------------------------------
-
-Just instanciate one time a FFTReal object. Specify the data type you want
-as template parameter (only floating point: float, double, long double or
-custom type). The constructor precompute a lot of things, so it may be a bit
-long. The parameter is the number of points used for the next FFTs. It must
-be a power of 2:
-
- #include "FFTReal.h"
- ...
- long len = 1024;
- ...
- FFTReal <float> fft_object (len); // 1024-point FFT object constructed.
-
-Then you can use this object to compute as many FFTs and IFFTs as you want.
-They will be computed very quickly because a lot of work has been done in the
-object construction.
-
- float x [1024];
- float f [1024];
-
- ...
- fft_object.do_fft (f, x); // x (real) --FFT---> f (complex)
- ...
- fft_object.do_ifft (f, x); // f (complex) --IFFT--> x (real)
- fft_object.rescale (x); // Post-scaling should be done after FFT+IFFT
- ...
-
-x [] and f [] are floating point number arrays. x [] is the real number
-sequence which we want to compute the FFT. f [] is the result, in the
-"frequency" domain. f has the same number of elements as x [], but f []
-elements are complex numbers. The routine uses some FFT properties to
-optimize memory and to reduce calculations: the transformaton of a real
-number sequence is a conjugate complex number sequence: F [k] = F [-k]*.
-
-
-3.2 FFTRealFixLen - Length fixed at compile-time
-------------------------------------------------
-
-This class is significantly faster than the previous one, giving a speed
-gain between 50 and 100 %. The template parameter is the base-2 logarithm of
-the FFT length. The datatype is float; it can be changed by modifying the
-DataType typedef in FFTRealFixLenParam.h. As FFTReal class, it supports
-only floating-point types or equivalent.
-
-To instanciate the object, just proceed as below:
-
- #include "FFTRealFixLen.h"
- ...
- FFTRealFixLen <10> fft_object; // 1024-point (2^10) FFT object constructed.
-
-Use is similar as the one of FFTReal.
-
-
-3.3 Data organisation
----------------------
-
-Mathematically speaking, the formulas below show what does FFTReal:
-
-do_fft() : f(k) = sum (p = 0, N-1, x(p) * exp (+j*2*pi*k*p/N))
-do_ifft(): x(k) = sum (p = 0, N-1, f(p) * exp (-j*2*pi*k*p/N))
-
-Where j is the square root of -1. The formulas differ only by the sign of
-the exponential. When the sign is positive, the transform is called positive.
-Common formulas for Fourier transform are negative for the direct tranform and
-positive for the inverse one.
-
-However in these formulas, f is an array of complex numbers and doesn't
-correspound exactly to the f[] array taken as function parameter. The
-following table shows how the f[] sequence is mapped onto the usable FFT
-coefficients (called bins):
-
- FFTReal output | Positive FFT equiv. | Negative FFT equiv.
- ---------------+-----------------------+-----------------------
- f [0] | Real (bin 0) | Real (bin 0)
- f [...] | Real (bin ...) | Real (bin ...)
- f [length/2] | Real (bin length/2) | Real (bin length/2)
- f [length/2+1] | Imag (bin 1) | -Imag (bin 1)
- f [...] | Imag (bin ...) | -Imag (bin ...)
- f [length-1] | Imag (bin length/2-1) | -Imag (bin length/2-1)
-
-And FFT bins are distributed in f [] as above:
-
- | | Positive FFT | Negative FFT
- Bin | Real part | imaginary part | imaginary part
- ------------+----------------+-----------------+---------------
- 0 | f [0] | 0 | 0
- 1 | f [1] | f [length/2+1] | -f [length/2+1]
- ... | f [...], | f [...] | -f [...]
- length/2-1 | f [length/2-1] | f [length-1] | -f [length-1]
- length/2 | f [length/2] | 0 | 0
- length/2+1 | f [length/2-1] | -f [length-1] | f [length-1]
- ... | f [...] | -f [...] | f [...]
- length-1 | f [1] | -f [length/2+1] | f [length/2+1]
-
-f [] coefficients have the same layout for FFT and IFFT functions. You may
-notice that scaling must be done if you want to retrieve x after FFT and IFFT.
-Actually, IFFT (FFT (x)) = x * length(x). This is a not a problem because
-most of the applications don't care about absolute values. Thus, the operation
-requires less calculation. If you want to use the FFT and IFFT to transform a
-signal, you have to apply post- (or pre-) processing yourself. Multiplying
-or dividing floating point numbers by a power of 2 doesn't generate extra
-computation noise.
-
-
-
-4. Compilation and testing
---------------------------
-
-Drop the following files into your project or makefile:
-
-Array.*
-def.h
-DynArray.*
-FFTReal*.cpp
-FFTReal*.h*
-OscSinCos.*
-
-Other files are for testing purpose only, do not include them if you just need
-to use the library ; they are not needed to use FFTReal in your own programs.
-
-FFTReal may be compiled in two versions: release and debug. Debug version
-has checks that could slow down the code. Define NDEBUG to set the Release
-mode. For example, the command line to compile the test bench on GCC would
-look like:
-
-Debug mode:
-g++ -Wall -o fftreal_debug.exe *.cpp stopwatch/*.cpp
-
-Release mode:
-g++ -Wall -o fftreal_release.exe -DNDEBUG -O3 *.cpp stopwatch/*.cpp
-
-It may be tricky to compile the test bench because the speed tests use the
-stopwatch sub-library, which is not that cross-platform. If you encounter
-any problem that you cannot easily fix while compiling it, edit the file
-test_settings.h and un-define the speed test macro. Remove the stopwatch
-directory from your source file list, too.
-
-If it's not done by default, you should activate the exception handling
-of your compiler to get the class memory-leak-safe. Thus, when a memory
-allocation fails (in the constructor), an exception is thrown and the entire
-object is safely destructed. It reduces the permanent error checking overhead
-in the client code. Also, the test bench requires Run-Time Type Information
-(RTTI) to be enabled in order to display the names of the tested classes -
-sometimes mangled, depending on the compiler.
-
-The test bench may take a long time to compile, especially in Release mode,
-because a lot of recursive templates are instanciated.
-
-
-
-5. History
-----------
-
-v2.00 (2005.10.18)
-- Turned FFTReal class into template (data type as parameter)
-- Added FFTRealFixLen
-- Trigonometric tables are size-limited in order to preserve cache memory;
-over a given size, sin/cos functions are computed on the fly.
-- Better test bench for accuracy and speed
-
-v1.03 (2001.06.15)
-- Thanks to Frederic Vanmol for the Pascal port (works with Delphi).
-- Documentation improvement
-
-v1.02 (2001.03.25)
-- sqrt() is now precomputed when the object FFTReal is constructed, resulting
-in speed impovement for small size FFT.
-
-v1.01 (2000)
-- Small modifications, I don't remember what.
-
-v1.00 (1999.08.14)
-- First version released
-
diff --git a/examples/spectrum/3rdparty/fftreal/test.cpp b/examples/spectrum/3rdparty/fftreal/test.cpp
deleted file mode 100644
index 7b6ed2ca..00000000
--- a/examples/spectrum/3rdparty/fftreal/test.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/*****************************************************************************
-
- test.cpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (_MSC_VER)
- #pragma warning (4 : 4786) // "identifier was truncated to '255' characters in the debug information"
- #pragma warning (4 : 4800) // "forcing value to bool 'true' or 'false' (performance warning)"
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-#include "test_settings.h"
-#include "TestHelperFixLen.h"
-#include "TestHelperNormal.h"
-
-#if defined (_MSC_VER)
-#include <crtdbg.h>
-#include <new.h>
-#endif // _MSC_VER
-
-#include <new>
-
-#include <cassert>
-#include <cstdio>
-
-
-
-#define TEST_
-
-
-/*\\\ FUNCTIONS \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-static int TEST_perform_test_accuracy_all ();
-static int TEST_perform_test_speed_all ();
-
-static void TEST_prog_init ();
-static void TEST_prog_end ();
-
-
-
-int main (int argc, char *argv [])
-{
- using namespace std;
-
- int ret_val = 0;
-
- TEST_prog_init ();
-
- try
- {
- if (ret_val == 0)
- {
- ret_val = TEST_perform_test_accuracy_all ();
- }
-
- if (ret_val == 0)
- {
- ret_val = TEST_perform_test_speed_all ();
- }
- }
-
- catch (std::exception &e)
- {
- printf ("\n*** main(): Exception (std::exception) : %s\n", e.what ());
- ret_val = -1;
- }
-
- catch (...)
- {
- printf ("\n*** main(): Undefined exception\n");
- ret_val = -1;
- }
-
- TEST_prog_end ();
-
- return (ret_val);
-}
-
-
-
-int TEST_perform_test_accuracy_all ()
-{
- int ret_val = 0;
-
- TestHelperNormal <float >::perform_test_accuracy (ret_val);
- TestHelperNormal <double>::perform_test_accuracy (ret_val);
-
- TestHelperFixLen < 1>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 2>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 3>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 4>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 7>::perform_test_accuracy (ret_val);
- TestHelperFixLen < 8>::perform_test_accuracy (ret_val);
- TestHelperFixLen <10>::perform_test_accuracy (ret_val);
- TestHelperFixLen <12>::perform_test_accuracy (ret_val);
- TestHelperFixLen <13>::perform_test_accuracy (ret_val);
-
- return (ret_val);
-}
-
-
-
-int TEST_perform_test_speed_all ()
-{
- int ret_val = 0;
-
-#if defined (test_settings_SPEED_TEST_ENABLED)
-
- TestHelperNormal <float >::perform_test_speed (ret_val);
- TestHelperNormal <double>::perform_test_speed (ret_val);
-
- TestHelperFixLen < 1>::perform_test_speed (ret_val);
- TestHelperFixLen < 2>::perform_test_speed (ret_val);
- TestHelperFixLen < 3>::perform_test_speed (ret_val);
- TestHelperFixLen < 4>::perform_test_speed (ret_val);
- TestHelperFixLen < 7>::perform_test_speed (ret_val);
- TestHelperFixLen < 8>::perform_test_speed (ret_val);
- TestHelperFixLen <10>::perform_test_speed (ret_val);
- TestHelperFixLen <12>::perform_test_speed (ret_val);
- TestHelperFixLen <14>::perform_test_speed (ret_val);
- TestHelperFixLen <16>::perform_test_speed (ret_val);
- TestHelperFixLen <20>::perform_test_speed (ret_val);
-
-#endif
-
- return (ret_val);
-}
-
-
-
-#if defined (_MSC_VER)
-static int __cdecl TEST_new_handler_cb (size_t dummy)
-{
- throw std::bad_alloc ();
- return (0);
-}
-#endif // _MSC_VER
-
-
-
-#if defined (_MSC_VER) && ! defined (NDEBUG)
-static int __cdecl TEST_debug_alloc_hook_cb (int alloc_type, void *user_data_ptr, size_t size, int block_type, long request_nbr, const unsigned char *filename_0, int line_nbr)
-{
- if (block_type != _CRT_BLOCK) // Ignore CRT blocks to prevent infinite recursion
- {
- switch (alloc_type)
- {
- case _HOOK_ALLOC:
- case _HOOK_REALLOC:
- case _HOOK_FREE:
-
- // Put some debug code here
-
- break;
-
- default:
- assert (false); // Undefined allocation type
- break;
- }
- }
-
- return (1);
-}
-#endif
-
-
-
-#if defined (_MSC_VER) && ! defined (NDEBUG)
-static int __cdecl TEST_debug_report_hook_cb (int report_type, char *user_msg_0, int *ret_val_ptr)
-{
- *ret_val_ptr = 0; // 1 to override the CRT default reporting mode
-
- switch (report_type)
- {
- case _CRT_WARN:
- case _CRT_ERROR:
- case _CRT_ASSERT:
-
-// Put some debug code here
-
- break;
- }
-
- return (*ret_val_ptr);
-}
-#endif
-
-
-
-static void TEST_prog_init ()
-{
-#if defined (_MSC_VER)
- ::_set_new_handler (::TEST_new_handler_cb);
-#endif // _MSC_VER
-
-#if defined (_MSC_VER) && ! defined (NDEBUG)
- {
- const int mode = (1 * _CRTDBG_MODE_DEBUG)
- | (1 * _CRTDBG_MODE_WNDW);
- ::_CrtSetReportMode (_CRT_WARN, mode);
- ::_CrtSetReportMode (_CRT_ERROR, mode);
- ::_CrtSetReportMode (_CRT_ASSERT, mode);
-
- const int old_flags = ::_CrtSetDbgFlag (_CRTDBG_REPORT_FLAG);
- ::_CrtSetDbgFlag ( old_flags
- | (1 * _CRTDBG_LEAK_CHECK_DF)
- | (1 * _CRTDBG_CHECK_ALWAYS_DF));
- ::_CrtSetBreakAlloc (-1); // Specify here a memory bloc number
- ::_CrtSetAllocHook (TEST_debug_alloc_hook_cb);
- ::_CrtSetReportHook (TEST_debug_report_hook_cb);
-
- // Speed up I/O but breaks C stdio compatibility
-// std::cout.sync_with_stdio (false);
-// std::cin.sync_with_stdio (false);
-// std::cerr.sync_with_stdio (false);
-// std::clog.sync_with_stdio (false);
- }
-#endif // _MSC_VER, NDEBUG
-}
-
-
-
-static void TEST_prog_end ()
-{
-#if defined (_MSC_VER) && ! defined (NDEBUG)
- {
- const int mode = (1 * _CRTDBG_MODE_DEBUG)
- | (0 * _CRTDBG_MODE_WNDW);
- ::_CrtSetReportMode (_CRT_WARN, mode);
- ::_CrtSetReportMode (_CRT_ERROR, mode);
- ::_CrtSetReportMode (_CRT_ASSERT, mode);
-
- ::_CrtMemState mem_state;
- ::_CrtMemCheckpoint (&mem_state);
- ::_CrtMemDumpStatistics (&mem_state);
- }
-#endif // _MSC_VER, NDEBUG
-}
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/test_fnc.h b/examples/spectrum/3rdparty/fftreal/test_fnc.h
deleted file mode 100644
index 26221566..00000000
--- a/examples/spectrum/3rdparty/fftreal/test_fnc.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*****************************************************************************
-
- test_fnc.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (test_fnc_HEADER_INCLUDED)
-#define test_fnc_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-inline T limit (const T &x, const T &inf, const T &sup);
-
-
-
-#include "test_fnc.hpp"
-
-
-
-#endif // test_fnc_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/test_fnc.hpp b/examples/spectrum/3rdparty/fftreal/test_fnc.hpp
deleted file mode 100644
index 4b5f9f59..00000000
--- a/examples/spectrum/3rdparty/fftreal/test_fnc.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*****************************************************************************
-
- test_fnc.hpp
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if defined (test_fnc_CURRENT_CODEHEADER)
- #error Recursive inclusion of test_fnc code header.
-#endif
-#define test_fnc_CURRENT_CODEHEADER
-
-#if ! defined (test_fnc_CODEHEADER_INCLUDED)
-#define test_fnc_CODEHEADER_INCLUDED
-
-
-
-/*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
-
-
-
-template <class T>
-T limit (const T &x, const T &inf, const T &sup)
-{
- assert (! (sup < inf));
-
- return ((x < inf) ? inf : ((sup < x) ? sup : x));
-}
-
-
-
-#endif // test_fnc_CODEHEADER_INCLUDED
-
-#undef test_fnc_CURRENT_CODEHEADER
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/test_settings.h b/examples/spectrum/3rdparty/fftreal/test_settings.h
deleted file mode 100644
index b893afc8..00000000
--- a/examples/spectrum/3rdparty/fftreal/test_settings.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*****************************************************************************
-
- test_settings.h
- Copyright (c) 2005 Laurent de Soras
-
---- Legal stuff ---
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-*Tab=3***********************************************************************/
-
-
-
-#if ! defined (test_settings_HEADER_INCLUDED)
-#define test_settings_HEADER_INCLUDED
-
-#if defined (_MSC_VER)
- #pragma once
- #pragma warning (4 : 4250) // "Inherits via dominance."
-#endif
-
-
-
-// #undef this label to avoid speed test compilation.
-#define test_settings_SPEED_TEST_ENABLED
-
-
-
-#endif // test_settings_HEADER_INCLUDED
-
-
-
-/*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
diff --git a/examples/spectrum/3rdparty/fftreal/testapp.dpr b/examples/spectrum/3rdparty/fftreal/testapp.dpr
deleted file mode 100644
index 54f2eb99..00000000
--- a/examples/spectrum/3rdparty/fftreal/testapp.dpr
+++ /dev/null
@@ -1,150 +0,0 @@
-program testapp;
-{$APPTYPE CONSOLE}
-uses
- SysUtils,
- fftreal in 'fftreal.pas',
- Math,
- Windows;
-
-var
- nbr_points : longint;
- x, f : pflt_array;
- fft : TFFTReal;
- i : longint;
- PI : double;
- areal, img : double;
- f_abs : double;
- buffer_size : longint;
- nbr_tests : longint;
- time0, time1, time2 : int64;
- timereso : int64;
- offset : longint;
- t0, t1 : double;
- nbr_s_chn : longint;
- tempp1, tempp2 : pflt_array;
-
-begin
- (*______________________________________________
- *
- * Exactness test
- *______________________________________________
- *)
-
- WriteLn('Accuracy test:');
- WriteLn;
-
- nbr_points := 16; // Power of 2
- GetMem(x, nbr_points * sizeof_flt);
- GetMem(f, nbr_points * sizeof_flt);
- fft := TFFTReal.Create(nbr_points); // FFT object initialized here
-
- // Test signal
- PI := ArcTan(1) * 4;
- for i := 0 to nbr_points-1 do
- begin
- x^[i] := -1 + sin (3*2*PI*i/nbr_points)
- + cos (5*2*PI*i/nbr_points) * 2
- - sin (7*2*PI*i/nbr_points) * 3
- + cos (8*2*PI*i/nbr_points) * 5;
- end;
-
- // Compute FFT and IFFT
- fft.do_fft(f, x);
- fft.do_ifft(f, x);
- fft.rescale(x);
-
- // Display the result
- WriteLn('FFT:');
- for i := 0 to nbr_points div 2 do
- begin
- areal := f^[i];
- if (i > 0) and (i < nbr_points div 2) then
- img := f^[i + nbr_points div 2]
- else
- img := 0;
-
- f_abs := Sqrt(areal * areal + img * img);
- WriteLn(Format('%5d: %12.6f %12.6f (%12.6f)', [i, areal, img, f_abs]));
- end;
-
- WriteLn;
- WriteLn('IFFT:');
- for i := 0 to nbr_points-1 do
- WriteLn(Format('%5d: %f', [i, x^[i]]));
-
- WriteLn;
-
- FreeMem(x);
- FreeMem(f);
- fft.Free;
-
-
- (*______________________________________________
- *
- * Speed test
- *______________________________________________
- *)
-
- WriteLn('Speed test:');
- WriteLn('Please wait...');
- WriteLn;
-
- nbr_points := 1024; // Power of 2
- buffer_size := 256*nbr_points; // Number of flt_t (float or double)
- nbr_tests := 10000;
-
- assert(nbr_points <= buffer_size);
- GetMem(x, buffer_size * sizeof_flt);
- GetMem(f, buffer_size * sizeof_flt);
- fft := TFFTReal.Create(nbr_points); // FFT object initialized here
-
- // Test signal: noise
- for i := 0 to nbr_points-1 do
- x^[i] := Random($7fff) - ($7fff shr 1);
-
- // timing
- QueryPerformanceFrequency(timereso);
- QueryPerformanceCounter(time0);
-
- for i := 0 to nbr_tests-1 do
- begin
- offset := (i * nbr_points) and (buffer_size - 1);
- tempp1 := f;
- inc(tempp1, offset);
- tempp2 := x;
- inc(tempp2, offset);
- fft.do_fft(tempp1, tempp2);
- end;
-
- QueryPerformanceCounter(time1);
-
- for i := 0 to nbr_tests-1 do
- begin
- offset := (i * nbr_points) and (buffer_size - 1);
- tempp1 := f;
- inc(tempp1, offset);
- tempp2 := x;
- inc(tempp2, offset);
- fft.do_ifft(tempp1, tempp2);
- fft.rescale(x);
- end;
-
- QueryPerformanceCounter(time2);
-
- t0 := ((time1-time0) / timereso) / nbr_tests;
- t1 := ((time2-time1) / timereso) / nbr_tests;
-
- WriteLn(Format('%d-points FFT : %.0f us.', [nbr_points, t0 * 1000000]));
- WriteLn(Format('%d-points IFFT + scaling: %.0f us.', [nbr_points, t1 * 1000000]));
-
- nbr_s_chn := Floor(nbr_points / ((t0 + t1) * 44100 * 2));
- WriteLn(Format('Peak performance: FFT+IFFT on %d mono channels at 44.1 KHz (with overlapping)', [nbr_s_chn]));
- WriteLn;
-
- FreeMem(x);
- FreeMem(f);
- fft.Free;
-
- WriteLn('Press [Return] key to terminate...');
- ReadLn;
-end.
diff --git a/examples/spectrum/README.txt b/examples/spectrum/README.txt
deleted file mode 100644
index c39d4a70..00000000
--- a/examples/spectrum/README.txt
+++ /dev/null
@@ -1,103 +0,0 @@
-Spectrum analyser demo app
-==========================
-
-Introduction
-------------
-
-This application is a demo which uses the QtMultimedia APIs to capture and play back PCM audio. While either recording or playback is ongoing, the application performs real-time level and frequency spectrum analysis, displaying the results in its main window.
-
-
-Acknowledgments
----------------
-
-The application uses the FFTReal v2.00 library by Laurent de Soras to perform frequency analysis of the audio signal. For further information, see the project home page:
- http://ldesoras.free.fr/prod.html
-
-
-Quick start
------------
-
-Play generated tone
-1. Select 'Play generated tone' from the mode menu
-2. Ensure that the 'Frequency sweep' box is checked
-3. Press 'OK'
-4. Press the play button
-You should hear a rising tone, and see progressively higher frequencies indicated by the spectrograph.
-
-Record and playback
-1. Select 'Record and play back audio' from the mode menu
-2. Press the record button, and speak into the microphone
-3. Wait until the buffer is full (shown as a full blue bar in the top widget)
-4. Press play, and wait until playback of the buffer is complete
-
-Play file
-1. Select 'Play file' from the mode menu
-2. Select a WAV file
-3. Press the play button
-You should hear the first few seconds of the file being played. The waveform, spectrograph and level meter should be updated as the file is played.
-
-
-Things to play with
--------------------
-
-Try repeating the 'Play generated tone' sequence using different window functions. These can be selected from the settings dialog - launch it by pressing the spanner icon. The window function is applied to the audio signal before performing the frequency analysis; different windows should have a visible effect on the resulting frequency spectrum.
-
-Try clicking on one of the spectrograph bars while the tone is being played. The frequency range for that bar will be displayed at the top of the application window.
-
-
-Troubleshooting
----------------
-
-If either recording or playback do not work, you may need to select a different input / output audio device. This can be done in the settings dialog - launch it by pressing the spanner icon.
-
-If that doesn't work, there may be a problem either in the application or in Qt. Report a bug in the usual way.
-
-
-Application interface
----------------------
-
-The main window of the application contains the following widgets, starting at the top:
-
-Message box
-This shows various messages during execution, such as the current audio format.
-
-Progress bar / waveform display
-- While recording or playback is ongoing, the audio waveform is displayed, sliding from right to left.
-- Superimposed on the waveform, the amount of data currently in the buffer is showed as a blue bar. When recording, this blue bar fills up from left to right; when playing, the bar gets consumed from left to right.
-- A green window shows which part of the buffer has most recently been analysed. This window should be close to the 'leading edge' of recording or playback, i.e. the most recently recorded / played data, although it will lag slightly depending on the performance of the machine on which the application is running.
-
-Frequency spectrograph (on the left)
-The spectrograph shows 10 bars, each representing a frequency range. The frequency range of each bar is displayed in the message box when the bar is clicked. The height of the bar shows the maximum amplitude of freqencies within its range.
-
-Level meter (on the right)
-The current peak audio level is shown as a pink bar; the current RMS level is shown as a red bar. The 'high water mark' during a recent period is shown as a thin red line.
-
-Button panel
-- The mode menu allows switching between the three operation modes - 'Play generated tone', 'Record and play back' and 'Play file'.
-- The record button starts or resumes audio capture from the current input device.
-- The pause button suspends either capture or recording.
-- The play button starts or resumes audio playback to the current output device.
-- The settings button launches the settings dialog.
-
-
-Hacking
--------
-
-If you want to hack the application, here are some pointers to get started.
-
-The spectrum.pri file contains several macros which you can enable by uncommenting:
-- LOG_FOO Enable logging from class Foo via qDebug()
-- DUMP_FOO Dump data from class Foo to the file system
- e.g. DUMP_SPECTRUMANALYSER writes files containing the raw FFT input and output.
- Be aware that this can generate a *lot* of data and may slow the app down considerably.
-- DISABLE_FOO Disable specified functionality
-
-If you don't like the combination of the waveform and progress bar in a single widget, separate them by commenting out SUPERIMPOSE_PROGRESS_ON_WAVEFORM.
-
-The spectrum.h file defines a number of parameters which can be played with. These control things such as the number of audio samples analysed per FFT calculation, the range and number of bands displayed by the spectrograph, and so on.
-
-The part of the application which interacts with QtMultimedia is in the Engine class.
-
-Some ideas for enhancements to the app are listed in TODO.txt. Feel free to start work on any of them :)
-
-
diff --git a/examples/spectrum/doc/images/spectrum-example.png b/examples/spectrum/doc/images/spectrum-example.png
deleted file mode 100644
index 2a703948..00000000
--- a/examples/spectrum/doc/images/spectrum-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/spectrum/doc/src/spectrum.qdoc b/examples/spectrum/doc/src/spectrum.qdoc
deleted file mode 100644
index 612c31cd..00000000
--- a/examples/spectrum/doc/src/spectrum.qdoc
+++ /dev/null
@@ -1,28 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-/*!
- \example spectrum
- \title Spectrum Example
-
- The spectrum example shows how feed dynamic data to a graph using Q3DBars.
-
- \image spectrum-example.png
-
- TODO
-*/
diff --git a/examples/spectrum/spectrum.pri b/examples/spectrum/spectrum.pri
deleted file mode 100644
index 31a3767c..00000000
--- a/examples/spectrum/spectrum.pri
+++ /dev/null
@@ -1,18 +0,0 @@
-# The following macros allow certain features and debugging output
-# to be disabled / enabled at compile time.
-
-# Debug output from spectrum calculation
-#DEFINES += LOG_SPECTRUMANALYSER
-
-# Debug output from engine
-#DEFINES += LOG_ENGINE
-
-# Disable level calculation
-DEFINES += DISABLE_LEVEL
-
-# Perform spectrum analysis calculation in a separate thread
-DEFINES += SPECTRUM_ANALYSER_SEPARATE_THREAD
-
-# Suppress warnings about strncpy potentially being unsafe, emitted by MSVC
-win32: DEFINES += _CRT_SECURE_NO_WARNINGS
-
diff --git a/examples/spectrum/spectrum.pro b/examples/spectrum/spectrum.pro
deleted file mode 100644
index 9a8d45ae..00000000
--- a/examples/spectrum/spectrum.pro
+++ /dev/null
@@ -1,13 +0,0 @@
-qtHaveModule(multimedia) {
-include(spectrum.pri)
-
-TEMPLATE = subdirs
-
-# Ensure that library is built before application
-CONFIG += ordered
-
-SUBDIRS += 3rdparty/fftreal
-SUBDIRS += spectrumapp
-
-TARGET = spectrum
-}
diff --git a/examples/spectrum/spectrumapp/engine.cpp b/examples/spectrum/spectrumapp/engine.cpp
deleted file mode 100644
index c23a4f78..00000000
--- a/examples/spectrum/spectrumapp/engine.cpp
+++ /dev/null
@@ -1,613 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "engine.h"
-#include "utils.h"
-
-#include <math.h>
-
-#include <QAudioInput>
-#include <QAudioOutput>
-#include <QCoreApplication>
-#include <QDebug>
-#include <QFile>
-#include <QMetaObject>
-#include <QSet>
-#include <QThread>
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-const qint64 BufferDurationUs = 10 * 1000000;
-const int NotifyIntervalMs = 100;
-
-// Size of the level calculation window in microseconds
-const int LevelWindowUs = 0.1 * 1000000;
-
-//-----------------------------------------------------------------------------
-// Constructor and destructor
-//-----------------------------------------------------------------------------
-
-Engine::Engine(QObject *parent)
- : QObject(parent),
- m_mode(QAudio::AudioInput),
- m_state(QAudio::StoppedState),
- m_generateTone(false),
- m_file(0),
- m_analysisFile(0),
- m_availableAudioInputDevices
- (QAudioDeviceInfo::availableDevices(QAudio::AudioInput)),
- m_audioInputDevice(QAudioDeviceInfo::defaultInputDevice()),
- m_audioInput(0),
- m_audioInputIODevice(0),
- m_recordPosition(0),
- m_availableAudioOutputDevices
- (QAudioDeviceInfo::availableDevices(QAudio::AudioOutput)),
- m_audioOutputDevice(QAudioDeviceInfo::defaultOutputDevice()),
- m_audioOutput(0),
- m_playPosition(0),
- m_bufferPosition(0),
- m_bufferLength(0),
- m_dataLength(0),
- m_levelBufferLength(0),
- m_rmsLevel(0.0),
- m_peakLevel(0.0),
- m_spectrumBufferLength(0),
- m_spectrumAnalyser(),
- m_spectrumPosition(0),
- m_count(0)
-{
- qRegisterMetaType<FrequencySpectrum>("FrequencySpectrum");
- qRegisterMetaType<WindowFunction>("WindowFunction");
- CHECKED_CONNECT(&m_spectrumAnalyser,
- SIGNAL(spectrumChanged(FrequencySpectrum)),
- this,
- SLOT(spectrumChanged(FrequencySpectrum)));
-
- initialize();
-}
-
-Engine::~Engine()
-{
-
-}
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-bool Engine::loadFile(const QString &fileName)
-{
- reset();
- bool result = false;
- Q_ASSERT(!m_generateTone);
- Q_ASSERT(!m_file);
- Q_ASSERT(!fileName.isEmpty());
- m_file = new WavFile(this);
- if (m_file->open(fileName)) {
- if (isPCMS16LE(m_file->fileFormat())) {
- result = initialize();
- } else {
- ENGINE_DEBUG << "Audio format not supported" << formatToString(m_file->fileFormat());
- }
- } else {
- ENGINE_DEBUG << "Could not open file" << fileName;
- }
- if (result) {
- m_analysisFile = new WavFile(this);
- m_analysisFile->open(fileName);
- }
- return result;
-}
-
-qint64 Engine::bufferLength() const
-{
- return m_file ? m_file->size() : m_bufferLength;
-}
-
-void Engine::setWindowFunction(WindowFunction type)
-{
- m_spectrumAnalyser.setWindowFunction(type);
-}
-
-
-//-----------------------------------------------------------------------------
-// Public slots
-//-----------------------------------------------------------------------------
-
-void Engine::startRecording()
-{
- if (m_audioInput) {
- if (QAudio::AudioInput == m_mode &&
- QAudio::SuspendedState == m_state) {
- m_audioInput->resume();
- } else {
- m_spectrumAnalyser.cancelCalculation();
- changedSpectrum(0, 0, FrequencySpectrum());
-
- m_buffer.fill(0);
- setRecordPosition(0, true);
- stopPlayback();
- m_mode = QAudio::AudioInput;
- CHECKED_CONNECT(m_audioInput, SIGNAL(stateChanged(QAudio::State)),
- this, SLOT(audioStateChanged(QAudio::State)));
- CHECKED_CONNECT(m_audioInput, SIGNAL(notify()),
- this, SLOT(audioNotify()));
- m_count = 0;
- m_dataLength = 0;
- emit dataLengthChanged(0);
- m_audioInputIODevice = m_audioInput->start();
- CHECKED_CONNECT(m_audioInputIODevice, SIGNAL(readyRead()),
- this, SLOT(audioDataReady()));
- }
- }
-}
-
-void Engine::startPlayback()
-{
- if (m_audioOutput) {
- if (QAudio::AudioOutput == m_mode &&
- QAudio::SuspendedState == m_state) {
-#ifdef Q_OS_WIN
- // The Windows backend seems to internally go back into ActiveState
- // while still returning SuspendedState, so to ensure that it doesn't
- // ignore the resume() call, we first re-suspend
- m_audioOutput->suspend();
-#endif
- m_audioOutput->resume();
- } else {
- m_spectrumAnalyser.cancelCalculation();
- changedSpectrum(0, 0, FrequencySpectrum());
- setPlayPosition(0, true);
- stopRecording();
- m_mode = QAudio::AudioOutput;
- CHECKED_CONNECT(m_audioOutput, SIGNAL(stateChanged(QAudio::State)),
- this, SLOT(audioStateChanged(QAudio::State)));
- CHECKED_CONNECT(m_audioOutput, SIGNAL(notify()),
- this, SLOT(audioNotify()));
- m_count = 0;
- if (m_file) {
- m_file->seek(0);
- m_bufferPosition = 0;
- m_dataLength = 0;
- m_audioOutput->start(m_file);
- } else {
- m_audioOutputIODevice.close();
- m_audioOutputIODevice.setBuffer(&m_buffer);
- m_audioOutputIODevice.open(QIODevice::ReadOnly);
- m_audioOutput->start(&m_audioOutputIODevice);
- }
- }
- }
-}
-
-void Engine::suspend()
-{
- if (QAudio::ActiveState == m_state ||
- QAudio::IdleState == m_state) {
- switch (m_mode) {
- case QAudio::AudioInput:
- m_audioInput->suspend();
- break;
- case QAudio::AudioOutput:
- m_audioOutput->suspend();
- break;
- }
- }
-}
-
-void Engine::setAudioInputDevice(const QAudioDeviceInfo &device)
-{
- if (device.deviceName() != m_audioInputDevice.deviceName()) {
- m_audioInputDevice = device;
- initialize();
- }
-}
-
-void Engine::setAudioOutputDevice(const QAudioDeviceInfo &device)
-{
- if (device.deviceName() != m_audioOutputDevice.deviceName()) {
- m_audioOutputDevice = device;
- initialize();
- }
-}
-
-
-//-----------------------------------------------------------------------------
-// Private slots
-//-----------------------------------------------------------------------------
-
-void Engine::audioNotify()
-{
- switch (m_mode) {
- case QAudio::AudioInput: {
- const qint64 recordPosition = qMin(m_bufferLength, audioLength(m_format, m_audioInput->processedUSecs()));
- setRecordPosition(recordPosition);
- const qint64 levelPosition = m_dataLength - m_levelBufferLength;
- if (levelPosition >= 0)
- calculateLevel(levelPosition, m_levelBufferLength);
- if (m_dataLength >= m_spectrumBufferLength) {
- const qint64 spectrumPosition = m_dataLength - m_spectrumBufferLength;
- calculateSpectrum(spectrumPosition);
- }
- emit bufferChanged(0, m_dataLength, m_buffer);
- }
- break;
- case QAudio::AudioOutput: {
- const qint64 playPosition = audioLength(m_format, m_audioOutput->processedUSecs());
- setPlayPosition(qMin(bufferLength(), playPosition));
- const qint64 levelPosition = playPosition - m_levelBufferLength;
- const qint64 spectrumPosition = playPosition - m_spectrumBufferLength;
- if (m_file) {
- if (levelPosition > m_bufferPosition ||
- spectrumPosition > m_bufferPosition ||
- qMax(m_levelBufferLength, m_spectrumBufferLength) > m_dataLength) {
- m_bufferPosition = 0;
- m_dataLength = 0;
- // Data needs to be read into m_buffer in order to be analysed
- const qint64 readPos = qMax(qint64(0), qMin(levelPosition, spectrumPosition));
- const qint64 readEnd = qMin(m_analysisFile->size(), qMax(levelPosition + m_levelBufferLength, spectrumPosition + m_spectrumBufferLength));
- const qint64 readLen = readEnd - readPos + audioLength(m_format, WaveformWindowDuration);
- ENGINE_DEBUG << "Engine::audioNotify [1]"
- << "analysisFileSize" << m_analysisFile->size()
- << "readPos" << readPos
- << "readLen" << readLen;
- if (m_analysisFile->seek(readPos + m_analysisFile->headerLength())) {
- m_buffer.resize(readLen);
- m_bufferPosition = readPos;
- m_dataLength = m_analysisFile->read(m_buffer.data(), readLen);
- ENGINE_DEBUG << "Engine::audioNotify [2]" << "bufferPosition" << m_bufferPosition << "dataLength" << m_dataLength;
- } else {
- ENGINE_DEBUG << "Engine::audioNotify [2]" << "file seek error";
- }
- emit bufferChanged(m_bufferPosition, m_dataLength, m_buffer);
- }
- } else {
- if (playPosition >= m_dataLength)
- stopPlayback();
- }
- if (levelPosition >= 0 && levelPosition + m_levelBufferLength < m_bufferPosition + m_dataLength)
- calculateLevel(levelPosition, m_levelBufferLength);
- if (spectrumPosition >= 0 && spectrumPosition + m_spectrumBufferLength < m_bufferPosition + m_dataLength)
- calculateSpectrum(spectrumPosition);
- }
- break;
- }
-}
-
-void Engine::audioStateChanged(QAudio::State state)
-{
- ENGINE_DEBUG << "Engine::audioStateChanged from" << m_state
- << "to" << state;
-
- if (QAudio::IdleState == state && m_file && m_file->pos() == m_file->size()) {
- stopPlayback();
- } else {
- if (QAudio::StoppedState == state) {
- // Check error
- QAudio::Error error = QAudio::NoError;
- switch (m_mode) {
- case QAudio::AudioInput:
- error = m_audioInput->error();
- break;
- case QAudio::AudioOutput:
- error = m_audioOutput->error();
- break;
- }
- if (QAudio::NoError != error) {
- reset();
- return;
- }
- }
- setState(state);
- }
-}
-
-void Engine::audioDataReady()
-{
- Q_ASSERT(0 == m_bufferPosition);
- const qint64 bytesReady = m_audioInput->bytesReady();
- const qint64 bytesSpace = m_buffer.size() - m_dataLength;
- const qint64 bytesToRead = qMin(bytesReady, bytesSpace);
-
- const qint64 bytesRead = m_audioInputIODevice->read(
- m_buffer.data() + m_dataLength,
- bytesToRead);
-
- if (bytesRead) {
- m_dataLength += bytesRead;
- emit dataLengthChanged(dataLength());
- }
-
- if (m_buffer.size() == m_dataLength)
- stopRecording();
-}
-
-void Engine::spectrumChanged(const FrequencySpectrum &spectrum)
-{
- ENGINE_DEBUG << "Engine::spectrumChanged" << "pos" << m_spectrumPosition;
- emit changedSpectrum(m_spectrumPosition, m_spectrumBufferLength, spectrum);
-}
-
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-void Engine::resetAudioDevices()
-{
- delete m_audioInput;
- m_audioInput = 0;
- m_audioInputIODevice = 0;
- setRecordPosition(0);
- delete m_audioOutput;
- m_audioOutput = 0;
- setPlayPosition(0);
- m_spectrumPosition = 0;
- setLevel(0.0, 0.0, 0);
-}
-
-void Engine::reset()
-{
- stopRecording();
- stopPlayback();
- setState(QAudio::AudioInput, QAudio::StoppedState);
- setFormat(QAudioFormat());
- m_generateTone = false;
- delete m_file;
- m_file = 0;
- delete m_analysisFile;
- m_analysisFile = 0;
- m_buffer.clear();
- m_bufferPosition = 0;
- m_bufferLength = 0;
- m_dataLength = 0;
- emit dataLengthChanged(0);
- resetAudioDevices();
-}
-
-bool Engine::initialize()
-{
- bool result = false;
-
- QAudioFormat format = m_format;
-
- if (selectFormat()) {
- resetAudioDevices();
- if (m_file) {
- emit bufferLengthChanged(bufferLength());
- emit dataLengthChanged(dataLength());
- emit bufferChanged(0, 0, m_buffer);
- setRecordPosition(bufferLength());
- result = true;
- }
- m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this);
- m_audioOutput->setNotifyInterval(NotifyIntervalMs);
- } else {
- if (m_file)
- ENGINE_DEBUG << "Audio format not supported" << formatToString(m_format);
- else
- ENGINE_DEBUG << "No common input / output format found";
- }
-
- ENGINE_DEBUG << "Engine::initialize" << "m_bufferLength" << m_bufferLength;
- ENGINE_DEBUG << "Engine::initialize" << "m_dataLength" << m_dataLength;
- ENGINE_DEBUG << "Engine::initialize" << "format" << m_format;
-
- return result;
-}
-
-bool Engine::selectFormat()
-{
- bool foundSupportedFormat = false;
-
- if (m_file || QAudioFormat() != m_format) {
- QAudioFormat format = m_format;
- if (m_file)
- // Header is read from the WAV file; just need to check whether
- // it is supported by the audio output device
- format = m_file->fileFormat();
- if (m_audioOutputDevice.isFormatSupported(format)) {
- setFormat(format);
- foundSupportedFormat = true;
- }
- } else {
-
- QList<int> sampleRatesList;
-#ifdef Q_OS_WIN
- // The Windows audio backend does not correctly report format support
- // (see QTBUG-9100). Furthermore, although the audio subsystem captures
- // at 11025Hz, the resulting audio is corrupted.
- sampleRatesList += 8000;
-#endif
-
- if (!m_generateTone)
- sampleRatesList += m_audioInputDevice.supportedSampleRates();
-
- sampleRatesList += m_audioOutputDevice.supportedSampleRates();
- sampleRatesList = sampleRatesList.toSet().toList(); // remove duplicates
- qSort(sampleRatesList);
- ENGINE_DEBUG << "Engine::initialize frequenciesList" << sampleRatesList;
-
- QList<int> channelsList;
- channelsList += m_audioInputDevice.supportedChannelCounts();
- channelsList += m_audioOutputDevice.supportedChannelCounts();
- channelsList = channelsList.toSet().toList();
- qSort(channelsList);
- ENGINE_DEBUG << "Engine::initialize channelsList" << channelsList;
-
- QAudioFormat format;
- format.setByteOrder(QAudioFormat::LittleEndian);
- format.setCodec("audio/pcm");
- format.setSampleSize(16);
- format.setSampleType(QAudioFormat::SignedInt);
- int sampleRate, channels;
- foreach (sampleRate, sampleRatesList) {
- if (foundSupportedFormat)
- break;
- format.setSampleRate(sampleRate);
- foreach (channels, channelsList) {
- format.setChannelCount(channels);
- const bool inputSupport = m_generateTone ||
- m_audioInputDevice.isFormatSupported(format);
- const bool outputSupport = m_audioOutputDevice.isFormatSupported(format);
- ENGINE_DEBUG << "Engine::initialize checking " << format
- << "input" << inputSupport
- << "output" << outputSupport;
- if (inputSupport && outputSupport) {
- foundSupportedFormat = true;
- break;
- }
- }
- }
-
- if (!foundSupportedFormat)
- format = QAudioFormat();
-
- setFormat(format);
- }
-
- return foundSupportedFormat;
-}
-
-void Engine::stopRecording()
-{
- if (m_audioInput) {
- m_audioInput->stop();
- QCoreApplication::instance()->processEvents();
- m_audioInput->disconnect();
- }
- m_audioInputIODevice = 0;
-}
-
-void Engine::stopPlayback()
-{
- if (m_audioOutput) {
- m_audioOutput->stop();
- QCoreApplication::instance()->processEvents();
- m_audioOutput->disconnect();
- setPlayPosition(0);
- }
-}
-
-void Engine::setState(QAudio::State state)
-{
- const bool changed = (m_state != state);
- m_state = state;
- if (changed)
- emit stateChanged(m_mode, m_state);
-}
-
-void Engine::setState(QAudio::Mode mode, QAudio::State state)
-{
- const bool changed = (m_mode != mode || m_state != state);
- m_mode = mode;
- m_state = state;
- if (changed)
- emit stateChanged(m_mode, m_state);
-}
-
-void Engine::setRecordPosition(qint64 position, bool forceEmit)
-{
- const bool changed = (m_recordPosition != position);
- m_recordPosition = position;
- if (changed || forceEmit)
- emit recordPositionChanged(m_recordPosition);
-}
-
-void Engine::setPlayPosition(qint64 position, bool forceEmit)
-{
- const bool changed = (m_playPosition != position);
- m_playPosition = position;
- if (changed || forceEmit)
- emit playPositionChanged(m_playPosition);
-}
-
-void Engine::calculateLevel(qint64 position, qint64 length)
-{
-#ifdef DISABLE_LEVEL
- Q_UNUSED(position)
- Q_UNUSED(length)
-#else
- Q_ASSERT(position + length <= m_bufferPosition + m_dataLength);
-
- qreal peakLevel = 0.0;
-
- qreal sum = 0.0;
- const char *ptr = m_buffer.constData() + position - m_bufferPosition;
- const char *const end = ptr + length;
- while (ptr < end) {
- const qint16 value = *reinterpret_cast<const qint16*>(ptr);
- const qreal fracValue = pcmToReal(value);
- peakLevel = qMax(peakLevel, fracValue);
- sum += fracValue * fracValue;
- ptr += 2;
- }
- const int numSamples = length / 2;
- qreal rmsLevel = sqrt(sum / numSamples);
-
- rmsLevel = qMax(qreal(0.0), rmsLevel);
- rmsLevel = qMin(qreal(1.0), rmsLevel);
- setLevel(rmsLevel, peakLevel, numSamples);
-
- ENGINE_DEBUG << "Engine::calculateLevel" << "pos" << position << "len" << length
- << "rms" << rmsLevel << "peak" << peakLevel;
-#endif
-}
-
-void Engine::calculateSpectrum(qint64 position)
-{
-#ifdef DISABLE_SPECTRUM
- Q_UNUSED(position)
-#else
- Q_ASSERT(position + m_spectrumBufferLength <= m_bufferPosition + m_dataLength);
- Q_ASSERT(0 == m_spectrumBufferLength % 2); // constraint of FFT algorithm
-
- // QThread::currentThread is marked 'for internal use only', but
- // we're only using it for debug output here, so it's probably OK :)
- ENGINE_DEBUG << "Engine::calculateSpectrum" << QThread::currentThread()
- << "count" << m_count << "pos" << position << "len" << m_spectrumBufferLength
- << "spectrumAnalyser.isReady" << m_spectrumAnalyser.isReady();
-
- if (m_spectrumAnalyser.isReady()) {
- m_spectrumBuffer = QByteArray::fromRawData(m_buffer.constData() + position - m_bufferPosition,
- m_spectrumBufferLength);
- m_spectrumPosition = position;
- m_spectrumAnalyser.calculate(m_spectrumBuffer, m_format);
- }
-#endif
-}
-
-void Engine::setFormat(const QAudioFormat &format)
-{
- const bool changed = (format != m_format);
- m_format = format;
- m_levelBufferLength = audioLength(m_format, LevelWindowUs);
- m_spectrumBufferLength = SpectrumLengthSamples *
- (m_format.sampleSize() / 8) * m_format.channelCount();
- if (changed)
- emit formatChanged(m_format);
-}
-
-void Engine::setLevel(qreal rmsLevel, qreal peakLevel, int numSamples)
-{
- m_rmsLevel = rmsLevel;
- m_peakLevel = peakLevel;
- emit levelChanged(m_rmsLevel, m_peakLevel, numSamples);
-}
diff --git a/examples/spectrum/spectrumapp/engine.h b/examples/spectrum/spectrumapp/engine.h
deleted file mode 100644
index cdd8373f..00000000
--- a/examples/spectrum/spectrumapp/engine.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#ifndef ENGINE_H
-#define ENGINE_H
-
-#include "spectrum.h"
-#include "spectrumanalyser.h"
-#include "wavfile.h"
-
-#include <QAudioDeviceInfo>
-#include <QAudioFormat>
-#include <QBuffer>
-#include <QByteArray>
-#include <QDir>
-#include <QObject>
-#include <QVector>
-
-class FrequencySpectrum;
-QT_BEGIN_NAMESPACE
-class QAudioInput;
-class QAudioOutput;
-QT_END_NAMESPACE
-
-/**
- * This class interfaces with the QtMultimedia audio classes, and also with
- * the SpectrumAnalyser class. Its role is to manage the capture and playback
- * of audio data, meanwhile performing real-time analysis of the audio level
- * and frequency spectrum.
- */
-class Engine : public QObject
-{
- Q_OBJECT
-
-public:
- explicit Engine(QObject *parent = 0);
- ~Engine();
-
- const QList<QAudioDeviceInfo> &availableAudioInputDevices() const
- { return m_availableAudioInputDevices; }
-
- const QList<QAudioDeviceInfo> &availableAudioOutputDevices() const
- { return m_availableAudioOutputDevices; }
-
- QAudio::Mode mode() const { return m_mode; }
- QAudio::State state() const { return m_state; }
-
- /**
- * \return Current audio format
- * \note May be QAudioFormat() if engine is not initialized
- */
- const QAudioFormat& format() const { return m_format; }
-
- /**
- * Stop any ongoing recording or playback, and reset to ground state.
- */
- void reset();
-
- /**
- * Load data from WAV file
- */
- bool loadFile(const QString &fileName);
-
- /**
- * Position of the audio input device.
- * \return Position in bytes.
- */
- qint64 recordPosition() const { return m_recordPosition; }
-
- /**
- * RMS level of the most recently processed set of audio samples.
- * \return Level in range (0.0, 1.0)
- */
- qreal rmsLevel() const { return m_rmsLevel; }
-
- /**
- * Peak level of the most recently processed set of audio samples.
- * \return Level in range (0.0, 1.0)
- */
- qreal peakLevel() const { return m_peakLevel; }
-
- /**
- * Position of the audio output device.
- * \return Position in bytes.
- */
- qint64 playPosition() const { return m_playPosition; }
-
- /**
- * Length of the internal engine buffer.
- * \return Buffer length in bytes.
- */
- qint64 bufferLength() const;
-
- /**
- * Amount of data held in the buffer.
- * \return Data length in bytes.
- */
- qint64 dataLength() const { return m_dataLength; }
-
- /**
- * Set window function applied to audio data before spectral analysis.
- */
- void setWindowFunction(WindowFunction type);
-
-public slots:
- void startRecording();
- void startPlayback();
- void suspend();
- void setAudioInputDevice(const QAudioDeviceInfo &device);
- void setAudioOutputDevice(const QAudioDeviceInfo &device);
-
-signals:
- void stateChanged(QAudio::Mode mode, QAudio::State state);
-
- /**
- * Format of audio data has changed
- */
- void formatChanged(const QAudioFormat &format);
-
- /**
- * Length of buffer has changed.
- * \param duration Duration in microseconds
- */
- void bufferLengthChanged(qint64 duration);
-
- /**
- * Amount of data in buffer has changed.
- * \param Length of data in bytes
- */
- void dataLengthChanged(qint64 duration);
-
- /**
- * Position of the audio input device has changed.
- * \param position Position in bytes
- */
- void recordPositionChanged(qint64 position);
-
- /**
- * Position of the audio output device has changed.
- * \param position Position in bytes
- */
- void playPositionChanged(qint64 position);
-
- /**
- * Level changed
- * \param rmsLevel RMS level in range 0.0 - 1.0
- * \param peakLevel Peak level in range 0.0 - 1.0
- * \param numSamples Number of audio samples analyzed
- */
- void levelChanged(qreal rmsLevel, qreal peakLevel, int numSamples);
-
- /**
- * Spectrum has changed.
- * \param position Position of start of window in bytes
- * \param length Length of window in bytes
- * \param spectrum Resulting frequency spectrum
- */
- void changedSpectrum(qint64 position, qint64 length, const FrequencySpectrum &spectrum);
-
- /**
- * Buffer containing audio data has changed.
- * \param position Position of start of buffer in bytes
- * \param buffer Buffer
- */
- void bufferChanged(qint64 position, qint64 length, const QByteArray &buffer);
-
-private slots:
- void audioNotify();
- void audioStateChanged(QAudio::State state);
- void audioDataReady();
- void spectrumChanged(const FrequencySpectrum &spectrum);
-
-private:
- void resetAudioDevices();
- bool initialize();
- bool selectFormat();
- void stopRecording();
- void stopPlayback();
- void setState(QAudio::State state);
- void setState(QAudio::Mode mode, QAudio::State state);
- void setFormat(const QAudioFormat &format);
- void setRecordPosition(qint64 position, bool forceEmit = false);
- void setPlayPosition(qint64 position, bool forceEmit = false);
- void calculateLevel(qint64 position, qint64 length);
- void calculateSpectrum(qint64 position);
- void setLevel(qreal rmsLevel, qreal peakLevel, int numSamples);
-
-private:
- QAudio::Mode m_mode;
- QAudio::State m_state;
-
- bool m_generateTone;
- SweptTone m_tone;
-
- WavFile* m_file;
- // We need a second file handle via which to read data into m_buffer
- // for analysis
- WavFile* m_analysisFile;
-
- QAudioFormat m_format;
-
- const QList<QAudioDeviceInfo> m_availableAudioInputDevices;
- QAudioDeviceInfo m_audioInputDevice;
- QAudioInput* m_audioInput;
- QIODevice* m_audioInputIODevice;
- qint64 m_recordPosition;
-
- const QList<QAudioDeviceInfo> m_availableAudioOutputDevices;
- QAudioDeviceInfo m_audioOutputDevice;
- QAudioOutput* m_audioOutput;
- qint64 m_playPosition;
- QBuffer m_audioOutputIODevice;
-
- QByteArray m_buffer;
- qint64 m_bufferPosition;
- qint64 m_bufferLength;
- qint64 m_dataLength;
-
- int m_levelBufferLength;
- qreal m_rmsLevel;
- qreal m_peakLevel;
-
- int m_spectrumBufferLength;
- QByteArray m_spectrumBuffer;
- SpectrumAnalyser m_spectrumAnalyser;
- qint64 m_spectrumPosition;
-
- int m_count;
-
-};
-
-#endif // ENGINE_H
diff --git a/examples/spectrum/spectrumapp/frequencyspectrum.cpp b/examples/spectrum/spectrumapp/frequencyspectrum.cpp
deleted file mode 100644
index 013d0454..00000000
--- a/examples/spectrum/spectrumapp/frequencyspectrum.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "frequencyspectrum.h"
-
-FrequencySpectrum::FrequencySpectrum(int numPoints)
- : m_elements(numPoints)
-{
-
-}
-
-void FrequencySpectrum::reset()
-{
- iterator i = begin();
- for ( ; i != end(); ++i)
- *i = Element();
-}
-
-int FrequencySpectrum::count() const
-{
- return m_elements.count();
-}
-
-FrequencySpectrum::Element &FrequencySpectrum::operator[](int index)
-{
- return m_elements[index];
-}
-
-const FrequencySpectrum::Element &FrequencySpectrum::operator[](int index) const
-{
- return m_elements[index];
-}
-
-FrequencySpectrum::iterator FrequencySpectrum::begin()
-{
- return m_elements.begin();
-}
-
-FrequencySpectrum::iterator FrequencySpectrum::end()
-{
- return m_elements.end();
-}
-
-FrequencySpectrum::const_iterator FrequencySpectrum::begin() const
-{
- return m_elements.begin();
-}
-
-FrequencySpectrum::const_iterator FrequencySpectrum::end() const
-{
- return m_elements.end();
-}
diff --git a/examples/spectrum/spectrumapp/frequencyspectrum.h b/examples/spectrum/spectrumapp/frequencyspectrum.h
deleted file mode 100644
index fac9a1b7..00000000
--- a/examples/spectrum/spectrumapp/frequencyspectrum.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#ifndef FREQUENCYSPECTRUM_H
-#define FREQUENCYSPECTRUM_H
-
-#include <QtCore/QVector>
-
-/**
- * Represents a frequency spectrum as a series of elements, each of which
- * consists of a frequency, an amplitude and a phase.
- */
-class FrequencySpectrum {
-public:
- FrequencySpectrum(int numPoints = 0);
-
- struct Element {
- Element()
- : frequency(0.0), amplitude(0.0), phase(0.0), clipped(false)
- { }
-
- /**
- * Frequency in Hertz
- */
- qreal frequency;
-
- /**
- * Amplitude in range [0.0, 1.0]
- */
- qreal amplitude;
-
- /**
- * Phase in range [0.0, 2*PI]
- */
- qreal phase;
-
- /**
- * Indicates whether value has been clipped during spectrum analysis
- */
- bool clipped;
- };
-
- typedef QVector<Element>::iterator iterator;
- typedef QVector<Element>::const_iterator const_iterator;
-
- void reset();
-
- int count() const;
- Element& operator[](int index);
- const Element& operator[](int index) const;
- iterator begin();
- iterator end();
- const_iterator begin() const;
- const_iterator end() const;
-
-private:
- QVector<Element> m_elements;
-
-};
-
-#endif // FREQUENCYSPECTRUM_H
diff --git a/examples/spectrum/spectrumapp/main.cpp b/examples/spectrum/spectrumapp/main.cpp
deleted file mode 100644
index d0333e75..00000000
--- a/examples/spectrum/spectrumapp/main.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "engine.h"
-#include "utils.h"
-
-#include <QtDataVis3D/q3dbars.h>
-#include <QtDataVis3D/qbardataproxy.h>
-#include <QtDataVis3D/qvalueaxis.h>
-
-#include <QGuiApplication>
-#include <QAudio>
-#include <QTimer>
-
-//#define USE_CONES
-
-using namespace QtDataVis3D;
-
-class MainApp : public QObject
-{
-public:
- MainApp(Q3DBars *window);
- ~MainApp();
-
- void start(QString fileName);
-
-public slots:
- void spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum);
- void stateChanged(QAudio::Mode mode, QAudio::State state);
-
-private slots:
- void restart();
-
-private:
- int barIndex(qreal frequency) const;
-
-private:
- Q3DBars *m_chart;
- Engine *m_engine;
- QTimer *m_restartTimer;
- // Lower bound of first band in the spectrum in Hz
- qreal m_lowFreq;
- // Upper band of last band in the spectrum in Hz
- qreal m_highFreq;
-};
-
-MainApp::MainApp(Q3DBars *window)
- : m_chart(window),
- m_engine(new Engine(this)),
- m_restartTimer(new QTimer(this)),
- m_lowFreq(SpectrumLowFreq),
- m_highFreq(SpectrumHighFreq)
-{
- m_chart->setupSampleSpace(SpectrumNumBands * 2, SpectrumNumBands);
- // Disable grid
- m_chart->setGridVisible(false);
- // Disable auto-scaling of height by defining explicit range
- // By setting count to 0 we avoid getting any grid
- m_chart->valueAxis()->setSegmentCount(0);
- m_chart->valueAxis()->setRange(0.0, 1.0);
- // Disable shadows
- m_chart->setShadowQuality(QDataVis::ShadowNone);
-#if USE_CONES
- // Set bar specifications; make them a bit wider than deep and make them be drawn 75%
- // inside each other
- m_chart->setBarSpecs(QSizeF(1.0f, 0.75f), QSizeF(0.2f, -0.75f));
- // Set bar type, smooth cones
- m_chart->setBarType(QDataVis::Cones, true);
- // Adjust zoom manually; automatic zoom level calculation does not work well with negative
- // spacings (in setBarSpecs)
- m_chart->setCameraPosition(10.0f, 5.0f, 70);
-#else
- // Set bar specifications; make them twice as wide as they're deep
- m_chart->setBarSpecs(QSizeF(1.0f, 0.5f), QSizeF(0.0f, 0.0f));
- // Set bar type, flat bars
- m_chart->setBarType(QDataVis::Bars, false);
- // Adjust camera position
- m_chart->setCameraPosition(10.0f, 7.5f, 75);
-#endif
- // Set color scheme
- m_chart->setBarColor(QColor(Qt::black), QColor(Qt::red), QColor(Qt::darkYellow));
- // Disable selection
- m_chart->setSelectionMode(QDataVis::ModeNone);
- QObject::connect(m_engine, &Engine::changedSpectrum, this, &MainApp::spectrumChanged);
- QObject::connect(m_engine, &Engine::stateChanged, this, &MainApp::stateChanged);
- m_restartTimer->setSingleShot(true);
- QObject::connect(m_restartTimer, &QTimer::timeout, this, &MainApp::restart);
-
- QBarDataProxy *proxy = new QBarDataProxy;
- m_chart->setDataProxy(proxy);
-}
-
-MainApp::~MainApp()
-{
- delete m_engine;
- delete m_restartTimer;
-}
-
-void MainApp::start(QString fileName)
-{
- m_engine->loadFile(fileName);
- m_engine->startPlayback();
-}
-
-//-----------------------------------------------------------------------------
-// Public slots
-//-----------------------------------------------------------------------------
-
-void MainApp::spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum)
-{
- Q_UNUSED(position);
- Q_UNUSED(length);
- //qDebug() << "updating bar values" << position << length;
- QBarDataRow *data = new QBarDataRow(SpectrumNumBands);
- for (int bar = 0; bar < SpectrumNumBands; bar++) {
- // init data set
- (*data)[bar].setValue(qreal(0.0));
- }
- FrequencySpectrum::const_iterator i = spectrum.begin();
- const FrequencySpectrum::const_iterator end = spectrum.end();
- for ( ; i != end; ++i) {
- const FrequencySpectrum::Element e = *i;
- if (e.frequency >= m_lowFreq && e.frequency < m_highFreq) {
- (*data)[barIndex(e.frequency)].setValue(qMax(data->at(barIndex(e.frequency)).value(), qreal(e.amplitude)));
- }
- }
- static_cast<QBarDataProxy *>(m_chart->dataProxy())->insertRow(0, data);
-}
-
-void MainApp::stateChanged(QAudio::Mode mode, QAudio::State state)
-{
- //qDebug() << "mode:" << mode << " state: " << state;
- // Restart once playback is finished
- if (QAudio::AudioOutput == mode && QAudio::StoppedState == state)
- m_restartTimer->start(500);
-}
-
-//-----------------------------------------------------------------------------
-// Private slots
-//-----------------------------------------------------------------------------
-
-void MainApp::restart()
-{
- // Change file each time
- QString fileToLoad = QStringLiteral(":/file");
- static int fileNo = 3;
- QString nrStr;
- nrStr.setNum(fileNo);
- fileToLoad.append(nrStr);
- //qDebug() << fileToLoad;
- start(fileToLoad);
- fileNo++;
- if (fileNo > 3)
- fileNo = 1;
-}
-
-//-----------------------------------------------------------------------------
-// Private functions
-//-----------------------------------------------------------------------------
-
-int MainApp::barIndex(qreal frequency) const
-{
- Q_ASSERT(frequency >= m_lowFreq && frequency < m_highFreq);
- const qreal bandWidth = (m_highFreq - m_lowFreq) / SpectrumNumBands;
- const int index = (frequency - m_lowFreq) / bandWidth;
- if (index < 0 || index >= SpectrumNumBands)
- Q_ASSERT(false);
- //qDebug() << "insert to" << index;
- return index;
-}
-
-//-----------------------------------------------------------------------------
-// main
-//-----------------------------------------------------------------------------
-int main(int argc, char *argv[])
-{
- QGuiApplication app(argc, argv);
- app.setApplicationName("QtDataVis3D spectrum analyzer");
-
- Q3DBars window;
- window.resize(1024, 768);
- window.show();
-
- MainApp *mainApp = new MainApp(&window);
- mainApp->start(QStringLiteral(":/file2"));
-
- return app.exec();
-}
diff --git a/examples/spectrum/spectrumapp/soundFiles/Rockhop.wav b/examples/spectrum/spectrumapp/soundFiles/Rockhop.wav
deleted file mode 100644
index e56e1c0f..00000000
--- a/examples/spectrum/spectrumapp/soundFiles/Rockhop.wav
+++ /dev/null
Binary files differ
diff --git a/examples/spectrum/spectrumapp/soundFiles/futurebells_beat.wav b/examples/spectrum/spectrumapp/soundFiles/futurebells_beat.wav
deleted file mode 100644
index c45cbc71..00000000
--- a/examples/spectrum/spectrumapp/soundFiles/futurebells_beat.wav
+++ /dev/null
Binary files differ
diff --git a/examples/spectrum/spectrumapp/soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wav b/examples/spectrum/spectrumapp/soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wav
deleted file mode 100644
index 78b8dbda..00000000
--- a/examples/spectrum/spectrumapp/soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wav
+++ /dev/null
Binary files differ
diff --git a/examples/spectrum/spectrumapp/spectrum.h b/examples/spectrum/spectrumapp/spectrum.h
deleted file mode 100644
index 015989d5..00000000
--- a/examples/spectrum/spectrumapp/spectrum.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#ifndef SPECTRUM_H
-#define SPECTRUM_H
-
-#include "utils.h"
-#include "fftreal_wrapper.h" // For FFTLengthPowerOfTwo
-#include <qglobal.h>
-
-//-----------------------------------------------------------------------------
-// Constants
-//-----------------------------------------------------------------------------
-
-// Number of audio samples used to calculate the frequency spectrum
-const int SpectrumLengthSamples = PowerOfTwo<FFTLengthPowerOfTwo>::Result;
-
-// Number of bands in the frequency spectrum
-const int SpectrumNumBands = 30;
-
-// Lower bound of first band in the spectrum
-const qreal SpectrumLowFreq = 0.0; // Hz
-
-// Upper band of last band in the spectrum
-const qreal SpectrumHighFreq = 1000.0; // Hz
-
-// Waveform window size in microseconds
-const qint64 WaveformWindowDuration = 500 * 1000;
-
-// Fudge factor used to calculate the spectrum bar heights
-const qreal SpectrumAnalyserMultiplier = 0.15;
-
-// Disable message timeout
-const int NullMessageTimeout = -1;
-
-
-//-----------------------------------------------------------------------------
-// Types and data structures
-//-----------------------------------------------------------------------------
-
-enum WindowFunction {
- NoWindow,
- HannWindow
-};
-
-const WindowFunction DefaultWindowFunction = HannWindow;
-
-struct Tone
-{
- Tone(qreal freq = 0.0, qreal amp = 0.0)
- : frequency(freq), amplitude(amp)
- { }
-
- // Start and end frequencies for swept tone generation
- qreal frequency;
-
- // Amplitude in range [0.0, 1.0]
- qreal amplitude;
-};
-
-struct SweptTone
-{
- SweptTone(qreal start = 0.0, qreal end = 0.0, qreal amp = 0.0)
- : startFreq(start), endFreq(end), amplitude(amp)
- { Q_ASSERT(end >= start); }
-
- SweptTone(const Tone &tone)
- : startFreq(tone.frequency), endFreq(tone.frequency), amplitude(tone.amplitude)
- { }
-
- // Start and end frequencies for swept tone generation
- qreal startFreq;
- qreal endFreq;
-
- // Amplitude in range [0.0, 1.0]
- qreal amplitude;
-};
-
-
-//-----------------------------------------------------------------------------
-// Macros
-//-----------------------------------------------------------------------------
-
-// Macro which connects a signal to a slot, and which causes application to
-// abort if the connection fails. This is intended to catch programming errors
-// such as mis-typing a signal or slot name. It is necessary to write our own
-// macro to do this - the following idiom
-// Q_ASSERT(connect(source, signal, receiver, slot));
-// will not work because Q_ASSERT compiles to a no-op in release builds.
-
-#define CHECKED_CONNECT(source, signal, receiver, slot) \
- if (!connect(source, signal, receiver, slot)) \
- qt_assert_x(Q_FUNC_INFO, "CHECKED_CONNECT failed", __FILE__, __LINE__);
-
-#endif // SPECTRUM_H
-
diff --git a/examples/spectrum/spectrumapp/spectrum.qrc b/examples/spectrum/spectrumapp/spectrum.qrc
deleted file mode 100644
index 9368abc7..00000000
--- a/examples/spectrum/spectrumapp/spectrum.qrc
+++ /dev/null
@@ -1,7 +0,0 @@
-<RCC>
- <qresource prefix="/">
- <file alias="file1">soundFiles/onclassical_demo_fiati-di-parma_thuille_terzo-tempo_sestetto_small-version.wav</file>
- <file alias="file2">soundFiles/Rockhop.wav</file>
- <file alias="file3">soundFiles/futurebells_beat.wav</file>
- </qresource>
-</RCC>
diff --git a/examples/spectrum/spectrumapp/spectrumanalyser.cpp b/examples/spectrum/spectrumapp/spectrumanalyser.cpp
deleted file mode 100644
index 4cebfde9..00000000
--- a/examples/spectrum/spectrumapp/spectrumanalyser.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "spectrumanalyser.h"
-#include "utils.h"
-#include "fftreal_wrapper.h"
-
-#include <qmath.h>
-#include <qmetatype.h>
-#include <QAudioFormat>
-#include <QThread>
-
-SpectrumAnalyserThread::SpectrumAnalyserThread(QObject *parent)
- : QObject(parent),
- m_fft(new FFTRealWrapper),
- m_numSamples(SpectrumLengthSamples),
- m_windowFunction(DefaultWindowFunction),
- m_window(SpectrumLengthSamples, 0.0),
- m_input(SpectrumLengthSamples, 0.0),
- m_output(SpectrumLengthSamples, 0.0),
- m_spectrum(SpectrumLengthSamples)
- #ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
- , m_thread(new QThread(this))
- #endif
-{
-#ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
- // moveToThread() cannot be called on a QObject with a parent
- setParent(0);
- moveToThread(m_thread);
- m_thread->start();
-#endif
- calculateWindow();
-}
-
-SpectrumAnalyserThread::~SpectrumAnalyserThread()
-{
- delete m_fft;
-}
-
-void SpectrumAnalyserThread::setWindowFunction(WindowFunction type)
-{
- m_windowFunction = type;
- calculateWindow();
-}
-
-void SpectrumAnalyserThread::calculateWindow()
-{
- for (int i=0; i<m_numSamples; ++i) {
- DataType x = 0.0;
-
- switch (m_windowFunction) {
- case NoWindow:
- x = 1.0;
- break;
- case HannWindow:
- x = 0.5 * (1 - qCos((2 * M_PI * i) / (m_numSamples - 1)));
- break;
- default:
- Q_ASSERT(false);
- }
-
- m_window[i] = x;
- }
-}
-
-void SpectrumAnalyserThread::calculateSpectrum(const QByteArray &buffer,
- int inputFrequency,
- int bytesPerSample)
-{
- Q_ASSERT(buffer.size() == m_numSamples * bytesPerSample);
-
- // Initialize data array
- const char *ptr = buffer.constData();
- for (int i=0; i<m_numSamples; ++i) {
- const qint16 pcmSample = *reinterpret_cast<const qint16*>(ptr);
- // Scale down to range [-1.0, 1.0]
- const DataType realSample = pcmToReal(pcmSample);
- const DataType windowedSample = realSample * m_window[i];
- m_input[i] = windowedSample;
- ptr += bytesPerSample;
- }
-
- // Calculate the FFT
- m_fft->calculateFFT(m_output.data(), m_input.data());
-
- // Analyze output to obtain amplitude and phase for each frequency
- for (int i=2; i<=m_numSamples/2; ++i) {
- // Calculate frequency of this complex sample
- m_spectrum[i].frequency = qreal(i * inputFrequency) / (m_numSamples);
-
- const qreal real = m_output[i];
- qreal imag = 0.0;
- if (i>0 && i<m_numSamples/2)
- imag = m_output[m_numSamples/2 + i];
-
- const qreal magnitude = sqrt(real*real + imag*imag);
- qreal amplitude = SpectrumAnalyserMultiplier * log(magnitude);
-
- // Bound amplitude to [0.0, 1.0]
- m_spectrum[i].clipped = (amplitude > 1.0);
- amplitude = qMax(qreal(0.0), amplitude);
- amplitude = qMin(qreal(1.0), amplitude);
- m_spectrum[i].amplitude = amplitude;
- }
-
- emit calculationComplete(m_spectrum);
-}
-
-
-//=============================================================================
-// SpectrumAnalyser
-//=============================================================================
-
-SpectrumAnalyser::SpectrumAnalyser(QObject *parent)
- : QObject(parent),
- m_thread(new SpectrumAnalyserThread(this)),
- m_state(Idle)
-{
- CHECKED_CONNECT(m_thread, SIGNAL(calculationComplete(FrequencySpectrum)),
- this, SLOT(calculationComplete(FrequencySpectrum)));
-}
-
-SpectrumAnalyser::~SpectrumAnalyser()
-{
-
-}
-
-//-----------------------------------------------------------------------------
-// Public functions
-//-----------------------------------------------------------------------------
-
-void SpectrumAnalyser::setWindowFunction(WindowFunction type)
-{
- const bool b = QMetaObject::invokeMethod(m_thread, "setWindowFunction",
- Qt::AutoConnection,
- Q_ARG(WindowFunction, type));
- Q_ASSERT(b);
- Q_UNUSED(b) // suppress warnings in release builds
-}
-
-void SpectrumAnalyser::calculate(const QByteArray &buffer,
- const QAudioFormat &format)
-{
- // QThread::currentThread is marked 'for internal use only', but
- // we're only using it for debug output here, so it's probably OK :)
- SPECTRUMANALYSER_DEBUG << "SpectrumAnalyser::calculate"
- << QThread::currentThread()
- << "state" << m_state;
-
- if (isReady()) {
- Q_ASSERT(isPCMS16LE(format));
-
- const int bytesPerSample = format.sampleSize() * format.channelCount() / 8;
-
- m_state = Busy;
-
- // Invoke SpectrumAnalyserThread::calculateSpectrum using QMetaObject. If
- // m_thread is in a different thread from the current thread, the
- // calculation will be done in the child thread.
- // Once the calculation is finished, a calculationChanged signal will be
- // emitted by m_thread.
- const bool b = QMetaObject::invokeMethod(m_thread, "calculateSpectrum",
- Qt::AutoConnection,
- Q_ARG(QByteArray, buffer),
- Q_ARG(int, format.sampleRate()),
- Q_ARG(int, bytesPerSample));
- Q_ASSERT(b);
- Q_UNUSED(b) // suppress warnings in release builds
- }
-}
-
-bool SpectrumAnalyser::isReady() const
-{
- return (Idle == m_state);
-}
-
-void SpectrumAnalyser::cancelCalculation()
-{
- if (Busy == m_state)
- m_state = Cancelled;
-}
-
-
-//-----------------------------------------------------------------------------
-// Private slots
-//-----------------------------------------------------------------------------
-
-void SpectrumAnalyser::calculationComplete(const FrequencySpectrum &spectrum)
-{
- Q_ASSERT(Idle != m_state);
- if (Busy == m_state)
- emit spectrumChanged(spectrum);
- m_state = Idle;
-}
diff --git a/examples/spectrum/spectrumapp/spectrumanalyser.h b/examples/spectrum/spectrumapp/spectrumanalyser.h
deleted file mode 100644
index 6d9291ef..00000000
--- a/examples/spectrum/spectrumapp/spectrumanalyser.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#ifndef SPECTRUMANALYSER_H
-#define SPECTRUMANALYSER_H
-
-#include <QByteArray>
-#include <QObject>
-#include <QVector>
-
-#include "frequencyspectrum.h"
-#include "spectrum.h"
-
-#include "FFTRealFixLenParam.h"
-
-QT_FORWARD_DECLARE_CLASS(QAudioFormat)
-QT_FORWARD_DECLARE_CLASS(QThread)
-
-class FFTRealWrapper;
-
-class SpectrumAnalyserThreadPrivate;
-
-/**
- * Implementation of the spectrum analysis which can be run in a
- * separate thread.
- */
-class SpectrumAnalyserThread : public QObject
-{
- Q_OBJECT
-
-public:
- SpectrumAnalyserThread(QObject *parent);
- ~SpectrumAnalyserThread();
-
-public slots:
- void setWindowFunction(WindowFunction type);
- void calculateSpectrum(const QByteArray &buffer,
- int inputFrequency,
- int bytesPerSample);
-
-signals:
- void calculationComplete(const FrequencySpectrum &spectrum);
-
-private:
- void calculateWindow();
-
-private:
- FFTRealWrapper* m_fft;
-
- const int m_numSamples;
-
- WindowFunction m_windowFunction;
-
- typedef FFTRealFixLenParam::DataType DataType;
-
- QVector<DataType> m_window;
-
- QVector<DataType> m_input;
- QVector<DataType> m_output;
-
- FrequencySpectrum m_spectrum;
-
-#ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD
- QThread* m_thread;
-#endif
-};
-
-/**
- * Class which performs frequency spectrum analysis on a window of
- * audio samples, provided to it by the Engine.
- */
-class SpectrumAnalyser : public QObject
-{
- Q_OBJECT
-
-public:
- SpectrumAnalyser(QObject *parent = 0);
- ~SpectrumAnalyser();
-
-public:
- /*
- * Set the windowing function which is applied before calculating the FFT
- */
- void setWindowFunction(WindowFunction type);
-
- /*
- * Calculate a frequency spectrum
- *
- * \param buffer Audio data
- * \param format Format of audio data
- *
- * Frequency spectrum is calculated asynchronously. The result is returned
- * via the spectrumChanged signal.
- *
- * An ongoing calculation can be cancelled by calling cancelCalculation().
- *
- */
- void calculate(const QByteArray &buffer, const QAudioFormat &format);
-
- /*
- * Check whether the object is ready to perform another calculation
- */
- bool isReady() const;
-
- /*
- * Cancel an ongoing calculation
- *
- * Note that cancelling is asynchronous.
- */
- void cancelCalculation();
-
-signals:
- void spectrumChanged(const FrequencySpectrum &spectrum);
-
-private slots:
- void calculationComplete(const FrequencySpectrum &spectrum);
-
-private:
- void calculateWindow();
-
-private:
-
- SpectrumAnalyserThread* m_thread;
-
- enum State {
- Idle,
- Busy,
- Cancelled
- };
-
- State m_state;
-};
-
-#endif // SPECTRUMANALYSER_H
-
diff --git a/examples/spectrum/spectrumapp/spectrumapp.pro b/examples/spectrum/spectrumapp/spectrumapp.pro
deleted file mode 100644
index c2455f78..00000000
--- a/examples/spectrum/spectrumapp/spectrumapp.pro
+++ /dev/null
@@ -1,80 +0,0 @@
-!include( ../../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-!include( ../spectrum.pri ) {
- error( "Couldn't find the spectrum.pri file!" )
-}
-
-static: error(This application cannot be statically linked to the fftreal library)
-
-TEMPLATE = app
-
-TARGET = spectrum
-
-QT += multimedia
-
-SOURCES += main.cpp \
- engine.cpp \
- frequencyspectrum.cpp \
- spectrumanalyser.cpp \
- utils.cpp \
- wavfile.cpp
-
-HEADERS += engine.h \
- frequencyspectrum.h \
- spectrum.h \
- spectrumanalyser.h \
- utils.h \
- wavfile.h
-
-fftreal_dir = ../3rdparty/fftreal
-
-INCLUDEPATH += $${fftreal_dir}
-
-RESOURCES = spectrum.qrc
-
-# Dynamic linkage against FFTReal DLL
-!contains(DEFINES, DISABLE_FFT) {
- macx {
- # Link to fftreal framework
- LIBS += -F$${fftreal_dir}
- LIBS += -framework fftreal
- } else {
- LIBS += -L..$${spectrum_build_dir}
- LIBS += -lfftreal
- }
-}
-
-
-android {
- target.path = /libs/$$ANDROID_TARGET_ARCH
-} else {
- target.path = $$[QT_INSTALL_EXAMPLES]/datavis3d/spectrum
-}
-INSTALLS += target
-
-# Deployment
-
-DESTDIR = ..$${spectrum_build_dir}
-macx {
- !contains(DEFINES, DISABLE_FFT) {
- # Relocate fftreal.framework into spectrum.app bundle
- framework_dir = ../spectrum.app/Contents/Frameworks
- framework_name = fftreal.framework/Versions/1/fftreal
- QMAKE_POST_LINK = \
- mkdir -p $${framework_dir} &&\
- rm -rf $${framework_dir}/fftreal.framework &&\
- cp -R $${fftreal_dir}/fftreal.framework $${framework_dir} &&\
- install_name_tool -id @executable_path/../Frameworks/$${framework_name} \
- $${framework_dir}/$${framework_name} &&\
- install_name_tool -change $${framework_name} \
- @executable_path/../Frameworks/$${framework_name} \
- ../spectrum.app/Contents/MacOS/spectrum
- }
-} else {
- linux-g++*: {
- # Provide relative path from application to fftreal library
- QMAKE_LFLAGS += -Wl,--rpath=\\\$\$ORIGIN
- }
-}
diff --git a/examples/spectrum/spectrumapp/utils.cpp b/examples/spectrum/spectrumapp/utils.cpp
deleted file mode 100644
index bad6cc48..00000000
--- a/examples/spectrum/spectrumapp/utils.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include <QAudioFormat>
-#include "utils.h"
-
-qint64 audioDuration(const QAudioFormat &format, qint64 bytes)
-{
- return (bytes * 1000000) /
- (format.sampleRate() * format.channelCount() * (format.sampleSize() / 8));
-}
-
-qint64 audioLength(const QAudioFormat &format, qint64 microSeconds)
-{
- qint64 result = (format.sampleRate() * format.channelCount() * (format.sampleSize() / 8))
- * microSeconds / 1000000;
- result -= result % (format.channelCount() * format.sampleSize());
- return result;
-}
-
-qreal nyquistFrequency(const QAudioFormat &format)
-{
- return format.sampleRate() / 2;
-}
-
-QString formatToString(const QAudioFormat &format)
-{
- QString result;
-
- if (QAudioFormat() != format) {
- if (format.codec() == "audio/pcm") {
- Q_ASSERT(format.sampleType() == QAudioFormat::SignedInt);
-
- const QString formatEndian = (format.byteOrder() == QAudioFormat::LittleEndian)
- ? QString("LE") : QString("BE");
-
- QString formatType;
- switch (format.sampleType()) {
- case QAudioFormat::SignedInt:
- formatType = "signed";
- break;
- case QAudioFormat::UnSignedInt:
- formatType = "unsigned";
- break;
- case QAudioFormat::Float:
- formatType = "float";
- break;
- case QAudioFormat::Unknown:
- formatType = "unknown";
- break;
- }
-
- QString formatChannels = QString("%1 channels").arg(format.channelCount());
- switch (format.channelCount()) {
- case 1:
- formatChannels = "mono";
- break;
- case 2:
- formatChannels = "stereo";
- break;
- }
-
- result = QString("%1 Hz %2 bit %3 %4 %5")
- .arg(format.sampleRate())
- .arg(format.sampleSize())
- .arg(formatType)
- .arg(formatEndian)
- .arg(formatChannels);
- } else {
- result = format.codec();
- }
- }
-
- return result;
-}
-
-bool isPCM(const QAudioFormat &format)
-{
- return (format.codec() == "audio/pcm");
-}
-
-
-bool isPCMS16LE(const QAudioFormat &format)
-{
- return isPCM(format) &&
- format.sampleType() == QAudioFormat::SignedInt &&
- format.sampleSize() == 16 &&
- format.byteOrder() == QAudioFormat::LittleEndian;
-}
-
-const qint16 PCMS16MaxValue = 32767;
-const quint16 PCMS16MaxAmplitude = 32768; // because minimum is -32768
-
-qreal pcmToReal(qint16 pcm)
-{
- return qreal(pcm) / PCMS16MaxAmplitude;
-}
-
-qint16 realToPcm(qreal real)
-{
- return real * PCMS16MaxValue;
-}
diff --git a/examples/spectrum/spectrumapp/utils.h b/examples/spectrum/spectrumapp/utils.h
deleted file mode 100644
index f0ae5633..00000000
--- a/examples/spectrum/spectrumapp/utils.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#ifndef UTILS_H
-#define UTILS_H
-
-#include <QtCore/qglobal.h>
-#include <QDebug>
-
-QT_FORWARD_DECLARE_CLASS(QAudioFormat)
-
-//-----------------------------------------------------------------------------
-// Miscellaneous utility functions
-//-----------------------------------------------------------------------------
-
-qint64 audioDuration(const QAudioFormat &format, qint64 bytes);
-qint64 audioLength(const QAudioFormat &format, qint64 microSeconds);
-
-QString formatToString(const QAudioFormat &format);
-
-qreal nyquistFrequency(const QAudioFormat &format);
-
-// Scale PCM value to [-1.0, 1.0]
-qreal pcmToReal(qint16 pcm);
-
-// Scale real value in [-1.0, 1.0] to PCM
-qint16 realToPcm(qreal real);
-
-// Check whether the audio format is PCM
-bool isPCM(const QAudioFormat &format);
-
-// Check whether the audio format is signed, little-endian, 16-bit PCM
-bool isPCMS16LE(const QAudioFormat &format);
-
-// Compile-time calculation of powers of two
-
-template<int N> class PowerOfTwo
-{ public: static const int Result = PowerOfTwo<N-1>::Result * 2; };
-
-template<> class PowerOfTwo<0>
-{ public: static const int Result = 1; };
-
-
-//-----------------------------------------------------------------------------
-// Debug output
-//-----------------------------------------------------------------------------
-
-class NullDebug
-{
-public:
- template <typename T>
- NullDebug& operator<<(const T&) { return *this; }
-};
-
-inline NullDebug nullDebug() { return NullDebug(); }
-
-#ifdef LOG_ENGINE
-# define ENGINE_DEBUG qDebug()
-#else
-# define ENGINE_DEBUG nullDebug()
-#endif
-
-#ifdef LOG_SPECTRUMANALYSER
-# define SPECTRUMANALYSER_DEBUG qDebug()
-#else
-# define SPECTRUMANALYSER_DEBUG nullDebug()
-#endif
-
-#ifdef LOG_WAVEFORM
-# define WAVEFORM_DEBUG qDebug()
-#else
-# define WAVEFORM_DEBUG nullDebug()
-#endif
-
-#endif // UTILS_H
diff --git a/examples/spectrum/spectrumapp/wavfile.cpp b/examples/spectrum/spectrumapp/wavfile.cpp
deleted file mode 100644
index 24482507..00000000
--- a/examples/spectrum/spectrumapp/wavfile.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include <qendian.h>
-#include <QVector>
-#include <QDebug>
-#include "utils.h"
-#include "wavfile.h"
-
-struct chunk
-{
- char id[4];
- quint32 size;
-};
-
-struct RIFFHeader
-{
- chunk descriptor; // "RIFF"
- char type[4]; // "WAVE"
-};
-
-struct WAVEHeader
-{
- chunk descriptor;
- quint16 audioFormat;
- quint16 numChannels;
- quint32 sampleRate;
- quint32 byteRate;
- quint16 blockAlign;
- quint16 bitsPerSample;
-};
-
-struct DATAHeader
-{
- chunk descriptor;
-};
-
-struct CombinedHeader
-{
- RIFFHeader riff;
- WAVEHeader wave;
-};
-
-WavFile::WavFile(QObject *parent)
- : QFile(parent),
- m_headerLength(0)
-{
-
-}
-
-bool WavFile::open(const QString &fileName)
-{
- close();
- setFileName(fileName);
- return QFile::open(QIODevice::ReadOnly) && readHeader();
-}
-
-const QAudioFormat &WavFile::fileFormat() const
-{
- return m_fileFormat;
-}
-
-qint64 WavFile::headerLength() const
-{
- return m_headerLength;
-}
-
-bool WavFile::readHeader()
-{
- seek(0);
- CombinedHeader header;
- bool result = read(reinterpret_cast<char *>(&header), sizeof(CombinedHeader)) == sizeof(CombinedHeader);
- if (result) {
- if ((memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0
- || memcmp(&header.riff.descriptor.id, "RIFX", 4) == 0)
- && memcmp(&header.riff.type, "WAVE", 4) == 0
- && memcmp(&header.wave.descriptor.id, "fmt ", 4) == 0
- && (header.wave.audioFormat == 1 || header.wave.audioFormat == 0)) {
-
- // Read off remaining header information
- DATAHeader dataHeader;
-
- if (qFromLittleEndian<quint32>(header.wave.descriptor.size) > sizeof(WAVEHeader)) {
- // Extended data available
- quint16 extraFormatBytes;
- if (peek((char*)&extraFormatBytes, sizeof(quint16)) != sizeof(quint16))
- return false;
- const qint64 throwAwayBytes = sizeof(quint16) + qFromLittleEndian<quint16>(extraFormatBytes);
- if (read(throwAwayBytes).size() != throwAwayBytes)
- return false;
- }
-
- if (read((char*)&dataHeader, sizeof(DATAHeader)) != sizeof(DATAHeader))
- return false;
-
- // Establish format
- if (memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0)
- m_fileFormat.setByteOrder(QAudioFormat::LittleEndian);
- else
- m_fileFormat.setByteOrder(QAudioFormat::BigEndian);
-
- int bps = qFromLittleEndian<quint16>(header.wave.bitsPerSample);
- m_fileFormat.setChannelCount(qFromLittleEndian<quint16>(header.wave.numChannels));
- m_fileFormat.setCodec("audio/pcm");
- m_fileFormat.setSampleRate(qFromLittleEndian<quint32>(header.wave.sampleRate));
- m_fileFormat.setSampleSize(qFromLittleEndian<quint16>(header.wave.bitsPerSample));
- m_fileFormat.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt);
- } else {
- result = false;
- }
- }
- m_headerLength = pos();
- return result;
-}
diff --git a/examples/surface/doc/images/surface-example.png b/examples/surface/doc/images/surface-example.png
new file mode 100644
index 00000000..591f9c1e
--- /dev/null
+++ b/examples/surface/doc/images/surface-example.png
Binary files differ
diff --git a/examples/surface/doc/src/surface.qdoc b/examples/surface/doc/src/surface.qdoc
new file mode 100644
index 00000000..12271fb8
--- /dev/null
+++ b/examples/surface/doc/src/surface.qdoc
@@ -0,0 +1,131 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+/*!
+ \example surface
+ \title Surface Example
+ \ingroup qtdatavisualization_examples
+ \brief Using Q3DSurface in a widget application.
+
+ The surface example shows how to make a simple 3D surface graph using Q3DSurface and
+ combining the use of widgets for adjusting several adjustable qualities. This example
+ demonstrates the following features:
+
+ \list
+ \li How to set up a basic QSurfaceDataProxy and set data for it.
+ \li How to use QHeightMapSurfaceDataProxy for showing 3D height maps.
+ \li Three different selection modes for studying the graph.
+ \li Axis range usage for selecting slices from the graph.
+ \li Theme usage on the surface graph.
+ \li How to set a custom surface gradient.
+ \endlist
+ \image surface-example.png
+
+ \section1 Creating the application
+
+ First, in \c main.cpp, we create a QApplication, instantiate Q3DSurface and a window container
+ for it:
+
+ \snippet ../examples/surface/main.cpp 0
+
+ The call to QWidget::createWindowContainer is required, as all data visualization types
+ (Q3DBars, Q3DScatter, Q3DSurface) inherit QWindow. Any class inheriting QWindow cannot be used
+ as a widget any other way.
+
+ Then we'll create horizontal and vertical layouts. We'll add the graph with the container and
+ the vertical layout into the horizontal one:
+
+ \snippet ../examples/surface/main.cpp 1
+
+ The rest of the code in \c main.cpp is creating control widgets for features in Q3DSurface. We
+ have separated code for changing these features into \c surfacegraph.cpp and only connect
+ signals from widgets into methods in \c surfacegraph.cpp. Next chapter explains more
+ about using Q3DSurface.
+
+ \section1 Setting up proxies and data
+
+ First we instantiate a new QSurfaceDataProxy:
+
+ \snippet ../examples/surface/surfacegraph.cpp 0
+
+ Then we fill it with a simple square root and sin wave data. This is done by
+ creating a new QSurfaceDataArray instance and adding QSurfaceDataRow elements.
+ The created QSurfaceDataArray is set to be a the data array for the QSurfaceDataProxy.
+
+ \snippet ../examples/surface/surfacegraph.cpp 1
+
+ The height map is created by instantiating a QHeightMapSurfaceDataProxy with
+ a QImage containing the height data. The method setValueRanges is used to define
+ the value range of the map. In our example the map is from imaginary position of
+ 34.0\unicode 0x00B0 N - 40.0\unicode 0x00B0 N and 18.0\unicode 0x00B0 E - 24.0\unicode 0x00B0 E.
+ These values are used to show and position the map to the axis.
+
+ \snippet ../examples/surface/surfacegraph.cpp 2
+
+ For demonstrating different proxies this example has two radio buttons which
+ the user can use to switch between active proxies. When the user selects the
+ Sqrt&Sin radio button the selected proxy is activated with the following
+ code. First we set the decorative issues like enable the grid for the surface and
+ select the flat surface mode. Next lines define the axis label format and value
+ ranges. Since the algorithm studies the value variation between -8.0 and 8.0 we
+ set these values for X and Z coordinates. The value itself varies between 0.0 and
+ 2.0. The method setActiveDataProxy sets the basic data proxy to be active.
+
+ \snippet ../examples/surface/surfacegraph.cpp 3
+
+ When the Height Map radio button is activated, the following code sets the proxy on.
+ First the surface grid is turned off and the smooth mode is activated. The axis label
+ format is set to show N and E letters and ranges are set to the imaginary coordinates.
+ Finally the height map proxy is set to be active.
+
+ \snippet ../examples/surface/surfacegraph.cpp 4
+
+ \section1 Selection modes
+
+ Q3Dsurface supports three different selection modes and these are demonstrated on the
+ example with radio buttons which the user can use to activate suitable selection mode.
+ Following inline methods are connected to radio buttons to activate the selected mode.
+
+ \snippet ../examples/surface/surfacegraph.h 0
+
+ \section1 Axis ranges for studying the graph
+
+ The example has four slider controls for adjusting the min and max values for X and Z
+ axis. When selecting the proxy these sliders are adjusted so that one step on the slider
+ moves the range by one segment step. The example has some code to keep the sliders on
+ valid positions, like when the X axis minimum exceeds the maximum the maximum is increased
+ and so on. Finally the ranges are set for the graph like this:
+
+ \snippet ../examples/surface/surfacegraph.cpp 5
+
+ \section1 Themes
+
+ Q3Dsurface supports all the themes QtDatavisualization has. The example has a pull
+ down menu for selecting the theme and the following code snippet is connected to the menu to
+ activate the selected theme.
+
+ \snippet ../examples/surface/surfacegraph.cpp 6
+
+ \section1 Custom surface gradients
+
+ The example demonstrates the custom surface gradients with two push buttons. The gradient
+ can be defined with QLinearGradient where the desired colors are set to positions. Following
+ snippet shows how to create an example gradient and set it to the graph.
+
+ \snippet ../examples/surface/surfacegraph.cpp 7
+*/
diff --git a/examples/surface/main.cpp b/examples/surface/main.cpp
new file mode 100644
index 00000000..69babe8a
--- /dev/null
+++ b/examples/surface/main.cpp
@@ -0,0 +1,210 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "surfacegraph.h"
+
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QWidget>
+#include <QtWidgets/QHBoxLayout>
+#include <QtWidgets/QVBoxLayout>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QRadioButton>
+#include <QtWidgets/QSlider>
+#include <QtWidgets/QGroupBox>
+#include <QtWidgets/QComboBox>
+#include <QtWidgets/QLabel>
+#include <QtGui/QPainter>
+
+int main(int argc, char **argv)
+{
+ //! [0]
+ QApplication app(argc, argv);
+ Q3DSurface *graph = new Q3DSurface();
+ QWidget *container = QWidget::createWindowContainer(graph);
+ //! [0]
+
+ QSize screenSize = graph->screen()->size();
+ container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 1.6));
+ container->setMaximumSize(screenSize);
+ container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ container->setFocusPolicy(Qt::StrongFocus);
+
+ //! [1]
+ QWidget *widget = new QWidget;
+ QHBoxLayout *hLayout = new QHBoxLayout(widget);
+ QVBoxLayout *vLayout = new QVBoxLayout();
+ hLayout->addWidget(container, 1);
+ hLayout->addLayout(vLayout);
+ vLayout->setAlignment(Qt::AlignTop);
+ //! [1]
+
+ widget->setWindowTitle(QStringLiteral("Surface example"));
+
+ QGroupBox *modelGroupBox = new QGroupBox(QStringLiteral("Model"));
+
+ QRadioButton *sqrtSinModelRB = new QRadioButton(widget);
+ sqrtSinModelRB->setText(QStringLiteral("Sqrt&Sin"));
+ sqrtSinModelRB->setChecked(false);
+
+ QRadioButton *heightMapModelRB = new QRadioButton(widget);
+ heightMapModelRB->setText(QStringLiteral("Height Map"));
+ heightMapModelRB->setChecked(false);
+
+ QVBoxLayout *modelVBox = new QVBoxLayout;
+ modelVBox->addWidget(sqrtSinModelRB);
+ modelVBox->addWidget(heightMapModelRB);
+ modelGroupBox->setLayout(modelVBox);
+
+ QGroupBox *selectionGroupBox = new QGroupBox(QStringLiteral("Selection Mode"));
+
+ QRadioButton *modeNoneRB = new QRadioButton(widget);
+ modeNoneRB->setText(QStringLiteral("No selection"));
+ modeNoneRB->setChecked(false);
+
+ QRadioButton *modeItemRB = new QRadioButton(widget);
+ modeItemRB->setText(QStringLiteral("Item"));
+ modeItemRB->setChecked(false);
+
+ QRadioButton *modeSliceRowRB = new QRadioButton(widget);
+ modeSliceRowRB->setText(QStringLiteral("Row Slice"));
+ modeSliceRowRB->setChecked(false);
+
+ QRadioButton *modeSliceColumnRB = new QRadioButton(widget);
+ modeSliceColumnRB->setText(QStringLiteral("Column Slice"));
+ modeSliceColumnRB->setChecked(false);
+
+ QVBoxLayout *selectionVBox = new QVBoxLayout;
+ selectionVBox->addWidget(modeNoneRB);
+ selectionVBox->addWidget(modeItemRB);
+ selectionVBox->addWidget(modeSliceRowRB);
+ selectionVBox->addWidget(modeSliceColumnRB);
+ selectionGroupBox->setLayout(selectionVBox);
+
+ QSlider *axisMinSliderX = new QSlider(Qt::Horizontal, widget);
+ axisMinSliderX->setMinimum(0);
+ axisMinSliderX->setTickInterval(1);
+ axisMinSliderX->setEnabled(true);
+ QSlider *axisMaxSliderX = new QSlider(Qt::Horizontal, widget);
+ axisMaxSliderX->setMinimum(2);
+ axisMaxSliderX->setTickInterval(1);
+ axisMaxSliderX->setEnabled(true);
+ QSlider *axisMinSliderZ = new QSlider(Qt::Horizontal, widget);
+ axisMinSliderZ->setMinimum(0);
+ axisMinSliderZ->setTickInterval(1);
+ axisMinSliderZ->setEnabled(true);
+ QSlider *axisMaxSliderZ = new QSlider(Qt::Horizontal, widget);
+ axisMaxSliderZ->setMinimum(2);
+ axisMaxSliderZ->setTickInterval(1);
+ axisMaxSliderZ->setEnabled(true);
+
+ QComboBox *themeList = new QComboBox(widget);
+ themeList->addItem(QStringLiteral("Qt"));
+ themeList->addItem(QStringLiteral("Primary Colors"));
+ themeList->addItem(QStringLiteral("Digia"));
+ themeList->addItem(QStringLiteral("Stone Moss"));
+ themeList->addItem(QStringLiteral("Army Blue"));
+ themeList->addItem(QStringLiteral("Retro"));
+ themeList->addItem(QStringLiteral("Ebony"));
+ themeList->addItem(QStringLiteral("Isabelle"));
+
+ QGroupBox *colorGroupBox = new QGroupBox(QStringLiteral("Custom gradient"));
+
+ QLinearGradient grBtoY(0, 0, 1, 100);
+ grBtoY.setColorAt(1.0, Qt::black);
+ grBtoY.setColorAt(0.67, Qt::blue);
+ grBtoY.setColorAt(0.33, Qt::red);
+ grBtoY.setColorAt(0.0, Qt::yellow);
+ QPixmap pm(24, 100);
+ QPainter pmp(&pm);
+ pmp.setBrush(QBrush(grBtoY));
+ pmp.setPen(Qt::NoPen);
+ pmp.drawRect(0, 0, 24, 100);
+ QPushButton *gradientBtoYPB = new QPushButton(widget);
+ gradientBtoYPB->setIcon(QIcon(pm));
+ gradientBtoYPB->setIconSize(QSize(24, 100));
+
+ QLinearGradient grGtoR(0, 0, 1, 100);
+ grGtoR.setColorAt(1.0, Qt::darkGreen);
+ grGtoR.setColorAt(0.5, Qt::yellow);
+ grGtoR.setColorAt(0.2, Qt::red);
+ grGtoR.setColorAt(0.0, Qt::darkRed);
+ pmp.setBrush(QBrush(grGtoR));
+ pmp.drawRect(0, 0, 24, 100);
+ QPushButton *gradientGtoRPB = new QPushButton(widget);
+ gradientGtoRPB->setIcon(QIcon(pm));
+ gradientGtoRPB->setIconSize(QSize(24, 100));
+
+ QHBoxLayout *colorHBox = new QHBoxLayout;
+ colorHBox->addWidget(gradientBtoYPB);
+ colorHBox->addWidget(gradientGtoRPB);
+ colorGroupBox->setLayout(colorHBox);
+
+ vLayout->addWidget(modelGroupBox);
+ vLayout->addWidget(selectionGroupBox);
+ vLayout->addWidget(new QLabel(QStringLiteral("Column range")));
+ vLayout->addWidget(axisMinSliderX);
+ vLayout->addWidget(axisMaxSliderX);
+ vLayout->addWidget(new QLabel(QStringLiteral("Row range")));
+ vLayout->addWidget(axisMinSliderZ);
+ vLayout->addWidget(axisMaxSliderZ);
+ vLayout->addWidget(new QLabel(QStringLiteral("Theme")));
+ vLayout->addWidget(themeList);
+ vLayout->addWidget(colorGroupBox);
+
+ widget->show();
+
+ SurfaceGraph *modifier = new SurfaceGraph(graph);
+
+ QObject::connect(heightMapModelRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraph::enableHeightMapModel);
+ QObject::connect(sqrtSinModelRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraph::enableSqrtSinModel);
+ QObject::connect(modeNoneRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraph::toggleModeNone);
+ QObject::connect(modeItemRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraph::toggleModeItem);
+ QObject::connect(modeSliceRowRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraph::toggleModeSliceRow);
+ QObject::connect(modeSliceColumnRB, &QRadioButton::toggled,
+ modifier, &SurfaceGraph::toggleModeSliceColumn);
+ QObject::connect(axisMinSliderX, &QSlider::valueChanged,
+ modifier, &SurfaceGraph::adjustXMin);
+ QObject::connect(axisMaxSliderX, &QSlider::valueChanged,
+ modifier, &SurfaceGraph::adjustXMax);
+ QObject::connect(axisMinSliderZ, &QSlider::valueChanged,
+ modifier, &SurfaceGraph::adjustZMin);
+ QObject::connect(axisMaxSliderZ, &QSlider::valueChanged,
+ modifier, &SurfaceGraph::adjustZMax);
+ QObject::connect(themeList, SIGNAL(currentIndexChanged(int)),
+ modifier, SLOT(changeTheme(int)));
+ QObject::connect(gradientBtoYPB, &QPushButton::pressed,
+ modifier, &SurfaceGraph::setBlackToYellowGradient);
+ QObject::connect(gradientGtoRPB, &QPushButton::pressed,
+ modifier, &SurfaceGraph::setGreenToRedGradient);
+
+ modifier->setAxisMinSliderX(axisMinSliderX);
+ modifier->setAxisMaxSliderX(axisMaxSliderX);
+ modifier->setAxisMinSliderZ(axisMinSliderZ);
+ modifier->setAxisMaxSliderZ(axisMaxSliderZ);
+
+ sqrtSinModelRB->setChecked(true);
+ modeItemRB->setChecked(true);
+ themeList->setCurrentIndex(2);
+
+ return app.exec();
+}
diff --git a/examples/surface/mountain.png b/examples/surface/mountain.png
new file mode 100644
index 00000000..9138c710
--- /dev/null
+++ b/examples/surface/mountain.png
Binary files differ
diff --git a/examples/surface/surface.pro b/examples/surface/surface.pro
new file mode 100644
index 00000000..20c8a1a8
--- /dev/null
+++ b/examples/surface/surface.pro
@@ -0,0 +1,17 @@
+!include( ../examples.pri ) {
+ error( "Couldn't find the examples.pri file!" )
+}
+
+SOURCES += main.cpp \
+ surfacegraph.cpp
+
+HEADERS += surfacegraph.h
+
+QT += widgets
+
+INSTALLS += target
+
+RESOURCES += surface.qrc
+
+OTHER_FILES += doc/src/* \
+ doc/images/*
diff --git a/examples/surface/surface.qrc b/examples/surface/surface.qrc
new file mode 100644
index 00000000..e4a7c38b
--- /dev/null
+++ b/examples/surface/surface.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/maps">
+ <file alias="mountain">mountain.png</file>
+ </qresource>
+</RCC>
diff --git a/examples/surface/surfacegraph.cpp b/examples/surface/surfacegraph.cpp
new file mode 100644
index 00000000..a33f060b
--- /dev/null
+++ b/examples/surface/surfacegraph.cpp
@@ -0,0 +1,242 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#include "surfacegraph.h"
+
+#include <QtDataVisualization/Q3DValueAxis>
+#include <QtGui/QImage>
+#include <QtCore/qmath.h>
+
+using namespace QtDataVisualization;
+
+const int sampleCountX = 50;
+const int sampleCountZ = 50;
+const int heightMapGridStepX = 6;
+const int heightMapGridStepZ = 6;
+
+SurfaceGraph::SurfaceGraph(Q3DSurface *surface)
+ : m_graph(surface)
+{
+ m_graph->setAxisX(new Q3DValueAxis);
+ m_graph->setAxisY(new Q3DValueAxis);
+ m_graph->setAxisZ(new Q3DValueAxis);
+ m_graph->setLabelStyle(QDataVis::LabelStyleFromTheme);
+
+ //! [0]
+ sqrtSinProxy = new QSurfaceDataProxy();
+ //! [0]
+ fillSqrtSinProxy();
+
+ //! [2]
+ QImage heightMapImage(":/maps/mountain");
+ m_heightMapProxy = new QHeightMapSurfaceDataProxy(heightMapImage);
+ m_heightMapProxy->setValueRanges(34.0, 40.0, 18.0, 24.0);
+ //! [2]
+ m_heightMapWidth = heightMapImage.width();
+ m_heightMapHeight = heightMapImage.height();
+}
+
+SurfaceGraph::~SurfaceGraph()
+{
+ delete m_graph;
+}
+
+//! [1]
+void SurfaceGraph::fillSqrtSinProxy()
+{
+ qreal stepX = 16.0 / qreal(sampleCountX);
+ qreal stepZ = 16.0 / qreal(sampleCountZ);
+
+ QSurfaceDataArray *dataArray = new QSurfaceDataArray;
+ dataArray->reserve(sampleCountZ);
+ for (qreal i = -8.0 + stepZ / 2.0 ; i < 8.0 ; i += stepZ) {
+ QSurfaceDataRow *newRow = new QSurfaceDataRow(sampleCountX);
+ int index = 0;
+ for (qreal j = -8.0 + stepX / 2.0; j < 8.0; j += stepX) {
+ qreal R = qSqrt(i * i + j * j) + 0.01;
+ qreal y = (qSin(R) / R + 0.24) * 1.61;
+ (*newRow)[index++].setPosition(QVector3D(j, y, i));
+ }
+ *dataArray << newRow;
+ }
+
+ sqrtSinProxy->resetArray(dataArray);
+}
+//! [1]
+
+void SurfaceGraph::enableSqrtSinModel()
+{
+ //! [3]
+ m_graph->setSurfaceGridEnabled(true);
+ m_graph->setSmoothSurfaceEnabled(false);
+
+ m_graph->axisX()->setLabelFormat("%.2f");
+ m_graph->axisZ()->setLabelFormat("%.2f");
+ m_graph->axisX()->setRange(-8.0, 8.0);
+ m_graph->axisY()->setRange(0.0, 2.0);
+ m_graph->axisZ()->setRange(-8.0, 8.0);
+
+ m_graph->setActiveDataProxy(sqrtSinProxy);
+ //! [3]
+
+ // Reset range sliders for Sqrt&Sin
+ m_rangeMinX = -8.0;
+ m_rangeMinZ = -8.0;
+ m_stepX = 16.0 / qreal(sampleCountX - 1);
+ m_stepZ = 16.0 / qreal(sampleCountZ - 1);
+ m_axisMinSliderX->setMaximum(sampleCountX - 3);
+ m_axisMinSliderX->setValue(0);
+ m_axisMaxSliderX->setMaximum(sampleCountX - 1);
+ m_axisMaxSliderX->setValue(sampleCountX - 1);
+ m_axisMinSliderZ->setMaximum(sampleCountZ - 3);
+ m_axisMinSliderZ->setValue(0);
+ m_axisMaxSliderZ->setMaximum(sampleCountZ - 1);
+ m_axisMaxSliderZ->setValue(sampleCountZ - 1);
+}
+
+void SurfaceGraph::enableHeightMapModel()
+{
+ //! [4]
+ m_graph->setSurfaceGridEnabled(false);
+ m_graph->setSmoothSurfaceEnabled(true);
+
+ m_graph->axisX()->setLabelFormat("%.1f N");
+ m_graph->axisZ()->setLabelFormat("%.1f E");
+ m_graph->axisX()->setRange(34.0, 40.0);
+ m_graph->axisY()->setAutoAdjustRange(true);
+ m_graph->axisZ()->setRange(18.0, 24.0);
+
+ m_graph->setActiveDataProxy(m_heightMapProxy);
+ //! [4]
+
+ // Reset range sliders for height map
+ int mapGridCountX = m_heightMapWidth / heightMapGridStepX;
+ int mapGridCountZ = m_heightMapHeight / heightMapGridStepZ;
+ m_rangeMinX = 34.0;
+ m_rangeMinZ = 18.0;
+ m_stepX = 6.0 / qreal(mapGridCountX - 1);
+ m_stepZ = 6.0 / qreal(mapGridCountZ - 1);
+ m_axisMinSliderX->setMaximum(mapGridCountX - 3);
+ m_axisMinSliderX->setValue(0);
+ m_axisMaxSliderX->setMaximum(mapGridCountX - 1);
+ m_axisMaxSliderX->setValue(mapGridCountX - 1);
+ m_axisMinSliderZ->setMaximum(mapGridCountZ - 3);
+ m_axisMinSliderZ->setValue(0);
+ m_axisMaxSliderZ->setMaximum(mapGridCountZ - 1);
+ m_axisMaxSliderZ->setValue(mapGridCountZ - 1);
+}
+
+void SurfaceGraph::adjustXMin(int min)
+{
+ qreal minX = m_stepX * qreal(min) + m_rangeMinX;
+
+ int max = m_axisMaxSliderX->value();
+ if (min >= (max - 1)) {
+ max = min + 2;
+ m_axisMaxSliderX->setValue(max);
+ }
+ qreal maxX = m_stepX * max + m_rangeMinX;
+
+ setAxisXRange(minX, maxX);
+}
+
+void SurfaceGraph::adjustXMax(int max)
+{
+ qreal maxX = m_stepX * qreal(max) + m_rangeMinX;
+
+ int min = m_axisMinSliderX->value();
+ if (max <= (min + 1)) {
+ min = max - 2;
+ m_axisMinSliderX->setValue(min);
+ }
+ qreal minX = m_stepX * min + m_rangeMinX;
+
+ setAxisXRange(minX, maxX);
+}
+
+void SurfaceGraph::adjustZMin(int min)
+{
+ qreal minZ = m_stepZ * qreal(min) + m_rangeMinZ;
+
+ int max = m_axisMaxSliderZ->value();
+ if (min >= (max - 1)) {
+ max = min + 2;
+ m_axisMaxSliderZ->setValue(max);
+ }
+ qreal maxZ = m_stepZ * max + m_rangeMinZ;
+
+ setAxisZRange(minZ, maxZ);
+}
+
+void SurfaceGraph::adjustZMax(int max)
+{
+ qreal maxX = m_stepZ * qreal(max) + m_rangeMinZ;
+
+ int min = m_axisMinSliderZ->value();
+ if (max <= (min + 1)) {
+ min = max - 2;
+ m_axisMinSliderZ->setValue(min);
+ }
+ qreal minX = m_stepZ * min + m_rangeMinZ;
+
+ setAxisZRange(minX, maxX);
+}
+
+//! [5]
+void SurfaceGraph::setAxisXRange(qreal min, qreal max)
+{
+ m_graph->axisX()->setRange(min, max);
+}
+
+void SurfaceGraph::setAxisZRange(qreal min, qreal max)
+{
+ m_graph->axisZ()->setRange(min, max);
+}
+//! [5]
+
+//! [6]
+void SurfaceGraph::changeTheme(int theme)
+{
+ m_graph->setTheme((QDataVis::Theme)theme);
+}
+//! [6]
+
+void SurfaceGraph::setBlackToYellowGradient()
+{
+ //! [7]
+ QLinearGradient gr;
+ gr.setColorAt(0.0, Qt::black);
+ gr.setColorAt(0.33, Qt::blue);
+ gr.setColorAt(0.67, Qt::red);
+ gr.setColorAt(1.0, Qt::yellow);
+
+ m_graph->setGradient(gr);
+ //! [7]
+}
+
+void SurfaceGraph::setGreenToRedGradient()
+{
+ QLinearGradient gr;
+ gr.setColorAt(0.0, Qt::darkGreen);
+ gr.setColorAt(0.5, Qt::yellow);
+ gr.setColorAt(0.8, Qt::red);
+ gr.setColorAt(1.0, Qt::darkRed);
+
+ m_graph->setGradient(gr);
+}
+
diff --git a/examples/surface/surfacegraph.h b/examples/surface/surfacegraph.h
new file mode 100644
index 00000000..ac297bf6
--- /dev/null
+++ b/examples/surface/surfacegraph.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc
+** All rights reserved.
+** For any questions to Digia, please use contact form at http://qt.digia.com
+**
+** This file is part of the QtDataVisualization module.
+**
+** Licensees holding valid Qt Enterprise licenses may use this file in
+** accordance with the Qt Enterprise License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia.
+**
+** If you have questions regarding the use of this file, please use
+** contact form at http://qt.digia.com
+**
+****************************************************************************/
+
+#ifndef SURFACEGRAPH_H
+#define SURFACEGRAPH_H
+
+#include <QtDataVisualization/Q3DSurface>
+#include <QtDataVisualization/QSurfaceDataProxy>
+#include <QtDataVisualization/QHeightMapSurfaceDataProxy>
+#include <QtWidgets/QSlider>
+
+using namespace QtDataVisualization;
+
+class SurfaceGraph : public QObject
+{
+ Q_OBJECT
+public:
+ explicit SurfaceGraph(Q3DSurface *surface);
+ ~SurfaceGraph();
+
+ void enableHeightMapModel();
+ void enableSqrtSinModel();
+
+ //! [0]
+ void toggleModeNone() { m_graph->setSelectionMode(QDataVis::SelectionModeNone); }
+ void toggleModeItem() { m_graph->setSelectionMode(QDataVis::SelectionModeItem); }
+ void toggleModeSliceRow() { m_graph->setSelectionMode(QDataVis::SelectionModeSliceRow); }
+ void toggleModeSliceColumn() { m_graph->setSelectionMode(QDataVis::SelectionModeSliceColumn); }
+ //! [0]
+
+ void setBlackToYellowGradient();
+ void setGreenToRedGradient();
+
+ void setAxisMinSliderX(QSlider *slider) { m_axisMinSliderX = slider; }
+ void setAxisMaxSliderX(QSlider *slider) { m_axisMaxSliderX = slider; }
+ void setAxisMinSliderZ(QSlider *slider) { m_axisMinSliderZ = slider; }
+ void setAxisMaxSliderZ(QSlider *slider) { m_axisMaxSliderZ = slider; }
+
+ void adjustXMin(int min);
+ void adjustXMax(int max);
+ void adjustZMin(int min);
+ void adjustZMax(int max);
+
+public slots:
+ void changeTheme(int theme);
+
+private:
+ Q3DSurface *m_graph;
+ QHeightMapSurfaceDataProxy *m_heightMapProxy;
+ QSurfaceDataProxy *sqrtSinProxy;
+
+ QSlider *m_axisMinSliderX;
+ QSlider *m_axisMaxSliderX;
+ QSlider *m_axisMinSliderZ;
+ QSlider *m_axisMaxSliderZ;
+ qreal m_rangeMinX;
+ qreal m_rangeMinZ;
+ qreal m_stepX;
+ qreal m_stepZ;
+ int m_heightMapWidth;
+ int m_heightMapHeight;
+
+ void setAxisXRange(qreal min, qreal max);
+ void setAxisZRange(qreal min, qreal max);
+ void fillSqrtSinProxy();
+};
+
+#endif // SURFACEGRAPH_H
diff --git a/examples/surfacechart/chartmodifier.cpp b/examples/surfacechart/chartmodifier.cpp
deleted file mode 100644
index b685a680..00000000
--- a/examples/surfacechart/chartmodifier.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "chartmodifier.h"
-
-#include <qmath.h>
-
-#include <QDebug>
-
-QT_DATAVIS3D_USE_NAMESPACE
-
-ChartModifier::ChartModifier(Q3DSurface *chart)
- : m_chart(chart),
- m_xCount(10),
- m_zCount(10)
-{
-}
-
-ChartModifier::~ChartModifier()
-{
- delete m_chart;
-}
-
-void ChartModifier::toggleSmooth(bool enabled)
-{
- qDebug() << "ChartModifier::toggleSmooth " << enabled;
- m_chart->setSmoothSurface(enabled);
-}
-
-void ChartModifier::toggleSurfaceGrid(bool enable)
-{
- qDebug() << "ChartModifier::toggleSurfaceGrid" << enable;
- m_chart->setSurfaceGrid(enable);
-}
-
-void ChartModifier::toggleSqrtSin(bool enable)
-{
- qreal biggest = -9999.0;
- qreal smallest = 9999.0;
- QList<qreal> series;
-
- if (enable) {
- qDebug() << "Create Sqrt&Sin surface, (" << m_xCount << ", " << m_zCount << ")";
-
- qreal stepZ = 16.0 / qreal(m_zCount);
- qreal stepX = 16.0 / qreal(m_xCount);
-
- for (qreal i = -8.0 + stepZ / 2.0 ; i < 8.0 ; i += stepZ) {
- for (qreal j = -8.0 + stepX / 2.0; j < 8.0; j += stepX) {
- qreal R = qSqrt(i*i + j*j) + 0.01;
- qreal y = (sin(R)/R + 0.24) * 1.61;
- series << y;
- if (y > biggest) biggest = y;
- if (y < smallest) smallest = y;
- }
- }
-
- m_chart->setSegmentCount(4, 0.5f);
- m_chart->appendSeries(series, m_xCount, m_zCount);
-
- qDebug() << "biggest = " << biggest << ", smallest = " << smallest;
- } else {
- qDebug() << "Remove surface";
- }
-}
-
-void ChartModifier::togglePlane(bool enable)
-{
- qDebug() << "ChartModifier::togglePlane " << enable;
- if (enable) {
- QList<qreal> series;
-
- qreal y = 2.0 / qreal(m_zCount - 1);
- for (int i = 0; i < m_zCount; i++) {
- for (int j = 0; j < m_xCount; j++) {
- series << i * y;
- }
- }
-
- m_chart->setSegmentCount(4, 0.5f);
- m_chart->appendSeries(series, m_xCount, m_zCount);
- }
-}
-
-void ChartModifier::toggleGridSliderLock(bool enable)
-{
- m_gridSlidersLocked = enable;
- if (m_gridSlidersLocked) {
- m_gridSliderZ->setEnabled(false);
- m_gridSliderZ->setValue(m_gridSliderX->value());
- } else {
- m_gridSliderZ->setEnabled(true);
- }
-}
-
-void ChartModifier::adjustXCount(int count)
-{
- m_xCount = count;
- if (m_gridSlidersLocked)
- m_gridSliderZ->setValue(count);
-
- qDebug() << "X count = " << count;
-}
-
-void ChartModifier::adjustZCount(int count)
-{
- m_zCount = count;
-
- qDebug() << "Z count = " << count;
-}
-
diff --git a/examples/surfacechart/chartmodifier.h b/examples/surfacechart/chartmodifier.h
deleted file mode 100644
index 3ab2d179..00000000
--- a/examples/surfacechart/chartmodifier.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#ifndef CHARTMODIFIER_H
-#define CHARTMODIFIER_H
-
-#include <QtDataVis3D/Q3DSurface>
-#include <QSlider>
-
-using namespace QtDataVis3D;
-
-class ChartModifier : public QObject
-{
- Q_OBJECT
-public:
- explicit ChartModifier(Q3DSurface *chart);
- ~ChartModifier();
-
- void toggleSmooth(bool enabled);
- void toggleSurfaceGrid(bool enable);
- void toggleSqrtSin(bool enable);
- void togglePlane(bool enable);
- void toggleGridSliderLock(bool enable);
- void setGridSliderX(QSlider *slider) { m_gridSliderX = slider; }
- void setGridSliderZ(QSlider *slider) { m_gridSliderZ = slider; }
- void adjustXCount(int count);
- void adjustZCount(int count);
-
-private:
- Q3DSurface *m_chart;
- QSlider *m_gridSliderX;
- QSlider *m_gridSliderZ;
- bool m_gridSlidersLocked;
- int m_xCount;
- int m_zCount;
-};
-
-#endif // CHARTMODIFIER_H
diff --git a/examples/surfacechart/main.cpp b/examples/surfacechart/main.cpp
deleted file mode 100644
index 1297d92b..00000000
--- a/examples/surfacechart/main.cpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "chartmodifier.h"
-
-#include <QApplication>
-#include <QApplication>
-#include <QWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QCheckBox>
-#include <QSlider>
-#include <QLabel>
-#include <QScreen>
-#include <QPainter>
-#include <QDebug>
-
-using namespace QtDataVis3D;
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
- vLayout->setAlignment(Qt::AlignTop);
-
- Q3DSurface *surfaceChart = new Q3DSurface();
- QSize screenSize = surfaceChart->screen()->size();
-
- QWidget *container = QWidget::createWindowContainer(surfaceChart);
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- widget->setWindowTitle(QStringLiteral("Surface tester"));
-
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
-
- QCheckBox *smoothCB = new QCheckBox(widget);
- smoothCB->setText(QStringLiteral("Smooth "));
- smoothCB->setChecked(surfaceChart->smoothSurface());
-
- QCheckBox *surfaceGridCB = new QCheckBox(widget);
- surfaceGridCB->setText(QStringLiteral("Surface Grid"));
- surfaceGridCB->setChecked(true);
-
- QCheckBox *sqrtSinCB = new QCheckBox(widget);
- sqrtSinCB->setText(QStringLiteral("Sqrt & Sin"));
- sqrtSinCB->setChecked(false);
-
- QCheckBox *planeCB = new QCheckBox(widget);
- planeCB->setText(QStringLiteral("Plane"));
- planeCB->setChecked(false);
-
- QCheckBox *gridSlidersLockCB = new QCheckBox(widget);
- gridSlidersLockCB->setText(QStringLiteral("Lock"));
- gridSlidersLockCB->setChecked(false);
-
- QSlider *gridSliderX = new QSlider(Qt::Horizontal, widget);
- gridSliderX->setTickInterval(1);
- gridSliderX->setMinimum(2);
- gridSliderX->setValue(10);
- gridSliderX->setMaximum(200);
- gridSliderX->setEnabled(true);
- QSlider *gridSliderZ = new QSlider(Qt::Horizontal, widget);
- gridSliderZ->setTickInterval(1);
- gridSliderZ->setMinimum(2);
- gridSliderZ->setValue(10);
- gridSliderZ->setMaximum(200);
- gridSliderZ->setEnabled(true);
-
- QLinearGradient gr(0, 0, 100, 1);
- gr.setColorAt(0.0, Qt::green);
- gr.setColorAt(0.5, Qt::yellow);
- gr.setColorAt(1.0, Qt::red);
- QPixmap pm(100, 24);
- QPainter pmp(&pm);
- pmp.setBrush(QBrush(gr));
- pmp.setPen(Qt::NoPen);
- pmp.drawRect(0, 0, 100, 24);
- //pm.save("C:\\Users\\misalmel\\Work\\test.png", "png");
- QPushButton *color = new QPushButton();
- color->setIcon(QIcon(pm));
- color->setIconSize(QSize(100, 24));
- color->setFlat(true);
-
- // Add controls to the layout
- vLayout->addWidget(smoothCB);
- vLayout->addWidget(surfaceGridCB);
- vLayout->addWidget(new QLabel(QStringLiteral("Select surface sample")));
- vLayout->addWidget(sqrtSinCB);
- vLayout->addWidget(planeCB);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust sample count")));
- vLayout->addWidget(gridSlidersLockCB);
- vLayout->addWidget(gridSliderX);
- vLayout->addWidget(gridSliderZ);
- vLayout->addWidget(color);
-
- widget->show();
-
- ChartModifier *modifier = new ChartModifier(surfaceChart);
-
- // Connect controls to slots on modifier
- QObject::connect(smoothCB, &QCheckBox::stateChanged,
- modifier, &ChartModifier::toggleSmooth);
- QObject::connect(surfaceGridCB, &QCheckBox::stateChanged,
- modifier, &ChartModifier::toggleSurfaceGrid);
- QObject::connect(sqrtSinCB, &QCheckBox::stateChanged,
- modifier, &ChartModifier::toggleSqrtSin);
- QObject::connect(planeCB, &QCheckBox::stateChanged,
- modifier, &ChartModifier::togglePlane);
- QObject::connect(gridSlidersLockCB, &QCheckBox::stateChanged,
- modifier, &ChartModifier::toggleGridSliderLock);
- QObject::connect(gridSliderX, &QSlider::valueChanged,
- modifier, &ChartModifier::adjustXCount);
- QObject::connect(gridSliderZ, &QSlider::valueChanged,
- modifier, &ChartModifier::adjustZCount);
-
- modifier->setGridSliderZ(gridSliderZ);
- modifier->setGridSliderX(gridSliderX);
- modifier->toggleGridSliderLock(gridSlidersLockCB->checkState());
-
-// QList<qreal> lowList;
-// lowList << 15.0 << 35.0 << 55.0 << 75.0 << 80.0 << 75.0 << 55.0 << 35.0 << 15.0;
-// lowList << 65.0 << 105.0 << 135.0 << 155.0 << 190.0 << 155.0 << 135.0 << 105.0 << 65.0;
-// lowList << 105.0 << 170.0 << 215.0 << 240.0 << 245.0 << 240.0 << 215.0 << 170.0 << 105.0;
-// lowList << 65.0 << 105.0 << 135.0 << 155.0 << 190.0 << 155.0 << 135.0 << 105.0 << 65.0;
-// lowList << 15.0 << 35.0 << 55.0 << 75.0 << 80.0 << 75.0 << 55.0 << 35.0 << 16.1;
-
-// lowList << 15.0 << 65.0 << 105.0 << 65.0 << 15.0;
-// lowList << 35.0 << 105.0 << 170.0 << 105.0 << 35;
-// lowList << 55.0 << 135.0 << 215.0 << 135.0 << 55;
-// lowList << 75.0 << 155.0 << 240.0 << 155.0 << 75;
-// lowList << 80.0 << 190.0 << 245.0 << 190.0 << 80;
-// lowList << 75.0 << 155.0 << 240.0 << 155.0 << 75.0;
-// lowList << 55.0 << 135.0 << 215.0 << 135.0 << 55;
-// lowList << 35.0 << 105.0 << 170.0 << 105.0 << 35.0;
-// lowList << 15.0 << 65.0 << 105.0 << 65.0 << 16.1;
-
-// surfaceChart->appendSeries(lowList, 9, 5);
-
-// QList<qreal> topList;
-// topList << 2.1 << 2.2;
-// surfaceChart.appendSeries(topList);
-
-// surfaceChart.resize(screenSize.width() / 1.5, screenSize.height() / 1.5);
-// surfaceChart.setPosition(screenSize.width() / 6, screenSize.height() / 6);
-// surfaceChart.show();
-
- return app.exec();
-}
diff --git a/examples/surfacechart/surfacechart.pro b/examples/surfacechart/surfacechart.pro
deleted file mode 100644
index 79fd967d..00000000
--- a/examples/surfacechart/surfacechart.pro
+++ /dev/null
@@ -1,11 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp \
- chartmodifier.cpp
-
-INSTALLS += target
-
-HEADERS += \
- chartmodifier.h
diff --git a/examples/widget/chart.cpp b/examples/widget/chart.cpp
deleted file mode 100644
index a8c6c14a..00000000
--- a/examples/widget/chart.cpp
+++ /dev/null
@@ -1,440 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "chart.h"
-#include <QtDataVis3D/qcategoryaxis.h>
-#include <QtDataVis3D/qvalueaxis.h>
-#include <QtDataVis3D/qbardataproxy.h>
-#include <QTime>
-
-QT_DATAVIS3D_USE_NAMESPACE
-
-const QString celsiusString = QString(QChar(0xB0)) + "C";
-
-ChartModifier::ChartModifier(Q3DBars *barchart)
- : m_chart(barchart),
- m_columnCount(21),
- m_rowCount(21),
- m_xRotation(0.0f),
- m_yRotation(0.0f),
- m_static(true),
- m_barWidth(1.0f),
- m_barDepth(1.0f),
- m_barSpacingX(0.1f),
- m_barSpacingZ(0.1f),
- m_fontSize(20),
- m_segments(4),
- m_subSegments(3),
- m_minval(-20.0), // TODO Barchart Y-axis currently only properly supports zero-centered ranges
- m_maxval(20.0)
-{
- // Don't set any styles or specifications, start from defaults
- // Generate generic labels
- for (int i = 0; i < 200; i++) {
- if (i % 5)
- m_genericRowLabels << QString();
- else
- m_genericRowLabels << QStringLiteral("Row %1").arg(i);
- }
- for (int i = 0; i < 200; i++) {
- if (i % 5)
- m_genericColumnLabels << QString();
- else
- m_genericColumnLabels << QStringLiteral("Column %1").arg(i);
- }
-}
-
-ChartModifier::~ChartModifier()
-{
- delete m_chart;
-}
-
-void ChartModifier::start()
-{
- if (m_static)
- addDataSet();
-}
-
-void ChartModifier::restart(bool dynamicData)
-{
- m_static = !dynamicData;
-
- if (m_static) {
- start();
- // Set selection mode to zoom row
- m_chart->setSelectionMode(QDataVis::ModeZoomRow);
- m_chart->setFont(QFont("Times Roman", 20));
- } else {
- m_chart->dataProxy()->resetArray(0);
- // Set up sample space
- m_chart->setupSampleSpace(m_rowCount, m_columnCount);
- // Set selection mode to full
- m_chart->setSelectionMode(QDataVis::ModeItemRowAndColumn);
- m_chart->valueAxis()->setSegmentCount(m_segments * 2);
- m_chart->valueAxis()->setSubSegmentCount(0);
- m_chart->valueAxis()->setAutoAdjustRange(true);
-
- m_chart->rowAxis()->setTitle("Generic Row");
- m_chart->columnAxis()->setTitle("Generic Column");
- m_chart->valueAxis()->setTitle("Generic Value");
-
- if (m_chart->rowAxis()->labels().size() < m_rowCount)
- m_chart->rowAxis()->setCategoryLabels(m_genericRowLabels.mid(0, m_rowCount));
-
- if (m_chart->columnAxis()->labels().size() < m_rowCount)
- m_chart->columnAxis()->setCategoryLabels(m_genericColumnLabels.mid(0, m_columnCount));
- }
-}
-
-void ChartModifier::addDataSet()
-{
- // Prepare data to be visualized
- // Use QDataSet adder
-
- // Set window title
- m_chart->setWindowTitle(QStringLiteral("Average temperatures in Oulu, Finland (2006-2012)"));
-
- // Set up row and column names
- QStringList months;
- months << "January" << "February" << "March" << "April" << "May" << "June" << "July" << "August" << "September" << "October" << "November" << "December";
- QStringList years;
- years << "2006" << "2007" << "2008" << "2009" << "2010" << "2011" << "2012";
-
- // Set up data
- float temp[7][12] = {{-6.7f, -11.7f, -9.7f, 3.3f, 9.2f, 14.0f, 16.3f, 17.8f, 10.2f, 2.1f, -2.6f, -0.3f}, // 2006
- {-6.8f, -13.3f, 0.2f, 1.5f, 7.9f, 13.4f, 16.1f, 15.5f, 8.2f, 5.4f, -2.6f, -0.8f}, // 2007
- {-4.2f, -4.0f, -4.6f, 1.9f, 7.3f, 12.5f, 15.0f, 12.8f, 7.6f, 5.1f, -0.9f, -1.3f}, // 2008
- {-7.8f, -8.8f, -4.2f, 0.7f, 9.3f, 13.2f, 15.8f, 15.5f, 11.2f, 0.6f, 0.7f, -8.4f}, // 2009
- {-14.4f, -12.1f, -7.0f, 2.3f, 11.0f, 12.6f, 18.8f, 13.8f, 9.4f, 3.9f, -5.6f, -13.0f}, // 2010
- {-9.0f, -15.2f, -3.8f, 2.6f, 8.3f, 15.9f, 18.6f, 14.9f, 11.1f, 5.3f, 1.8f, -0.2f}, // 2011
- {-8.7f, -11.3f, -2.3f, 0.4f, 7.5f, 12.2f, 16.4f, 14.1f, 9.2f, 3.1f, 0.3f, -12.1f}}; // 2012
-
- // Use default data proxy to feed data directly in expected format
- QBarDataProxy *proxy = m_chart->dataProxy();
- proxy->setItemLabelFormat(celsiusString);
-
- // Add labels
- m_chart->rowAxis()->setTitle("Year");
- m_chart->columnAxis()->setTitle("Month");
- m_chart->valueAxis()->setTitle("Average temperature (" + celsiusString + ")");
- m_chart->rowAxis()->setCategoryLabels(years);
- m_chart->columnAxis()->setCategoryLabels(months);
- m_chart->valueAxis()->setSegmentCount(m_segments);
- m_chart->valueAxis()->setSubSegmentCount(m_subSegments);
- m_chart->valueAxis()->setRange(m_minval, m_maxval);
-
- // Create data rows
- QBarDataArray *dataSet = new QBarDataArray;
- QBarDataRow *dataRow;
-
- dataSet->reserve(years.size());
- for (int year = 0; year < years.size(); year++) {
- dataRow = new QBarDataRow(months.size());
- // Create data items
- for (int month = 0; month < months.size(); month++) {
- // Add data to rows
- (*dataRow)[month].setValue(temp[year][month]);
- }
- // Add row to set
- dataSet->append(dataRow);
- }
-
- // Set up sample space based on prepared data
- m_chart->setupSampleSpace(years.size(), months.size());
-
- // Add data to chart (chart assumes ownership)
- proxy->resetArray(dataSet);
-}
-
-void ChartModifier::addRow()
-{
- QBarDataRow *dataRow = new QBarDataRow(m_columnCount);
- for (float i = 0; i < m_columnCount; i++) {
- (*dataRow)[i].setValue(((i + 1) / (float)m_columnCount) * (float)(rand() % 100));
- //(*dataRow)[i].setValue(i + m_chart->dataProxy()->rowCount());
- }
- m_chart->dataProxy()->insertRow(0, dataRow);
-}
-
-void ChartModifier::addRows()
-{
- QTime timer;
- timer.start();
- QBarDataArray dataArray;
- for (int i = 0; i < m_rowCount; i++) {
- QBarDataRow *dataRow = new QBarDataRow(m_columnCount);
- for (int j = 0; j < m_columnCount; j++)
- (*dataRow)[j].setValue(qreal(j + i + m_chart->dataProxy()->rowCount()));
- dataArray.append(dataRow);
- }
- m_chart->dataProxy()->insertRows(0, dataArray);
- qDebug() << "Added" << m_rowCount << "rows, time:" << timer.elapsed();
-}
-
-void ChartModifier::changeItem()
-{
- // TODO fix to use actual selected item, for now just assume some row/column are selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
- if (row >= 0) {
- int column = qMin(4, (m_chart->dataProxy()->rowAt(row)->size() - 1));
- if (column >= 0) {
- QBarDataItem item(qreal(rand() % 100));
- m_chart->dataProxy()->setItem(row, column, item);
- }
- }
-}
-
-void ChartModifier::changeRow()
-{
- // TODO fix to use actual selected item, for now just assume some is selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
- if (row >= 0) {
- QBarDataRow *newRow = new QBarDataRow(m_chart->dataProxy()->rowAt(row)->size());
- for (int i = 0; i < newRow->size(); i++)
- (*newRow)[i].setValue(qreal(rand() % 100));
- m_chart->dataProxy()->setRow(row, newRow);
- }
-}
-
-void ChartModifier::changeRows()
-{
- // TODO fix to use actual selected item, for now just assume some is selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
- if (row >= 0) {
- int startRow = qMax(row - 2, 0);
- QBarDataArray newArray;
- for (int i = startRow; i <= row; i++ ) {
- QBarDataRow *newRow = new QBarDataRow(m_chart->dataProxy()->rowAt(i)->size());
- for (int j = 0; j < newRow->size(); j++)
- (*newRow)[j].setValue(qreal(rand() % 100));
- newArray.append(newRow);
- }
- m_chart->dataProxy()->setRows(startRow, newArray);
- }
-}
-
-void ChartModifier::removeRow()
-{
- // TODO fix to use actual selected item, for now just assume some is selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
- if (row >= 0)
- m_chart->dataProxy()->removeRows(row, 1);
-}
-
-void ChartModifier::removeRows()
-{
- // TODO fix to use actual selected item, for now just assume some is selected
- int row = qMin(4, (m_chart->dataProxy()->rowCount() - 1));
- if (row >= 0) {
- int startRow = qMax(row - 2, 0);
- m_chart->dataProxy()->removeRows(startRow, 3);
- }
-}
-
-void ChartModifier::changeStyle()
-{
- static int model = 0;
- switch (model) {
- case 0:
- m_chart->setBarType(QDataVis::Cylinders, false);
- break;
- case 1:
- m_chart->setBarType(QDataVis::Cylinders, true);
- break;
- case 2:
- m_chart->setBarType(QDataVis::Cones, false);
- break;
- case 3:
- m_chart->setBarType(QDataVis::Cones, true);
- break;
- case 4:
- m_chart->setBarType(QDataVis::Bars, false);
- break;
- case 5:
- m_chart->setBarType(QDataVis::Bars, true);
- break;
- case 6:
- m_chart->setBarType(QDataVis::Pyramids, false);
- break;
- case 7:
- m_chart->setBarType(QDataVis::Pyramids, true);
- break;
- case 8:
- m_chart->setBarType(QDataVis::BevelBars, false);
- break;
- case 9:
- m_chart->setBarType(QDataVis::BevelBars, true);
- break;
- }
- model++;
- if (model > 9)
- model = 0;
-}
-
-void ChartModifier::changePresetCamera()
-{
- static int preset = QDataVis::PresetFrontLow;
-
- m_chart->setCameraPreset((QDataVis::CameraPreset)preset);
-
- if (++preset > QDataVis::PresetDirectlyBelow)
- preset = QDataVis::PresetFrontLow;
-}
-
-void ChartModifier::changeTheme()
-{
- static int theme = QDataVis::ThemeSystem;
-
- m_chart->setTheme((QDataVis::ColorTheme)theme);
-
- if (++theme > QDataVis::ThemeLight)
- theme = QDataVis::ThemeSystem;
-}
-
-void ChartModifier::changeTransparency()
-{
- static int transparency = QDataVis::TransparencyNone;
-
- m_chart->setLabelTransparency((QDataVis::LabelTransparency)transparency);
-
- if (++transparency > QDataVis::TransparencyNoBackground)
- transparency = QDataVis::TransparencyFromTheme;
-}
-
-void ChartModifier::changeSelectionMode()
-{
- static int selectionMode = QDataVis::ModeNone;
-
- m_chart->setSelectionMode((QDataVis::SelectionMode)selectionMode);
-
- if (++selectionMode > QDataVis::ModeZoomColumn)
- selectionMode = QDataVis::ModeNone;
-}
-
-void ChartModifier::changeFont(const QFont &font)
-{
- QFont newFont = font;
- newFont.setPointSize(m_fontSize);
- //qDebug() << newFont << newFont.style();
- m_chart->setFont(newFont);
-}
-
-void ChartModifier::changeFontSize(int fontsize)
-{
- m_fontSize = fontsize;
- m_chart->setFontSize((GLfloat)m_fontSize);
-}
-
-void ChartModifier::shadowQualityUpdatedByVisual(QDataVis::ShadowQuality sq)
-{
- int quality = 0;
- switch (sq) {
- case QDataVis::ShadowLow:
- quality = 1;
- break;
- case QDataVis::ShadowMedium:
- quality = 2;
- break;
- case QDataVis::ShadowHigh:
- quality = 3;
- break;
- }
-
- // Updates the UI component to show correct shadow quality
- emit shadowQualityChanged(quality);
-}
-
-void ChartModifier::changeShadowQuality(int quality)
-{
- QDataVis::ShadowQuality sq = QDataVis::ShadowNone;
- switch (quality) {
- case 1:
- sq = QDataVis::ShadowLow;
- break;
- case 2:
- sq = QDataVis::ShadowMedium;
- break;
- case 3:
- sq = QDataVis::ShadowHigh;
- break;
- }
- m_chart->setShadowQuality(sq);
- emit shadowQualityChanged(quality);
-}
-
-void ChartModifier::setBackgroundEnabled(int enabled)
-{
- m_chart->setBackgroundVisible((bool)enabled);
-}
-
-void ChartModifier::setGridEnabled(int enabled)
-{
- m_chart->setGridVisible((bool)enabled);
-}
-
-void ChartModifier::rotateX(int rotation)
-{
- m_xRotation = rotation;
- m_chart->setCameraPosition(m_xRotation, m_yRotation);
-}
-
-void ChartModifier::rotateY(int rotation)
-{
- m_yRotation = rotation;
- m_chart->setCameraPosition(m_xRotation, m_yRotation);
-}
-
-void ChartModifier::setSpecsX(int barwidth)
-{
- m_barWidth = (float)barwidth / 100.0f;
- m_chart->setBarSpecs(QSizeF(m_barWidth, m_barDepth), QSizeF(m_barSpacingX, m_barSpacingZ));
-}
-
-void ChartModifier::setSpecsZ(int bardepth)
-{
- m_barDepth = (float)bardepth / 100.0f;
- m_chart->setBarSpecs(QSizeF(m_barWidth, m_barDepth), QSizeF(m_barSpacingX, m_barSpacingZ));
-}
-
-void ChartModifier::setSpacingSpecsX(int spacing)
-{
- m_barSpacingX = (float)spacing / 100.0f;
- m_chart->setBarSpecs(QSizeF(m_barWidth, m_barDepth), QSizeF(m_barSpacingX, m_barSpacingZ));
-}
-
-void ChartModifier::setSpacingSpecsZ(int spacing)
-{
- m_barSpacingZ = (float)spacing / 100.0f;
- m_chart->setBarSpecs(QSizeF(m_barWidth, m_barDepth), QSizeF(m_barSpacingX, m_barSpacingZ));
-}
-
-void ChartModifier::setSampleCountX(int samples)
-{
- m_columnCount = samples;
- m_chart->setupSampleSpace(m_rowCount, m_columnCount);
- if (m_chart->columnAxis()->labels().size() < m_columnCount)
- m_chart->columnAxis()->setCategoryLabels(m_genericColumnLabels.mid(0, m_columnCount));
-}
-
-void ChartModifier::setSampleCountZ(int samples)
-{
- m_rowCount = samples;
- m_chart->setupSampleSpace(m_rowCount, m_columnCount);
- if (m_chart->rowAxis()->labels().size() < m_rowCount)
- m_chart->rowAxis()->setCategoryLabels(m_genericRowLabels.mid(0, m_rowCount));
-}
diff --git a/examples/widget/doc/images/widget-example.png b/examples/widget/doc/images/widget-example.png
deleted file mode 100644
index 4fb43b42..00000000
--- a/examples/widget/doc/images/widget-example.png
+++ /dev/null
Binary files differ
diff --git a/examples/widget/doc/src/widget.qdoc b/examples/widget/doc/src/widget.qdoc
deleted file mode 100644
index 6645d356..00000000
--- a/examples/widget/doc/src/widget.qdoc
+++ /dev/null
@@ -1,29 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-/*!
- \example widget
- \title Widget Example
-
- The widget example shows how to make a 3D bar chart using Q3DBars and combining the use of
- widgets for adjusting several adjustable qualities.
-
- \image widget-example.png
-
- TODO
-*/
diff --git a/examples/widget/main.cpp b/examples/widget/main.cpp
deleted file mode 100644
index 47892484..00000000
--- a/examples/widget/main.cpp
+++ /dev/null
@@ -1,297 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Digia Plc
-** All rights reserved.
-** For any questions to Digia, please use contact form at http://qt.digia.com
-**
-** This file is part of the QtDataVis3D module.
-**
-** Licensees holding valid Qt Enterprise licenses may use this file in
-** accordance with the Qt Enterprise License Agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia.
-**
-** If you have questions regarding the use of this file, please use
-** contact form at http://qt.digia.com
-**
-****************************************************************************/
-
-#include "chart.h"
-
-#include <QApplication>
-#include <QWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QCheckBox>
-#include <QSlider>
-#include <QFontComboBox>
-#include <QLabel>
-#include <QScreen>
-#include <QFontDatabase>
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
-
- QWidget *widget = new QWidget;
- QHBoxLayout *hLayout = new QHBoxLayout(widget);
- QVBoxLayout *vLayout = new QVBoxLayout();
-
- Q3DBars *widgetchart = new Q3DBars();
- QSize screenSize = widgetchart->screen()->size();
-
- QWidget *container = QWidget::createWindowContainer(widgetchart);
- container->setMinimumSize(QSize(screenSize.width() / 2, screenSize.height() / 2));
- container->setMaximumSize(screenSize);
- container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- container->setFocusPolicy(Qt::StrongFocus);
-
- widget->setWindowTitle(QStringLiteral("Average temperatures in Oulu, Finland (2006-2012)"));
-
- hLayout->addWidget(container, 1);
- hLayout->addLayout(vLayout);
-
- QPushButton *dataButton = new QPushButton(widget);
- dataButton->setText(QStringLiteral("Insert a row of data"));
- dataButton->setEnabled(false);
-
- QPushButton *multiDataButton = new QPushButton(widget);
- multiDataButton->setText(QStringLiteral("Insert many rows of data"));
- multiDataButton->setEnabled(false);
-
- QPushButton *changeSingleDataButton = new QPushButton(widget);
- changeSingleDataButton->setText(QStringLiteral("Change selected bar value"));
- changeSingleDataButton->setEnabled(false);
-
- QPushButton *changeRowButton = new QPushButton(widget);
- changeRowButton->setText(QStringLiteral("Change selected row values"));
- changeRowButton->setEnabled(false);
-
- QPushButton *changeRowsButton = new QPushButton(widget);
- changeRowsButton->setText(QStringLiteral("Change three rows from selected"));
- changeRowsButton->setEnabled(false);
-
- QPushButton *removeRowButton = new QPushButton(widget);
- removeRowButton->setText(QStringLiteral("Remove selected row"));
- removeRowButton->setEnabled(false);
-
- QPushButton *removeRowsButton = new QPushButton(widget);
- removeRowsButton->setText(QStringLiteral("remove three rows from selected"));
- removeRowsButton->setEnabled(false);
-
- QPushButton *themeButton = new QPushButton(widget);
- themeButton->setText(QStringLiteral("Change theme"));
-
- QPushButton *labelButton = new QPushButton(widget);
- labelButton->setText(QStringLiteral("Change label style"));
-
- QPushButton *styleButton = new QPushButton(widget);
- styleButton->setText(QStringLiteral("Change bar style"));
-
- QPushButton *cameraButton = new QPushButton(widget);
- cameraButton->setText(QStringLiteral("Change camera preset"));
-
- QPushButton *selectionButton = new QPushButton(widget);
- selectionButton->setText(QStringLiteral("Change selection mode"));
-
- QCheckBox *backgroundCheckBox = new QCheckBox(widget);
- backgroundCheckBox->setText(QStringLiteral("Show background"));
- backgroundCheckBox->setChecked(true);
-
- QCheckBox *gridCheckBox = new QCheckBox(widget);
- gridCheckBox->setText(QStringLiteral("Show grid"));
- gridCheckBox->setChecked(true);
-
- QCheckBox *rotationCheckBox = new QCheckBox(widget);
- rotationCheckBox->setText("Rotate with slider");
-
- QCheckBox *staticCheckBox = new QCheckBox(widget);
- staticCheckBox->setText("Use dynamic data");
- staticCheckBox->setChecked(false);
-
- QSlider *rotationSliderX = new QSlider(Qt::Horizontal, widget);
- rotationSliderX->setTickInterval(1);
- rotationSliderX->setMinimum(-180);
- rotationSliderX->setValue(0);
- rotationSliderX->setMaximum(180);
- rotationSliderX->setEnabled(false);
- QSlider *rotationSliderY = new QSlider(Qt::Horizontal, widget);
- rotationSliderY->setTickInterval(1);
- rotationSliderY->setMinimum(0);
- rotationSliderY->setValue(0);
- rotationSliderY->setMaximum(90);
- rotationSliderY->setEnabled(false);
-
- QSlider *sizeSliderX = new QSlider(Qt::Horizontal, widget);
- sizeSliderX->setTickInterval(1);
- sizeSliderX->setMinimum(1);
- sizeSliderX->setValue(100);
- sizeSliderX->setMaximum(100);
- QSlider *sizeSliderZ = new QSlider(Qt::Horizontal, widget);
- sizeSliderZ->setTickInterval(1);
- sizeSliderZ->setMinimum(1);
- sizeSliderZ->setValue(100);
- sizeSliderZ->setMaximum(100);
-
- QSlider *spacingSliderX = new QSlider(Qt::Horizontal, widget);
- spacingSliderX->setTickInterval(1);
- spacingSliderX->setMinimum(0);
- spacingSliderX->setValue(10);
- spacingSliderX->setMaximum(200);
- QSlider *spacingSliderZ = new QSlider(Qt::Horizontal, widget);
- spacingSliderZ->setTickInterval(1);
- spacingSliderZ->setMinimum(0);
- spacingSliderZ->setValue(10);
- spacingSliderZ->setMaximum(200);
-
- QSlider *sampleSliderX = new QSlider(Qt::Horizontal, widget);
- sampleSliderX->setTickInterval(1);
- sampleSliderX->setMinimum(2);
- sampleSliderX->setValue(10);
- sampleSliderX->setMaximum(200);
- sampleSliderX->setEnabled(false);
- QSlider *sampleSliderZ = new QSlider(Qt::Horizontal, widget);
- sampleSliderZ->setTickInterval(1);
- sampleSliderZ->setMinimum(2);
- sampleSliderZ->setValue(10);
- sampleSliderZ->setMaximum(200);
- sampleSliderZ->setEnabled(false);
-
- QSlider *fontSizeSlider = new QSlider(Qt::Horizontal, widget);
- fontSizeSlider->setTickInterval(1);
- fontSizeSlider->setMinimum(1);
- fontSizeSlider->setValue(20);
- fontSizeSlider->setMaximum(100);
-
- QFontComboBox *fontList = new QFontComboBox(widget);
-
- QComboBox *shadowQuality = new QComboBox(widget);
- shadowQuality->addItem(QStringLiteral("None"));
- shadowQuality->addItem(QStringLiteral("Low"));
- shadowQuality->addItem(QStringLiteral("Medium"));
- shadowQuality->addItem(QStringLiteral("High"));
- shadowQuality->setCurrentIndex(1);
-
- vLayout->addWidget(staticCheckBox, 0, Qt::AlignTop);
- vLayout->addWidget(rotationCheckBox, 0, Qt::AlignTop);
- vLayout->addWidget(rotationSliderX, 0, Qt::AlignTop);
- vLayout->addWidget(rotationSliderY, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust relative bar size")));
- vLayout->addWidget(sizeSliderX, 0, Qt::AlignTop);
- vLayout->addWidget(sizeSliderZ, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust relative bar spacing")));
- vLayout->addWidget(spacingSliderX, 0, Qt::AlignTop);
- vLayout->addWidget(spacingSliderZ, 0, Qt::AlignTop);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust sample count")));
- vLayout->addWidget(sampleSliderX, 0, Qt::AlignTop);
- vLayout->addWidget(sampleSliderZ, 1, Qt::AlignTop);
- vLayout->addWidget(dataButton, 0, Qt::AlignTop);
- vLayout->addWidget(multiDataButton, 0, Qt::AlignTop);
- vLayout->addWidget(changeSingleDataButton, 0, Qt::AlignTop);
- vLayout->addWidget(changeRowButton, 0, Qt::AlignTop);
- vLayout->addWidget(changeRowsButton, 0, Qt::AlignTop);
- vLayout->addWidget(removeRowButton, 0, Qt::AlignTop);
- vLayout->addWidget(removeRowsButton, 0, Qt::AlignTop);
- vLayout->addWidget(themeButton, 0, Qt::AlignTop);
- vLayout->addWidget(labelButton, 0, Qt::AlignTop);
- vLayout->addWidget(styleButton, 0, Qt::AlignTop);
- vLayout->addWidget(cameraButton, 0, Qt::AlignTop);
- vLayout->addWidget(selectionButton, 0, Qt::AlignTop);
- vLayout->addWidget(backgroundCheckBox);
- vLayout->addWidget(gridCheckBox);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality")));
- vLayout->addWidget(shadowQuality);
- vLayout->addWidget(new QLabel(QStringLiteral("Change font")));
- vLayout->addWidget(fontList);
- vLayout->addWidget(new QLabel(QStringLiteral("Adjust font size")));
- vLayout->addWidget(fontSizeSlider, 0, Qt::AlignTop);
- // TODO: Add example for setMeshFileName
-
- widget->show();
-
- ChartModifier *modifier = new ChartModifier(widgetchart);
-
- QObject::connect(rotationSliderX, &QSlider::valueChanged, modifier, &ChartModifier::rotateX);
- QObject::connect(rotationSliderY, &QSlider::valueChanged, modifier, &ChartModifier::rotateY);
-
- QObject::connect(sizeSliderX, &QSlider::valueChanged, modifier, &ChartModifier::setSpecsX);
- QObject::connect(sizeSliderZ, &QSlider::valueChanged, modifier, &ChartModifier::setSpecsZ);
-
- QObject::connect(spacingSliderX, &QSlider::valueChanged, modifier,
- &ChartModifier::setSpacingSpecsX);
- QObject::connect(spacingSliderZ, &QSlider::valueChanged, modifier,
- &ChartModifier::setSpacingSpecsZ);
-
- QObject::connect(sampleSliderX, &QSlider::valueChanged, modifier,
- &ChartModifier::setSampleCountX);
- QObject::connect(sampleSliderZ, &QSlider::valueChanged, modifier,
- &ChartModifier::setSampleCountZ);
-
- QObject::connect(shadowQuality, SIGNAL(currentIndexChanged(int)), modifier,
- SLOT(changeShadowQuality(int)));
- QObject::connect(modifier, &ChartModifier::shadowQualityChanged, shadowQuality,
- &QComboBox::setCurrentIndex);
- QObject::connect(widgetchart, &Q3DBars::shadowQualityChanged, modifier,
- &ChartModifier::shadowQualityUpdatedByVisual);
-
- QObject::connect(fontSizeSlider, &QSlider::valueChanged, modifier,
- &ChartModifier::changeFontSize);
-
- QObject::connect(styleButton, &QPushButton::clicked, modifier, &ChartModifier::changeStyle);
- QObject::connect(cameraButton, &QPushButton::clicked, modifier,
- &ChartModifier::changePresetCamera);
- QObject::connect(themeButton, &QPushButton::clicked, modifier, &ChartModifier::changeTheme);
- QObject::connect(labelButton, &QPushButton::clicked, modifier,
- &ChartModifier::changeTransparency);
- QObject::connect(dataButton, &QPushButton::clicked, modifier, &ChartModifier::addRow);
- QObject::connect(multiDataButton, &QPushButton::clicked, modifier, &ChartModifier::addRows);
- QObject::connect(changeSingleDataButton, &QPushButton::clicked, modifier, &ChartModifier::changeItem);
- QObject::connect(changeRowButton, &QPushButton::clicked, modifier, &ChartModifier::changeRow);
- QObject::connect(changeRowsButton, &QPushButton::clicked, modifier, &ChartModifier::changeRows);
- QObject::connect(removeRowButton, &QPushButton::clicked, modifier, &ChartModifier::removeRow);
- QObject::connect(removeRowsButton, &QPushButton::clicked, modifier, &ChartModifier::removeRows);
- QObject::connect(selectionButton, &QPushButton::clicked, modifier,
- &ChartModifier::changeSelectionMode);
-
- QObject::connect(fontList, &QFontComboBox::currentFontChanged, modifier,
- &ChartModifier::changeFont);
-
- QObject::connect(backgroundCheckBox, &QCheckBox::stateChanged, modifier,
- &ChartModifier::setBackgroundEnabled);
- QObject::connect(gridCheckBox, &QCheckBox::stateChanged, modifier,
- &ChartModifier::setGridEnabled);
-
- QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderX,
- &QSlider::setEnabled);
- QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderX,
- &QSlider::setValue);
- QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderY,
- &QSlider::setEnabled);
- QObject::connect(rotationCheckBox, &QCheckBox::stateChanged, rotationSliderY,
- &QSlider::setValue);
-
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, dataButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, multiDataButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeSingleDataButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeRowButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, changeRowsButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, removeRowButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, removeRowsButton,
- &QPushButton::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, sampleSliderX,
- &QSlider::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, sampleSliderZ,
- &QSlider::setEnabled);
- QObject::connect(staticCheckBox, &QCheckBox::stateChanged, modifier, &ChartModifier::restart);
-
- modifier->start();
-
- return app.exec();
-}
diff --git a/examples/widget/widget.pro b/examples/widget/widget.pro
deleted file mode 100644
index 2b4078a4..00000000
--- a/examples/widget/widget.pro
+++ /dev/null
@@ -1,10 +0,0 @@
-!include( ../examples.pri ) {
- error( "Couldn't find the examples.pri file!" )
-}
-
-SOURCES += main.cpp chart.cpp
-HEADERS += chart.h
-
-QT += widgets
-
-INSTALLS += target