From: robertlipe Date: Wed, 11 Jun 2014 01:59:59 +0000 (+0000) Subject: Zingo Anderson adds support for the Energympro sport watches. X-Git-Tag: archive/raspbian/1.10.0+ds-2+rpi1~1^2~12^2~11^2~98 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=971d54fdf5ac24ebfe0b5f2dfafdc7e14fb8478d;p=gpsbabel.git Zingo Anderson adds support for the Energympro sport watches. --- diff --git a/gpsbabel/Makefile.in b/gpsbabel/Makefile.in index 8fdd57fe1..4f23342ca 100644 --- a/gpsbabel/Makefile.in +++ b/gpsbabel/Makefile.in @@ -80,7 +80,7 @@ ALL_FMTS=$(MINIMAL_FMTS) gtm.o gpsutil.o \ pocketfms_bc.o pocketfms_fp.o pocketfms_wp.o naviguide.o enigma.o \ vpl.o teletype.o jogmap.o bushnell.o bushnell_trl.o wintec_tes.o \ subrip.o garmin_xt.o garmin_fit.o lowranceusr4.o \ - mtk_locus.o googledir.o mapbar_track.o mapfactor.o + mtk_locus.o googledir.o mapbar_track.o mapfactor.o energympro.o FMTS=@FMTS@ @@ -492,6 +492,7 @@ duplicate.o: duplicate.cc defs.h config.h queue.h zlib/zlib.h \ src/core/datetime.h filterdefs.h easygps.o: easygps.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \ gbfile.h cet.h cet_util.h inifile.h session.h src/core/datetime.h +energympro.o: energympro.cc defs.h config.h gbfile.h enigma.o: enigma.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h \ gbfile.h cet.h cet_util.h inifile.h session.h src/core/datetime.h exif.o: exif.cc defs.h config.h queue.h zlib/zlib.h zlib/zconf.h gbfile.h \ diff --git a/gpsbabel/energympro.cc b/gpsbabel/energympro.cc new file mode 100644 index 000000000..d4fe89477 --- /dev/null +++ b/gpsbabel/energympro.cc @@ -0,0 +1,317 @@ +/* + Handle energympro (GPS training watch) .cpo files + + Copyright (c) 2014 Zingo Andersen zingo@vectrace.com + Copyright (C) 2014 Robert Lipe, robertlipe+source@gpsbabel.org + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA + + */ + +#include "defs.h" +#include +#include + +#define MYNAME "energympro" + +static gbfile* file_in; + +typedef struct tagDATE +{ + uint8_t Year; + uint8_t Month; + uint8_t Day; +} tw_date; + +typedef struct tagTIME +{ + uint8_t Hour; + uint8_t Minute; + uint8_t Second; +} tw_time; + +typedef struct Workout + { + tw_date dateStart; // start date + tw_time timeStart; // start time + uint16_t TotalRecPt; // Total record Point + uint32_t TotalTime; // Total Time + uint32_t TotalDist; // Total Distance + uint16_t LapNumber; // Lap Number + uint16_t Calory; // Calory + uint32_t MaxSpeed; // Max Speed + uint32_t AvgSpeed; // average Speed + uint8_t MaxHeart; // Max Heartrate + uint8_t AvgHeart; // average Heart + uint16_t Ascent; // Ascent + uint16_t Descent; // Descent + int16_t MinAlti; // Min Altitude + int16_t MaxAlti; // Max Altitude + uint8_t AvgCad; // average Cadence + uint8_t MaxCad; // Best Cadence + uint16_t AvgPower; // average Power + uint16_t MaxPower; // Max Power + char VersionProduct[15]; + uint8_t reserved1; + uint8_t VersionVerNum; + uint8_t reserved2[17]; + } tw_workout; + + +typedef struct Point + { + uint32_t Latitude; + uint32_t Longitude; + int16_t Altitude; + uint16_t reserved1; + uint32_t Speed; + uint16_t IntervalDist; // Interval Distance + uint16_t reserved2; + uint32_t lntervalTime; // Interval time + uint8_t Status; //Status (0 = ok, 1 = miss, 2 = no good, 3 = bad) + uint8_t HR_Heartrate; + uint8_t HR_Status; + uint8_t reserved3; + uint32_t Speed_Speed; + uint8_t Speed_Status; + uint8_t reserved4; + uint8_t reserved5; + uint8_t reserved6; + uint8_t Cadence_Cadence; + uint8_t Cadence_Status; + uint16_t Power_Cadence; + uint16_t Power_Power; + uint8_t Power_Status; + uint8_t reserved7; + uint8_t Temp; + uint8_t reserved8; + uint8_t reserved9; + uint8_t reserved10; + } tw_point; + +typedef struct Lap + { + uint32_t splitTime; // split time + uint32_t TotalTime; // Total Time + uint16_t Number; // Number + uint16_t reserved1; + uint32_t lDistance; // Distance + uint16_t Calorie; // Calorie + uint16_t reserved2; + uint32_t MaxSpeed; // Max Speed + uint32_t AvgSpeed; // average Speed + uint8_t MaxHeartrate; // Max Heartrate + uint8_t AvgHeartrate; // average Heartrate + int16_t MinAlti; // Min Altitude + int16_t MaxAlti; // Max Altitude + uint8_t AvgCad; // average Cadence + uint8_t MaxCad; // Max Cadence + uint16_t AvgPower; // average Power + uint16_t MaxPower; // Max Power + uint16_t StartRecPt; // start record point + uint16_t FinishRecPt; // Finish record point + } tw_lap; + + +//******************************************************************************* +// local helper functions +//******************************************************************************* +static void +read_point(route_head* gpsbabel_route,gpsbabel::DateTime& gpsDateTime) +{ + tw_point point; + gbfread(&point,sizeof(tw_point),1,file_in); + if (global_opts.debug_level > 1) { + printf ("Point: lat:%8d long:%8d alt:%8d ",point.Latitude,point.Longitude,point.Altitude); + printf ("speed:%6d dist:%5d time:%5d Status:%1d", point.Speed,point.IntervalDist,point.lntervalTime,point.Status); + printf ("HR:(%3d,%1d)" , point.HR_Heartrate,point.HR_Status); + printf ("Speed:(%8d,%1d)" , point.Speed_Speed,point.Speed_Status); + printf ("Cad:(%3d,%1d)" , point.Cadence_Cadence, point.Cadence_Status); + printf ("Power (Cad:%6d Pow:%6d,%2d)Temp:%3d\n" , point.Power_Cadence, point.Power_Power, point.Power_Status, point.Temp); + + qDebug() << "DateTime1:" << gpsDateTime.toString(); + qDebug() << "point.lntervalTime:" << point.lntervalTime; + } + + //Time from last point in sec's * 10 (e.g. point.lntervalTime is sec multiplied witn 10) + // convert to milisecs + gpsbabel::DateTime gpsbabeltime = gpsDateTime.addMSecs(point.lntervalTime*100); + gpsDateTime.setDate(gpsbabeltime.date()); + gpsDateTime.setTime(gpsbabeltime.time()); + + //remove parts of sec (on purpose) on reported time, we keep track of parts of sec in + // global structure so we don't drift + qint64 mSecsSinceEpoc = gpsbabeltime.toMSecsSinceEpoch(); + gpsbabeltime.setMSecsSinceEpoch(mSecsSinceEpoc-mSecsSinceEpoc%1000); + + Waypoint* waypt; + waypt = new Waypoint; + waypt->latitude = (point.Latitude / (double)1000000); + waypt->longitude = (point.Longitude / (double)1000000); + waypt->altitude = point.Altitude; + + if (global_opts.debug_level > 1) { + qDebug() << "DateTime2:" << gpsDateTime.toString(); + } + + waypt->SetCreationTime(gpsbabeltime); + + if (point.Speed_Status == 0) { + WAYPT_SET(waypt, speed, point.Speed_Speed / 100.0f); + } + if (point.HR_Status == 0) { + waypt->heartrate = point.HR_Heartrate; + } + if (point.Cadence_Status == 0) { + waypt->cadence = point.Cadence_Cadence; + } + if (point.Power_Status == 0) { + waypt->power = point.Power_Power; + } + WAYPT_SET(waypt, temperature, point.Temp); + track_add_wpt(gpsbabel_route, waypt); +} + + +static void +read_lap(void) +{ + tw_lap lap; + gbfread(&lap,sizeof(tw_lap),1,file_in); + if (global_opts.debug_level > 1) { + printf ("LAP: splitTime:%6ds TotalTime:%6ds LapNumber:%5d ",lap.splitTime/10,lap.TotalTime/10,lap.Number); + printf ("dist:%08dm Cal:%5d Speed:(%6d,%6d) ", lap.lDistance,lap.Calorie,lap.MaxSpeed,lap.AvgSpeed); + printf ("HR:(%3d,%3d)" , lap.MaxHeartrate,lap.AvgHeartrate); + printf ("Alt:(%6d,%6d) ", lap.MinAlti,lap.MaxAlti); + printf ("Cad:(%3d,%3d) ", lap.AvgCad,lap.MaxCad); + printf ("Power:(%3d,%3d)w ", lap.AvgPower,lap.MaxPower); + printf ("Pt:(%6d,%6d)\n", lap.StartRecPt,lap.FinishRecPt); + } +} + +//******************************************************************************* +// global callbacks called by gpsbabel main process +//******************************************************************************* + +static void +rd_init(const char* fname) +{ + if (global_opts.debug_level > 1) { + printf (MYNAME " rd_deinit()\n"); + } + gbfile* fileorg_in = gbfopen(fname, "rb", MYNAME); + + /* copy file to memory stream (needed for seek-ops and piped commands) */ + file_in = gbfopen(NULL, "wb", MYNAME); + gbsize_t size; + size = gbfcopyfrom(file_in, fileorg_in, 0x7FFFFFFF); + if(global_opts.debug_level > 1) { + printf (MYNAME " filesize=%d\n",size); + } + gbfclose(fileorg_in); +} + +static void +rd_deinit(void) +{ + if (global_opts.debug_level > 1) { + printf (MYNAME " rd_deinit()\n"); + } + gbfclose(file_in); +} + +static void +track_read(void) +{ + if(global_opts.debug_level > 1) { + printf (MYNAME " waypoint_read()\n"); + } + + gbfseek(file_in, 0L, SEEK_END); + gbfseek(file_in, (int32_t) -(sizeof(tw_workout)), SEEK_CUR); + tw_workout workout; + workout.dateStart.Year = gbfgetc(file_in); + workout.dateStart.Month = gbfgetc(file_in); + workout.dateStart.Day = gbfgetc(file_in); + workout.timeStart.Hour = gbfgetc(file_in); + workout.timeStart.Minute = gbfgetc(file_in); + workout.timeStart.Second = gbfgetc(file_in); + workout.TotalRecPt = gbfgetint16(file_in); + workout.TotalTime = gbfgetint32(file_in); + workout.TotalDist = gbfgetint32(file_in); + workout.LapNumber = gbfgetint16(file_in); + workout.Calory = gbfgetint16(file_in); + workout.MaxSpeed = gbfgetint32(file_in); + workout.AvgSpeed = gbfgetint32(file_in); + workout.MaxHeart = gbfgetc(file_in); + workout.AvgHeart = gbfgetc(file_in); + + if (global_opts.debug_level > 1) { + printf ("%04d-%02d-%02d ", workout.dateStart.Year+2000,workout.dateStart.Month, workout.dateStart.Day); + printf ("%02d:%02d:%02d ", workout.timeStart.Hour,workout.timeStart.Minute, workout.timeStart.Second); + printf ("Total(RecPt:%6d Time:%6ds Dist:%9dm) LapNumber:%5d \n",workout.TotalRecPt,workout.TotalTime/10, workout.TotalDist, workout.LapNumber); + } + + /* + * GPS year: 2000+; struct tm year: 1900+ + */ + QDate gpsDate = QDate(workout.dateStart.Year+2000,workout.dateStart.Month,workout.dateStart.Day); + QTime gpsTime = QTime(workout.timeStart.Hour,workout.timeStart.Minute,workout.timeStart.Second); + gpsbabel::DateTime gpsDateTime = gpsbabel::DateTime(gpsDate,gpsTime); + gpsDateTime.setTimeSpec(Qt::UTC); + route_head* gpsbabel_route = route_head_alloc(); + + track_add_head(gpsbabel_route); + gbfseek(file_in, 0L, SEEK_SET); + + for(int point=0;point 1) { + printf (MYNAME " data_read()\n"); + } + + track_read(); +} + + +ff_vecs_t energympro_vecs = { + ff_type_file, + { + ff_cap_none, // waypoints + ff_cap_read, // tracks + ff_cap_none // routes + }, + rd_init, // rd_init + NULL, // wr_init + rd_deinit, // rd_deinit + NULL, // wr_deinit + data_read, // read + NULL, // write + NULL, // exit + NULL, //args + CET_CHARSET_ASCII, 0 //encode,fixed_encode + //NULL //name dynamic/internal? +}; diff --git a/gpsbabel/gui/mainwindow.cc b/gpsbabel/gui/mainwindow.cc index 3ca27c5d1..d7f670e78 100644 --- a/gpsbabel/gui/mainwindow.cc +++ b/gpsbabel/gui/mainwindow.cc @@ -955,6 +955,8 @@ void MainWindow::applyActionX() args << "-r"; if (babelData_.xlateTracks_ && ifmt.isReadTracks() && ofmt.isWriteTracks()) args << "-t"; + + args << "-vs"; // Input type, with options bool iisFile = (babelData_.inputType_ == BabelData::fileType_); diff --git a/gpsbabel/gui/processwait.cc b/gpsbabel/gui/processwait.cc index 6160b73a8..cd756bfa8 100644 --- a/gpsbabel/gui/processwait.cc +++ b/gpsbabel/gui/processwait.cc @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -98,6 +99,7 @@ ProcessWaitDialog::ProcessWaitDialog(QWidget *parent, QProcess *process): bufferedOut_ = ""; // +#if 0 for (int i=0; i<=100; i+=2) progressVals_.push_back(i); for (int i=98; i>0; i-=2) @@ -112,7 +114,7 @@ ProcessWaitDialog::ProcessWaitDialog(QWidget *parent, QProcess *process): ecode_ = 0; timer_->start(); errorString_ = ""; - +#endif } //------------------------------------------------------------------------ @@ -143,6 +145,7 @@ void ProcessWaitDialog::stopClickedX() process_->terminate(); }; //------------------------------------------------------------------------ + void ProcessWaitDialog::timeoutX() { progressIndex_++; @@ -172,7 +175,9 @@ void ProcessWaitDialog::finishedX(int exitCode, QProcess::ExitStatus es) ecode_ = exitCode; if (es == QProcess::CrashExit) errorString_ = QString(tr("Process crashed whle running")); - timer_->stop(); + if (timer_ != NULL) { +// timer_->stop(); + } accept(); }; @@ -201,14 +206,30 @@ void ProcessWaitDialog::appendToText(const char *ptr) void ProcessWaitDialog::readyReadStandardErrorX() { QByteArray d = process_->readAllStandardError(); - appendToText(d.data()); +qDebug() << d; +// appendToText(d.data()); }; //------------------------------------------------------------------------ void ProcessWaitDialog::readyReadStandardOutputX() - { +{ QByteArray d = process_->readAllStandardOutput(); - appendToText(d.data()); + QString status(d); + QStringList completion = QString(d).split("/"); + + // We'll sometimes get > 1. This will also consume anything to stdout + // that isn't a vs output. We'll see if that's OK. + if (completion.size() == 0) { + appendToText(d.data()); + return; + } + if (completion.size() >= 3 && + completion[2].toInt() > progressBar_->maximum()) { + progressBar_->setRange(0, completion[2].toInt()); + } + if (completion.size() >= 2) { + progressBar_->setValue(completion[1].toInt()); + } }; void ProcessWaitDialog::closeEvent(QCloseEvent *event) diff --git a/gpsbabel/reference/track/energympro.cpo b/gpsbabel/reference/track/energympro.cpo new file mode 100644 index 000000000..aaef1e86c Binary files /dev/null and b/gpsbabel/reference/track/energympro.cpo differ diff --git a/gpsbabel/reference/track/energympro.gpx b/gpsbabel/reference/track/energympro.gpx new file mode 100644 index 000000000..d00c60110 --- /dev/null +++ b/gpsbabel/reference/track/energympro.gpx @@ -0,0 +1,10982 @@ + + + + + + + + + + 78.000000 + + + + 129.000000 + 91 + + + + + 78.000000 + + + + 129.000000 + 90 + + + + + 78.000000 + + + + 129.000000 + 90 + + + + + 78.000000 + + + + 129.000000 + 90 + + + + + 77.000000 + + + + 129.000000 + 113 + + + + + 77.000000 + + + + 129.000000 + 113 + + + + + 76.000000 + + + + 129.000000 + 113 + + + + + 74.000000 + + + + 129.000000 + 113 + + + + + 73.000000 + + + + 129.000000 + 113 + + + + + 71.000000 + + + + 129.000000 + 113 + + + + + 70.000000 + + + + 129.000000 + + + + + 68.000000 + + + + 129.000000 + + + + + 66.000000 + + + + 129.000000 + + + + + 65.000000 + + + + 129.000000 + + + + + 64.000000 + + + + 129.000000 + + + + + 63.000000 + + + + 129.000000 + + + + + 62.000000 + + + + 129.000000 + + + + + 62.000000 + + + + 129.000000 + + + + + 61.000000 + + + + 129.000000 + + + + + 60.000000 + + + + 129.000000 + + + + + 59.000000 + + + + 129.000000 + + + + + 58.000000 + + + + 129.000000 + + + + + 58.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 56.000000 + + + + 129.000000 + + + + + 55.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 55.000000 + + + + 129.000000 + + + + + 55.000000 + + + + 129.000000 + + + + + 56.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 56.000000 + + + + 129.000000 + + + + + 55.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 49.000000 + + + + 129.000000 + + + + + 49.000000 + + + + 129.000000 + + + + + 49.000000 + + + + 129.000000 + + + + + 48.000000 + + + + 129.000000 + + + + + 49.000000 + + + + 129.000000 + + + + + 49.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 49.000000 + + + + 129.000000 + + + + + 48.000000 + + + + 129.000000 + + + + + 48.000000 + + + + 129.000000 + + + + + 47.000000 + + + + 129.000000 + + + + + 47.000000 + + + + 129.000000 + + + + + 47.000000 + + + + 129.000000 + + + + + 48.000000 + + + + 129.000000 + + + + + 48.000000 + + + + 129.000000 + + + + + 48.000000 + + + + 129.000000 + + + + + 49.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 50.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 52.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 55.000000 + + + + 129.000000 + + + + + 55.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + + + + + 55.000000 + + + + 129.000000 + + + + + 56.000000 + + + + 129.000000 + + + + + 56.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + + + + + 55.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + + + + + 49.000000 + + + + 129.000000 + + + + + 47.000000 + + + + 129.000000 + + + + + 45.000000 + + + + 129.000000 + 113 + + + + + 43.000000 + + + + 129.000000 + 113 + + + + + 41.000000 + + + + 129.000000 + 113 + + + + + 39.000000 + + + + 129.000000 + 113 + + + + + 38.000000 + + + + 129.000000 + 113 + + + + + 37.000000 + + + + 129.000000 + + + + + 36.000000 + + + + 129.000000 + + + + + 36.000000 + + + + 129.000000 + + + + + 36.000000 + + + + 129.000000 + + + + + 37.000000 + + + + 129.000000 + + + + + 38.000000 + + + + 129.000000 + 113 + + + + + 39.000000 + + + + 129.000000 + 113 + + + + + 40.000000 + + + + 129.000000 + 113 + + + + + 41.000000 + + + + 129.000000 + 113 + + + + + 42.000000 + + + + 129.000000 + 113 + + + + + 43.000000 + + + + 129.000000 + 113 + + + + + 43.000000 + + + + 129.000000 + + + + + 44.000000 + + + + 129.000000 + 113 + + + + + 43.000000 + + + + 129.000000 + 113 + + + + + 43.000000 + + + + 129.000000 + 113 + + + + + 44.000000 + + + + 129.000000 + 113 + + + + + 44.000000 + + + + 129.000000 + 113 + + + + + 44.000000 + + + + 129.000000 + 113 + + + + + 44.000000 + + + + 129.000000 + + + + + 44.000000 + + + + 129.000000 + + + + + 44.000000 + + + + 129.000000 + + + + + 45.000000 + + + + 129.000000 + 154 + + + + + 46.000000 + + + + 129.000000 + 154 + + + + + 47.000000 + + + + 129.000000 + 154 + + + + + 47.000000 + + + + 129.000000 + 154 + + + + + 48.000000 + + + + 129.000000 + 154 + + + + + 48.000000 + + + + 129.000000 + 139 + + + + + 48.000000 + + + + 129.000000 + 139 + + + + + 49.000000 + + + + 129.000000 + 139 + + + + + 50.000000 + + + + 129.000000 + 139 + + + + + 51.000000 + + + + 129.000000 + 139 + + + + + 53.000000 + + + + 129.000000 + 139 + + + + + 56.000000 + + + + 129.000000 + 139 + + + + + 59.000000 + + + + 129.000000 + 149 + + + + + 62.000000 + + + + 129.000000 + 149 + + + + + 65.000000 + + + + 129.000000 + 149 + + + + + 67.000000 + + + + 129.000000 + + + + + 68.000000 + + + + 129.000000 + 149 + + + + + 69.000000 + + + + 129.000000 + 149 + + + + + 68.000000 + + + + 129.000000 + 149 + + + + + 67.000000 + + + + 129.000000 + 153 + + + + + 66.000000 + + + + 129.000000 + 153 + + + + + 64.000000 + + + + 129.000000 + 153 + + + + + 63.000000 + + + + 129.000000 + 153 + + + + + 62.000000 + + + + 129.000000 + 155 + + + + + 61.000000 + + + + 129.000000 + 155 + + + + + 60.000000 + + + + 129.000000 + 155 + + + + + 60.000000 + + + + 129.000000 + 149 + + + + + 60.000000 + + + + 129.000000 + 149 + + + + + 60.000000 + + + + 129.000000 + 149 + + + + + 61.000000 + + + + 129.000000 + 149 + + + + + 62.000000 + + + + 129.000000 + 149 + + + + + 63.000000 + + + + 129.000000 + 140 + + + + + 64.000000 + + + + 129.000000 + 140 + + + + + 65.000000 + + + + 129.000000 + 140 + + + + + 66.000000 + + + + 129.000000 + 140 + + + + + 66.000000 + + + + 129.000000 + 143 + + + + + 66.000000 + + + + 129.000000 + 143 + + + + + 65.000000 + + + + 129.000000 + 140 + + + + + 65.000000 + + + + 129.000000 + 140 + + + + + 64.000000 + + + + 129.000000 + 140 + + + + + 64.000000 + + + + 129.000000 + 137 + + + + + 63.000000 + + + + 129.000000 + 137 + + + + + 62.000000 + + + + 129.000000 + 137 + + + + + 61.000000 + + + + 129.000000 + 138 + + + + + 60.000000 + + + + 129.000000 + 138 + + + + + 59.000000 + + + + 129.000000 + 140 + + + + + 59.000000 + + + + 129.000000 + 140 + + + + + 59.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 136 + + + + + 61.000000 + + + + 129.000000 + 136 + + + + + 62.000000 + + + + 129.000000 + 136 + + + + + 62.000000 + + + + 129.000000 + 136 + + + + + 62.000000 + + + + 129.000000 + 136 + + + + + 62.000000 + + + + 129.000000 + 136 + + + + + 62.000000 + + + + 129.000000 + 141 + + + + + 62.000000 + + + + 129.000000 + 141 + + + + + 61.000000 + + + + 129.000000 + 141 + + + + + 61.000000 + + + + 129.000000 + 141 + + + + + 60.000000 + + + + 129.000000 + 141 + + + + + 59.000000 + + + + 129.000000 + 141 + + + + + 58.000000 + + + + 129.000000 + 141 + + + + + 57.000000 + + + + 129.000000 + 140 + + + + + 56.000000 + + + + 129.000000 + 140 + + + + + 56.000000 + + + + 129.000000 + 140 + + + + + 55.000000 + + + + 129.000000 + 140 + + + + + 55.000000 + + + + 129.000000 + 143 + + + + + 54.000000 + + + + 129.000000 + 143 + + + + + 54.000000 + + + + 129.000000 + 143 + + + + + 54.000000 + + + + 129.000000 + 148 + + + + + 54.000000 + + + + 129.000000 + 148 + + + + + 54.000000 + + + + 129.000000 + 148 + + + + + 54.000000 + + + + 129.000000 + 148 + + + + + 54.000000 + + + + 129.000000 + 148 + + + + + 54.000000 + + + + 129.000000 + 148 + + + + + 54.000000 + + + + 129.000000 + 148 + + + + + 54.000000 + + + + 129.000000 + 142 + + + + + 54.000000 + + + + 129.000000 + 142 + + + + + 55.000000 + + + + 129.000000 + 142 + + + + + 56.000000 + + + + 129.000000 + 136 + + + + + 56.000000 + + + + 129.000000 + 136 + + + + + 58.000000 + + + + 129.000000 + 135 + + + + + 59.000000 + + + + 129.000000 + 135 + + + + + 60.000000 + + + + 129.000000 + 135 + + + + + 61.000000 + + + + 129.000000 + 139 + + + + + 61.000000 + + + + 129.000000 + 139 + + + + + 61.000000 + + + + 129.000000 + 142 + + + + + 61.000000 + + + + 129.000000 + 142 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 59.000000 + + + + 129.000000 + 134 + + + + + 57.000000 + + + + 129.000000 + 130 + + + + + 56.000000 + + + + 129.000000 + 130 + + + + + 55.000000 + + + + 129.000000 + 130 + + + + + 53.000000 + + + + 129.000000 + 131 + + + + + 52.000000 + + + + 129.000000 + 131 + + + + + 52.000000 + + + + 129.000000 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 131 + + + + + 51.000000 + + + + 129.000000 + 131 + + + + + 51.000000 + + + + 129.000000 + 131 + + + + + 50.000000 + + + + 129.000000 + 131 + + + + + 50.000000 + + + + 129.000000 + 134 + + + + + 50.000000 + + + + 129.000000 + 134 + + + + + 50.000000 + + + + 129.000000 + 130 + + + + + 50.000000 + + + + 129.000000 + 130 + + + + + 50.000000 + + + + 129.000000 + 130 + + + + + 50.000000 + + + + 129.000000 + 132 + + + + + 50.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 52.000000 + + + + 129.000000 + + + + + 53.000000 + + + + 129.000000 + 132 + + + + + 55.000000 + + + + 129.000000 + 132 + + + + + 56.000000 + + + + 129.000000 + 132 + + + + + 58.000000 + + + + 129.000000 + 132 + + + + + 60.000000 + + + + 129.000000 + 130 + + + + + 62.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 65.000000 + + + + 129.000000 + 130 + + + + + 66.000000 + + + + 129.000000 + 131 + + + + + 67.000000 + + + + 129.000000 + 131 + + + + + 67.000000 + + + + 129.000000 + 131 + + + + + 68.000000 + + + + 129.000000 + 131 + + + + + 67.000000 + + + + 129.000000 + 131 + + + + + 67.000000 + + + + 129.000000 + 131 + + + + + 67.000000 + + + + 129.000000 + 139 + + + + + 66.000000 + + + + 129.000000 + 139 + + + + + 66.000000 + + + + 129.000000 + 135 + + + + + 66.000000 + + + + 129.000000 + 135 + + + + + 65.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 63.000000 + + + + 129.000000 + 130 + + + + + 63.000000 + + + + 129.000000 + 124 + + + + + 64.000000 + + + + 129.000000 + 124 + + + + + 64.000000 + + + + 129.000000 + 123 + + + + + 64.000000 + + + + 129.000000 + 123 + + + + + 65.000000 + + + + 129.000000 + 123 + + + + + 65.000000 + + + + 129.000000 + 121 + + + + + 65.000000 + + + + 129.000000 + 121 + + + + + 65.000000 + + + + 129.000000 + 127 + + + + + 65.000000 + + + + 129.000000 + 127 + + + + + 64.000000 + + + + 129.000000 + 131 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 61.000000 + + + + 129.000000 + 132 + + + + + 59.000000 + + + + 129.000000 + 132 + + + + + 58.000000 + + + + 129.000000 + 133 + + + + + 56.000000 + + + + 129.000000 + 133 + + + + + 54.000000 + + + + 129.000000 + 133 + + + + + 52.000000 + + + + 129.000000 + 133 + + + + + 50.000000 + + + + 129.000000 + 133 + + + + + 48.000000 + + + + 129.000000 + 133 + + + + + 46.000000 + + + + 129.000000 + 133 + + + + + 45.000000 + + + + 129.000000 + 133 + + + + + 44.000000 + + + + 129.000000 + 134 + + + + + 45.000000 + + + + 129.000000 + 134 + + + + + 46.000000 + + + + 129.000000 + 135 + + + + + 47.000000 + + + + 129.000000 + 135 + + + + + 49.000000 + + + + 129.000000 + 133 + + + + + 51.000000 + + + + 129.000000 + 133 + + + + + 53.000000 + + + + 129.000000 + 133 + + + + + 55.000000 + + + + 129.000000 + 133 + + + + + 57.000000 + + + + 129.000000 + 134 + + + + + 58.000000 + + + + 129.000000 + 134 + + + + + 59.000000 + + + + 129.000000 + 134 + + + + + 59.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 135 + + + + + 60.000000 + + + + 129.000000 + 135 + + + + + 60.000000 + + + + 129.000000 + 135 + + + + + 59.000000 + + + + 129.000000 + 135 + + + + + 59.000000 + + + + 129.000000 + 133 + + + + + 59.000000 + + + + 129.000000 + 133 + + + + + 59.000000 + + + + 129.000000 + 133 + + + + + 59.000000 + + + + 129.000000 + 133 + + + + + 59.000000 + + + + 129.000000 + 133 + + + + + 59.000000 + + + + 129.000000 + 133 + + + + + 59.000000 + + + + 129.000000 + 133 + + + + + 59.000000 + + + + 129.000000 + 133 + + + + + 61.000000 + + + + 129.000000 + 133 + + + + + 62.000000 + + + + 129.000000 + 132 + + + + + 64.000000 + + + + 129.000000 + 132 + + + + + 65.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 68.000000 + + + + 129.000000 + 132 + + + + + 69.000000 + + + + 129.000000 + 131 + + + + + 70.000000 + + + + 129.000000 + 131 + + + + + 71.000000 + + + + 129.000000 + 131 + + + + + 71.000000 + + + + 129.000000 + 131 + + + + + 71.000000 + + + + 129.000000 + 131 + + + + + 70.000000 + + + + 129.000000 + 131 + + + + + 70.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 67.000000 + + + + 129.000000 + 130 + + + + + 66.000000 + + + + 129.000000 + 130 + + + + + 65.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 131 + + + + + 63.000000 + + + + 129.000000 + 131 + + + + + 61.000000 + + + + 129.000000 + 132 + + + + + 59.000000 + + + + 129.000000 + 132 + + + + + 58.000000 + + + + 129.000000 + 132 + + + + + 57.000000 + + + + 129.000000 + 132 + + + + + 57.000000 + + + + 129.000000 + 132 + + + + + 57.000000 + + + + 129.000000 + 132 + + + + + 57.000000 + + + + 129.000000 + 131 + + + + + 57.000000 + + + + 129.000000 + 131 + + + + + 57.000000 + + + + 129.000000 + 131 + + + + + 57.000000 + + + + 129.000000 + 131 + + + + + 57.000000 + + + + 129.000000 + 133 + + + + + 57.000000 + + + + 129.000000 + 133 + + + + + 56.000000 + + + + 129.000000 + 133 + + + + + 56.000000 + + + + 129.000000 + 133 + + + + + 55.000000 + + + + 129.000000 + 134 + + + + + 55.000000 + + + + 129.000000 + 134 + + + + + 55.000000 + + + + 129.000000 + 133 + + + + + 56.000000 + + + + 129.000000 + 133 + + + + + 56.000000 + + + + 129.000000 + 133 + + + + + 57.000000 + + + + 129.000000 + 133 + + + + + 57.000000 + + + + 129.000000 + 132 + + + + + 58.000000 + + + + 129.000000 + 132 + + + + + 58.000000 + + + + 129.000000 + 134 + + + + + 59.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + + + + + 61.000000 + + + + 129.000000 + 134 + + + + + 62.000000 + + + + 129.000000 + 134 + + + + + 64.000000 + + + + 129.000000 + 133 + + + + + 66.000000 + + + + 129.000000 + 133 + + + + + 68.000000 + + + + 129.000000 + 132 + + + + + 70.000000 + + + + 129.000000 + 132 + + + + + 71.000000 + + + + 129.000000 + 132 + + + + + 73.000000 + + + + 129.000000 + 132 + + + + + 74.000000 + + + + 129.000000 + 136 + + + + + 75.000000 + + + + 129.000000 + 136 + + + + + 76.000000 + + + + 129.000000 + 136 + + + + + 76.000000 + + + + 129.000000 + 137 + + + + + 77.000000 + + + + 129.000000 + 137 + + + + + 77.000000 + + + + 129.000000 + 138 + + + + + 78.000000 + + + + 129.000000 + 138 + + + + + 78.000000 + + + + 129.000000 + 138 + + + + + 77.000000 + + + + 129.000000 + 137 + + + + + 77.000000 + + + + 129.000000 + 137 + + + + + 76.000000 + + + + 129.000000 + 140 + + + + + 76.000000 + + + + 129.000000 + 140 + + + + + 75.000000 + + + + 129.000000 + 140 + + + + + 74.000000 + + + + 129.000000 + 140 + + + + + 73.000000 + + + + 129.000000 + 140 + + + + + 72.000000 + + + + 129.000000 + 136 + + + + + 71.000000 + + + + 129.000000 + 136 + + + + + 71.000000 + + + + 129.000000 + 136 + + + + + 70.000000 + + + + 129.000000 + 133 + + + + + 70.000000 + + + + 129.000000 + 133 + + + + + 70.000000 + + + + 129.000000 + 137 + + + + + 70.000000 + + + + 129.000000 + 137 + + + + + 70.000000 + + + + 129.000000 + 136 + + + + + 70.000000 + + + + 129.000000 + 136 + + + + + 71.000000 + + + + 129.000000 + 134 + + + + + 71.000000 + + + + 129.000000 + 134 + + + + + 71.000000 + + + + 129.000000 + 134 + + + + + 72.000000 + + + + 129.000000 + 132 + + + + + 72.000000 + + + + 129.000000 + 132 + + + + + 73.000000 + + + + 129.000000 + 131 + + + + + 72.000000 + + + + 129.000000 + 131 + + + + + 72.000000 + + + + 129.000000 + 130 + + + + + 72.000000 + + + + 129.000000 + 130 + + + + + 72.000000 + + + + 129.000000 + 130 + + + + + 72.000000 + + + + 129.000000 + 130 + + + + + 72.000000 + + + + 129.000000 + 131 + + + + + 72.000000 + + + + 129.000000 + 131 + + + + + 73.000000 + + + + 129.000000 + 131 + + + + + 74.000000 + + + + 129.000000 + 135 + + + + + 74.000000 + + + + 129.000000 + 130 + + + + + 74.000000 + + + + 129.000000 + 130 + + + + + 74.000000 + + + + 129.000000 + 130 + + + + + 73.000000 + + + + 129.000000 + 130 + + + + + 72.000000 + + + + 129.000000 + 130 + + + + + 71.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 130 + + + + + 67.000000 + + + + 129.000000 + 130 + + + + + 66.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 61.000000 + + + + 129.000000 + 131 + + + + + 60.000000 + + + + 129.000000 + 128 + + + + + 60.000000 + + + + 129.000000 + 128 + + + + + 60.000000 + + + + 129.000000 + 133 + + + + + 61.000000 + + + + 129.000000 + 133 + + + + + 61.000000 + + + + 129.000000 + 133 + + + + + 62.000000 + + + + 129.000000 + 137 + + + + + 64.000000 + + + + 129.000000 + 137 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 65.000000 + + + + 129.000000 + 130 + + + + + 65.000000 + + + + 129.000000 + 129 + + + + + 65.000000 + + + + 129.000000 + 129 + + + + + 65.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 132 + + + + + 64.000000 + + + + 129.000000 + 132 + + + + + 62.000000 + + + + 129.000000 + 129 + + + + + 61.000000 + + + + 129.000000 + 129 + + + + + 60.000000 + + + + 129.000000 + 130 + + + + + 59.000000 + + + + 129.000000 + 130 + + + + + 58.000000 + + + + 129.000000 + 127 + + + + + 57.000000 + + + + 129.000000 + 127 + + + + + 56.000000 + + + + 129.000000 + 127 + + + + + 56.000000 + + + + 129.000000 + 126 + + + + + 55.000000 + + + + 129.000000 + 126 + + + + + 55.000000 + + + + 129.000000 + 132 + + + + + 54.000000 + + + + 129.000000 + 132 + + + + + 53.000000 + + + + 129.000000 + 135 + + + + + 52.000000 + + + + 129.000000 + 135 + + + + + 52.000000 + + + + 129.000000 + 134 + + + + + 51.000000 + + + + 129.000000 + 134 + + + + + 50.000000 + + + + 129.000000 + 134 + + + + + 50.000000 + + + + 129.000000 + 134 + + + + + 49.000000 + + + + 129.000000 + 133 + + + + + 49.000000 + + + + 129.000000 + 133 + + + + + 48.000000 + + + + 129.000000 + 133 + + + + + 48.000000 + + + + 129.000000 + 132 + + + + + 47.000000 + + + + 129.000000 + 132 + + + + + 47.000000 + + + + 129.000000 + 139 + + + + + 47.000000 + + + + 129.000000 + 139 + + + + + 47.000000 + + + + 129.000000 + 134 + + + + + 49.000000 + + + + 129.000000 + 134 + + + + + 51.000000 + + + + 129.000000 + 134 + + + + + 53.000000 + + + + 129.000000 + 130 + + + + + 56.000000 + + + + 129.000000 + 130 + + + + + 59.000000 + + + + 129.000000 + 132 + + + + + 62.000000 + + + + 129.000000 + 132 + + + + + 64.000000 + + + + 129.000000 + 132 + + + + + 66.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 133 + + + + + 68.000000 + + + + 129.000000 + 133 + + + + + 68.000000 + + + + 129.000000 + 133 + + + + + 68.000000 + + + + 129.000000 + 133 + + + + + 67.000000 + + + + 129.000000 + 133 + + + + + 67.000000 + + + + 129.000000 + 133 + + + + + 66.000000 + + + + 129.000000 + 133 + + + + + 65.000000 + + + + 129.000000 + 133 + + + + + 64.000000 + + + + 129.000000 + 133 + + + + + 64.000000 + + + + 129.000000 + 133 + + + + + 63.000000 + + + + 129.000000 + 133 + + + + + 63.000000 + + + + 129.000000 + 133 + + + + + 63.000000 + + + + 129.000000 + + + + + 63.000000 + + + + 129.000000 + 133 + + + + + 62.000000 + + + + 129.000000 + 134 + + + + + 63.000000 + + + + 129.000000 + 134 + + + + + 63.000000 + + + + 129.000000 + 134 + + + + + 63.000000 + + + + 129.000000 + 134 + + + + + 63.000000 + + + + 129.000000 + 134 + + + + + 63.000000 + + + + 129.000000 + 133 + + + + + 64.000000 + + + + 129.000000 + 133 + + + + + 65.000000 + + + + 129.000000 + 133 + + + + + 66.000000 + + + + 129.000000 + 133 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 68.000000 + + + + 129.000000 + 132 + + + + + 69.000000 + + + + 129.000000 + 131 + + + + + 70.000000 + + + + 129.000000 + 131 + + + + + 71.000000 + + + + 129.000000 + 131 + + + + + 72.000000 + + + + 129.000000 + 131 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 74.000000 + + + + 129.000000 + 130 + + + + + 74.000000 + + + + 129.000000 + 130 + + + + + 74.000000 + + + + 129.000000 + 129 + + + + + 74.000000 + + + + 129.000000 + 129 + + + + + 74.000000 + + + + 129.000000 + 129 + + + + + 74.000000 + + + + 129.000000 + 129 + + + + + 74.000000 + + + + 129.000000 + 128 + + + + + 74.000000 + + + + 129.000000 + 128 + + + + + 74.000000 + + + + 129.000000 + 128 + + + + + 73.000000 + + + + 129.000000 + 136 + + + + + 72.000000 + + + + 129.000000 + 136 + + + + + 72.000000 + + + + 129.000000 + 138 + + + + + 71.000000 + + + + 129.000000 + 138 + + + + + 70.000000 + + + + 129.000000 + 128 + + + + + 69.000000 + + + + 129.000000 + 128 + + + + + 68.000000 + + + + 129.000000 + 136 + + + + + 68.000000 + + + + 129.000000 + 136 + + + + + 67.000000 + + + + 129.000000 + 134 + + + + + 66.000000 + + + + 129.000000 + 134 + + + + + 66.000000 + + + + 129.000000 + 134 + + + + + 65.000000 + + + + 129.000000 + 127 + + + + + 65.000000 + + + + 129.000000 + 127 + + + + + 65.000000 + + + + 129.000000 + 128 + + + + + 65.000000 + + + + 129.000000 + 128 + + + + + 65.000000 + + + + 129.000000 + 128 + + + + + 65.000000 + + + + 129.000000 + 127 + + + + + 64.000000 + + + + 129.000000 + 127 + + + + + 63.000000 + + + + 129.000000 + 130 + + + + + 62.000000 + + + + 129.000000 + 130 + + + + + 61.000000 + + + + 129.000000 + 128 + + + + + 60.000000 + + + + 129.000000 + 128 + + + + + 60.000000 + + + + 129.000000 + 110 + + + + + 61.000000 + + + + 129.000000 + 112 + + + + + 61.000000 + + + + 129.000000 + 112 + + + + + 62.000000 + + + + 129.000000 + 112 + + + + + 63.000000 + + + + 129.000000 + 122 + + + + + 64.000000 + + + + 129.000000 + 122 + + + + + 65.000000 + + + + 129.000000 + 126 + + + + + 66.000000 + + + + 129.000000 + 126 + + + + + 66.000000 + + + + 129.000000 + 127 + + + + + 65.000000 + + + + 129.000000 + 127 + + + + + 65.000000 + + + + 129.000000 + 128 + + + + + 64.000000 + + + + 129.000000 + 128 + + + + + 63.000000 + + + + 129.000000 + 131 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 62.000000 + + + + 129.000000 + 130 + + + + + 62.000000 + + + + 129.000000 + 130 + + + + + 62.000000 + + + + 129.000000 + 126 + + + + + 63.000000 + + + + 129.000000 + 126 + + + + + 63.000000 + + + + 129.000000 + 127 + + + + + 64.000000 + + + + 129.000000 + 127 + + + + + 66.000000 + + + + 129.000000 + 127 + + + + + 67.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 132 + + + + + 69.000000 + + + + 129.000000 + 132 + + + + + 69.000000 + + + + 129.000000 + 132 + + + + + 70.000000 + + + + 129.000000 + 129 + + + + + 70.000000 + + + + 129.000000 + 129 + + + + + 70.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 121 + + + + + 68.000000 + + + + 129.000000 + 121 + + + + + 67.000000 + + + + 129.000000 + 121 + + + + + 66.000000 + + + + 129.000000 + 121 + + + + + 67.000000 + + + + 129.000000 + 121 + + + + + 67.000000 + + + + 129.000000 + 130 + + + + + 67.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 130 + + + + + 71.000000 + + + + 129.000000 + 130 + + + + + 71.000000 + + + + 129.000000 + 134 + + + + + 71.000000 + + + + 129.000000 + 134 + + + + + 71.000000 + + + + 129.000000 + 131 + + + + + 71.000000 + + + + 129.000000 + 131 + + + + + 70.000000 + + + + 129.000000 + 137 + + + + + 70.000000 + + + + 129.000000 + 137 + + + + + 69.000000 + + + + 129.000000 + 137 + + + + + 69.000000 + + + + 129.000000 + 138 + + + + + 68.000000 + + + + 129.000000 + 138 + + + + + 68.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 131 + + + + + 67.000000 + + + + 129.000000 + 131 + + + + + 67.000000 + + + + 129.000000 + 130 + + + + + 67.000000 + + + + 129.000000 + 130 + + + + + 67.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 131 + + + + + 68.000000 + + + + 129.000000 + 131 + + + + + 68.000000 + + + + 129.000000 + 131 + + + + + 67.000000 + + + + 129.000000 + 134 + + + + + 66.000000 + + + + 129.000000 + 131 + + + + + 65.000000 + + + + 129.000000 + 131 + + + + + 64.000000 + + + + 129.000000 + 131 + + + + + 64.000000 + + + + 129.000000 + 131 + + + + + 63.000000 + + + + 129.000000 + 131 + + + + + 63.000000 + + + + 129.000000 + 131 + + + + + 63.000000 + + + + 129.000000 + 131 + + + + + 63.000000 + + + + 129.000000 + + + + + 63.000000 + + + + 129.000000 + 128 + + + + + 63.000000 + + + + 129.000000 + 128 + + + + + 62.000000 + + + + 129.000000 + 128 + + + + + 62.000000 + + + + 129.000000 + 126 + + + + + 61.000000 + + + + 129.000000 + 126 + + + + + 59.000000 + + + + 129.000000 + 126 + + + + + 58.000000 + + + + 129.000000 + 134 + + + + + 56.000000 + + + + 129.000000 + 134 + + + + + 55.000000 + + + + 129.000000 + 133 + + + + + 53.000000 + + + + 129.000000 + 133 + + + + + 52.000000 + + + + 129.000000 + 133 + + + + + 51.000000 + + + + 129.000000 + 127 + + + + + 50.000000 + + + + 129.000000 + 127 + + + + + 50.000000 + + + + 129.000000 + 134 + + + + + 50.000000 + + + + 129.000000 + 134 + + + + + 50.000000 + + + + 129.000000 + 140 + + + + + 50.000000 + + + + 129.000000 + 140 + + + + + 51.000000 + + + + 129.000000 + 140 + + + + + 52.000000 + + + + 129.000000 + 138 + + + + + 53.000000 + + + + 129.000000 + 138 + + + + + 54.000000 + + + + 129.000000 + 138 + + + + + 56.000000 + + + + 129.000000 + 135 + + + + + 56.000000 + + + + 129.000000 + 135 + + + + + 57.000000 + + + + 129.000000 + 134 + + + + + 57.000000 + + + + 129.000000 + 134 + + + + + 57.000000 + + + + 129.000000 + 134 + + + + + 57.000000 + + + + 129.000000 + 139 + + + + + 57.000000 + + + + 129.000000 + 139 + + + + + 58.000000 + + + + 129.000000 + 136 + + + + + 58.000000 + + + + 129.000000 + 136 + + + + + 59.000000 + + + + 129.000000 + 136 + + + + + 60.000000 + + + + 129.000000 + 133 + + + + + 61.000000 + + + + 129.000000 + 133 + + + + + 62.000000 + + + + 129.000000 + 129 + + + + + 64.000000 + + + + 129.000000 + 129 + + + + + 65.000000 + + + + 129.000000 + 129 + + + + + 65.000000 + + + + 129.000000 + 131 + + + + + 66.000000 + + + + 129.000000 + 131 + + + + + 66.000000 + + + + 129.000000 + 130 + + + + + 65.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 134 + + + + + 63.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 133 + + + + + 58.000000 + + + + 129.000000 + 133 + + + + + 57.000000 + + + + 129.000000 + 134 + + + + + 56.000000 + + + + 129.000000 + + + + + 57.000000 + + + + 129.000000 + 130 + + + + + 57.000000 + + + + 129.000000 + 130 + + + + + 58.000000 + + + + 129.000000 + 127 + + + + + 58.000000 + + + + 129.000000 + 127 + + + + + 59.000000 + + + + 129.000000 + 127 + + + + + 59.000000 + + + + 129.000000 + 132 + + + + + 59.000000 + + + + 129.000000 + 132 + + + + + 58.000000 + + + + 129.000000 + 132 + + + + + 56.000000 + + + + 129.000000 + 132 + + + + + 55.000000 + + + + 129.000000 + 132 + + + + + 54.000000 + + + + 129.000000 + 135 + + + + + 52.000000 + + + + 129.000000 + 135 + + + + + 51.000000 + + + + 129.000000 + 138 + + + + + 51.000000 + + + + 129.000000 + 138 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 53.000000 + + + + 129.000000 + 132 + + + + + 54.000000 + + + + 129.000000 + 132 + + + + + 55.000000 + + + + 129.000000 + 132 + + + + + 56.000000 + + + + 129.000000 + 132 + + + + + 56.000000 + + + + 129.000000 + 132 + + + + + 57.000000 + + + + 129.000000 + 133 + + + + + 57.000000 + + + + 129.000000 + 133 + + + + + 56.000000 + + + + 129.000000 + 133 + + + + + 55.000000 + + + + 129.000000 + 134 + + + + + 54.000000 + + + + 129.000000 + 134 + + + + + 52.000000 + + + + 129.000000 + 134 + + + + + 52.000000 + + + + 129.000000 + 134 + + + + + 51.000000 + + + + 129.000000 + 134 + + + + + 50.000000 + + + + 129.000000 + 135 + + + + + 49.000000 + + + + 129.000000 + 135 + + + + + 48.000000 + + + + 129.000000 + 135 + + + + + 48.000000 + + + + 129.000000 + 135 + + + + + 48.000000 + + + + 129.000000 + 135 + + + + + 49.000000 + + + + 129.000000 + 135 + + + + + 50.000000 + + + + 129.000000 + 135 + + + + + 51.000000 + + + + 129.000000 + 135 + + + + + 53.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + 135 + + + + + 55.000000 + + + + 129.000000 + 135 + + + + + 56.000000 + + + + 129.000000 + 134 + + + + + 56.000000 + + + + 129.000000 + 134 + + + + + 56.000000 + + + + 129.000000 + 134 + + + + + 56.000000 + + + + 129.000000 + 134 + + + + + 55.000000 + + + + 129.000000 + 138 + + + + + 54.000000 + + + + 129.000000 + 138 + + + + + 54.000000 + + + + 129.000000 + 138 + + + + + 54.000000 + + + + 129.000000 + 140 + + + + + 53.000000 + + + + 129.000000 + 140 + + + + + 53.000000 + + + + 129.000000 + 139 + + + + + 52.000000 + + + + 129.000000 + 139 + + + + + 51.000000 + + + + 129.000000 + 140 + + + + + 50.000000 + + + + 129.000000 + 140 + + + + + 49.000000 + + + + 129.000000 + 140 + + + + + 47.000000 + + + + 129.000000 + 135 + + + + + 47.000000 + + + + 129.000000 + 135 + + + + + 46.000000 + + + + 129.000000 + 135 + + + + + 47.000000 + + + + 129.000000 + 135 + + + + + 48.000000 + + + + 129.000000 + 131 + + + + + 49.000000 + + + + 129.000000 + 131 + + + + + 51.000000 + + + + 129.000000 + 131 + + + + + 54.000000 + + + + 129.000000 + 131 + + + + + 57.000000 + + + + 129.000000 + 132 + + + + + 60.000000 + + + + 129.000000 + 132 + + + + + 63.000000 + + + + 129.000000 + 132 + + + + + 66.000000 + + + + 129.000000 + 132 + + + + + 68.000000 + + + + 129.000000 + 133 + + + + + 70.000000 + + + + 129.000000 + 133 + + + + + 71.000000 + + + + 129.000000 + 133 + + + + + 72.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 72.000000 + + + + 129.000000 + 134 + + + + + 72.000000 + + + + 129.000000 + 134 + + + + + 71.000000 + + + + 129.000000 + 134 + + + + + 71.000000 + + + + 129.000000 + 134 + + + + + 71.000000 + + + + 129.000000 + 138 + + + + + 71.000000 + + + + 129.000000 + 138 + + + + + 71.000000 + + + + 129.000000 + 138 + + + + + 71.000000 + + + + 129.000000 + 138 + + + + + 71.000000 + + + + 129.000000 + 138 + + + + + 71.000000 + + + + 129.000000 + 133 + + + + + 71.000000 + + + + 129.000000 + 133 + + + + + 72.000000 + + + + 129.000000 + 131 + + + + + 72.000000 + + + + 129.000000 + 131 + + + + + 73.000000 + + + + 129.000000 + 131 + + + + + 75.000000 + + + + 129.000000 + 129 + + + + + 76.000000 + + + + 129.000000 + 129 + + + + + 77.000000 + + + + 129.000000 + 131 + + + + + 79.000000 + + + + 129.000000 + 131 + + + + + 80.000000 + + + + 129.000000 + 137 + + + + + 80.000000 + + + + 129.000000 + 137 + + + + + 81.000000 + + + + 129.000000 + 137 + + + + + 81.000000 + + + + 129.000000 + 138 + + + + + 80.000000 + + + + 129.000000 + 138 + + + + + 80.000000 + + + + 129.000000 + 135 + + + + + 80.000000 + + + + 129.000000 + 135 + + + + + 80.000000 + + + + 129.000000 + 136 + + + + + 81.000000 + + + + 129.000000 + 136 + + + + + 81.000000 + + + + 129.000000 + 135 + + + + + 82.000000 + + + + 129.000000 + 135 + + + + + 83.000000 + + + + 129.000000 + 134 + + + + + 84.000000 + + + + 129.000000 + 134 + + + + + 84.000000 + + + + 129.000000 + 137 + + + + + 84.000000 + + + + 129.000000 + 137 + + + + + 84.000000 + + + + 129.000000 + 137 + + + + + 83.000000 + + + + 129.000000 + 137 + + + + + 83.000000 + + + + 129.000000 + 137 + + + + + 81.000000 + + + + 129.000000 + 137 + + + + + 80.000000 + + + + 129.000000 + 137 + + + + + 79.000000 + + + + 129.000000 + 137 + + + + + 77.000000 + + + + 129.000000 + 137 + + + + + 76.000000 + + + + 129.000000 + 136 + + + + + 75.000000 + + + + 129.000000 + 136 + + + + + 74.000000 + + + + 129.000000 + 133 + + + + + 74.000000 + + + + 129.000000 + 133 + + + + + 74.000000 + + + + 129.000000 + 133 + + + + + 74.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 74.000000 + + + + 129.000000 + 134 + + + + + 74.000000 + + + + 129.000000 + 134 + + + + + 74.000000 + + + + 129.000000 + 134 + + + + + 74.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 140 + + + + + 72.000000 + + + + 129.000000 + 140 + + + + + 71.000000 + + + + 129.000000 + 145 + + + + + 69.000000 + + + + 129.000000 + 145 + + + + + 67.000000 + + + + 129.000000 + 139 + + + + + 65.000000 + + + + 129.000000 + 139 + + + + + 63.000000 + + + + 129.000000 + 138 + + + + + 61.000000 + + + + 129.000000 + 138 + + + + + 60.000000 + + + + 129.000000 + 136 + + + + + 58.000000 + + + + 129.000000 + 136 + + + + + 57.000000 + + + + 129.000000 + 135 + + + + + 56.000000 + + + + 129.000000 + 135 + + + + + 56.000000 + + + + 129.000000 + 135 + + + + + 56.000000 + + + + 129.000000 + 138 + + + + + 56.000000 + + + + 129.000000 + 138 + + + + + 56.000000 + + + + 129.000000 + 138 + + + + + 55.000000 + + + + 129.000000 + 138 + + + + + 55.000000 + + + + 129.000000 + 138 + + + + + 55.000000 + + + + 129.000000 + 133 + + + + + 55.000000 + + + + 129.000000 + 133 + + + + + 54.000000 + + + + 129.000000 + 133 + + + + + 54.000000 + + + + 129.000000 + 141 + + + + + 54.000000 + + + + 129.000000 + 141 + + + + + 54.000000 + + + + 129.000000 + + + + + 54.000000 + + + + 129.000000 + 141 + + + + + 53.000000 + + + + 129.000000 + 142 + + + + + 53.000000 + + + + 129.000000 + 142 + + + + + 53.000000 + + + + 129.000000 + 142 + + + + + 53.000000 + + + + 129.000000 + 134 + + + + + 53.000000 + + + + 129.000000 + 134 + + + + + 53.000000 + + + + 129.000000 + 135 + + + + + 53.000000 + + + + 129.000000 + 135 + + + + + 53.000000 + + + + 129.000000 + 135 + + + + + 53.000000 + + + + 129.000000 + 141 + + + + + 54.000000 + + + + 129.000000 + 137 + + + + + 54.000000 + + + + 129.000000 + 137 + + + + + 55.000000 + + + + 129.000000 + 131 + + + + + 56.000000 + + + + 129.000000 + 131 + + + + + 58.000000 + + + + 129.000000 + 131 + + + + + 60.000000 + + + + 129.000000 + 129 + + + + + 61.000000 + + + + 129.000000 + 129 + + + + + 62.000000 + + + + 129.000000 + 132 + + + + + 62.000000 + + + + 129.000000 + 132 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 62.000000 + + + + 129.000000 + 129 + + + + + 62.000000 + + + + 129.000000 + 129 + + + + + 63.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 66.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 69.000000 + + + + 129.000000 + 130 + + + + + 71.000000 + + + + 129.000000 + 130 + + + + + 72.000000 + + + + 129.000000 + 136 + + + + + 73.000000 + + + + 129.000000 + 136 + + + + + 73.000000 + + + + 129.000000 + 136 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 73.000000 + + + + 129.000000 + 133 + + + + + 71.000000 + + + + 129.000000 + 131 + + + + + 70.000000 + + + + 129.000000 + 131 + + + + + 69.000000 + + + + 129.000000 + 132 + + + + + 69.000000 + + + + 129.000000 + 132 + + + + + 68.000000 + + + + 129.000000 + 132 + + + + + 68.000000 + + + + 129.000000 + 135 + + + + + 67.000000 + + + + 129.000000 + 135 + + + + + 67.000000 + + + + 129.000000 + 133 + + + + + 67.000000 + + + + 129.000000 + 133 + + + + + 68.000000 + + + + 129.000000 + 133 + + + + + 68.000000 + + + + 129.000000 + 139 + + + + + 67.000000 + + + + 129.000000 + 139 + + + + + 66.000000 + + + + 129.000000 + 139 + + + + + 65.000000 + + + + 129.000000 + 139 + + + + + 64.000000 + + + + 129.000000 + 132 + + + + + 63.000000 + + + + 129.000000 + 132 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 62.000000 + + + + 129.000000 + 131 + + + + + 63.000000 + + + + 129.000000 + 130 + + + + + 64.000000 + + + + 129.000000 + 130 + + + + + 65.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 68.000000 + + + + 129.000000 + 136 + + + + + 70.000000 + + + + 129.000000 + 136 + + + + + 71.000000 + + + + 129.000000 + 134 + + + + + 72.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 74.000000 + + + + 129.000000 + 131 + + + + + 74.000000 + + + + 129.000000 + 131 + + + + + 74.000000 + + + + 129.000000 + 138 + + + + + 74.000000 + + + + 129.000000 + 138 + + + + + 73.000000 + + + + 129.000000 + 138 + + + + + 72.000000 + + + + 129.000000 + 132 + + + + + 71.000000 + + + + 129.000000 + 132 + + + + + 70.000000 + + + + 129.000000 + 132 + + + + + 69.000000 + + + + 129.000000 + 132 + + + + + 68.000000 + + + + 129.000000 + 132 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 66.000000 + + + + 129.000000 + 133 + + + + + 66.000000 + + + + 129.000000 + 133 + + + + + 66.000000 + + + + 129.000000 + 135 + + + + + 66.000000 + + + + 129.000000 + 135 + + + + + 65.000000 + + + + 129.000000 + 135 + + + + + 64.000000 + + + + 129.000000 + 139 + + + + + 64.000000 + + + + 129.000000 + 139 + + + + + 64.000000 + + + + 129.000000 + 140 + + + + + 64.000000 + + + + 129.000000 + 140 + + + + + 64.000000 + + + + 129.000000 + 142 + + + + + 63.000000 + + + + 129.000000 + 142 + + + + + 64.000000 + + + + 129.000000 + 136 + + + + + 64.000000 + + + + 129.000000 + 136 + + + + + 65.000000 + + + + 129.000000 + 130 + + + + + 66.000000 + + + + 129.000000 + 130 + + + + + 66.000000 + + + + 129.000000 + + + + + 66.000000 + + + + 129.000000 + 124 + + + + + 67.000000 + + + + 129.000000 + 135 + + + + + 67.000000 + + + + 129.000000 + 135 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 68.000000 + + + + 129.000000 + 130 + + + + + 67.000000 + + + + 129.000000 + 134 + + + + + 67.000000 + + + + 129.000000 + 134 + + + + + 67.000000 + + + + 129.000000 + 135 + + + + + 67.000000 + + + + 129.000000 + 135 + + + + + 67.000000 + + + + 129.000000 + 144 + + + + + 66.000000 + + + + 129.000000 + 144 + + + + + 66.000000 + + + + 129.000000 + 138 + + + + + 66.000000 + + + + 129.000000 + 138 + + + + + 66.000000 + + + + 129.000000 + 138 + + + + + 66.000000 + + + + 129.000000 + 138 + + + + + 67.000000 + + + + 129.000000 + 138 + + + + + 67.000000 + + + + 129.000000 + 138 + + + + + 67.000000 + + + + 129.000000 + 137 + + + + + 67.000000 + + + + 129.000000 + 137 + + + + + 68.000000 + + + + 129.000000 + 132 + + + + + 69.000000 + + + + 129.000000 + 132 + + + + + 70.000000 + + + + 129.000000 + 135 + + + + + 70.000000 + + + + 129.000000 + 135 + + + + + 71.000000 + + + + 129.000000 + 135 + + + + + 72.000000 + + + + 129.000000 + 132 + + + + + 74.000000 + + + + 129.000000 + 136 + + + + + 75.000000 + + + + 129.000000 + 136 + + + + + 77.000000 + + + + 129.000000 + 132 + + + + + 79.000000 + + + + 129.000000 + 132 + + + + + 82.000000 + + + + 129.000000 + 139 + + + + + 84.000000 + + + + 129.000000 + 139 + + + + + 86.000000 + + + + 129.000000 + 139 + + + + + 88.000000 + + + + 129.000000 + 135 + + + + + 89.000000 + + + + 129.000000 + 135 + + + + + 90.000000 + + + + 129.000000 + 135 + + + + + 91.000000 + + + + 129.000000 + 131 + + + + + 90.000000 + + + + 129.000000 + 133 + + + + + 89.000000 + + + + 129.000000 + 133 + + + + + 87.000000 + + + + 129.000000 + 133 + + + + + 85.000000 + + + + 129.000000 + 132 + + + + + 82.000000 + + + + 129.000000 + 132 + + + + + 79.000000 + + + + 129.000000 + 134 + + + + + 76.000000 + + + + 129.000000 + 134 + + + + + 73.000000 + + + + 129.000000 + 134 + + + + + 70.000000 + + + + 129.000000 + 130 + + + + + 67.000000 + + + + 129.000000 + 132 + + + + + 64.000000 + + + + 129.000000 + 132 + + + + + 62.000000 + + + + 129.000000 + 134 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 59.000000 + + + + 129.000000 + 135 + + + + + 59.000000 + + + + 129.000000 + 135 + + + + + 58.000000 + + + + 129.000000 + 136 + + + + + 59.000000 + + + + 129.000000 + 136 + + + + + 60.000000 + + + + 129.000000 + 136 + + + + + 61.000000 + + + + 129.000000 + 142 + + + + + 63.000000 + + + + 129.000000 + 142 + + + + + 63.000000 + + + + 129.000000 + 141 + + + + + 64.000000 + + + + 129.000000 + 141 + + + + + 64.000000 + + + + 129.000000 + 137 + + + + + 65.000000 + + + + 129.000000 + 137 + + + + + 64.000000 + + + + 129.000000 + 136 + + + + + 65.000000 + + + + 129.000000 + 136 + + + + + 66.000000 + + + + 129.000000 + 136 + + + + + 67.000000 + + + + 129.000000 + 136 + + + + + 68.000000 + + + + 129.000000 + 136 + + + + + 69.000000 + + + + 129.000000 + 136 + + + + + 71.000000 + + + + 129.000000 + 137 + + + + + 72.000000 + + + + 129.000000 + 137 + + + + + 72.000000 + + + + 129.000000 + 137 + + + + + 72.000000 + + + + 129.000000 + 136 + + + + + 72.000000 + + + + 129.000000 + 136 + + + + + 72.000000 + + + + 129.000000 + 136 + + + + + 71.000000 + + + + 129.000000 + 136 + + + + + 71.000000 + + + + 129.000000 + 136 + + + + + 70.000000 + + + + 129.000000 + 135 + + + + + 69.000000 + + + + 129.000000 + 135 + + + + + 67.000000 + + + + 129.000000 + 133 + + + + + 66.000000 + + + + 129.000000 + 133 + + + + + 65.000000 + + + + 129.000000 + 132 + + + + + 63.000000 + + + + 129.000000 + 132 + + + + + 62.000000 + + + + 129.000000 + 132 + + + + + 61.000000 + + + + 129.000000 + 132 + + + + + 61.000000 + + + + 129.000000 + 133 + + + + + 60.000000 + + + + 129.000000 + 133 + + + + + 60.000000 + + + + 129.000000 + 133 + + + + + 60.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 134 + + + + + 61.000000 + + + + 129.000000 + 136 + + + + + 60.000000 + + + + 129.000000 + 136 + + + + + 60.000000 + + + + 129.000000 + 137 + + + + + 60.000000 + + + + 129.000000 + 137 + + + + + 60.000000 + + + + 129.000000 + 137 + + + + + 60.000000 + + + + 129.000000 + 139 + + + + + 60.000000 + + + + 129.000000 + 138 + + + + + 60.000000 + + + + 129.000000 + 138 + + + + + 60.000000 + + + + 129.000000 + 138 + + + + + 61.000000 + + + + 129.000000 + 139 + + + + + 61.000000 + + + + 129.000000 + 139 + + + + + 61.000000 + + + + 129.000000 + 136 + + + + + 60.000000 + + + + 129.000000 + 136 + + + + + 60.000000 + + + + 129.000000 + 135 + + + + + 59.000000 + + + + 129.000000 + 135 + + + + + 58.000000 + + + + 129.000000 + 134 + + + + + 57.000000 + + + + 129.000000 + 134 + + + + + 56.000000 + + + + 129.000000 + 134 + + + + + 56.000000 + + + + 129.000000 + 137 + + + + + 55.000000 + + + + 129.000000 + 137 + + + + + 54.000000 + + + + 129.000000 + 134 + + + + + 54.000000 + + + + 129.000000 + 134 + + + + + 54.000000 + + + + 129.000000 + 133 + + + + + 53.000000 + + + + 129.000000 + 133 + + + + + 53.000000 + + + + 129.000000 + 133 + + + + + 53.000000 + + + + 129.000000 + 133 + + + + + 52.000000 + + + + 129.000000 + 133 + + + + + 52.000000 + + + + 129.000000 + 135 + + + + + 51.000000 + + + + 129.000000 + 135 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 132 + + + + + 51.000000 + + + + 129.000000 + 131 + + + + + 51.000000 + + + + 129.000000 + 131 + + + + + 50.000000 + + + + 129.000000 + 131 + + + + + 49.000000 + + + + 129.000000 + 134 + + + + + 48.000000 + + + + 129.000000 + 136 + + + + + 47.000000 + + + + 129.000000 + 136 + + + + + 46.000000 + + + + 129.000000 + 136 + + + + + 45.000000 + + + + 129.000000 + 135 + + + + + 43.000000 + + + + 129.000000 + 135 + + + + + 42.000000 + + + + 129.000000 + 140 + + + + + 42.000000 + + + + 129.000000 + 140 + + + + + 41.000000 + + + + 129.000000 + 140 + + + + + 40.000000 + + + + 129.000000 + 139 + + + + + 39.000000 + + + + 129.000000 + 139 + + + + + 39.000000 + + + + 129.000000 + 135 + + + + + 39.000000 + + + + 129.000000 + 135 + + + + + 39.000000 + + + + 129.000000 + 135 + + + + + 39.000000 + + + + 129.000000 + 135 + + + + + 39.000000 + + + + 129.000000 + 130 + + + + + 40.000000 + + + + 129.000000 + 130 + + + + + 41.000000 + + + + 129.000000 + 130 + + + + + 41.000000 + + + + 129.000000 + 130 + + + + + 42.000000 + + + + 129.000000 + 130 + + + + + 42.000000 + + + + 129.000000 + 130 + + + + + 43.000000 + + + + 129.000000 + 130 + + + + + 44.000000 + + + + 129.000000 + 135 + + + + + 44.000000 + + + + 129.000000 + 135 + + + + + 45.000000 + + + + 129.000000 + 135 + + + + + 45.000000 + + + + 129.000000 + 140 + + + + + 46.000000 + + + + 129.000000 + 137 + + + + + 47.000000 + + + + 129.000000 + 137 + + + + + 47.000000 + + + + 129.000000 + 132 + + + + + 48.000000 + + + + 129.000000 + 132 + + + + + 48.000000 + + + + 129.000000 + 130 + + + + + 49.000000 + + + + 129.000000 + 130 + + + + + 50.000000 + + + + 129.000000 + 131 + + + + + 50.000000 + + + + 129.000000 + 131 + + + + + + diff --git a/gpsbabel/test-all b/gpsbabel/test-all index 298c5de3f..cc0755e72 100755 --- a/gpsbabel/test-all +++ b/gpsbabel/test-all @@ -1,4 +1,5 @@ #!/bin/bash +set -e ### cross format read/(write) test ### diff --git a/gpsbabel/testo.d/energympro.test b/gpsbabel/testo.d/energympro.test new file mode 100644 index 000000000..a46b9788f --- /dev/null +++ b/gpsbabel/testo.d/energympro.test @@ -0,0 +1,6 @@ +# +# Basic energympro tests (readonly) +# +rm -f ${TMPDIR}/energympro* +gpsbabel -i energympro -f ${REFERENCE}/track/energympro.cpo -o gpx,garminextensions -F ${TMPDIR}/energympro.gpx +compare ${REFERENCE}/track/energympro.gpx ${TMPDIR}/energympro.gpx diff --git a/gpsbabel/vecs.cc b/gpsbabel/vecs.cc index 6a485b2f5..764c2797b 100644 --- a/gpsbabel/vecs.cc +++ b/gpsbabel/vecs.cc @@ -47,6 +47,7 @@ extern ff_vecs_t delbin_vecs; extern ff_vecs_t dg100_vecs; extern ff_vecs_t dg200_vecs; extern ff_vecs_t easygps_vecs; +extern ff_vecs_t energympro_vecs; extern ff_vecs_t garmin_vecs; extern ff_vecs_t garmin_txt_vecs; extern ff_vecs_t gcdb_vecs; @@ -1068,6 +1069,13 @@ vecs_t vec_list[] = { "xml", NULL, }, + { + &energympro_vecs, + "energympro", + "Energympro GPS training watch", + "cpo", + NULL, + }, #endif // MAXIMAL_ENABLED { NULL, diff --git a/gpsbabel/xmldoc/filters/options/transform-rptdigits.xml b/gpsbabel/xmldoc/filters/options/transform-rptdigits.xml deleted file mode 100644 index c035606b5..000000000 --- a/gpsbabel/xmldoc/filters/options/transform-rptdigits.xml +++ /dev/null @@ -1,13 +0,0 @@ - -This option lets you configure how many digits GPSBabel uses for numbering generated route point names. - - -When GPSBabel creates route points during the transformation process these points are sequentially numbered and named "RPTxxx" where xxx represent the number. By default GPSBabel uses 3 digits for these numbers. Rationale: This way a large number of route points can be uniquely named while the generated names are limited to 6 characters. This limitation is imposed by specific GPS-devices. - - -Using this option GPSBabel can be configured to use less or more digits for the generated names. This option is best used in conjunction with the rptname option. - - -Convert a GPX track to a GPX route, deleting the original track, using 2 digits for the generated numbers. -gpsbabel -i gpx -f track.gpx -x transform,wpt=trk,del,rptdigits=2 -o gpx -F route.gpx - diff --git a/gpsbabel/xmldoc/formats/energympro.xml b/gpsbabel/xmldoc/formats/energympro.xml new file mode 100644 index 000000000..ca4d57fef --- /dev/null +++ b/gpsbabel/xmldoc/formats/energympro.xml @@ -0,0 +1,16 @@ + + Input support for the Energympro training watches + file structure. + + +The +Energympro GPS sport watches present themselves as USB mass storage + devices. To get the training just connect the device using the supplied +USB cable to your computer and the device will show up as a removable device. +Your training data is in the Workout folder. + + + + gpsbabel -i energympro -f infile.cpo -o gpx,garminextensions -F outfile.gpx + +